Home > アーカイブ > 2008-12

2008-12

2008年ふりかえり

この記事の所要時間: 242

いよいよ2008年も今日一日を残すだけとなりました。

年々一年が早く感じますが、無事に年末を迎えることができました。皆さん本当に一年ありがとうございました。

では、今年一年の振り返りを。

blogエントリ

今年1年に書いたエントリで最もアクセスが多かったのはPHP 配列を回すならforかforeachかでした。はてブをそれほど集めたわけではないですが、コメントやTwitter等で反応が多かったのが印象に残っています。Goolgeで「php foreach」で検索すると4位(2008/12/31現在)に出てくるのがアクセスには寄与していると思います。

個人的にはCakePHPのアプリケーションの流れをシーケンス図で書いたエントリが一番気に入っています:-D

やっぱり勉強会

今年一年で印象に残っているのは勉強会ですね。特に10月のCakePHPカンファレンスから12月のPython関西勉強会までは、staff・司会や発表、主催等々で深く関わりました。

発表はやはり準備があるので、12月のように本業多忙+月2回発表は結構大変だったりもしたのですが、その準備が勉強会への予習にもなって、より勉強会を楽しむことができました。これは特にPython関西勉強会で感じました。

また昨年からも続けていることですが、参加した勉強会のレポートをblogで書くことができて良かったです。(まあ散々勉強会で人に書け書け言っているので、当然なのですが:-))

コードを書く以外の表現を学んだ一年

総じて見ると今年はコードを書く以外の表現方法を学んだ一年でした。仕事でもドキュメントを書く機会が以前より増えましたし、勉強会での発表資料作り、そして発表と色々な表現を模索しました。表現方法の幅が広がることにより思考の領域が広がり、より多角的に物事を見ることができるようになったと思います。これによりコードを書くのがより楽しくなりました。

すっかり勉強会での発表に味を占めてしまった:-Dので、来年もこの流れを継続したいですね。PHP関連はもちろんですが、他言語や他分野の勉強会にも参加したいです。特にWebデザイナやWebディレクタのようなWeb開発に関わる他職種の勉強会に参加して、できれば発表してみたいですね。

2009年もどうぞよろしくお願いします!

天候不順で飛行機が飛ばなかったら

この記事の所要時間: 446

12/26、暴風雪の影響で、新千歳空港が数時間離着陸できない状態になっていました。

ちょうどその日の朝に新千歳から大阪に帰る予定だったので、見事にその事態に直面することになりました。

なんやかんやと動き回ったので、それをメモ。こうした方が良いよ、とかあればアドバイス下さい。:-)

1. システムは当てにならないかも

10時発の飛行機に乗る予定だったのですが、8時頃には既に飛行機の離発着は停止していました。この事は札幌駅へ向かうタクシーのラジオで聞いていたのですが、JALのサイトを見ると軒並み「搭乗手続き停止」「遅延」となっているに関わらず、自分が乗る飛行機だけはなぜか「搭乗手続き中」となっていました。

これを見て念のため空港に向かったのですが、やはり搭乗手続きは停止されていました。JALの方にも確認しましたが、システム障害?とのことでした。(障害というか入力ミスとかそういう話だとは思うけど。まあ、基本こう答えますね:-))

混乱時はシステムには反映されていない可能性があるんで、現場での確認が大事です。

2. とにかく空席待ち整理券を取る

事態が把握できたら、とにかく空席待ち整理券をもらいに行きます。いつ天候が回復して飛行機が飛ぶかは分からないで、どの便でも乗れるように備えておきます。

飛行機が飛び出しても、優先的に乗れるのは当然ながら、その便のチケットを持っている人です。自分の乗るべきだった飛行機が欠航になった場合は、空席待ちで乗るしかありません。今回は多くの便が欠航となったので、これを利用した人が多いと思います。

心情的には朝一から待っている人が優先的に乗りたい気もしますが。:-D

3. 要件を固める

代替案や最悪の事態を考えて、要件を整理しました。

以下、優先順位順で。

  • a. 翌日昼までに自宅へ帰る
    => 翌日は昼から子供の発表会があるので。
  • b. 当日中に自宅へ帰る
    => 翌日の朝に発表会の準備があるので。
  • c. 当日夕方までに事務所へ帰る
    => 当日、会社は仕事納めで、さらに忘年会の予定だったので。
  • d. 当日昼過ぎに事務所へ帰る
    => 当初の予定ではこれ。

4. 行動を決める

空港に着いた時点で、14:00までは飛行機が飛ばない事が確定していたので、d.は無くなりました。

14:00から飛行機が順調に飛べば、何とかc.が可能でしたが、天候を見ているとかなり吹雪いている状況だったので、これも望み薄でした。

というわけで、a./b.を睨んで行動を考えました。

  • 4-1. [b] とにかく待って、関西方面行きの飛行機に乗る。
  • 4-2. [b] とにかく待って、東京・名古屋行きの飛行機に乗る。その後、新幹線で大阪で移動。
  • 4-3. [a] とにかく待って、東京・名古屋行きの飛行機に乗る。一泊して、翌日朝一で大阪に移動。
  • 4-4. [a] 当日は千歳で一泊して、翌日の飛行機に乗る。(関西方面行き)。
  • 4-5. [b] 函館まで移動して、関西方面行きの飛行機に乗る。
  • 4-6. [b] 函館まで移動して、東京・名古屋行きの飛行機に乗る。その後、新幹線で大阪で移動。

当日に帰れれば良いのですが、それが難しい場合は、なんとか本州(もしくは函館)あたりまではその日の内に移動するつもりでした。当初は翌日に天候が回復するかどうかも分かりませんでしたから。

函館経由はtelで教えて頂いたもので、新千歳が回復の見通しが立たなかったので、かなりアリだったのですが、天気予報を見ると函館方面は暴風雪となったいたので、避けました。函館の天候に問題無ければ移動していたと思います。

というわけでアクロバット的な立ち回りもできず、結局おとなしく待つことにしました。

5. 先の便の予約を取っておく

2.でも書きましたが、飛行機が動き出しても優先的に乗れるのは、その便のチケットを持っている人です。ですので早めに先の便の予約を押さえておきます。4-4.を想定すると、翌日の便も予約を取っておいた方が安全です。

予約だけなら、JALサイトで携帯から簡単に取ることができます。これはホントに便利です。

6. 飛行機が動き出したら

当初の予定の14:00が過ぎた頃にようやく天候が回復して来たため、16:00頃から各方面に飛行機が飛びはじめました。その中には関西方面の飛行機もあったのですが、自分の空席待ち整理券の番号まで順番が回らなかったため、新千歳に止まっていた飛行機に乗る事ができませんでした。

あとは他の空港から来る飛行機に乗るしか無いので、当日に乗れるかが微妙になってきました。

ただ事態は刻一刻と変化しているので、空席待ち付近で待つのが吉ですね。(自分は半ば諦めてマッサージに行ってましたが:-P)

7. 結局、、、

紆余曲折あったものの、関西方面の最終便に空席待ちで滑り込むことができて、当日夜中に自宅へ戻ることができました。

12:20伊丹空港予定だったのが、22:15頃に関西空港に到着となりました。

半日近くを新千歳空港で費やすことになったのですが、おなか一杯になりました。。。まあとにかく無事に帰ることができて良かったです。:-)

JALの人も大変

こういった事態になると搭乗客も大変ですが、JALの方々は本当に大変そうでした。(ANA等々も同じです)

空席待ちカウンターの人だかりを整理しているときに、JALの方(リーダー?)が職員に向かって「もう少しだ。頑張ろう!」と檄を飛ばしていたのが印象的でした。

当日居合わせた人、JALをはじめ航空会社の方々、その他関係者の方々お疲れ様でしたm(_ _)m

Python関西勉強会に参加しました&発表資料

この記事の所要時間: 39

大阪で行われたPython関西勉強会に参加してきました。

初のPython勉強会参加&発表でしたので、とても新鮮でした。

完全アウェイな感じかなと思っていたのですが、CakePHP関西勉強会でご一緒した方が何人か来られていたり、そもそもPython関西の雰囲気自体が馴染みやすいものだったので、ホームな気分で楽しかったです。(体調さえ良ければ・・・)

Pythonによる業務事例紹介

  • 中西さん
  • Pythonの事例は是非聞いてみたかった。
  • MonotaRO [http://www.monotaro.com/]
  • ECは全部Python!基幹系も60%がPython!
  • Java => Python CGI => mod_python
  • Python Servletってあるんだ。Javaだけかと思ってた。
  • psp?Python Server Pages : JSP/ASPを参考
  • 全行にコメント!
  • Frameworkとコーディング規約を厳密にすることで外注やオフショアに対応。ドキュメントは図を多用する。
  • Pythonは結構習得しやすい

bakerがDjangoに出会ったぁ

  • shin1x1
  • dai_yamashitaさん、お誘いありがとうございました。
  • CakePHPの紹介とDjango体験記、CakePHPとDjangoの比較をつらつらと
  • Python&Djangoは一番自分が良く分かっていないので逆に楽でした:-D
  • 増田さんに色々教えて貰いました:-D(ありがとうございましたm(_ _)m)
  • djangoPHPはもう少し詰めると使えるような気もする。
  • せっかくの勉強会なのに、朝から謎の頭痛で辛かった。。。

LT1: 第1回 Pythonお泊まり会

  • 次はハンドル名で、jun-gさん
  • お泊まり会のご案内
  • こういうの参加してみたいが、泊まりは中々難しい。。。

LT2: CodeIgniter

  • 幹事のdai_yamashitaさん(お疲れ様です!)
  • 幹事して、司会して、発表しては結構大変ですよね:-D
  • PythonからPHPの世界に来てのあれこれ
  • 1,700万PV/m
  • PHP勉強会でCodeIgniterのお話お待ちしてます。

NEW in Django 1.0

  • 増田さん
  • 少しかじっているのでDjango話が楽しい:-D
  • Django1.0の新機能を解説
  • フォーム周りの表現力が強化されている
  • Controller(views.py)でFormをゴリゴリ書いていくのは意外
    views.pyは一般的なControllerとは違うのかな?
    HTML_QuickFormと似た雰囲気。
  • formtoolsの画面遷移制御が面白い
  • Djangoはフォーム要素をオブジェクトで表現するに向かっている印象。
    CakePHPはもっとシンプルというか、ここまで面倒見てくれない。このあたりの制御は全て自分でやる。
  • adminがモジュールが触れるようになったのが大きい

冒頭でも触れましたが、Pythonの勉強会ということで正直少し身構えていた;-)のですが、明るい雰囲気でとても楽しかったです。勉強会の他にもお泊まり会(hackathon)やごはん会(飲み会?)などもあるようなので機会があれば参加してみたいと思います。

Pythonに興味がある方は気軽に参加してみてはいかがでしょうか。

今回は発表をするということでPythonやDjangoについて下調べしていったことで他の方の発表をより楽しむことができました。発表するというのはこういう効果もありますね。

Python関西の皆さん、お疲れ様でした&ありがとうございました。

phshをPHP5.2系で使うパッチ

  • 2008-12-22 (月)
  • PHP
この記事の所要時間: 150

Python関西勉強会に向けてちょろちょろPythonを触っていて思うのが、インタラクティブシェル環境があることの利便性ですね。ちょろっと書いてぱっと動かせるのは学習にはもってこいです。

で、PHPといえば「php -a」があるのですが、さらに便利なphshをふと思い出し、使ってみることにしました。

動作環境はPHP5.2.8のソースインストールです。

ダウンロードして起動するとE_STRICTなエラーがもろもろ出てきました。

PHP Strict standards:  Non-static method PEAR::isError() should not be called statically, assuming $this from incompatible context in /home/shin/src/phsh.org on line 71
PHP Stack trace:
PHP   1. {main}() /home/shin/src/phsh.org:0
PHP   2. PHSH->main() /home/shin/src/phsh.org:204

phshはPHPで書かれているのでソースを見てみると、いちおうE_STRICTをdisableするコードが書かれていたのですが、ここが上手くE_STRICTフラグを落とせていないようでした。

手元の環境では、error_reporting=E_ALLだったので、E_ALL ^ E_STRICTすると逆にE_STRICTが有効になってしまいます。という事でこれを修正するパッチを作りました。

あとついでにvariables_order = “GPCS”な環境用に$_SERVERを$_ENVに格納する処理もくわえています。

— phsh.org 2008-12-22 18:34:38.000000000 +0900
+++ phsh 2008-12-22 19:14:38.000000000 +0900
@@ -2,7 +2,10 @@
google先生に聞いてみても誰もこの現象にぶち当たっていないようなので、phsh使う人はE_STRICTを有効にしてるという事でしょうね。。。:-D

# phshはとっても便利に使わせて頂いてます。ありがとうございますー。

phsh(PHPでシェル)を公開します – ベイエリア情報局

追記 [2008/12/23]:

phshの最新版はcodereposにあるようです。(させざきさ、情報ありがとうございました。)こちらはE_STRICTの件は修正されているようです。

http://coderepos.org/share/browser/lang/php/misc/phsh

Python関西勉強会で発表してきます

この記事の所要時間: 114

12/23に大阪市内でPython関西勉強会が開催されます。

開催日時
2008/12/23(火)13:30 〜17:00まで

場所
■場所:大阪産業創造館 D会議室(30名まで収容可能)

■日時:12月23日(火)祝日です。 13:00〜17:00まで使用可能
準備がありますので、13:30〜開場に致します。

第1回Python関西勉強会(おやつ会) ‎(梅.py : 梅田 Python ごはんの会‎)

なぜPythonの勉強会で発表?なわけですが(w、中の方からお誘いをうけて発表することになりました。

発表内容は「PHPで全然問題無いですよ」と言って頂けたので、Pythonの「パ」の字も出ない発表にするつもりだっだったのですが、せっかくの機会なので今Djangoのチュートリアルをやっています。

なので、多分「Python」の単語くらいは出てくると思います:-p

予定では、bakerがDjangoを触った印象なんかを話せれば良いかなとか考えています。

まだ参加枠には余裕があるそうなので、Pythonユーザ(私以外の発表はバッチリPythonの内容なのでご安心を:-D)はもちろんですが、PHPしか使ったことないよ、な方も関西で他言語・他フレームワークに触れる良い機会ですので是非ご参加下さい!

参加申込みは第1回Python関西勉強会(おやつ会) のサイトからどうぞ。

CakePHP 1.2RC3はPluginの仕様が一部変わってる?

この記事の所要時間: 317

以下の記事は思い違いしている箇所があります。

slywalkerさんのblogに解説記事があるので、そちらも合わせてご覧下さい。(slywalkerさん、ありがとうございます!)

思い違いしていた点は以下。

  1. [変更点:1] コントローラ、モデルの命名規則
  2. Plugin名を先頭に付けるのはシステム的な強制だと思い込んでいました。book.cakephp.orgにもありますが、これは強制ではなく、推奨ですね。

    そもそもの勘違いはアクセスURLでした。↓の例だと「/admin/users/index」で、自動でadmin_users_controller.phpが読み込まれると思い込んでいました。(Routing.adminと同じノリで)なので、フレームワークがコントローラを探す際はURLから自動的にPlugin名を補完しているかと思っていました。

    ここがそもそもの間違いで、アクセスURLが「/admin/admin_users/index」であれば納得です。

    ということで、ここは従来のままでokということですね。

  3. 名前の競合
  4. 名前の競合を防ぐために、plugin名を先頭に付けるという方法が推奨されているという事でした。

昨日の勉強会で話題になっていたPluginですが、1.2RC3では仕様が変わっているようで、従来の方法で構築したPluginは動作しなくなっているようです。

変更点を調べてみました。

[変更点:1] コントローラ、モデルの命名規則

これまではPluginのコントローラ・モデルは、ファイル名とクラス名にPlugin名を先頭に付ける必要がありました。

しかしRC3の仕様では、Plugin名を付けてはいけません。

Plugin名が[admin]の場合は以下のようになります。

  • 従来
app/plugins/
  + [admin]
       + [controllers]
            + admin_user_controller.php (AdminUserControllerクラス)
       + [models]
            + admin_user.php(AdminUserクラス)
       + [views]
            + admin_user/index.ctp
  • RC3
app/plugins/
  + [admin]
       + [controllers]
            + user_controller.php (UserControllerクラス)
       + [models]
            + user.php(Userクラス)
       + [views]
            + user/index.ctp

[変更点:2] コントローラ、モデルの親クラス

さらにこれまではPluginのコントローラ・モデルの親クラスとして、%Plugin%AppController、%Plugin%AppModelクラスを定義する必要がありました。

しかしRC3の仕様では、任意となり、通常のAppController、AppModelクラスを継承してもokになりました。この場合は%plugin%_app_controller.php、%plugin%_app_model.phpを設置しなくても良いです。

もちろん従来どおり基底クラスファイルを設置して継承するのもokです。基底クラスファイルはフレームワークが自動で読み込んでくれます。

  • 従来

app/plugins/
+ [admin]
+ admin_app_controller.php <== 必須 + admin_app_model.php <== 必須 + [controllers] + user_controller.php (AdminAppControllerを継承) + [models] + user.php(AdminAppModelを継承) [/code]

  • RC3

app/plugins/
+ [admin]
+ admin_app_controller.php <== 任意(なくてもok) + admin_app_model.php <== 任意(なくてもok) + [controllers] + user_controller.php (AppController or AdminAppControllerを継承) + [models] + user.php(AppModel or AdminAppModelを継承) [/code]

名前が競合

仕様変更の影響ですが、まず従来の仕様で作られているPluginは当然ながら動作しません。

あと気になるのは、コントローラやモデルのクラス名からPlugin名が省かれたことにより、アプリケーション側や別のプラグインのコントローラ・モデルと名前が競合する可能性が出てきました。

複数のコントローラを一度のHTTPリクエストで読み込むことは少ないかもしれませんが、モデルに関しては十分に考えられます。あとさらに問題なのがViewテンプレートです。

app/plugin/%plugin%以下にviewsディレクトリを作る場合は問題無いのですが、app/viewsにPluginのViewテンプレートを設置したい場合は、コントローラ名がアプリケーションと競合すると、お互いが同じViewテンプレートを読み込む事になります。

@see: CakePHP1.2RC3 Plugin使用の際のViewについて – 忍び歩く男 – SLYWALKER

Pluginを作る時は競合しないようなクラス名を付ける必要がありますね。(PHP5.3ならnamespaceが使えますが。。。)

ドキュメント化されていない

この変更がいつ施されたかは追いかけていないのですが、RC3ではこのような挙動になっています。

残念ながら[2008/12/13]現在は、book.cakephp.orgのドキュメントも従来の仕様のままです。ドキュメントどおりに作ってもRC3では動作しませんので、ご注意を。

ただWebにはあまりにもこの事についての情報が無いので、ここの人が追試して「使い方間違ってるよ」的な指摘をしてくれるのを願っていたりもします。

CakePHP アプリケーション実行の流れをシーケンス図で書いてみた

この記事の所要時間: 041

CakePHP関西勉強会での発表のためにアプリケーション実行の概要をシーケンス図で書いてみました。

具体的にはDispatcher#_invoke()[cake/dispatcher.php]が、コントローラ・コンポーネント・ビュークラスの各メソッドを呼び出す流れです。これを見るとアプリケーション側の各メソッドがどの順序で呼び出されるかが分かります。

なお図にあるUserControllerとUserComponentは、アプリケーションで定義しているものです。

勉強会での発表資料に解説があるので、そちらも参考にして下さい。
@see CakePHP関西勉強会終了しました&発表資料


cakephp_dispatcher__invoke_sequence.pdf

CakePHP関西勉強会終了しました&発表資料

この記事の所要時間: 229

CakePHP関西勉強会が無事に終了しました。

東京で第一回CakePHP勉強会を行ってから1年経過して、ついに関西で開催することができました。一つの節目を迎えたようで感慨深かったです。

今回ははじめて勉強会の幹事をやってみました。たいして幹事らしいことはできませんでした(・・・)が、例によってやってみると色々と考えないといけないことがありました。勉強になりました。

以下、つらつらと。

1. CakePHP アプリケーションの流れを追う

  • shin1x1
  • フレームワークがどう動くかを大枠で発表しました
  • 全体の流れが上手く伝われば嬉しいです:-D
  • 技術解説は難しい。。。まだまだ表現を考えないと。
  • デモを交えると良かったかも。
  • Dispatcher#_invoke()のシーケンス図はまた上げます。上げました。
  • Componentは是非活用してみて下さい。
  • 第1回Python関西勉強会参加者募集中です
  • ありがとうございましたー

2. フォームメールを生成するプラグイン

  • 腰が気になる(w slywalkerさん
  • Pluginの解説は少ないので、とても役立ちます!
  • 懇親会でもPluginに興味を持った人が多かったですね:-D
  • デモとソースを交えた分かりやすい発表でした。
  • $_schema()を書き換える方法は、Model#schema()をオーバーライドしてもok。
  • Controller/Modelを配置するディレクトリを分ける目的でPlugin使うと、Viewディレクトリが分離するのが悩み。。。

LT1. 開発事例と失敗談

  • keisonさん
  • 初のプレゼン!でも落ち着いてましたね:-D
  • かなり多くの案件でCakePHPを実用されていました。
  • 事例はほんと参考になります!
  • 失敗談は皆が通る道ですね><

LT2. CakePHPと私(仮)

  • m-takagiさん
  • CakePHPが一切出てこないネタ:-)
  • 湯布院旅行記(w
  • LL温泉の写真なのに、写っているのは食べ物とカメラばかり:-D
  • 今回も期待を裏切らない楽しいLTでした。さすがです。

懇親会

  • PHP関西勉強会の懇親会と同じ韓国料理屋さん
  • 岐阜から参加された方が!
  • PluginとComponentの話が飛び交ってました
  • スピーカー候補の方多数!(よろしくお願いしまーす)
  • m-takagiさんは次回LTに向けて食べ物の写真を例のカメラで撮影(w
  • あちこち移動して色々な方とお話できました。楽しかったです!

勉強会や懇親会ではネタっぽく話していましたが、是非発表する側へ回って欲しいというのは今回運営を行ったみんなが思っていることです。はじめはLTからでも良いので、是非手を挙げてみて下さい。

次回は春頃には何かやりたいですね。

参加された皆さん、発表・運営を行ったみなさん、お疲れ様でした!

Home > アーカイブ > 2008-12

検索
フィード
メタ情報

Return to page top