blogPHPでWEB+DBシステムの開発をやっています。2分42秒いよいよ2008年も今日一日を残すだけとなりました。年々一年が早く感じますが、無事に年末を迎えることができました。皆さん本当に一年ありがとうございました。今年一年の振り返りを。配列を回すならforかforeachかでした。はてブをそれほど集めたわけではないですが、コメントやTwitter等で反応が多かったのが印象に残っています。foreach」で検索すると4位(2008/12/31現在)に出てくるのがアクセスには寄与していると思います。今年一年で印象に残っているのは勉強会ですね。10月のCakePHPカンファレンスから12月のPython関西勉強会までは、staff・司会や発表、主催等々で深く関わりました。発表はやはり準備があるので、12月のように本業多忙+月2回発表は結構大変だったりもしたのですが、その準備が勉強会への予習にもなって、より勉強会を楽しむことができました。これは特にPython関西勉強会で感じました。昨年からも続けていることですが、参加した勉強会のレポートをblogで書くことができて良かったです。第3回CakePHP勉強会も盛り上がりました。見ると今年はコードを書く以外の表現方法を学んだ一年でした。仕事でもドキュメントを書く機会が以前より増えましたし、勉強会での発表資料作り、そして発表と色々な表現を模索しました。表現方法の幅が広がることにより思考の領域が広がり、より多角的に物事を見ることができるようになったと思います。これによりコードを書くのがより楽しくなりました。勉強会での発表に味を占めてしまった:-Dので、来年もこの流れを継続したいですね。PHP関連はもちろんですが、他言語や他分野の勉強会にも参加したいです。WebデザイナやWebディレクタのようなWeb開発に関わる他職種の勉強会に参加して、できれば発表してみたいですね。4分46秒12/26、暴風雪の影響で、新千歳空港が数時間離着陸できない状態になっていました。その日の朝に新千歳から大阪に帰る予定だったので、見事にその事態に直面することになりました。なんやかんやと動き回ったので、それをメモ。した方が良いよ、とかあればアドバイス下さい。システムは当てにならないかも10時発の飛行機に乗る予定だったのですが、8時頃には既に飛行機の離発着は停止していました。この事は札幌駅へ向かうタクシーのラジオで聞いていたのですが、JALのサイトを見ると軒並み「搭乗手続き停止」「遅延」となっているに関わらず、自分が乗る飛行機だけはなぜか「搭乗手続き中」となっていました。これを見て念のため空港に向かったのですが、やはり搭乗手続きは停止されていました。JALの方にも確認しましたが、システム障害?とのことでした。(障害というか入力ミスとかそういう話だとは思うけど。基本こう答えますね:-))混乱時はシステムには反映されていない可能性があるんで、現場での確認が大事です。空席待ち整理券を取る事態が把握できたら、とにかく空席待ち整理券をもらいに行きます。いつ天候が回復して飛行機が飛ぶかは分からないで、どの便でも乗れるように備えておきます。飛行機が飛び出しても、優先的に乗れるのは当然ながら、その便のチケットを持っている人です。自分の乗るべきだった飛行機が欠航になった場合は、空席待ちで乗るしかありません。今回は多くの便が欠航となったので、これを利用した人が多いと思います。心情的には朝一から待っている人が優先的に乗りたい気もしますが。翌日は昼から子供の発表会があるので。翌日の朝に発表会の準備があるので。当日、会社は仕事納めで、さらに忘年会の予定だったので。行動を決める空港に着いた時点で、14:00までは飛行機が飛ばない事が確定していたので、d.は無くなりました。14:00から飛行機が順調に飛べば、何とかc.が可能でしたが、天候を見ているとかなり吹雪いている状況だったので、これも望み薄でした。いうわけで、a./b.を睨んで行動を考えました。待って、関西方面行きの飛行機に乗る。待って、東京・名古屋行きの飛行機に乗る。その後、新幹線で大阪で移動。待って、東京・名古屋行きの飛行機に乗る。一泊して、翌日朝一で大阪に移動。当日は千歳で一泊して、翌日の飛行機に乗る。函館まで移動して、関西方面行きの飛行機に乗る。函館まで移動して、東京・名古屋行きの飛行機に乗る。その後、新幹線で大阪で移動。当日に帰れれば良いのですが、それが難しい場合は、なんとか本州(もしくは函館)あたりまではその日の内に移動するつもりでした。当初は翌日に天候が回復するかどうかも分かりませんでしたから。函館経由はtelで教えて頂いたもので、新千歳が回復の見通しが立たなかったので、かなりアリだったのですが、天気予報を見ると函館方面は暴風雪となったいたので、避けました。函館の天候に問題無ければ移動していたと思います。いうわけでアクロバット的な立ち回りもできず、結局おとなしく待つことにしました。先の便の予約を取っておく2.でも書きましたが、飛行機が動き出しても優先的に乗れるのは、その便のチケットを持っている人です。早めに先の便の予約を押さえておきます。4-4.を想定すると、翌日の便も予約を取っておいた方が安全です。予約だけなら、JALサイトで携帯から簡単に取ることができます。これはホントに便利です。飛行機が動き出したら当初の予定の14:00が過ぎた頃にようやく天候が回復して来たため、16:00頃から各方面に飛行機が飛びはじめました。その中には関西方面の飛行機もあったのですが、自分の空席待ち整理券の番号まで順番が回らなかったため、新千歳に止まっていた飛行機に乗る事ができませんでした。あとは他の空港から来る飛行機に乗るしか無いので、当日に乗れるかが微妙になってきました。事態は刻一刻と変化しているので、空席待ち付近で待つのが吉ですね。あったものの、関西方面の最終便に空席待ちで滑り込むことができて、当日夜中に自宅へ戻ることができました。12:20伊丹空港予定だったのが、22:15頃に関西空港に到着となりました。半日近くを新千歳空港で費やすことになったのですが、おなか一杯になりました。無事に帰ることができて良かったです。:-)JALの人も大変こういった事態になると搭乗客も大変ですが、JALの方々は本当に大変そうでした。(ANA等々も同じです)空席待ちカウンターの人だかりを整理しているときに、JALの方(リーダー?)が職員に向かって「もう少しだ。頑張ろう!」と檄を飛ばしていたのが印象的でした。大阪で行われたPython関西勉強会に参加してきました。初のPython勉強会参加&発表でしたので、とても新鮮でした。完全アウェイな感じかなと思っていたのですが、CakePHP関西勉強会でご一緒した方が何人か来られていたり、そもそもPython関西の雰囲気自体が馴染みやすいものだったので、ホームな気分で楽しかったです。中西さんPythonの事例は是非聞いてみたかった。Servletってあるんだ。Javaだけかと思ってた。全行にコメント!Frameworkとコーディング規約を厳密にすることで外注やオフショアに対応。ドキュメントは図を多用する。Pythonは結構習得しやすいbakerがDjangoに出会ったぁshin1x1dai_yamashitaさん、お誘いありがとうございました。_)m)djangoPHPはもう少し詰めると使えるような気もする。勉強会なのに、朝から謎の頭痛で辛かった。次はハンドル名で、jun-gさんお泊まり会のご案内こういうの参加してみたいが、泊まりは中々難しい。CodeIgniter幹事のdai_yamashitaさん(お疲れ様です!)幹事して、司会して、発表しては結構大変ですよね:-DPythonからPHPの世界に来てのあれこれ1,700万PV/mPHP勉強会でCodeIgniterのお話お待ちしてます。1.0増田さん少しかじっているのでDjango話が楽しい:-DDjango1.0の新機能を解説フォーム周りの表現力が強化されているController(views.py)でFormをゴリゴリ書いていくのは意外views.pyは一般的なControllerとは違うのかな?HTML_QuickFormと似た雰囲気。formtoolsの画面遷移制御が面白いDjangoはフォーム要素をオブジェクトで表現するに向かっている印象。CakePHPはもっとシンプルというか、ここまで面倒見てくれない。このあたりの制御は全て自分でやる。adminがモジュールが触れるようになったのが大きい冒頭でも触れましたが、Pythonの勉強会ということで正直少し身構えていた;-)のですが、明るい雰囲気でとても楽しかったです。勉強会の他にもお泊まり会(hackathon)やごはん会(飲み会?)などもあるようなので機会があれば参加してみたいと思います。Pythonに興味がある方は気軽に参加してみてはいかがでしょうか。今回は発表をするということでPythonやDjangoについて下調べしていったことで他の方の発表をより楽しむことができました。発表するというのはこういう効果もありますね。Python関西の皆さん、お疲れ様でした&ありがとうございました。1分50秒Python関西勉強会に向けてちょろちょろPythonを触っていて思うのが、インタラクティブシェル環境があることの利便性ですね。書いてぱっと動かせるのは学習にはもってこいです。-a」があるのですが、さらに便利なphshをふと思い出し、使ってみることにしました。動作環境はPHP5.2.8のソースインストールです。ダウンロードして起動するとE_STRICTなエラーがもろもろ出てきました。/home/shin/src/phsh.org:204phshはPHPで書かれているのでソースを見てみると、いちおうE_STRICTをdisableするコードが書かれていたのですが、ここが上手くE_STRICTフラグを落とせていないようでした。E_STRICTすると逆にE_STRICTが有効になってしまいます。いう事でこれを修正するパッチを作りました。“GPCS”な環境用に$_SERVERを$_ENVに格納する処理もくわえています。<p>google先生に聞いてみても誰もこの現象にぶち当たっていないようなので、phsh使う人はE_STRICTを有効にしてるという事でしょうね。phshはとっても便利に使わせて頂いてます。ありがとうございますー。[2008/12/23]:phshの最新版はcodereposにあるようです。(させざきさ、情報ありがとうございました。)こちらはE_STRICTの件は修正されているようです。1分14秒12/23に大阪市内でPython関西勉強会が開催されます。D会議室(30名まで収容可能)■日時:12月23日(火)祝日です。準備がありますので、13:30〜開場に致します。ごはんの会‎)なぜPythonの勉強会で発表?なわけですが(w、中の方からお誘いをうけて発表することになりました。発表内容は「PHPで全然問題無いですよ」と言って頂けたので、Pythonの「パ」の字も出ない発表にするつもりだっだったのですが、せっかくの機会なので今Djangoのチュートリアルをやっています。「Python」の単語くらいは出てくると思います:-p予定では、bakerがDjangoを触った印象なんかを話せれば良いかなとか考えています。以下の記事は思い違いしている箇所があります。slywalkerさんのblogに解説記事があるので、そちらも合わせてご覧下さい。(slywalkerさん、ありがとうございます!)思い違いしていた点は以下。コントローラ、モデルの命名規則Plugin名を先頭に付けるのはシステム的な強制だと思い込んでいました。book.cakephp.orgにもありますが、これは強制ではなく、推奨ですね。そもそもの勘違いはアクセスURLでした。↓の例だと「/admin/users/index」で、自動でadmin_users_controller.phpが読み込まれると思い込んでいました。(Routing.adminと同じノリで)なので、フレームワークがコントローラを探す際はURLから自動的にPlugin名を補完しているかと思っていました。ここがそもそもの間違いで、アクセスURLが「/admin/admin_users/index」であれば納得です。いうことで、ここは従来のままでokということですね。名前の競合を防ぐために、plugin名を先頭に付けるという方法が推奨されているという事でした。昨日の勉強会で話題になっていたPluginですが、1.2RC3では仕様が変わっているようで、従来の方法で構築したPluginは動作しなくなっているようです。変更点を調べてみました。コントローラ、モデルの命名規則これまではPluginのコントローラ・モデルは、ファイル名とクラス名にPlugin名を先頭に付ける必要がありました。RC3の仕様では、Plugin名を付けてはいけません。Plugin名が[admin]の場合は以下のようになります。コントローラ、モデルの親クラスさらにこれまではPluginのコントローラ・モデルの親クラスとして、%Plugin%AppController、%Plugin%AppModelクラスを定義する必要がありました。RC3の仕様では、任意となり、通常のAppController、AppModelクラスを継承してもokになりました。この場合は%plugin%_app_controller.php、%plugin%_app_model.phpを設置しなくても良いです。従来どおり基底クラスファイルを設置して継承するのもokです。基底クラスファイルはフレームワークが自動で読み込んでくれます。仕様変更の影響ですが、まず従来の仕様で作られているPluginは当然ながら動作しません。あと気になるのは、コントローラやモデルのクラス名からPlugin名が省かれたことにより、アプリケーション側や別のプラグインのコントローラ・モデルと名前が競合する可能性が出てきました。複数のコントローラを一度のHTTPリクエストで読み込むことは少ないかもしれませんが、モデルに関しては十分に考えられます。あとさらに問題なのがViewテンプレートです。app/plugin/%plugin%以下にviewsディレクトリを作る場合は問題無いのですが、app/viewsにPluginのViewテンプレートを設置したい場合は、コントローラ名がアプリケーションと競合すると、お互いが同じViewテンプレートを読み込む事になります。SLYWALKERPluginを作る時は競合しないようなクラス名を付ける必要がありますね。(PHP5.3ならnamespaceが使えますが。)ドキュメント化されていないこの変更がいつ施されたかは追いかけていないのですが、RC3ではこのような挙動になっています。残念ながら[2008/12/13]現在は、book.cakephp.orgのドキュメントも従来の仕様のままです。ドキュメントどおりに作ってもRC3では動作しませんので、ご注意を。Webにはあまりにもこの事についての情報が無いので、ここの人が追試して「使い方間違ってるよ」的な指摘をしてくれるのを願っていたりもします。0分41秒CakePHP関西勉強会での発表のためにアプリケーション実行の概要をシーケンス図で書いてみました。具体的にはDispatcher#_invoke()[cake/dispatcher.php]が、コントローラ・コンポーネント・ビュークラスの各メソッドを呼び出す流れです。これを見るとアプリケーション側の各メソッドがどの順序で呼び出されるかが分かります。図にあるUserControllerとUserComponentは、アプリケーションで定義しているものです。勉強会での発表資料に解説があるので、そちらも参考にして下さい。2分29秒CakePHP関西勉強会が無事に終了しました。東京で第一回CakePHP勉強会を行ってから1年経過して、ついに関西で開催することができました。一つの節目を迎えたようで感慨深かったです。今回ははじめて勉強会の幹事をやってみました。幹事らしいことはできませんでした(・・・)が、例によってやってみると色々と考えないといけないことがありました。