| STATE | ![]() |
ENTRY | <<new | 1 / 3pages | old>> |
|
スポンサーサイト
|
![]() |
|
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詰まりやすいとこなので、よそにも書かれてるけど冗長化の意味でメモ。 ↑の場合ESTのタイムゾーンに設定されているけど、これをJSTにすれば日本のタイムゾーンになる。 設定方法は、 $ cp /etc/localtime /etc/localtime.org/usr/share/zoneinfo/にあるタイムゾーンの設定ファイルを/etc/localtimeに上書きすればいい。 |
![]() |
|
cocos2dで縦向き設定ができない時の対処
cocos2dでデバイスの縦向き設定がうまく動いてくれない。
よく言われるようにAppDeleget.mで [director setDeviceOrientation:kCCDeviceOrientationPortrait];を指定してやる方法でも横向きになってしまう。 ![]() デバッガを使ってどのタイミングで縦向きになっているか調べると、RootViewController.m内で制御がかかっているっぽい。 で、いろいろ試した結果、同クラス内の return ( UIInterfaceOrientationIsLandscape( interfaceOrientation ) );を return ( UIInterfaceOrientationIsPortrait( interfaceOrientation ) );に書き換えれば縦向きになることがわかった。 ![]() ただ、これが根本解決になっていないことは明らかなので、もしこれよりうまい方法を知っている人がいたら是非教えていただきたい。 俺と同じところで詰まっている人がいたら、とりあえず上記のやりかたで急場をしのいでほしい。 |
![]() |
|
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; 5.(プロジェクト名)ViewController.mを開き、https://gist.github.com/1144713に記載されているようにソースを修正する。具体的には 5.1.下記を追記 @synthesize webView;5.2.下記で埋め込みたいURLを指定 NSURL *url = [NSURL URLWithString:@"http://yahoo.co.jp/"];5.3.下記を追記 NSURLRequest *requestURL = [NSURLRequest requestWithURL:url]; 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・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/sh7. 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/sh12. 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で導入した。 |
![]() |


