osiire’s blog

ふしぎなそふとやさん

maybeモナドはDB読み込みにちょうどよい気がする

思い切ってpa_monadを実プロジェクトに初めて投入してみた。特に今回はDB周りの処理が多かったので、maybeモナドが大活躍。 module MaybeM = struct let bind m f = match m with None -> None | Some v -> f v let return v = Some v end データベースからs…

OCamlerがScalaを触った感想

やっぱりタプルとオプションはどんな言語でも必須だと確信した 正規表現のマッチ結果をパターンマッチして変数束縛できるのは便利だわぁ Javaの資産がまるごと使えるのはすごい、というかうらやましい η変換に不自由なOCamlerから見ても、高階関数がやや書き…

OCaml Meeting in Tokyo 2009お疲れさまでした

もう一週間経ってしまいますが、OCaml Meeting in Tokyo 2009にて講演頂いた方、参加下さったOCamlerの皆様、手伝ってくれたocaml-nagoyaのメンバー、そしてid:camlspotterさん、お疲れさまでした。お蔭様でよい会になったのではないかと思います。ありがと…

Observer、haXe版

package itpl.util; import itpl.util.Util; class Observer<A> { var listener : Array<A -> Void> ; public function new() { listener = new Array(); } public function listen( l : A -> Void ) : Void { listener.push( l ); } public function clear_listener</a></a>…

0から小さい順に整数を返す関数をスレッドセーフに

今度はconcurrent cellを使ってみる。 (* to compile, ocamlfind ocamlc -thread -package ccell -linkpkg sf.ml *) let (@@) f g = f g let (+>) g f = f g let tee f x = ignore (f x); x open Ccell open Event let num = let m = Mvar.init_make 0 in fu…

0から順番の数字を返す関数をスレッドセーフに

(* to compile, ocamlc -thread unix.cma threads.cma mts.ml *) let nums = let with_lock m f x = Mutex.lock m; let r = f x in Mutex.unlock m; r in let c = ref ~-1 in let m = Mutex.create () in fun () -> with_lock m (fun () -> incr c; !c) () l…

氷のような微細構造

均一と考えられていた液体の水に不均一な微細構造を発見 | 理化学研究所 この手の研究をしていた研究室に所属していた事もあり興味深い。90°Cでも構造があるんだ。へー。でも1nmなら水分子4つ分くらい?そりゃ4つくらいならくっついてても不思議じゃない...…

原爆

今日は原爆の日。64年目。私は原爆は嫌いだ。好きな人なんていないと思うけど。今でも原爆が落ちてくるから逃げなきゃいけないと焦る夢を見ることがある。昔は結構頻繁に見てた。実は子供のころに観に行かされた原爆の劇と展示と「おこりじぞう」という絵本…

レイアウトの述語(Level 1)

こないだからレイアウトは述語と合成がいいとチラチラ言っているので、今のところ考えている述語を晒す。 type point = int * int type size = int * int type rect = point * size type independent = (* 自らsizeが決まるもの *) [ `Fix of size | `Prefer…

奴隷型顧客満足第一主義w

仕事関係でちょっと思う所があるので、書いて考えをまとめてみる。 http://kusoshigoto.blog121.fc2.com/blog-entry-278.html このエントリの内容は、ちょっと言葉があれだけど、分かりやすい。私も反省すべき点が多い。素直に言うと「奴隷型顧客満足第一主…

GUIを作るシステム開発がコスト高な理由

※似たようなことをもう何度か書いてきたけど、自分の考えをまとめるために書きます。読みづらいのであしからず。 レイアウトできない問題 思うようにレイアウトできない。無駄な試行錯誤の時間がかさむ。これはプログラマのGUIライブラリへの習熟不足の問題…

Auckland Layout Model

バックの理論は知らんけど、面白そうなレイアウトシステム発見。 ALM - The Auckland Layout Model Domain Specific High-Level Constraints for User Interface Layout 最初はちょっと面倒に思うかもしれないけど、やっぱりレイアウトはこんな感じで合成し…

衝突判定

Amthingにもそろそろ衝突判定をと思っていたら、こんなのを発見。 その8 4分木空間分割を最適化する! 空間を再帰的に4分割して、その空間にモートン順序と呼ばれる順序付をして、鬼のようなビット演算を駆使してインデックス化。恐るべし。 でも意外と簡単…

OCaml Meeting Tokyo 2009ではLightning Talkを募集中です!

OCamlに関連することなら何でも歓迎です。OCamlでピザを注文しました!とかOCamlを拡張してHaskellにしてみました!とか、ありありだと思います。5分であなたのネタを披露してみませんか?私(ogasawara@itpl.会社.jp)かid:camlspotter氏までメール下さい。よ…

ふと想うんですが、ある言語の「表現能力」ってうまく厳密に定義できないものですかね。それがあると言語の比較に便利じゃないですか。それが同型なら同じ表現能力と言えると。もちろんチューリング完全とか持ち出すとフラット過ぎるので、それはなしの方向…

今日もレイアウトで苦しむの巻。どうしてこう生産性が低いんだろうね、GUIのレイアウトシステムは。たぶん、FlowLayoutだとかBlockLayoutだとかGridLayoutだとか、なんとなくその場のノリで決めた感じのするいい加減な合成だからいかんのだな。レイアウトの…

Observerパターンを内包して合成できるようにした何か

先日いげ太さんに紹介されたF#のイベント(http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/FSharp.Core/Microsoft.FSharp.Control.Event.html)が面白かったので、Objective Camlでも(一部を)実装してみました。↓ http://forge…

友人から寡黙に送られて来たガンダムの写真。べ、別にうらやましくなんてなんだからね!!

次世代のGUIライブラリの要件

古き伝統のライブラリから脱却して、次のステップに進んだイベントドリブンなGUIツールキットはどんなものになるのでしょう。難しいですが、その要件が少しずつ幾つか見えてきた気がしてきたので、メモしておきます。 ■イベントの一級化と合成 これはつまり…

first class event in F#

http://blogs.msdn.com/dsyme/articles/FSharpCompositionalEvents.aspx これって2006年の記事だけど、F#は結構昔から頑張ってたんだー、すごいな。 二つのイベントに依存するイベントは作れないのかなー?なんとなくこのままでは作れなそうではあるが。今度…

Dvarの基本ができた

concurrent cellに新しいモジュールDvar(http://forge.ocamlcore.org/plugins/scmsvn/viewcvs.php/trunk/dvar.ml?rev=20&root=ccell&view=markup)を導入しました。で、その基本的な関数がやっとできた。最近これを作ってたので、籠ってました。 Dvarとはどん…

FRP

FRP、Functional Reactive ProgramingのFをS、RをT、PをDに置き換えるとSTD。これは、Solve The Dependencyの略。つまり、FRPは依存性解決の事だったんだ!! な、なんだって〜〜?!

多相バリアントを使いこなそう(4)

前回までで多相バリアントの基本的な機能は説明してきました。そこで今回は、多相バリアントのとても重要な応用についてお話したいと思います。それは、場合分け構造の拡張問題です。 場合分け構造の拡張は難しい 例えば、次のようなコードがあったとします…

多相バリアントを使いこなそう(3)

さて、今日は多相バリアントの「三つの型」について紹介しようと思います。この「三つのの型」をうまく活用する事で、安全さと柔軟さと再利用性を同時に手に入れることができます。 三つの型 同じ`Aと`Bというタグを使っても、宣言できる多相バリアント型に…

多相バリアントを使いこなそう(2)

前回は、OCamlの多相バリアント型のタグは複数の多相バリアント型に属する事ができるというお話でした。では、この性質を応用するとどんな嬉しいことがあるのでしょうか?今日はまず、多相バリアントを組み合わせる場合のストーリーを挙げてみたいと思います…

多相バリアントを使いこなそう(1)

以前OCamlは学習コストが低いといいましたが、私のOCaml学習の中で唯一多相バリアントだけはその意味を理解するのに時間がかかりました。ただ、分かってみると単純な話で、誰かが噛み砕いて説明してくれれば回り道しなくてもよかったのではないかと悔やまれ…

知ってる?OCamlのオブジェクトってね...

多相レコードなんだ!普通のレコードって多相にならないよね!?例えば、 # type person = { name : string; age : int };; (* person型 *) type person = { name : string; age : int };; # type car = { name : string; doors : int };; (* car型 *) type ca…

知ってる?オブジェクトってね...

レコードと高階関数で書けるんだ!TAPLに載ってるのを読んで、へー(×2)と思ったので紹介するね!*1 # type t = { mutable name : string; mutable age : int };; type t = { mutable name : string; mutable age : int; } # type m = { get_name : unit -> …

Bouncing Ball in OCaml with Amthing

http://blog.mestan.fr/2009/04/28/bouncing-ball-in-ocaml-with-ocamlsdl/という話を見つけたのでAmthingでも挑戦。 (*******************************************************************) (* Amthing Example3. bounce ball *) (**********************…

叫びの例

なぜQt程のライブラリが、ウィジットが重なっている時にその下側でマウスイベントを取るオプションすら持ってないんだー。うがー。ポップアップメニューの出現位置も全く制御できないしー。やってられねー!