自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
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 03, 2002 [長年日記]

[Ruby] Ruby/GTKのDrag and Dropの実装

無事、CVSに取り込まれました。サンプルの方も取り込んでもらったので興味のある方はどうぞ。ちなみにCVS版Ruby/GTK(Ruby-GNOME)の取得方法についてはこちらをどうぞ。


March 04, 2002 [長年日記]

[Ruby] Ruby/GTKのDrag and Dropの実装

あー。おもいっきしバグってた....。パッチ送っておきました。0.27に間に合えば良いのだけど...。

[Misc] Linuxビボ〜ろく

s5.xrea.comサーバの負荷率の順位が異様に上がってる(2位になってる)。tDiaryしか使ってないのにこのままぢゃやばいなぁ...。


March 09, 2002 [長年日記]

[Ruby] Ruby GetText Package

GetTextの仕様を勉強中(イマサラ(^^;))なんだけど、結構環境変数の扱いがRuby GetText Packageと違うのね。もうちょっと勉強して実装を見直すことにしよう。

[Ruby] Ruby/GTKのバグ

無事取り込まれた。良かった、0.27に間に合って。でも、Neilはこの前パッチを送ったときにI was planning to release 0.27 in a couple of daysって言ってたんだけど、まだリリースされてないよなぁ。ひょっとしてオレのパッチがリリースを遅らせてしまった原因?(^^;)


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もちょこちょこいじってみた。

[tDiary] tDiary-1.3.4

いいね〜。これ。オレもなんかプラグイン書きたいなぁ。けど、アイデアがうかばん(T_T)。

[Linux] GTK+ 2.0

試してみたいんだけど、今の環境はそのままでも大丈夫なのかなぁ。つーか、Ruby/GTKが動かなくなったらシャレにならん(^^;)。


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! [長年日記]

[Ruby] Ruby-GNOME 0.27がリリースされました。

こちらから取得できます。

今回は0.26からさらに機能が拡張されています。

  1. Gtk/Gdk

    1. Drag and Drop

    2. Gtk::Socket, Gtk::Plug

    3. Gdk::Cursor

    4. Gtk::AccelLabel

  2. panel-applet

  3. 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ってことになってしまう。

さらに、これを守るがためにgotoを使ったりすることを推奨する人がいた。(以下はC言語風(^^;))
int ret = TRUE;
if ( ! foo()) {
    displayErrorDialog("fooError");
    ret = FALSE;
    goto EXIT;
}
:
if ( ! bar()) {
    displayErrorDialog("barError");
    ret = FALSE;
    goto EXIT;
}
:
:
EXIT:
(後処理)
return ret;

理屈としては、後処理の部分をまとめて書けるということだったように記憶してるが、全てこう書けというのでどうしようかと思った。後処理が必要ないときもこれで書く。うーむ。

まぁ、その時は、どっちが良いかなんつー判断はできなかったから、結局従ったけどね〜。

そうそう。引数には必ずinとoutをつける人がいたな。まぁ、C言語ならまだわかるんだけど、Javaとかでこれはなぁ。 あ、もちろん、Javaで引数にoutを使うってのはほとんどないはずなので、大体inのみが使われた。
int hoge(int inWidth, int inHeight){
}
あと、MSのハンガリアン記法(だっけ?)を全ての言語でやろうとする人。
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++){
  }
}

変数はなるべく狭い範囲で使った方がデバッグとかで間違いがないのは明らかだと思うのだが....。

ちなみに、上記のようなやり方をしてしまうと、使わなくなったローカル変数の宣言を残してしまう場合もある。まぁ、コンパイラでチェックできるかもしれないけど。

案外、先輩が言ったことを真に受けて、何年も、言語が変わっても、かたくなに守る人っているんだよなぁ。そう言う人に限って、「これは○○さんが言ったんだから守らなきゃいけない」って平気でのたまったりするんだよな。もうちょっと自分自身の考えを持って欲しいと思ったよ、ホント。背景を考えずにそういうことを鵜呑みにする人って、教える方もイヤだよな。後で「むとうさんがそう言ったから....」と言われたらたまらん。

ま、そんなわけで、オレが後輩に何か教えるときは

「オレが言うことの半分はウソで、残りの半分は将来使えなくなるだろうから気をつけるように。それからバランス感覚は大事。」

って言うようにしてたんだよね。実際、意図せずに美しくないコードを書くときもあったし(っていうかそれがほとんどか、今思えば(^^;))、新しい技術がどんどん出てきてることを考えると、結構、当たってると思うんよな。プログラミングに対する取り組みの姿勢とかそういうこと以外は時と共に変わっていっちゃうもんね。

#あ、もちろん、この文章だって、半分はウソで....(以下略)

[Misc] C言語

えらそうなことを書いてしまったが、以前、ポインタのポインタ(ダブルポインタだっけ?char**ってなやつ)がよくわかんなくて、夢に出てきてうなされたこともあるというのはここだけの秘密。

本日のツッコミ(全3件) [ツッコミを入れる]

たむら [「オレが言うことの半分はウソで、残りの半分…」かなり気に入りました(^^; 私も使わせてもらおう。]

むとぽん [どもです。光栄です(^o^)。]

KENZI [hdparmのお話、参考にさせて頂きました。 「へんなコード」もちょっとおもしろかったです。 私は最初の会社の入社2..]


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したからかな。とりあえず事象だけご報告(?)ということで(^^;)。

本日のツッコミ(全5件) [ツッコミを入れる]

Before...

なかだ [うむむ、やばいかも。]

なかだ [あちゃ、"Go back one page"で戻って来たら、POSTDATAを再送信してしまった…。 やっぱりダメか..]

むとぽん [なははは。ありがち。]


March 16, 2002 [長年日記]

[Misc] 中途半端にテクニックがある人(続き)

肝心なこと書くの忘れてた。もう一つ重要なことが。ある人(例えば後輩)がやろうとしていることが、今までの自分のやり方と違うからといって、その人のことを「中途半端にテクニックがあるやつ」と片づけてしまう人。こういう人も相当やばいよね。

なんか全部自分自身の自戒を並べた感じだな〜。注意しよう。

[Misc] Linuxビボ〜ろくをいろいろいじってみた

当初よりやりたかったNamazu検索機能を追加した。xreaでは結構制限があるので大変だった。

参考にしたのは自己満足にっきtwp

tDiaryは内部的にHTMLではないバイナリでデータを保存しているので直接Namazuでインデックスを作ることができない。そこで、以下のような手順を取る。

  1. tDiaryに入っているmisc/squeeze.rbを使って、一時的に1日ごとのHTMLを抽出する(ファイル名はYYYYMMDD)
  2. それをベースにmknmzでインデックスを作る
    ただ、ここで生成したHTMLは実際の検索結果のHTMLというわけではない。あくまでも検索結果はtDiaryが毎回生成するHTMLにしたいからね。
  3. そこで、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さんの場合は

  1. 一度、xrea上のデータをftpでローカルなtDiary環境に持ってくる
  2. そこでリモートとほぼ同じ環境のtDiaryのmisc/squeeze.rbを実行する
  3. 生成されたHTMLファイルをftpでxrea上にputする
  4. xrea上でmknmzを実行する

という手順を取ってる。この手順だとtDiaryの環境をローカルにも作らないといけないのがとっても面倒くさい。

これではあまりに大変なので、misc/squeeze.rbを改造してCGIとして動くようにしてみた。これならば

  1. ブラウザからsqueeze.rbを呼び出す
  2. xrea上でmknmzを実行する

という感じになるのでだいぶ楽になる。ローカルに環境を作らなくてもいいしね。

本当はmknmzもCGIから実行したいのだがどうもうまくいかない。もしかしたらセキュリティ上の問題かな。XREAのエラー画面はよくわからないのでとってもデバッグがしづらい。

それができたら、ホントはsqueeze.rb自体を自動起動したいんだけどなぁ。さすがにそれは無理か(^^;)。

そんなわけで、もうちょっとスクリプトを整理したら公開しようかな。でも、めちゃくちゃ汎用性ないな〜(^^;)。


March 17, 2002 [長年日記]

[Misc] tDiaryの日別のHTMLファイル

そういえばtdiary.confに@text_output、@text_output_pathというパラメータを記述するところがあった。なんだ、これ使えばいいんじゃん。トホホ。

本日のツッコミ(全2件) [ツッコミを入れる]

ただただし [いやー、あれは盲腸みたいなもんで、あんまり役には立ちません。ツッコミは保存されないし。]

むとぽん [がーん。そうだったんですか...。]


March 18, 2002 [長年日記]

[Misc] W32.Impo.Gen@mm(WORM_FBOUND.C)

時すでに遅しと思うのだがふと思いついたので。

これって、「うんこ」というサブジェクトについたメールが大量に送られてくる人がいるということだろうか。

なんか、添付ファイルを開くまでもなく有害なような(^^;)。

差出人になるのも恥ずかしいな。友達に「うんこ」上司に「うんこ」お客さんに「うんこ」好きなあの子に「うんこ」家族に「うんこ」。うーむ、これは大変だ(^^;)。

たむらさんのところはこんな楽しいひとときがあったのだろうか。ちょっとうらやましい(?)。

本日のツッコミ(全2件) [ツッコミを入れる]

たむら [残念ながら、「うんこ」ではありませんでした。(笑 10base抜いて、メーラ落として、VirusBusterのパター..]

むとぽん [それは残念(^^;)。]


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が欲しいなぁなんて言ってみたり(^^;)。

本日のツッコミ(全1件) [ツッコミを入れる]

なかだ [引数にProcをとるけどブロックは使わない、というメソッドをブロックを渡すようにするのは簡単です。 def hog..]


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を用意するほど遅くなりますね。おっしゃるとおりです。この辺のバランス感覚が大切なんですよね。いかんいかん。

それから、たださんのコメントを吸収して非表示の日記をきちんと扱えるようにした新しいバージョンをリリースしました。

  1. 保存先のディレクトリ構造をtDiary標準のテキスト出力と同じにするかどうか

  2. 非表示の日記を出力対象に含めるかどうか

を新たに指定できるようにしました。tDiary-1.4.0で動作確認もしました。

ちなみにもし気に入っていただけたなら、喜んでコントリビュートしますが...。> たださん


March 21, 2002 [長年日記]

[Misc] XREAのサポート掲示板

いろいろ便利なスクリプト発見。
  1. XREAのCGIが出すエラーを検知する(2001/12/04のmstkさんの投稿)
    そうかこうすればよいのか。きづかんかった。ちょっと知ってる人なら当たり前に使ってるのね、これ(^^;)。
  2. 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にしたいと思います。いろんなところにあったら使ってくれる人も混乱すると思いますし。

そういえば、ドキュメントはどうしましょうか(実は一番時間かけたところだったり(^^;))。

本日のツッコミ(全3件) [ツッコミを入れる]

きた [こんにちは. sfのCVSにaddしちゃいました. http://cvs.sourceforge.net/cgi-b..]

たむら [ENV['SCRIPTNAME'] の存在をチェックするとか。 # 環境変数名自信ないっす。今甥っ子にメインマシン取..]

ただただし [cgi.rbはREQUEST_METHODを見てCGIかどうか判断してますね。 ドキュメントはHTMLをそのまま収録..]


March 24, 2002 [長年日記]

[tDiary] yasqueeze.rb

たむらさん、きたさん、たださん、ありがとうございます。結局、REQUEST_METHODを見ることにしてコマンドラインにも対応できるようにしました。CVSに取り込んでいただくよう、たださん、きたさんにはメール済みです。

[Misc] xreaで mknmz

なるほどそういうことなんですか。

ちょっと話はずれますが、スクリプトでcdできるなら、xrea上でcdさせてくれても良いような気が...(^^;)。

[tDiary] search_form.rb

tDiaryのプラグイン第2弾。もうすでに存在するかなぁと思いつつ、tDiary用各種検索エンジンの検索フォーム表示プラグインを作ってみた。

実は、元々namazuの検索フォームを表示するだけのものをyasqueeze.rbに入れようと作ったんだけど、もうちょっと汎用的にできそうだと考え直し、search_form.rbとして別出しにしてみた。

ひとまず、Namazu, Google, Yahoo!, Lycosをサポートしてみたんだけど、何か他にもサポートした方が良い検索エンジンってあるかなぁ。

tDiary + Namazuという組み合わせは今後増えると思うんだよね。search_form.rbはHTMLを書かずに一行呪文を唱えるだけで検索フォームを追加できるので初級者でも簡単!(ホントか?)。

本日のツッコミ(全3件) [ツッコミを入れる]

恵司 [tDiary + Namazuうまくいきません、くう。いろいろとやってみたんだけど、根本的に何か間違っている様子。^..]

むとぽん [こんにちわ。大変そうですががんばってくださいね〜。]

ただただし [あ、おれも作ろうと思ってたんだ、search_form。tDiary.Netでnamazuを導入した暁に使わせてもら..]


March 25, 2002 [長年日記]

[tDiary] search_form.rb

お言葉に甘えて、CVSにaddしちゃいました。ドキュメントの方は(yasqueeze.rbも含めて)、up場所も含めもうちょっと考えてからご相談させていただきます。

[tDiary] xrea + tDiary + Namazu (まとめ)

ここで予告しましたはまってる方もいらしゃっるようなので、ちょっとでも参考になればとドキュメント化を急いでみました。ここに置いておきますんで試してみてください。

本日のツッコミ(全3件) [ツッコミを入れる]

Nana [いつのまにか、でべろっぱになっていらしゃったんですね。 わーいわーい。(笑)]

ただただし [タグで始めるときは行頭に空白入れないと:-)]

むとぽん [Nanaさん:どうもです。そういやget_xrea_dataはどうでした?と言ってみたり(^^;)。 たださん:あぅ..]


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とかでアクセスできるようになった。

まず、.htaccessに以下のオプションを追加してXREAのtDiaryのディレクトリに置く。
 RewriteEngine on
 RewriteBase /bibo                           ← ここは、tDiaryのホーム(index.rbが置いてある仮想ディレクトリ)
 RewriteRule ([0-9]+)\.html$ index.rb?date=$1

次に、たださんところのanchorプラグインをanchor.rbとでもして、XREAのプラグインディレクトリに置く。

これで、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って標準添付でも良いような気がする...(ぼそっ)。

[tDiary] fortune.rb

さっそくZnZさんからコメント。赤ラクダ本のってどんなコードです? 持ってないんです(^^;)。

Rubyで書いてくれたりしたらそのままいただきますが、なんて言ってみたりするテスト。

#ちなみに、私の予想だともう一人くらいクールなコードを書いてくれる人がいそうな(^^;)。

[Misc] なんて言ってみたりするテスト

って最近よく見ますけど、これって誰が元ネタなんだろう。やっぱり2ch?

[Misc] どこも同じですね〜

KENZIさん、お初です。そういえば私のまわりにも、共通化をあまり好まない人がいました。どこも似たようなもんなんですかね〜、ふぅ。

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

kjana [こんなん: res = "" ARGVF.each {|ln| res = ln if rand(..]

むとぽん [きたさん:うーん、おっしゃるとおりですが、結構、決めうちでも良いような...。それこそ、独自にやりたい人は自分で実装..]

むとぽん [kjanaさん:ありがとうございます。なるほど勉強になります。 でも、これって1行しか対応してないですよね...。f..]


March 30, 2002 [長年日記]

[tDiary] tDiary用プラグイン第4弾 a.rb

アンカーを自動生成するプラグイン。こちらから。

似たような感じのプラグインでアビーさんによる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の広告みたいなのをランダムに表示することもできる。自分で取った写真をランダムに表示するとかに使っても面白いかも。

でも、そう考えると、やっぱり名前が悪いかなぁ。

本日のツッコミ(全2件) [ツッコミを入れる]

kjana [あれ,本質は「rand(n) が 0 を返す確率は 1/n」っていうだけだから, レコード毎に読みだすようにして,レ..]

恵司 [namazu君動いてくれません、参りました。]


March 31, 2002 [長年日記]

[tDiary] fortune.rb

kjanaさん、ZnZさん、どうもです。こんなコードでしょうか?

イマイチエレガントに書けない....。っつーか、まだ間違えてたりして(^^;)。

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辞書では、空文字が返されるバグを見つけた。明日にでも直すか...。

本日のツッコミ(全4件) [ツッコミを入れる]

Before...

恵司 [XREA + tDiary + Namazuのマニュアルにある.namazurcの編集の編集ですが Replace..]

kjana [ > ruby -v ruby 1.6.5 (2001-09-19) [sparc-solaris2...]

むとぽん [kjanaさん:追試どうもです。今回はメモリのサイズも気にするほどでもないと思いますので、前のアイデアのままで行こう..]