daily reflection

毎日の振り返り

2011-12-30

大掃除

先日は主に作業部屋を、今日は風呂の掃除を。風呂掃除はちょっとサボっていたので時間がかかってしまった。もう少しマメにやらないとダメだな。

買出し

これまでお世話になってきた八百屋が、耐震工事の為に半年間休業となるそう。自分達が好きだから野菜を売っている、という感じが伝わる八百屋で、ここの野菜はスーパーよりも質が良い(ように見える)上に安い為、ほぼ毎週末買出しに行っていた。来年からどうしよう。結構な御歳の方々が店を経営していて、彼らが頑張っている姿が励みになっていたので非常に残念。

今日はアリオに。年末だからか、食材が高いらしい。なかなか商売上手。修理に出していた時計は結局今日も受け取りに行かず。

BSON続き

BSON Parserを自分で書こうかと思ったが、その前にもう一つのJava実装であるebsonを確認してみることに。ソースコードの書き方がとても参考になる。これで行こうかな、と思ったものの、ByteBufferに書き込むことが前提になっていて使いづらい。というのも、ByteBufferは途中でバッファサイズを変更することができないので、POJOのように簡単にサイズを判定できないものを扱うのが難しい。BSONの仕様を見ればどの型がどの程度のバイト数になるか分かるので、予め容量を算出してByteBufferを作ればよいのだが、ちょっと面倒。

一旦BSONの仕様に則ってBSON Parserを書き始めたものの、他の実装と結果が合うか確認する為に、mongo-java-driverの結果と比較する為のプロジェクトを別途作ってテストコードを書いてみたところ、このdriverではバイナリをリトルエンディアンで出力していたことに気がついた。試しにebsonでも確認したが、デフォルトはリトルエンディアン。こちらはDataOutputStreamを使ってバイナリを作っていったのだが、それだとビックエンディアンとなり、結果が合わず。

出力するエンディアンを変更することはできるけど、その前に自前でBSON Parserを書かずにmongo-java-driverを使えば良いと思うようになってきた。というのも、このモジュールにはorg.bsonとcom.mongodbの2つのパッケージが含まれていて、このうちのcom.mongodbを使いたくないので(MongoDBを使ってないので)使用を避けてきたが、BasicBSONObjectやBasicBSONListはorg.bson側にあり、バイナリへの変換であればorg.bsonで事足りるらしい。

また、mongo-java-driverであれば、POJOのシリアライズmonganezを使うことができれば一気にやることが減る。そう思ったものの、monganezはDBObjectに依存している為、現在はここを引っぺがす作業をしている。明日には動く見込み。