いけがみを召喚するには、出現予定を参考にしてください。三週間前までにメールをくだされば、日程を追加するなどしてスケジュールに組み込むことができるかもしれません。勉強会や個人的な会合、中途採用面接などに応じます。日記に書かないことはこちら。
一昨年に大病をして以来、正月を迎えられるのがありがたいです。もういろんなとこがズタボロなのね。医者は若いから治るって言ってくれてるんだけど。38kg まで体重が落ち込んだところから、やっと復帰できたのが現状。みなさん、健康は大事です。みなさんの健康をお祈りしております。
去年の年末年始は寝たきりだったので、年賀状書けなかった。そしたら、とうとう4通しか来ないありさま。もし、ここ見てる人が年賀状出したかったら、メールでもください。来年生きてるかどうかわかんない。冗談じゃなく。
まあでも精一杯やれたので悔いは全然ないな。これからもできるだけのことをしていこう。やりたい事は沢山あるので、何をやらないかを選ぶのが楽しい。僕がやらなくても誰かがやる事はやらないでいいと思っている。では、僕がやることはいったい何なのか?
どうでもいいけど(どうでもよくない)サユリさんから年賀状が届いていた。日本郵政グループめ。こういう民営化は大変よろしいので、来年も頼む。
去年のクリスマスに Pawel Karwowski からありがたいメールが来て、Pawel がメンテナに加わってくれました。0.1.8 が 155 KB, 0.1.9 が 1.72 MB です。どんだけがんばってくれたか、Pawel には感謝でいっぱいです。
僕自身は Ming/Ruby に愛想をつかしています。今後は Pawel とその後の仲間たちにおまかせしようと思っています。ChangeLog 読んだら "Kazuki" さんが重要な仕事をしてくださったみたいで、 Kazuki さんにも感謝しています。って Kazuki さんって誰?
もともと Ming の Ruby ラッパを作ろうと思ったのは、博士後期課程の研究がうまくいかなかったときの逃避行動でした。当時、SWF は出来たてほやほやのテクノロジで将来を感じさせるものでした。SWF player にはものすごい脆弱性がいくつもあって、こりゃ駄目だとは思ったけど、ブラウザでいろいろ動くのは楽しかったです。JavaScript は当時はへぼかった。
きっかけは、高林哲さんの zphoto: Flashベースのフォトアルバムを作るツールです。Unix Magazine: 横着プログラミング第7回でさとるさんが書いているように、当時、Ming の Ruby バインディングは作ってくれた人がいたんだけど、うまく動かなかった。これはバインディングを作ってくれた人が悪いんじゃなくて、SWIGの仕様がころころ変わっていたからなんである。で、SWIG の仕様がころころ変わっていたのは、R***の仕様がころころ変わっていたからでもある。当時の SWIG のメンテナはメジャーな言語へのラッパーに集中していて、マイナーな言語への対応は遅れがちであった。
Ming の Ruby ラッパを作ろうと決心したとき、僕には二つの選択肢があった:(1) SWIG の Ruby メンテナに加わって、ついでに Ming の Ruby メンテナにも加わる (2) Ming の Ruby ラッパを SWIG 抜きで作る。
僕が幸運だったのは、オープンソース万歳主義じゃなかったことにある。もしオープンソースをより安定させ、普及することにこだわっていたら、SWIG の Ruby メンテナになっただろうし、Ming の Ruby メンテナになっていただろうし、もしかしたら Ruby にもささやかな貢献(と、Ruby 界の親切な方々からのダメだしをもらう)をし続けることになっただろう。その結果、僕は自分を見失って大学を卒業できなかったことは想像に難くない。Linux や Windows などのインストーラも作っていただろう。恐ろしいことだ。
僕は、僕自身、Ming の Ruby ラッパを作ることが現実逃避行動であることを理解していたつもりだ。だから、ソースコードは書き捨てることにした。Haskell を学んだ今なら、Ming の C ソースコードから Ruby 拡張ライブラリのソースコードを自動生成するメタプログラミングをしたはずだ。でも、現実逃避だから、そこまで深入りすることはしなかった。だいたい、それは SWIG がやっていたことで、それは失敗に終わっていたことなのだ。SWIG の目指した手法は極めてまっとうだが、当時の Ruby には適用してはいけない方法だった。その代わりに、ただただコピーとペーストを繰り返す「駄目プログラマ」になりきることで、研究がうまくいかないことの鬱憤を晴らした。コーディングに頭を使うことはしたくなかった。
Ming の日本語化に貢献してくれた harpy さんと、Ming/Ruby のデバグにつきあってくれた(当時)京大の片山先生には感謝している。僕は現実逃避を心の底から楽しんだ。毎日、片山先生とメールのやりとりをした。C による Ruby の拡張ライブラリはすぐに bus error で死ぬから、gdb でひたすら追っかけ回す経験値が溜った。ついでに、Ruby の(特に GC 回り)の実装をよく読んだ。そのせいで GC の論文も読んだ。あやうく Ruby の GC を改良する仕事を始めるところだった。本当にそうしなくてよかった。
Ming/Ruby は一冊の本を産み出したようだ。アニメーションで見る線形代数というページがそれである。今も Ruby に貢献しているオーム社から発売されています!オーム社です!なお、僕の手元には残念ながら『プログラミングのための線形代数』という本がないです。線形代数はもう十分にわかっていたので、買う必要がありませんでした。でも、視覚化するという取組みはとても斬新である。こういう絵を数学屋は頭で描いているので、皆も描けばいいと思う。
さて、そろそろ昔話から本題に移ろう。Zed の "Rails Is A Ghetto"を読みました。僕も現状のRoR回りで大喜びしている人は大貧民だと思っています。大貧民は貧民と大貧民のポジションを行き来するゲームです。大富豪はゲームに参加しません。手持ちのカードをひたすら切るだけです。他の人は大富豪が出すカードをじっと眺めているだけです。パス、パス、パス...
Zed と僕はいろいろな意味で違う。Zed のほうがずっとプログラミングのセンスがあるし、なにより作ったものがすごい。Zed は不幸にして MBA を取得することができず、僕は、両親と日本育英会のサポート(1000万円の借金!)のおかげで卒業できた。Zed は Mongrel に注力し、僕は Ming/Ruby を見捨てた。僕の指導教官は僕の頭を死ぬほどぶったたき(表現は誇張されています)、僕をくだらないプログラミングから現実の研究に引き戻した。Zed は RoR が立ち上がった後に Mongrel を作り始めたようだが、Ming/Ruby は RoR よりもずっと前のプロジェクトだった。
Zed と僕には共通点がある。「RoR がすごい!」という声があがってから、メールボックスがパンクした。「RoR と一緒に使うためにはどうしたらいいのか?」という質問がたくさんきた。最初のころは僕も丁寧に答えようとした。Zed はもっと丁寧に答えていた。すごく時間かけて調べたのに、たいていの返事はひどかった。Zed みたいに僕は口が悪くないので(ほめ言葉)、ええと、時間の使いかたを学ばせていただきました。ありがとうございます。「RoR で仕事しませんか」というメールもいくつか来た。僕は幸い仕事があったので結局断ったけど、当時は相当迷った。だって、1年契約だったからね。来年は無職かもしれないという状況だった。Zed も迷ったようだ。結果、Zed は迷ったというより彷徨ってしまったようだ。
Web application は確かに魅力的ですが、それは単に「ユーザがインターフェースに慣れている」「ソフトウエアを配布しなくてもいい」「ソフトウエアに変更があってもすぐに対処できる」などといった現実的な理由にすぎません。理想的な理由ではないです。結果、僕等はクソったれな Web application という名前のシステムに縛られています。クリッククリッククリックします。なんか怪しげなデータベースに僕等のクレジットカードの情報が入っています。二コ二コ動画とかずーっと見てます。その陰で XSS とか CSRF とか Web server やブラウザの脆弱性が潜んでいます。僕の意見では、RoR がすごいのは「開発工程が短くなった」だけで、「安心安全素敵」なソフトウエアができあがったわけではありません。結果、喜んでいるのは上位ベンダーです。下々のプログラマの成果給にどのように影響するか、万が一の脆弱性のせいで社会的な問題が起きたときに誰が責任を取るのか、その結果は予測できていますか?
Zed も僕もいい勉強をしたんだと思う。Web application が「安心安全素敵」になるためには、いろいろな努力がまだ必要で(WebフレームワークにしてもWeb ServerにしてもブラウザにしてもなんとかスクリプトやSWF、そして開発言語も!)、今、「下っ端」として働くのはリスクが大き過ぎる。早めに痛い目にあって、抜け出した方がいいというのが僕の個人的な感想だ。Zed はまだ Python, Factor, Lua とか拘ってるけど、また同じ目に会うと思うよ...ほとんど MBA を取る寸前だったって書いてるけど、なんて自虐的なパロディなんだ。
一方で、Web application はプログラミングスキルがあまり要らないんだよね。誰かが作った API やライブラリ、何とかスクリプト、SWFなどを使えば目に見えるサービスができる。皆がスゲーと言ってくれる。アルゴリズムとか計算量とかそういう、いわゆる正規の計算機工学の勉強はほとんど必要ない。むしろ DB とかの経験やデザインのセンスが重要だ。入口は広いですよ。皆が入ってもまだ余地はある。ところで、ネズミ講でうまくやる秘訣は知ってるよね?(注:ネズミ講はillegalな行為です。逮捕されちゃうぞ)
計算機工学を活用した Web application は存在します。金を稼いでいるサービスもあれば、そうでないサービスもあります。
Web はそのうちぶっ壊れちゃうでしょう。僕の極論ですが。gopher もキャプテンもファミコントレードもみーんな消えたじゃない?白黒テレビがいつのまにかカラーテレビになったかと思ってたら、地デジなんとかじゃないと見れないんだって!とかいうことはあるのでござる。そんな感じで。もちろん、工学の進歩はゆっくりと寛容に進むので、Web が無くなる前の過渡期はあると思うけどね。今、Web アプリケーションを書いて仕事をしているひとが、気がついたら現在の Ada プログラマみたいなことになってた!なんてことはありうるんじゃないかな。それでも飯は食っていけるよ。ボーイング777 とか Ada で動いているらしいから(Wikipedia調べ)。
プログラマは二種類に分けられる:正規の計算機工学をこれからも学び続けるプログラマとそうでないプログラマ。勉強に費した投資に見合う収入は必ずしも得られるとは限らない。それが現状。僕の助言としては、くれぐれも、「声のでかい馬鹿」に騙されるなということ。Zed もそう書いてるよね。
僕自身は、収入はそんなにいらないな。勉強するために生きてるし、これからも生きるために勉強する。それに見合う分が身の丈にあっている。彷徨うくらいなら積極的に道を選択するほうを選びたい。たとえ、決める手段が分からなくて鉛筆倒しで決めたとしても。
そんな青臭いことを書いている自分ですが、今の仕事の任期が尽きたら、生きるためには靴も舐めます。ぴっかぴかにしてやるさ。どうせなら味はいちご100‰でお願いします。
二人は扉をあけて中にはひりました。
扉の裏側には、大きな字で斯う書いてありました。
「いろいろ注文が多くてうるさかつたでせう。お気の毒でした。
もうこれだけです。どうかからだ中に、壷の中の塩をたくさん
よくもみ込んでください。」
なるほど立派な青い瀬戸の塩壺は置いてありましたが、こんどといふこんどは二人ともぎよつとしてお互にクリームをたくさん塗つた顔を見合せました。
「どうもをかしいぜ。」
「ぼくもをかしいとおもふ。」
「沢山の注文といふのは、向ふがこつちへ注文してるんだよ。」
[注文の多い料理店,宮沢賢治, イーハトヴ童話, 1924.[青空文庫]より引用]
[追記:]『注文の多い料理店の序文』宮沢賢治, 大正十二年十二月二十日(青空文庫)は名文なので一読をお勧めする次第である。こういう序文で、こういう話を書くのだから。私もこのようなはなしをすきとほつた冬の風から聞いてみたいのです。
Web+DB PRESS Vol.42買った(今さらかよ)。これは全般的によい特集記事が多かった。いくつかアイデアをもらった。良質な記事を執筆してくださった方、ありがとう。編集GJ。
ついでに見つけた本。現在行き詰まっている予想の証明にヒントをもらった気がする。そっかー全単射作ればいいのか。ただし、「整数の分割」にまつわる問題はヒッジョーに難しいので、頭のいい研究生以外は手を出さない方がいいと思う。学部の自主ゼミに使うのなら、それは大変よろしい。
幸い友人がヤング図形をやっていたのと、寺田至センセイの「ヤング図形のはなし (日評数学選書)」をすらっと読んでいたせいで、とっつきやすかった。そうでない人でも、とっつきやすいように工夫されているので、手にするとよいでしょう。プログラミング言語の紹介もこんな感じで書くのはいいかもね。
で、関係ない話だが、コード書くのと、数学やるのとどっちが楽しいかっていう先日の話題を思い返すと、明瞭な差に気がついた。俺の個人的な意見だが、コード書いても本質的に嬉しくない。それは俺以外の誰かができることだし、なにより、コードが動かなかったときに「俺のせいじゃねー」ことがあるからである。そいつは本当にムケツク。オープンソースや開発チームのいいところは、皆で問題をディスカッションできるところにあるが、ノイズもどうしても混ざる。コミニュケーションを楽しみながら、毎日過ごせればいいけどね。ほんとにね。
いっぽう、数学のほうは、うまく動かなかったときは100%俺のせいである。一瞬、これはムケツクことであるが、自分が馬鹿なせいなので、すぐにおさまる。お茶飲めばいい。煮詰まっちゃったら自分よりも頭のいい人の知恵を借りることができる。ここにノイズは一切入らない。なぜなら、数学屋は基本的に「論理的思考」の基本的訓練がなされているからである。皆、優しい。最良のコミュニティだ。
ところが、もうひとつの評価軸がある。良いコード書くと、評価してくれる人がいるし、職にもありつけたりする(その生活が悲惨かどうかはさておき)。しかし、数学をやっていても一向にお金がもらえない。お金がもらえないというのは生活が悲惨なことよりも悪いことである。
私は中途半端にどちらもできたので、今の任期付きの仕事にありついたわけだが、「中途半端」なことが最近バレたため(始めからわかっていることで、隠してたわけじゃないのに、ボスは最初から過度に期待しすぎたようだ)、任期が切れる 2, 3 年先のことを考えなければならない。答えはまだでていないが、根本的な問題は「中途半端」であるところにあるのだろう。これは俺が馬鹿なせいなので困ったなー。しょうがないので、残された時間を勉強に費すしかない。
任期最後の就職活動期には、数学はおいといて、なんか作ると思う。作らないと職がないというこの日本においては、そうするよりしかたがない。ソフトウエアかドキュメントかどちらかだろうね。皆のニーズを知るためにも、日々のアンテナを張っておくことが重要なんだろう。
未発表の結果が腐るほど溜ってきたので、一刻も早く論文にしなければならない。
ときに、プログラムならなんでも Flymake している私は、 LaTeX でも flymake したくなった。
Emacs22 や XEmacs ではなく未だに Emacs21 on tty を愛して止まないため、 Flymake 1.46 という中途半端なバージョンを使っている。こいつは、 LaTeX(TeX) について不完全な実装だる!
;;; flymake.el 1691 行目- ;;;; tex-specific init-cleanup routines (defun flymake-get-tex-args (file-name) ;;(list "latex" (list "-c-style-errors" file-name)) (list "texify" (list "--pdf" "--tex-option=-c-style-errors" file-name)))
texify ってなんのことだ!と思ったら、どうやら MiKTeX についてくるものらしい。しかし、ちょっと待ってほしい。コメントでごまかされている "latex -c-style-errors" ってなんだよ、それ。そんなオプション、latex にはねーよ!(たぶん...)
MiKTeX は今も開発が活発に続いている素晴らしい製品のようだが、う、う、うぃんどうずでしか動かないんでしょうか。そんな。
そこで、例によって EmacsWiki 様にお伺いをたてたところ、 書いてあったよ、ばっちり。名無しさんには感謝しなければならない。もちろん、EmacsWikiにも。
偉大なる名無し様によれば、 ChkTeX という素敵ツールがあるらしい。そして ChkTeX はなんと作者がわからないらしいのである。なんて奥ゆかしい人々なのだ、LaTeX 界隈は*1。Baruch は Debian の ChkTeX パッケージのメンテナで、彼が手直ししてくれたおかげで今も手に入るのである。
だから、 chktex が \baka を忠告しても \(\baka\) を忠告してくれないことにゆめゆめ腹をたててはいけない。ChkTeX の配布物に含まれるドキュメントによれば、chktex は 42 種類の問題を指摘するだけのツールである。そして、私のマシンは、一文字タイプごとに pLaTeX を動かすほどすごいマシンではない。よしとしなければならぬ、よしとしなければならぬ。
私はさらに足を進めて、次のような設定を考えてみた。まず、ChkTeX をインストールし、パッケージに含まれる chktexrc をホームに .chktexrc として置く:ついでに、編集する。
# ~/.chktexrc
OutFormat
{
# -v0; silent mode
"%f%b%l%b%c%b%k: %m!n"
よし。次に、Flymake 1.46 の latex の処理を置き換えてやる:こいつは、~/.emacs でやればよろしい
;; Flymake for LaTeX
(defun flymake-get-tex-args (file-name)
(list "chktex" (list "-g0" "-r" "-l" (expand-file-name "~/.chktexrc") "-I" "-q" "-v0" file-name)))
(push
'("^\\(\.+\.tex\\):\\([0-9]+\\):\\([0-9]+\\):\\(.+\\)"
1 2 3 4) flymake-err-line-patterns)
すると、たとえば $sin$ とかうっかり書いたとたんに、Flymake が起動し、その行を青くしたうえで
Warning: You should perhaps use `\sin' instead.
と、ご丁寧にも教えてくださるのである。うん、これはありがたいよ。よくやるよね、こういう間違い。 credmpのFlymakeエラーミニバッファ表示と組み合わせると便利。
こうして、論文を書く準備が整った。未発表の結果が溜ってきたので、論文にしなければならないが、まだ一文字も書いていない。vim よりも生産性が悪い Emacs には困ったものである。
追伸:Collins 先生の Latexmk は異常に便利すぐるので、こちらも皆様にお勧めする次第。あと、 GNU aspell + Flyspell の組み合わせが最強である。ついでに RefTeX がないと生きていけない。 LaTeX の major-mode は、好きなものを使えばいいと思うが、私は野鳥(YaTeX)派。
調べてみたいもの:
MacOSXでも、うまく動くのか? Preview.app や Adobe のやつは、pdf が更新されても開き直してくんないので困る。できるんかしら
[2008-01-29 追記] どうやら、Leopard の Preview.app は再描画するらしい。ムキー。
あああああ...うああ。
*1 TeX のくだらなさにぶちきれて、また、現実逃避して、作ってしまったのだと推測している私の考えは穿ちすぎであろうか。
PDFViewとは?で書かれているように、書類の自動再読み込み機能を持つ PDF プレビューア PDFView がありました。これで、やっと幸せに LaTeX にとりかかれます。Emacs の改造はもういいです。Leopard な人は Preview.app が再描画機能を持っているらしいのでそれを使えばいいでしょう。
野鳥(YaTeX)では、 dvi2-command を setq すればお好みのプレビューアを設定することができます。
(setq dvi2-command "open -a /Applications/PDFView/PDFView.app")
以下、全部 Tiger 10.4.11 の話ね。 最初は Automator か、AppleScript で楽勝だろーと思っていた。しかし、違った。Preview.app は Automator で開けるが閉じることができない。また、AppleScript に対応していない。いっぽう、Adobe Reader 8 は Automator に対応していない。 AppleScript の Adobe Reader 8 の API ドキュメント見たら、open だけでなく close もあると書いてあるので、最初はそれを試した。なんか、おかしいなーと気がついたのは version すら取れなかったので。最後に、Developing for Adobe Reader [PDF] 読んだら、対応しているのは以下の API だけだそうだ:
じゃあ、 AppleScript の API ドキュメント無駄に充実させるなって話ですよ。武蔵丸!
RSS feed を再開しました。RSS の思想を尊重するために全文配信はしません、あしからず。