久々に会社行ったらすげー寒かった。本来5日から始業のところ4日に行ったので人少なくてとても寒い。普段は冬でも冷房入ってるくらいなのにな。
年末年始はあまり休日出勤もせずに5連休。帰省もしなかったので本当にだらーんと休めた。 最近は日曜以外は出てたりもしたし夏の休日シフトとの合わせ技で祝日なんかずっとどっか消えた状態だったので3連休以上自体かなり久々だよ。 そんなに休んだらぜったい身体壊すわーと思ったんだが全然問題なかった。忙しいと元気だな。
まだしばらくは忙しいけど今月も中旬以降はどうだろうな。暇にはならんがピークは過ぎた感があるのでちょっとずつ生活リズムも戻していかないと。
VITAのアンチャーテッドをクリアした。PS3持ってないからアンチャーテッド自体初めてだったけど、ふむこんなもんかという感じ。普通に面白かったけど、ハードのローンチタイトルにありがちなハードの機能をとりあえず使ってみました的なイベントが邪魔くさい。よくあるデモシーン中に急に出てくるボタンを押せ的なやつが、矢印が出てきてタッチパネルでなぞれ的な物になってた。たまになぞったつもりでも失敗するんだが何で失敗したんだかよくわからんのがひどい。そもそもこのボタンを押せ的なイベント1は本当にゴミクズで一刻も早く廃れるべきだと思っているので、それがタッチになろうが何になろうが俺はぶち切れるだろう。
ゲーム自体は楽しかったけれども、じゃあPS3買って他のやつもやろうか!という程ではなかったな。よく出来てるけどそれ以上の魅力はなかった。最近やったゲームではアサシンクリードのいまいちな点は目立つけど独特なゲームって方が好きだな。まあストーリーの好みもあるか。
アンチャーテッド消せば俺の4GBしかないメモカにも他にゲーム何か入るなーと思ったんだけど今VITAでやりたいゲーム特にないな。ドリクラZeroとか買おうかと思ったがこの手のゲームはめんどくさくてすぐ積みそうだ。PSPのゲームもできるのを思い出してダラバーを入れてみたらスティックで操作しやすいし、画面も思ったより綺麗でこれはいいと思った。なんかPSPのゲーム探すか。セブンスドラゴン2020とかもやってみたいけどどうなんだろうな。
そういやVITAのPlaystation StoreアプリがPSPのより使いづらくなっててとても残念なんだけどなんとかならんのかな。ゲーム探そうとすると50音順でしか探せねぇっておかしいでしょ。PSPではジャンル別とかダウンロード専売とかいろいろ細かく分類されてたんだけどなぁ。VITAソフトはまだ数無いから問題ないんだけど、PSPソフトはもう名前知ってないと探せないレベル。早いところ改善をお願いしたい。
そしてたいていは失敗するとすぐデモシーンの最初から見直しだ。 ↩
HTTPインターフェースの作成中。従来のPeerCastと同じようにCGI的な作りにしようとしてたんだがとてもめんどうなことに気付いてやめた。
HTTPでやりとりする部分はMVCで言えばControllerなわけで、それでHTMLまでレンダリングしなくちゃいけないCGI的な作りはめんどいなぁと。成功したら成功したページに遷移して、失敗したら元のページにエラー情報持たせて表示するとかめんどいでしょ。Viewは完全にクライアント側に持たせた方がきれいだ。
というわけでHTTP経由のAPIを使って、クライアント側のJavaScriptをやりとりしよう。これがAJAXってやつか。今までなんでわざわざこんなめんどいことするのだろうと思ってたわけだが、クライアントとサーバを綺麗に分離できるって利点があるわけね。
ついでにJSONをHTTPやりとりさえできるならクライアントがWebブラウザじゃなくてもいいわけで。前から作ろうと思っていた外部ツールからの操作インターフェースもこれで兼ねられるのが嬉しい。レスポンスがHTMLだと人間が読むものでプログラム的に解釈するのは難しいからな。
適当にJSONでやりとりすればいいかなーと思ったんだけどJSON-RPCっていう仕様があるようなのでそれに則るようにした。 .NETではJayrockというJSON-RPCのサーバ・クライアントライブラリがあってとても便利そうなんだけど、サーバ側はASP.NET前提のようなのでASP.NETを諦めたPeerCastStationでは使えない。JSON-RPC自体はJSONのパースさえできれば難しいところはなんらないので自前でサーバ書こう。
JSONパーサはSilverlightだとSystem.Jsonに入ってるが、.NETだとSystem.Jsonねぇよ……。ライブラリとしてはあったんだがライセンスがWCF Prereleaseどうこうとかいうライセンスだったので読むのめんどい。使わないほうがよさそうだ。JSONへのシリアライズ辺りのクラスは標準でもあったんだが、シリアライズじゃなくてJSONを直接使おうとするのは難しそうだ。結局Json.NETというのがメジャーなようなのでこれを使うことに。
あとはJSONというか動的型付け言語と静的型付け言語のギャップがめんどいくらいで大変なところもなくさくさくと実装できた。テスト書くのめんどいでしゅううう。
テスト書こうとして思ったんだが、そういやJSON-RPCをHTTPで使った時にGETに対する反応ってどうすればいいんだろう。クライアントから送られてきたJSONリクエストに対してレスポンスを返すのでPOST前提で書いてたんだが、リクエスト送れないGETではどうしたものか。GETはHTTPの仕様的に実装必須らしいのでエラーにするのはよくなさげ。しかしURLエンコードされたJSONをリクエスト扱いするとかいやだよ?
JSON-RPCの仕様では特に記述されていない、というか2.0の仕様ではHTTPにすら触れていない。1.1の仕様では一回のPOST接続で沢山リクエストしてもいいのよ?とかぐらいしか書かれていないのでGETでどうしろということもないようだ。
実装を見るとJayrockではRPCでアクセスできるメソッドの一覧や引数などのヘルプページを返してくれるようだ。なるほどこれはとても素敵。GETでさらにパラメータを渡すとアクセス用のJavaScriptとかテスト用ページも出てくる。致せり尽せりだがここまで自前で実装するのはしんどいね。とにかくGETの時はRPCの実行はしなくてよさげなのは分かったので、適当にバージョン情報か何かをJSONで返すようにしておくあたりが精々だろう。
それにしてもテスト書くのめんどくせぇな……。