Ruby言語やLinuxのネタが多いです。
March 01, 2002 [おもひで]
■ [Kernel] Kernel-2.4.18
Ruby/GTKのDrag and Dropの実装が一段落したので、カーネルを2.4.18にバージョンアップしてみた。
Character DevicesのところでDRMのドライバをXFree86-4.0用か4.1用かのどちらかを選ぶようになっている。
オイラのX環境はXFree86-4.0ベースだったので、ついでにKondaraのサイトからAsumi(2.1)のXFree86-4.1.0のバイナリをゲットしてきて先にアップグレード。依存関係やら何やらでglibcだなんだといろいろアップグレード。いっそのこと全般的にAsumiに乗り換えちゃっても良かったな、こりゃ。
カーネルのコンパイルそのものは至って順調。すばらしいね。
■ CLIE(Palm OS 4.1)のSyncはカーネルをバージョンアップしただけではダメみたいだ....。誰かPalm OS 4.1でSyncする方法教えてくれ〜。
March 09, 2002 [おもひで]
March 10, 2002 [おもひで]
■ [Misc] Linuxビボ〜ろく
なんか、今日(昨日?)s5.xrea.comのマシンが変わったらしいんだけど、それからどうもtDiaryの調子がおかしくなってしまった。
アクセス権が無い云々のエラーメッセージが出るようになって登録できたりできなかったり。
昨日も同じ内容が2回登録されてたし。いったい何なんだろう。
Internal Server Error. 考えられる原因 パーミッションが間違っている。 CGI自体に記述ミスがある。 .htaccessに誤った記述がある。 アップロードモード(アスキー・バイナリ)が間違っている。が出る。これぢゃ何が悪いのかよくわからん...。
March 11, 2002 [おもひで]
■ [Misc] Linuxビボ〜ろく
まだダメだ。うーむ。いっそのことtDiary-1.3.4に移行しちゃおうかなぁ。でも、それで問題が解決できなかったらホントに何が悪いのかわかんなくなっちゃうよなぁ。むーん。
■ む?今気づいたんだが、s5.xrea.comのRubyのバージョンが1.6.7に上がってるな(前は1.6.6だったような...)。なんか関係あるのか?
■ とか言ってるうちに、結局tDiaryをバージョンアップしてみたらうまく行ってしまった。ラッキー(これで良いのか?技術者として(^^;))。
■ おまけにCSSもちょこちょこいじってみた。
March 12, 2002 [おもひで]
■ [Linux] GNU GetText
gettext-0.11のソースをダウンロードして読んでみる。うーむ、結構いろいろやってるなぁ。一番Ruby GetText Packageにとって痛いのが、setlocale()まわりだよな。Win32への対応はなんと自前でWin32のAPIからja_JPみたいな文字列を取得するテーブルを持ってる。つーか、setlocale()自体に対応できてないからまずいな。iconv使ってるところを見ると内部で変換もしてるのか....。
■ これ全部実装するのめんどいなぁ。まぁ、もともと完全互換を目指そうとは思ってはいないのだが、いっそのこと、yashiさんのGNU GetTextのラッパベースに改造しなおそうかなぁ。pure rubyってのが良いのだけどな...。
March 13, 2002 Ruby-GNOME 0.27 is out! [おもひで]
■ 今回は0.26からさらに機能が拡張されています。
- Gtk/Gdk
- Drag and Drop
- Gtk::Socket, Gtk::Plug
- Gdk::Cursor
- Gtk::AccelLabel
- Drag and Drop
- panel-applet
- libglade
■ 以前から、panel-applet, libgladeは在ったのですが、今回からはRuby-GNOMEパッケージ内に含まれるようになりました。
お試しアレ!
March 14, 2002 つまりバランス感覚が重要ってことなのね(ぴぴーぴぴ) [おもひで]
■ [Ruby] Ruby-GNOMEのGtk::ItemFactoryにバグ
Ruby-GNOMEのGtk::ItemFactoryにバグがあった。どうやらコードの整理をしていたときに余計なところまで直しちゃったからみたい。
--- ../../../ruby-gnome-all-0.27/gtk/src/rbgtkitemfactory.c Sun Mar 3 07:13:43 2002
+++ rbgtkitemfactory.c Thu Mar 14 23:44:11 2002
@@ -63,8 +63,9 @@
}
static void
-item_exec_callback_wrap(p_item, iter)
+item_exec_callback_wrap(p_item, ifact, iter)
GtkWidget *p_item;
+ VALUE ifact;
VALUE iter;
{
VALUE item;
これはちょっと重大なバグだよな....。RuWeexでも使ってるし...。
■ [Linux] GTK-2.0とGTK-1.2
GTK-2.0と共存できるんですか。 情報ありがとうございます。今度、ヒマを見て試してみます。■ ちなみに、Ruby-GNOMEですが、そろそろGTK-2.0のブランチを作るみたいです。
Neilが言うには、GTK-2.0にするタイミングで、結構、メソッドとか定数とかの配置とかを見直したいみたいです。
どのように後方互換性を持たせるかはわかりませんが....。常に難しい問題ですよね....。
#ちなみに、2.0でコンパイルできたらパッチはNeilに送っていただけるのですか〜?(期待期待(^^;))
■ [Misc]へんなコード
小澤さんのページより。 そういえば、昔いた会社で、「関数の出口は必ず1カ所でなくてはいけない」と先輩に言われて面食らったことがある。 結構、その部署ではメジャーなやり方だったみたいなんで良いところはあるのかもしれんが、オレはなじめなかったな。■ で、そういう発想だと、小澤さんの追記2の最初のコードみたいなのが良しとされて、2番目のコードはreturnが複数箇所にあって出口が複数在るからNGってことになってしまう。
int ret = TRUE;
if ( ! foo()) {
displayErrorDialog("fooError");
ret = FALSE;
goto EXIT;
}
:
if ( ! bar()) {
displayErrorDialog("barError");
ret = FALSE;
goto EXIT;
}
:
:
EXIT:
(後処理)
return ret;
■ 理屈としては、後処理の部分をまとめて書けるということだったように記憶してるが、全てこう書けというのでどうしようかと思った。後処理が必要ないときもこれで書く。うーむ。
まぁ、その時は、どっちが良いかなんつー判断はできなかったから、結局従ったけどね〜。
int hoge(int inWidth, int inHeight){
}
int hoge(int intType, String strUser){
}
■ よく使う型だったらまだ良いんだけど、Javaとかだとすぐ破綻して、結局、「....以外は、objを先頭につけるように」ということで、objHogeとかしょーもない変数名を大量に作ってるプロジェクトもあったなぁ。
#そういや、オレ自身、ASP(VBScript)でこんな感じのルールを使ってた記憶があるな....。
■ バランス感覚がみょーに悪い人もいた。というかgoto文を推奨した人と同じ人なんだが。
数年後、Javaをやるのでデザインパターンを勉強したというのは良いのだが、とにかく何でもかんでも型(格好良く言えばフレームワーク)にはめたがる。んでもって、それで目的を達することができない場合は、意地でも型にはめるために、ソケットを使ったり、スレッド使ったり、ファイル作ったりと、ホントにそれ動くんかい?みたいなコードを平気で書こうとする。当てはめる対象が違ってるっつーことに気がついていない。しかもその方法を後輩に押しつける。ま、いいんだけどさ。
■ なんかいろいろ思い出してきたな。すっげー汚いコードを書いてる先輩(といっても別の会社の人だったが)に、ちょっと指摘したときの回答が笑った。
「コーディングは人によって趣味が変わるからね〜」
それ以前の問題なんです。だって相変わらずcore吐くじゃないですか。lintしたらWarning一杯。っつーかフツーのコンパイラですらWarningがでてるっちゅーの。
■ なんか調子が出てきたぞ。他にも無かったかなぁ。
そういや、C言語の流儀をJavaに持ち込む人が多かった。特に変数の宣言を必ずメソッドの宣言の直下でやらないとダメという人。こんな感じ。
int hoge(){
int cnt = 0;
:
:
for (cnt = 0; cnt < 10; cnt++){
}
}
その人に言わせると以下のようなコードは悪とされる。
int hoge(){
:
:
for (int cnt = 0; cnt < 10; cnt++){
}
}
■ 変数はなるべく狭い範囲で使った方がデバッグとかで間違いがないのは明らかだと思うのだが....。
ちなみに、上記のようなやり方をしてしまうと、使わなくなったローカル変数の宣言を残してしまう場合もある。まぁ、コンパイラでチェックできるかもしれないけど。
■ 案外、先輩が言ったことを真に受けて、何年も、言語が変わっても、かたくなに守る人っているんだよなぁ。そう言う人に限って、「これは○○さんが言ったんだから守らなきゃいけない」って平気でのたまったりするんだよな。もうちょっと自分自身の考えを持って欲しいと思ったよ、ホント。背景を考えずにそういうことを鵜呑みにする人って、教える方もイヤだよな。後で「むとうさんがそう言ったから....」と言われたらたまらん。
■ ま、そんなわけで、オレが後輩に何か教えるときは
「オレが言うことの半分はウソで、残りの半分は将来使えなくなるだろうから気をつけるように。それからバランス感覚は大事。」
って言うようにしてたんだよね。実際、意図せずに美しくないコードを書くときもあったし(っていうかそれがほとんどか、今思えば(^^;))、新しい技術がどんどん出てきてることを考えると、結構、当たってると思うんよな。プログラミングに対する取り組みの姿勢とかそういうこと以外は時と共に変わっていっちゃうもんね。
#あ、もちろん、この文章だって、半分はウソで....(以下略)
March 15, 2002 久しぶりに10時間以上ぶっ続けで打ち合わせした [おもひで]
■ [Misc] 中途半端にテクニックがある人でみょーな自信を持っちゃってる人
って一番扱いづらいですよね。そう言う人に限って人に教える(自分の考えを押しつける)のが好きだったりするので困りものです。
■ でも、そう言う人を見るたびに、自分もそうなっていないか自分の中で確認してました。自分自身、中途半端にみょーな自信持っちゃっていないかどうか。そういう意味では必要な人だったのかも。
■ にしても、小澤さんが最近見た変な人って、プロフィール・やってること共に、私の前の会社の某氏(例のバランス感覚の悪い人)に似てるんですがまさか同一人物ってことはないっすよね.....(^^;)。
■ [Ruby] Ruby/GTK vs GTK-2.0
patch公開ありがとうございます。ひとまずGTK-2.0をマシンに入れてみました。でも、コンパイルの時に$GTK_CONFIG="pkg-config gtk+-x11-2.0" ruby extconf.rb && make extconf.rb:38: can't found gdkcursors.h or gdkkeysyms.h (RuntimeError)ってなっちゃうんですよね。make cleanしたからかな。とりあえず事象だけご報告(?)ということで(^^;)。
March 16, 2002 [おもひで]
■ [Misc] 中途半端にテクニックがある人(続き)
肝心なこと書くの忘れてた。もう一つ重要なことが。ある人(例えば後輩)がやろうとしていることが、今までの自分のやり方と違うからといって、その人のことを「中途半端にテクニックがあるやつ」と片づけてしまう人。こういう人も相当やばいよね。
■ なんか全部自分自身の自戒を並べた感じだな〜。注意しよう。
■ tDiaryは内部的にHTMLではないバイナリでデータを保存しているので直接Namazuでインデックスを作ることができない。そこで、以下のような手順を取る。
- tDiaryに入っているmisc/squeeze.rbを使って、一時的に1日ごとのHTMLを抽出する(ファイル名はYYYYMMDD)
- それをベースにmknmzでインデックスを作る
ただ、ここで生成したHTMLは実際の検索結果のHTMLというわけではない。あくまでも検索結果はtDiaryが毎回生成するHTMLにしたいからね。 - そこで、misc/squeeze.rbで生成されるファイル名がYYYYMMDDであることと、NamazuのReplace機能を使って、
/home/mutoh/homepage/hoge/text/YYYYMMDD → http://ponx.s5.xrea.com/bibo/?diary=YYYYMMDD
になるように設定することでうまくtDiaryが毎回生成するHTMLを参照できるようにするわけだ
■ 自分が自由にできるサーバであれば、misc/squeeze.rbを実行してその後mknmzを実行するようなスクリプトを書いてcronで動かすようにしておけば全自動でいけるんだが、xreaではそうは行かない。
■ 詳しくは自己満足にっきにも書かれているのでそちらを読んで欲しいのが、xrea側はプログラムの実行がかなり制限されている(これはセキュリティ上はやむを得ないと思うんだけど...)ので、その上でmisc/squeeze.rbを実行することは(たぶん)できない。そんなわけで、morikenさんの場合は
- 一度、xrea上のデータをftpでローカルなtDiary環境に持ってくる
- そこでリモートとほぼ同じ環境のtDiaryのmisc/squeeze.rbを実行する
- 生成されたHTMLファイルをftpでxrea上にputする
- xrea上でmknmzを実行する
という手順を取ってる。この手順だとtDiaryの環境をローカルにも作らないといけないのがとっても面倒くさい。
■ これではあまりに大変なので、misc/squeeze.rbを改造してCGIとして動くようにしてみた。これならば
- ブラウザからsqueeze.rbを呼び出す
- xrea上でmknmzを実行する
という感じになるのでだいぶ楽になる。ローカルに環境を作らなくてもいいしね。
■ 本当はmknmzもCGIから実行したいのだがどうもうまくいかない。もしかしたらセキュリティ上の問題かな。XREAのエラー画面はよくわからないのでとってもデバッグがしづらい。
それができたら、ホントはsqueeze.rb自体を自動起動したいんだけどなぁ。さすがにそれは無理か(^^;)。
■ そんなわけで、もうちょっとスクリプトを整理したら公開しようかな。でも、めちゃくちゃ汎用性ないな〜(^^;)。
March 18, 2002 [おもひで]
■ [Misc] W32.Impo.Gen@mm(WORM_FBOUND.C)
時すでに遅しと思うのだがふと思いついたので。
■ これって、「うんこ」というサブジェクトについたメールが大量に送られてくる人がいるということだろうか。
なんか、添付ファイルを開くまでもなく有害なような(^^;)。
■ 差出人になるのも恥ずかしいな。友達に「うんこ」上司に「うんこ」お客さんに「うんこ」好きなあの子に「うんこ」家族に「うんこ」。うーむ、これは大変だ(^^;)。
March 19, 2002 はじめてのtDiaryプラグイン [おもひで]
■ [tDiary] tDiary-1.3.x用プラグイン yasqueeze.rb - Yet Another squeeze.rb
先日までの話で、せっかくなので作りかけのスクリプトをこちょこちょいじってyasqueeze.rbというtDiaryプラグインを作ってみました。基本的にはtDiaryが実装している@text_output機能の置き換えを狙っています。CGIとしてもコマンドとしてもプラグインとしても使えます。
■ 詳しい使い方はドキュメントを見ていただくとして、あとでyasqueeze.rb + XREA環境でtDiaryとNamazuを使う方法をまとめたいと思ってます。それからtDiary-1.4.0対応も。とりあえず今日は眠いのでこれまで。
■ さくっと作った割には(といっても元々あったsqueeze.rbをぱちっただけですが)結構使えるシロモノになったような気が。
■ [tDiary] tDiaryのコールバック引数はProcオブジェクト
tDiaryではコールバックイベントをユーザが定義できる。この仕組はとても便利だ。このプラグインもこの機能が無ければ作れなかった。将来的にこれが拡張されていくと、極端な話、登録や表示など全てのイベントをプラグイン化できてしまう。すごい。
■ ちなみに、現状、これってこんな書き方をする。
add_header_proc( Proc::new do '<meta name="keyword" content="Linux,Kondara">' end )
■ これって、以下みたいな形になってないのはなぜだろう....(とこんなところに書いてもしょーもない気もするが)。
add_header_proc do '<meta name="keyword" content="Linux,Kondara">' end
■ ちなみに、検証したテストプログラムを忘れないように書いておこう。
class Test
def initialize
@procs = Array.new
end
def add_header_proc(&proc)
@procs << proc
end
def execute_all
@procs.each do |proc|
proc.call
end
end
end
test = Test.new
test.add_header_proc do
print "aaa\n"
end
test.add_header_proc do
print "bbb\n"
end
test.execute_all
■ こっちの方がすっきりする気がするんだけど、これじゃダメなのかな...。ちょっとtDiaryのソースを見てみようかな...って時間無いよね<自分(^^;)。
■ おまけに、hoge_proc_beforeとhoge_proc_afterが欲しいなぁなんて言ってみたり(^^;)。
March 20, 2002 yasqueeze-1.1.0 is out! [おもひで]
■ [Ruby] Procオブジェクトを引数にするのとブロックを受け付ける方法を同時にサポートする
なんか変な日本語(^^;)。
なかださん、フォローどうもです。この方法なら互換性保てますぜ。 > たださん
class Test
def initialize; @procs = Array.new; end
def add_header_proc(block = proc)
@procs << block
end
def execute_all
@procs.each do |proc| proc.call; end
end
end
test = Test.new
test.add_header_proc do print "aaa\n" end
test.add_header_proc(Proc.new{ print "bbb\n" })
test.execute_all
■ [tDiary] yasqueeze.rb
確かに 〜procを用意するほど遅くなりますね。おっしゃるとおりです。この辺のバランス感覚が大切なんですよね。いかんいかん。
■ それから、たださんのコメントを吸収して非表示の日記をきちんと扱えるようにした新しいバージョンをリリースしました。
- 保存先のディレクトリ構造をtDiary標準のテキスト出力と同じにするかどうか
- 非表示の日記を出力対象に含めるかどうか
を新たに指定できるようにしました。tDiary-1.4.0で動作確認もしました。
■ ちなみにもし気に入っていただけたなら、喜んでコントリビュートしますが...。> たださん
March 21, 2002 [おもひで]
■ [Misc] XREAのサポート掲示板
いろいろ便利なスクリプト発見。- XREAのCGIが出すエラーを検知する(2001/12/04のmstkさんの投稿)
そうかこうすればよいのか。きづかんかった。ちょっと知ってる人なら当たり前に使ってるのね、これ(^^;)。 - Namazu 用 indexing CGI script(2001/10/04のdimbulaさんの投稿)
これでmknmzもWWWからできる! でも、なんでこのshell使った場合と、xreaにsshでログインして直接mknmzしたときのパス(.namazurcのReplaceの左辺値)が異なるのだろう。うーむ。
■ [tDiary] yasqueeze.rb
ドキュメントをアップデートしました。ちょっとわかりやすくなったかな。
■ [Ruby] Ruby/GTK vs GTK-2.0
yasqueeze.rbの方が一段落したのでさかいさんにもらったパッチをRuby-GNOMEのソースにあててみた。んでもって、手元でちょこちょこいじりはじめたんだけど、ひとつのソースでGTK-1.xとGTK-2.0の両方に対応させるというのはすごく大変そうだと言うことがわかった。
■ ちなみに、gdkcursors.hは無くなってるんですが、代わりにgdkcursor.hってのができてて、そこにcursor typeのマクロが移ってます。うーむ。
とりあえず、手元でmakecursors.rbを改造。これだけでもif文増やすのはツラいな...。
March 22, 2002 今日はこれから実家に戻ります [おもひで]
■ [Misc] うぉ!なんかすごいRefererの数!
それは、きたさんとたださんがyasqueeze.rbを紹介してくださったからなのでした。どうもです。
■ [tDiary] yasqueeze.rb
実は私もコマンドラインオプションの互換性は取りたかったんです。でも、実行時に、それがCGIなのかコマンドなのかをどうもうまく区別できなかったんで、今みたいな実装にしちゃいました。環境変数あたりからうまく情報を拾えば解決するのかなぁ?
■ そんなこんなで、この辺について良いアイデアがありましたら、是非やっちゃってください。私も勉強になりますし。つーか、もともとsqueeze.rbを改造したものなんでえらそうなこと言えた義理ではないのですが(^^;)。
■ それから、確かにコンフィギュレーション部分だけは別出しにした方がよいですね...。ただ、単にファイル増やすのも何だし、たださんもおっしゃられてますが、プラグインとか用の共通コンフィグレーションファイルがあると便利かもです。
■ yasqueeze.rbの名前とかデフォルト値とかはおまかせしますです。なんなりと。あ、でもしばらくは共存させるのかな。
■ よろしければyasquueze.rbをtDiaryのCVSに入れたら教えていただけませんか(もう入ってる?)。その段階で私のホームページにあるやつはobsoleteにしたいと思います。いろんなところにあったら使ってくれる人も混乱すると思いますし。
■ そういえば、ドキュメントはどうしましょうか(実は一番時間かけたところだったり(^^;))。
March 24, 2002 [おもひで]
■ [tDiary] yasqueeze.rb
たむらさん、きたさん、たださん、ありがとうございます。結局、REQUEST_METHODを見ることにしてコマンドラインにも対応できるようにしました。CVSに取り込んでいただくよう、たださん、きたさんにはメール済みです。
■ [tDiary] search_form.rb
tDiaryのプラグイン第2弾。もうすでに存在するかなぁと思いつつ、tDiary用各種検索エンジンの検索フォーム表示プラグインを作ってみた。
■ 実は、元々namazuの検索フォームを表示するだけのものをyasqueeze.rbに入れようと作ったんだけど、もうちょっと汎用的にできそうだと考え直し、search_form.rbとして別出しにしてみた。
■ ひとまず、Namazu, Google, Yahoo!, Lycosをサポートしてみたんだけど、何か他にもサポートした方が良い検索エンジンってあるかなぁ。
■ tDiary + Namazuという組み合わせは今後増えると思うんだよね。search_form.rbはHTMLを書かずに一行呪文を唱えるだけで検索フォームを追加できるので初級者でも簡単!(ホントか?)。
March 25, 2002 [おもひで]
March 28, 2002 fortune.rb [おもひで]
■ [tDiary] fortune for tDiary
tDiaryのプラグイン第3弾。今日中にドキュメントまとめて公開予定です。
#fortuneって何?という方はgoogleあたりで fortune cookieで検索かけてみてください。
■ ちなみに、Linuxビボ〜ろくで表示しているfortuneのテーマはLoveです。そう、愛です、愛なんです....(=o=)。
■ ところで、実はメソッド名悩んでます。fortuneって元々、占い用を意図してるんだろうけど、テーマ自体は格言みたいなモノが多いよな気がするので、名前をkakugenとかhitokotoとかproverbとかにした方が良いような気がしてます。
とはいえ、fortuneってコマンド自体が超メジャーだから長いものには巻かれた方が良いような気もするし...。
■ yasqueezeの方はその後にやります(^^;)。
■ [tDiary] fortune.rb
と、深夜0時をとっくに回ってしまったが、fortune.rbをリリース。結局、長いモノに巻かれてしまった。
■ ところで、ソースを見ればわかるとおりfortune.rbは実質10行程度だ。
一度、辞書ファイルを全部読み込み、それを分割して配列に格納し、その配列の中から1つをランダムに取り出すという富豪的プログラミングなアプローチで実装してる。速度とかを考えるとあまり関心できるコードじゃないかもしれんが、これからの時代はこーぢゃないと...とか偉そうなことを書いたりするとあんな人やこんな人がもっとクールなコードを書いてしまいそうなのでやめておこう(^^;)。
■ とか言っておいて、実は、最初は律儀にfortune-modに近いモノを作ろうと思ってfortune-modのソース読もうとしたんだけど、ファイル操作とかマクロとかポインタとかダブルポインタとかがいっぱい(?)あって、とっても面倒くさくなって読むの途中でやめてしまったってことは内緒にしておこう。花粉症の季節にCはつらい、つーか、花粉症じゃなくてもダメだな。もう、あの頃には戻れないかも...(遠い目)。
■ [tDiary]ドキュメントまわり
とりあえず3つのプラグインのドキュメントまわりをtDiary.Netの日記の書き方っぽくしてみた。
■ うーむ、だんだん眠くなってきたぞ...。今日はyasqueezeを見るはずだったのに....うーん眠い...。明日やろうそうしよう(^^;)。
March 29, 2002 今日から3連休! [おもひで]
■ [Misc] 久しぶりの年休
特別休暇というのを取った。年度をまたいで持ち越すことができないのでせめて1日くらいはというわけ。それでもまだ数日分は取れたはずなのでちょっと損した気分だ。ホントお金に換えてくんないかな〜(昔はそういうところもあったみたいだけど)。
■ [tDiary] Yet Another Squeeze
yasqueeze.rbをバージョンアップしてCVSに入れときました。プラグイン・CGIとして使用する場合は、オプションの設定をtdiary.confの@optionsで行うようになったのですっきりしたと思います。それから、add_update_proc do 〜 endにも対応しました。
■ 機能的には大きな変更は無いのであわててバージョンアップする必要はありません(というかtDiary-1.3.xでは使えなくなりました)。
■ [Misc] XREA + tDiary + Namazu + mod_rewrite
たださんところを参考にLinuxビボ〜ろくもmod_rewrite対応してみた。これでhttp://ponx.s5.xrea.com/bibo/20020329.htmlとかでアクセスできるようになった。
RewriteEngine on RewriteBase /bibo ← ここは、tDiaryのホーム(index.rbが置いてある仮想ディレクトリ) RewriteRule ([0-9]+)\.html$ index.rb?date=$1
■ これで、http://ponx.s5.xrea.com/bibo/20020329.htmlとかでアクセスできるようになっているはずなので確認してみる。
■ Namazuの検索結果の仮想ディレクトリも変更しておく。.namzurcをXREA上のnamazu.cgiがあるディレクトリに置く。
Index /virtual/hoge/namazu/index/ Replace /virtual/hoge/tdiary/html/(\d\d\d\d)/(\d\d\d\d) http://hoge.s1.xrea.com/bibo/\1\2.html Lang ja
■ anchor.rbって標準添付でも良いような気がする...(ぼそっ)。
March 30, 2002 [おもひで]
■ 似たような感じのプラグインでアビーさんによるezlink.rbというのがすでにあるんだけど、とにかくキーワードを英字でかつ短い(1字とか)文字にして入力する手間を省きたかったのと、どうしても@referer_tableを流用すると自由度が低くなるような気がしたので、自分で辞書ファイルを作ってそれを使えるように実装してみた。
■ 辞書ファイルをリモートからでも更新できるようにしたいな。やはりCGI書かないとダメかなぁ。
■ それから、fortune.rbとa.rbってファイルにアクセスするから@secure = trueだと使えないのか。むぎゅぅ。@refere_tableみたいにtdiary.conf内に持たせた方が良いのかな....。
■ [tDiary] fortune.rb
kjanaさんに教えていただいた方法を使ってfortune.rbを再構成してみようとちょっと考えた。
でも、やっぱりfortune辞書形式(複数行あり、データ分割は%行で行う)ではちょっと複雑になってしまうな...。
■ なんか、そもそも考え方間違えてるのかな...。うん、その可能性は高い(^^;)。
■ そうそう、fortune.rbって辞書ファイルにHTML形式の文章も使えるようになっているので、例えばXREAの広告みたいなのをランダムに表示することもできる。自分で取った写真をランダムに表示するとかに使っても面白いかも。
■ でも、そう考えると、やっぱり名前が悪いかなぁ。
March 31, 2002 [おもひで]
s = Time.new
def fortune(file)
res = ""
line = ""
IO.readlines(file, "\n%\n").each do |line|
res = line if rand($.) < 1
end
res = line if res == ""
res = $2 if res =~ /^(%\n)?(.*)\n%\s*\n?$/m
res
end
puts fortune(ARGV[0]) #(1)
#(0..1000).each { fortune(ARGV[0]) }
#p Time.new - s
■ 2つ実装ができたので、どっちが速いのかなぁというわけで時間を図ってみることに(上記のコードの#の部分を有効にして(1)をコメント化)。ascii-artというfortune辞書を10倍にしたファイルを作ってみた。
$ruby test.rb ascii-art-10-times.txt 6.033442
■ 対するは、今のfortuneのコードの簡略化版
s = Time.new
def fortune(path)
open(path) do |file|
lines = file.read.split(/%\n/)
lines[rand(lines.size)]
end
end
(0..1000).each { fortune(ARGV[0]) }
p Time.new - s
■ んで、結果。
$ruby fortune-lite.rb ascii-art-10-times.txt 1.542972
■ あり?今のコードの方が速い....。なんか間違ってんのかな?
教えていただいたコードって、rand($.)でマッチしてもbreakしたらダメなんですよね?
■ うーむ...。どうも、IO.readlines()が遅いみたい。以下のコードを試してみる。
s = Time.new
def fortune(file)
IO.readlines(file, "\n%\n").each do |line|
end
end
(0..1000).each { fortune(ARGV[0]) }
p Time.new - s
$ruby test2.rb ascii-art-10-times.txt 5.926064
■ 考えてみたらあり得ない結果とはいえなくもない気がしないでもない(ってどっちだ?(^^;))。ARGF.getsだともうちょっと速いのかな?
s = Time.new
def fortune(file)
ARGF.each do |line|
end
end
(0..1000).each { fortune(ARGV[0]) }
p Time.new - s
■ あり?これ、1回、ARGFがEOFまで読み込まれた後、反応しなくなってしまう。なんでだろう。そういうモノなのかな? ま、いっか。疲れたし(^^;)。
■ おっと、忘れてた。オレの環境はLinux-2.4.18 / ruby 1.7.2 (2002-01-05)[i686-linux]、試したfortune辞書のサイズは59040byte, 1540行だ。
■ ちなみに、いろいろやっている間、先頭が%から始まるfortune辞書では、空文字が返されるバグを見つけた。明日にでも直すか...。

▲ たむら [「オレが言うことの半分はウソで、残りの半分…」かなり気に入りました(^^; 私も使わせてもらおう。]
▲ むとぽん [どもです。光栄です(^o^)。]
▲ KENZI [hdparmのお話、参考にさせて頂きました。 「へんなコード」もちょっとおもしろかったです。 私は最初の会社の入社2..]