スポンサーサイト
一定期間更新がないため広告を表示しています
- 2014.12.23 Tuesday
- -
- -
- -
- -
- -
- by スポンサードリンク
7/14〜7/15札幌で開催されたphpmatsuriに行ってきました!
わざわざ札幌まで行った理由としては、今すごいコミュニティ欲が高いシーズンが来ていて、更に、札幌は私の生まれ故郷で実家があるので子供達を連れて行っても預け先がある(子供を自宅に置いて行かなくて済むのでDAuth=ダンナauthが取りやすい)というだけです。ついでに、春先に一度倒れた祖父の見舞い(超元気でした)も行きたかったし、単に暑すぎる名古屋から涼しい札幌に少しでも涼みに行きたかったというのもありました。不純な動機ばかりですがw ともかく子供二人と自分、三人分の飛行機代をかけて札幌まで行きました。
OpenPNE3のcookbookと、そのcookbookを使ったVagrant環境を作りました。
なぜ作ろうと思ったかと言うと、素人さんは素人さんでもmac使いの人はいざとなれば自力でビルドしてもらえばいいのでまぁいいとして、windows使いの人にOpenPNE3が動く環境を作ってもらうのが難しいと前から考えていて、唯一おすすめできると思っていたのがxamppぐらい。でも、xamppの最新版はPHP5.4で、OpenPNE3が今のところPHP5.4で動かない(PNEが悪いわけではなくsymfony1.4とdoctrine1.2の問題で)という状態になっていました。
私自身、開発用xamppを5.4にしてからPNE3の案件が戻って来たときに非常に困っていたという事情もあります。私もPHPカンファレンス関西で安藤さんが紹介してくださったvagrantを使って開発環境を用意して回避したので、同様に一般向けに作ったらいいんじゃないかと思ったわけです。
開発は苦労しました。
まず、私のruby力不足。随分前にこのブログで「rubyを始めてみた」的なエントリーを書いた記憶があるのですが、必要に迫られなかったこともあり、実際はhello world以上のことをやったことがなかったのです。Vagrantfileはまだいいとしても、cookbookのほうを書くためには、制御構造(if,each…)の書き方やら連想配列の書き方からグーグル先生に訊きながらの作業になりました。しかも一日目夜のcandycaneのワークショップで「if文のブロックで囲むとインデントが深くなるのでnot_ifやonly_ifを使え」とか言われて慌てて直したり…。
さらに、会場の回線環境があまり良くなくてほぼスマフォのテザリングで頑張ったのですが、大量の依存パッケージ(apache,mysql,php…)をインストールさせることになるので、タイムアウトエラーが頻発してしまい、実際のPNEインストールに辿り着かせるまでが大変という状態でした。
最終的には、OSにprecise64を使い、かつsynced_folderなしであればインストール完了して画面が表示できるところまではなんとか作ることができました。
phpmatsuriは終わりましたが、phpmatsuriだけのために作ったcookbookやvagrant環境ではないので、今後も開発を続けたいと考えています。
具体的には、
* Vagrantを使う場合にsynced_folder内にソースを入れられるようにする
* 設定項目でもっと柔軟性を持たせたい(インストールするプラグインとか)
* precise64以外のOSにも対応したい(特にRedhat,CentOSはマストかと)
* ruby力をつける&モジュール分割するなどしてもう少しcookbook自体のコードを綺麗にしたい
という野望を持っています。目標は大きく!
初日に講演されたどなたか(失念…ごめんなさい><)を見習ってスライドは英語、喋りは日本語にしました。一人同時通訳にしたら絶対に時間が足りないと思ったので。結局、日本語だけ喋っても時間は足りませんでした…。
少しだけウケを狙った「〜〜済のものがこちらになります」が滑って悲しかったです。タイトルのひねりが足りなかったのではないかと反省。せっかくLT時間が3分間だったり、ネタがchefだったりしたので、『OpenPNE3 3分間クッキング』とかつけるべきでしたね。←反省するところ間違ってる?
結果20位台(魂抜けてて正確な順位は聞いてなかった)という評価をいただきました。次はもっと上を狙えるよう頑張りたいです!
OpenPNE関係で普段からお世話になっている手嶋屋の手嶋さん(鳩サブレありがとうございましたm(_ _)m)と「リアルでは初めまして」。川原さん・NEKOGETさん・cakephperさんとも以下同文。PHPメンターズの道場生仲間の佐藤さんとも初めまして。
更に、LTで「名古屋から来た」と言ったお陰で、岐阜から来た外人さんお二人からも声を掛けていただきました。名古屋在住と岐阜在住が札幌のphpmatsuriまで来て、子供の話とか保育園の話で盛り上がるという謎の展開^^;お二人が日本語で喋ってくれてるのに私が英語交じりで返すというアホっぷりを晒してしまい、申し訳なかったです。
偶然、福岡のfusicから来た前回・前々回の優勝者の方とずっと同じテーブルでハックするという幸運に恵まれました。が、お隣の同僚さんも含めて、すごすぎて何も盗んで来れなかった…orz
来年もぜったい行くぞー!というか名古屋でやろうよ!←
<?php $imgParam = array('size' => '180x180', 'alt' => $options->object->getName()) ?>op_image_tag_sf_imageに渡されているオプションは$imgParamという配列をテンプレート内で独自に定義していることがわかります。
<?php $nameMethod = $options->name_method ?>
<?php if ($options->object): ?>
<?php echo op_image_tag_sf_image($options->object->getImageFileName(), $imgParam) ?>
<?php else: ?>
<?php echo op_image_tag('no_image.gif', $imgParam) ?>
<?php endif; ?>
<?php $imgParam['no_image'] = op_image_path('コミュ専用のNOIMAGE画像'); ?>のような行を追加すれば変更できますが、_partsMemberImageBox.phpはコミュTOPのみならずメンバープロフィール等でも使用されるパーツテンプレートなので、ここで変更してしまうとコミュだけでなくメンバーのほうも変更されてしまい、不都合です。
<?php $options->setDefault('no_image', false); ?>あとは、community/templates/homeSuccess.phpに戻ってno_imageオプションを渡すだけです。
<?php if ($options->no_image): ?>
<?php $imgParam['no_image'] = $options->no_image; ?>
<?php endif; ?>
<?php
$options = array(
'object' => $community,
'no_image' => op_image_path('コミュ専用のNOIMAGE画像'),
);
op_include_parts('memberImageBox', 'communityImageBox', $options);
?>
<?php echo link_to(op_image_tag_sf_image($result->getImageFilename(), array('size' => '76x76')), sprintf($options['link_to_detail'], $result->getId())); ?>のように行われています。ヘルパーコールが重複して見づらいですが、op_image_tag_sf_image()に渡されているオプションはarray('size' => '76x76')のみだとわかります。
<?php $options->setDefault('no_image', false); ?>
<?php $imgParam = array('size' => '76x76'); ?>
<?php if ($options->no_image): ?>
<?php $imgParam['no_image'] = $options->no_image; ?>
<?php endif; ?>
<?php echo link_to(op_image_tag_sf_image($result->getImageFilename(), $imgParam), sprintf($options['link_to_detail'], $result->getId())); ?>後は、community/templates/searchSuccess.phpに戻ってsearchResultListを呼び出す際のオプションにno_imageを追加するだけです。
$options = array(
'title' => __('Search Results'),
'pager' => $pager,
'link_to_page' => '@community_search?page=%d',
'link_to_detail' => '@community_home?id=%d',
'list' => $list,
'no_image' => op_image_path('コミュ専用のNOIMAGE画像'),
);
wget http://github.com/openpne/OpenPNE3/zipball/OpenPNE-3.6.0 --no-check-certificateを実行します。
unzip OpenPNE-3.6.0を実行します。
mv openpne-OpenPNE3-xxxxxx openpne3.6を実行します(xxxxxxの部分は実際のフォルダについている名前を入れてください) 5.設定ファイルのコピー&編集
cp config/OpenPNE.yml.sample config/OpenPNE.yml cp config/ProjectConfiguration.class.php.sample config/ProjectConfiguration.class.phpを実行します。
php symfony openpne:installを実行します。
php symfony openpne:fast-install --dbms=mysql --dbuser=DBユーザー名 --dbpassword=DBパスワード --dbname=DB名のようにして実行すれば、openpne:installと同じ処理をDB設定を1つずつ入力しなくてもインストールができます。(1つ前に実行したコマンドはキーボードの「↑」でもう一度呼び出せます)
ln -s $HOME/openpne3.6/web $HOME/public_html/PNEで使用したいドメイン名を実行します。