映画の日ということで、次女と一緒に見に行く。 ちょっとした親子の触れ合いか。
日本語吹き替えが不満だが、字幕では小学生にはつらいしな*1。 もっとも、長女は字幕の方が好きなんだそうで、人それぞれではあるのだが。
『賢者の石』の頃は日本語でも違和感が少なかったのだが、 役者が成長しても、吹き替え声優の越えは変わらないわけで、 だんだん違和感が増えてきた..かも。
まあ、楽しかった。息抜きにはちょうどいい...いや、ちょっと(論文)疲れが残ってるかも。
*1 それに字幕版はすでに妻と見てるし
マシンの調子が悪い
とはいうものの、トラックボールマシンが市場から消えてから数年、 買うマシンがないのだ。
ボールはあきらめてトラックポイントで妥協するとすれば、Thinkpad Xシリーズか。 別に軽さは追求しないから、X40よりはX31 1.6GHzくらいを入手すべきではないだろうか。
となると、市場から消え去る直前の今が買い時かも。どっか安い店があったかな。
GNU運動を宗教にたとえる物議を醸しそうな内容を連想させるタイトルだが、 その内容は実は「宗教を信じるものとオープンソースソフトウェア(あるいはフリーソフトウェア)」という 実にまっとうな内容。原文はGNU believers。
うちの教会もオープンソースソフトウェアを活用してたりするんだろうか。 ソフトウェアを無料で配布している例は知ってるけど、 ソース公開はしてないみたいだなあ。
内部的には利用してるんじゃないかと思うんだけど。
9月になったら、論文が終わったら、やろうと思っていたことがいくつかあったような気がするのだが、 追い詰められている時には自分を励ますために「ああしよう」「こうしよう」と考える割に、 いざ終わってみれば、ぼーっとしてしまって、あんまりやる気が出ない。ちょっと抜け殻っぽい。
その「やろうと思っていたこと」のひとつが、 メールオーガナイザーに返信機能を付けることだ。 これができれば、gmailもcmailも使わなくてすむ。
とはいうものの、返信機能はかなり大仕事のような気がしていて、 なかなか手がつけられなかった。cmailの返信機能を実現しているcmail-reply.elは、 じつに1432行ある。1日や2日じゃ完成しなさそうだ。
と、思っていたのだが、実際にやってみれば、わずか半日、たった54行で実装できてしまった。 今までやっていたことはなんだったんだろう。
まだ、いくつか足りないところがあるけど、私が日常使うぶんには最低限の機能を確保したかな。
後はこれを公開するのをどうするか、だな。
いままでcmailでもgmailでも反応が鈍かったのだが、 メールオーガナイザーは私の非力なマシンでもきびきび動く。 ブラウザが鈍かったのは風博士で改善されているし、 昨日のエントリに書いたようなマシンの不具合さえなければ、 買い替えなくても当分大丈夫な気がする。
いや、実際は買い替えなくちゃだけど。うう、そろそろ決心のしどころか。
小切手がきてしまった。外国小切手の換金は面倒だから、 「日本円での処理が出来るようになるまで保留してください」と連絡するつもりでいたのに、 面倒でずるずると引き伸ばしていたらこんなことに。
地方の銀行で換金すると、2600円の手数料をこちらから払った上に、 さらにいくらか引かれて口座に入金されるので、少額だと圧倒的に不利なのだ。 今回は200ドルちょいなので、かなり痛い。あぶく銭だから、と思ってあきらめるしかないのか。
Citibankが安いという話は聞いているのだが、 めったにない小切手の換金のために口座管理料が必要なCitiに口座を持つのもなあ。
まあ、文句ばかり言ってないで、 Google adsenseをクリックしてくださった皆様のおかげだということに感謝しよう。
しかし、少額でも、手数料で損したとしても、収支がプラスには違いない。
で、気が大きくなって、注文しちゃいましたよ、 IBM ThinkPad X31。
ここでX40でないのが、貧乏臭い。いや、大きさよりもCPUパワー(PentiumM 1.6GHz)を取ったと解釈してほしい。
価格.com ThinkPad X31 2672-PHJ 商品情報で調べて、安そうな店をチェック。 最安の店に電話を入れようとしたその瞬間、リロードしたページでは値段が2000円も下がっていた。 びっくり。
結局は西村さんと同じニッシンパルで。 512Mのメモリも付けて172100円。私にしては大きな買い物だ。
しかし、アレだ、新しいマシンを買っちゃったということは、インストールせねばならぬということだ。 面倒だなあ(←インストール嫌い)。
小人さんがやってくれたらいいのに。 後輩はあんまりヒマそうにしてないしなあ(自分でやりなさい、それくらい)。
私: なぞなぞだよ。朝は四本足、昼は二本足、夜は...
子: あ、知ってる。「人間」でしょ。
私: 「スフィンクスのなぞ」だね。でも、最後まで聞こうね。
私: 朝は四本足、昼は二本足、夜は八本足はなんだ。
子: え〜。本当に答えがあるのぉ。
<...しばらく考える...>
子: わかんない。降参。
私: 答えはある日の食事。朝は豚肉を食べ、昼はチキン、夜はお寿司でタコを食べた。
子: うーん。そんなのありぃ?
私: スフィンクスに喰われた人もそう思ったろうねえ。
WebでX31にLinuxをインストールする手順についていろいろ調べる。
ああ、面倒だ。もっともACPIしかないマシンに比べればマシか。
最後の懸念であったアドレスコンプリーションも完成。 これで個人的にほしい機能は全部そろった。 ときどきカーソルの位置が変だったりするような気がするが、 実用上の問題はないだろう。
あとはパッケージ化か。コメントやドキュメントも書かないとな。
moleskinさんが、 なぞなぞの答えを考えてくださる。
「まつもと家のテーブル」だそうだ。
パッと見て「まつもと家のテーブル」なんてハートフルな答えを思いついたのだが、深読みであった。
- 朝
- みんなバタバタ忙しいので、一度に二人しか席に着かないから四本足
- 昼
- 留守を守る奥様が一人でお食事なので二本足
- 夜
- 一家四人で食卓を囲んで八本足
なるほど、きれいな答えだ。
しかし、残念ながら、うちは朝食は必ず一緒に食べるし、4人ではなく5人家族だったりする。 「まつもと家」じゃない食卓なら正解だったかも。
しかし、
だって、敬虔なクリスチャンの方がお子様に出すなぞなぞって、神の愛や家族といった格調高いところへ行く答えを期待するじゃないですか、外野としては。
結城浩さんの日記の読み過ぎかなあ。
なんて書かれるということは、もしかすると、 普段から敬虔なクリスチャンとしてのふるまいを期待されちゃったりするんだろうか。 なかなかそうはいかないが、今後は気をつけよう
私の持っているPCMCIAのCD-ROMドライブからはブートできなかったというトラブル以外は、 ほぼ問題なくインストール。結局、Windowsは(「復活の呪文」以外)全部消して、 スワップとそれ以外の2パーティションに分割。
基本インストールが終わった後は、旧マシンから
dpkg --get-selections
のデータをコピー、
dpkg --set-selections
で新しいマシンのリストを更新し、upgrade。
マシンパワーとディスクに余裕ができたので、いわゆるデスクトップ環境を使ってみようかと、 KDEとGnomeをインストールしたが、なんかピンとこない。 しかし、普通の人が軽々と用意できている環境がなかなかインストールできない自分は、 どうかしてるんじゃないだろうかと思う。
そういえば、すっかり忘れていたのだが、土曜日はオープンソースカンファレンス2004だったのだな。
それなりに盛況だったようだが、誰かレポートをまとめてくれないかなあ。 私が見たのはmozixさんのレポートと、 レポートではないけど吉岡さんの日記くらいか。
講習会について打ち合わせをしていたら、日経の記事について教えてもらう。紙の日経の地方欄に載ったのは知ってたけど。
島根県、島根発のプログラミング言語を産業振興に活用
島根県は県内技術者が作ったプログラミング言語「Ruby(ルビー)」を活用して、情報産業の振興に力を入れる。この言語は比較的平易でなじみやすく、プログラムの原文が無料公開されているためソフト開発を低コストで進めることができる。10月から若者向け講座を継続的に開き、この言語の活用機運を高める考えだ。
ルビーは情報ベンチャーのネットワーク応用通信研究所(松江市、井上浩社長)に勤める技術者、まつもとゆきひろ氏が約10年前に作った。言語体系が簡素で、プログラミングの経験が浅くても比較的迅速にソフトを開発していくことができる。ルビーの無料公開ソフトは世界的に利用者が増えているという。
「ルビー」はよしてほしいなあ、と思いつつ、Web版にも載るとはな。
けど、Rubyって「島根発」とか「島根県内技術者が作った」ってイメージはあんまりないよな。 確かに私は今は島根に住んでるけど、出身者じゃないし、 開発を始めた時には静岡県民だったし、 それに世界中の人のコードが入ってるしなあ。
つい、こないだも台風(16号)が来たと思ったが、次がまた来た。
今回もあちこちで被害が出ているらしい。 小学校も休校になった。
山陰地方は日本で一番台風が来ない地域らしいので、 二度も続けてやってくるのは珍しい。
そういえば前回は論文〆切直前だったので、 あの時に停電とかになっていたら、大変なことになっていたよなあ。
で、大事を取って自宅作業ということにしたのだが、 子供がいるということはうるさいということでもある。
大変に騒がしい。
普段は無線LANばかり使っているのだが、 今回は有線で Let's Note B5-ERとThinkpad X31をつないで、 ホームディレクトリをコピー。有線でも3時間くらいかかった。 つまらないデータを大量に抱え込んでいるせいなので、 この機会に捨てればよいんだけど、選別するのが面倒で(ディスクも倍くらいあるし)、 結局死蔵されていくような気がする。
この機会にデスクトップ環境を、とも思ったが、 なんだかしっくりこないし、インストールも思いのほか難しかったので、 結局fvwm1のまま。ただ、gkrellmだけが増えた。
進歩しないものだな。
この台風のせいで、台所の天井が雨漏りを始めた。 前からちょっと怪しかったのだが、天井板が湿気で傷んできたようだ。
古い家はこれだから。
さっそく屋根裏に上がって、どこが雨漏りしているか確認し、 ビニールシートをしいて当面の処置をしていた。
作業しながら、「よく台風のときに屋根に上がってケガする人がいるけど、 ここは屋根裏で風に吹き飛ばされる心配はないよな」などと考えていたその瞬間、
バリバリバリッ
すごい音がして、天井を踏み抜いてしまった。弱い梁に体重をかけてしまったらしい。
台所にいた妻はいきなり大きな音とともに天井のパネルが落ちてきたのでパニックに陥った。 上を見ると天井から足がつき出しているし。きゃーっ。
大失敗。どうやって修理しようか。
うちの息子は作文が大変苦手だ。 このままでは将来苦労しそうなので、なんらかの訓練が必要だろう。 そのために、日記をかかせるのはどうだろうかと話をした。
ところが、本人は「ぼくもおとーさんみたいにパソコンで日記を書きたい」と言い出す。 となると、Web日記か*1。 どこのサービスを利用するのがよいかな。
*1 ここに飛躍が有る。別にメモ帳で書かせてもいいんだけどな
もう普通に使えるようになって、ほぼ完全に引っ越しが終わった。 あとはフォントの設定が少しと、機種固有の設定だけだ。
無線LAN
ndiswrapperかmadwifiで使えるとの情報あり。madwifiはカーネル2.6.8ではコンパイルできない。 パッチを入手してインストール。ESSIDの取得ができないような気がするけど、手動で設定すれば使えた。 ndiswrapperの方は繋がったり、切れたり。ドライバを間違えたかな。
Speedstep
CPU速度を調整してバッテリーの保ちをよくしたい。 ACPIを使えばcpufreqdが動いて、問題なく動作した。 APMでSpeedstepを使う方法はあるのかな。
tpctlというパッケージを使えばapmiserというデーモンが調整してくれるとのことだが、 実際に試したところCPU速度表示は変化しない。
サスペンド・リジューム
APMでは問題なくサスペンドした。ただし、ときどきふたを閉めてもサスペンドしないときがある。 apm -sでは確実にサスペンドする。
ACPIを使うとサスペンドにはswsuspendを使うしかないようだ。
ところで、APMで動作させていると、/proc/cpuinfoのclockの値が、 ブート時にACに繋がっていると1.6GHz、バッテリー動作だと600MHzと表示されるのはどうしてだろう。 実際の処理速度は変わらないみたいだけど。
午前中は子供の参観日に出席する。夏休みの自由課題(うちの子の小学校では「一人一挑戦」と呼ぶらしい)を発表する、ということで、 それぞれの子供たちがいろいろなことをしているのを興味深く観察する。
毎日相当の距離を走って時間を記録する子(45分くらい、毎日数秒しかタイムが違わないのが印象的)、 父親の道具を借りたか本格的なベンチを作ってしまう女の子、 テルミット反応で砂鉄から鉄を練成しようとした子などが印象的であった。
ところで、レポートを読んでいると「失敗しました」とか「うまくいきませんでした」とかいう表現が目立つ。 そういうのを読むと心の中で「どう失敗したのか、何を期待してたとに何が起きたのかをちゃんと書かないと、レポートにならんじゃないか」と突っ込んでしまうのは職業的なサガか。理系的な性格か。
そんなことだから、理系の男はモテないなどと言われるのかもしれない。
X31はおおむね思い通りに動くようになった。無線LANはmadwifiで安定して接続できるようになったし。
ただ、Debian標準のカーネルでは、Speedstep-centrinoモジュールがACPIを参照する設定になっているので、 APMを使っている私には使えない。そこでmake-kpkgを使ってCONFIG_X86_SPEEDSTEP_CENTRINO_ACPIをoffにして、 カーネル再コンパイル。
このカーネルを使うとcpufreqdを使ってCPUクロックの調整ができるようになった。 めでたし、めでたし。
と、言いたいところだが、今度はサスペンドができなくなった。 ふたを閉じてもサスペンドが始まらないし、apm -sでサスペンドさせると、 なにをやっても復旧しない。
サスペンドができないのは、CPUクロックの調整ができないのよりも嬉しくない。だが、 なぜ両立ができないのか。違いは上記のCONFIG_X86_SPEEDSTEP_CENTRINO_ACPIの設定を変えたのと、 CPUタイプをCONFIG_M686からCONFIG_MPENTIUMMに変えただけなんだがなあ。
いくつかの問題は解決した。まずは旧マシンの問題から。
以前書いた時計が狂う問題だが、 Thinkpadでも発生したのでハード的な原因ではないことが判明。 いろいろ調べたところ adjtimex パッケージが時刻にドリフトをかけていた。 こんなパッケージいつ入れたっけ。adjtimexパッケージを削除して解決。
次に、Speedstepとサスペンドだが、 うまくいかないカーネルのブートログを、うまくいくカーネルのログと見比べると、 以下のようなACPI関連のものが増えていた。
Sep 10 10:02:14 localhost vmunix: ACPI-1133: *** Error: Method execution failed [\_SB_.PCI0.PCI1.DOCK.IDE1._STA] (Node efa7ef60), AE_AML_NO_RETURN_VALUE Sep 10 10:02:14 localhost vmunix: ACPI-0154: *** Error: Method execution failed [\_SB_.PCI0.PCI1.DOCK.IDE1._STA] (Node efa7ef60), AE_AML_NO_RETURN_VALUE
configはCONFIG_X86_SPEEDSTEP_CENTRINO_ACPI以外全く同じはずなのに、 動作が異なるのは解せないが、ここはあまり追求せずACPIをoffにしたカーネルを作ったところ、 みごと望み通りのSpeedstep + APM suspendが実現した。
しかし、ちょっと試す度にカーネルのフルコンパイルが必要なのはつらかった。 慣れてればもっと上手な方法があるんだろうけど。
ついでだが、これについて調べている途中で見つけた、 tpbというプログラムは収穫であった。画面の切り替え、輝度の操作、ボリュームの操作などを画面に表示してくれる。 Thinkpadユーザはお勧め。
最後、コンピュータとは関係ないんだけど、夕べから今朝にかけて雨が降ったが、 どうやら雨漏りはしていないようだ。 大家さん、ありがとう。
Martine FowlerがRubyを使ってクロージャについて紹介している(日本語訳)
確かにクロージャはすごく便利なんだけど、 Rubyのクロージャはcallメソッドを使わないと呼び出せないので、ちょっと気持ち悪い。 まあ、Lispでもfuncallを使わないといけないので「絶対駄目」というほどではないけど。
とはいえ、SchemeやPythonのような
foo.bar(1)
を「foo.barというメソッドオブジェクトを取り出し、1を引数として呼び出し手続きをapplyする」というような セマンティックスは避けたい。 やはり、これはRuby的には「fooに1という引数とともにbarというメッセージを送る」という意味づけをしたいのだ。
で、考えたんだけど、
というのはどうだろうか。現在、「call」の代わりに「[]」を代用したりしてるけど、 これをずばり「()」メソッドにしちゃうと。そうすると、
fact = lambda{|n| if n == 0 than 1 else fact(n - 1)* n end }
fact(10)
のように書けて気分が良い。
欠点は互換性だ。そんなに凶悪ではないけれども、 ローカル変数名と同じ名前のメソッドがレシーバを省略して呼べなくなる。 あんまり頻繁に発生しそうではないが。
もう一つの問題は大文字で始まる名前のメソッドだ。 Rubyには少数だが大文字で始まるメソッド(Array()とかString()とか)がある。 ローカル変数と違って、定数は定義されているかどうかがコンパイル時にはわからない。
これについてはいくつかの対処法が考えられる。
くらいか。採用するなら、一番きれいなのは最後のものだな。
ただ、Rubyの組み込みの範囲内では大文字で始まるメソッドはクラス名と同一で、 変換を行うものばかりなので最後の案でも問題なさそうだけど、 他で大文字で始まる名前のメソッドを持っているプログラムには、 メソッドの名前を変えるしか対処方法がないのは移行の問題があるかもしれない。
仕様を決めてしまえば、実装はすぐに頭に浮かぶし、たぶん15分くらいでできそうだ。
もっとも、今parse.yを変更すると青木くんがギャッといいそうなので、 手をつけるのは我慢しよう。
水面下で作業中であった『るびま』こと、『Rubyist Magazine』がとうとう創刊しましたよ。言語をネタとした読み物としてのWeb雑誌というのは、 なかなか面白いスタンスではないかと自画自賛。
とはいえ、私はインタビューに答えただけであとは編集部の皆さんのおかげです。 お疲れさまでした。
追記:
CNET Japanでも取り上げられているぞ。ちょっと感動。
もう11月とは。今月は「Webアプリケーションの基礎(その2)」。 HTTPの復習とかFORMの使い方とか、セッションとか。
あと、Webアプリケーションフレームワークの入門についても書くつもり。
とはいえ、今月は(今月も?)とりかかりが遅いので、ちょっとあせってるのだ。 つい、逃避行動で人狼BBSのログを眺めたりなんかして。 狼の声や墓の声を消して、一緒に推理したりすると臨場感いっぱいに楽しめる...って、なにやってんだ。
えー、先日Web日記デビューを果たした息子ですが、とうとう書いたようです。 とはいえ、非常に内輪うけなのでURLは公開しません。
弟やら親*1から、 初ツッコミをもらってはしゃいでいる息子であった。
*1 息子にしてみれば、おじさんやらおじいさんやらになるわけですな
リアルの引っ越しは数ヶ月前に済ませたが、今度はサーバーの引っ越し。
長らくberyllium.ruby-lang.org(クラッシュ前はhellium)に居候していたwww.rubyist.netだが、 rubyist.net専用(?)サーバーである boron.rubyist.netに引っ越しが行われた。
担当のYくんは、最近やってしまった「rm -rf *」事件のために、 まわりからさんざん囃し立てられるプレッシャーの中で無事移行は完了した(ように見える)。
お疲れさま。
今回の移動で「Matzにっき」はmod_ruby対応になったので、 それなりに機敏に反応するようになったのではないかと思う。
ITmediaから。
もちろん忘れたりしない。トラックボール付きのノートPCがあれば、 Thinkpad X31じゃなくてそっちを買ったに違いない。 Panasonicはもう出さないのかなあ。何年も待ったんだけどなあ。
実はX31には結構満足してたりするんだけど。
とはいえ、上記の記事はマウスの代わりに使う外付けのトラックボールの話なんだな。 そっちはそんなに魅力的ではないなあ。いや、この機会に検討してみるか。
交渉の末、〆切は16日にしてもらったのだが、 進まない。今日の夕方の時点で半分くらいか。
しかもページ配分を間違えて、 HTTPとセッションの話だけで2/3くらい書いてしまった。 残りのページではWebアプリケーションフレームワークはまともな話ができそうにない。
どうしようか。まあ、適当にはしょって来月に回すしかないよな。
「開発日記」は最初書こうと思っていたことを、 なんかの拍子に度忘れしてしまって、悩んだ揚げ句「人狼BBS」について。 でも、雑誌が発売される頃には状況が変わってたりして。
で、「開発日記」を書いてしまってから、最初書こうと思っていたテーマを思い出した。 先月、さんざん苦労した「多言語化」の話を書こうと思ったんだ。 これも来月に回そうか。
思ったよりも早く、原稿(1パス目)が仕上がったので、 会社を抜け出して散髪に行く。いつまで経っても涼しくならないのに、 伸びてきた髪が暑苦しいからだ。
で、てくてく歩いていった近所の散髪屋で髪を切ってもらっていると、
「ざーっ」
雨が降ってきた。夕立のようだがなかなかやまない。 仕方がないので、しばらく待って小降りになった時点で、 会社まで走って帰る。頭も洗ってもらったのに。
昨日のエントリで多言語化について触れたら、 変換へのリクエストをいただいてしまった。
先月、実装して論文を書いた多言語化機能は、 複数の文字エンコーディングをそのまま取り扱う機能である。
個人的には実際の多言語化にはもうふたつ必要なものがあると考えている。 論文として書くかどうかは置いといて。
それは
である。前者はiconvが結構頑張っているが、 エンコーディングのハンドリングが拡張可能である以上、 変換機能も拡張可能であってほしい気がする。
後者はなかなか難しい問題だ。 実現するなら、これも拡張可能にしたいが、 これこそ決定打というアルゴリズムもなさそうだ。 言語に思いっきり依存しそうだし。
最近はmeta情報としてエンコーディングが分かることが多いから、 それほど重要ではないのかなあ。
これらの多言語化機能を使って、アプリケーションの国際化を行うためには、 メッセージの言語切り替え(gettextなど)、GUIツールキットのフォントハンドリング、 縦書き・右から左への対応、 貨幣記号・小数点など文化的な記法変化の対応、 などなどが必要だ。
先は遠いぞ。
あおきさんによって行われたCVS HEADへのRipper統合によって、 前からやろうと思っていたYYPARSE_PARAMおよびYYLEX_PARAM対応への道が開けた。 というわけで、朝から突貫で作業を行う。
半日でおおよその作業が終わる。これで「ある程度できた」という実感が得られるのは、 コンパイル型言語の利点ではある。インタプリタ型言語だと、 静的に検証できる部分が文法チェックしかないので、 どこまで確認できたかということを知ることだけでも大変だ。
しかし、まだグローバル変数が残っているので、 完全なリエントラントにはなっていないのだった。
akrさんが最近怒濤のように報告してくださったバグを修正する。 しかしよく見付けるものだ。
直したバグは以下の通り
まだ残ってそうだな。
直したバグ。
二階で「どさっ」という大きな音がするので駆けつけたところ、 娘が鴨居に頭をぶつけて倒れていた。「すべり台の上からジャンプしたら鴨居があった」のだそうだ。
顔色は悪いし、吐き気がするということで、 当番医を確認しようと119番に電話したところ、 「頭は恐いから救急車を送りましょう」と言われた。
さっそく救急車に来てもらい病院へ。おおげさなことになったなあ。 妻が付き添い、私と他の子は留守番。
しばらくすると妻から電話があり、 「CTスキャンも取ってもらったが異常なし」 ということであった。
ああ、びっくりした。
まだ火傷しそうなくらいホットな話なので、わざと抽象的に書かざるをえない。 読みにくいと思ったら読み飛ばしてほしい。
あるところで、ある人が別の人を非難した。 「別の人」には非難される十分な理由があると私も思ったが、 その非難の内容は感情的になったあげく言い過ぎがあるとも思った。
そこで、その場を管理する立場であった私は 「あなたのその非難は言い過ぎ」であり、 「(そういうことを言ってしまう)あなたの態度は間違っている」と批判した。
いや、批判してしまった。
ところが、私に批判されたその人は「その非難は言い過ぎ」の部分は耳に入らず、 「「あなた(の態度)は間違っている」とだけ受け取ってしまった。 その人は致命的に感情を傷つけられてしまった。
私の言葉に「私は正しい」とか「管理する立場だから」とかいう慢心があったことは否定できない。 間違っていたのは私の方だ。すまない。
追記:
マキャベリの言葉を突っ込んでいただきました。反省とともに聖書からも。
デバッグ。きりがない。
諸悪の根源、継続を手当てするべきなんだろうか。
それとは別にソースの整理。
parse.y: remove global variables ruby_eval_tree and ruby_eval_tree_begin.
parse.yからグローバル変数を無くす修正に取り掛かる。まだ先は遠いが。 しかし、bisonを要求するようになるのはどうなんだろう。
hash.c (rb_hash_fetch): returns KeyError instead of IndexError.
Enumerable#each_with_indexから飛び火。
問題は「Hashのkeyをindexと見るかどうか」。 indexと見るならばEnumerable#each_with_indexはkeyを与えるべき。 見ないならばfetchなどがIndexErrorを返すのはおかしい。
私の結論としては「indexとして見ない」、「IndexErrorを新設のKeyErrorに変更」とした。 ただし、互換性の点からKeyErrorはIndexErrorのサブクラス。
秋分の日、らしいのだが、午前中は長女が教会の「若い女性」の活動、 午後は私が別の教会の用事、ということであまり休日らしくない。
長女以外の子供は妻と一緒に映画を観てくることにしたらしい(仮面ライダーとデカレンジャー)。 一人残された私は寂しくデバッグ。
直したバグ
午後は長女を迎えに行ってから、家族で外食。ネクタイを汚してしまった。がっかり。
PHPとHSPについてコメントをいただく。
舌の剣(つるぎ)は命を絶つさん on PHP:
デファクト・スタンダードを確立した者が、
その技術的優劣に関わりなく、
市場を支配する。
「舌の剣」さんのお言葉は、つまり、広まるかどうかは技術的でない原因で決まるということですよね。 まあ、そうかもしれないなとは思いますが、それであれば、
という点について関心があります。ま、私自身は、実はマーケティングを志向していないので、 知ったからといって、単なる好奇心以上のものではないのですが。
もうひとつのコメント、 匿名希望さん on HSP:
「読みやすい」と「初心者に理解しやすい」の違いです。
> 応募された作品も関数もインデントもろくにない
> ノッペラとした感じで、あちこちgotoで飛びまくって
> 論理を把握することはほとんど不可能でした。
それは言語仕様のせいではないと思います。> これをデバッグした少年(の脳力)は偉大だ。若さゆえの
> パワーか。
慣れれば何てことありません。
「匿名希望」さんのコメントは興味深い。すでにコメントで返答しましたが、
という点が気になります。
いや、私としても「HSPこそ(ツールがそろっているから)便利に使える」という点は理解しています。 HSPにはツールとして優れた点がたくさんあると思います。 それこそRubyで同じことをしろと言われてもやる気にならないくらいの圧倒的な機能の差が。
しかし、私が関心があるのは、もし仮に、HSPの機能をすべて持ち、 もうちょっと近代的な(たとえばJavaやRubyに似た)言語仕様を持った処理系があったとしたら、 その言語よりも今のHSPを選ぶ人がいるのかどうか、 もし、そのような人がいるのであれば、それはどのような理由によるのか、という点です。
「そんな存在しない言語のこと考えてもしょうがないじゃん」という答えも予想できますが、 言語処理系を作ることは実はそんなに大変でないことを知っている身としては、 どうしても気になります。仮にHSPのソースが公開されていたとしたら、 おそらく数日から数週間の作業で新しい言語を作ることができるでしょうから。
しばらく前にNHK BSで放送していたものの録画。
1968年の映画とは思えない。パンナムがつぶれてたりするのは愛敬か。
この映画を見るのは確か3度目か4度目のはずだが、 意外と記憶と違っている部分があった。以下は雑多な感想。
全体に説明が少なく、かつ間延びした感じがする。
増やすところは増やして、削るところは削るともっとすっきりするかも。 そう感じることそのものが現在のハリウッド映画の「文法」に毒されているのかもしれない。 そういう身からは「未来予測がすぐれた映画」という印象が強い。 そう思えば、邦題『宇宙の旅』は適切なのかもしれない。 本来は人類の進化を描こうとしていたと思うんだけど。
SF的背景を持たない妻には、なんのことやらさっぱりわからなかったようだ。 彼女にとっては実験映画と同じ印象しかなかったようだ。 あれこれ説明したら少しは分かったようだが。
次は『2010』だが、いつ見る時間が取れるかな。
普段は日曜日だけ訪問するのだが、今回は特別に依頼されたので土曜日から出かける。 鳥取市内で迷ってしまって遅刻してしまったのは秘密だ。
扶助協会の教師改善集会の講師というのが依頼内容だったのだが、 おおむね満足いただけたようだ。教会における教師ってのは、 学校の教師とは違う側面が多いので難しいよね。
集会終了後、弟のアパートへ。今晩は泊めてもらう。 おかげで年が離れた弟とゆっくり話す機会があった。 今まで、あんまり年が離れ過ぎててゆっくり話す機会が無かったのだが、 良い機会であった。
先に私自身の考えを言っておくと、 個人的には「初心者(だけ)のための言語」ってのは駄目だと思っている。 langsmith MLでも書いたし、以前にここでも書いたような気がするけど。
理由は以下の通り。
そうはいうものの、実は私が間違っていたり、なにかを見落としている可能性まで否定はしない。 「初心者の言語かくあるべし」という人の意見をぜひ聞きたいものだ。
前の夜は弟のアパートに泊まったので、 弟と大学生活と就職について、 伝道中の経験について、 お互いの最近の活動、 人狼BBSについてなど話し込んでから、 次の日(というか当日だな)のお話しの準備をしてたりしたら、 寝たのは3時を過ぎていた。
9時すぎに荷物をまとめて車に積み込んだら、 またPHSを忘れていた。....。
鳥取の今日の出席はまあまあ多かった。 私とステーク会長がステークの責任で訪問していたこともあるし、 よそから訪問してくださった方が何人かいらっしゃったこともあるが、 鳥取支部が全体に活気があるということなのかもしれない。
昨日、今日と続けてバプテスマ会が開かれたしね。
私の今日の話のテーマは「永遠の家族」。 だけど実際には「継続は力なり」という内容だったような気がする。
バプテスマ会が開かれている間、依頼されてコンピュータの再セットアップを。 しかし、Windows98を私にどうしろと。思わずLinuxをインストールしようかと思ってしまった。 とりあえず、サージでだめになったらしいモデムを除いては復旧できたようだ。 もっとも私はたいしたことしてないんだが。
弟のアパートに電話を取りによってから、自宅へ。
寝不足からなんどか意識不明になりそうになったので、 途中コンビニの駐車場で休憩。死ななくてよかった。
そういえば、弟に届けてほしいって言われてた米、忘れたんだよなあ。 忘れっぽいのはなかなか直らないなあ。
さらにいくつかコメントをいただいている。
私の知りたいことは、HSP(というツール)が評価されている(としたら、その)理由だ。 さらにその評価が
という点が興味がある。今まで聞いた中では、うすたさんのコメントの
というのは「HSPだから良い」という理由として、納得できないことはない。 個人的にはそんなに大きな問題かどうか疑問は持っているし、 また仮に問題であったとしても「将来の頭打ちのリスク」を考えると重大視しない方が良いとは思っているが、 別の考えを持つ人もいるだろう。
「それ(HSP言語)で十分な人もいる」というコメントもいただいたが、 それは(私には)納得できる理由ではない。 「近代的な機能」が「それで十分な人」の邪魔になることが明らかであればまた別だが。
あるいは「HSPなのに良い」のであれば、もっと良いツールが存在できる余地があるってことじゃないのかなあ。 それはそれで喜ばしいことである。
たぶん、HSP関連の話は(また別のネタを仕入れない限り)これで終わり。
いろいろ話が聞けて楽しかった。情報提供してくださった皆さん、ありがとうございました。
HSPの良い点
ま、納得できないことはない。ただ、これらは「HSP言語の文法」と密接に関連しているとは言いがたい。 繰り返しになるけど「HSP(というツール全体)が良い」ことは示せても、 なぜ「あの言語でなければならないのか」という問いには答えてないように思う。
あ、「ドキュメント〜」は若干は答えになっているかな。弱いけど。
しかし、私の問いに対する答えになりそうなものも見付けることができた。
ひとつはあおきさんによるもの。
HSP とかが goto メインなのはセーブ・ロードの実装が簡単だからじゃないのかなあ。
<中略>
ゲームプラットフォームとして、if/while を取るかセーブ機構を取るかという選択ならセーブ機構になるよね
確かに、「紙芝居型ゲームにおける局面のセーブを実現するために現在の言語仕様が望ましかった」というのは、 真実かどうかはわからないけれども、もしそうであれば私の問いに対する直接の答えだ。
もうひとつはshiomanekiさんの考察。
もちろん機能が豊富とかライブラリが充実しているとかそういう面があることは否定できないけれども、もっと重要なのは『「構造化以前のBasic」のような言語』になぜ豊富なライブラリが用意されてしまうのか?(そして初心者に受け入れられてしまうのか?)
<中略>
新しい学習コストをかけたくなかったのは、自分が最初に慣れ親しんだBASICで初心者には十分だと判断した言語制作者ではないだろうか?
そして、『「構造化以前のBasic」のような言語』で育った人々が、いつかまた新しい『「構造化以前のBasic」のような言語』を作り出す。
こちらにも納得する。自分が育った言語と同じようなものを作る、 それが優れているかどうかについては深く考察を行わない、 その結果が「あの言語」である、というのも非常にありそうな仮説だ。
真実を確認することこそできなかったが、 こんな面白い考察が読めただけでも、この一連の話題は(少なくとも私にとっては)非常に有意義であった。
最後に、誤解している人がいたみたいだけど、 私はRubyのデザイナーではあるが、別にRubyと比較しようなんて最初から思ってはいない。 私は言語デザイナーである前に、言語おたくなので、あらゆる言語の「より良い形」に興味があるのだ。
私は「HSPが総合的に良いツールであること」を否定したことはない。 ただ、「HSP言語」はどうかと思うのは事実だし、 「HSP言語」がもうちょっとマシな言語だったらもっと良いツールだったとも思う。
で、私の意見が間違っているかどうかが知りたかったというわけだ。
一連のやりとりを通じての私の結論は、 私の考えつかなかったもの(セーブ機能の実現)が提示されたものの、 真実はおそらく「言語デザイナーの怠慢」 あるいは「実装者は、ツール(機能)には興味があったが、言語にはさほど興味が無かった」ということでは ないだろうか、と推測している。私としては残念な結論だ。
っていうか、仮にも言語を作ろうってんなら、 みんなもうちょっと言語そのものにも関心を払おうよぉ*1。
*1 マイノリティである言語屋の魂の叫び
今日は某kitajさんやら某gotoyuzoさんやらの誕生日らしいのだが、 うちの長女の誕生日でもある。もうこんなに大きくなったのね。 私も歳をとるはずだわ。
一日遅れの家庭の夕べでちょっとしたお祝いをする。 プレゼントをあげて。 あと、ケーキ食べる。
HSP作者さんは言語を作りたかったんじゃないんじゃないかなぁ。
まったくその通りだと思う。私は言語屋なんで言語のことしか見てないけど、 実際は彼が作りたかったのは「プログラマブルなツールジェネレータ」くらいじゃないかと。
で、言語(の文法)にはあんまり興味がなかったんで、 慣れ親しんだN-BASIC(あれ、N88-BASICかな)に類似の文法を実現したと。
すべての人に、言語文法に対して愛を持て、と言うこと自体がムチャな要求なので、 それはそれで当然のことなのかもしれないが、 なんかあんまり考えられていない文法の言語が量産されるのは、見ていてつらい。 余計なお世話だけど。
とすると、こんなのはどうだろう。
「プログラマブル」という機能を提供する、言語ツールキットがあって、 プログラマブルなツールを提供したい人は、そのツールのAPIに従って 機能をドロップインすれば、あら不思議、プログラマブルツールの出来上がり、 というのは。
発想としては、Tclとか、Guileとかに似ていないこともない。 だが、これらでは十分ではない。言語ツールキットの要求仕様はこんな感じではないだろうか。
自然な文法
BASICのような古臭い文法でも、 Lisp(S式)のような「(優れているが)特殊な印象を与える」文法でもないものを。
優れたAPI
ツールに組み込むことを念頭に置いた使いやすいAPIを提供する。
優れた移植性
WindowsでもUnix系OSでも動作する移植性。 なに、どうせ移植性が問題になる部分は、 「ドロップイン機能」の方で実現されるのだから難しいことではない。
リファレンス実装
「これを使えば可能です」は十分ではない。 「このツールは使っています」ということを示せねばならない。
性能
まあ、そこらの言語と同等であれば十分だけど。
TclやGuileは「文法」の点で不利だ。Tclの文法(というか実行モデル)は、 ある意味古臭いし、GuileのS式はほとんどの人にはとっつきにくい。
同じターゲットを目指してそうなものとして、Luaもあるが、 これもパッとしない。tableというモデルがいけないのか、 それとも別の原因があるのか。
探してみると、他にもSmallとかいくつも類似のプロジェクトがあるな。 大成功しているものが見当たらないのは、既存のプロジェクトがなにか見落としているのか、 それとも、この種のアイディアにはなにか致命的な欠陥があるのか。
なお、Rubyはこの目的にはふさわしくない。
言語仕様
Rubyの「全部メソッド」というモデルは強すぎる。 通常の手続きも必要だろう。「全部オブジェクト」は問題ないと思う。
インタプリタ実装
Rubyインタプリタは組み込みのことを十分に考えて実装されていない。 この点についてはTclの方が100倍優れている。
ライセンス
独自ライセンスのRubyは組み込みに関して安心感がない。 実際には問題は発生しないと思うけど。 ここは制限の少ないBSD系のライセンスが良いと思う。
失敗。いろいろとタイミングが悪かった。非っ常に残念だ。 先方にも申し訳ないことをした。
IPAへの応募のための書類が完成、提出。 関係者の皆さん、ご苦労様。
まあ、いろいろあったし、すでに反省点が明らかになっている(早すぎっ)ものもあるが、 とりあえず審判を待つことにしよう。
しかし、今回は2本出したのだが、先に出したものの受け付け番号と、 1時間20分後に出したものの受け付け番号が9番違うという事は、 その間に8本の申請があったということだな。盛況なのは喜ばしいことだ。 ライバルが多いと考えると気持ち複雑だけど。
今日で今期は終わりなので、次期にむけてまた新しい仕事が待ってるなあ。
今日から長女は修学旅行である。一泊二日だけど。
広島と岡山にいくそうだ。私が小学校時代には岡山で、 「なんでわざわざ岡山へ」と思った覚えがあったのだが、 広島が含まれているぶん、忙しそうだが観光的価値は高まっているかも。
とはいえ、一人いないだけでずいぶん静かなもんだな。
夜、有線放送で「修学旅行の一団はただいまホテルに到着したと連絡がありました」と放送される。 引っ越して以来、有線放送のことを、止められないし、うるさいし、邪魔だなあ、 とずっと思ってきたのだが、今日ほど便利だと思ったことはない。
ちょっと古いが、アサヒ・コムから。
かつては(最長でも)28年間だった著作権保護期間が、いまではほぼ100年(企業保有の著作物は発表から95年)あるいは100年以上(個人の著作物は作者の死後70年)にもなってしまっている。18世紀の人たちには28年もあれば十分だったことを、ロビイストたちは『著作権に関わる問題のあれこれを処理するには、もっともっと、100年を超す膨大な時間がかかるんだ』とでも説明するんだ。そんなこと信じられるか? でも議会は信じるんだ、ロビイストの言うことを
最初の著作権制度に戻るべきだ。あるいは、そんなに昔じゃなくても、(著作権の登録・更新制度がまだ残り、保護期間は最大56年だった)ニクソン政権(1969−1974年)の時の制度だっていい。以後30年で、議会の聡明な人たちがどうして、こんなに徹底的に著作権制度を変えてしまったんだろう。なぜだかわかるか? ミッキーのためか? そうなのかもしれない。いずれにしても、この裁判は何年にもわたって続くだろう
だいたいだな、「死後50年」なんて言い出したジュール・ベルヌ人を恨むべきなんだろうか。
いいじゃん、発表後20年とかでさ。
著作権、著作隣接権で飯を食ってる人にとっては短くなるのは困るのかもしれない。 それだったら、 申請による延長を許可したっていい。5年ごと更新で発表後最大50年とかでさ。
でも、デフォルトは短くしておくべきだ。でないと文化が蓄積されない。
でも、「保護期間を長くしないと(カネを生まないから)保護がおろそかになる」って主張する人までいるんだよな。 何を言う、自由にできないから、保護できないんじゃんか。