あー、またちょっと間が開いてしまいました。
そのあいだいったい何をやっていたかと言うと、 いま噂のアレを買ってきたあと勢いにまかせて アレとかアレを買い込んでました。 相当長いこといじってないから腕が落ちてそうだ。
今日のコミットでは Racc 1.4.4 のランタイムをインポートしました。 と思いきや実は Racc 1.4.4 よりも微妙に新しいファイルが入ってます。 これではいつまでたっても同期しないなあ。
コミットログ第三点は
* ext/racc/cparse/cparse.c (parse_main): should abort when the length of LR state stack <=1, not ==0. (含意: LR 状態スタックの長さチェックが間違ってた)
と、いう意味です。とは言え別に落ちるわけでもなく、 実害が出ることも滅多にないのでリリースはしません。
突然、Ruby で printf が書けるかなあーっと思ってみた。 いやそりゃ書けるに決まってるけどな。 どのくらい短かく書けるかなあとか、ちょっと気になったわけだ。 でもよくよく調べると仕様がめんどくさい。簡略版にしておこう。 でも適当に書き散らしていたら (途中で) 満足したので放置して、 次は Haskell に printf (sprintf) があるのか調べてみる。 するとこういうものがあった。
どうやらこいつは Template Haskell というのを使っているようだ。 ようするにあれか。マクロみたいなもんか。
GHC 6 には添付されているらしい。 うちはまだ 5.04 なので、この機会にバージョンを上げておこう。
ああ……やっぱりだめだ、スキップできるほど薄くないや。 うおー気分がのらねー
使いみちがわからない Ruby の仕様と言えばなんたってこれでしょ。
* = 1,2,3
まあたぶん直交性を重視した結果なんだろうけどね。 「a, b, = 1, 2, 3」みたいにカンマで終わるのが嫌だから 「a, b, *dummy = 1, 2, 3」とかしたい。 でも dummy なんて無駄な変数を作ってしまうのも嫌だから省略して 「a, b, * = 1, 2, 3」とできるとさらに嬉しい。 で、これができるなら「* = 1, 2, 3」もできないと直交性が低くなるだろう、 という理屈だな。(たぶん)
あと「こんなもんが書けたのかよ」つながりではこんなのもある。
a = [] [1,2,3].each do |a[1]| p a end
Ruby と tDiary を CVS HEAD に上げた。
ついでにプラグインもいろいろインストール。makelirs, output_rdf, whats_new, disp_referrer
メールで更新すると本文が化ける問題が発生。
本文が化けるよー
追記 1: uconv.so を入れるとメール経由で追加した日記が 生 JIS になってしまうようだ。これで直すべき場所が絞られてきたな。
追記 2: その後の調査により、tDiary 本体のどこかで ひっかかっているらしいことがわかった。
追記 3: 当面 tDiary 本体にだけ uconv を使わせないことにして解決した。
追記 4: それは解決したとは言わない。
追記 5: uconv を使わなくしたら突然速くなった。 もしかして to_native で一文字ずつ処理してるのが遅くなる原因か?
追記 6: ああそんなことないや。 gsub!(re) ならたいして遅くならないはずだ。 もうちょっと考えよう。
あー、そうか! 単純な話じゃん。 to_native では Uconv.u8toeuc してるのに iso-2022-jp が来るもんだからそのままスカッと通ってしまうわけだな。 tDiary の posttdiary.rb が EUC で POST するのに対し、 家の独自ブリッジは iso-2022-jp で POST するから文字コードがずれるわけだ。 これですっきりした。
原因がわかればたいしたことないな。 ESC が入ってたら iso-2022-jp 扱いにしよう。
--- tdiary/lang/ja.rb.org 2003-11-07 17:50:37.000000000 +0900 +++ tdiary/lang/ja.rb 2003-11-07 17:51:44.000000000 +0900 @@ -31,6 +31,7 @@ begin @reg_char_utf8 = /&#[0-9]+;/ def to_native( str ) + return NKF::nkf( '-Je m0', str ) if /\e/ =~ str if @reg_char_utf8 =~ str then str.gsub!( @reg_char_utf8 ) do |v| Uconv.u8toeuc( [$1.to_i].pack( "U" ) )
それよりメールブリッジが EUC で投げればいいのかな?
■ ただただし [posttdiary.rbでは、EUC化してます。が、そのパッチは入れておいた方がいいかなー]
『CPUの創りかた』を読んですっかり萌え^H^H燃えてしまったわたしは 迂闊にも TD4 を作ることを決心しました。
ちなみにわたしのハードウェア関係の力量はこんなもん。
まずは部品がないと何もできないね。 あとテスタ持ってないから買わないといけないし、 ハンダごても古くなってきたからできれば買い換えたいな。
いろいろ買いました。
電子部品 (値段は、抵抗が100本入りで 100 円。他は記載がない限り一個 50 円くらい)
IC (各 30~100 円くらい)
その他のパーツ
ツール類
買った店は、秋月、千石、ラジオデパート、ラジオ会館あたり。 あと末広町方面の小綺麗なパーツ屋。 秋葉原には慣れてるのでこのへんは楽だ。
金額は全部で 2 万ぐらいか。 部品だけなら、モノを選べば 1 万くらいで済むはず。
帰ってきてから Google したり動作確認したりしたところ、 当然というか予想通りにというか、いろいろ間違っていた。
特にリード線の間違いが痛い。 これがないと全く実装が進められない。
しかたがないのでもう一回秋葉原へ行ってきた。
電車代が高いよなー。(往復 720 円)
作り始めよう。
うーむ、何から始めたらいいんだろう? かすかな記憶を掘り出してみるに、 確か熱に強い部品から付けていくのが正しかったような気がする。 熱に強いと言えば抵抗とか、IC ソケットみたいなやつだな。 このへんからハンダ付けていくことにしよう。
む、どこに付ければいいんだこれは? p.278 の実装例の写真と p.81 の図を見た感じ、 この互い違いになってる二本のパターンが 5V と GND なんだね? んで、電源ラインの周辺に IC とかをくっつけていけばいいのか。
はたして数年ぶりのハンダ付けはうまくいくのか。 あっさりと次回に続く。
本当は完成してから書こうと思ったんですが、 なんかこのままだと作らなそうな気がしたので 日記に書いてプレッシャーを高めることにしました。
一昨日聞いたところによると高橋さんも部品を買ったそうです。 他に作ってる人はいないんですかー。
唐突だけども、例の『CPUの創りかた』で一番ウケたネタは ドモルガン律子だった。不覚にも。
今度こそハンダ付けしよう。 このままだと本当に部品を買っただけで終わるからな。
しかしアレだね (と、また唐突に話題が転換するわけだが)、 前々から思ってはいたが自宅で仕事をするのは大変だ。 いつからいつまでやればいいのか曖昧で全然けじめがつかない。 ちょっと油断すると知らないうちに 2ch 眺めてて全然書いてなかったり、 その逆に朝から晩まで書き続けて挙句に徹夜してしまって次の日は一日中寝てたりする。 これはよくない。非常によくない。免許の講習で習ったことによれば、 いくらあせって追い抜きをしても到達時間はほとんど変わらないのだ。 もうちょっと身近な例を挙げるならば、ボトルネックを解消しない限り プログラムの速度はちっとも上がらないのだ (それは身近な例なのか?)。 ようするに、毎日平均的にたんたんと書くほうが全体的な執筆速度は上がるのである。
言い訳はこんなところにしておいて本音を言うと、 こんな朝っぱらから原稿書いてられるかよ! かよ! よ! (エコー)
作成記なのに全然作ってないじゃんとか言ってはいけない。 それがたとえ事実でも世界は欺瞞と矛盾に満ちているんだ。
法則 1。 このようなわけのわからないノリが続くときは常に徹夜明けである。
∴ 今日も徹夜明けである。
とりあえず電源 LED でも付けてみるかと思ったらいきなりはまった。
新しいハンダごてがどうもうまくない。 まともにハンダが溶けないし基板にハンダが乗らない。 結局古いハンダごてを使うことにした。
次は電源ソケットがなんかおかしい。 どうやら接触不良みたいだ。
ソケットはいずれ買い直すとして、 今日のところは適当に DIP スイッチでも付けておくか。
しかしこれは……思ったより遥かに時間がかかるな。
http://www.zdnet.co.jp/enterprise/0311/11/epc06.html
……もういい。 hp にはひとかけらも期待してはいけないということが改めてよくわかった。
http://www.jp.sonystyle.com/Style-a/Product/X505/
うおー、かっこいぃ……。これは欲しい! この匡体だけでスペックとかどうでもよくなるな。 たとえ CPU が MIPS だったりビデオチップが グラフィックシンセサイザーだったりしようと問題なし!
というかそれはむしろイイかもしんない。
[ruby-talk:85001] 見て気付いたけど、 RAA にアクセスするライブラリは是非とも aa.rb にすべきだね!
ruby -raa -e download -- racc
む、そうか! すると、
ruby -refe ruby -racc ruby -ripper
というのもありうるのだな。いやそれより
ruby -ruby ruby -rb ruby -rd ruby -rdoc -e tohtml -- net/http
あたりをまず考えるべきか。これは盲点だった。 ロリとかルリとか言ってる場合じゃない。
■ ささだ [ごめんなさい。]
賞味期限切れ食物で生活しているというイメージを払拭するため、 しばらくのあいだ、食ったものをすべて書いていこうと思います!
今日の朝食。偶然がかさなって非常に豪華。
……なんか、恒常的に賞味期限を切らしているということが 証明されるだけのような気がしてきました。
あ、あと
風邪ひいた。しくしく……。
ところでアリナミンで思い出しましたが、 オロナミン C とリポビタン D とアリナミン A をよく間違えます。 いや、わかってるねんで? ファイト一発がオロナミンC。
(画像はあとでまとめてアップします)
ようやく回路っぽいものにとりかかります。 まずは川路さんから教えてもらったページにあったとおり クロック回路とリセット回路から。
そうか、早くも IC が登場するんだな。 74HC14 (シュミットトリガ・インバータ 6 個入り) を使います。 これの IC ソケットを付けてと。
うあ! 付ける場所間違った! まあいいや、ささいなことだ無視しよう。
IC の電源をつなぐ。んー、足の内側にある電源パターンに直結でいいのかな? こういう短い部分はどうやってつなげばいいんだろう。 とりあえずハンダを大量に盛ってつなげてみた…… が、ノリが悪くてすごい巨大なダマができた。 どうもこのハンダごては使いにくいな。
だまだま
ところでリード線ですが、AWG 22 の単芯リード線をみつけられなかったので 多芯のリード線を使ってます。皮むきはカッターで。 ワイヤーストリッパーなんて高いもん持ってないしー。
次は手動クロックをつないでいこうかな。抵抗をつなぐ……。 つなぐ……。つなぐ……。コンデンサつなぐ……。IC につなぐ……。 パスコン付けて 5V と GND につないで終わりと。
そんなに簡単なわけないじゃん。 うああ、ピンセットがないのは致命傷だー! 配線が難しいよ! 鬼のように難しいよ!
これから作る人はぜひとも単芯のリード線を用意してください。 あとピンセット必須。 なんか「手先が器用選手権」の修行をしてるような気分になってきますた。
ハンダと「ぷよ」は挙動が似ている。
ハンダ付け。テスタで導通確認。 ハンダ付け。テスタで導通確認。 ハンダ付け。テスタで導通確認。
あ、そうか。 部品の足を切らずに折り曲げてそのまま 5V まで持っていけば楽かもな。
どう見ても実装例で使ってるリード線は AWG22 より細くないか? いや違うな。おれの買ったリード線の被覆が無駄に太いんだ。
えっと、やっぱり写真の配置はかなり合理的なのでした。 IC の場所を間違えると非常に配線がやりづらくなります。 何度も確認しましょう。
知らないあいだに 5V と GND がつながっとるー。 ううう、どこがつながってるんだ……。
と思ったらこないだつないだ LED 回路が犯人だった。 どうりでテスタの+-変えたら反応しないわけだよ! 自分で自分の首をしめたか……。
そういえば電源パターンの強化をしてなかったな (p.81 参照)。 上のほうだけやっておこう。
3000 行の main() で goto を使いまくる初心者プログラマの気分。
あーあーあー早くも空中スパゲッティ配線。 もう見てらんない。
裏
表
ようやく手動クロック完了。先は長い。
不幸な事故により今日は寝てすごしてしまったので 昨日今日とほとんど食べてない。腹へった……。
昨日の昼食: なし
昨日の夕食: 調理パン 2 個 (期限内)
今日の朝食: なし
今日の昼食: なし
今日の夕食: 調理パン 1 個 (期限内)
おまけ: アリナミンA: とっくに有効期限切れ
文字列をインデントしようと思ってこういうのを書いた。
def indent(str, n, tabstop = 8) str.map {|line| indented = (' ' * n) + untabify(line, tabstop) if tabstop then tabify(indented, tabstop) else indented end }.join('') end
んでこういうテストを書いた。
def test_indent assert_equal ' ', indent('', 2) end
そしたら結果が "" になって失敗した。 "".to_a は [] になるんだね……。
ついでに vi と Emacs の挙動を調べたところ、 実は両方とも Ruby と同じ結果 (indent("") == "") になるということがわかった。 びっくりだ。
一定の容量の純水に溶かすことができる塩分の限界量のことは 何て言うんだったかなあ……
と、味噌汁に味噌を溶かしつつ考えたんですが、 「飽和水蒸気量」という単語が浮かんできて離れなくなってしまいました。
その次は「浸透圧」という単語が浮かんできて離れなくなりました。 少しだけ正解に近付いたような気がしなくもありません。
従って今日の朝ごはんは (も) 味噌汁です。
(追記) ぐぐった感じだと「溶解平衡」が一番近いか? でも高校化学って書いてあったけど、やった覚えがないぞ。
納豆で思い出しましたが、子供のころに考案した メニューで「のしらっとう」というのがあります。
「の」り + 「しら」す + な「っとう」 = のしらっとう
メニューっていうか、御飯にのりとしらすと納豆をのっけるだけです。 ちなみに乗せるときは上から「のり・しらす・なっとう」になるように 乗せなければいけません。 間違えると「しらのっとう」や「っとうのしら」のようなパチモンになります。
おいしいので一回やってみてね。
なお、これに生卵を追加すると「のしらっとうたまご」になります。 これもうまいです。ちなみにこれも順番に意味があります (The order does matter.)。
やまださんの日記で「パク森」という単語を見て、 どこかで見たような……と思ったら、 さっき食べたレトルトカレーも「パク森」だった。
レトルトカレーなので今朝は賞味期限切れなし。
とか言われて素直に信じた人は甘い。 福神漬が賞味期限切れてた。
スパゲティ。乾物ゆえ賞味期限内。
アクセシビリティが微妙に低い表現で言うと、 このページの右上のほうに grep 窓を付けてみた。 検索窓はよく見るが grep 窓はそうそうあるまい。
http://www.rubyist.net/~matz/slides/rc2003/
おっ、Rite についてずいぶん詳しく出てますね。 ここまで整理されてるのは初めて見るなあ。
オプショナルな静的型付けっ?! いや、静的とは書いてないな。実行時チェック?
む、丸括弧を文に使うのはあきらめたんですね。 この仕様は意外と混乱の原因になってたし、いいかも。
新しい Hash リテラルなんて作るんだ。 キーワード引数導入の布石だろうな。
GC は 1bit reference count + mark&sweep か。へー。
でも秘かに一番驚いたのは定数の
だなあ。だって 1 level ってことは、
module A module B module C module D p A # エラー end end end end
ということでしょ。 モジュールを気軽にネストしてると痛いめに合いそうだな。 もっとも個人的にはこっちのが嬉しい。
他の項目は多かれ少なかれどこかで聞いたことがあるな。
あ、昨日のは違うな。こうでなくてはだめだ。
module A module B module C module D p B # エラー end end end end
トップレベルの定数は別の規則で見えるもんな。
cp a a がエラーにならないぞって言われたので直してチェックインした。 ruby-talk のパッチのように expand_path だけだとシンボリックリンクが はさまったときに同じファイルとわからないことがあったので、 readlink も入れた。
あれ? シンボリックリンクって何段追えばいいんだっけ。 えーと、
~/tmp/symlink % uname -srm Linux 2.4.22 i686 ~/tmp/symlink % echo OK > 0 ~/tmp/symlink % prev=0 ~/tmp/symlink % for i in {1..64}; do for> ln -s $prev $i; prev=$i; cat $i > /dev/null for> done cat: 6: Too many levels of symbolic links cat: 7: Too many levels of symbolic links
うあ、こんなに浅いのか。 すると fileutils の 128 は大きすぎだな。 16 もあれば十分か。
いやその前に Solaris も試そう。
aamine@ultra30 % uname -srm SunOS 5.9 sun4u aamine@ultra30 % echo OK > 0 aamine@ultra30 % prev=0 aamine@ultra30 % for i in {1..64};do for> ln -s $prev $i; prev=$i; cat $i > /dev/null for> done cat: cannot open 21 cat: cannot open 22
Solaris 9 は 20 か。
もしかしてユーザレベルで設定できたりしないだろうな。 とりあえず Linux の /proc にはそれっぽいのはないね。
NetBSD はどうだろう。
aamine@asv800 % uname -srm NetBSD 1.6.1 alpha aamine@asv800 % echo OK > 0 aamine@asv800 % prev=0 aamine@asv800 % for i in {1..64}; do for> ln -s $prev $i; prev=$i; cat $i > /dev/null for> done cat: 33: Too many levels of symbolic links cat: 34: Too many levels of symbolic links
NetBSD は 32。どんどん上限がのびていくー。
うーむ、それでは Ruby ではいくつくらい追えば十分だろう。 適当に 64 くらいでいい?
いや最後に Cygwin もやってみるか。
~/tmp/symlink % uname -srm CYGWIN_NT-5.0 1.3.22 (0.78/3/2) i686 ~/tmp/symlink % echo OK > 0 ~/tmp/symlink % prev=0 ~/tmp/symlink % for i in {1..64}; do for> ln -s $prev $i; prev=$i; cat $i > /dev/null for> done cat: 11: Too many symbolic links cat: 12: Too many symbolic links
Cygwin は 10 と。もしかしてとんでもない値に なってるんじゃないかと思ったが意外と常識的だった。
結論としては 64 ってことで。
いや、こんなのがあったんで、 動的に変わる可能性もあるんじゃないでしょうか。
http://www.gnu.org/manual/glibc-2.2.5/html_node/Symbolic-Links.html
int MAXSYMLINKS Macro The macro MAXSYMLINKS specifies how many symlinks some function will follow before returning ELOOP. Not all functions behave the same and this value is not the same a that returned for _SC_SYMLOOP by sysconf. In fact, the sysconf result can indicate that there is no fixed limit although MAXSYMLINKS exists and has a finite value.
いずれにしても、akr さんのおっしゃるように inode を見るほうがいいみたいですね。 st_ino がポータルなのかどうかでひっかかってたんですが、 Ruby の file.c を見る限り特に限定はないし、 少なくとも Ruby の上においては inode は得られると仮定していいんですね。
そういうわけで、inode を見ることにします。
あああ! i-mode と i-node は似てる!
「もっとがんばってもらわないと」とか言われても、 どっちにがんばればいいものやら。
結局シンボリックリンクを追うのは stat(2) に任せることにしたので段数を指定する必要はなくなりました。 が、そのかわりに Windows でドツボにはまると。
ruby-dev では Tietew さんの試験パッチが出てますが、 せっかくの機会なので Windows API を使う練習をしてみました。
// fileid.c -- print file ID (works only with NTFS) // Usage: ./fileid.exe filename #include <windows.h> #include <stdio.h> int main(int argc, char **argv) { HANDLE f; BY_HANDLE_FILE_INFORMATION info; BOOL ok; if (argc < 2) { puts("too few argc"); exit(1); } f = CreateFile(argv[1], 0, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (f == INVALID_HANDLE_VALUE) { puts("CreateFile failed"); exit(1); } ok = GetFileInformationByHandle(f, &info); if (!ok) { puts("GetFileInformation failed"); CloseHandle(f); exit(1); } printf("%08x %08x\n", info.nFileIndexHigh, info.nFileIndexLow); CloseHandle(f); exit(0); }
stdio 使っていいのかな。 ま、動いてるみたいだから今回はこれでいいや。
『バカが征く』から。
CVS を組み込むところまではいきませんけど、 CVS や RCS を外部コマンドとして使って バージョン管理機能を実装した Wiki ならけっこうたくさんありますよね。 実はついこないだ自分でも調べたとこなんですけど、 AsWiki は RCS が使えてウェブインターフェイスもあります。 あと www.ruby-lang.org の RWiki は裏に CVS がいるはず。
『WikiWay』の 9 章にも、衝突回避やバックアップのために バージョン管理システムを使うのがよい、という話がありますし、 けっこう Wiki とバージョン管理システムは関係が深いもの なのではないでしょうか。
おっと、Hiki はすっかり見落としてました。 迂闊です。CVS が使えるのはいいですねえ。
ただ、Hiki は家のサーバで動かしたらすんごい遅かったのが気になります。 Wiki に関してはリファラとか記録してくれなくても気にならないし、 どうせテーマもそのまま使うことはないだろうから tDiary との テーマ互換性にはあまり魅かれません。
そもそも、tDiary のテーマってどれも格好いいんですけど、 この日記みたいに突然コードや文章が大量に出現する場合には合わないと思うですよ。 この日記で CSS を自分で書いてるのもそういう理由からです。 んで Wiki であれば分量の多いページも増えると思うので、 tDiary のテーマが使えても個人的にはメリットに感じられないわけです。
まあしかし、そのあたりは実は些細な問題です。 速度の問題はサーバを速くすればいいだけだし、 簡単とかカッコいいことのほうが重要に決まってます。 いまのところ Hiki に感じる最大の問題点はと言うと、
名前が嫌。
(-_-) (∩∩) ← 「Hiki」って名前を聞くといつもこれを思い出すなあ
しまった! 米を水につけたまま一晩放置してしまった! これを炊くとどうなるんだろう。
http://freedesktop.org/Standards/clipboards-spec/clipboards.txt
X のクリップボードの標準てのがずっと謎だったんだけど、 ruby-talk を読んでたらいい URL が出てた。 以下要約。
最後の PRIMARY と CLIPBOARD の違いは初めて知った。
ClipShare や xclipstr は明示的なコピーと考えられるから、 CLIPBOARD セレクションを使うべきなのかな。 現実的には両方提供するのが一番か。
repository は -tory。 registry は -try。
■ ただただし [HikiもCVSやsubversionが使えますよ]
■ ょゎ [どこで見たか忘れましたが、由来はまさにそれらしいです<Hiki]
■
(う) [お米を一晩水につけるのは、水温がじゅうぶん低ければ特に問題ありませんよ。
水温が高かったり、水につける時間がかなり長かったりすると、米から糠が溶け出して、炊き上がりったときにご飯が糠臭くなることもあります。]
■
Yuya [私も一度やったことがあります。<水につけて一晩放置
その時はちゃんと炊けましたけど。]
■ あおき [え? アレなんですか?!>Hiki]
■
あおき [米は無事においしく炊けましたー。
ちょっと糠っぽかったけど。]
■
shiro [へぇーへぇーへぇー>Hikiの名前の由来。
ハワイ語でhikiは「できる、可能である」とか、「到着する、到達する」とかの意味があるので、もしかするとそっちかなとか思ってました。]
■ あおき [むしろハワイ語の Hiki の意味に 20 へぇー]
■
smbd [ハワイ語の"Hiki"の意味に
(;・∀・)つ〃∩ ヘェーヘェーヘェーヘェーヘェーヘェーヘェーヘェーヘェーヘェー]
■ ささだ [Suntory はとりいさん。]
Ripperの現状と今後の展開について。
まず、現在の Ripper のインターフェイスが不完全であることは宣言しておきたい。 ハンドラの名前が on__xxxx とわざわざ下線二つになっているのは、 Ruby レベルでラッパーをかぶせてより使いやすいイベント on_xxxx を定義しようと思っているからである。
例えば on__nl と on__ignored_nl というイベントがある。 nl のほうは文末として使われる LF で発生し、 ignored_nl は単に無視される LF で発生する。 でもたぶん「LF 全部」という取りかたはしたくなるだろうから、 on__nl と on__ignored_nl の両方で on_nl を発生して そういう要求にも応えられるようにする。 同時に on_eos_nl と on_ignored_nl も定義して、 情報が失われないようにする。
もう一つ実装したいのが高レベルインターフェイス。 「この if に対応する end まで」とか「構文木作成」とかの、 超お手軽メソッドを用意したい。 これは別クラス (Ruby::Parser?) で提供する予定。
※ LF で思い出したが、コメントの後にある LF が取れてなかったような記憶がある。直さなきゃ。
こないだから何気なく書いているこの題名ですが、 stat のあとに ctime を見るか mtime を見るかで議論は 堂々巡りの様相を呈してきています。
もちろん口からでまかせです。
今日の昼飯。
今日の夕飯。
なんて変わりばえしないんだっ!
『今日の料理』でも買ってくるべきだろうか?
寒いっすね。
こういう季節はパソコンを暖房代わりにするに限ります。 Pentium 4 は熱まみれなので冬は助かります。
……あれ? あんまり暖かくならない。
しかたがないので AlphaServer 800 も動かしました。 ついでに Ruby もコンパイルしとこう。おお、これは暖かいな!
結論: 冬は Alpha に限る。
これまでクラスの判定が必要なときは Class#=== を使ってきたが、 Object#is_a? に乗り換えることにした。 dRuby とかで幸せになれそうな気がしたからだ。
だが、気がしただけで DRbObject#is_a?(c) は転送されないのであった。 あああ、DelegateClass も is_a? はフォワードしないのか……。 だめだ、クラスの判定はダメだ……。
もういい! どっちでも同じなら Class#=== を使うよ!
WikiWay を読んでいたら QuickiWiki のコードを実際に見てみたくなった。 以下のところからたどればよさそうだ。
結城さんとこの Wiki の QuickiWiki ページ: http://www.hyuki.com/yukiwiki/wiki.cgi?QuickiWiki
で、見た。
なんで脈絡もなくインデントが 1 になったり 8 にしてみたり 4 になったりするんですか? 閉じブレースの位置くらい統一しろと。
いろいろな意味で凄いコードだ。 HTML 断片をヒアドキュメントでソースコードに 埋め込みまくりなのは、ある意味潔い。 いわゆる日本のわたしとしてはちょっとためらうやりかただが、 これはこれでよいものだ。
うーんと、
open(T, "template.html") or die "template.html: $!"; undef $/; $_ = <T>; close(T); s/\$(\w+)/defined($par{$1}) ? $par{$1} : ''/geo; print; $/ = "\n";
こういうことか。
params = {'title' => 'Search Result', ....} print File.read('template.html').gsub(/\$(\w+)/) { params[$1] || '' }
この調子で全部書き直したらめっちゃ短くなりそうだな。
そういえば『PerlユーザーのためのRuby入門』でまさにこれをやっていたはずだ。 変更後のソースコードはどこかに落ちてないものだろうか。
~ % cat succ2ch.rb require 'jcode' class String def succ2ch prefix = ['','','','','','','じゃ','それじゃ','じゃあ'] prefix[rand(prefix.length)] + gsub(/[\d0-9]+/) {|s| s.succ } end end puts '2!'.succ2ch puts '>>102 典型的なバカ'.succ2ch puts '5取ったら脱ぎます'.succ2ch ~ % ruby -Ke succ2ch.rb じゃ3! >>103 典型的なバカ それじゃ6取ったら脱ぎます
net/http の ToDo がたまりまくり。 1.9 でやろうかと思ってたら 1.9 がなかなか始まらなくて泣きを見た。 とりあえずここにメモっとく。
今日の深夜に突然 「Wikiのリンク構造が絵で見られたら面白いなあーっ」 と思いついた。当然そんなことはみんな考えてるらしく、 「Wiki GraphViz visualize」で Google したら、出るわ出るわ。 ヒットしまくってるじゃん。
これはもうちょっと別なことを考えないとだめだな。 最新の RWiki だと PageRank が計算できたりするけど、 それを考慮に入れて重み付けしてみるとか?
特定のページを指定するとそれを中心に図示してくれる……。 自分の名前のページをピックアップできると便利かも。 はてなの「おとなり日記」とちょっと似てるな。
そうか、Referer はサイトを越えた ReverseLink なんだな。 そう考えると Referer は重要か。 「Wiki で Referer はいらないし」ってのは撤回しよう。
うむ、ということは、意図的に ReverseLink の扱いと似せてみたらいいかもしれない。 例えば、(tDiary の「34 | 21 | 5 | 6 | 1 | 1」のような表示ではなく) ページのタイトルと更新時刻を出すってのはどうだろう。 あるいは最初/最後に Referer が付いた時刻でもいいな。 それで時刻順にソートすればいい。
グラコロってそんなにいいものなのか。 明日食べてみよう。
■ arton [あれー更新してたんだ。Linkavailableだと10/22に食中毒で倒れたことになってるけど。って言うか他のアンテナでは見えてるんですね。]
■ あおき [22 日に日記のURLを (ホスト内で) 移動したんですよ。
それで追えなくなってるみたいです。]