アーカイブ
-
Services_Twitter_Uploader
10ヶ月ぐらい掛けてついにリリースw kiddyに絡まれてうざかったのと、途中いろいろ忙しかったので馬鹿みたいに期間が空いてしまった。 まぁプライベートで適当にやってるとこんなもんさ(俺は) http://pear.php.net/package/Services_Twitter_Uploader/
-
Services_OAuthUploader改めServices_Twitter_Uploader
以前書いたServices_OAuthUploaderっていうパッケージ。 Pearにproposalして色々やりとりした結果、名前も改めてやっと出せそうな感じ。 途中でいわゆるkiddyに絡まれてやる気無くしたりもしたけど、tillってメンテナがsupportしてくれたおかげでやっとリリースにこぎつけられそう。
-
google data api で google calendar でカレンダーの新規作成が出来ない
ircでkaepapaがgoogle calendarの新規作成がどうの言ってたので、試してみたら色々はまったのでメモ。 とりあえずprotocol仕様書を眺めながら、自分でphpでcurlを使って実装してみたけど、カレンダーの一覧の取得は出来るけど、新規作成は出来ない(zfの実装も一緒) ちなみにgoogle data apiはv1、v2が有り、zfの実装はv1。 動かした観想的にv1は色々動かない部分が出てきてるっぽい(新規作成周りとか)。 ドキュメント見ながらやってても限界を感じたので、googleのjava clientを落としてきて、リファレンスをコピペして作って実行=>問題なく毎回作れる。 実行時には google collectionsが必要になるけど、jar無いみたいなので作ったのを置いておきます。 google-collect-snapshot_20110101.jar 仕方ないので、ncを nc -l -p 8080 とかして、リクエスト先を変えてrequestをdumpしてみる。 dumpした結果を見ると、xmlのフォーマットがprotocol仕様書に書いているのと若干違う(仕様書は2005の所がリクエストは2007とか。 取りあえずリクエスト内容とか、cache周りのヘッダとかも全部揃えて送ってみると、返事待つ状態になって無応答で、curlが * Empty reply from server と吐いてプログラムが終了する。(パラメータが不正な場合はエラー画面が帰ってきてました、Content-lengthが無いとか、認証が不正とかはちゃんとエラー画面が返る) この状態でCookie送るようにしたりとか、色々試しても動作しなかったので、picasaのアルバム作成を作って試してみると問題なく作成完了。 この辺からhttp clientの実装を疑いだして、HTTP_Request2で実装しなおしてみると、無応答では無くカレンダー一覧が帰ってきて終了するようになる(Endpointが一緒なので、リクエストが不正か何かで処理が一覧取得になっちゃうような気がする) ここで試しに commons-httpclient3を使ってためしに実装してみると、新規作成完了・・・ Location周りが上手く動作してくれないので、自分でレスポンス解析してリクエスト投げてます。 って事で最終的にphpで動いてませんが、まとめ。 クライアントの実装の問題っぽい(サーバが一度Location返してくるからそのfollowとか、partical response,request辺りとか?) v2を使った方が良いです ドキュメントは信用しない方が良さそう phpで動かせてません(picasaは動いてるんだけど、同じ実装でcalendarは動かない) コード一覧 php curlを使ったgoogle calendar 新規作成の実装 php http_request2を使ったgoogle calendar 新規作成の実装 php curlを使ったpicasaのアルバム作成の実装 commons-httpclient3 を使ったgoogle calendar新規作成の実装
-
各種PHPのWebFramework上でhello worldベンチ(apcもあるよ)。
表題のまんま。 対象フレームワーク CodeIgniter 1.7.3 ZendFramework 1.11.1 CakePHP 1.3.6 KohanaPHP 3.0.8 って取り終えてからsymfony抜けてるのに気付いた・・・まぁいいや。 ソース とりあえずgithubにおいてみた https://github.com/withgod/php_framework_benchmark cakephpはやたらファイルが多いのでいったん保留。 git add したときに空のフォルダがすっ飛んでるのでそのままじゃ動かないかも。 実行環境 vmware上のdebian lenny(2.6.26-2-amd64) 多すぎても実際に動かすサーバとの差異が出そうなので、コア2個、メモリ2G(ホストはCorei7,Mem8G) PHP 5.2.16-0.dotdeb.0 Apache 2.2.9-10+lenny8 計測側は 別マシン(GigaBaseLan経由)のdebian sidからabでポチっと。 計測に使ったコードも一応晒すかと思ったんだけど、CakePHPがappsだけうまく切り離すのが面倒で良く解らなかったので止めた。 テンプレートは全部で使ってません。 #zfはzf createして出来たコードに iniでresources.frontController.noViewRenderer = 1 して Controllerで echo ‘helloworld’みたいな感じ。 計測方法 こんなシェル回すだけ、、、つって最初はかなり適当にやってたんだけど、値がおかしいので設定をもう少しつめました。 具体的には下記のような感じ。 apache 接続数が足りてなくてスループット出ないので変更、評価アプリが単純なのと相まって凄いスループット出てる・・・w 最初から全部400とか立ち上げるとSwapOut発生しまくりだったのでとりあえずこんな感じで。 再起動時にワーニング出るんだけど(gracefullだと駄目です、ちゃんとstop/start出来るコマンドで。してもWarningで照るんだけどね・・・)、ps axf | grep -c ‘apache2′するとちゃんと立ち上がってるみたいなので気にしない。 ulimit file descriptors [...]
-
Services_Twitter_Uploaderを使って簡単Post
自作自演エントリをでっちあげてみる。 Basic認証が廃止されたせいで、Twitpicやyfrogへのポストが凄く面倒になってる人にお勧めのライブラリ。 javaだと twitter4j.media のお陰で簡単にアップロード出来るのに、お手軽なはずのphpだと出来無いじゃん!って事でt4j.mediaのリファクタ後の勢いに任せて作ってみました。 PHPからOAuth Echoを使って、画像投稿サイト(yfrogは動画も投稿出来るけど)に簡単にPHPから投稿出来るライブラリです。 対応サイトはこんな感じ imgly plixi twipple twitgoo twitpic yfrog mobypicture twipl posterous 使い方 Services_Twitter_Uploader から最新版を落としてきて、適当なフォルダに突っ込む。 必要なモジュール HTTP_OAuthとHTTP_Request2。 で入ってくれるはず。 コード
-
makegood を試す
俺は基本vim+zsh+screenなんだけど、他の要員の事も考えてよさげな makegoodを試してみる。 環境 win 7 64bit php 5.2.14, xdebug 2.1.0, phpunit 3.5.5 makegod 1.1.0(update site install) 動かしてみたのはこないだから書いてる Services_OAuthUploaderを動かしてみた 取りあえず何も考えずmakegodの設定をこうして全てのテスト実行 テスティングフレームワーク PHPUnit XML設定ファイル /Services_OAuthUploader/tests/phpunit.xml プリロードスクリプト 空 この状態で動かすと、include_pathの問題で次のエラー PHP executableでphp.ini指定してあって、include_pathも設定してるんだけどその設定は出てきてない・・・ eclipse経由で php -i とか出来たら確実なんだろうけど、PDT普段から使って無いので解らず。 仕方ないので makegod 側で prepare.php を次のように置いてmakegodの設定を変更 プリロードスクリプト /Services_OAuthUploader/tests/prepare.php この状態で実行すると次のエラー 何でこうなのかはよく解らんが、適当にgrepして Stagehand\TestRunner\TestRunnerCLIController.php に require_once(‘Stagehand/CLIController.php’);を付けて上記エラーは対応。 が、この状態で実行しても経過時間がひたすら過ぎてくだけの状態。 他の箇所ならともかく、 testFactory なので何が問題なんだろう・・・と思いつつ取りあえず phpunit.xml を外してみたら動いた。 このエントリを作者に投げてやり取りしたところ、問題点はproccessIsolationらしい。 @iteman: @withgod 結論としてはStagehand_TestRunnerがprocessIsolationをサポートしていないことが原因ですね。将来的にはMakeGoodからはprocessIsolationは常に無効化するつもりですが。代替手段は提供します。 http://twitter.com/iteman/status/12793420296757248
-
Services_OAuthUploader 作った
t4jへのpatchの投稿とか、そのまま勢いに任せてリファクタリングとかしてた関係で、oauth echoに対応したuploaderに妙に詳しくなったので、そのままの勢いで Services_OAuthUploader とか作ってみた。 まぁぶっちゃけt4jのmedia関係をそのままphpに移植したと言っても過言では無いんだけど、まぁその辺はご愛嬌。 とりあえずコード書いて、コメント書いて、テスト書いてみた、ってレベルなのでまだpearへの登録とかはしてない(ってか、仕方しらない) 対応サイトはこんな感じ。 imgly plixi twipple twitgoo twitpic yfrog 使い方はtest見てください、って事で・・・ 実装・テスト書くよりも、コメントだとかredmine,hudson周りの方が時間食ってたと思う(‘A` 取りあえず作ってみた、ってレベルなので今後の予定は未定。 何気なく振ってる1.0.0ってのはpear的にはβとかじゃなくて正式版扱いになると思うので、バージョンは明日にでも変えます。 取りあえず test 周りが結構適当なので、その辺を綺麗にしようかな・・・
-
Hudsonでsimpletestのテストレポートを出す(出せてない)
取り合えず動かすだけなら、shellの実行で適当にテスト実行を叩けばOKでした。 が、それだけじゃせっかくのHudsonが泣いていて、JUnix形式で吐き出して解析画面を出したい。 で、思考錯誤中。 まず、simpletestでJUnit形式のログを出せないかなーと調べたところ、1.1系なら(何時出るんだろう・・・)、JUnitXMLReporterなる物を発見。 お手軽に1.0.1からアップグレード出来ないかなーと試してみたけど、細部に変更が多いみたいで、エラー出まくりで諦める。 で、その辺をTwitterでつぶやいていたら、Stagehand_TestRunnerなるtesthelperアプリの作者の方からJUnit形式のログ出力のサポートしてるというmentionを貰ったので試し中(完結していません) 取り合えずそのままだと、手元のテストは殆どがWebTestCaseで、UnitTestCaseのサブクラスじゃないとヘルパがテストクラスと認識してくれず動かないので、その辺にこんな感じで手を入れる。 #このアプローチは正直間違いだったと思う、UnitTestCaseをSimpleTestCaseにすりゃ解決だった、まぁ作っちゃったのでそのまま利用中。 http://rider.withgod.jp/src/Stagehand/Stagehand.001.patch 取り合えずこれで、コマンドラインで動作出来るようになる。 そのままHudsonで実行はOK、xUnitでログ解析も正常系ならOK、テストレポートも確認できました。 が、テスト失敗した場合にレポートが出せません。 取り合えず、JUnitXMLDOMWriter がcreateElementする時に <>&辺りをエスケープしてない所を修正 改行コードが複数混じってるときにエンコードがおかしくてXMLWriterがエラー吐くので改行をPHP_EOLで統一+複数あっても1個って具合に無理やり修正 http://rider.withgod.jp/src/Stagehand/Stagehand.002.patch simpletestがマルチバイト考慮しないで文字をぶった切るせいで、エンコードおかしいとエラー吐くので、適当にmb_を付け足す。 http://rider.withgod.jp/src/Stagehand/simpletest.001.patch まだ動かせてないですが、作者への情報共有用にblogエントリ立ち上げ。
-
ImageMagickのgif出力は遅い
どんぐらい遅いかっていうと、こんぐらい遅い。 #debian sid, php 5.3.2, Pentium Dual-Core CPU E5200 @ 2.50GHz, mem 2G 自分のTLから適当に画像(text及びユーザアイコン)を収集。 #sort | uniq 済み。 imagickとGDに掛けてみる。 imlib2にしようと思って値とってる最中に、imagickのgifが重すぎなのを見つけたので、取りあえず今回はjpgに変更で対応・・・ file_get_contentsで読み込んだ後にそれぞれにオンメモリで渡して、標準出力に出すだけのプログラムの所要時間。 #勿論、単に回してるだけなので1コア利用。 from-to-回数 imagick(sec) GD(sec) all-gif-100 9.089351 0.497831 all-jpg-100 0.340066 0.243432 all-png-100 0.422197 0.303007 allってのは入力画像の種別、この辺をjpgだけーとかにするとまた微妙に差異が有りました、がテーブルにするの面倒なのでallだけで :p imagickのgifが遅い、ってのはあまり見かけなかったので、記事にしておく。 参考URL 画像処理ライブラリのパフォーマンス比較 ここともう1箇所ぐらいはてなで見かけたけど、URLを失念 (‘A` 直接は関係無いけど嵌ったのが、 Content-type: image/jpg と返すとDoCoMoはいいけど KDDI/Softbank で画像が表示されない。 ちゃんと image/jpeg と返しましょう、手抜きしたせいで微妙にはまった・・・
-
HTTP_OAuthに XAuthを追加
結構やっつけだけど取り敢えず動くようにはした。 ほんとはConsumerクラス自体を継承するなり、拡張するなりした方がスマートだと思うんだけど、PHPって複数のコンストラクタを用意出来ないっぽいので、後方互換を考えて別クラスに。 んで、getTokenだけ対応して後はConsumerクラス使ってね、って感じ。 http://github.com/withgod/HTTP_OAuth githubの使い方が良く解らないのだが、こんな感じで良いんだろうか。
最近のコメント