2004-08-01 [長年日記]
λ. お昼
純広東家庭料理「嘉賔(KAHIN)」。
λ. Haskellマラソン 2日目
最後にキューの話で議論が白熱していた。なんか良くわからなかったけど。
λ. Queueの話 (1)
結局Prologでの以下のコードに相当するものは実現出来ないのか?、という話だったんだろうか。KL1がどうこうとか言ってたし……
makeQueue(queue(X,X)).
isEmpty(queue([],_)).
enqueue(queue(X,[A|Y]), A, queue(X,Y)).
dequeue(queue([A|X],Y), A, queue(X,Y)).
appendQueue(queue(X,Y), queue(Y,Z), queue(X,Z)).
λ. Queueの話 (2)
あと、キューは代数的仕様記述(Algebraic Specification)が出来ないんじゃないかと言ってしまったが、そうでもないような気がしてきた。以下の記述は代数的仕様記述としてどうなんだろう?
Sorts: E,Q
Operations:
empty: Q
enqueue: Q×E → Q
dequeue: Q→Q
front: Q→E
isEmpty: Q→Bool
Axioms:
isEmpty(empty) = true
isEmpty(enqueue(q,e)) = false
dequeue(enqueue(q,e)) =
if isEmpty(q)
then empty
else enqueue(dequeue(q),e)
front(enqueue(q,e)) =
if isEmpty(q)
then e
else front(q)
2004-08-02 [長年日記]
λ. "擬データを用いた対話的関数プログラミングに関する研究", 石井裕一郎
を読んだ。単一代入や変数による通信は論理型言語みたいで面白いなぁ。私は関数論理型言語については全然知らないのだけど、ひょっとしたら関数論理型言語と相性のよいフレームワークなのではないだろうか。あと、関数型言語の視点でみると、参照透明性こそ保たれているものの、定義があまりにも操作的なので、もう少しなんとかならないかなぁとも思った。
[2005-07-28 追記] Haskellでcomonadベースの似たような枠組みを書いてみて気づいたのだけど、「4.2.5 競争的書き込み」のmergeRは有限のリストに対しては正しく動作しないはず。なぜならば、writeはnilに出会ったときに擬データをnilに確定しないため、mergeRの結果のリストの終端はいつまでたっても確定しない。
2004-08-03 [長年日記]
λ. WASH (2)
練習に「フリーソフトウェアライセンス診断」をWASHで書いてみた。ただ、現在のところソースコード中のマルチバイト文字はUnicode対応版Hugs以外では正しく解釈されないので、それ以外の処理系ではエスケープしておく必要がある(エスケープ版)。
module Main where import Prelude hiding (head, span, div, map) import CGI main :: IO () main = run (f questions) f :: [(String, Maybe String, Maybe String)] -> CGI () f [] = ask $ standardPage qtitle (p (text "Error")) f ((question, yes, no) : xs) = standardQuery qtitle $ do p (text question) submit0 (g yes) (fieldVALUE "Yes") submit0 (g no) (fieldVALUE "No") where g (Just licence) = ask $ standardPage (qtitle ++ "結果") $ p $ text (licence ++ "がおすすめ") g Nothing = f xs qtitle = "フリーソフトウェアライセンス診断" questions = [ ( "あなたのコードを商用ソフトウェアに組み込まれて販売されてもかまわないか?" , Nothing, Just "GPLライセンス" ) , ( "あなたはストールマンのフリーソフトウェア運動に心から賛同しているか?" , Just "GPLライセンス", Nothing ) , ( "あなたはそのソフトウェアを将来Rubyの一部として配布したいか?" , Just "Rubyライセンス", Just "BSDまたはMITライセンス" ) ]
λ. Re: wxHaskell (その3)
コンソールを消すには、PEのヘッダを編集しなくても、リンカに-mwindows
を渡せばよいので、ghcの場合-optl -mwindows
を渡せば良いです。
あと、Char
は「単なる0..255なデータ」ではなくUnicodeの文字です。手元のghciだと「maxBound :: Char
」は「'\x10ffff'
」になります。
とはいっても、ghcのIO周りやForeign.C.String辺りはUnicodeとローカルなエンコーディングの変換をしてくれない(FFI 1.0 非準拠)ので、現在のghcでwxHaskellを使う場合、結局Stringをローカルなエンコーディングのバイト列として扱わないと日本語出ませんが(泣)。
HugsのForeign.C.Stringに関しては4月12日に一度パッチを作ったのですが、Hugsで使えるライブラリでこの辺りの結果を確認できるものが思いつかなかったので、ちと放置中。
2004-08-04 [長年日記]
λ. "Inductive, coinductive, and pointed types", Brian T. Howard
を読んだ。"Algebraically Bounded"とか、ちと良く知らない概念が出てきたので後で調べよう。
【2006-09-21追記】 algebraically bounded について、この論文では「inductive and coindutive types are canonically isomorphic」とちゃんと書いてあった。ってか以前に一回確認してるはずだが、今また確認しているのは何故だろうorz
2004-08-05 [長年日記]
λ. 論文読み会
ためになるお話でした。
λ. "RAL: an Algebra for Querying RDF", Flavius Frasincar, Geert-Jan Houben, Richard Vdovjak, Peter Barna (PDF, PS, PPT)
を読んだ。SQLに対する関係代数と同様に、RDFのquery言語のための代数を定義する話。長い別バージョン(PDF,PS)もあるな。
λ. 受け攻め度チェック
なんか前も似たようなのやったような記憶があるけど。
さかいさんは 誘い受 です!
●誘い受の貴方は
★性格★
気配り上手の勉強家です。
心が広く許容量もあるので、友人も多いはず。
自信と気力も十分で、多少の障害も楽々と乗り越え、失敗も恐れずに我が道を突き進んでいくので、いつの間にか多方面で仲間や同志が多くなってます。
好奇心も人一倍旺盛なので仕事以外の趣味や遊びの分野においても、研究熱心でエキスパートになる可能性を大きく秘めてます。
★夜の性格★
基本的にMに近い受けです。
相手が何をすればイカせてくれるのかを熟知しているので、計算したプレイを展開させます。
甘え口調や上目使いなどの自然にみせかけた誘いをかけて、快楽を貪ります。
人にリードされるのを好むタイプです。
★相性★
無邪気攻・自己中攻
● さかいさんのモテ度は、90点です!
「人にリードされるのを好むタイプ」というのは結構当たってる気がする。
λ. メモリ
帰りにヨドバシカメラによってラップトップ用の増設メモリ256Mバイトを買ってくる。
λ. VirtualPC
メモリが512バイトになったらVirtualPCもだいぶ快適に使えるようになった。あと、VirtualPCを一週間使ってみて一番不満に思った点は、仮想ディスクへのアクセスの遅さだな。VMWareとか他のソフトだとこの辺りはどうなんだろう。
λ. C++ クラス設計に関するノート
メモ。
λ. Supertyping Suggestion for Haskell
メモ。
これが欲しくなるのはすごーく良くわかるのだけど、整合性が取れなさそうな気がする。この例のようにGroupクラスを定義したら、+
の型は(Num a) => a -> a -> a
から(Group a) => a -> a -> a
に変わるのだろうか。
2004-08-07 [長年日記]
λ. Lightweight Language Weekend 一日目
新宿から少し迷ったけど無事に時間前に到着。
λ. Language Update
内容とは全然関係ないんだけど、みんなプレゼンテーションがうまいなーというのが一番の感想だった。ここで明日発表すると思うと欝になる。
CurlがW3Cに関係があったなんて全然知りませんでしたよ。仮にもそれ系の研究室に所属してるのに…… orz
Groovyの「ジャヴァの奇妙な冒険(Java's Bizarre Adventure)」に爆笑。
Pnutsで思ったよりも性能が出ていたのに驚いた。
Squeakはやっぱりすごいなぁ。
λ. 仕事でLL
自分もテストデータを作ったりするぐらいしか、好きなLLを仕事に使ったことはないので、好きなLLを仕事に使える環境にいる人が少し羨ましい。それはそうと、大人の世界には色々あるんですね((((;゜Д゜)))ガクガクブルブル。職業プログラマにはあんまなりたくないなと思った。あと、「言語のダサさと普及率の間には相関がある」ってのはもっともだね。
λ. 君ならどう書く: ls-lRシェル
いまいち盛り上がってなかったな。デザインパターンがテーマだったにも関わらず少なくない発表者が各パターンの意味をきちんと調べていない事に少し呆れる。あと、Haskellの発表はGoFのパターンだけではなくHaWikiのCommonHaskellIdiomsで紹介されているようなパターンについて取り上げても良かったかも知れないと少し思った。
λ. 君ならどう書く: nQueen対戦
思考アルゴリズムの優劣以前の問題で勝負がついてしまったのは残念だけど、タプルスペースと継続を使った実装とか、実装の話は面白かった。それにしても、課題の詳細がもっと早く公開されていたら、HaskellもしくはPrologでこっそり実装しておいて、飛び入りの機会を窺ったのに……
λ. 懇親会
有名な人が沢山いて感激しまくり。
プレゼントの抽選で『シューティングゲーム アルゴリズム マニアックス』が欲しかったのだけど、Flash本と一緒の抽選になり倍率が上がりまくってしまい、ゲットできなかった。残念。(すずきさん、い〜な〜)
ψ すずき [本命はFlash本だったんですが、こっちも気になってたのでラッキー♪でした。]
2004-08-08 [長年日記]
λ. Lightweight Language Weekend 二日目
「その場でどう書く」の発表者は 9:30 集合だったのだけど特に打ち合わせをするでもなく10:00に。「その場でどう書く」の課題の発表を聞いて、ちと焦る。というのも、サーバ側でIOを行うときのWASHの流儀について何も調べてなかったのだった(ダメじゃん)。で、「LLとblog」のセッションを聞きながらコーディングしようと思ったら、なんかネットワークの調子が悪かったので控え室の方へ。まずはカレンダーを表示する部分を、メッセンジャーでお馬鹿な会話をしつつ、へろへろと書いていたら、これ思ったより面倒なんだよね。気が付いたら12時近いのに、まだカレンダーが表示できてねーよ!! この辺りで焦ってパニック状態になり、まともな思考が出来なくなる。その後もダメダメな感じで、LL侍の練習とかスクリーンに映る Lightning Talk の様子とかを横目でみつつ、泣きそうになりながらコードを書くのでした。 で、結局コードはダメダメだったけど、発表自体は全然緊張しなかったし、結構楽しかった。なんか、変な感じでハイだったのかも知れず。
2004-08-10 [長年日記]
λ. "Dynamic Linking in Haskell", Hampus Ram
を読んだ。自分にとって興味のある話ではなかった。
λ. モデル検査入門, 高橋孝一
メモ。シンポジウム「システム検証の科学技術」 より。
2004-08-11 [長年日記]
λ. "Wearing the hair shirt: a retrospective on Haskell.", Simon Peyton Jones, invited talk at POPL 2003.
メモ。
λ. Painful Style - 痛車写真館
あれ?、僕らの尊敬するyaizawa先生の車がないですよ (ぉ
ψ やいざわ [ひどい・・・車はまっとうなのに・・・. というか実物を見ずに痛車扱いするなんて・・・.]
ψ さかい [私の勘違いでしたか。すみません。消しときますね。 # でも、以前学校の帰りに送ってもらった際に、ナデ○コだったかス○..]
ψ やいざわ [ん,このへんのやつ? http://www7.big.or.jp/~katsurao/info/img/c66-pa..]
ψ さかい [そうそう、そんな感じのだったと思います。]
ψ やいざわ [そ・・・それだけで痛車認定なの!?]
ψ さかい [きっとそれだけ印象的だったんですよ。 それはそうと、やいざわ先生は明日のコミケで買ってきて欲しいものとかあります?]
ψ やいざわ [いや・・・同人誌とか買わない人だし. あ,まてよ, http://www.serina.org/~achain/co..]
ψ takot [ほらほら,人はそういうところから足を踏み入れていくのですよ……w]
ψ さかい [> http://www.serina.org/~achain/comike/index.html.ja なんか、..]
2004-08-12 [長年日記]
λ. iconv-io 0.0.4
readpartialキター ([ruby-dev:24058]) ってことで、iconv-ioをreadpartialを使うようにする。
知らない人のために紹介すると、iconv-io はIOもどきの1つで、他のIOっぽいオブジェクトをラップし、エンコーディングを変換しながら読み書きするためのものです。例えば、以下はSTDINをラップしてshift_jisからutf-8にエンコーディングを変換しながら読む例です。
io = Iconv::Reader.new(STDIN, "shift_jis", "utf-8") io.each_line{|l| ... }
λ. "Purely Functional Data Structures", Chris Okasaki
読了。感想は後ほど追記予定。
[2005-01-27 追記] 計算量の表を時々参照したくなるので、ここに転載しておく。
Name | Running Times of Supported Functions | Page |
---|---|---|
banker's queues | snoc/head/tail: O(1) | 26 |
physicist's queues | snoc/head/tail: O(1) | 31 |
real-time queues | snoc/head/tail: O(1)† | 43 |
bootstrapped queues | head: O(1)†, snoc/tail: O(log× n) | 89 |
implicit queues | snoc/head/tail: O(1) | 113 |
banker's deques | cons/head/tail/snoc/last/init: O(1) | 56 |
real-time deques | cons/head/tail/snoc/last/init: O(1)† | 59 |
implicit deques | cons/head/tail/snoc/last/init: O(1)† | 116 |
catenable lists | cons/snoc/head/tail/++: O(1) | 97 |
simple catenable deques | cons/head/tail/snoc/last/init: O(1), ++: O(log n) | 119 |
catenable deques | cons/head/tail/snoc/last/init/++: O(1) | 122 |
skew-binary random-access lists | cons/head/tail: O(1)†, lookup/update: O(log n)† | 79 |
skew-binomial heaps | insert: O(1)†, merge/findMin/deleteMin: O(log n)† | 83 |
bootstrapped heaps | insert/merge/findMin: O(1)†, deleteMin: O(log n)† | 102 |
sortable collections | add: O(log n), sort: O(n) | 35 |
scheduled sortable collections | add: O(log n)†, sort: O(n)† | 47 |
[追記]
ちなみに、この論文を元にした本が出版されています。
より一般向けの話とHaskellのコードが加わっているとか。
2004-08-13 [長年日記]
λ. 水泳
近所のプールで久しぶりに泳いできた。泳ぐのは多分1年ぶりくらいなので、とりあえず1キロほど。1時間くらいしかプールにはいなかったのだけど日焼けした。肩がヒリヒリする。
λ. iconv-io 0.0.5
速攻でakrさんにバグを指摘される。以前の実装のときに書いたコードをろくにテストもせずに入れていました。お恥ずかしい限りです。というわけで、0.0.5を出しました。
それと、たしかに UTF-16LE での each_line
というのは現状では難しいですね。$/ = "\n\0"
だけじゃだめですし……
2004-08-14 幻想郷の夜まであと一日 [長年日記]
λ. 今日も午前中はプールに泳ぎに行って、午後は靖国神社にでも参拝に行こうかな……と思っていたら思いっきり寝過ごした orz。起きたら3時ですよ。
λ. 明日はコミケなんで早めに寝ます。
λ. 未来「高天原」
結局、永夜抄体験版のスペルカードのうち、Lunaticの『未来「高天原」』だけは今日に至るまで一度も取れなかった。個人的に妖々夢で最難のスペルカードと思っている『蒼符「博愛のオルレアン人形」』に匹敵する難しさだと思う。そういえば、両方とも3面ボスのスペルカードだし。製品版をゲットしたらしばらくはLunaticはやらないと思うけど、今度もまた最後の方にまで残りそうだ……
2004-08-15 幻想郷の夜まであと0日 [長年日記]
λ. コミケ
俺が並んでいる間は雨は降らないだろうて根拠なく思っていたら、あてがはずれた。いちおう折り畳み傘は持っていたんだが、結局入場前と上海アリスの行列とで二時間くらい降られてビショ濡れになってしまったよ。自業自得。それから、上海アリスの行列で近くに並んでいた人と気があって、しばらく西を一緒に回った。あと、D.N.A.さんの「C66 超個人的注目サークル配置図」にはお世話になりました。
λ. 購入したものとか
調子に乗って、だいぶ余計なものも購入してしまった。お金が……
- 「東方永夜抄 〜 Imperishable Night」
- 上海アリス幻楽団
- 「東方萃夢想体験版」
- 上海アリス幻楽団 & 黄昏フロンティア
- 「Cradle - 東方幻樂祀典 -」
- -
- 「妖紅綺想(ようこうきそう) 2」
- -
- 「東方意味不明本、隊長! 低速ボタン連射しないでください!!」
- みょふ〜会
- 「東方戰騎譚 - DrunkTankies Battle in the Eastern」
- D.N.A. Creations
- 「弾幕姉妹〜弾幕スール〜」
- tocoroten.net
- 「萌え燃え」
- M.O.E
- MALIGNANT VARIATION -FINAL- 「ジャム新生」
- AQUA STYLE
- 「ひぐらしのなく頃に」
- 07th Expansion
- 「ふたりは肉キュア - Muscle Cure」
- OBA-Q HONPO QT
- 「お棺が走る 痛」
- 「快楽ノ教育」
- ふすま御殿
- 「FRAGiLE」
- ちゃかぽこ本舗
- 「ネコみて」
- ねじまき時計
- 「上から読んでもすとらとす。の本。」
- 飛行海賊
- 「はなびらふわり」
- 剛力百貨店
- 「7in.」
- ぐる〜ぷひのらん
- 「間違いだらけのメイド喫茶選び - メイド喫茶の歩き方'04」
- ゴルゴン友の会
- 「DEATH NOTE - ミサたんハァハァ本?」
- 宇宙最終動作(うみのたらこ), 脳髄エントロピィ(行)
- 「Firing pretty - space craft personication expreimentation book」
- teardrop
他数点。
それから、購入できなかったものとか
λ. 黙祷
終戦記念日ということで、かつて祖国と民族を守るため、そして抑圧されたアジアの解放のために戦った英霊達に、戦争の犠牲となった全ての人たちに、しばし黙祷。
λ. 永夜抄
とりあえずノーマルをプレイしてみる。3面までは若干簡単になってるような気がするが、それ以降が難しくて焦る。結局5面ボスでコンテニューしてしまった。やっぱシューターでもない人間には、いきなりワンコインでクリアは無理か。とりあえず最初にノーコンティニューでクリアできた時のリプレイ(th8_udsa01.rpy)を記念にとっておく。で、Extraもプレイしてみる。いつも通り、パターンを作ればかなり爽快感を感じられそうだなぁ……。中ボスは予想通りでボスは……そうきたか。いいなぁ。
2004-08-21 [長年日記]
λ. "Non-stop Haskell", Andy Cheadle, Tony Field, Simon Marlow, Simon Peyton Jones, and Lyndon While; ICFP 2000.
STGマシンのように、Closureのentry-codeにenterすることによってオブジェクトにアクセスするような実行方式をとっている場合、entry-codeへのポインタを置き換えることでread barrierが非常にcheapに実装できるので、Baker's incremental GC が効率的に実装できるよって話。
2004年に書かれた "Exploring the Barrier to Entry: Incremental Generational Garbage Collection for Haskell" の方はまだ読んでないのだけど、abstractで We detail important implementation issues and provide a detailed evaluation of a range of design alternatives in comparison with Non-stop Haskell and GHC's current generational collector.
とか書いているところをみると、現在のGHC-6.2のGCはincremental GCにはなってないのかな。
λ. Mercury Tutorial
を読んでみた。Mercuryは以前から気になっていたのだけど、全然普通の言語だったので少々失望。もっとぶっとんだ言語を期待していたのに。
λ. RHG読書会::東京 Reloaded
今回はタイムインターメディアではなく農工大。うちから2時間弱か……
2004-08-22 [長年日記]
λ. 日中再考
- 『日中再考』
- 古森 義久 [著]
読了。著者の主張にはおおむね同意。「日中友好」と念仏のように唱えて謝罪と援助を繰り返すだけで真の友好なんか実現できるわけないし、日本は自らの国益を実現するために、より実効性のある政策をとるべきだと思う。
λ. "Lazy functional state threads", John Launchbury, Simon L. Peyton Jones
いわゆるSTモナドの話で、runST :: (∀s. ST s a) -> a
という rank-2 の多相型をもった関数を使うことで state-thread が安全にカプセル化できるってのがメインの話。
それはそうと、STモナドは好きなモナドの一つなんだが、All About Monads (モナドのすべて) でも取り上げられていないし、いまいち認知度が低い気がする。
2004-08-23 [長年日記]
λ. 論文読み会
- "Personalization in Distributed e-Learning Environments"
- Peter Dolog, Michael Sintek
- "Opportunity Knocks: a System to Provide Cognitive Assistance with Transportation Services."
- D. J. Patterson, L. Liao, K. Gajos, M. Collier, N. Livic, K. Olson, S. Wang, D. Fox, and H. Kautz
2004-08-24 [長年日記]
λ. "A New Method for Functional Arrays", Melissa O'Neill, F. Warren Burton
Syntax Error (2004-08-20) より。配列の外にバージョン管理の情報をつけるのではなく、配列の要素に構造を持たせて、要素レベルでバージョンの管理をする fat element という方法を提案している。「へぇ、こんな方法があるんだ」と感心。計算量はsingle-threadedならO(1)。single-threadedでなくてもアクセスが一様なら、amortizedな計算量でO(1)。それ以外はamortizedな計算量でO(log n)か。結構いいね。
2004-08-25 [長年日記]
λ. もえだん体験版Web公開
きたー。(I'd like to Say (2004-08-25) より)
λ. "Generational garbage collection for Haskell", Patrick M. Sansom, Simon L. Peyton Jones
を読んだ。
2004-08-26 [長年日記]
λ. Jan-Åke Hedström, "RubySharp - a Ruby to CIL Compiler", [PDF]
Matzにっき (2004-08-20) より。ささださんも書いてるけど「ちょっとなぁ」って感じ。
λ. Anders Alexandersson, "RubyComp - a Ruby-to-LLVM Compiler Prototype", [PDF]
同じくMatzにっき (2004-08-20) より。
2004-08-27 [長年日記]
λ. 風邪
風邪ひいたっぽい。38℃。だるい。
λ. コントローラ壊れた
どうでもいいけど、火曜に買ったコントローラが壊れたっぽい。これで永夜抄製品版をプレイしはじめてから壊れたコントローラは3つ目ですよ。なんか、ひょっとして呪われてたりします? (;_;)
λ. 『光速より速い光 〜アインシュタインに挑む若き科学者の物語』, ジョアオ・マゲイジョ(João Magueijo) [著], 青木 薫 [訳]
を読んだ。「光速変動理論(VSL)」それ自体もさることながら、研究者達の営みに関する記述が興味深かった。
2004-08-29 [長年日記]
λ. 金沢の方へ旅行に行ってきます。
λ. 『「知財」で稼ぐ!』
飛行機の中で読んだ。
λ. 旅行
.
λ. 永平寺
そうそう。永平寺にも行きました。先生、eiheiですよ、eihei。(補足: 研究室で僕の使っているマシンの名前がeiheiなのです)
λ. "Compiling Haskell to Java", Mark Tullsen
GHCにSTGのコードを吐かせてそれをJavaに変換してJVMで動かす話で、デザインディシジョンについての議論がメイン。このデザインディシジョンは全く順当だと思う。ああ、そうだ。Mondrian関係のドキュメントを読んで、こっちの方面では代数的データ型はこういう場合にはサブタイピングで代用するのが流行りなんだと思っていたが、ここでは整数でタグをつけてるな。あと、速度は GHC > この実装 > Hugs みたい。
ψ takot [なにー!! よりによって行き先がそこですか.]