2003-09-20
_ PHP+NuSOAPでGoogle Web API (13:50)
>>PHP+NuSOAPで日本語したいと思って、こちらのページを参考にNuSOAPのSOAPリクエストを送信する部分のContent-Typeを書き換えてみたのですが、うまく行きません。Content-Lengthは削ってしまうとエラーが出てしまいます。
というコメントがあったんで、試しに新しいNuSOAP(Revision 1.59)で試してみたら、Conntent-TypeとContent-Lengthを削ってもうまく動かない。
で、真面目に中身を見てみたら、現在のGoogle Web APIは普通に日本語が通るようになっているみたいだ。SOAPレベルではUTF-8でやりとり出来ている。ただ、NuSOAPがISO-8859-1以外のことを考えていないため、せっかくUTF-8で返ってきた結果を強引にISO-8859-1に変換(utf8_decode)しようとしてデータを壊してしまっていた。
というわけで、NuSOAP Revision 1.59をベースに日本語でGoogle Web APIを利用できるようにした修正版nusoap.phpと元ファイルとの差分(nusoap1.59_jp.patch)、Google Web API操作ライブラリ(GoogleSearch.php)、それを使ったサンプル(sample.php)を作ってみた。
- アーカイブ - http://dev.ishinao.net/archive/phpgoogle.zip
- サンプル - http://dev.ishinao.net/sample/PhpGoogle/sample.php
GoogleSearch.phpのGoogle Web APIs license keyを自分で取得したものにするだけで動くかな。
- GoogleRecordSet.phpに、取得した結果セットの1行目を読み飛ばすバグがありました。現在のアーカイブに収録されているバージョン(1.2)では修正されています。
- 2003/10/15 queryに対して行っていた余計な変換処理を省きました。
2004-09-20
_ ブクログ -WEB本棚サービス- (15:55)
blogmapに載っていたんで見に行ったところ、また新しい本棚ツールが出てきたらしい。でも、今のところ(今後追加される予定の機能まで考えても)、本棚の表示方法以外には、あんまり参考にするところはなさそうだなー。試しにMMに登録している本を600冊くらい登録してみたんだけど、本棚に表示できるのは100冊までっぽいんで、あんまり意味がなかったかも。
今後追加されるらしい、JavaScript Includeで書影付き表示を可能にする機能ってのは、ユーザーフレンドリーな感じで一般受けしそうだ。MMの場合は、RSSを配信するから、その手の加工は利用者サイドで勝手にやってくれというスタンスだから、あんまりユーザーフレンドリーな機能を提供する気はないんだよなー。配信データフォーマットはRSS一種類に統一しておきたい。
で、一番のポイントであろう、本棚の表示方法はなかなかうまいこと考えたなー。あれだけ変形させても、結構雰囲気は保てるのね。書影画像の加工って規約的にはまずそう(ブクログは画像加工しているんではなく、ブラウザ上の表示サイズを変えているだけなんで大丈夫だと思う)だけど、書影を立体感のある形に変形させて(→のような感じね)、重ね合わせて表示させる表示形式にして、JavaScriptで本棚から引っ張り出しているような動きにすると結構いいかもなー。MM上ではやらないだろうけど、RSSを食わせるとそういう出力をするスクリプトとかは作ってみてもいいかな。
_ 期間指定を追加 (20:21)
UIは作っていないけれども、引数にfrom=YYYYMM(DD)、to=YYYYMM(DD)と指定すると、その期間の日付のメモのみを抽出する機能を追加。これを使うことで、たとえば、
<%=rss_recent url="http://mm.ishinao.net/index.rdf/1?from=200409&to=200410&sort=date&order=asc&kind=thought&trackback=1&size=100", 100, 36000 %>
なんて感じのRSSを指定すると、以下のようにユーザーID:1(私)が2004年9月に登録した感想URL一覧が表示されるようになります。まあふつうは自分のユーザーIDを指定して、自分の感想一覧を作ったりするのに使う感じかな。
rss_recentプラグインは、出力をカスタマイズできないんだっけ? こういう用途では、各項目にdc:dateの日付情報を出力してくれた方がうれしいんだけど。
2004年9月の読書感想一覧
%Y-%m-%d
_ 欲しけりゃ作ろう (20:38)
rss_recentプラグインで、各項目に日付を出力するパッチ。rss_recentに第4引数を追加し、そこで出力したい日付フォーマットを指定する。上記では'%Y-%m-%d'を指定している。
*** rss-recent.rb.org 2004-09-20 20:29:01.000000000 +0900
--- rss-recent.rb 2004-09-20 20:36:04.000000000 +0900
***************
*** 21,27 ****
"Using RSS parser version is #{::RSS::VERSION}.",
}
! def rss_recent(url, max=5, cache_time=3600)
url.untaint
cache_file = "#{@cache_path}/rss-recent.#{CGI.escape(url)}"
--- 21,27 ----
"Using RSS parser version is #{::RSS::VERSION}.",
}
! def rss_recent(url, max=5, cache_time=3600, dateformat = '')
url.untaint
cache_file = "#{@cache_path}/rss-recent.#{CGI.escape(url)}"
***************
*** 39,44 ****
--- 39,47 ----
rv << '<li>'
rv << %Q[<span class="#{rss_recent_modified_class(time)}">]
unless url.nil?
+ if dateformat != ''
+ rv << %Q[#{CGI.escapeHTML(time.strftime(dateformat))} ]
+ end
rv << %Q[<a href="#{CGI.escapeHTML(url)}" title="#{CGI.escapeHTML(title)}]
rv << %Q[ (#{CGI.escapeHTML(time.localtime.to_s)})] unless time.nil?
rv << %Q[">]
2006-09-20
_ だらだら来ても1時間40分程度らしい
| かかった時間 | 1:40 |
| 自転車に乗っていた時間 | 1:17 |
| 走行距離 | 25.50km |
| 平均時速 | 19.7km/h |
| 最高時速 | 44.9km/h |
| 総走行距離 | 357.2km |
また明治通りルート。2日連続はまだ体が慣れていないんで、今日は寄り道しながらのんびり行く方向で。といいつつも、蕨のSOXであっさりDJEBELのスパークプラグが手に入ってしまったんで、それ以外は特に寄り道もしなかったけど。
昨日より1時間ほど遅く出発したところ、昨日よりもだいぶ道が空いていた。朝の混雑が一段落したタイミングだったのかな? というわけで、基本的に急がずだらだらこいでいたつもりだったんだけど、結果的に昨日よりも平均時速的には速かったらしい。
体の方は、やっぱり2日連続はまだ体がついていかず、足全体の筋肉がふとした拍子に軽く痙攣しそうになるくらい疲れている。といっても、自転車をこいでいるときは別に大したことはなく、信号とかで停まっているときやこぎ始めるときに気になる感じ。あと右手の親指の付け根が痛い。右手はまめにグリップシフトを回すんで、そのせいだと思う。自転車の基本性能的には今のでも十分片道25kmに耐えられるんだけど、グリップシフト以外に切り替えたいとなったら、結局自転車ごと買い換えることになるんだろうなー。今の自転車に金かけるのはあほらしいし。
_ 帰りは1:30
| かかった時間 | 1:30 |
| 自転車に乗っていた時間 | 1:17 |
| 走行距離 | 25.53km |
| 平均時速 | 19.9km/h |
| 最高時速 | 45.1km/h |
| 総走行距離 | 382.7km |
右足の太ももの裏側の筋肉がつりそうなんで、帰りは足に少しも負担をかけないように気をつけて帰ってきたんだけど、それでも1時間半で帰り着けた。夜遅めの時間帯だったら、どんなにゆっくりめに走っても1時間半見ておけば十分ってことか。これ、それなりの自転車に乗り換えたらどれくらいに短縮されるのかなー。エンジンはこのままでも10分とかの単位で短縮できるんだったら、乗り換える価値があるんだけど。
2007-09-20
_ 無効なルーティングでIndex/Indexを呼ばせない
Zend Framework(trunk)でRewriteRouterを使っていて、無効な(設定したルートいずれにもマッチしない)ルーティングの場合はエラーが出てほしいんだけど、なぜかIndex/Indexにルーティングされてしまう。
フロントコントローラ(もしくはディスパッチャ)のuseDefaultControllerAlways設定の問題かなーと思ったんだけど、それもデフォルトのままでOKのはずだし、おかしいなーと思いつつも、あまり重要度が高くない問題だったんでしばらく放置していた。
けど、やっぱり気色悪いなーとソースを追いかけてみたところ、なんだかZend_Controller_Dispatcher_Standard::isDispatchable()の、
if (!$className) {
return true;
}
が
if (!$className) {
return false;
}
なんじゃないかという気がしてきたんだけど、まさかバージョン1.0.0が発表されてずいぶん経つし(もう1.0.1も発表されてるし)、こんなところにこんなバグが残っているはずがない気もするし、Zend FrameworkのJIRA(バグ管理ツール)もまた落ちているみたいだし(っつーか、最近Zend FrameworkのWikiにつながったことないんだけど、その辺のサーバーって生きてるの?)、ひとまずここでさらしてみる。
直った
やっぱりバグだったのか。1.0.2(ZF-1727)で修正されていた。っつーか、1.0.2が出るまでずっとJIRAが死んでなかった? そんなにまめにチェックしていたわけじゃないけど、もしかしてZFの開発はすでに収束に向かっているのかと疑ってしまったよ。


Before...
_ panda [ありがとうございます! とても助かりました。 #私のコメントも引き合いに出されていましたね(汗) 修正してみたと..]
_ ishinao [>まみおさん ライセンスはLGPLなんで、LGPLに基づいて改変&再配布等好きにしてもらって結構です。 というか、..]
_ まみお [了解です。ありがとうございます。 ライセンス、難しいですね(^^ゞ 仕様変更はたぶん、前向きな理由だと思います。 ..]