osiire’s blog

ふしぎなそふとやさん

GADTブランチの今

名古屋Ruby会議02の併設イベント、名古屋RejectでGADTの紹介をしたのでスライドをアップロード。なんか手元のスライドと比べて若干レイアウトが崩れているけど、気にしない。GADTブランチの今View more presentations from osiire.

ひとりごと

@keigoi氏がうちの会社にいてくれているおかげで、ビジネスについても考える機会が多くなった。そこで自分の中の二つの矛盾する希望に気づいた。 私はコンピューターの技術的な面に興味が強く、その応用そのものやビジネスのやり方には正直あまり興味がない…

Concurrent MLのイベントをモナドにするだけでこんなに便利。

非同期な通信もまとめて扱える。F#の非同期ライブラリっぽい。すごい。 module E = Ccell.Event let async_http_get host = E.future http_get host let counter = let open E in perform r <-- async_http_get "www.itpl.co.jp"; urls <-- return (grep_url…

頼んでいるlenovoのThinkPadがちっとも来ないので、MacBook Air 11インチ欲しい!

名古屋近辺で型推論本が欲しい!という方は私に連絡下さい

名古屋近辺でコミケ行けなかったけど、@pi8027氏と@mayahjp氏執筆の型推論本(ラムダプラス+)は欲しかった!という方は私に連絡(twitter(DM含む)、メール、コメントなど)下さい。@pi8027氏のご厚意で、まとめて発注出せる段取りになりました。1月4日23時59…

壁を侵略しなイカ?

http://partake.in/events/5784afd8-d43b-4cbe-9256-430d5ababa2bに参加でゲソ。この画像は、関数型イカ娘が触手を使って壁を侵略するゲームでゲソ。壁が下から上に強制スクロールするので、触手はそれを左右に避けて進むでゲソ!前にも見たことある人は気に…

Let’s module programming!

オブジェクト指向なら分かるけど、モジュールでどうやってある程度の規模のプログラムをするのか、全く想像つかない!そんな諸氏のためにモジュールプログラミングのテクニックを、レベル分けしながら解説してみたいと思います。 レベル1(基礎編) アプリケ…

ばあちゃん

金光のばあちゃんが、昨日朝方逝った。危ないと言われていたので先日急遽帰省して会ってきたが、やはりあれが最期となってしまった。餅つきをした正月、金光様の夏祭り、幼いころから大人になってからも我侭に生かさせてもらっている私には優しかったばあち…

モジュールとクラスの使い分け方

OCamlにはモジュールとクラスがあります。この二つの仕組みは、直感的によく似た機能を持っているので、どう使い分けたらいいのか迷う時があります。そこで、モジュールとクラスの使い分け方について少しまとめてみます。 基礎的なデータ/データ構造の場合 …

OCamlで作られている大きめのアプリケーション

LexiFi 金融商品の開発環境。 メイン言語がOCaml。MLFiという専用言語もOCamlで作られている。 http://www.lexifi.com/ http://www.lexifi.com/downloads/frisch_inria_2008-12-15.pdf XenServerのツールスタック(xapi toolstack) 仮想化サーバーXenのツール…

ダックタイピング...

OCamlでは、特定の関数を持っている型を作ってごにょごにょする方法はいくつかあります。 (*- row多相 *) # let touch animal : unit = animal#say;; val touch : < say : unit; .. > -> unit = <fun> (*- 構造的部分型 *) # class type animal = object method s</fun>…

first-class moduleをちょっと身近に

来るversion 3.12ではfirst-class moduleが導入されるわけですが、この機能はmoduleの世界を結構広げてくれます。しかし、その文法がやや煩雑で、真面目に使おうとすると疲れてしまう事が危惧されます。そこで、first-class moduleをお手軽に使えるcamlp4拡…

陶器のカタログ受発注の仕組みをAlloyで

仕事に関連して、とあるビジネスの仕組みを記述する必要があったので、Alloyで書いてみた。具体的には、 陶器を製造・販売している企業がたくさんいる。 その企業が集まってカタログを作り、そのカタログを見たお客さんから受注を受ける。 もちろん、カタロ…

関数型言語はGUIが苦手?

副作用を極力排除しようとするfunctionalな方向性の言語においては、GUIのような副作用の塊は扱えないという直観を持っている人も多いことでしょう。確かにfunctionalな言語でunit型を返す関数ばかり扱っていると、"普通に手続きを書いているのと何が違うの…

一級市民モジュール

Changesだけぱっと見ても分かりづらいので、OCaml Version 3.12で採用予定の一級市民的モジュールの文法だけさらしておきます。 # module type Seq = sig type 'a t val of_list : 'a list -> 'a t val map : ('a -> 'b) -> 'a t -> 'b t end;; module type …

PPL2010参加

毎年恒例のPPLに参加。e-mobileがまさかの圏外で仕事的にやや不都合だったけど、今年も色々な話が聞けて面白かったです。運営してくださった皆様、ありがとうございました。とりあえず感想がかけそうなものだけ書いておきます。 Towards Formal Construction…

SRFI-45

concurrent cellのFRPの実装においてfilterがメモリリークする問題があって、どうするべと悩んでいたのだけれど、まさに解決策があった。SRFI-45(http://srfi.schemers.org/srfi-45/)とその日本語訳(http://www.katch.ne.jp/~leque/translations/srfi-45/srf…

id:maoe氏が素晴らしい記事を書いていらっしゃる。FRPとは何?という方はぜひ読んでみると面白いと思います。 やさしいFunctional reactive programming(概要編) - maoeのブログ やさしいFunctional reactive programming(Event編) - maoeのブログ やさ…

地震

15年前の今日、私は岡山であの地震を経験した。しかし、地震だ!と飛び起きて最初に守りに行ったのは、自分でも親でもなく、自作プログラムの全てが保存してあった240MByteの外付けSCSI HDDだったとは、我ながら偏った高校生だったなと思う。お亡くなりにな…

ラジオボタンの相互依存をFRPで表現してみる

ラジオボタンが二つあったとしますと、片方が選択されればもう片方の選択は解除され、逆も然りです。このような相互依存的なロジックをFRP的なプログラムで表現してみましょう。(もちろんconcurrent cellで。) 下のプログラムは、jキーが押されるとradio_b…

FRPの実装

前にも触れたけど、これ((http://conal.net/papers/simply-reactive/)を元にOCamlでFRP(っぽいもの)が実現できる機能をconcurrent cellに追加した。ほぼできたと思う。あとはテスト(バグがないか、メモリリークはないか、速度はどうか)といったところ。…

Advanced Module Systems

http://www.cis.upenn.edu/~bcpierce/papers/modules-icfp.ps モジュール間の参照をどう扱うか?1.はスケールしない。2, 3を使おう。 parameterization on modules -> functor sharing by specification -> reference the module direct sharing by paramete…

The FRP

FRPにも色々実装があるみたいだけど、私的にはこれ(http://conal.net/papers/simply-reactive/)がThe FRPのような気がしてきた。簡単さ、動作効率の両面で。実践にも即してるし。 [追記] FutureをいんちきしてReactとEventを実装してみた(Eventの>>=がま…

構造的部分型の比較

私はOCaml, haXe, Scalaを勉強してきましたが、この三つの言語では構造的部分型がサポートされています。せっかくだから三言語の構造的部分型の特徴を比較してみることにしました。 OCamlは全て型推論してくれる代わりに部分型への変換は明示的。部分型変換…

CCA

http://lambda-the-ultimate.org/node/3659 より。とりあえずそれっぽいの(loopはいんちき)を実装してみたんだけど、何が嬉しいのか未だ分からん...。なんとなくすごく使えそうな気がするんだけど。[追記]あー、switchとかchoiseとか無いのかー。これは厳し…

OCamlを使ったシステム開発まとめ

うちの会社(有限会社ITプランニング)でやってきたOCamlを使ったシステム開発の概要を書いておきます。ふと思うと今までまとめて公開したことはなかったなと。別に隠す程のものじゃないし、もしこれからOCamlを使ったプロジェクトを始めてみたい人の参考にな…

lwt and react

lwt 2.0出た http://ocsigen.org/lwt/ インストールしてみようとしたら、React(http://erratique.ch/software/react/doc/React)に依存してた。やはり。元々マルチスレッドを意識していないReactとその名の通りlightweightなthreadのlwtの相性は抜群だと思わ…

scala三日目 段々基本的な文法に慣れてきた。 構造的部分型の要素のMapできた。thx id:mzp。型注釈の位置の問題だった。 補助コンストラクタかファクトリメソッドか。 クロージャーの引数とタプルのパターンマッチの辺りがまだ慣れない。 共変か反変かはサブ…

Scala二日目。 trait便利すぎ クラス名の文字列からインスタンスを生成できちゃう柔軟さ Enumでいいような場面でも、あえてケースクラス 単純なimplicit defは分かるんだけど、部分型が絡んでくると急に難しく感じる。慣れの問題。 coercionって使わないの?…

データ構造と手続きとモジュール分け

アプリケーション全体に渡って使われる基本的なデータ構造については、データ構造と手続きを別モジュールにした方がよい場合もあるんじゃなかろうか。具体的に言うと、四本値とか足の種類とか通貨ペアとか。 type candle = { (* ローソク足のデータ構造 *) u…