自分の興味の赴くままにIT技術系のネタを取りとめもなくメモっています。
Ruby言語やLinuxのネタが多いです。

August 01, 2002 [長年日記]

[Misc] 会社のPCにVMWareを入れてみた

んでもってFreeBSDをゲストOSとして入れてみたんだけど、なんか恐ろしく遅い。ブートとかはある程度早いんだけど、コンソール(というかshell?)が異様に遅いので作業にならない。

VMWareもFreeBSDも初めて入れたけど、こんなに遅いもんなのかな。それとも設定が悪いのかな。うーむわからん。


August 03, 2002 [長年日記]

[Misc] 慰安旅行(?)

昨日・今日で会社の慰安旅行(っていうのかな?)へ行って来た。

いろいろと楽しかったのだが、なかでも強烈だったのは後輩の寝言。

めちゃくちゃはっきりと大きな声で、

「えすじすー!」

久しぶりにハラ抱えて激しく笑わしてもらったよ。

後で聞いたら、なんかのシステムのバックアップを取っている夢を見ていたそうだ。まったくここまで来て仕事の夢を見るとは気の毒なヤツよ.... って、それのどこが文字コードと関係があるんだ(^^;)?


August 04, 2002 [長年日記]

[Ruby] SegLED - Segment LED操作用ライブラリ for OpenBlockSS

というものを作ってみました。OpenBlockSSの前面にあるLEDに対しRubyから簡単にアクセスすることができます。

OpenBlockSSを持っている人が少ない上、LEDをRubyから操作したい人はさらにいないでしょうから、めちゃくちゃマイナーなライブラリになりそうですが、実は結構おもしろいです。

もし、OpenBlockSSを持っている方がいましたら是非試してみてください。


August 06, 2002 [長年日記]

[tDiary] 本日のリンク元表示プラグイン-2.0.0 is out!

文章で説明するのはちょっと難しいんだけど、こいつをpluginディレクトリに置くだけで、サーチエンジンの検索文字列だけ下にまとめて表示されるようになる(Linuxビボ〜ろくの日別表示の本日のリンク元を参照)。表示内容は

ヒット件数 x 検索文字列種類数 検索文字列1, 検索文字列2, ...

という感じ。検索エンジンからの検索がやたらヒットする人にお勧め。

実はLinuxビボ〜ろくも日別で表示すると、本文より本日のリンク元の方が行数あったりするようになってしまっているので、少しでも本日のリンク元をコンパクトにまとめたいなぁと思ってたんだよね。

1.x系でUTF-8の文字化けが減っただけでだいぶ良くなったんだけど、今度は妙に左の空間が空いてしまっているのがもったいない感じがして今回のように検索結果だけまとめるようにした...というわけだ。

ただ、version-1.x.x系と大幅に機能(というか考え方)が変わるのでバージョンは2.0.0としてみた。オレがリリースするツールで2.0.0なんていうのは初めてだ(^^;)。

もちろん、1.x系と同様な表示ができるようなオプションも残したけど、1.x系で十分な人はバージョンアップする必要はない。

そうそう、バージョンアップする場合Uconvをインストールし直す必要はなくて、その場合はdisp_referrer.rbだけ入れ替えればOK!

しかし、ソースコード、あまり時間をかけなかったせいもあるけどだいぶ汚くなってしまった。まぁ、おいおい直していくことにしよう。

にしてもよく動いてるな〜こんなんで(^^;)。

[tDiary] 本日のリンク元表示プラグイン-2.0.1 is out!

っていうか、やっぱバグってました。すんまそん。


August 07, 2002 [長年日記]

にしてもコード複雑すぎ(自分で言うのもなんだが...(^^;))。全然Rubyっぽくない。もうちょっと書き直そう(でもだめだったりして(^^;))。


August 08, 2002 [長年日記]

[tDiary] 本日のリンク元表示プラグイン-2.1.0 is out!

また表示方法を変えました。検索エンジン単位に表示する形にしてあります。すっきり。

2.0.1と互換性を持たせようと思ったんだけどやめました。どーしても前の方が良いという方はバージョンアップしないようにしてください。

ソースの方もゴッソリ書き換えました。(前に比べると)だいぶマシになったと思います。

それから、smbdさんのご要望にも対応しました。更新画面では全てのリファラが表示されます。

さ、Ruby-GNOMEに戻るか...。

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

smbd [ありがとうございます〜]


August 09, 2002 [長年日記]

[tDiary] 本日のリンク元表示プラグインメモ

あ、そうか。これ、HEADに入れちゃマズイですね。次にCVSいじるときに直します。個々の検索キーワードのリンクもできれば対応したいなと思います。

それから、antibot-referer.rbがどういうものかわかったので、これと同等の機能も入れようと思います。確かにわざわざCPUパワーを浪費してまで検索ロボットに教えてあげる必要はないですもんね。

あとGoogle検索の改善と他の検索エンジンへの対応かな。あとはメジャーどころはNetscape位かと思ってますが他にもあります?

#とっても件数が少ない場合は検索エンジンといえど通常の処理をした方がCPU負荷を考えると良いんですけどね。


August 13, 2002 [長年日記]

[Ruby] Ruby-GNOME2のコーディング中に

ふと、RClassあたりにクラス自身のではなくて、ラッパする構造体のmark, free, sizeの情報を持っているとうれしいかもと思った。

[Ruby] そーや、トムソーヤなんや(遅すぎ?)

Ruby/LibGladeが動かんぞ!とか言ってたのでコード送ってもらってdebugしてあげたんだよね。

で、他愛もないものだったからすぐ間違いを指摘できたんだけど、その時に

「Ruby/LibGladeのドキュメントが少ない今、他の人のknowledgeになるかもしれんからruby-talkにフィードバックして」

って書いた(つもりな)んだけどその後音沙汰無し。あれじゃ、ruby-talkの人はトムソーヤのバグなのかRuby/LibGladeのバグなのか判断できないじゃないか。

といって、オレがフォローメールをruby-talkに投げるわけにも行かず。debug時間より時間かけて辞書を片手にリプライ書いたというのに。うき〜っ!


August 14, 2002 [長年日記]

[Ruby] 続トム・ソーヤ

今度はマルチポスト(ruby-talkとruby-gnome-users-en)。

質問の内容も教えて君レベル。具体的にはGladeのGUIの使い方の質問だったんだけど、そんなのちょこちょこいじってればわかるだろ〜普通っていうレベル。

ちょっとカチンときたのでマルチポストすんなとリプライ。

おかげでオレ様の大人げなさと度量の狭さっぷりを世界中にアピールしてしまった格好だ。なんかものすげー損した気分。

[Misc] robotよけ

Hena Hena日記経由で GRAPHIC WIZARD'S LAIRとさらに、robotはぢきについてを参考にさせていただいてLinuxビボ〜ろくにもロボットよけを適用してみた。これで少しはCPU負荷率が下がるかな。

[Misc] Linuxビボ〜ろく

気がついたら15,000カウント突破してました。どなたかキリ番踏んだ方います?


August 18, 2002 [長年日記]

[Ruby] Allocation Frameworkで悩む

Ruby-1.7系の場合、メソッドnewは allocate -> initializeという順番で初期化を行って行くんだけど、じゃぁ、いったいallocateでは何をしてinitializeでは何をすべきか、というところではまった。

具体的にはRuby/GTK2のGdk::Cursor用コード(の抜粋版)。

static VALUE gdkcursor_s_allocate(klass)
    VALUE klass;
{
    GdkCursor c;
    return Data_Make_Struct(klass, GdkColor, 0, free, c);
}
 
static VALUE
gdkcursor_initialize(argc, argv, self)
    int argc;
    VALUE *argv;
    VALUE self;
{
    VALUE source, mask, fg, bg, x, y;
    rb_scan_args(argc, argv, "15", &source, &mask, &fg, &bg, &x, &y);
    DATA_PTR(self) = gdk_cursor_new(NUM2INT(source));
    return self;
}

今のCVS版だと上記の(ような)実装になってるのだけど、これだと、allocateの方で生成したGdkColorが無駄になってしまう。

うーん、どうすれば良いんだ....と思ってruby-devの過去メールをあさると立石さんが同様の問題で悩まれていたようで、そのものずばりのスレッドがあった。ホント、読んでないよね<オレ。

で、この辺の情報ってどこかにまとまってないのかなぁ、と思いつつスレッドの内容をまとめてみた

Allocation Frameworkは「allocationのやり方がオブジェクトごとに異なっていて、どこにフックをかけたらよいのかわからない」という問題を解決するもの。 これにより、

  • Class.newでオブジェクトの生成。その中身は
  • Class.allocateでオブジェクトの生成(ただしinitializeされるまでは使用不能状態)
    「すべてのクラス」で「未初期化のRubyオブジェクト」を返すべき。
    allocateはごくまれに生成されるインスタンスのタイプや構造を知るためにも使われるので、できるだけなにもしない「空のRubyオブジェクト」を返したほうが良い。
  • obj.initializeでオブジェクトの初期化
    initializeはサブクラスでオーバーライドされる可能性がある
  • と統一されたので、生成と初期化について一貫性ができた。しかも、やや間接的ではあるが、クラスからそのクラスのインスタンスの「型」を知る方法ができたという副次的な効果もできた。

    T_DATAの場合にはptrを0としてData_Wrap_Structするのがよい。で、initializeで DATA_PTR(obj) = ptr と初期化する。 それ以外の「型」については個別に対応する必要があるが、「型」を自分で定義する機会は滅多に無いはず。

    ということは、T_DATAである上記コードは以下のように書けば良いのかな。

    static VALUE gdkcursor_s_allocate(klass)
        VALUE klass;
    {
        return Data_Wrap_Struct(klass, 0, free, 0);
    }
     
    initializeの方は同じ。
    

    んでもって

  • 立石さん
    また,allocateで使用不能なオブジェクトを作ったことで,すべてのメソッドでその使用不能状態を検出する作業が必要になるなどの場合があると思います.このような場合でもallocateで使用不能状態を作るべきかでちょっと悩んでしまいます.
  • なかださん
    これはinitializeする前だけでなく、たとえばcloseされたIOなんかにも当てはまる話です。Rubyが静的な(変数でなく)オブジェクトのスコープ(というよりライフスパンといったほうが適切?)を持たない以上、対応は必須だと思います。
  • まつもとさん
    ProcやThreadのように使用不能な状態の存在しないクラスもありますので、絶対にだめとは言えませんが、従っておいたほうがユーザに親切ではないだろうかとは思います。ProcやThreadも将来的には対応させようと思ってますし。
  • これって、あおきさんみたいにinitializeしていない場合はエラーを返すようにしないといけないということかな。となると上記のように単純にData_Wrap_Struct使うだけじゃダメだね....。

    とここまで考えてさかいさんのRuby/GLibのコードを読み直す

    gobj_holderが良い感じだ。そうか、こうすれば良いのか。さすがさかいさん...。

    それにしても

    まったく、ここまで何も理解してないでメンテナやってるオレもすごいな(^^;)。

    それからちょっと気になるけど

    この辺の仕組って変わっちゃったりするのかな、ちょっと心配。

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

    たむら [ブラボーな、まとめだと思われ。]

    むとぽん [自分の頭の中を整理したいときって、書かないとだめなんですよね〜、私の場合(^^;)。]


    August 26, 2002 [長年日記]

    [tDiary] アクセスカウンタ表示プラグイン

    またしてもpstoreでエラー。pstoreは使わないようにすべきなのだろうか。うーむ。

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

    Before...

    むとぽん [それがわからんのです(^^;)。細かく追っていないからってのもありますが....。Rubyのバージョンかなぁ。]

    なかじま [うちのも、この間壊れました。 壊れたのはをapache再起動したタイミングのようです。 ちょっと因果関係は不明ですが..]

    むとぽん [うーん、なんなんでしょうね...。 ちなみに、NTさんのとこのRubyのバージョンは1.6.5のようですのでバージョ..]


    August 29, 2002 [長年日記]

    [tDiary] 今度は日記データが...

    壊れた。バックアップ取っといたから復旧できたのだが...。ついでにcounterデータも再度壊れた。


    August 30, 2002 [長年日記]

    [tDiary] アクセスカウンタ表示プラグイン-1.6.0をリリースしました

    本質的な改善ではないのですが、カウンタデータが壊れた場合に自動で1つ前の状態に復旧させるようにしました。おそらくこの機能だけでエラー画面が表示されることはなくなると思うのですが、さらに1つ前のデータも壊れていた場合は、カウンタ値を0とすることによりエラー画面は出ずに日記だけは表示できるようになりました(この場合は手動で復旧するまでカウンタは機能しないことになります)。

    なお、バックアップデータは7つあるのですが自動復旧は1つ前のもののみです。1つ前のデータが壊れていた場合は手動でさらに過去のデータから復旧する必要があります。といっても、アルゴリズム的には1つ前のデータが壊れている場合というのは無いはずなのですが....。

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

    Before...

    むとぽん [あ、どうもです。 カウンタのデータにはPStoreを使っています。 マルチスレッドではなく、CGIで起動します(実際..]

    ただただし [なんでここでばかり壊れるのかが不思議ですよねぇ xreaの特異性かも?]

    むとぽん [どうなんでしょう。xrea以外でも壊れたとの話を聞いたことがありますし...。]


    August 31, 2002 [長年日記]

    [tDiary] 最近のツッコミプラグイン(recent_comment3)

    なぜかたださんのツッコミが反映されていないことに気づいた。オレの名前は除外リストに入れているから反映されなくても良いのだが.....うーむ、なぜだろう。最近、不思議なことがよく起こるなぁ、なんかあるのか?(^^;)。

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

    ただただし [霊のしわざでしょう。]

    むとぽん [やはりそれ系ですか、夏ですし。]

    むとぽん [あれ?今度のたださんのツッコミは反映されてる...。ナゾだ...。]