OSTRACISM CO.

ScalaとOCamlとF#とPythonと...

OCamlnetに落胆する

 「OCamlnet Http_client」で検索すると、Http_client.Convenienceを使ってみた系の頭の悪い話ばかりでウンザリする。Cookieをセットしたりとか細かく制御したいからプログラムを書くんであって、Http_client.Convenienceでは仕様が大雑把過ぎて使えない。

 Http_clientの使い方はHttp_client.pipelineが関係してることまでは突き止めた。つうかマニュアルのHttp_client.pipelineのところにExampleが書いてある。ダウンロードのプログレスを出したいんだが、どうもよく分からん。プログレスが出せないならHttp_client.Convenienceでも同じ。


2016.03.17


 OCamlの外部ライブラリのOCamlnetを調べて判ったのは、ダウンロードするときにどのくらい済んだのかの経過を表示したいという私の目的はちょっとやそっとでは達成できないらしいこと。OCamlnetはなるほど壮大なフレームワークのようで、色々取り揃えているようだ。だが、ガイドの説明にて「The Netchannels tutorial - strongly recommended read!」なんて書いてあるから読んでみたが、単に独自のI/Oデスクリプタの説明だった。Http_clientを調べてる私には一切無関係。

 単にhttps接続されたWeb上のファイルをダウンロードするのにpipelineやらcontextやらtransportやらequeueやらengineやらあまりにも普通名詞過ぎて意味不明な独自概念が目白押し。あぁ、なんだ、世界系だったのか。こういうのチマチマ構築するのって楽しいんだろうなぁ。結局経過表示をする方法は発見できなかったわけで、縁があったらまた会いましょう、さようなら。せめてPythonのurllib2とか.NETのWebClientくらいに扱いやすければ文句もないんだが。

 結局自分でUnix.socketを使って書いたHTTP GETをするコードを元に、Socket通信をOCamlの外部ライブラリのSslに置き換えることで実現。さらにはファンクターにして、httpとhttpsでコードを共有した。C++なら仮想関数で実現するようなことはOCamlではファンクターで合ってるんだろうか。五十嵐淳さんの入門書に「一部だけ異なる似たようなモジュールを何度も書く面倒をなくし」とあるから多分合ってるんだろう。


2016.03.22


「インデックス」へ戻る


OSTRACISM CO.

OSTRA / Takeshi Yoneki