CakePHP版Redmine candycaneのデモサイトを公開しました

http://my.candycane.jp/

CakeFestの興奮冷めやらぬ日々ですが、cake3の公開を記念するつもりでcandycaneのデモサイトを公開します。
これまではbasic認証付きでしたが、完全に公開します。
まだまだ不具合が多いですが、アカウントの登録や操作などを自由に行っていただいてかまいません。

コード本体についても来週くらいには公開するつもりです。
お試しあれ。

CakeFest Berlin 最終日のまとめ

飛行機でまとめを書くタイミングになってしまったので少し間が空きました。
色々な出来事がありすぎてまとめづらいですが、セッションの概要を中心に簡単に。

Keynote: The Future of CakePHP(Nate Abele)
おそらく今回のCakeFestでもっとも盛り上がったセッションでした。直前の告知だったにもかかわらずustreamでも延べ80人以上がリアルタイムで見守っていました。
まずは「CakePHPの嫌いなところを教えてくれ」という切り出しで始まり、モデルの機能(オブジェクト化、複合キー、サブクエリ)やクラス名の競合などなど様々なトピックが。そして「Cake3」がnateから発表されて以降は会場からは度々歓声と拍手が!

  • PHP5.3以降
  • すべてのコードを0からスクラッチ
  • クラス階層をnamespaceで整理
  • パフォーマンスも向上
  • 依存関係は少なく、Cake3をライブラリとして使う事も可能
  • 基本的な使い方や作成するコントローラーなどの仕組みはほとんどそのまま

そしてCake3のコードはすでに公開されています。今後のスケジュールなどについてはまだまだこれからの段階ですが非常に魅力的な内容です。録画された動画もいずれ公開されると思いますが、インターナショナルな盛り上がりを肌で感じることができたセッションでした。

JavaScript for PHP Developers(Felix Geisendorfer)
Debuggle.comのFelixが再びの登場。ProtoTypeやJQueryなどについての利用状況をアンケートしつつ開始。
デモ的な部分の比率が高く、前半部分はJSをコントローラーやアクション毎に自動的に読み込ませるように場合の挙動とその実現方法についての解説になりました。(後で聞いたんですがFelixはかなりJavaScriptが好きなそうです)
後半はそれらのソースをgitを使って管理する作業の流れや概念の説明になりました。
実は最終日のセッション開始前にJoenとGarrettによるgit入門のhomeworkのセッションがあり、gitが話題に上るのは3回目になります。

うーんやはり時代はgitだなぁと思わされました。

ランチ
この日はコアチームのJoelと同じテーブルでのランチになりました。ざっくばらんにいろいろな話をしましたが、内容もさることながらJoelのイケメンっぷりと柔らかい物腰に感服です。同じテーブルにはオーストリアから来た2人とアメリカ、フランスといった顔ぶれだったのでやはり生活についてや言語についての話題がたくさんでました。


Test & API-driven Behavior Development(Alexander Morland)
ノルウェーから参加したコアデベロッパのalkemanことAlexanderの発表。内容はロジックをあるべき姿にする為の作業フローといった内容です。個人的に業務の内容に非常に近かったので興味深い内容です。

  • ユニットテストはプログラムを分割し、統制する為に必要
  • プログラムを書く前にAPIを検討することに時間をかける
  • 特に使い方に着目する
  • テストは同時に書くか、分担するなどして書く

内容も面白かったですが、alkemanの話し方も面白く「気楽に聞いてください」みたいなトーンでよかったですね。


Internationalizing CakePHP Applications(Mariano Iglesias)
ワークショップでもたびたび講師を務めたMarianoが登場。多言語が当たり前の南米らしい形で国際化についての説明を行いました。
また実は翌日が誕生日!であることを発表し「遠慮せずにプレゼントしてくれ」的なネタで笑いを。
国際化については利用状況にムラがある部分もあると思われるためか、Cakeで用意されている国際化機能を一通り紹介していくような形です。

  • gettextの利用方法
  • poeditなどを利用した翻訳の流れ
  • TranslationBehaviorを利用したDB翻訳の流れ
  • キャッシュを利用する際などの注意

個人的にはthechawやcandycaneなどで国際化を多用しているので再確認のような形でした。またMarianoの発音や話し方が面白く退屈せずに聞くことができました。



Building Custom APIs(Charlie van de Kerkhof)
時間調整の都合があったのかあっという間に終わってしまったセッションです。
内容はREST風に動くWEBAPIのアプリケーションを実装する流れを示すといったものです。ステータスコード的なものやAPIとして稼働させるための実装をAppControllerにどんどんいれていったのが印象的です。
そういった処理をComponentにして再利用するところまで行くかなと思いましたが、そこまでの話はなくまずは動くものが出来るまでの流れといった形です。


High Performance CakePHP(Joel Perras)
ランチでも一緒だったコアデベロッパのjperrasが再登場。ワークショップでは具体的な設定変更などを使用したデモをnateがやっていたので、もうすこし広い視野での戦略についてのセッションでした。
ビールを飲みつつ、途中で質問した人にもビールを進呈するという砕けた雰囲気も特色です。セッション開始前に「Who's next ?」と演台から質問したら誰かがスーパーマリオの物まねで「It's me, Maaaaarioooo」といって爆笑したあたりからおかしくなっていたのかもしれません。

ポイントは下記のとおり

  • LAMPから/G?LA{1,2}M{1,2}P/へ
  • とにかく分析して原因を特定してから対策を打つ
  • キャッシュの戦略
  • キャッシュの種類
  • WebServerについて

デモなどはなく話だけの内容なのでまとめづらいところではありますが、さまざまなツールやソフトウェアに対してのJoelの認識や反応などがうかがえて面白いセッションでした。TokyoTyrantがまたまた普通に出てきましたし、一方でnginxはいいけど英語のドキュメントが無くて大変だねーという話に会場が同意していました。
逆にいうとTokyoTyrantは十分な情報があるんでしょうか?


クロージング
4日間に及んだイベントの締めくくりとしてスポンサーや功労者への感謝、そして今回のイベントのロゴが入ったTシャツプレゼントの抽選会。
抽選はGarrettがその場で作った抽選アプリに全員がエントリーし、コマンドラインタスクから抽選するという簡単なのか手が込んでいるのかよくわからない方法で決定。そのあたりもひっくるめて盛り上がりました。


懇親会
最終日という事もあり、近隣諸国の方々はその日の飛行機で帰国してしまいました。人数は少し少ないですがコアチームも交えて時にまじめに語らい、時に大はしゃぎしながら宴は続いたのでした。。。。

CakeFest Berlin 3日目(カンファレンス1日目)のまとめ

狙った時間に起きられなくなりました。まだカンファレンスの最終日が残っていますが相当疲労が大きいです。とはいえ今しかないのでまとめておきます。


Keynote (Garrett Woodworth)
日本でもおなじみのGarrettのセッション。内容的には昨年日本でやったものとほぼ同じで、スライドの構成が変わっていました。
特にユーザーの活動やサイトにビジターについての数字が加えられていて具体性が増した形です。
またCakePHP1.3がPHP5専用になる事がアナウンスされたことも見逃せないポイントです。


Demystifying Webservices in CakePHP (Joel Perras)
コアチームの1人であるJoelによるWEBサービス連携についてのセッション。WEBサービス連携のインターフェースとしてよく使われるXMLJSONについての考察から始まりました。さらにJSONを扱う実装を直接してしまうと冗長で、テストもしにくいコードになってしまうのでDataSourceとして実装する例へと発展していきます。
最終的にはDataSource実装の流れやフックポイントを紹介していくような形になりました。
また発表の中でTokyoTyrantの話が繰り返し出てきたのも印象的です。Dutch PHP Conferenceでも取り上げられていましたし、Tokyo Tyrantは世界的にも認知されたKVSになっているようです。さらにそれ以上にホットなのがCouchDBですね。


ランチ
今日も会場内のレストランでのランチになりました。座席などは決まっていないので適当に。オーストリアから来た2人にドイツ人が2人、フランス人が一人にnateといっしょというテーブルになりました。話題はPHPには関係なくそれぞれの都市の住宅事情やチップ、ベルリンについての話などが多かったです。料理もおいしいですし、あっという間に時間が経ってしまいます。
※日本でもランチ懇親会はやったらおもしろそうですね


CakePHP Project Management with GitHub & Lighthouse (Felix Geisendorfer)
Debuggable.comの人でコアチームの一人のFelixの発表です。彼はベルリンっ子なので今回のイベントの運営にも大きな協力をしているようです。
21歳の若さではありますが、先進的なツールや旧来のツールの特徴を踏まえてチーム開発の在り方について講演していました。
メールやメッセンジャーが多すぎて仕事がはかどらない話は本当にあるある、と思います。またメールですべきやりとりとそうでないやりとりについての説明も非常に説得力があり自分でも気をつけたいと思うポイントが多かったです。
スライドにところどころ入る写真のセンスも良かった。



Baking Master Class: Write programs that write programs (Neil Crookes)
bakeのテンプレートを拡張してリッチなbakeをやってみようというセッションです。内容的にはおおむねベーシックな形だったので特に特筆すべきところはありません。
途中で起こったトラブルにたいする会場からの助言が鋭かったり、デモの過程も含めてgithubにすべて公開している点は新鮮でした。(ついでにgithubのアカウントもとっちゃいました)


Multi-tenancy with CakePHP(Robert Scherer)
ドイツ語でCakeのオライリー本を出した方の発表。実際の開発での事例発表という形です。
クラッチされていた巨大なコードを抽象化し、モジュール化してCakeに載せたストーリーの紹介です。
印象的だったのはユーザーごとに利用するアドオンやモジュールを選択してカスタマイズして動作するという形になっており、CMSやブログエンジンのような複雑な実装をしていたようです。


The CakePHP Media Plugin(David Peresson)
コアチームの一人であるDavidの発表です。
このMediaPluginは全くしらなかったんですが、ファイルのアップロードや画像サイズや種別に対するvalidationなどの協力な機能をもったpluginのようです。
詳細はだれかが勉強会などでレポートしてくれればと思いますが、ファイルのアップロード処理を自分でスクラッチするのは止めたほうがよさそうです。
プラグインでやれば画像の世代管理やリモートへのコピーなどもできちゃうんですから。


CakePHP on Cloud(Dirk Brunsicke)
Cloudというタイトルですが内容的にはAssemblaというサービスの紹介です。発表者はドイツの方なんですが英語でのスピーチに急遽変更して対応したようです。
このサービス知らなかったんですが、githubのようにgitを使いつつ、CIやEC2へのデプロイなどをWEB上からオペレーションできるすごいサービスです。おまけにCakePHPも自動でインストールできるようで!


懇親会
3日目の懇親会は地元のスポーツセンターでのボウリングでした。外国人は体格がいいだけあって豪快なプレースタイルです。特に懇親会ではフランスから来たユーザとたくさん話をしていました。1次会で帰ったんですがそれでも1時くらいで、ほとんどの人は3時か4時まで。。。。そしてなんとnateは徹夜でkeynoteに挑むことに!!!

CakeFest Berlin 2日目のまとめ

翌日になりましたが早起きしたので昨日のまとめを簡単に。
初日の分には書きませんでしたが、一日の流れにそった感じで紹介。


9:00 - 9:30 出席確認&モーニング
会場に着いた参加者には名前を印刷したシールが渡されるので各自、胸に貼ります。これは主催者も貼っているので、名前が分からない人は見ればわかるし話のきっかけにもしやすいので面白いです。また飲み物とおやつはいつでもつまめるようになっているので、朝はコーヒーなんかを飲んでいる人が多いですね。
名札のロゴも今回の為に書き起こしたみたいでかわいいです!(主催者はTシャツも作った模様)

Power Tools:Console Development
CakePHPが持っているコンソール系の機能の紹介とデモのセッション。講師はmgiglesiasことMarianoが担当。特に印象に残ったのはDispacherのオブジェクトをShellの中で作ってアクションをコールするという実装。コマンドラインからの実行だとHTTP_HOSTみたいな値が足りないのでそのあたりは事前に設定するという力技っぷりがすごいです。

サンプルコードはgithubに上がっていました。(chawじゃないんかい!)
サンプルコードへ


Foundation:Authentication
これはずばりAuthComponentの利用例の紹介のセッションです。講師はNateが担当。流れとしてはマニュアルに載っているのとほぼ同じで、componentにとりあえず指定してメソッド作って・・・といった流れ。SQLのログを確認したりしながらパスワードがハッシュ化されている事やハッシュロジックの変更方法などを紹介。
また付随してユーザー登録時にパスワードの確認(2回入力させるやつ)はconfirmのvalidationルールで実装できる例を紹介していました。こういった確認や規約同意のチェックボックスに紐づかないパラメータに対してもvalidateをする事をためらう必要はないようです。(そういう趣旨の質問をする人もいなかった)


Foundation:Internationalization
その名のとおり国際化対応についてのセッションで、講師は再びMaliano。個人的にgettextを使った国際化はすごく多用していたのですが、メインはtranslation behaviorの話でした。たぶんDBまで使った国際化を実装する例って日本では少ないんだと思いますが、英語とスペイン語みたいな組み合わせで療法実装するニーズは欧米だと高いのかもしれません。
これも実際の挙動にそってテーブルをJOINして翻訳する様子などを紹介していました。


Power Tool:Client Scripting
JavaScriptなどの扱いについてのセッション。このあたりで時間が押し気味になりちょっと巻きが入ってきます。JavaScriptヘルパーでなくResourceヘルパーを使うとルールベースで読みこむスクリプトを切り替えたりgzip圧縮に対応したりキャッシュのコントロールもできる!というような話でした。要点ではないですがMalianoとNateで「Cache」の発音がだいぶ違うのが面白かったです。


ランチ
ランチは会場内のレストランでみんなで取ります。事前にメインの料理を2つの中から選んで取りまとめが入ります。(たぶん、ベジタリアンへの配慮)初日は言葉だけのメニューだったんですがみんなが説明を求めるのが大変だったみたいで二日目はスライドをつかって画像でメニューを紹介していました。こういう配慮って日本のイベントで見たことないので新鮮でした。

料理もおいしく、ざっくばらんにいろんな話をしながらの食事は楽しいですね。多国籍に人が集まるのでなんだかんだで国の話とか法律の話とか失業率の話とかそんなのが多かったです。考えてみると天候の話とかは鉄板ネタと言ってよいですね。


Foundation:Caching
CakePHPが持っている各種キャッシュの機能の紹介です。講師はMaliano。ここまでは実習メインだったんですがわりとスライド寄りの説明になっていました。具体的にはCakeの持っているキャッシュがCacheEngineを使ったキャッシュ、Viewキャッシュ、QueryCacheなどがあってそれぞれ利用のポイントが違うよという話です。内容的にもみんな理解していたようであまり質問なども出なかったです。


Power Tool:Improving Performance
おそらく2日目の目玉であるセッションでnateが担当です。
作成したアプリケーションに対するチューニングを順番に行っていくというデモです。最初にチューニングに関するありがちな誤解として「神話」を挙げています。

  • 無駄な変数をコピーしない
  • ダブルクオートはシングルクオートにする
  • switch は if に変える

元ネタは別のブログか何かのようですが、こんなことに時間を費やしても効果が低いというのがまず前提条件。その上でけっきょくはIOをどれだけ削っていけるかが重要であるというような話でした。
デモはmacで行っていましたが、数値の計測をしながら少しづつIOを削っていき最終的には並列リクエスト数50で5トランザクション/秒くらいまで持っていっていました。また細かいコードの変更はせずに設定だけでもここまではできるし、それで十分でしょ?というようなトーンで細部を潰していくような日本的アプローチとの違いを感じた気がします。


おまけ
セッションが終わった後に庭でコアデベロッパー達が2本あったガーデンフォークを投げて遊び始めて「Fork Master」なる名前を付けてその場で公式サイトをGarrettが作っていました。たぶん1時間以上はフォークを投げていたと思います、彼ら。
のんびりした雰囲気のわかる出来事です。

フォークを構えるgwoo

CakeFestBerlinにこれから向かいます

あと1時間でCakePHP公式イベント、CakeFestBerlinが始まります。
一昨日の夜にベルリンに着いたのですが、時差ボケもきつかったですがいよいよ始まるなという興奮が大きいですね。

ホテルで朝食を取っていたらアメリカからの参加者の方にお会いしました。
会場はWiFiがあるはずなので可能であれば適宜レポートしてみたいと思います。

では。

CakeFest Berlin 初日のまとめ

朝出かけてから13時間ほど経過して宿に戻ったところです。
ワークショップの進行が早くブログの更新どころではありませんでした。
ボリュームがありすぎてまとめるのもなかなか困難ですが・・・・。

雰囲気がわかりそうな写真をいくつか引用しておきます。




  • 箇条書きメモ
    • shin1x1さんはタクシー男としてGarrettに記憶されている
    • 某○川さんは小さいsymfony男として記憶されている
    • 日本のバーで飲みまくったことはとても良い思い出になっている
    • 参加者は多様(アルゼンチン・ドイツ・フランス・ノルウェー・ベルギー・アメリカ)

第44回PHP勉強会でDutch PHP Conferenceについて発表した

第44回PHP勉強会@関東 - events.php.gr.jp

今月も発表をしてきました。両方に参加された方はお気づきとおもいますが前回の発表と同じフォーマットで別のイベントの紹介をしてみました。いよいよ来週はCakeFestに行くのでしっかりしたレポートが作れるように練習といった意味合いと、欧米のエンジニアと話せる話題を勉強するという意図も一応あったりします。



ざっくりとしたサマリですがイベントの雰囲気や元の記事への興味がわくような形になっていれば幸いです。
ぜひとも元の記事を見て国際的なイベントに参加する意欲を高めて頂ければと。

面白そうな記事がたくさんあるので、読んで見た方は感想などをブログに書いてください!海外の面白いコンテンツは海外ドラマだけじゃないですよ!!