Archive for September, 2006

武富健治『鈴木先生』

Posted by on Wednesday, 13 September, 2006
>あ、これすごく面白い。なのに、何が面白いのか、うまく表現できない。 > >……鈴木先生の、心理描写、なのかなあ。起きている事件それ自体はそれほど深刻なものでもないのに、異様な密度で繰り広げられる……いや、違うな、そういうことを言いたいわけじゃないんだ。なんだろう、これ。 > >買う前には、いわゆる「日常小ネタ」系のギャグまんがとか、そういうのを想像していた。でまあ、日常の小さいネタを扱っているのは確かなのだけど、そういう意味での期待はすっぱり裏切られた。むしろ中身は、ずっしり重い。「給食で酢豚が廃案になるかどうか」という、ある面ではどうでも良いことがたいへん重たくのしかかる。 > >鈴木先生の、生真面目な先生ブリがある種のおかしみを持っている、そういう側面は、まあ、ある。けれどもそれだけではない。教師を主人公に据えた、現実にありそうな問題を扱っていて、理想的でもなく現実的に落ちつきそうな着地点を見つけるような物語が良いのだろうか。しかし、リアリズムの作品ではないという気がする。つまり、いかにも現実的なガッコの有様は、このまんがの中にあるとしてもそれは結果であって作者の目的ではなくて。たとえば、実際に小中高の教職員の感想が聞きたくなるわけじゃないもんな。そういう確認作業は必要なく、面白いものは面白いのだ。 > >やっぱり心理描写なのだろうか。煩悶し、悩みながら少しずつ結論を見つけ、進んでいくさまが良いのだろうか。鈴木先生の悩みが饒舌に語られるのが良いのか。ううん。 > >よくわからん。 > >でも面白いよ。 > > >

シェルはスクリプト言語

Posted by on Wednesday, 13 September, 2006
> >やっぱりツールボックスが好き >
という記事を読んで、もにょもにょとした気分になる。
> >こういうことであんまりジジイの繰り言みたいなことを言いたくもないのだが、やっぱりそういうのは find とかほかのツールの領分であって、 H.E. みたいなツールが実現するものではないのではないか、とやっぱり思ってしまう。とはいえ、そこで find だの sed だの awk だのを「覚えろ」を一蹴するのも違うという気がする。あの辺のツールが知られていないのも、そういうものだろうか。しかし grep したことがない人間というのはおれには想像もできないが……。まあそれに、 Windows 環境への気配りという視点はおれは持ってなかったので、それでは(おれはともかく他の人が)困る。 > >で、タイトルに話は行くわけだが、シェルはスクリプト言語なのである。ないならほかのスクリプト言語を使えばよろしい。ああいうのが来たときには、 Ruby とか、まあ Ruby に限る必要はないんだがようするに Windows で使えるスクリプト言語を教えればいいのではないだろうか。 > >たとえば Ruby では、 > >require 'find'
require 'pathname'
Pathname.new("/home/hoge").find do |path|
Find.prune if /^\/secret/ =~ path
puts path if /\.html$/ =~ path && path.file?
end
> >などとすれば、所望のファイル一覧を取得できる。本心を言うとワンライナーでチョチョイと書きたいが(書けないこともないだろうが)、これでも悪くないとおれは思う。 Python だと os.walk なんてのもあるし、 Perl はぜんぜん知らないのだけどきっとやり方もあるだろう。 > >こういうやり方を教え込む方がずっと良いのではないかな。 > >あ、ただしかし、さらに間に挟んで、たとえば H.E. をラップしたツールを Windows 用に作成して公開し、一般ユーザに利用させたいという局面まで想定すると、「まさか Ruby を要求させるのか」「一般ユーザにスクリプト言語を修得させるのか」とかいった、また少し別の問題もあるのかもしれない。 > >ところで、どうでもいいが、 Pathname#find はあるのに prune できないのはちょっとイカンのではないですか。かといって prune は Pathname インスタンスのメソッドであるべきかという疑問がありますが。 >

支倉凍砂『狼と香辛料』

Posted by on Saturday, 9 September, 2006
>「いわゆるファンタジーな世界観だが行商人を主人公として異色の経済ファンタジー」という風に聞いていたので、ライトノベルの文脈でコンゲームっぽい展開をやるのかなあと期待していたのだけど、そういう方向性ではなくて、そこはちょっと「あれっ?」と思った。 > >これはあれだ、どちらかというと、コンピュータRPGにもあれですね、商人が主人公のやつとかいくつもありますけれども、ああいう感じの手触りですかねー。 > >ライトノベルとしてもっと型破りな方向性を期待していたので私はじゃっかんがっかり感がありますが、逆に言えばライトノベルの文脈ではよく出来ていると思います。 > >それよりなにより、「エポック・ファンタジー」というどうにも居心地の悪くなる惹句は、続刊にもつけられてることからしてたぶん考えた編集者の人は気に入ってるんだと思うんだけど、正直どうかと思うなあ。 > > >

読み方

Posted by on Saturday, 9 September, 2006
>char は「ちゃー」派。 TeX は「てふ」派。ええっとあとは、そうだな、まぁこの辺とかですかね。 > > > >RHG読書会(の15回目とか) >

> >
> > >でさ、これ何て読むのよ >

> > >
> >いやほんと、文章だと通じてるけど面と向かって話してみると相手の発音にちょっと違和感を感じたりみたいなことはあるよね。人それぞれだしなー。 >

秋口ぎぐる『ひと夏の経験値』

Posted by on Friday, 8 September, 2006
>やっやっやばい。これはやばい。 > >駅の本屋で見かけて買って、そのまま電車のなかで読もうとしたが、とても電車のなかでは読めそうにないことを悟って帰宅してから思う存分読んだ。そして悶えた。悶えまくった。やばい。この本はやばい。 >
> >当時のおれたちはまちがった方向に全力疾走だった。それが楽しかった。タナケン、正則、阪本、そして「おれ」こと友永達也は、男子校でテーブルトークRPGを遊ぶ仲間。ある夏、美少女・奈々子が突如サークルに現れた。まったくの初心者だという彼女にひとめぼれした「おれ」は、別れまでの1か月間、最高のシナリオで彼女をもてなそうと奮闘する。そしておれたちと奈々子の最高の夏が始まる――。 > > >時代は90年代前半。美少女たちにどぎまぎしたりする、この「草食動物」どもの、なんと……なんと、愛らしいことよ。勘弁してくれ! そしてまた、基本的に作者とおれは同世代なんだと思うが、登場するゲームタイトル、作品タイトルの、時代にあっているだけでない的確さにいちいち悶える。ぐえええ。 > >おれも確かに90年代に高校生で、TRPGをやってて、男子校で、しょぼしょぼと仲間内でプレイしたり、大学生や社会人の人が営んでいるようなサークルのコンベンションに参加したりしたものだ。女の子と知合いになることだけはなかったが。 > >そのおれを、つまりそうだな、年齢にして25-29歳くらいの「おたくだった」人たちをまさに狙い撃ちにしたかのような本なのだ、これは。それ以外の一般の人にとってはどうということのない、純情だがアホな男子高校生たちの恋愛未満な青春小説でしかなくて、とくにどうということはない。けれどもおれにとっては、10ページごとに息継ぎをしないと、とうてい読み終えることができない。 >
> >「たしかに一ゾロはファンブルだよ。〈ソード・ワールド〉では大失敗になるよ。でも〈ガープス〉のルールでは大成功だろ? おれたちの人生、いつだれが〈ソード・ワールド〉だって決めたよ!?」 > > >だめだ、悶え死ぬ。 > > >

Clean に挫折する

Posted by on Thursday, 7 September, 2006
>いつものことなんですが、 Clean は嫌いです。だってインストールできないんだもの。 > >むかし、試してみようと思ったときの手持ちのプラットフォームは FreeBSD しかなく。力技でコンパイラのビルドまでは完了した記憶があり、 Linux 互換機能でどこまで動くかと試してみたのですが、さすがに IDE までは動かず挫折。 > >今回は Ubuntu の dapper/drake でしたが、なんか make がうまく行かないんですが。空白入りのパスが依存に入っていて make の挙動が狂っているもよう。ああもう無駄にパスに空白入れるの禁止! > >というわけで今回も挫折。 > >というわけで私は Clean を使ったことがありません。でもインストールしづらすぎやしませんか。前から思うんだが、無駄に敷居が高くしていないか。 >

小川一水『天涯の砦』

Posted by on Thursday, 7 September, 2006
>これは手放しで褒めたたえたい。 > >月植民が開始された昨今、その中継ポートとなった宇宙ステーション「望天」が崩壊を起こしてしまう、というストーリー、読みはじめはちょっと『復活の地』を連想して「またパニック/災害ものか」とちょっと思ったけど、そうでもなかった。いや、ジャンルもサバイバルものと少し違うんですが、それもあってかなんとなく手触りが違う感じ。 > >サバイバルものとしての特徴は、あまりにも絶望的すぎる状況(事件発端当初、主人公たちは互いに孤立して顔も見えない状態)にもあるのですが、もっと特徴的なのは登場人物。 > >どいつもこいつも破綻した人格の人間ばっかり。ろくでもない奴等です。しかもこういう話の場合、サバイバーたちの小コミュニティというか連帯感によってそういう破綻した一面が修復されて社会性を回復するという展開がよくあるパターンですが、特にそういうこともなく、むしろだんだん極限状態に追い込まれていって、そのために事態も悪化していく。まあ、そういう展開の話もありがちっていえばありがちですけれども。 > >そいで、そんな話のくせになぜか爽やかな決着がつけられるのも、筆者のある種の腕力のたまもの。 > >ただ、手放しに褒めると上に書いたわりに言うと、小川一水作品としてはほかのものの方がもっと凄いと個人的には思うけれど(たとえば「漂った男」のように、社会と個人の関係みたいなテーマは本書には特にないし)、サバイバルもののエンターテイメントとしては非常によく書けていて面白い。本年ベスト候補のひとつ。 > > >

HyperEstraier メモ

Posted by on Thursday, 7 September, 2006
>そういえば H.E. には @digest という属性があって、ドキュメントのダイジェストが格納されている。この取扱が気になったので、ちょっと調べてみた。 > >まず、 @digest は H.E. では ESTDATTRDIGEST という名前で定義されている(estraier.h)。んで、この値は estraier.c では3箇所しか参照されていない。どれも est_db_put_doc の中。 > >中を見てみると、まず put_doc しようとしているドキュメントに @digest 属性が存在するかどうかのチェックをしている(1)。で、ない場合は、 ESTDOC の本文すべてと隠しテキストをタブ文字で結合して md5 のダイジェスト値を計算し、その結果を @digest に書き戻す(2)。 > >最後に、 put_doc しようとしているドキュメントの uri を見て、現在の DB に同一 uri があるかどうかを調べている。もし現在の DB に同じ uri のドキュメントがあり、そして @digest も一致しているなら(ここがみっつめ)、属性値の変更であろうと判断して、新しいドキュメントにするのではなく、 edit_doc に処理を切り替える。というところに使われているだけのようだ。そうでなければ、内容の変更があるとして、同一 uri の古いドキュメントを削除して、通常の追加作業に合流する。 > >ということのようだ。 edit_doc は属性の編集しかしないから、本文を変更するには put_doc するしかない。つまり、ダイジェスト値と本文に不整合を起こしたければ、適当な値 @digest にあらかじめセットしておいて put_doc すればよい。 > >まあそれはあんまり意味はないけど、仮に get_doc して本文や隠しテキストに追加するなどの処理を加え、その結果をそのまんま put_doc するとしよう。すると、その変更の結果として @digest が変わるわけじゃないから、 put_doc しても実際には edit_doc だけで済まされてしまい、本文への追加はデータベースに反映されないようだ。まあ、本文に訂正もなく追加だけというドキュメントは珍しいだろうから、そうなるとドキュメントはほとんど一から作りなおしだろうし、現実には問題にはならないんだろうけど。ふむふむ。 > >いや、この @digest ってナンかに使えないかなーと思ったのと、ダイジェスト値が一致してたらドキュメントを実質的に加えないとかいった処理が行われているのかなーとちょっと思って調べたんですが、やっぱ内部用途としての運用がメインで、そんな面倒そうなことまではやってなかったですね、という感じですね。ふむ。 >

Python 雑感

Posted by on Wednesday, 6 September, 2006
>nil.to_s がいきなり “nil” になったりするようなわけのわからん言語はもう使ってられないので、これから立派な Python 使いにジョブチェンジするべく『みんなの Python』を購入し読みました。 > >というのは嘘ですが本は読みました。ほとんど飛ばし読みですが。 > >で、本を読みながら Python について学んだ雑感なのですが、 del とか int とかいった不思議な構文がどうにもすわりが悪く思えます。 Ruby にはある種のミニマリズムみたいなものがあって、「一見構文に思える構造が実はメソッド」ということがよくある。そういう設計になっているのは、ある簡単な決まり事さえ知っていればややこしいルールを覚える必要がないという意味で「楽」だし、つまり、いわゆるひとつの「驚き最小」に奉仕していると言えるわけです。ま、その辺は好きずきだろうけど、わたしは好きなのだな、と。 Python は、そういう意味でのミニマリズムは放棄している言語なので、なんとなくもにょもにょした気分を、若干感じます。 > >もうひとつ、 int って何者?という疑問があって、 > >>>> int(1)
1
>>> int
<type 'int'>
>>> type(int(1))
<type 'int'>
>>> type(int)
<type 'type'>
> >のように、引数を与えないと型情報と化すようで、たいへん奇妙。といっても、考えてみれば、たとえば、 > >if type(a) == int: print "int"
else: print "not int"
> >みたいなことをやるためにこのようになっていることは想像がつくのですが、とても気持ち悪く感じるんだけど……。 int って何者? > >ただまあこういうぐだぐだした感想はあんまり信用しない方が良くて、実際にプログラムを書いてみないと何とも言えないよな、と思うわけであります。何ぞ良い例題はないかな。 >

BrainFuck で棒グラフ(2)

Posted by on Wednesday, 6 September, 2006
>2ケタ以上に対応させた。 0 の処理がなかなか思い浮かばず苦労しました。 > >++++++++++
>>++++++[<+++++++>-]
>+[
[-]>[-]>[-]<<<,[>+>+>+<<<-]
++++++++++[>-<-]
>>>>>>++++[<++++++++>-]<[<<<->>>-]
+<<<[>>>->+<<<<[-]]>>>[<[<<<<<.>>>>>-]<<<<<<.>>>>>>>[-]]>
[-<<[>++++++++++<-]>[<+>-]>
++++++[<++++++++>-]<[<<->>-]<<[>+<-]>>>]<<<<<
]
> >数値を入力してからスペースを入れると、その数だけ * が印字されます。エンターキーで終了します。例によって、数値、スペース、エンター以外のものを入力すると狂います。 > >ちょっとコードの解説をしましょうか。メモリの n 番地を、ひとまず {n} と書くことにしましょう。どういう用途で各メモリ番地を利用しているかというと、 > > >{0}: 改行文字(出力用) > > > >{1}: '*'(出力用) > > > >{2}: 読み取りバッファ > > > >{3}: 改行文字かどうかの判定 > > > >{4}: 空白文字かどうかの判定 > > > >{5}: 数値バッファ > > > >{6}: 現在入力中の数値の保持 > > > >{7}〜{9}: テンポラリ領域 > > > > >となっています。 > >最初の2行は、出力用の文字をセットしているだけで、特に問題ないでしょう。10は下手な小細工をするより + を重ねた方が文字数が短い。 > >3行目からメインループが始まります。ちょっとした小細工がありまして、ループ開始時点でポインタは {3} に合わせらています。 > >4行目は、無用なバッファをゼロクリアしてから1文字を {2} に読み出し、 {3}、{4}、{5} にコピーしています。この時点で {2} はゼロになります。 > >5行目。 {2} に10を代入し、 {3} から 10 を引いています。改行文字の文字コードは10ですから、 {3} は「入力された文字が改行文字のとき0」になります。これは後で使います。なんで最初に書いているかというと理由はありません。 > >6-7行目で、スペースの文字判定をしています。スペースのコードは32=4×8 なので {7} と {8} を使って {7} に 32 を代入します。その分、 {4} を引けばいいのですが、 {4} がゼロのときだけ実行したいのでちょっと困ります。そこで、引き算をしてたったいま 0 になった {7} に 1 を代入し、 {4} が 0 でないときに {7} から 1 を引いて 0 にすることで、 {4} が 0 のときだけ {7} が 1 になるようにしています。またついでに、 {4} が 0 でないときに {8} を 1 にしています。 > >で、 {7} が 0 でないとき、つまり {4} が 0 のときですが、出力処理を行います。このとき {6} に数値が入っているはずなので、その数だけ * を出力し、それから改行し、そしてポインタを {7} に戻してゼロクリアしています。そして 7 行目末でポインタを {8} に移します。 > >8-9行目は数値文字が入力されたときの処理ですが、これは全体が > >数値を足す処理は2ステップに分かれています。まず8行目では {6} を10倍しています。まず {6}×10 を {7} に格納し、それをまた {6} に戻すことでこの処理を行います。9行目では、まず{7}と{8}を使って6×8=48('0'の文字コード)を作り、そのぶんだけ {5} を減らします。で、残りだけさらに {6} を足します。これで {6} = {6} * 10 + ({5} - '0') 相当な処理を行いました。ポインタは忘れずに {8} に戻します。ここで {8} はどっちみちゼロになっていますからゼロクリアしていません。 > >最後に、ポインタをふたたび {3} にセットしてループ終端。 {3} は入力された文字が改行文字のとき 0 になりますから、エンターを入力したときにループを脱出し、終了します。 > >ということでした。 >