PHP Conference 2012にいってきた

今日はPHP Conference 2012に行ってきました。

最近いろいろと勉強会に参加するのですが、それを踏まえて一言。

「女子多!」

同時開催でWordCampが開催されていたのでそちらで沢山の女性が来場していました。

しかも一つのホールの両サイドでPHPとWordCampがそれぞれ講演をしつつ、
中央でどちらもブースを出していたのでお祭りの夜店状態。とても楽しかったです。

PHPカンファレンス2012 | 日本最大のPHPの祭典

WordCamp Japan – WordPress イベント「WordCamp」の日本語公式サイト


さて、今回面白そうな講演がいっぱいあったのですがその中でもCrocosのCTO 柄沢 聡太郎さんの講演が大変面白かった。

gitのバージョン管理でよく出てくるA successful Git branching model » nvie.comをもとに
gitの紹介から上記のモデルについてを説明しておりました。

会場で確認したところgitを使っていない人も結構(かなり?)いたので柄沢さんも気合が入ったようです。

そこからさらにCrocosで行われてるPull Request、多段fueature blanchを使ったより素敵な開発方法について紹介しておりました。

Pull Requestをすることによる細かなコードレビューや開発者同士の連携のスムーズ化などとても参考になりました。

そこでふと思ったことなのですが、日々コーディングしてリリースしてといったサイクルがすごく短いという印象を受けました。
(記憶があいまいですが)ご本人も追加、変更してリリースしてのサイクルが短いといった旨の話をされていたと思います。

PHPのカンファレンスなので結構別の部分のことになってしまうのですが、その場合どの機能をいつまでに入れる
みたいなことってどうやって決めるのか気になりました。

多分Scrumみたいなので「その間で修正する部分はこれ、追加する機能はこれ」とかってきめてがしがしやってまた次のSprintみたいな
感じなのかなと。

単純にsubversionからgitに移行しても十分メリットはあると思うのですが、やっぱりそれだけじゃなくて開発がAgileだからこそ相乗効果も高いのかな
といった印象を受けました(実際にどうやってるかは知らないのですが。。。違ってたら恥ずかしい。。。)

そうやって考えると自分的には腑に落ちて「ゴリゴリ開発する精鋭チーム」のイメージができました。

「チームでの開発時にどうイテレーションを回していくか」を考えた時に、考え方と具体的な実行方法がセットで舞い降りた講演でした。

Agileもgitもそれほど詳しくないので、もっと色々調べようと思う私なのでしたー。

buddypress wp-admin-barの要素を編集する

buddypressでヘッダー部分に表示されるwp-admin-barの要素を非表示にしたのでメモ。

wp-admin-barをいじるにはplugins/buddypress/bp-themes/bp-default/functions.php



//admin headerにある要素を削除する
if(!function_exists('remove_admin_bar_menu')):
function remove_admin_bar_menu(){
global $bp;
unset($bp->bp_nav[10]); //活動
unset($bp->bp_nav[20]); //プロフィール
unset($bp->bp_nav[50]); //メッセージ
unset($bp->bp_nav[60]); //友達
unset($bp->bp_nav[80]); //アルバム
}
add_action( 'bp_adminbar_menus', 'remove_admin_bar_menu', 2 );
endif;

とすれはいい。

普通のwordpressでは


if(!function_exists('remove_admin_bar_menu')):
function remove_admin_bar_menu(){
global $wp_admin_bar;

$wp_admin_bar->remove_menu($menu_id);
}
add_action( 'bp_adminbar_menus', 'remove_admin_bar_menu', 2 );
endif;

でいいらしいのだが、それだと上手くいかなかったのでちょっと調べた。

まあbpですしね。。。

関数あるのかな?

buddypress + buddypress activity plus + amazon s3 uploads

buddypress + buddypress activity plus + amazon s3 uploads

最近buddypressでsnsを構築中なのだが、ユーザーに画像を頻繁に投稿してもらうようなsnsになるため、
画像はs3で保存したいと思っている。

そこでそんな感じのプラグインないかなーと探していたのだがいい感じのが見つからなかった。
(むしろそんなプラグイン作ってくれという案件がfreelancer.comとかに結構あった)

とりあえず表題のプラグインで画像をすべてs3に持っていけるように奮闘中。

ここに似たようなことをやろうとしている人の投稿があった。
activity plus and amazon s3 upload amazon plugin working together

以下が各プラグインダウンロードサイトです。

インストール


単純にアクティベートしたところ、amazon s3 uploadsのcronが走るといくつかの画像が見れなくなってしまった。
見れるのはentryの中身だけだった。
しかも、もともとサムネイルが表示されていたところに元画像が表示されてしまい、フィードがぐちゃぐちゃ。

サムネイル画像の復活

とりあえずこれだけは直した。以下そのやり方。


問題はamazon s3 uploadsプラグインがローカルの画像をs3にアップロードする際にローカルからファイルを消しており(←当然の処置)、
表示部分のbuddypress activity plusがローカルに画像ファイルがない場合は元画像を表示するような仕組み(←納得の処置)になっているからだと思われる。


そこでbuddypress activity plusの表示部分でローカルにファイルがあるか確認する部分を削った(←き、汚い)。
plugins/buddypress-activity-plus/lib/forms/images_tag_template.php 9行目


$thumbnail = bpfb_get_image_url($activity_blog_id) . $info['filename'] . '-bpfbt.' . strtolower($info['extension']);
?>

とっても汚いことをやってると思いつつ他にやり方もわからず。。。

$thumbnail =以下を関数にしてadd_actionに入れておいて、
amazon-s3-uploadsプラグインが動いているときだけfilter_actionとかつけてローカルのファイル存在確認をさせないようにすればいいのかな?

うーん。wordpressの知識がなさ過ぎる。
プラグインをいじる上でいいwordpress本とかないのかな?

まだアバター画像が消えるといった問題もあるので改良したら追記しよう。

6/12追記

bp group documentsというプラグインを使っているのだが、こちらも画像が上がっていなかったことが判明。

これは割りと簡単に解決できて、wp-content/plugins/buddypress-group-documents/index.phpの428行目近辺で使っている
BP_Group_Documentsオブジェクトのget_url()関数に引数でfalseを渡してあげると、
内部でファイルの存在チェックを行わなくなるのでS3上の画像が表示されるようになる。

また、アバター画像が表示されない件は、wp-content/plugins/buddypress/bp-core/bp-core-avatars.php
bp_core_fetch_avatar関数をみると、ファイル名等をメタデータで持たずディレクトリ内にサムネイルとフルの2つの画像だけにして
どちらかを判断して出力するような仕組みになっており、画像がアップロードされてなくなると変わりにgravatarがでてきてしまう。

かといってファイルをサイズ0とかにして残すとローカルのファイルを読みにいってしまう。
どうしたもんか。

6/18さらに追記

avatarは仕方がないのでS3にアップロードしないことにした。

amazon-s3-uploadsのasssu-models.phpの191行目付近を
ディレクトリ名にavatarを含んでいない場合というif文でくくった。

「Titanium Mobileで作るiphone/Androidアプリ勉強会&ライブコーディング」にいってきた

偉い人は言いました「家に帰ってただいまを言うまでが遠足であり、家に帰ってブログを書くまでが勉強会です」と。

表題のとおり勉強会にいってきました。場所は銀座にある「リクルートGINZA8ビル」
主催はリクルートエージェントの運営するWeb CAT Studioさんで、講演してくれたのはAppceleraorのテクニカルエバンジェリストの増井 雄一郎氏でした。
Web CAT Studioさんは定期的に無料で勉強会等のイベントを行っているらしく、エンジニアにとっては大変ありがたいことだと思いますい(ステマじゃないよ!)

さて勉強会の方はというと最初に増井さんからTitanium Mobileについて説明があり、その後ライブコーディングに移っていくという流れでした。

Titamium Mobileとは

  • スマートフォン向けアプリをつくるときobjective-cjavaといった各コードで書くのはしんどいよね
  • HTML5でやればいいんだが、HTML5はまだまだ進化途中で進化が遅い ストアには乗せられない

それならjavascriptでアプリをつくれるTitanium Mobileだ!

  • Titanium Mobile製の公式アプリが約4万
  • デベロッパーは30万人
企業がだしてる有名アプリ

ココログ サイボウズクライアントアプリ

個人がだしてる有名アプリ

積ん読本 (作者は本職プログラマじゃない!)

Titanium Mobileについて

javaでは「Write once, run anywhare」
Titanium Mobileでは「Write once, adapt anywhere」
書いたコードが各デバイスに適応して表示される!
(例:同じタブを表示するコードでもandroidなら上に、iphoneなら下に表示など。どっちだっけ。)

Titanium Mobileにできないこと

あれもできる、これもできるはよくある話。じゃあTitanium Mobileが苦手なことって?

  • 画像操作系 線をひく 写真を直接いじること
  • かなりのリアルタイム性
  • 3D系
  • androidのカメラでオーバーレイなど(この辺よくわからなかった)
どうやって解決する?

できないことをどうやって解決すればいいのか。

  • moduleで拡張する

誰かnativeでいじれる人がいれば解決!

すでに誰かが作ってくれているものを使えば解決!

Titanium Mobileでアプリを作る際でもnativeが書ける人がいて、
その人にmoduleの作成とかがお願いできればかなりいい!!

注意点

同じAPIが同じ挙動とは限らない、これは最初に述べたタブの違いがいい例。
プロジェクトによっては共通UI層がコード全体の95%を占めるものもあれば、
各デバイスむけに最適化されているものもある。
プロジェクトの方針のありかたできまる。

Titanium Mobile 2.0

どこがかわったの?

Appcelerator cloud serviceとは何か?
アプリのサーバ側の動作をやってくれるシステム。
データストア機能、ユーザ管理機能、プッシュ通知機能などを登録するだけで簡単に実装できる。
便利!

6月末日に正式版として有料化予定らしいので、試すなら今ですね!
有料化に関する詳細は6月1日に発表だそうです!
価格は買収したcocoafishというサービスのものが参考になるそうです。

ライブコーディング

デフォルトでついている?sampleのTodoというアプリを題材にして、
ローカルにデータを保存していた部分を、前述のクラウドに保存するようまでをライブコーディングしていただきました。
(多少のトラブルもありつつ)増井さんがサクサクと保存場所を変えていくのがすごかった。
さっきまでローカルに保存していたものが次々クラウドに保存されていき、あっというまに(説明しながらで1時間くらい)コーディング終了。あれをみるとTitaniumなんでもできるんじゃないのか!?と思ってしまいますね。

講演で使ったコードも公開されています。良心的ですね。
GitHub - appcelerator-archive/sample-acs-todo: Demo app with Appcelerator Cloud Service.

質疑応答(一つ抜粋)

Q.Appcelerator cloud serviceに保存してあるデータはTitanium Mobile以外でアクセスできるAPIとかはないんでしょうか?
A.あります。様々なものを用意しています。


と、ここまでが増井さんの講演でした。Titanium Mobile初心者(私)にはとても為になる勉強会でしたね。
増井さんがサクサクやってみせてくれたので「めっちゃ簡単にできそう!」という印象でした。
作ってみたいアプリがあるので今度これで挑戦してみたいと思います!


この後サイバーエージェントさんがイベントの告知と、サイバーエージェントの最近の取り組みについて発表し、
主催のWeb CAT Studioの長尾さんがリクルートの観点からスマホアプリ開発について発表してくださいました。


どちらもスマートフォンアプリ開発についてかなり注目しているのが窺えて楽しかったです。


用があって懇親会はでれませんでしたがね。。。
個人的にはモチベーションのあがるいい勉強会となりました。


講演していただいた増井さん、主催のWeb CAT Studioの方々ありがとうございました。

ubuntu11.10のchromeでフォントを変更する

thinkpad X60(古い!)にubuntu11.10をいれて使っているのだが、最近久々に起動した。

するとchromeのフォントが汚いこと汚いこと(以前直そうとして挫折したんだった)。

chromeのフォントをきれいにするのに意外とてまどったのでメモ。

そもそもchromeがバージョン10以上からゴシック体のフォントの反映がしにくくなったらしい

FAQ - Google Chrome まとめWiki

上記にあるのとピッタリの状況だった。

とりあえず書いてある通りフォントを設定してみるのだが反映されない。。。

ubuntu11.10の日本語フォントがおかしい

Ubuntu 11.10 Oneiric Ocelot のインストールとインストール直後のシステム設定 | Ubuntuアプリのいいところ

上記記事内にかかれている言語サポートの変更、再起動の作業をおこなったらchrome
フォントが反映されるようになった。

どうやらこの2つの状況があったから以前は挫折したんだと考えられる。

ノート自体そんなに使ってなかったし。。。

今後使う機会がふえるわけでもないんだけど、とりあえずきれいになったのでスッキリ!

windows環境でherokuを使ってみる

そろそろherokuを使ってみようと思いherokuに登録したのだが、
pushのところで詰まってしまったのでメモ。

windows環境でrails開発するやつなんかいねーよということなんでしょうかherokuさん。


$ git push heroku master
Counting objects: 81, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (65/65), done.
Writing objects: 100% (81/81), 28.33 KiB, done.
Total 81 (delta 2), reused 0 (delta 0)

          • > Heroku receiving push
          • > Ruby/Rails app detected
          • > Detected Rails is not set to serve static_assets

Installing rails3_serve_static_assets... done

          • > Configure Rails 3 to disable x-sendfile

Installing rails3_disable_x_sendfile... done

          • > Configure Rails to log to stdout

Installing rails_log_stdout... done

          • > Gemfile detected, running Bundler version 1.0.7

Unresolved dependencies detected; Installing...
Using --without development:test
Windows Gemfile.lock detected, ignoring it.
You have modified your Gemfile in development but did not check
the resulting snapshot (Gemfile.lock) into version control

You have added to the Gemfile:
* source: rubygems repository https://rubygems.org/
* rails (= 3.2.2)
* sqlite3
* sass-rails (~> 3.2.3)
* coffee-rails (~> 3.2.1)
* uglifier (>= 1.0.3)
* jquery-rails
FAILED: http://devcenter.heroku.com/articles/bundler
! Heroku push rejected, failed to install gems via Bundler

To git@heroku.com:hogehoge.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@hogehoge.git'

というようなエラーが出た。

ググると以下のサイトにヒットした。

ruby on rails - Gemfile.lock not checked in - Heroku - Stack Overflow

でここに書いてあるとおりGemfile.lockから


PLATFORMS
x86-mingw32

を取り除いて


git add .
git commit -am "hogehogehoge"
git push heroku master

でうまくいった。

いい加減にwindows以外で開発環境整えなきゃなー。

safariのセッションで詰まる *4/7追記

safariのセッションの挙動について詰まったのでメモ。

スマートフォン向けサイトのデバッグにユーザエージェントが簡単に変えられるsafariを使っているのだが、
サイトに飛んだ瞬間だけセッションを保存してくれなくて困った。

ほかのブラウザではできたので、ひたすらに自分のコードが悪いと思って
「どこがいけないんだろう??」と思って(実際は「何で動かないんだコンチクショウ!」という気分)コードをいじくってたが、
サファリのクッキー受け入れポリシーの問題だった。。。

ググってそういう情報はいくつか出てきていたが「まさかそれはないだろ(笑)」と思って放置していて、
どうしても動かないので「これなのか?」と思って(実際は「これか!?これがええのんか!?」という気分)、

「編集」→「設定」→「プライバシー」の中にある「Cookieをブロック」を「しない」

に変更したところあっさり動いた。

なんだよ。。。と脱力。

原因はわかったが解決策はまた別に考えないといけないので現在思案中。

iphone版サファリの設定と、その他スマートフォンのブラウザの設定を確認して
対策を考えないと。

しかしこれどうすんだ??

フォームとかリンクとかにセッション埋め込むわけにもいかないし。。。

最初だけCSRFトークンみたいなものを作ればいいのか??