• 2011.09.15 Thursday
  • スポンサードリンク
  • -
  • -
  • -
  • -


スポンサーサイト
この広告は60日以上更新がないブログに表示されております。
新しい記事を書くことで広告を消すことができます。
PHPカンファレンス2011感想 #phpcon2011
 PHPカンファレンス2011に行ってきました。

PHPカンファレンス2011 スペシャルレポート
PHPカンファレンス2011に参加してきた

このあたりに全体の内容はがよくまとまっているので、このブログでは感想だけ書こうと思います。


■メイン
・基調講演 廣川 類さん
 PHPの今までとこれから。メインはPHP5.4の概要について。
 パフォーマンスが5.3から向上したことと、traitや配列の宣言方法の改善など、まだまだPHPはLLの雄として頑張っていく気マンマンなのが分かって良かったです。

PHPライブラリの歩き方・作り方 sasezakiさん 
 PHP、他の言語に比べてライブラリ少ないよ、ほしいライブラリがあったらもっとみんな自分で書こうよ。という趣旨でした。
 ライブラリを作るにあたっては「名前空間を使う」「クラスの読み込みはPSR-0」「例外はSPLで捕捉」「パッケージ依存性の問題にはPyrus(パイラス)」など踏まえるのが大切とのこと。
 ライブラリを作り始めると多分PHPの深いところにアタッチできるんだろうなと感じました。

・スタート Sphinx 中村 智洋さん @JP_tomo
 ドキュメンテーションツールSphinxに関する説明でした。
 Symfonyや、Ethnaのドキュメントでも使われているらしいです。

Cena-DTA:HTML5のローカルDBを使ったアプリ開発 亀井 亜佐夫さん @asao_jp
 ローカルDBとマスターDB間の不整合を解消するためのツールであるCena-DTAについての報告です。
 idなどで競合が発生した時に自動採番して競合解消してくれるというのは結構いいのかも

アジャイル開発とTDDを半年間実践してみた顛末と、これから 澤田 径さん 
 本日のメインイベントその1がこちら。ゲーム会社でTDDを導入した際の経験とその効果、心構えなどについての発表でした。
 もうPHPでもテスト書かなきゃまずいだろうなという感じ。自分が仕事で使っているコードでテスト書くならどうすればいいかなど考えてしまいました。
 あと、アジャイルプラクティスとアジャイルサムライ読みたくなりました。

PHPとテストとCIと私〜愛するあなたのため〜 yamashiroさん 
 本日のメインイベントその2。最高のプレゼンで爆笑の嵐。
 レガシーなプロジェクトにテストとCIを導入してやったぜ!というお話。
 テストは品質のためにやってるんじゃなくて俺のためにやってるんだ、という考え方が素敵でした。
 あと、JenkinsのPHPプラグインの紹介もナイスでした。
 リファクタリングとレガシーコード改善ガイドを読みたくなりました。

・徳丸本に学ぶ 安全なPHPアプリ開発の鉄則2011 徳丸 浩さん 
 徳丸本を買って読めばOK。という結論。


■ライトニングトーク
名前や資料の場所など分かっている範囲で。資料が公開され次第更新します。
UST:http://www.ustream.tv/recorded/17179193

Making DSL with [] yuya_takeyamaさん @yuya_takeyama 
 PHP5.4の配列だけでDSLを作ってしまったというお話。その名もPaml。
 PHPの配列がHTMLのタグに変換されるデモで度肝を抜かれました。PHPはまだまだ伸びる子。
 あとLisPHPフイタ。
 リンク先で丁寧な解説があるのでそちらも。

・PHP技術者認定ウィザード @phpexam
 その名の通りPHP技術者のための検定が準備されているというお話でした。

・Sismoを使ってみる
 CIにJenkinsではなくSismoを使ってみた、というお話でした。

・古いシステムのPHPをバージョンアップ! その、危険な落とし穴 makotokagaさん @makotokaga
 その名の通り古いPHPのバージョンアップのお話。バージョンアップ時に危険な関数の話などだったはずなのですが、すみません、うろ覚えです。。。

Symfony2のキャッシュとESIの話 hidenorigotoさん @hidenorigoto
 Symfony2はキャッシュを使えばパフォーマンスアップするよ!というお話でした。

いろんなクラウドをくらべてみたよ 杉江正さん 
 結論としてはGMOアプリクラウドが速かった、という内容でした。ただし、AWSのTOKYOリージョンがまだ出てない時の調査。

闇鍋的PHP魔改造 do_akiさん @do_aki 
 日本語PHPその名も「ぺちぺち」を作り上げたというお話。全角日本語で処理を実装できるという夢の言語。
 インターフェースまでばっちりサポートしているところで爆笑。

・Cakeときゅうりの美味しい関係 sizuhikoさん
 すみません、内容を忘れてしまいました。。。

クライアントサイド PHP AV 拡張 yoyaさん @yoya 
 PHPの画像音声処理を拡張したものの紹介でした。

・バグ発見ツールPHPBugsのご紹介 hnwさん @hnw
 PHPのコードを解析して怪しい個所など報告してくれるようなツールを「これから作る!」というレポートでした。ワラタ。

・大規模開発でのPHP 光と闇 dekosukeさん @dekosuke
 40万行超のソースコードを抱える動画サイト(仮にN動画とする)の開発に関わる物語と反省点。結論、銀の弾丸はない。ちなみに物語はフィクションとのこと。

・Ethna Update sotarokさん @sotarok
 フレームワークアップデートに呼ばれなかった!(怒)ということでここで発表とのこと。


■感想
これだけ大規模なイベントに出たことがなかったので、とても新鮮で楽しめました。
テックトラックに人が集まりすぎてフレームワークの話を聞けなかったのが心残りです。
それだけ大盛況だったということでしょう。
TDDのお話については非常に面白く、誰のためでもない自分のためにテストをするのだという点に非常に感銘をうけました。

以上です。
タイムゾーン設定方法
ntpdなどで時刻同期設定してもdateが↓のような結果になって日本時間と合わない場合がある。
$ date
2011年  8月 25日 木曜日 10:40:08 EST
詰まりやすいとこなので、よそにも書かれてるけど冗長化の意味でメモ。
↑の場合ESTのタイムゾーンに設定されているけど、これをJSTにすれば日本のタイムゾーンになる。

設定方法は、
$ cp /etc/localtime /etc/localtime.org
$ cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
/usr/share/zoneinfo/にあるタイムゾーンの設定ファイルを/etc/localtimeに上書きすればいい。
cocos2dで縦向き設定ができない時の対処
cocos2dでデバイスの縦向き設定がうまく動いてくれない。
よく言われるようにAppDeleget.mで
[director setDeviceOrientation:kCCDeviceOrientationPortrait];
を指定してやる方法でも横向きになってしまう。
iPad横向き
デバッガを使ってどのタイミングで縦向きになっているか調べると、RootViewController.m内で制御がかかっているっぽい。
で、いろいろ試した結果、同クラス内の
return ( UIInterfaceOrientationIsLandscape( interfaceOrientation ) );

return ( UIInterfaceOrientationIsPortrait( interfaceOrientation ) );
に書き換えれば縦向きになることがわかった。
iPad縦向き

ただ、これが根本解決になっていないことは明らかなので、もしこれよりうまい方法を知っている人がいたら是非教えていただきたい。
俺と同じところで詰まっている人がいたら、とりあえず上記のやりかたで急場をしのいでほしい。
iPhone(iOS)アプリ内にHTMLページを埋め込む方法
Objective-CでUIWebViewを使い、アプリ内にHTMLページを埋め込む方法です。

 http://howtomakeiphoneapps.com/home/2011/5/24/uiwebview-tutorial.html

↑の動画の通りにやれば(英語できない俺のような者でも)できるんだけど、動画を追ってくのは多少面倒だろうと思うのでざっと解説します。
自分が試したのはXCodeバージョン3.2.6です。
あ、ちなみにMacの話です。

1.XCodeにて、View-based Applicationの新規プロジェクトを作成する
(動画では省略されてます)

2.Resourcesの(プロジェクト名)ViewController.xlbを開き、Interface Builderを起動する

3.LibraryウィンドウからWeb ViewをViewの枠にドラッグ&ドロップする
(LibraryウィンドウはメニューバーのTools > Libraryで開ける)

4.(プロジェクト名)ViewController.hを開き、https://gist.github.com/1144713に記載されているようにソースを修正する。具体的には下記を追記
@property(nonatomic, retain) IBOutlet UIWebView *webView;
UIWebView *webView;
<UIWebViewDelegate>

5.(プロジェクト名)ViewController.mを開き、https://gist.github.com/1144713に記載されているようにソースを修正する。具体的には
 5.1.下記を追記
@synthesize webView;
[webView release];
 5.2.下記で埋め込みたいURLを指定
NSURL *url = [NSURL URLWithString:@"http://yahoo.co.jp/"];
 5.3.下記を追記
NSURLRequest *requestURL = [NSURLRequest requestWithURL:url];
[webView loadRequest:requestURL];    
[super viewDidLoad];

6.Interface Builderに戻り、Viewウィンドウをクリック。Web View ConnectionsのReferencing OutletsからNew Referencing Outlets の右側の○をドラッグし、File's Ownerの箱とつなげる。
(ここの動作は動画と異なっていたので注意。)

7.Interface Builderの変更を保存

8.XCodeでビルドと実行


以上
byobuをfedoraに入れてみた
http://blog.udzura.jp/2011/08/12/introduction-to-byobu/

↑のブログでscreen、tmuxのようなスクリーン系のbyobuが紹介されているのを指をくわえて見ていたら、記事の作者さんからunix系ならubuntu以外でも入るだろうという指摘をいただき、そそくさとfedora14に入れてみました。

結論としてはyumで入りました。すみませんすみません。。。

yum install byobu

これだけですね。
グラフィカルで色々な表示を追加可能になってるのでとっつきやすい。しばらく使ってみようと思います。

【追記】
fedora10だとyumからインストールできなかったのでソースからインストールしました。
需要があるかわかりませんが、手順をば。
https://launchpad.net/byobu のdownloadsからtarファイルをダウンロード
wget http://launchpad.net/byobu/trunk/4.29/+download/byobu_4.29.orig.tar.gz
・(fedora)サーバ上の適当な場所で解凍
tar xvfv byobu_4.29.orig.tar.gz
・解凍フォルダに移動してmake,make install
cd byobu-4.29
./configure
make
make install
・byobuコマンド叩いてみて動作したら成功!
byobu

以上
第1回 データ構造と情報検索と言語処理勉強会に行ってきました
http://atnd.org/events/17032
↑の勉強会に行ってきました。序盤は言語処理の学術的な内容で正直素人には難しかったです。

しかし、中盤の類似文字列検索のお話はウチらの仕事内容にも直接関連した内容で非常に興味深く伺うことができたのでその件についてログを貼っておきます。

【内容】
4.類似文字列検索
・overlastさん
 クエリ訂正システムなどやってる

・曖昧な情報を処理する能力
 人間は曖昧な情報を解決しようとする力が高い。
 これを機械的にできないか、という課題がある。
 たとえばgoogleの画像検索では、色使いが似ているものを結果として表示するが、ローマ字で「SUTABA」と検索してもスタバの画像を出してくれる。
 「スータバ」でもでる。
 同様に文字列検索でも曖昧なことを求めるという課題がある。
 しかし、文字列検索はシビア。
 なので、単純にやるとがっちり一致することが要求される。
 某たべ○グでは、「スータバックス」で検索すると0件ヒット。
 近年はそれくらいでも他サイトを使いたくなる。
『便利じゃないと人間への検索結果としては正解じゃない。』
 
・ゼロ件ヒット問題
 ゼロ件ヒットとは、前述のように検索に引っかからないこと。
 ピクシブ百科事典では曖昧な検索クエリだとすぐ0件になる。
 googleだと「ピングドラム」を「ピンクドラム」にしてもちゃんとピングドラムの結果が出てくる。
 これは、クエリの内容と実際にクリックされているページの間の誤差を機械的にgoogle側で学習しているものと思われる。すなわち
『みんなの間違えで救済されてる』
 食べログでは、たとえば店名だけで検索をかけたいのに、本文まで引っかかっちゃってどうでもいい(目的ではない)ショップばかり検索結果に表示されることがある。
 ワンクリック、ゼロクリックで目的のページにたどり着くのが便利なサイト。
『ゼロ件ヒットは機会損失。』

・曖昧な検索文字列で正しい文字列をさがす
 機会損失をなくすには、正しい文字列を結果として返す必要がある。
 しかし、正しい文字列って?
 ・(一般的に考えれば)表記誤りがない文字列
 ・(でもたとえば)ユーザーの心の底にあるもの(という観点もありうる)
  例) 
  検索文言として思いついたのは・・・「トトロの森」
  ユーザーが本当に検索したかったのは・・・「三鷹の森」
 つまり、
『正しさはユーザーの状況によって変わる』

 ・「表記に誤りあるけどユーザーの探したいものは明確」
  →似たような検索文言を提案してみる
 ・「探したいもの曖昧だけどクエリの文言に誤りなし」
  →別ジャンルで似たような結果を出してみる
 ・後者は大規模な検索ログが必要になる

・Apporoの紹介
 近似文字列照合エンジン。
 http://code.google.com/p/apporo/
 ・用途
  ゼロ件の防止
  辞書をメンテナンスするコストを減らす
 ・使い方
  事前準備が必要になる(インストールや辞書登録など)
  検索結果ゼロ件のときだけApporoが起動する
   類似検索文言あるいは類似検索結果を出力する
  Apporoでなければ、SimStringもおすすめ



発表の概要は以上です。

ここからは感想ですが、ゼロ件ヒットの抑止というのは自分の仕事内容的に非常に重要な点なので、興味深くヒアリングしました。
Apporoは残念ながらPHPに対応していないのでウチのサービスには使えないですが、何らかの形で類似文字列検索の実現は考えた方が良さそうだな、と感じました。
PHPにはlevenshtein関数というのがあってこれで類似文字列検索ができそうなのですが、マルチバイト対応してないみたいですね。。。残念!
Zend Gdataを利用してGoogleカレンダーを操作する
togglというサービスがあります。Web上でキッチンタイマーのように時間を計測し、その結果を保存することで、どの作業にどれだけ時間がかかったかを知ることができるとても便利なサービスです。
ただ、このサービスは一つ欠点があり、タスクごとにどれだけ時間がかかったかをグラフで表示することができないのです。
幸いにもtogglにはAPIが用意されており、タスクごとの計時データをシステム的に取得することはできるようになっています。
そこで、このAPIデータをGoogleカレンダーに突っ込んでしまえば可視化できるのではないかと考え、プログラムを組んでみました。

【ソース全文】
https://gist.github.com/1080972
※汚いソースで申し訳ない;; 突っ込みどころあればご指摘ください。

【解説】
・3、68、69行目
今回、Googleカレンダーとの連携においてはZend Gdataを利用しました。PHPでGoogleカレンダーAPIとのやり取りをする場合はこのZendFrameworkライブラリを利用すると非常に楽です。
ライブラリのパスがZendFrameworkのものになっているのは、既存のZendFrameworkのライブラリ内にZend Gdataを突っ込んだためです。多分方法としては間違ってないと思います。。。

・9行目
togglのAPI TOKENを指定します。このトークンは、togglサイトのMy profileの中で確認することができます。

・13-41行目
togglAPIから取得するデータの日付範囲を引数指定できるようにしています。
php post.php -sd 20110713 -ed 20110714
のように指定できます。

・43-65行目
PEARのHTTP_Requestを利用して、togglAPI経由でデータを取得しています。
取得できるデータは、togglのトップページに表示される計時データと同等になります。古いデータは取得できないぽ。

・67-74行目
ここからZend Gdataを利用していきます。詳しい使い方はこのあたりをご参照のこと。

・76-99行目
だんだん怪しい動きになってきました(汗)
toggleのAPIからは差分のデータを取得することができず、直近のデータを更新するためにはまず一度カレンダーに登録されたデータを削除しないといけません。これをしないと、2重登録されてしまいます。
やり方としては、日付範囲を指定したうえで、getCalendarEventFeedでカレンダーに登録されたタスクのリストを取得し、$event->delete()で削除、となります。3回繰り返しているのは、getCalendarEventFeedで取得できるのが20件までなので、1度で削除しきれない可能性があるためです。(このあたりもっと良い方法があるかもしれません)
あと、日付範囲の指定方法については、見ての通り「Y-m-dT00:00:00.0+09:00」という形式になります。これ以外の形式だとうまく動いてくれないのでご注意ください。

・110行目
65行目で取得したデータをGoogleカレンダーに登録していきます。

・111-143行目
既にDBに登録済みのデータと、昨日より前のデータは更新しないよう制御します。

・149-160行目
Googleカレンダーに登録するイベントを用意します。タイトルと時間だけ設定しています。

・161行目
insertEventでGoogleカレンダーに登録します。

・164-166行目
Googleカレンダーに登録したデータをDBに登録します。(このスキーマは修正の余地ありです。後から見返したときにどのデータかわかるように日付とタイトルも登録しておくべきですね)

以上です


続きを読む >>
node.js + expressでFacebook認証
node.js+expressでfacebook認証のプログラムを書いたので公開。
内容としては、ここに書いてあるFacebook認証のPHPスクリプトをベタ移植したものになります。
(OAuth2はなんか面倒なので使わず。。。)

【ソース】
https://gist.github.com/1075712

【注意点】
・CSRF対策のトークンをランダムな値で生成するために、rbytesを使用
・app_id、app_secret、my_urlは、各自環境にあわせて書き換え要
・listenするポートは80番ポートに
・view/fblogin.ejsがあること前提(念のため)

突っ込み等ありましたらコメントなどいただけると幸いです。
続きを読む >>
node.js+express-mvc-bootstrapをdaemontoolsでデーモン化
node.jsでexpress-mvc-bootstrapを使う時、都度起動スクリプト(eb)を叩くわけにもいかないので、daemontoolsでデーモン化してみた。
基本、solrをdaemontoolsでデーモン化する手順を参考に。

【前提】
・node.jsをインストール済
(/usr/local/bin/node)
・express-mvc-bootstrapをインストール済
(/usr/local/lib/node_modules/express-mvc-bootstrap/)
・daemontoolsをインストール済
・express-mvc-bootstrapのアプリを/home/test/に作成済
・(一応)さくらのVPSを利用する想定

【手順】
1. sudo useradd eb
2. sudo chown -R eb /home/test/
3. sudo mkdir -p /etc/express-mvc-bootstrap
4. cd /etc/express-mvc-bootstrap/
5. sudo vi run
6. 下記スクリプトを"run"ファイルに書き込み保存
#!/bin/sh
exec 2>&1
PATH=$PATH:/usr/local/bin
cd /home/test
exec /usr/local/bin/setuidgid eb /usr/local/lib/node_modules/express-mvc-bootstrap/eb
7. sudo chmod 0755 run
8. sudo mkdir -p /etc/express-mvc-bootstrap/log
9. cd /etc/express-mvc-bootstrap/log
10. sudo vi run
11. 下記スクリプトを"run"ファイルに書き込み保存
#!/bin/sh
exec /usr/local/bin/setuidgid eb /usr/local/bin/multilog t ./main
12. sudo chmod 0755 run
13. sudo mkdir -p /etc/express-mvc-bootstrap/log/main
14. sudo chown -R eb /etc/express-mvc-bootstrap/log/main
15. sudo ln -s /etc/express-mvc-bootstrap/ /service/express-mvc-bootstrap
16. ホストを再起動

以上

node.js + express で mvc環境
自分の今のnode.js周りの環境がどうなっているのか忘れ気味なのでメモ。

【インストールしたもの】
・node.js本体
・テンプレートエンジンはejs
 jadeと迷ったけど普遍的なテンプレートエンジンに準拠した文法だったためこちらを採用。
 jadeはきれいなコードがかけそうだけど、いかんせん個性的で学習コストが高く付きそう。
・webフレームワークはexpress
・MVC実現のため、express-mvc-bootstrap
・express-mvc-bootstrapを動かすためにmongoose
 mongodbの使い勝手を試した上で、modelだけmysqlに差し替えるかもしれない。できるなら。
・テストのためにexpressoを入れたけど使ってない

node.js本体以外はnpmで導入した。


Copyright (C) 2012 JUGEM Some Rights Reserved.