OCaml

Caml Programming Guideline

OCaml/guideline - U-Wiki+を発見したのでつらつらと眺めていた。こうしてみると、ダメな書き方をしているなぁ自分、と凹む。特にRubyとOCamlを交互に書いていると、どうもOCamlでも短く書きたいと焦ってしまい可読性の低いコードになってしまうなぁ。無理に…

読んでおくべきソースコードは?

手が空いたら、勉強のためにOCamlのコードを読みたいなぁとも思っているのだけど、「まずはこのコードを読め!」的なものはあるのかなぁ。教科書的な。これを読まずしてOCamlのコードを書くべからず!みたいなもの。オブジェクトは使ってなくても良いのだけ…

再度、とりあえずマルチなechoサーバを試みたら再度玉砕

昨日に引き続き…じゃあ全コネクション分のチャネルを管理すれば良いのでは?とおもい思いっきり手抜き(スレッド間の排他無し)ながらも下記のコードで試してみました。chsリストにチャネルを放り込んでます。 open Unix open Event let rec loop f = f (); …

とりあえずマルチなechoサーバ成功っぽい

なんとかそれらしい動きをするようになりました、が…どうもすっきりしないコードになってしまった…概要はこんなかんじ。 接続受付用のchannel(A)と、クライアントと通信している子スレッド群からの報告を受け取るchannel(B)を用意。 その他、すべての子スレ…

とりあえずマルチなechoサーバを試みたら玉砕

Eventモジュールの練習として並列的なアプリを作ってみようと思ったのだけど、ネタが出てこなかったので、複数のコネクションを受け付けておいて、一つのコネクションから受信したやつを全てのコネクションに送信するチャットっぽいechoサーバを書いてみよう…

module Eventがわからない…

Railsでカミさん用に作ったiKnowモドキも仕様変更の嵐が収まってきて、OSの入れ替えなんかも終わったので、久しぶりにOCamlをいじってみようと思ったのですが、Std Libを見てたらEventというmoduleがあることに気がついた。ちらっと説明(和訳)を見てみると… …

久々にどう書く

こないだまでの勢いを借りて、久しぶりにどう書くってみた。 どう書く?org 「Thread.yieldだと切り替わらなかった」っていうのはちょっと語弊があって、「うまく混ざらなかった」ということを書きたかったはずです。

○×

久しぶりにOCamlを使ってみたら、全く手が動かなかったのでリハビリをしてみました。題材は○×(マルバツ)。これまで、ゲームのアルゴリズムらしきものを書いたことが無いので定番のやり方がが分からないのですが、とりあえず全ルートの木を作って勝ち負けの数…

Programmer's guide, part 3 読了

Ocsigenまで、サンプルを作ったりしながら読了。以前、ogasawaraさんからコメントを頂いた通り、かなり癖のある奴でした…Railsが「ふつうのWebアプリだけど色々フレームワークに押し込んでコード書く量を激減」っていう感じなのに対して、Ocsigenは「Webアプ…

Ocsipersistの簡単な使い方

examples/tutoeliom.mlから抜粋してMutex絡みの処理を除いたやつ。 $ cat count3.ml open Lwt open XHTML.M open Eliom_services open Eliom_parameters open Eliom_sessions open Eliom_predefmod.Xhtml let mystore = Ocsipersist.open_store "db_count3" …

OcsipersistとLwtモジュール

Ocsigen辺りを眺めていて、Sqlite3とかで永続化ができることに気がついた。で、ちゃんと読んでみたら、LwtというCooperative(Non-preemptiveと同意?)threadな、いわいるFiberみたいなライブラリと密接に絡みまくっているのであった。な、なぜLwtと連携し…

手順メモ

デフォルトの設定(/usr/local/godi/etc/ocsigen.conf)では実行userやTCPポート番号辺りを適当に弄ったら動いたので、今度は自分で準備してみる。 まずはサンプルアプリを用意(examples/tutoeliom.mlのcountを抜き出しただけ)。 open Lwt open XHTML.M op…

IPv4で待ち受けできた

Ocsigenの「Details about settings」を見たら思いっきり解決法が出ていた。 <ocsigen> <port>*:8880</port> <user>mitsu</user> <group>wheel</group> </ocsigen>という風にportを指定すると、IPv4で待ち受けできた。Firefoxでのアクセスも確認できた。ま、まぁ、IPv6について基礎知識を知ることが出来たり、勘違いしてい…

お試しメモ

手順をメモ。 まず、FreeBSDのPorts Collectionに入っているOcsigenはIgnoreになっているので、GODIからいれることにするが、GODI自体入っていない(何故!?)ので、tar ballを落としてきてGODI入れる。 godi_consoleからapp-ocsigenをbuildさせる。 godi-sqlit…

Ocsigen入れたった

ラムダ計算が理解できなくたっていいじゃない!と開き直ってportinstallした。でも、今日は入れるだけにしておく。S.A.C. 2ndを見るので。 追記:と思ったらがーん。今日は寝ておけということか。 ** Port marked as IGNORE: www/ocsigen:

のっかりフィボナッチベンチ

恒例のフィボナッチベンチで V8 と Smalltalk、Ruby、Python、Scheme とを戦わせてみる - Smalltalkのtは小文字ですを見て、お手軽なのでなじみの言語で試してみることに。スペックがしょぼしょぼなので軽めで。 Ruby def fib(n) n < 2 ? n : fib(n - 1) + f…

Y Combinator

仕事でRailsにどっぷり漬かりそう(それはそれで楽しいけど)なので、彼方に行き過ぎないよう、いままで見て見ぬ振りをしてきたY Combinator(不動点コンビネータともいうの?)を見てみることにする。以下、どう書く?org から引用 # let rec y f x = f (y f) x…

棒倒し法で迷路作成

ちょっと前のプロジェクトで、メンバー全員で設計をゴリゴリやっている時期があったのですが、一日30分位はコードを書かせたいと思い、どう書く?orgの課題をメンバーに解かせていたことがありました。そのとき、どう書く?orgという課題があり、担当のメン…

A*探索アルゴリズム

最近、A*という単語を目にすることがあったので、ちょっとWikipediaで調べてみたところ、その正体は経路探索のアルゴリズムでした。経路探索なんてチャレンジしたことも無いので、これも何かの縁と思い、頑張って書いてみることにしました。googleってみたの…

恐る恐るGenlexを触ってみる

どうもOCamlを弄くっていると、やれocamllexだのocamlyaccだの、しまいにはcamlp4だの恐ろしげなものの存在が見え隠れしてくる。もういい大人だし怖がってばかりはいられないので、初心者にも優しそうなGenlexを触って見ることにした。The core languageの1.…

クイックソート

以前、Webか本かなにかでクイックソートのコードを読んだことがあるのだけれど、雰囲気以外忘れてしまった気がする。ちょうど都合がよいので自分で書いてみることに。 let rec sort = function | [] -> [] | pivot::rest -> let rec sep left right = functi…

二分木を作ってみる

そういえば、二分木を探索するコードは書いたことがあったけど、二分木を作るコードは書いた記憶がなかったなぁ、と思いやってみることにしました。いつもはWebの情報とかを参考にしがちなんだけど、脳に汗を書かせたい気分なので自力で頑張るぞ、と。 type …

POP3クライアントのモジュールを書いてみた

さて、今回はPOP3クライアントのモジュールを書いてみようと思います。前回、半泣きでテストを書いてみたので、それに合わせてつらつらと書いていけば良いはずです。ところでPOP3では、三つの状態(AUTHORIZATION, TRANSACTION, UPDATE)が規定されています…

POP3クライアントのテストを書いてみる

つい先程まで 嘘のような、本当の話を読んで、「いい話だなぁ」と感動し涙腺が緩みかけていたのですが、感動の余韻に浸る間もなく、引き続きOCamlでごにょごにょやってみたいと思います。これまで、「OCamlでメールクライアントでも作ろうか」と気持ちを盛り…

OUnitでユニットテスト

これまで、ちょこちょこOCamlを触ってみて感じたことなのですが、OCamlはコンパイル時の型チェックが非常に強力なので、 コンパイルが通るまでが一苦労 でも、起動させると期待通り動く ということが他の言語に比べると多いように思います(コンパイルエラー…

ocamlbuildを使ってみたメモ

諸事情によりOCamlメモ開始。えいっ! ocamlbuild -ocamlc 'ocamlfind c -package oUnit -linkpkg' test_tree.byte

OCamlで簡易SSLクライアント

私は現在趣味でOCamlという言語にまったりと触れているのですが、その一環として「GMailにアクセスできるメールクライアント」を作成中です。「そのアプリ、本当に欲しいの?」と冷静に自問すると、本当のところそんなに欲しくないのですが、何かの言語を覚…

おまじない扱い

#use "topfind";; こいつをやっておけば #require "netclient";;とかできる。