2012-03-03 16:33:15
PHP 5.4 がめでたくリリースされましたが, 5.2 なサービスやライブラリを保守している人もまだまだいることでしょう.
移行などを考えると, とりあえずは namespace も Closure も使わずクラス名は Foo_Bar_Baz とかアンダースコアで区切る PHP 5.2 なスタイルで書きつつ, PHP 5.3 や 5.4 でも動作するようにライブラリを書く, という選択肢を取ることになりますが, 全部の環境でテストするのは面倒くさい...
というあなたのための Travis CI というサービスについては以前書きました.
Travis CI で PHP 5.4 も CI する, PHPUnit も Behat もやる
そんな Travis CI ですが, PHP 5.2 に mbstring が入っておらず, そのせいで PHP 5.2 だけテストが通らない, なんてことが起こっていました.
[caption id="attachment_1762" align="aligncenter" width="552" caption="mb_strwidth が無くてテストがコケる"]
[/caption]
ですがそれも今は昔の話, いつの間にか mbstring 入りで PHP 5.2 環境が用意されるようになったようで, 問題無くテストが通るようになっていました.
[caption id="attachment_1765" align="aligncenter" width="543" caption="テスト通った!"]
[/caption]
コミット識別子を見ると, どちらも同じコードに対してテストが実行されていることがわかります.
この修正は, Travis CI の PHP 対応に尽力なさっている Loïc Frering さんによるものです.
他にも PHP の新しいバージョンが出るたびに定義ファイルを用意してくれたり, 足を向けては寝られない思いです. (ちなみにフランスの方らしいです)
ところで通常 Travis CI によるビルドを実行するには GitHub に対して push する必要がありますが, 今回の場合のようにコードに変更は無いが再度実行したい, という場合は, 以下の方法でできます.
- GitHub のリポジトリの Admin から Service Hooks, Travis と辿る
- Test Hook ボタンを押す
[caption id="attachment_1768" align="aligncenter" width="453" caption="GitHub 上の Travis CI の Service Hook 管理画面"]
[/caption]
これで push したときと同様の通知が行われ, Travis CI 上でのビルドを強制的に実行することができます.
そういうわけでまだまだ PHP 5.2 な方もどんどん Travis CI を作っていきましょう.
2012-02-26 14:41:21
久々に Padrino で開発していて, データベースには MongoDB, データ永続化層として Mongoid を使っています.
ところがインデックスの作成が上手くできませんでした.
Padrino x Mongoid という構成では, インデックスの作成に以下のコマンドを使います. (長い)
コンソール上では特に問題無く終わったかのようにみえるのですが, 実際は何も起こらずに終わっていました.
MongoDB のコンソールを見ても, 特にインデックスの作成が試みられたようなログは残りません.
調べた所, rake タスク自体に問題がありました.
これはモデルクラスを探索し, 見つかったものを Class オブジェクトの配列として返すものなのですが, モデルクラスのファイルの位置の指定に間違いがあり, 常に空の配列が返って来ていました.
これだと, 探索が行われるのが app/models/*.rb と /models/*.rb となってしまいますが, 実際には models/*.rb を探索する必要があります.
1 Byte の追加でうまく問題が解決しました.
テストはもともと無かったし, ファイルシステムが絡むからめんどいなーと思って書いてません.
すいません...
GitHub で報告したらすぐに取り入れられました.
gem でのリリースはまだですが, これもそんなに時間はかからないと思います.
どうも Padrino のモデルクラスの置き場所が, ./app/models から ./models に移ったようで, そのときの変更のときからずっと壊れていたようです.
多分 7 ヶ月間ずっと動いていなかったみたいなんですが, Mongoid ってあんまり使われていないんでしょうか...
ウェブサービスを作ろうとするとフレームワークのバグにハマり, それの修正で満足してしまって結局ウェブサービスが完成しない, という現象に名前が欲しい.
2012-02-25 12:37:46
社内で, 主に MySQL 初学者を対象とした勉強会をやってきました.
社内勉強会ということで, というと言い訳になりますが, いつも以上にゆるふわな内容となっています.
改めて見るとソースどこだよ? っていう情報がいくつかあるので反省.
(「RDBMS を使いつつ, NOSQL で最適化というパターンがほとんど」とかどこのことだよと. まぁ Tumblr とかはそれにあたるみたいですが)
あと, インデックスの仕組みを単純化して話すために B-Tree じゃなくて Binary Search Tree について紹介してますが, この辺も詳しい方の突っ込みが欲しい所です.
ところで勉強会に参加していてよく思うのですが, 勉強会というのは自分で発表してナンボだということです.
これは勉強会で人の話を聞くのは意味が無い, ということではなくて, 自分で調べたときの方が 30 倍ぐらい身に付くんじゃないか, という感覚によります.
どう考えても発表した方がコストパフォーマンスの高い学習ができる.
自分のスキルアップに繋がるからそれはそれでいいんですが, やっぱり社内でとなると, 貴重なみんなの時間を使わせてもらうことにもなるので, 出来る限り聞いてる人の身に付くような工夫を心がけたいなと思います.
そこで今回は, みんなで Binary Search Tree を作る, という参加型の企画を仕込んでみました.
作る, といってもいきなり実装するのはハードルが高いので, ひとりひとりに適当な名前 (タロウとかハナコとか) を順に挙げてもらい, ホワイトボードに Binary Search Tree を書いていくというものです.
(今思えばこれ写真に残しておけばよかった)
思いのほか盛り上がったし, ちゃんと理解してもらえたようでした.
Head First データ構造という感じでおもしろかったです.
あと, スライド中で紹介しているんですが, ハーバード大学のコンピュータサイエンスの授業の動画はオススメです.
教授のテンションがやたら高くて白熱教室という感じ. (ついていくのが大変そうな感じではある)
今回の発表では, Binary Search の文脈で 4:30 辺りの, 電話帳で Binary Search と Linear Search をやってる部分をみんなで観ました.