Archive for January, 2008

帰国しました

Posted by 向井 淳 on Sunday, 27 January, 2008

帰国しました。

それにしても東京は寒いね。空気が冷たい。ベイエリアはあれでやっぱり温暖な気候だったんだなあ。長袖の服くらいあれば、コートとかはなくても平気っちゃ平気だもんね。

晩飯にトンカツ定食。味噌汁がうまい。

「和食」的なテイストのなかでも味噌ってのは、アメリカ人の好みじゃないのかどうなのか知らないけど、なかなか見かけない気がする。『もやしもん』で武藤が味噌汁、白米、漬物あたりをむさぼり食ってたのにリアルを感じるぜ。

あとまあ帰国早々に本とかまんがとかを買ったりしたけど詳しくは後日なのだぜ(たぶん)。


Simon Peyton Jones が新しい「なぜ関数プログラミングは重要か?」の証拠を求めている

Posted by 向井 淳 on Friday, 25 January, 2008

http://groups.google.com/group/fa.haskell/browse_thread/thread/40221a24b1f31422#9e5cd81e0bfa89d0

あー groups の方にはいっぱいリプライがついてるなぁ。リプライまでは見てません。

Simon Peyton Jones といえば MS Research の研究者にして Haskell 界の大物ですが、彼が上のような投稿をしています。訳すとこんな感じ?

>

これから数ヶ月にわたり、わたしは「非」関数プログラマのグループに、なぜ関数プログラミングが面白く、また重要であるかという講演を2つ3つやることになります。言ってみれば、 John Hughes の有名な論文「Why functional programming matters(邦訳:なぜ関数プログラミングは重要か)」と同じ一般的な目的です。 >

聴衆: 技術管理職もいれば本職のプログラマもいます。しかしわたしの推定では関数プログラミングについてあらかじめ知っている人は基本的に皆無です。 >

今やわたしは関数プログラミングの栄光についてはいくらでもぶちあげることができますが、わたしは目撃者としては偏っています。わたしはあまりにも長い期間、関連することをやってきました。ですからこのメッセージは皆さんの助けを求めるものです。特に、「おおっ、この関数型の機能ってとっても凄い/便利/強力/などなどだなあ」と最近思ったことが思い出されるような方の助けが必要です。 >

わたしはもちろん何らかの一般的なことについてもしゃべります。たとえば純粋さと作用、モジュラリティ、型、テスト、推論、並列などなど。でもわたしは一般的な言葉の無駄口が嫌いです。ですからわたしは具体的な証拠が欲しい。それこそわたしが特に皆さんに助けを求めたいことです。わたしは2種類の「証拠」を考えています。 >

1. 実際のコードの小さな例。目的は (a) 聴衆が知ってると予想されることではなく関数プログラミングが何なのかということの根本的なアイディアを伝えること、(b) なぜそれが良いかという考えを伝えること。わたしの大好きな例は quicksort で、その理由は次のところに書いてあります。http://haskell.org/haskellwiki/Introduction#What.27s_good_about_functional_programming.3F >

ですが、皆さんもそれぞれ個人的に好きなものをひとつふたつは持っているはずです。それをわたしに送ってくれませんか? コードには1段落か2段落ほどで、なぜそれがあなたを行き着けるのかも説明してください。この目的のためのコード量は10行強くらいを上限とします。 >

2. 現実生活の体験記。つまり「Xという会社では2004年にアプリケーションをHaskell/Camlに書き直し、結果はYだった」といったものです。繰り返しですが、わたしの目的では長すぎるストーリーは話せません。ですが皆さんのメッセージは実際にプレゼンテーションで話されるよりも少し詳細にしてください。より具体的、より特定的だとなお結構です。たとえば、関数型言語の具体的に何があなたを勝利に導いたのか? >

どちらのタイプの証拠にせよ、もしあなたがわたしに返信していただいたら、わたしはそれを(わたしの講演で使えるとわたしが思うかどうかはともかく)ひとつにまとめ、どこかの Wiki ページに書こうと思います。どちらのケースでも、ブログエントリーへのリンクがあると良いですね。 >

ここでのことの大部分は Haskell 的というよりは関数プログラミングに関わることですが、わたしはまず Haskell のメーリングリストに相談することにしました。というのは、わたしは皆さんだけでわたしに充分な量の情報を与えてくれると考えていること、また少なくとも1つの講演は Haskell 限定だということです。しかしながら、 F# や Caml のほうが皆さんにとって簡単であれば、そちらで返信していただいても構いません。

返信はもちろん英語でね。


サイエンスカフェについて

Posted by 向井 淳 on Friday, 25 January, 2008

ふと思ったのだが「SF乱学講座」ってのはベーシックなところでサイエンスカフェと同じようなものなんじゃないか、という気がしてきた。細かい違いはあるけども、なんてか、その、基本的な思想みたいなものにおいて。

ところではてなブックマークで「これは日本にも欲しい」とか言っている人たちは検索ってのをしないんだろうか。たとえば「サイエンスカフェ」という検索ワードではGoogleだけじゃなくて百度、ask.jpなんかもトップはサイエンスカフェポータルというサイトなんだがどうですか(Yahoo!だと3位)。

さて、サイエンスカフェみたいなものは日本に根付くだろうか。その点についてはぼくはわりと悲観的である。が、存在すること自体には良い意味がいろいろとあると思うし、できれば根付いてほしいものだ。偉そうに書いているものの、サイエンスカフェじたいにポータルが存在するほど日本でいっぱい開催されているとはぼくも思っていなかった。手近なところで行ってみようか。


The Lively Kernel: smalltalk on the web (?)

Posted by 向井 淳 on Friday, 25 January, 2008

reddit にはポストしましたが、 Sun がリリースする新しい JavaScript 環境、その名も The Lively Kernel なるものがあったんですな。リンク先から「Enter Lively Kernel」のタブをクリックすれば見ることができますが、 Safari 3.0.3 以降以外ではまともに動かないようなので (Firefox でも動くように書いてありますが、遅い上にぜんぜんちゃんと動きません)直リンクはしません。

で、コイツですが、

どう見ても smalltalk です。本当にありがとうございました(squeak の方が正確?)

という感じのモノでありまして、画面上のほとんどありとあらゆるウィジェットはクリッカブル、ドラッガブルだし、ちょこちょこパラメタを弄れるし、スクリプトをちょちょっと弄れば動作も変更できる。ただし言語は JavaScript。という感じであります。

ちなみに作者の筆頭、 Dan Igalls という人は Smalltalk で著名な人らしいですが、そんなわけもありまして、ちょこちょこ触って遊んでいると「すげーすげー」と笑みがこぼれるわけですけども、見ているとなんとなく smalltalk の夢よもう一度な気迫みたいなものさえ感じられてきましたよ。

いや、面白い。


Lua で定数

Posted by 向井 淳 on Wednesday, 23 January, 2008

スクリプト言語の比較が ja.reddit で紹介されていたのでひさびさに見る……あ、そういえば reddit の URL 設計が変わりましたねぇ。新しい方がいいと思いますけど、既存のように ja.reddit.com にアクセスしたらふつうの reddit.com が出てきたのはちょいと驚いたぞ。

で、まあ、件の比較ページは昔っからあるヤツだし、ビミョウにちょっと口を挟みたくなるようなそうでもないような記述もないわけではなく、その辺はイロイロでありましょうが、とりあえず今回は「定数」の項についてのおはなし。

Lua は仕様上、定数を持つような言語機能を供えていない。けれども、実は通常のグローバル変数というのは _G というテーブルの要素でしかないこと、しかもテーブルへのアクセスには Lua からフックをかけることができるという事実、この2つを組み合わせることでグローバルな定数のようなものは実現できる。

簡単に方針を解説すると Lua では、特定のデータに対してメタテーブルというのを指定できる。そのメタテーブルのインデックスには __add とか __index のようなアンダースコア 2つで始まるキーを用意する。そうすると、そのデータに対して + を呼んだときには実際の処理のかわりにメタテーブルの __add に対応づけられた関数が、同じようにテーブルのルックアップ操作に対しては __index が呼ばれるようになる、というわけだ。 _G にはメタテーブルは設定されていないので、新しくそのようなテーブルを作って _G にかぶせてやればよい。

コード例は次のような感じで。

do local constants = {} local h = {} local function gettable_event(table, key) if constants[key] then return constants[key] else return h[key] end end local function settable_event(table, key, val) if not constants[key] then h[key] = val end end function define_constant(const_name, val) if not constants[const_name] then constants[const_name] = val end end setmetatable(_G, { __index = gettable_event, __newindex = settable_event }) end

ここで do 〜 end まではひとつのスコープを形成する。 constants と h はそれぞれスコープローカルな変数なので、外からは参照できない(でないと、 constants 自身を弄ることで定数に悪いことができてしまう)。で、ようは定数の名前空間のために constants というテーブル、通常のグローバル名前空間は h というテーブルを用意しておく。変数参照のときは constants と h を両方見るが、変数更新(代入)のときは h にしか入れない。で、 define_constantで constants に値をつっこむわけだ。簡単だね。

以下、利用例。

> loadfile("constant.lua")() > x = 1 > =x 1 > define_constant("y", 2) > =y 2 > y = 3 > =y 2

これはお手軽な実装なので、実際にはもう少し考えなければならない余地があるだろう。たとえば同じ名前の変数が存在するときに define_constant したらどうなるか?(今は単に昔のデータを忘れてしまう) ローカルスコープ限定の constant を定義するにはどうするか?(これにはちょっとアイディアがない) それからdefine_constant では名前を文字列で与えるというのもカッチョ悪いんだど、名前を渡すことはできないから仕方ないか?(たぶん無理) あと is_constant みたいな述語も定義した方がいいかもしれないとか。

というわけで、 Lua のはなしでした。


tut-code をちょっとだけ試す

Posted by 向井 淳 on Wednesday, 23 January, 2008

Dvorak 配列については、ひとまずアルファベットを学んだ。ブラインドタッチでひとまず打鍵はできないことはない。打鍵に5倍くらいの時間がかかるが(笑)。しかしまだ、移行する気にはなれない。ショートカットキーや UNIX のコマンドというのは指で覚えているものだということを痛感する。 C-h とかも。

しかし、新しい配列を覚えるのはなかなか楽しいので、ほかの配列も試してみたい。っつーことで「tut-code」を試してみる。わたしは skk 使いなので tut-code を試してみるだけならそう難しくない。 ~/.skk に

(require ’skk-tutcdef)

と足すだけ(skk-tutcdef.el と skk-tutcode.el がインストールされていなければならないが、その辺はパッケージと応相談)。

で……試してみたが、これはあまり使いやすいとは思えなかった。ひらがなを打鍵することに最適化されていない感じ。たとえば「むかいじゅん」と打鍵するのに、ふつうのローマ字なら「mukaijun」だが tut-code では「wuekrisliqludl」である。めちゃくちゃ長い。というか「じゅ」のような並び(濁音+拗音)の打鍵に滅法弱いのだな。ふつうのローマ字なら「ju」と2ストローク、もしくは「gya」のような場合は3ストロークだが、 tut-code だと6ストロークもかかってしまう。現実的にはあまり頻出はしないのかもしれないが、いちおう自分の名前だからなあ。

tut-code は t-code から生まれたもので、そもそもひらがなの打鍵に最適化されてるわけじゃない。あくまでも漢字直接入力のうえで、ひらがなをもっと簡単に打鍵したいという欲求から生まれたものだ。だから体系化はされてるけれど文字単位で入力するというパラダイムは譲れないのだろうな、という気がする。あと skk の tut-code は、ちょっとアグレッシブすぎるキーバインドの変更もあってちと使いづらいように見えた。

さて、ひらがなに特化した、ローマ字と無関係に打鍵が効率的そうな配列というと何があるだろうか……。そういえば Nicola (親指シフト)の SKK 版というのがあるよな。あれはどうだったろうか。あと面白そうなのは「きゅうり改」あたりですかね。しかし、きゅうり改はまつもとさん以外に誰か使ってるのかしらん?(あーつまり利用可能にするにはどういうハックが必要かということね) このテの配列はアルファベットをすべて文字入力に割り当てるから、skkでは l とか q とかを使いづらいのが難点か?

しかしまあいろいろあるもんですね

ま、そもそも AquaSKK には入れられそうにないから、けっきょく試すだけ試して使わなさそうな気もするが。

 

ところで今日のエントリを読んでて「ああコイツ順調に方向を見失ってるなあ」ってどの時点で思いました?


jmuk.org ディスクトラブル発生

Posted by 向井 淳 on Monday, 21 January, 2008

発生というか、実はちょっと前からディスクの調子があまりよくないような気がしていたのだけど動いているのでとりあえず放置していたのだが、さすがにヤバイ気がしたのでさくらに打診してみた。

そしたらディスクの交換は可能、料金は無償、ただし再インストールになるからデータのバックアップやセットアップは自分でやってね、ということらしい。あ、ちなみにぼくは専用サーバですんで、レンタルサーバはそんなことないと思いますけど。

てなわけで、とりあえずデータのバックアップはしているんですが、いつ決行するかは悩み中。まあ近いうちに再セットアップに入るかもしれません。そのときは事前に数日はアナウンスしますが、たぶんしばらく(数日は)メールも不通になるし、本ページも見えなくなることが予想されます。ダウンタイムはどれくらいかねぇ……。とりあえず今はまだアメリカなので、帰国するまでは現状のママ様子見です。いや、どこにいようが関係ないという説もあるんですけど、なんとなく、気分的にね。

しかしなんだね、専用サーバというのはたぶん本当にラックのなかの計算機1台ぶんの計算資源を占有しているわけで、ともあれ root 権限もこっちが握っているし、ゲストアカウントもないし、あたりまえだけど先方にはこっちのデータをバックアップする手立てがないのよね。マシンを落としてディスクを抜いてビットワイズコピー(ddとか)するという手はあるかもしれないけど……。

専用サーバだけどトラブル対策だけのために仮想化しておくってのもアリなのかもしれませんね、とふと思いました(でも専用サーバなのに「バックアップしときました」ってのもちょっと気味が悪いな。バックドアがあるみたいで)。

 

ところで再セットアップできついのは、ウチの場合たぶんこの日記ですね。 Haskell で書いてるから GHC が必要だし、好き放題にいろんなライブラリを使ってるからけっこうセットアップがめんどいのよね。……て思ってたんだけど、セットアップ後も OS はたぶん変わらないので、そうするとバイナリファイルと必要なライブラリがあれば GHC とかは必要なく動くかも。 Haskell レベルのライブラリはみんな静的にリンクされてるしな。必要なのは libgmp、 libsqlite3、libiconv。意外と楽かも?


コリイ・ドクトロウ “Someone Comes to Town, Someone Leaves Town”

Posted by 向井 淳 on Monday, 21 January, 2008

Someone Comes to Town, Someone Leaves Town | マジック・キングダムで落ちぶれて

Boing Boing で有名なコリイ・ドクトロウの第三長編。『マジック・キングダムで落ちぶれて』の評価は日本では散々で、たぶん大して売れなかったろうドクトロウはこれから長編が訳されづらいんじゃなかろうか、と勝手に推測して読んでみた。これから訳されるであろうモノばっかり英語で読んでもなあ、みたいな気もしたもので。

そしたらこれがあなた、面白かったのですよ(失礼)。

物語は、一風かわった男であるアランという人物がトロントの街に引っ越してくるところで幕を開ける。彼はそれまでいろんな商売を手掛けてきて一財産を築き、トロントは半分リタイアみたいな感じであるらしい。作家になりたいといって小説を書こうとしている。そんなアランが隣近所と知り合いになり、またふとした切っ掛けでなぜか、トロントの街中にフリーの無線インターネット網を張り巡らせるプロジェクトに関わるようになる、というのがいちおう物語の主軸。

でも、このあらすじは実際のところ、大して意味があるわけではなくて、あんまり重要でもない。本書は、もっと細部のところの奇妙な感覚が心地良いタイプの話で、しかもファンタジーだし。

上の粗筋のどの辺にファンタジーがあるかと不思議に思うかもしれないけど、そこにはファンタジー要素はありません。ほかのところがファンタジー。たとえば主人公のアランは、父がで、母が洗濯機なのだ。べつに比喩じゃないよ。本当に地形の山と、家庭用品の洗濯機から生まれ落ちた。彼は7人兄弟の長男で、次男は予知能力者、三男は、四男は死者、五〜七はマトリョーシカである。四男はもともと悪さばかりをするひねくれ者だったが、ある事件をきっかけにして、ほかの兄弟の手により殺され、今はいない。

さて、そんなこんなでアランがトロントで生活をしていると、五男のエドが尋ねてくる。エドがかぱっと開くと中からはフレッドが現われ(マトリョーシカだからね)、フレッドをひねると中にはジョージが……いない。話によると、死んだはずの四男デイヴィーが復活し、ジョージを攫っていったのだという。ジョージとデイヴィーを捜す過程ではエドとフレッドもデイヴィーに攫われいなくなってしまう。このデイヴィーとアランの争いもまた物語の主軸のひとつだ。

というわけで、無線ネットワークを広める話とデイヴィーを追跡するパートがあるわけだが、これに加えて過去にいったい何があったのかというアランの回想パート、それからアランの隣人のミミという女性は背中からなぜか羽根が生えているのだけど、このミミとアラン話、さらに彼女自身の生い立ちの回想など、様々なものが入り乱れて語られだす。

そんな風にある章ではミミの回想があったかと思うと急に無線ネットワークの話になったりとあっちこっちを行ったり来たりしながら描かれるが、物語のもつ雰囲気というか趣きも少し変わる。マトリョーシカの三兄弟が駆けずりまわったりするところはコミカルに描かれてて楽しい一方、デイヴィーまわりの話はけっこう陰惨だし(デイヴィー自身が死んでしまうのだし)、ミミの回想やアランの回想で語られるのは、奇妙な出自や妙な外見を持つ人間と社会とのズレ、あるいは社会にうまく適応できないフリークたちの哀感とでも言おうか、そんな雰囲気である。粗筋にしても雰囲気にしても、ひとくちに「こんな話」とは言いづらい。けど、このそれぞれがけっこう面白く、またこのように語られることで面白さを増していると感じた。

うん、面白かった。良い作品だと思います。検索してみたら marginalia でも褒めてました。

そういえば、『マジック・キングダムで落ちぶれて』だって設定とかは悪くはなかったと思うんだよね。一般的な意味での貨幣が消滅していて、人間同士のソーシャルな評価がそのまま貨幣となっている「ウッフィー」という仕組みはなかなか面白いし、当時は「ページランクみたいな仕組み」だって書いたけど、今にして思えばウェブナントカみたいなソーシャルメディアっぽい世界像を先取りしているようにも読めるだろう。あの小説の最大の問題は、いっけんふつうの近未来サスペンスのような体裁を取っているわりにエンターテイメントとしてはまったく残念というしかない完成度だったところにあったわけで、そういう点から必ずしも万人に勧められるわけではないが、ドクトロウはもっと評価されてもいい気がしてきたね。

って、しかし読み返すと『マジック・キングダム』の感想もベタ褒めだな俺。あと「案外とふつうだ」って書いてるな(笑)。やけに褒めてるのは、たぶん周囲の評価がネガティヴ一辺倒だったのでバランスを保とうと思ってポジティブな側面しか書かなかったんだと思います。「案外とふつう」な件については……まあ、SF的な意味でなんかスゴい地平に到達したりはしませんからね。現代と隔絶した未来のわりに、ディズニーランドの片隅でちまちまとした政争をしている狭さからそう思ったんだろう。

あ、そういう「ちまちました感じ」は本書も同じなので、「SFとは広大なヴィジョンが云々」みたいな人にはおすすめできません。ま、ファンタジーですしね。

ちなみに本書も Creative Commons (表示、非営利、改変禁止)ダウンロードできる(正確にはリンク先とはバージョンが違うけど)。でもわたしは本で買って読みました。そうじゃないと読む気になれんのよなー。電子データの方が、読んでて「あれっ?」と思ったときに過去検索ができたりして便利っちゃ便利な気がしますが。


dvorak 配列を練習!→挫折

Posted by 向井 淳 on Sunday, 20 January, 2008

ふと思うところがあって dvorak 配列を勉強しようかな、と思いたつ。といっても、この文章は qwerty 配列で書いていますが。知らないキー配列は、ちょっとドキドキして、脳の違う部分が刺激される(ような気がする)のが面白い。

で気付いたのだが、というか気付くもなにもないのだが、 qwerty 配列を習得するというのは運指のパターンもいっしょに学んでいるということを思い出させられた。つまり、英語や日本語(ローマ字)によくある字の並びを指が覚えていて、いわばマクロのように自動的に効率的に打鍵できる。ほとんど同時に。ぼくらはそんなことをしている(だから「くだしあ」みたいなtypoはけっこうある)。で、その有効そうな運指のパターンは qwerty と dvorak ではまったく違うものだから、それを覚えないとキー配列は覚えられても打鍵は速くならないだろう。それまでどれくらいかかるだろうか。

それは慣れの問題だと思うのでいいんだけど、もうひとつ気付いたのだが dvorak 配列では ls がめちゃくちゃ打鍵しづらい。lもs も右手の小指で打鍵する位置にあるからだ。 UNIX な dvorak 使いの人はどうしているのだろうか……。慣れれば慣れるもんだろうか。よく考えたらqwerty 配列でも cd は打ちやすい配置ではないしな。あと vi 使いの人はdvorak 配列のままあのキーバインドで操作してるんでしょうか。ホームポジションでカーソルを動かすメリットが失なわれそうな。

自然言語の打鍵は慣れの問題が大きそうだが、アプリケーションのショートカットキーはスイッチするまでが相当にしんどそうだなあという気がしていて、そんなこんなで三日と経たずに諦め気味(笑)。でも、とりあえずアルファベットをぜんぶ覚えるくらいまでは頑張る鴨。

なお、上のリンク先に書いてあるけど、 Mac で Dvorak 配列にスイッチするのはすごく簡単。言語環境に最初から入っているので、そいつをオンにすれば切り替わる。もちろん Linux や *BSD でも最初から入ってるから、 loadkeys なり kbdcontrol なり、あるいは X のキーボード設定なりを弄ればさくっと切り替えられる。ただ X のキーボード設定の場合は動的にスイッチするのが大変かもしれないけど。 GNOME とかに、もっと便利なキー配列変更ユーティリティあったかもしれませんが、その辺は詳しくありません。 Windows はあんまり使ったことなくてよく知らないのでパス。


型についての議論のメモ

Posted by 向井 淳 on Wednesday, 16 January, 2008

http://mono.kmc.gr.jp/~yhara/d/?date=20080116#p01

Just for memo. This entry does not have any conclusions.

型推論してくれる言語の流儀について

>
  • 流儀は2つ。できるだけ型推論させて書かない派と、意味のあるところでは書く派 >
  • ML系言語では型は機械に推論させて任せ、必要がある場合を除いて書かないことが多い気がする >
  • Haskeller の多くは、モジュールが export するブツの型は明示的に書いている(そうでないのは書いたり書かなかったり)。推論できるから書かなくていいけど、書く >
  • なぜかというと、その方が読みやすいからだと前に nobsun が言ってた。Haskellerの総意かどうかは知らんけど個人的にも同意 >
  • そういえば OCaml でも、モジュールから明示的に export させたいときは型を書く (mliファイルのことね) >
  • ちなみに ocamlbrowser はモジュール名や関数名から型を知るツール。超便利。ないと OCaml では何も書けない >
  • Haddock (haskell のドキュメンテーションツール)でも、何はなくとも関数の型はわかるようになってる。これはかなり助かる
  • Ruby について

    >
  • 誰か言及してるか知らんけど ruby リファレンスマニュアル刷新計画では、メソッドの引数や返り値の型を記載している >
  • これについては特に論争にはならなかったと記憶している。やっぱりあった方が便利だと思うよ >
  • rdoc にそのようなノーテーションがあったかどうかは知らない。でも、あったとしても大して活用されていない印象
  • てことで、個人的な印象としては型情報はあると「助かる」。わかりやすい。一方、わかりやすさという点での、動的な言語からのありうる反論は、

    >
  • 型は完璧じゃない。どの粒度で分けるか? >
  • けっきょく詳しい説明は自然言語で書かないといけないから型はそんな重要じゃない >
  • ruby は to_s とかで適当に変換してくれるからいいんだよ >
  • 静的言語で int size って書くのと動的言語で単に size って書くののあいだに差はあるの?
  • さて?