osiire’s blog

ふしぎなそふとやさん

Alloy model of lock-free stack

唐突にlock-freeをAlloyで書いてみたくなったので書いた。what is lock-free 冬のLock free祭り safe from Kumazaki Hiroki www.slideshare.net kumagiさんの資料によると、lock-free stackはリンクリストみたいなもので、先頭へのポインタをCAS(Compare and…

ScalaでDBアクセスの抽象化の件

本記事は関数プログラミングAdventCalendar2015 4日目の記事です。予定を変更してDBアクセス抽象化の話をしたいと思います。pab_techさんによる二つの記事やtayama0324さんの記事でDBアクセスに対する抽象化が取り上げられています。 【ScalaMatsuriセッショ…

以前祖父の古銭コレクションを整理した記事を書いた。これが両親に好評で、息子共々にわか古銭コレクターとの認識を得た。その関係で、母が友人の親の遺産整理で大量の古銭を譲り受けてくれたとの事で、今日実家から荷物が届いた。 とりあえず分類のためにビ…

OCamlの開発環境の作り方(2014年夏版)

OCaml 4.02.0が出ましたね。PCを新しくしたついでにemacs 24系でOCaml環境を作った時のメモを置いておきます。 $ apt-get install opam $ opam init $ opam update $ opam switch 4.02.0 $ eval `opam config env` $ opam install omake ocp-index ocp-inden…

ATSのお勉強メモ

秘密結社Metasepiに関連してATSを勉強しているのでメモ。特にマニュアルには書いてないのではないかと思われる文法が散見されてつらぽよ。分からない時はぐぐって過去に作者がメーリングリストに回答している説明を探すべし。 バージョン ATS2(ATS/Postiats)…

mbedではじめる関数型マイコンプログラミング講習会β

今日はmbedではじめる関数型マイコンプログラミング講習会β @名古屋 #0(http://partake.in/events/ab56454b-c305-4f3b-b8ce-872871ab7da9)に参加。@master_qさんに組込み技術とAjhcについて教えてもらい有意義だった。 しかし、@master_qさんの目標へ向けた…

OCamlの開発環境の作り方 2012年暮れ版

この記事はLL/MLアドベントカレンダーの記事です。一時期停滞していたOCamlの開発環境は最近進化してきています。2012年暮れ時点における知見をまとめてみましょう。なお、これらの進化はOCaml開発チームはもとより、OCamlPro, @camlspotter氏、@m2ym氏の多…

GoF in OCaml for Advent Calendar 2012 #8

OCaml Advent Calendar用の記事、第八弾目です。commandパターンいってみましょう。http://en.wikipedia.org/wiki/Command_pattern上記のリンクは英語版です。(日本語版にはサンプルコードが載ってなかったので。@mrgchrさん情報ありがとうございます!)コ…

GoF in OCaml for Advent Calendar 2012 #8

OCaml Advent Calendar用の記事、第八弾目です。commandパターンいってみましょう。http://en.wikipedia.org/wiki/Command_pattern上記のリンクは英語版です。(日本語版にはサンプルコードが載ってなかったので。@mrgchrさん情報ありがとうございます!)コ…

GoF in OCaml for Advent Calendar 2012 #7

OCaml Advent Calendar用の記事、第七弾目です。今日から振る舞いに関するパターンシリーズに突入です。最初はChain of Responsibilityパターンいってみましょう。http://ja.wikipedia.org/wiki/Chain_of_Responsibility_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%…

GoF in OCaml for Advent Calendar 2012 #6

OCaml Advent Calendar用の記事、第六弾目です。構造に関するパターンの最後、Proxyパターンやります。http://ja.wikipedia.org/wiki/Proxy_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3Proxyパターンは、インターフェイス経由で実体にアクセスすることで、間に一…

GoF in OCaml for Advent Calendar 2012 #5

OCaml Advent Calendar用の記事、第五弾目です。Flyweight パターンやります。http://ja.wikipedia.org/wiki/Flyweight_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3Flyweightパターンはどうやらインスタンスをキャッシュして使いまわす手法のようです。OCamlでキ…

GoF in OCaml for Advent Calendar 2012 #4

OCaml Advent Calendar用の記事、第四弾目です。今日はFacadeパターンいってみましょう。http://ja.wikipedia.org/wiki/Facade_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3Facadeパターンは、関連するクラス群を使用するための手続きを、窓口となる一つのクラスに…

GoF in OCaml for Advent Calendar 2012 #3

三日坊主の三日目です。これで目標は果たせるので一安心です。 OCaml Advent Calendar今日は構造パターンの一つDecoratorパターンやってみます。 http://ja.wikipedia.org/wiki/Decorator_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3Decoratorパターンは、特定の(…

GoF in OCaml for Advent Calendar 2012 #2

OCaml Advent Calendar二日目です。 Adapterパターンの次はBridgeパターンですが、これは継承と委譲を組み合わせる話なので前回のAdapterパターンと記述的には同じです。省略。という事で、今回はCompositeパターンをOCamlで記述してみます。Compositeパター…

GoF in OCaml for Advent Calendar 2012 #1

年末で忙しいのにやってしまった感があります。OCaml Advent Calendar作ってしまいました。 OCaml Advent Calendar 作ったからには三日坊主は目指して参ります。参加したい方は上のページで参加表明お願いします。編集権限お渡しします。問題のネタですが正…

祖父のコレクション

先月祖父が他界した。享年97歳。数年前まで自転車に乗り庭弄りをしていた元気なおじいちゃんだった。その祖父が集めていた切手やコインがあるとの事で整理してみた。 ダンボールに入ったコレクション。大半は記念切手や記念コイン。地方自治法施行六十周年記…

emacs+omakeなocamler向けのflymake設定

下記の設定を.emacsに入れてocaml-flymake.shを適当な場所に置くだけ。色はお好みにどうぞ。 (require 'flymake) (push '("File \"\\(.*\\)\", line \\([0-9]+\\), characters \\([0-9]+\\)--?\\([0-9]+\\):\\(.*\\)" 1 2 3 5) flymake-err-line-patterns) (…

イベントドリブンな状態遷移をFRPで記述してみる

例題の仕様は次の通り。 b1,b2というボタンがあり、これらはON,OFFがあるトグルボタン。 modeというトグルボタンがある。 modeがOFFの時、b1とb2は排他的な動きをする(ラジオボタンのような動き)。 modeがONの時、b1とb2は独立なトグルボタンとして動作する…

既存モジュールを使って幽霊型を作る

幽霊型は型で特定のお約束を強制的に守るために役に立ちます。しかし、大抵は既存のモジュールの型の意味を後から使い分けたくなるのでそのためのテクニックも追加で必要になります。例えば次のような10進モジュールDecimalがあったとします。 module Decima…

Algorithm W入門を攻略してきた

先日@pi8027さん著の「Algorithm W入門」を攻略してきました。http://partake.in/events/22da1e72-032d-49ae-847f-a56606308320@Mega80bさんに同書をお渡しするついでに読書会です。@t6sさん、@mzpさん、つきあってくれてありがとう。設定したクリア条件は三…

signalは使うときに工夫しないと使い物にならない

我ながら意味不明なタイトルだが気にしない。もう少しきちんとかくと、「FRPで言うところのsignalとかbehaviorとかは、そのままでは使いにくい。ちょっと工夫しないとすぐに困ったことになる」という事。例えば単純化して次のようなSignalモジュールがあった…

run-camlしなイカ?

このエントリーはhttp://partake.in/events/5784afd8-d43b-4cbe-9256-430d5ababa2bへの参加記事でゲソ!一年前経つのは早いじゃなイカ。run-camlを知っているでゲソ?run-camlはOCamlに標準装備されているcaml-modeの機能の一つで、emacs上でtoplevelを動か…

第一級モジュールで単体テスト可能なコードを保つ

コードを単体テスト可能なよう保つためには色々なやり方がある訳ですが、一番いいのは副作用を分離して局所に押し込めておく手法でしょう。でも、処々の事情によりそんなに綺麗に分離する事もできないので、次善の策としては副作用部分をパラメーター化して…

第2版 Scalaスケーラブルプログラミング

第2版の「Scalaスケーラブルプログラミング」をid:kmizushima氏より頂戴しました。ありがとうございます。ちょうどScala 2.9でアレコレしようと思っていたところなので、大変助かります。Scalaスケーラブルプログラミング第2版作者: Martin Odersky,Lex Spoo…

ドラッグイベントを作る例

例によってドラッグイベントを作る例。 module E = Pec open Pec.OP let (!%) = Printf.sprintf let (+>) f g = g f let mouse_down, send_down = E.make () let mouse_up, send_up = E.make () let mouse_move, send_move = E.make () let dragging md mu m…

a push style event combinator

OCaml用のPush型のイベントコンビネーターです。とりあえずGitHubにアップしたので、記念。 https://osiire@github.com/osiire/Pec.git .mliはこんな感じ。 type 'a event (** [make ()] makes a new event and sender function.*) val make : unit -> 'a ev…

レイトン教授で始める Alloy Analyzer入門

8月15日にギークバーで使った資料をアップします。 レイトン教授で始める Alloy Analyzer入門 View more presentations from osiire 資料に出てくる3つの問題のAlloyによるチートコードは次の通りです。さぁ、あなたもAlloyでレイトン教授の攻略を始めよう…

函数プログラミングの集い 2011 in Tokyo

というタイトルの集まりが9月17日にありますので、皆様お誘いあわせの上ぜひお越しください。函数プログラミングの集い 2011 in Tokyo先日のこの集まりの打ち合わせの時に@ksknac氏がちらっとおっしゃっていたのが「関数型言語じゃなくて関数プログラミング…

レイジーリスト

OCamlでもレイジーリストは便利ですねー。参考のために、某案件で使うために書いたレイジーリストの実装を書いておきます。バグがあったら某案件のプログラムもバグっていると言うことなので、痛いです。ぜひご報告をお願いします。tail-recursiveとかも一応…

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…