最近の活動
ここ三ヶ月ぐらい色々してた記録です。
9月
10月
今週xssの話ばかりしてた
— ななおく (@ooooooo_q) 2013, 10月 4
最近xssの話しかしてない
— ななおく (@ooooooo_q) 2013, 10月 11
11月
- XSS探す
- XSS見つける
- サイボウズにのりました http://cybozu.co.jp/specialthanks.html
- サイボウズセキュリティチャレンジに参加したけど何も見つけられなかった。
- XSS探す
- IPAに報告した
- こたつをだした
12月
XSS探す(予定)
code school
code school http://www.codeschool.com/
code schoolからThe Fundamentals of Designってコースが出来た、というメールが来ていた。 以前からサイトに登録はしていて、いつかそのうちやりはじめようと、ずっと思っていたのでこれを機会に始めてみた。ちょっと前に週末だけ無料だった時もあったけど、忙しかったので。
code school
githubと共同でtry gitなどを作っていて有名なプログラミング学習サイト。英語のみ。 言語仕様やそのフレームワークが中心で、アルゴリズムやブール演算についてなどのプログラミングの基本的な部分はない様子。(コース少ししかやってないで多分だけど。) 基本的にweb系(ruby,js,css&html,ios,他)の言語のコースが用意されていて、各コースの最初の部分は無料で試せる場合が多い。
学習系の中でも、デザイン、UIが凝っている方。ブラウザから擬似的なコンソールやエディタへ入力して、そのコードが正しければ次へ進む。ゲーミフィケーション的にポイントやバッジもある。 bacbone.jsやCoffeScriptのコースではなぜか歌が流れる。
入力画面サンプル
コースごとにインタフェースのデザインが違う。上の画像はCoffeScriptのコース。
料金
前述の通り、無料で幾らかはできるけども全部のコースやるには課金が必要。 月$25。今回課金した。なぜか$5の割引チケットを持ってたので$20。随分前にtry gitをやった時にもらったらしい。今は表記が見えないので割引はないのかもしれない。
確か去年は各言語ごとだったかでいくらって決まってて、クリアすると割引チケットもらえる仕組みだったはず。 今は言語ごとで縛らず、月いくらになって安くなってる。
経過
CoffeScriptのコースクリアした。
I earned the Completed CoffeeScript badge on @codeschool http://t.co/wpWzDEGxyt
— ななおく (@ooooooo_q) August 2, 2013
かかった時間は2時間前後ぐらい。CoffeScriptの事前知識はゼロではなかったので、時間は人によって前後すると思う。 CoffeScript、Object?keyなど、短いコードかけてやはり良い。たまに混乱するけども。
designのコースはちょっと触った感じでは中々難しい。本当に最初しかやってないけれど、こういった分野の文章にはどのフォントがいいかとか問題が出た。文化背景知らないとハードル高いのではと思う。勘+トライアンドエラーで答えている状態。
現在の状態。まだちょっとしかやってない。
アルゴリズム、というかプログラミングの本当に基礎的なことを学びたいならCodecademyのほうかまたはKhan academyだろうか、他にも今は色々有りそう。(Codecademyのコースでjsで普通にforでよいだろうというところをひたすら再帰で解く問題があった。今は知らない。)
今月中にjsとgitは終える予定。おそらく。
テストが通ったらニャーと鳴く
そんなmochaのレポーターを作ってみた。要するに保存するたびにテストしてニャーニャー言う。
node.jsから音声ファイルを再生する。
play.jsを使えればよかったのだけど、手元の環境では動かなかった。 仕方ないのでコマンドラインからなんとか再生できないか調べてたら、powershellからならいける様子。
というわけで書いてみた。
var exec = require('child_process').exec, script; // Use COM objects to get filesystem information script = '$c = New-Object Media.SoundPlayer(\'ファイル名\');$c.PlaySync()'; exec('powershell.exe -Command "' + script + '"', function(err, stdout, stderr) { console.log(stdout); }).stdin.end();
でいけた。windows vista以降であれば、たぶんこれでできる。
参考
- play.js
https://github.com/Marak/play.js/ - コマンドラインで .wav ファイルを再生する
http://kayuitoko.blog129.fc2.com/blog-entry-37.html - Windows and Node: PowerShell
http://dailyjs.com/2012/06/21/windows-and-node-6/
reporter書く
nyancatのreporterを参考にしながら、jsで書いていく。 成功時にnyaaa.waveを再生し、失敗したらnyeee.waveを再生する。
nyaaa.js
var exec = require('child_process').exec; exports = module.exports = Nyaaa; function Nyaaa(runner) { runner.on('pass', function(test){ console.log('pass'); play('nyaaa.wav'); }); runner.on('fail', function(test, err){ console.log('fail'); play('nyeee.wav'); }); runner.on('end', function(){ console.log('end'); }); } function play( filename ){ var script = '$c = New-Object Media.SoundPlayer(\''+__dirname +'/sounds/'+filename+'\');$c.PlaySync()'; var command = 'powershell.exe -Command "' + script + '"\n'; exec(command, function(err, stdout, stderr) { console.log(err); }) .stdin.end(); }
参考
- mocha
https://github.com/visionmedia/mocha - Third party reporters
https://github.com/visionmedia/mocha/wiki/Third-party-reporters
にゃーをつくる
猫の鳴き声の音声ファイルを作る。 手元に猫がおらず、また野良猫は目を合わせると大体逃げられるのでCeVIOさんに代わってもらった。 CeVIO(チェビオ)は文章を読み上げてくれてwavファイルで出力できる。元気いっぱいや悲しいといった感情を指定できる。
こんな感じのGUI
にゃーとそのまま入力すると求めてるものと、なんか違うなーという気分になる。読み上げ用のソフトだから、あまり猫っぽくはない。 にゃあああもにゃゃぁもなど試してみたが、結局「にゃあー」にして話すスピードを下げるのに落ち着いた。 成功時は元気いっぱいにし、失敗したときは悲しげにしてみた。
参考
- cevio
http://cevio.jp/
ファイル配置
node.jsのモジュールがインストールされている場所を調べる。
>npm -g bin C:\Users\ユーザ名\AppData\Roaming\npm (not in PATH env variable)
/npm/node_modules/mocha/libs/reporters/ ... nyaa.js ... /sounds nyaaa.wav nyeee.wav
ファイルをこんな構成で配置。reportersの中に作ったファイルを入れてやれば動く。 だけれどwavパス指定などにつまづいて、ここら辺調べるのに結構手間取った。
実行
mohca --reporter nyaa --watch ファイル名
これでファイルを更新するたびにニャーニャー鳴いてくれる。
やってみると、起動時からにゃーとなくまで2,3秒あるがちゃんと再生される。 テストが2,3個の時は、ほぼ同時に再生されるので合唱したように聞こえて、失敗が混じっていると不協和音になるので気づく。 10~ぐらいになってくると、再生されるタイミングがずれてくるのでにゃーにゃーいうようになる。
nyancatのレポーターってどうかかれてるんだろうという好奇心と、cevioいじって楽しかったのが混ざった結果こうなった。 mochaに自作のreporter追加してnpmに登録なんてこともできるようなので、もうちょっとちゃんと書き直したらやってみるかもしれない。
windowsでnode.jsをインストールしてcoffescriptとchaiとmochaでnyancatするまで。
メモも兼ねて。所要時間は10分ぐらい。
概要
- windowsにnode.jsをインストール
- coffeescript導入
- mocha導入
- nyancat
windowsでnode.jsインストール
http://nodejs.org/ からダウンロードする
2013/5/8時点での最新版は v.0.10.5
installのボタンを押すと、自動的に node-v0.10.5-x86.msi がダウンロードされる。
ダウンロードされたファイルを実行する。
設定がいくつか出てくるが特に何も変えずにnextを押し続ける。
インストールが終わったら、コマンドプロンプトからnodeで実行できることを確認する。
windowsではインストール時に、node.jsのパッケージマネージャであるnpmも一緒にインストールされる。
windowsと書いているけれど、他のOSでもそれほど変わらないはず。
node.jsはファイルIOや通信系など時間がかかる場所の処理は非同期になる。
この処理が終わった後にこっちの処理をしてほしい、といった場合はasyncなどのモジュールを使うと出来る。
coffeescript導入
コマンドプロンプトに下を貼り付けて実行
npm install -g coffee-script
必要なファイルがだーっと入る。成功したらパスが通る。
coffescriptのコンパイルと実行
sample.coffee
sum = (a, b)-> a + b console.log sum 1,2
コンパイル
coffee -c sample.coffee
コンパイル結果 sample.js
// Generated by CoffeeScript 1.6.2 (function() { var sum; sum = function(x, y) { return x + y; }; console.log(sum(1, 2)); }).call(this);
実行
node sample.js
または
coffee sample.coffee
結果
3
mochaとchai導入
javascriptのテストツールとしてjasmineとか色々あるけれど、とりあえずmochaとchaiを使う。
npm install -g mocha npm install -g chai
chaiはテストするときのassertion。テスト結果と期待値を比較するために使う。
mochaはテストをまとめるために使う。
テストサンプル
テストするファイル sum.coffee
exports.sum = (a, b)-> a + b
exportsに関数などを渡してやると、他のファイルからも読み出せる。
詳しくはこの辺りを参照 http://nodejs.org/api/modules.html
テストコード test.coffee
chai = require 'chai' assert = chai.assert put = require './put' describe 'mocha test', -> it 'sum', (done)-> assert.equal put.sum( 1, 2 ) , 4 done()
最初に必要なファイル読み出す。
describeのなかにitを書いてその中にテストを書く。
done()が実行されるとテストが終了する。書かないとテストが終了せず、実行され続ける時間切れで失敗になる。
テスト方法
mocha --compilers coffee:coffee-script test.coffee
cofffescriptのファイルをテストする際には--compile:coffee-scriptが必要
コンパイルをしなくても自動でcoffescriptでテストしてくれる。
nyancatでテスト方法
mocha --reporter nyan --compilers coffee:coffee-script test.coffee
watchをつけると、ファイルが保存されるたびにテストされる。
mocha --watch --reporter nyan --compilers coffee:coffee-script test.coffee
テストが通った時
テストが失敗した場合
ファイルが保存されるたびに一喜一憂してくれるようになる。
テストが増えるとアニメーションのように動いてくれる。
気をつける点
'--watch'をつけていると、テスト実行時にコンパイルに失敗してた時、テストコードないでエラーが発生した時に-watch自体が落ちる。エラー自体が出力されないこともあるので、原因が特定しづらいがその場合は'--watch'を付けずにテストを実行する。
nyancat以外の出力
nyancatは見ていて楽しいけれど、どこでテストが駄目だったか把握したいときは不便。
mochaの出力一覧はこちら。いつもはspecを使っている。
出力は自作することもできる。エラーがあったら音が出るようにすると楽しいかもしれない。
モジュールを扱う
package.jsonを使う。
npm init
でpackage.jsonがつくられる。
使用するモジュールなどを書く。
npm install
package.json内で指定しているモジュールが自動的にインストールされる。
現在何がインストールされてるか見たい場合は
npm list
coffe-scriptやmochaなどは-gをつけていれたもだけみたい場合は、npm -g listで見ることができる。
使わないものをアンインストールするときは
npm uninstall モジュール名
詳しくはこの辺り
https://npmjs.org/doc/json.html
gruntを使う
ファイルが保存された時に自動実行したい操作などをまとめて設定できるので便利らしい。
まだ使ったことがないので、そのうちやってみる。
リンク
node.js
http://nodejs.org/
CoffeeScript
http://coffeescript.org/
chai
http://chaijs.com/
mocha
http://visionmedia.github.io/mocha/
何かわからないところあったらググるかstackoverflow、またはQiita。
node.jsとcoffee-scriptは日本語の資料も多い。
node.jsはなんとなく扱いやすいので楽しい。javascript書いてる感覚でcoffeescript書いてたら結構コンパイルエラーに引っかかった。
lint系の機能を使うか、IDEつかえばそんなでもないはず。
あとwindowsのコマンドプロンプトで色の設定面倒だしあんまり綺麗にならない。
5/19
タイトルがchaiではなく、chatになっていたので訂正。
sample.coffeeにconsole.logがなかったので追加