トップ «前の日記(2001-08-02) 最新 次の日記(2001-08-04)» 月表示 編集

日々の流転


2001-08-03 [長年日記]

λ. Ruby Relaxer

あれ感想ではないと思われ。まあ、そのうち試してみたいなぁとは思うけど。

ふむふむ、RELAXで定義されたXMLモデルに従ったXMLドキュメントを操作するためのクラスを自動生成するのか。確かに便利そう。あらかじめ定義されたモデルに従った文章だけを扱うなら、DOMなんかいらなくなるわけか。こいつはいいや!

Tags: ruby tom

λ. 15000 hit

気が付いたら越えてた。

λ. Scheme(というかScript-Fu)でオクテット列から文字列に変換するには?

いっちーさんに訊かれて色々考えてみたけど、良い方法が思い付かない。たとえば、こんな関数が考えられるけど、オクテットにinteger->charを適用するのは正しい結果を得られる保証が無いばかりか、マルチバイト文字を考慮しないことになる。まあ、SIODじゃ動かないからどうでも良いんだけど。

Tags: gimp scheme
(define bytes->string
  (lambda (bytes)
    (list->string (mapcar integer->char (vector->list bytes)))))

λ. 結局、以下のようなプラグインを書いて使うというのが一番ましな方法かもしれない。しかしアレだよな〜

#include <libgimp/gimp.h>
#include <string.h>

static void query(void);
static void run(char* name,
                int nparams, GimpParam* param,
                int* nreturn_vals, GimpParam** return_vals);

GimpPlugInInfo PLUG_IN_INFO = {
    NULL,       /* init_proc */
    NULL,       /* quit_proc */
    &query, /* query_proc */
    &run,   /* run_proc */
};

MAIN()

static
void query()
{
    static GimpParamDef args[] = {
        {GIMP_PDB_INT32,     "length", "array length"},
        {GIMP_PDB_INT8ARRAY, "bytes",  "Input bytes"},
    };

    static GimpParamDef return_vals[] = {
        {GIMP_PDB_STRING, "string", "Output string)"},
    };
    static int nargs = sizeof(args) / sizeof(args[0]);
    static int nreturn_vals = sizeof(return_vals) / sizeof(return_vals[0]);

    gimp_install_procedure("int8array_to_string", 
                           "Convert INT8ARRAY to STRING",
                           "Convert INT8ARRAY to STRING",
                           "Masahiro SAKAI",
                           "Copyright (c) 2000 Masahiro SAKAI",
                           "Fri Aug  3 17:35:49 JST 2001",
                           NULL,
                           "",
                           GIMP_EXTENSION,
                           nargs, nreturn_vals,
                           args, return_vals);
}

static
void run(char* name,
         int nparams,
         GimpParam* param,
         int* nreturn_vals,
         GimpParam** return_vals)
{
    static GimpParam values[2];

    gint32 length = param[0].data.d_int32;
    gint8* array  = param[1].data.d_int8array;
    guchar* result;

    result = g_new(guchar, length + 1);
    result[length] = 0;
    memcpy(result, array, length);

    *nreturn_vals  = 2;
    *return_vals   = values;

    values[0].type          = GIMP_PDB_STATUS;
    values[0].data.d_status = GIMP_PDB_SUCCESS;
    values[1].type          = GIMP_PDB_STRING;
    values[1].data.d_string = result;
}

λ. このプラグインを使って、

(define parasite (car (gimp-image-parasite-find 0 "gimp-comment")))
=> ("gimp-comment" 1 #22"437265617465642077697468205468652047494d5000")
(define hoge (caddr parasite))
=> #22"437265617465642077697468205468652047494d5000"
(car (int8array-to-string (length hoge) hoge))
=> "Created with The GIMP"

λ. ところで

今日も起きたのは昼だし、最近は寝た時間に関係なく起きるのが昼ごろだな〜。さて、せっかく救済措置を取ってもらった体育のレポートを仕上げなくちゃ。これが仕上らないと明日の呑み会も行けなくなるし。

λ. それにしても

「A∨¬A」で検索されるとは…

λ. ルパン3世 アルカトラズ・コネクション

アルカトラズの閉鎖とJFKの暗殺を関連づけるというアイディアは面白かったけど、それだけ

Tags: TV