日曜日, 9月 05, 2010

最近買ったもの

ここ2ヶ月ほどの間に買ったものたち。

Kindle DX グラファイト


増え続ける本を少しでも減らすために購入。

これを買った一ヶ月後に、日本語対応されたKindle3が出て若干がっかりですが、画面サイズがでかいし、そのうちファームウェアアップデートがあるはず。

画面の表示は、そこそこ高級なわら半紙にきちんと印刷したというレベルで、非常に読みやすい。
見た感じはかなり紙に近いので、読んでいて疲れるということがありません。反面、文字入力はし辛いし、日本語は入力できない。書き換え速度の限界から、カーソル移動ももっさり。
本当に読書をメインにした端末で、速読も不可能なので、まったり読むことが大好きな人以外にはおすすめできない。
何となく、読書端末以上の可能性は感じるのだけど、これはKindleアプリが出てくれば分かるのかも。

いまのところ入っている本は、青空文庫の小説をPDF化したものとか、適当なライブラリのドキュメントとかで、まだ電子書籍は一冊も買っていなかったり。厳密にはiPhoneアプリのオライリー本から、ePubを抜いたのがいくつか入っているので、これをもって電子書籍を買ったと、言えなくもないけど。

なんで買っていないかと言えば、欲しい本の電子版が無いというシンプルな理由で、まだまだ移行期なんだなあということを実感させられています。

オライリーの読み物系の本で、面白そうなものがいくつかあるので、それらはそのうち買うかも。
Oreilly Safariに日本語の本がたくさんあれば、確実にユーザ登録するのだけどね。

Sony BRAVIA KDL-40HX800


液晶テレビです。
選んだ理由は、モーションフロープロによる240コマ再生機能。
クアトロンも出ていたけど、色の違いが気になるような映像より、残像が気になる映像をみるケースの方がはるかに多いので。
実際、モーションフローの補完機能は凄まじい。
ONにしたときと、OFFにしたときでは、まったく別の映像になってしまう。特に3DCGアニメとの相性は抜群で、絶対に映画館では見られないような映像に変化してしまっている。
コマを補完して追加するので、実際別の映像と言ってもよいのだけど、では正しい映像の再現とは何なのだろうと考えてしまう。
映画にしろテレビにしろ撮影というプロセスを経たその時点で実際の光学的風景とは別のものが記録されているわけで、それを「再生」したときの正解とは何なのかという問題になる。しかも電波で送信される場合、なんらかの変換が加えられている。3DCGの場合は、そもそも光学的実体すら存在しないわけで、ますますわけがわからないものを見ていることになる。
こんなメディアアートな体験が出来る面白テレビは、他に無いような気がする。

画面が大きくなったので、いままで見えていなかったものが見えるようになったというのも単純に嬉しいです。

iPhone4


電話代やら、その他いろいろ考えての変更。
まだ使いこなせていないからか、タッチしても意図しないところが反応してしまってイライラすることが多いです。小さいキーボードを買おうか考え中。
マルチタスクというか、複数のアプリを行ったり来たり出来るところは、非常に便利。
ただ、PythonなりPerlなりRubyなりが一つでも動けば、ものすごく便利になるのだけど。

土曜日, 7月 17, 2010

道を聞かれた ソニー歴史資料館

道聞かれラッシュ。

今回はソニー歴史資料館
聞かれた場所が資料館から結構離れていた所だったので、簡単な道のりと坂道の上にあることしか伝えられなかった。たどり着けただろうか。

なにかイベントでもあったのかと思ったけど、そういうわけではなさそう。
仕事かな?地図を持ってないあたり、営業ではなさそうだったけど。

水曜日, 7月 14, 2010

道を聞かれた 梅雨明けもうすぐ

今回も駅の場所。
分かっている人には線路どころかホームも見えているのですが、分からない人には認識できないのだろうな。

とりあえず横断歩道ですれちがうときには聞かないで欲しい。危ないので。

日曜日, 6月 20, 2010

道を聞かれた梅雨

うちの近所で一丁目はどっちかと聞かれた。どっちだったかなあと考えている間に「こっちだよね」と指で道を示しながら言われたので、「ええ多分」と答えてしまう。

ごめんね逆方向だったよ。
丁目じゃなくてランドマークで聞かれたならちゃんと答えられたかも

日曜日, 5月 30, 2010

CからOCamlを呼ぶ

今月ずっとやっていたことのまとめ。

CのコードからOCamlを呼び出す方法については、既に先人がいるのだけど、bigarrayと絡めるとあまり見当たらなかったので、まとめてみる。
OCamlのドキュメントだと、Chapter 18 Interfacing C with Objective Camlのあたりと、Chapter 29 The bigarray libraryのあたり。

基本編


CからOCamlのプログラムを呼び出す場合、大体以下の事を頭に入れておくとよいらしい。

  1. Cから呼び出したいOCamlの関数をCallback.registerに設定する

  2. C側でOCamlの関数を呼び出す前にmain関数でcaml_startup(argv)を呼ぶ

  3. caml_named_valueでCallback.registerに設定したOCaml関数を取り出す

  4. caml_callbackNでOCaml関数を呼ぶ

  5. OCamlとのやり取りにはvalue型の値が使われる

  6. OCaml関数への引数はCAMLparamNやCAMLlocalNで宣言(?)する(型によっては不要)

  7. Cの関数でCAMLparamNを通した値を戻り値にするときはCAMLreturnを使う(型によっては不要)



ではこれらを踏まえた簡単なサンプルを作ってみる。

ocaml.ml

let ocaml_process (a : int) (b : int) = a + b

(* 1. 呼びたい関数をCallback.registerに登録する *)
let _ = Callback.register "ocaml_process" ocaml_process

ただの足し算。

main.c

#include <stdio.h>

#include <caml/memory.h>
#include <caml/callback.h>

int main(int argc, char ** argv)
{
// 2. caml_startupを呼ぶ
caml_startup(argv);
// 3. OCamlの関数を取り出す
value *func = caml_named_value ("ocaml_process");

// 5. OCamlとのやり取りにはvalue型を使う
// Val_intでOcamlのintにします。
value a, b, result;
a = Val_int(2);
b = Val_int(4);
// 4. caml_callbackNでOCaml関数を呼ぶ
// 今回は引数が2つなのでN=2
// 引数が一つの場合はcaml_callbackと書き、数字はつけない
result = caml_callback2 (*func, a, b);

// 5. 戻ってきたvalue型の値をCの型に戻す
int print_result = Int_val(result);

printf("%d\n", result);
printf("%d\n", print_result);

return 0;
}

6番の7番についての記述が無いのはint型では必要ないから。必要となるのはblockedな値らしい。blockedってのが良く分かっていないが、とりあえずGCで管理されるような値という認識。
Int_valを使わない場合もあえてprintするようにしている。

これをビルドするためのMakefileはこんなの。ライブラリの位置はOSなどなどによって違うはず。

PROGRAM=call_ocaml
OCAML_LIB=/usr/lib/ocaml
OBJS = camlcode.o main.o

program : $(OBJS)
${CC} $(OBJS) -ldl -lm -L ${OCAML_LIB} -lasmrun -o ${PROGRAM}

main.o : main.c
${CC} -o $@ -c main.c

camlcode.o : ocaml.ml
ocamlopt -output-obj -o $@ ocaml.ml


さて、これを実行してみると、Int_valを使わない場合は13、使った場合は6がprintされることが分かる。
つまりOCamlのintを右に1シフトすると、Cのintになると。
詳しくはmlvalues.hを参照。Val_intの場合は何をやっているのかも分かったり。

argvにアクセス出来ない場合は?


一連の流れの中で、一番厄介なのはcaml_startup(argv)。main関数で呼べと言われても、mainに触れない場合なんてざらにあるわけで。何らかのフレームワークなんて使う場合は特にそう。それでもargvへのインターフェースが提供されていれば解決するけど、それも無いとお手上げ。
本当にそうなのか?というかargvへのインターフェースが無いと使えないなんて現実的じゃないだろう。と思って調べていたら、こんなページを発見。
無ければこんな感じに作ればいいらしい。

static void
ocaml_init ()
{
char *dummy_argv[2];
dummy_argv[0] = 0;
dummy_argv[1] = NULL;
caml_startup (dummy_argv);
}

ドキュメントにはこんなやり方書いていないのだけど、とりあえず動く。

bigarrayでやりとり


さて、世の中でかい数字の配列を使う機会というのはままあるわけですが、OCamlの配列は4M程度までしか扱えないらしい。4Mもあれば十分な気もするけど、足りない場合もあるし、充分なのか足りないのか良く分からない場合というのもある。
そんなときはbigarrayというものを使うそうな。これを使うと整数と浮動小数点数限定で16次元までの制限はるものの、横のサイズに制限は無しな素敵な配列が使えるらしい。
ついでにbigarrayのメモリレイアウトはCやFortrunと互換性があるので、これら2つの言語とOCamlをくっつけるときにも便利。

説明については、マニュアルのが詳しいので、Cの配列をbigarrayにするサンプルコードを示す。
value call_ocaml(){
int array[5] = {0, 1, 2, 3, 4};
value result;
CAMLparam1 (result);
CAMLlocal1 (barray);
long dims[1];
dims[0] = 5;
barray = alloc_bigarray(BIGARRAY_UINT8 | BIGARRAY_C_LAYOUT, 1, array, dims);
value *func = caml_named_value ("ocaml_process");
result = caml_callback (*func, barray);
CAMLreturn(result);
}

alloc_bigarrayがCの配列からbigarrayを作る関数。第1引数で配列の要素の型と、メモリレイアウトを指定。第2引数で配列の次元、第3引数にbigarrayに変換したいCの配列、第4引数に各次元の配列サイズを配列にして渡す。
厳密には「作る」のではなくポインタをOCamlに渡せる形にすると言った方が良いと思う。
それとbigarrayにすると言っても、Cの世界ではvalue型として扱われる。
OCaml関数でbigarrayを返り値にした場合も、Cで受けとるときはvalue型になる。つまりintの場合と同様に変換が必要になる。
biggarrayの場合はData_bigarray_val(big_array_value)というようにする。

簡単なサンプルコードを書いてみる。
ocaml.ml
let ocaml_process barray =
barray.{0}<-1;
barray;;

let _ = Callback.register "ocaml_process" ocaml_process

第1要素を1にしているだけ。

main.c
#include <stdio.h>
#include <caml/memory.h>
#include <caml/callback.h>
#include <caml/bigarray.h>

value call_ocaml(){
int array[5] = {0, 1, 2, 3, 4};
value result;
CAMLparam1 (result);
CAMLlocal1 (barray);
long dims[1];
dims[0] = 5;
barray = alloc_bigarray(BIGARRAY_UINT8 | BIGARRAY_C_LAYOUT, 1, array, dims);
value *func = caml_named_value ("ocaml_process");
result = caml_callback (*func, barray);
CAMLreturn(result);
}

int main(int argc, char ** argv)
{
caml_startup(argv);
int* result = (int*)Data_bigarray_val(call_ocaml());
printf("%d\n", result[0]);
return 0;
}

5要素の一次元配列を渡す。

Makefile
PROGRAM=call_ocaml
OCAML_LIB=/usr/lib/ocaml
OBJS = camlcode.o main.o

program : $(OBJS)
${CC} $(OBJS) -ldl -lm -L ${OCAML_LIB} -lasmrun -lbigarray -o ${PROGRAM}

main.o : main.c
${CC} -o $@ -c main.c

camlcode.o : ocaml.ml
ocamlopt -output-obj bigarray.cmxa -o $@ ocaml.ml


ポインタを渡している事を確認するのであれば、mainで配列を作ってOCamlからの返り値を投げ捨てた上で、元の配列を覗いてみるとよい。

日曜日, 5月 09, 2010

Ubuntu 10.04 入れた

10.04はLucid Lynx(透き通った山猫)。

特に問題はなくインストールできた。5/1に入れて一週間ほどたつけど、特に問題無し。
閉じるボタンの位置が変わったのはちょっと驚いたけど、普段はAlt + F4で閉じているので、そのうち気にならなくなるはず。

あえて不満を言うと、Fx3.5上のTwitterのWebインターフェースでの入力がやたら遅いという事と、デスクトップの「名前順に整理する」でアイコンがどこかにすっ飛んでいくことぐらい。
もしかしたらコアラの時からそうだったかもしれないけど、気になるほどではないかな。

ところで、透き通った山猫ってのはチェシャ猫みたいなものだろうか。

火曜日, 4月 06, 2010

子供が出来て考えたこと

出来たといっても、まだ生まれていないので、正直まだ実感が湧かない
エコー写真で1cmも満たない黒い影(既に心臓は動いているらしい)を見ても良く分からない。
そんな状態で思ったことをいくつか。

母子手帳。父はどこに?


妊娠すると母子手帳ってのがもらえます。正確には母子健康手帳です。市町村(区)から交付されます。
とりあえずツッコミどころとして「母子」なんですよね。「父」はどこに行ったんでしょう?ものすごい疎外感です。
これ、なんで「母子健康手帳」なのかっていうと、法律だからなんですね。母子保健法の第十六条にばっちり「母子健康手帳」と書いてあります。


(母子健康手帳)
第十六条  市町村は、妊娠の届出をした者に対して、母子健康手帳を交付しなければならない。
2  妊産婦は、医師、歯科医師、助産師又は保健師について、健康診査又は保健指導を受けたときは、その都度、母子健康手帳に必要な事項の記載を受けなければならない。乳児又は幼児の健康診査又は保健指導を受けた当該乳児又は幼児の保護者についても、同様とする。
3  母子健康手帳の様式は、厚生労働省令で定める。
4  前項の厚生労働省令は、健康診査等指針と調和が保たれたものでなければならない。


ちょっとひどいよね。一応、自治体によっては名称を親子手帳に変えているところもあるみたいですが(豊田市の事例岡山市の事例ぐぐって見つけた順)。
それと母子手帳とは別に父子手帳を用意している自治体もあります。例えば東京都は父親ハンドブックというものを配布しています(紙は180円で売っているそうな)。
とはいえ、法律でそのような名称を規程しているのはどうなんだろう。
まさか親子手帳ってのは男女共同参画(内閣府)でやるべきで、育児(厚生労働省)ではやるべきでない、みたいな典型的縦割行政ってことはないよね。

まあ、妊娠出産する上で、父親には何のリスクも無いというのも事実なわけですが。

産むより育てる(育つ)方が大変らしい


当たり前かもしれませんが、母子手帳で出産に関する部分って前の方のほんのちょっとです。あとは全部生まれてからのこと。
時間的にも生まれてからの方がはるかに長い(少なくともそれを期待する)わけですしね。
ただ産むのが楽かというとそうでもない。母体への負担はもちろんだけど、分娩可能な病院は妊娠確認後にすぐ予約しないと駄目らしい。今、Wikipediaの出産難民の項を見たけど、『「分娩予約が予定日の6ヶ月前」などという事態がみられ』と書いてある。6ヶ月前ならまだマシな方です。誰か書き換えておいて下さい。
ともかく、産科の医師不足ってのは深刻らしい。
とりあえずうちは予約できたので一安心しておく。

妊娠を伝える時期


当然ながら、妊娠した事を親戚知人に伝えねばなら無いわけで(内緒にしないといけない人もいるかもしれませんが)。うちは割とすぐ話しましたが。世の中には安定期になるまで話さないという人もいるらしい。
回りのサポートを得るには早い方がいいとは思うものの、初期流産の率は10~15%と結構高いので、ある程度待つというのも分かる気がする。
初期流産というのは防ぎようがない確率の問題らしいし。といっても妊婦はショックが大きいらしいし、場合によっては身体が危険になる場合もあるらしい。例によって父親には少なくとも身体的リスクは無いのだけど。精神的にはどうだろう。
なんだかんだで産むのも大変なような。

妊婦の様子


どうやら、ものすごく眠くなるらしい(寝つわり)。そして口に何か入れていないと気持ち悪くなるそうな(食べつわり)。なので少しの量を分散させて食べている。そうなのだが、明らかに量が増えているような気がしないでもない。それはともかく食べ過ぎは良くないらしい。赤ちゃんはまだ2cmぐらいなので、栄養が行っても処理し切れないのだろうな。赤ちゃんを育てるだけでなく母体も中をガードするために壁を作らなければならないだろうから、少しぐらいはいいのだろうか。食べられなくなるつわりは、もう少したったらなるみたいだし、そうなったら量も取れなくなるだろうし。
一応、ノートにその日何を食べたか記録しているけど、続くかしら。
嫁様は偏頭痛持ちなので、妊娠後に発生するかと思ったけど、どうやらなっていないらしい。人によっては症状がひどくなるらしいので、これはよかった。今気づいたけど、カフェインの摂取を減らしているのに頭痛になってないもよう。
コーヒーが切れると頭痛が起きる身としては羨ましい。



もうすこしエコー画像が人型になれば実感がわくようになるかなあ。