2001-12-23(日) 3570歩 [長年日記]
■ 今日は
掃除をしたり、たまった雑誌を読んだり、料理をしたりしたので、コードは一行も書かず。
料理は鶏肉のフォカッチャ。クリスマスディナー? いやいや、天皇誕生日ですから(ちげー)。ケーキも夕べ食べちゃったしな。我が家のクリスマスはおわりだよ。宗教色ゼロだし。
■ ロボコン(3)
まだひっぱる。
『ロボコンは「ショー」だ』とおっしゃるなら、もっとショー的な楽しみ方をしてみるというのも良いのでは。例えばサッカー観戦でも、初心者はボールの行方ばかりを追いかけるが(おれか……)、通はボールを持っていない選手の動きを楽しむと言いますな。ロボコンでも、勝負のきれいさばかりでなく、もっと多面的な楽しみ方がある。
地方予選を見てみるとわかるけど、ロボコンのルールに則ってちゃんと得点できるロボットを、高専生が作るのは非常に難しい。ほとんどのロボットは動き回ることすらできない。そういう事実を踏まえてロボコンを見ると、「堅実なだけ」のことをするのがいかに大変かがわかると思う。
そうしてみると、決勝戦で詫間の操縦者がディフェンスとオフェンスの両方を互い違いに、確実にこなしているのは、とてつもない(ワールドカップ級の)スーパープレイであることがわかってくる。いっけんつまらない堅実な作戦に見えるが、実はとても高度な技術に裏打ちされた戦術なのだ。
というわけで、勝負のスナップショットだけでなく、その背景まで想像しながら見ると、あの番組はとても面白いのである。また来年まで見られないと思うと悲しいよ、おれは。
■ tDiaryプラグインTips(4) - ファイルの挿入
はんばあぐさんがソースの挿入で困っていたので、それ系のプラグインを2つ。
■ すでにファイルになっているファイルをインクルードしたい場合に使うプラグインsrcと、直接文字列として挿入したい場合に使うsrc_inline。単にファイルの内容を展開するだけでなく、HTML的に意味のある文字をエスケープしてくれる(というか、それだけ)。
def src( file ) CGI::escapeHTML( File::readlines( file ).join ) end def src_inline( str ) CGI::escapeHTML( str ) end
以下のようにして使う。
<pre> <%%=src 'plugin/src.rb'%> </pre>
<pre> <%%=src_lnline <<TEXT ここにソースを直接書きます。 src_lnlineは空改行がある時に誤動作するので、 ↑のように空白を入れる等して逃げる必要があります。 TEXT %></pre>
■ しまった、こういう助け船を出してると、Ruby人口が増えない気がする(笑)。
■ ところで、けっこうtitle_listを入れてる人が多いなぁ。みんな欲しかったのね……。でも、↑のようにソースを<pre>タグで1行が長いソースを入れる場合、tableタグでレイアウトすると、横幅がえらく広くなってしまって、すげー見づらい場合が。この辺はいろいろ工夫する必要があるかと思います(というか、だからtitle_listはデフォルトにしない予定)。
2001-12-22(土) 6210歩+700m [長年日記]
■ tDiary
スナップショット更新(1.3.1.20011221)。13月じゃないから(謎)。
げきしぶさんのパッチを適用、拡張し、月をまたいだ表示をサポートしました。つっても、たいていの人は来年になるまで影響ないと思うけど。
げきしぶパッチは前の月までしか遡ってなかったけど、いちおう@latest_limitの値まで遡るように拡張しました。試しに356日表示にしてみたら、1分以上返ってこなくて慌てたよ〜(笑)。
なお、月は越えられると思うけど、年を越えられるかどうかがいま一番の不安材料だったりする。
■ ロボコン
昨日の日記に書き忘れたけど、ロボコン高専大会の放送があった。うーん、一年で一番燃える番組かも、これ。
■ ゆうべ眠くて書けなかったロボコン続き。優勝した詫間の戦術に批判的な声を見かける(こことか。他にもあったけど忘れた)んだけど、おれは別にいいじゃん、と思う。
彼らは大会前にはメいっぱい知恵を絞って自分たちのアイデアをロボットに具現化してきたのだ。しかし機械的な問題は本番ではそれ以上どうしようもない。だから、対戦相手のデータ収集や作戦立案に頭を使うのは極めて自然である。ロボット作りも作戦立案も、どちらも非常に高度な知的作業だ。立派な「アイデア勝負」なのである。
彼らも社会に出れば、よいモノを作るだけでは売れないことがわかるだろう。よいモノに、よい宣伝やよい価格設定などが加わってはじめて売れるのだ(まぁ、よくないモノまで売れちゃったりすると凹むけどな……)。だから、詫間の優勝はモノ作りだけではない、そういう広い視野のたまものだと言える。
高専生だからといってキレイごとを言っていると、同級生が暴力沙汰を起こしただけで出場停止になったり、アウトが確実なのにヘッドスライディングするのが賛美されたり、敬遠はフェアじゃないとか言われるどっかの高校スポーツと同レベルになってしまうのではなかろうか。
あくどいと言われようと、ルールに反しない限りなんでもやる。優勝が目標ならどんどんやっていい。そのかわりロボコンには、勝負とは無関係だが最高の栄誉とされる「ロボコン大賞」が用意されているのだ。真紅の優勝旗だけが目的のアレとは違って、ちゃんとバランスが取れているではないか。
■ tDiary(2)
title_listはデフォルトには入れないで、miscの下に入れようかと思っているので、あまりまじめに対応しないかも。あくまで「プラグインでこんなこともできますよ」というサンプルってことで。まともに取り組むと、人によって「日付とタイトルだけ出したい」とか「セクションのサマリを出したい」とか言いそうでしょ(笑)。第三者による実装バリエーションを希望。
ちなみに、現title_listの表示順序を逆にするには、
@diaries.keys.sort.each do |date|
の行を
@diaries.keys.sort.reverse.each do |date|
にするだけです(試しにこの日記をそのようにしてみた)。
■ ロボコン(2)
あ、なんかツッコミで盛り上がってる。そうそう、どこで読んだか忘れてたのはうさにっきでした。そうか、あれは褒めていたのか(笑)。
#あのガンダム(Z?)、時々ポーズを変えてくれたりすると楽しいのですが:-)
実は今回、一番「すげー」と思ったのは、相手の陣地をカバーして、自分は1点入れさえすれば勝てる戦術を取ったチーム。ミニマリスト的な快感がありましたな、あれは。
■ tDiaryプラグイン紹介
きたさんの最近の日記表示を紹介しておこう。これ、配布ファイルに含めちゃおうかな(笑)。それにしてもcatch〜throwなんて、凝った構文を使いよるのぅ(←自分が使ったことないだけ)。
そうそう、reverse_eachを使おう運動ありましたねぇ(笑)。いやー、なんか自分の中で「reverse.each」がイディオム化しちゃってて、なかなか切り替えられない。年だよなぁ。
2001-12-21(金) 7391歩 [長年日記]
■ Funny Video Clips of Cats and Kittens
猫好きでブロードバンドな人は要Bookmark。たまりません。元ネタはお笑いパソコン日誌。
そういえば、うち(の隣)の茶々は最近、食って出ていくだけになってしまった。寒いんだから、ホットカーペットの上で寝ていけばいいのに。
■ tDiary
いろいろ。
■ 左のナビゲーション、読み上げブラウザに対して親切ではない、というのは知っていたけど忘れてた(笑)。というわけで、見た目は左に置きつつも、実はそうじゃないというレイアウトにしてみた。CSS参照。これならCSS非対応のブラウザでも邪魔じゃない。もっとも、禁断の「position: absolute」を使っちゃってるのがアレなんだけど。
■ zoeさんのプラグイン3個。ツッコミランキン、真月記長、日記長。なるほど、日記長はパラメタ渡しにしたわけだ。まぁ、これくらいしか策はないでしょうなぁ。
それにしても、tDiary Themesの次はtDiary Pluginsを作らないとダメかも?(笑)
■ tDiaryプラグインTips(3) - 先月分のtitle_list
先月分のtitle_listはどうすればというリクエスト。ソースに手を入れない姑息な方法として、こんなのはどうでしょ(もちろん@secureはfalse)。先月分だけしか出してないけど、元の@diariesとマージすれば2ヶ月分出るかと。
eval( <<MODIFY_CLASS, TOPLEVEL_BINDING )
class TDiaryMonth
attr_reader :diaries # ぉぃ...
end
MODIFY_CLASS
def title_list
cgi = CGI::new
now = @date ? @date.dup : Time::now
if now.month == 1 then
cgi.params['date'] = [format( '%04d12', now.year - 1 )]
else
cgi.params['date'] = [format( '%04d%02d', now.year, now.month - 1 )]
end
month = TDiaryMonth::new( cgi, '' )
result = ''
month.diaries.keys.sort.each do |date|
result << %Q[<p class="titlelist"><a href="#{@index}?date=#{date}">#{month.diaries[date].date.strftime( @date_format )}</a><br>]
month.diaries[date].each_paragraph do |paragraph|
result << %Q[#{paragraph.subtitle}<br>] if paragraph.subtitle
end
result << '</p>'
end
result
end
◆ きた [そうか,eRubyでもHere Document使えるんだ. せっせと\nで連結してた.アホ杉.]
◆ Ryuzi Kambe [はんばあぐさんがソースに困る・・・って、なんか笑えます]
◆ ただただし [ああっ、気がつかなかった〜。おかしい〜(笑)]
◆ はんばあぐ [プラグインありがとうございます。早速利用します。 「ソースに困る」、可笑しいですね(笑)。]