2012年04月

PHP4.4.9のパッチを頼まれて書いた話

3月上旬、あるドイツ人から「PHP4.4.9のパッチを書いてくれないか」という相談メールが届いた。「2週間以内にPHPのあるバグをふさがなければならないのだが、Cの知識がないので、バグ報告者であるiwamotにパッチを書いてほしい」というのだ。

「私だってCの知識はないし、PHPのコーディングを工夫すればバグをふさぐ必要もない」などと返したのだが、どうしても書いてくれというので、「うまく書けるかどうか保証はできないし、そもそも期日に間に合うかどうかわからない」と断ったうえで、トライすることにした。どこの馬の骨だかわからない私に頼るぐらいだから、そうとう切羽詰まっているのだろう。

パッチはなんとか書けたので、先方に送り、テストしてもらった。「意図どおりに動いているので、これを使うことに決めた」との返事が来た。

先方はずいぶん喜んでくれたようで、「報酬としてiPadを送ろうか、iPad 2がいいか、それともGalaxy Tab 10.1Nにするか」などと提案してくれた。だが、私は「今度ドイツに行ったときにランチをおごってくれるだけでいいよ」と冗談めかして返した。正直にいえば、住所を教えるのが怖かったのだ。

「そのかわり、パッチを公開していいか?」と聞いたら、「6週間待ってくれ、そして自分の素性は明かさないでくれ」との返事だった。それで今日書いたのがこの記事である。

リリースチェッカーのサーバを「さくらのVPS 1G」に乗り換えた

リリースチェッカーのサーバを「さくらのVPS 512」から「さくらのVPS 1GB」に乗り換えた。先日さくらのVPSサービスがリニューアルされ、同じ利用額でメモリ1GBのプランが使えることになったのだ。「さくらのVPS 512」をそのまま使っていても、メモリはそのうち増強されるようなのだが、HDDの容量追加まではないらしい。せっかく乗り換え優遇施策もあるので、乗り換えることにした。

乗り換えはとくに苦労なく済んだ。小さなサービスなので当然ではある。PHPアクセラレータのAPCを入れているが、キャッシュのサイズは1MBにも満たない。

勉強用に「さくらのVPS 512」をもう1台使ってきたのだが、そちらは「さくらのVPS 2GB」に乗り換えるつもりだ。

RESTをとるか、WebSocketをとるか

どうせWebアプリケーションを作るのなら、できるだけRESTfulに作りたい、と僕は今でも思っている。

とはいっても、セッションIDをcookieに保存する例のように、あえてRESTのスタイルを崩すべき場合もあろう。

非同期処理についても、RESTにこだわってジョブリソースを云々するより、WebSocketを使って完了をクライアントに伝えるほうが簡単だ。だから、スタイルを崩してWebSocketを使ってよい。

本当にそれでよいのだろうか。気になったので、RESTの提唱者であるRoy T. Fielding氏がWebSocketをどう評価しているのか調べてみた。理解に誤りがあればご指摘いただきたい。

Re: [hybi] WebSockets (2009-03-30)
なぜWebページからのプッシュが必要なのか、またなぜそれがHTTP越しでなければならないのか、という根本的な疑問が提示されている。
rest-discuss : Message: Re: [rest-discuss] Re: Restful Approaches to some Enterprise Integration Problems (2010-07-08)
まるでDoS攻撃のような接続の張りっぱなしを避けられるようRESTは設計されているのだ、という話。
blocking Upgrade
Upgradeヘッダを無効にできる設定項目を、Apache HTTP サーバの開発メーリングリストで提案している。
後続のメールでは「I am not planning to implement websockets -- I just want to protect the rest of the server from kids playing with toys.」とまで言っている。
Re: [hybi] Last Call: <draft-ietf-hybi-thewebsocketprotocol-10.txt> (The WebSocket protocol) to Proposed Standard (2011-09-01)
ここでもDoS攻撃との類似性が指摘されている。

ご覧のとおり、REST (HTTP) とWebSocketの性質の違いは明らかだ。RESTの利点をWebSocketが殺してしまうのだから、cookieほど簡単には採用するわけにはいかない。

逆にいえば、WebSocketを使いたくなるようなアプリケーションならば無理にRESTfulにする必要はないし、そもそも「Web」アプリケーションにすべきなのかどうかも検討したほうがよいということだろう。


ちなみに、WebSocketが80番と443番のポートを使うことになったのは、IANAにそうしろと言われたからだそうだ。

IANA told me to use ports 80 and 443 for WebSocket. See IANA ticket
#257455. (I had originally requested new ports, ideally 81 and 815.)
プロフィール
知識欲と謎解き欲が旺盛なWebエンジニア。AWS認定ソリューションアーキテクト&デベロッパー(いずれもアソシエイト)。JAPAN MENSA会員
カテゴリ別アーカイブ
記事検索