Island Life

2010/01/22

書き直し

夕食にBARTに乗ってサンフランシスコに出た。Mission st & 24th のあたり。うわぁ、都会だなあ。夜が明るい (Oaklandに比べて)。

Lisperと話しているとよく、「それ、結局全部書き直したんだよ」みたいな発言が飛び出す。 どうも印象として、他の言語のプロジェクトよりも書き直したって話が若干多いような気が するんだけれど、気のせいかなあ。誰かが最初のプロトタイプを書いて、それを引き継いだ誰かが 結局ほとんど書き直して、さらにその次のバージョンで別の誰かがまた大部分書き直して… みたいに5回も6回もリライトした話とか、あまりCやJavaでは聞かないような。

いくつか可能性

  • 単にサンプルが偏ってるだけ
  • Lisperは語りたがりである
  • Lisperは自分のスタイルにこだわるあまりついつい他人のコードでも直してしまう
  • 密度が高く機能に対して記述がコンパクトなので書き直しやすい
  • 独立性の高いコンポーネントに分割して、各コンポーネントは一人が担当することが多いので、好きなように実装をいじれる
  • 言語が{柔軟|いいかげん}で、旧バージョンのAPIと新バージョンのAPIをしばらく並行してサポートする、みたいなことがやりやすく、よって大胆にコンポーネントを入れ替えることができる
  • 発見的な開発スタイル、つまり書きながら、動かしながら問題を理解してゆく形をとるので、問題への理解が深まるにつれより的確に問題を記述できるようになる

むー、書いてるうちに単なる気のせいのような気もしてきた。 OSSのリポジトリを大規模に調査すれば何か言えるかもしれないけれどなー。

(追記2010/01/22 16:24:12 UTC) もしこの仮説が正しいとしたら、Lispが広まらない理由のひとつが 説明できるかもしれない。問題ごとにそれをもっともうまく記述できるように、 あるいは担当者が自然に記述できるようにリライトしてしまうということは、 問題や人に依存しないコーディングスタンダードを決めることとは相反する。

ソフトウェアを工業製品と考えるなら、属人性や個々の問題への依存性は極力 避けるべきで、Lispは良い言語ではないということになる。 ただし、ソフトウェアは工業製品であるべきかどうかという議論は別にある。

Tag: Lisp

2010/01/18

Oakland

East Bayに来るのは12年ぶり、かな。

「ベイエリアは寒い」という過去の幾多の経験があるので戦々兢々としてたのだけれど それほどでもなかったのでほっとしている。東京よりはずっと暖かい。

空港(OAK)からホテルに来るために、初めてBARTを使った。空いてるなあ。席もゆったりしてるし。

にしても、ダウンタウンのホテルに着いたのが9時で、周囲の店がどこも開いてない…

Tag:

2010/01/16

仕事の単位

何かアイディアを思いついて実装しようとして、作業がだいたい2日を越えてしまうと、 スループットが急激に落ちる気がする。そのタスクに関する効率だけでなく、 全体の効率が落ちてしまうのだ。もっと言うと、おそらく数時間で実装できる 単位がスループットとしては最高だ。日をまたいでもごちゃごちゃいじっている ようだと、うまくまとめあげて意味のある仕事ができるか、だらだらと 何日もひきずって効率を落とすか、半々くらいの勝負になってくる。

2日かかってコードをいじっても意味のあるコミットができる段階に達しないような タスクは相当複雑なもので、それを正面から実装するには頭の中のキャッシュを 関係する情報で満たしておかないとならない。

2日で終わらなかったから といって別のタスクに完全に切り替えてしまうと、せっかくのキャッシュが フラッシュされてしまい、次に元のタスクに取りかかる時に大変な苦労を することになる。むしろ手をつけていたコードを捨ててやり直す羽目に なることの方が多いかもしれない。

かといって、キャッシュの一部でも頭に置いておくと、他のタスクをやっていても 未解決の問題が気になってしかたがなく、気がつくと元のタスクをいじったりしている。 でもスワップが発生するので効率はあがらず、そういうコードはやっぱり 腐ってしまって捨てるしかなくなるか、どうにかコミットにこぎつけても 不満が残ることが多い。そしてその間、他のタスクも止まってしまう。

もちろん、2日どころか何ヶ月、下手すると何年も考えないと解決できない問題というのは たくさんある。これが数学者なら頭の中に巨大な抽象の足場を組み立てておけるの かもしれない。私にはどうも無理で、足場の基礎になるコードを外にダンプして、 少しづつ組み立ててゆくことしかできない。したがって、そういう巨大な問題に 取り組む唯一の方法は、それを2日以内で解決できるチャンクに分解できるか ということになる。

最初から全部分解できるならそもそも難問ではない単なる作業なんで、 もともと全体の地図の詳細が見えないところで適切なチャンクを切り出さないと ならない。だいたい今まで作ったものを、ぼんやり想定できる全体の地図の 中に当てはめて、突破口につながりそうな部分を集中して攻めることになる。

時にはまだ道半ばだと思っていたところが、一個のタスクを突破すると とんとん拍子につながってゴール近くまで一気に進めることもあれば、 だいたいマップしたと思っていた領域で一つ突破したら 脇道が大量に現われてしまったり、結局行き止まりであることが わかることもある。

だけどどうなるにせよ、次の見通しができる地点まで2日以内にたどり着ければ、 そこを新たな足場に加えてさらに登って行くことができる。 (行き止まりであることがわかる、というのもひとつの成果だ。 そちらに進んでも何もない、という枝刈りが出来たのだから)。 でも2日終えて中途半端な状態だと、そのまま続けても成果は出しにくい。 何日もかけて、結局同じ場所で同じ地図を手にしている羽目になる。

だとすると、次に考えるべきことは、「いかにしてこのprime windowに 終えられるタスクを増やすか」ということになる。

たとえばライブラリを揃える。たとえば強力な言語を使う。 それによって本質的でない作業に取られる時間を減らす。

また、アイディアを適切な状態まで熟させることも役に立つだろう。 そのアイディアの実装が地図のどこにはまるかが何もわからない状態で 手をつけても、力の入れどころがわからないのでダッシュが出来ない。 思いついてから、しばらく無意識の中に放り込んで、泳がせておく。 すると、作り上げたコードの足場上で遊んでいる時に、ふとはまりどころが 見つかる。その時がアイディアを釣り上げて捌くチャンスだ。

Tags: ものつくり, Programming

2010/01/14

CLtL2

人気の言語を作るには

Common Lispの中で、言語道断にLispらしからぬ構文はformat文字列にある。 formatはそれ自身の言語を持っており、それはLispではない。Lispに更に構文を追加するならformat記述子もそれに含めるべきだ。マクロが他のコードを生成するのと同じようにformat記述も生成できたら良い。

ある非常に優れたLispハッカーが、彼のCLtLはformatのところで開く癖がついてしまったと私に語ったことがある。実は私のもそうだ。多分これは改善すべき箇所を暗示している。また、プログラムはI/Oをたくさんするものだということも意味している。

優れたハッカーなら「開く癖」くらいで済むのだろうか。

うちのCLtL2はこの有様である。

[image]

来週からまたCommon Lispのお仕事。

Tags: Programming, Lisp

2010/01/12

Dreamhost PS -> Linode

しばらくDreamhostのVPSを使ってみてたんだけど、管理の都合なのか 単に不安定なのか、わりと頻繁にリブートがかかる。 メモリは最小構成(150M)だけどモニタしてる限りでは使ってるのは50-70Mで 安定してるので、リソースが足りないということは考えにくい。 原則としてDBは別ノードって構成が推奨されてるんで、 Dreamhost PSは単なるフロントエンドでの使用を想定してるのかも しれない。

にしても、これでは独自のデーモンを運用するのはきつい。 今のdedicated serverを移転するのは無理そうだ。 ということで別のホスティングサービスをちょろっと見ていた。

http://journal.uggedal.com/vps-performance-comparison の比較で Linodeが良さげなのでサインアップ。 32bit Ubuntu 9.04で運用してみることにした。 apt-getもGaucheのインストールも無問題。 さきほどこのサブドメインを新しいホストに移行。 しばらくこれで様子を見てみよう。

ひとつ気づいたのは、Dreamhostでインストール済みのapacheはかなり メモリ使用量を減らすチューニングがされていたっぽい。 Ubuntuのapache-mpm-workerそのままインストールだと、 virtual memoryで230Mとか使う。 residentは4.5Mくらいなので問題にはならないと思うけど。 Dreamhost PSはおまかせメニューが色々あるので、 ある程度おまかせで運営したくて、 かつフロントエンドのみの使用というのならいいのかな。 自分で全部セットアップできるのならあまりメリットはなさそう。

(追記 2010/01/13 19:46:35 UTC) Linodeの他にSlicehostも 評価していたんだけれど、たまたまかもしれないが私が使っていた時に ネットワークの調子が悪く、たとえばapt-getでubuntuのサーバにつなげない などということが頻発した。 SlicehostはHacker Newsで時々 評判を見るので悪くはないと思うのだけれど… 少なくともローレンジでは価格性能比、とりあえずの使用感ともにLinodeの 方が良さげ。今のところは。

Tag: Hosting

More entries ...