PHP勉強会 at 大阪に参加しました

昨日PHP勉強会 at 大阪に参加してきました。
アップルストアの2Fを無料で開放してるなんて凄いぞアップル!
買いたくなっちゃうじゃないですか(ってそれが狙いなんでしょうけどね)

場所も心斎橋と中心街だったこともあってか50人以上集まったそうです。
懇親会も30人以上!凄い人数になりました。

主催の方、講演の方本当にありがとうございました。

また是非開催されることを祈りつつ内容のメモ。

id:ku-sukeさん
初心者向けPHPのお話し
PHP研究所じゃないよ。
・色んなとこで使ってるよ。
・開発には色んな方法があるよ。
・サンプルもいっぱいあるから触ってみるといいよ。
・古い情報には気を付けて><

※個人的感想
・開発はやっぱエディタからかなー。でもオラはPDT重いけど楽。重いけど。
・開発用ロリポみたいなのがあると敷居が下がったりしてと妄想
・サンプルはPHPマニュアルのページにあるのが良いと思うんだ。

id:khashiさん
Smartyのお話し
Perl使ってます。
・Kansai Perl Mongerをよろしく。
・表示と中身は分けるとすっきりするよ!
Smartyは日本語情報いっぱい。

※個人的感想
Smarty良いですよねー
・日本語マニュアルあるし、プラグインもいっぱい。
・でもいざエラーが起こると大変><
・エラー箇所がわかりやすいテンプレートってあるのかな?
・となると生PHP
だが断る
Perl Mongerのフレームワーク勉強会行きたかった><。Extの話もあったのに><

ここからLT

id:rskyさん
TextMateのお話し
・ユーロ高い
・すんげー機能豊富
Ruby書けば機能アップ!
・フォントがマニアックなせいで日本語が><
・でも神は居る
・やっぱデモは自分のマシンでやるべき
・実はヘビートーク
Perl,Python,Rubyの話が多いよー。PHPも話しよー。

※個人的感想
・生拡張神様だ!
・いーなーマック×100
・引数まで出してくれるのいーなー。
・静的メソッドは出してくれるんだろうか?
TextMateのエラーメッセージが見れた。

id:takagimasahiroさん
PHPの由来について
・色々変わるPHP
・まぁ何でもいーんじゃね。
Python Hypertext Processorでも・・・

※個人的感想
・生PHPマニュアル様だ!
・名は体を表す

くまっちさん
PEARのお話し
・約400
コマンドラインでインスト簡単
・使うと便利
・使用上の目的を良く考えてご利用下さい
・ゲーム・料理好き

※個人的感想
・料理好きって凄いなー
・レン鯖だとちょっとインストとか大変だと思うんだ
・日本語無視られてる時もあるんだ
・でもなれると便利
・良いソースもあるので勉強になる
・オラはrhacolibs

id:senopoさん
Pleiades All in One Eclipseについて
・日本語ですよ
PHP開発にとっても便利ですよ。
ブレークポイントとか変数チェックとかも出来ますよ
SQLもテストできますよ
・インストするだけでほぼOK

※個人的感想
・使ってます。すげーお世話になってます。
・だが重い(Eclipseの宿命)
ブレークポイントほにゃららは使ってないす(Xdebugで十分なきが・・・)
・ついでにrhacoにはlogがある〜
・ホバーの内容が日本語になると凄まじいと思うんだ。

懇親会はなんと講演されてたid:rskyさん、id:takagimasahiroさん、それとPiece Frameworkのitemanさんと同席し、すんげー濃いー話の時間を過ごさせてもらいました。ハテナがいっぱい出たので勉強しよーっと。まずはSimpleDBとRESTだー。テストもチェックチェック。

ExtのComboboxでonTriggerイベントをカスタマイズ

Ext.form.ComboBoxはドキュメントには載っていないですが、コンフィグにonTriggerを用意することで、onTriggerイベントをオーバーライドすることが出来ます。

ExtのComboboxデモのソースをそのまま使用するとonTriggerごとにphpへアクセスする動作が出来なかったのでオーバーライドで修正しました。

conveyorのtrunkでlineリストをロードするのに使用しました。
実際に使用しているソースとは違いますが、以下のようにできます。

privateなプロパティを修正したり、privateなメソッドを使ってるのであまり良くないとは思うんですけどねー。

  var store = new Ext.data.Store({
            Ext.data.HttpProxy({method:'GET',url:'アドレス'}),
            reader: new Ext.data.JsonReader({
                root: 'root'
            }, Ext.data.Record.create([{name: 'hoge'},{name:'fuga'}]))
        });
  });
  var combo = new Ext.form.ComboBox({
                mode:'remote',
                store: store,
                valueField: 'hoge',
                displayField:'fuga',
                loadingText:'Loading...',
                onTriggerClick:function(){
                	this.store.reload();
                	this.bindStore(this.store,true);
			        if(this.disabled){
			            return;
			        }
			        if(this.isExpanded()){
			            this.collapse();
			            this.el.focus();
			        }else {
			            this.onFocus({});
			            if(this.triggerAction == 'all') {
			                this.doQuery(this.allQuery, true);
			            } else {
			                this.doQuery(this.getRawValue());
			            }
			            this.el.focus();
			        }
                 },
                scope:this
            });


オーバーライドする時は元のソースを入れておかないと当然動きがおかしくなります。
念のため。

Ext-JSについて

conveyorではUIにExt-JSを採用しています。その理由は

・画像作る能力無くてもそれっぽいのができあがる
・色使う能力が低くてもそれっぽいのができあがる
・UIの機能がまとめてあって綺麗
・テーマが色々ある

でした。使ってみて確かに画像とか作る能力無くてもできちゃいます。特にtrunk版を使ってみていただくとsetupでテーマを選べるので分かると思います。

ただ、実際にコードを書いてみると

・嵌まりどころがひっじょ〜に多い。
・ドキュメントも非常〜〜〜に少ない(日本語が)
・フォーラムの検索能力がびみょ〜
・デモの書き方も結構適当(統一されてない)
・例文の無い機能が多い
・UI以外の機能が少なめ(Jqueryと比較してます。比較対象でないとは思いますが)

という訳で嵌まったとこ、気づいたとこなど少しずつまとめていこうと思います。
まずは日本語APIの紹介から
http://code.xenophy.com/js/ext/docs/
-- 素晴らしい試みなので協力出来ればと思います。

rhacoアプリのアップデート時の注意点

本日Blogkitをアップデートしてドラフト機能を使えるようにしたのですが、その時ハマリどころがあったのでメモしておきます。

project.xmlのデータタイプはデータベースでのデータタイプとは違います。
例えばBlogkitのアップデートで追加されたカラムでdraftがあるのですが、これはproject.xmlでは「boolean」で定義されています。
しかし、PostgreSQLでそのままdraftカラムをbooleanとして定義するとうまく動きません。一度テーブルを破棄して、再度作成してみるとdraftカラムはsmallintになっていました。

という訳で、アップデートする時は一度別テーブルでテーブルを作りなおしてみて、作成したテーブルの情報を見ながらカラムを追加すると良いと思います。

    • 追記--

こっちの方が重要だったりして、
当然アップデートするとバグがあったり仕様が変更されてたりするので、おかしいなーと思ったらhttp://www.lingr.com/room/rhacoで聞くか、Twitterrhacoさんに叫ぶかブログで症状を書いてみるかしたら良いですよ(動かないだけではつらいと思うのでエラーメッセージとかdeep_debugしてみたログとか書くと良いと思いますよ)。

逆引きrhaco(?)7: WEBページを取得する(body)

WEBページを取得する場合はHttpクラスを使用します。今回はリクエストした結果のbodyを取得します。一番単純な方法はGETの場合

Rhaco::import('network.http.Http');
$body = Http::get('http://url/To/get');

です。デフォルトの設定は
・リクエストヘッダーに渡す引数はWEBサーバのデフォルト、タイムアウト5秒
です。

$body = Http::body('http://url/To/get');

とも書くことが出来ます。Http::bodyはpost, getにも使えるので、汎用的に使用できます。

POSTメソッドの場合は

$body = Http::post('http://url/To/post',array('hoge=>'huga'));

で取得可能です。Http::bodyを用いるとヘッダーを指定することになります。

$headers['var'] = array('hoge'=>'fuga');
$body = Http::body('http://url/To/post',"POST",$headers);

getは第2引数、body, postは第3引数でヘッダーを配列で指定することが出来ます。