最近のことをメモ

約10日ぐらいで、仕様書の理解、DB設計、DBデータ用エクセル、独自フレームワークの理解(PHP&smarty)、70画面実装を行ってました。マジしんどかったけど、良い勉強になった。
フレームワークはドキュメントがほぼ無い状況だったので、ソースコードをひたすら解読していったんだけど、これが良く出来てて、慣れれば結構快適に開発できた。

フレームワークは、イイ!と思ったので、今月はフレームワークを適当に試そう。PerlならCatalystでいこうと思うんだけど、PHPもやってみたいのでフレームワークで探したらやたら出てくる。。。とりあえずEthnaあたりからやってみるか。

で、Smarty使ってて思ったんだけど、View側である程度ロジック入れれるのって最高。Html::Template使ってたから、View側では値の代入、ループ、IFの判定ぐらいしかやってなかった。
Smartyは、View側で改行変換、タグエスケープ、URLエンコード、日付形式指定、URL自動リンク、値の評価(if $hoge == 1みたいな)、などなど、便利な機能がたくさんあって、すごく楽だった。
PerlもTemplateToolkitってのがあるので、それを使っていこう。TemplateToolkitは、タグエスケープとか使えるけど、URL自動リンクがないみたい。で、探したらTTのフィルタってかなり追加開発されてて、結構日本人の開発者もコミットしてる。( http://cpanratings.perl.org/search?q=template
とりあえず自動リンクは、horiuchiさんのやつ
http://search.cpan.org/~horiuchi/Template-Plugin-AutoLink-0.03/lib/Template/Plugin/AutoLink.pm

あと、PHPにはfgetcsvって関数が標準であって、

$data = fgetcsv($handle,",");

ってやると、$data配列にcsvの各値が入ってくれる。便利!
エクセルの場合、値の中にカンマが入っている場合は、" "で囲まれるんだけどそれにも対応してた。
ただし、Linux環境で実行する場合、CSVsjisだと、結構文字化けがおきるので、phpの先頭らへんに下記を追記で対応(http://blog.development-network.net/ung/2006/09/php5fgetcsv.html)

setlocale(LC_ALL, 'ja_JP.eucJP');

で、CentOSでは対応できてたんだけど、Debianだとなぜか対応できなかった(たぶん、Debian側にはlocaleが入れられてなかったからだと思う。locale -a でインストールされているロケール一覧がでるんだけど、ja_JP.uecJPがなかったので)
結構fgetcsvは文字コード問題をはらんでいる様子。とりあえず下記のブログを参考にして対応。
http://yossy.iimp.jp/wp/?p=56



次は、MySQL
今月のデータだけほしい場合、下記を実行でOK
DATE_FORMAT関数(多分MySQL独自)で指定の箇所まで切り出すことが出来る。

select * from TABLE where DATE_FORMAT(recode_time,'%Y-%m') = DATE_FORMAT(CURRENT_DATE,'%Y-%m');

下記を参考
http://bellks-tec.cocolog-nifty.com/blog/2006/07/mysqldate_trunc_9b49.html


あと、WikiPedia日本語、英語版の解析ってこともやってたんだけど、それはまた今度書きます。
日本語3Gバイト、英語10Gバイトのデータを扱って、1000万レコードぐらいをうまく抽出してとか、Wiki内でリダイレクトされているのを判定して、それをDB内で紐付けるようにするとか。
とにかく実行して1日ぐらいかかる作業だったので、途中でセグメンテーションフォルトとか起こって萎えたり、DBのSelectが遅くて、マッチングさせたいキーワードだけ連想配列に突っ込んで処理したりと、大変なことが多かったけど楽しかった。