2007-08-29

そのケーキて美味しいの?

最近、cakephpというphpのフレームワークと戯れている。元々、phpのフレームワークには興味があったのだが、フレームワークを使う理由というのが今ひとつなかった。使う理由はなかったが、自分の中で「フレームワークを使うべきでない理由」というのは存在していた。「フレームワークを使うべきでない理由」というのはフレームワークを使いだすと、フレームワークにべったりになってしまい、結果としてphpプログラミングの本質やフレームワークを使えない環境での仕事ができなくなるのではないかという危惧があった。とくにapache httpdのmod_rewriteを使うようなフレームワークでは、サーバ側でmod_rewriteに対応していなかったり、mod_rewriteを嫌う人間が管理しているサーバなどもあため、この手のフレームワークに手を出すことに躊躇していた。 今回、流行のAjaxで遊んでみる必要が出たため、極力javascriptを書かないですむフレームワークのcakephpを試してみた。cakephpもmod_rewriteを使ったり、独特なコーディングスタイルを取るため、あんまり気はすすまなかったが、ajaxへの対応やMVCモデルでのコーディングを勉強するためにもcakephpを選択してみた。他にはsymphonyやakelosなどのフレームワークがあったが、なんとなくcakephpを選んだというのが実情だ。 結果としては以下の点でcakephpを気に入ってしまった。
  • SQL文を書かなくてすむ
  • データベースのアソシエーションが強力
  • 内部のデータ管理が配列
とくに、配列でデータ管理をしているのが自分的にヒット。元々、自分のコーディングスタイルが配列を多用していたということもあり、cakephpのコーディングスタイルを比較的すんなりと受け入れることができた。あと、インチキオブジェクト指向なところも好き。いまいちオブジェクト指向プログラミングとラブラブになれないので、これを機にまともなオブジェクト指向を勉強しようと思いました。 対して、cakephpへの不満点は以下のとおり。
  • ドキュメントが少ない
  • 時々、意図しないSQL文が発行されている
日本語のドキュメントが少ない気がする。特にcakephpのドキュメント和訳が古い気がする。まぁ、英語のドキュメントやAPIリファレンスを読めばすんじゃうことなんだけどね。あと、データベースのアソシエーションの関係で意図していないSQL文が時々発行されている。とりあえず、unbindModelとかで気付いたところは修正しているけど、コード全体を常に頭に入れて、どのデータが欲しいのかを気にしながらコードを書く必要があるみたい。 とりあえず、今はcakephpには好印象。このケーキは美味しいです。cakephpを理解するためにwebアプリを書いているけど、フレームワークなしで作るよりも時間は短縮できている感じ。機会をみてTipsとかもこのblogに挙げていくようにしよう。

2007-08-13

libptp2のアップデート

以前のエントリでlibptp2がいい感じということだったんだけど、そのときの感想としては「いい感じなんだけど、単体での開発はしないんだろうな」程度だった。なので、あまり機能の追加とかは期待していなかった。まぁ、機能的には問題なかったし、バグにも遭遇しなかったのでまったく気にしていはいなかったんだけど。一応、プロジェクトのrssだけはsageに登録しておいて、動きがあればサイトを見に行くつもりにはしていた。 sageに登録といっても、自分的には完了したプロジェクト扱いにしていたので、とりあえず登録、むしろ、sageのフィードが増えたときのリストラ対象でした。そんな状態だったので、先日のアップデートは予想外の外。一応、changelogやrelease noteを読んだ限りでは、メジャーバージョンアップじゃなくてbugfixだよ、的なことは書いてあったけど、とりあえずソースを落としてきてrpmパッケージを作ってみた。動作自体はまだ試していないけど、あんまり問題なさそう。これからのバージョンアップも密かに期待しておこう。

2007-08-06

SunbirdとiPod nanoを同期したい

自分のスケジュールは全部iPod nanoに入れるようにしている。
理由は
  • iPod nanoは外出時に必ず持っている
  • iCalを使えばMacとの同期が簡単
  • 元々、iCalendar形式でスケジュールを管理していた
といった感じ。他にあると思うけど、この3つが主な理由。特に、必要に応じてOSを渡り歩く人種なので、どのプラットフォームでも理解できるiCalendar形式でのスケジュール管理というのが重要だったりする。

だけど、iPod nanoにスケジュールを入れるにはiCalを使わないと、悲しいことになるという頭痛のタネがあった。/Calendars/にicsファイルを突っ込めば、ちゃんとスケジュールとして認識してくれるんだけど、スケジュールの名前が反映されないという問題があった。これはiCalendar形式でスケジュールの名前を定義するタグが定義されていない(ような気がする)という原因があるみたい。(ここらへんはRFCを真面目に読んでいないからわからない)

だけど、最近はgoogleカレンダーでプライベート用のスケジュールを管理している。やっぱり、googleの提供するインターフェースはエレガントだし、ゆくゆくはgoogle APIを使ってマッシュアップしたいという目論みもある。一番いいのは自前のサーバを調達して、WebDAVで公開、ていうのが一番理想的だったりするんだけどね。俺WebDAVサーバはちょっとめんどくさいから、ペンディングしている。

実は以前、google カレンダーを使いだして、3秒後ぐらいに壁にぶつかっている。それはiCalにはgoogleカレンダーと同期する機能が提供されていない、という問題に起因していた。この場合の「iCalにはgoogleカレンダーと同期する機能」の定義は「iCalとgoogleカレンダーの両方で正しくスケジュールを編集できる」ということ。iCalでもgoogleカレンダーの内容は参照できるみたいだけど、第3者が公開しているスケジュールとして認識されて、スケジュールの変更、追加ができない。ここらへんで最初は挫折して、iCalべったりな生活を余儀なくされていた。

というわけで、sunbirdがgoogleカレンダーに対応したのを契機に真面目にiCalと喧嘩してみることにした。といりあえず、sunbirdにはiCalednar形式でスケジュールをエクスポートする機能がついているので、iPod nanoとの最低限の同期には問題ない。ただ、iPod nanoから見るとスケジュールの名前が「その他」てなるだけ。で、iPod nanoのスケジュール管理機能は音楽管理機能みたいにわけわかんないDBで管理していないと思うので、iCalがiPod nanoに吐いたicsファイルをじっと見てみた。どうやら、X-WR-CALNAME:というタグでスケジュールの名前をつけているらしい。タグの名前がXから始まっているのでAppleの独自拡張でしょう。多分。あと、diffをとってみて、sunbirdが吐いたicsファイルとiCalが吐いたicsファイルを比べて、足りていない部分を適当に書き足してみた。結果のdiffはこんな感じ。
--- google_calendar.ics    2007-08-06 19:57:32.000000000 +0900
+++ google_calendar-00.ics    2007-08-06 20:02:40.000000000 +0900
@@ -1,14 +1,19 @@
BEGIN:VCALENDAR
VERSION:2.0
+CALSCALE:GREGORIAN
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
+X-WR-CALNAME:スケジュールの名前
+X-WR-CALORDER:3
BEGIN:VTIMEZONE
-TZID:/mozilla.org/20070129_1/Asia/Tokyo
-X-LIC-LOCATION:Asia/Tokyo
+TZID:Asia/Tokyo
BEGIN:STANDARD
-TZOFFSETFROM:+0900
-TZOFFSETTO:+0900
-TZNAME:JST
-DTSTART:19700101T000000
+TZOFFSETTO:0900
+END:STANDARD
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:Japan
+BEGIN:STANDARD
+TZOFFSETTO:0900
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
多分、+X-WR-CALNAME:スケジュールの名前だけでいいと思うけど、とりあえずヘッダー部分で足りていないタグはいれてみた。
で、書き足したicsファイルをiPod nanoのディレクトリに入れたら、きちんとスケジュールの名前も認識して表示された。

とりあえず、満足。あとはこのパッチあての作業とか、iPod nanoに自動でコピーしてくれるスクリプトができたら幸せな生活が送れる気がする。