Contents
  1. 石田PM・長尾PM未踏最終報告会
  2. Gonzui Hack
    1. inside of gonzui.db
    2. 探索方法
    3. 文書検索エンジンとしての利用
    4. で、
    5. 謝辞
  3. デスノコラ、まだまだ終らんよ
    1. デスノ板(イ反)
  4. モスバーガー国立店
    1. ディック・ブルーナモデル店舗
  5. Ajax
  6. Exerb
    1. 関連
    2. 議論
  7. Gonzui install
    1. Gonzui 0.5
    2. サンプルとしてwgetをwget
    3. 使ってみる
    4. CVS版にチャレンジ
    5. flex最新版の入手
    6. Cygwinでのinstall
    7. Berkeley DB
    8. Ruby/BDB
    9. gonzui-0.5のinstall
    10. gonzui CVS版のinstall
  8. JavaScript event handling
    1. 参考
  9. JavaScript debug
    1. debug.js
  10. 地震雲
    1. 写真
    2. リンク
  11. デスノコラ
    1. ガモウひろし
  12. 夜見ると暗くて、昼に見ると明るいページ
  13. クマチョコキター!
  14. trackfeed
  15. 伊藤若冲展
  16. クマァ
  17. UI系シンポジウムの罠
  18. グローバルメディア2005
  19. bloglines
  20. 第2803236号
  21. Book

0502

石田PM・長尾PM未踏最終報告会

面白かった。いくつかすごくいいのがあった。Gonzuiがいいのは当たり前なの で置いとくとして、坂本竜基氏のannpolyが面白かった。

簡単に言えば、Webページへのアノテーション・システムである。アノテーショ ン・システムとしては、W3CによるAnnoteaなどの様々なシステムが存在してい るが、あまりうまくいっていない。その意味ではチャレンジングなテーマだが、 annpolyはいろいろ細かい工夫がこらされていて興味深い。

まずアノテーションシステムの基本として、Webページ中のアノテーションす る対象をどのようにして指定するのか。実をいうと、これがすごくやっかいで 難しい。

アノテーションの元になるデータが変化しないのであれば、簡単。例えば、何 バイト目から何バイト目といった指定方法など、どんな手段を使ってもうまく いくだろう。しかし、まったく変化しないWebページというのは、実はほとん ど存在しない。普通の静的なhtmlファイルだとしても、人間が書き換えれば変 化する。最近ではブログのように動的に生成されるhtmlが増えてきており、対 応が難しい。例えばブログのトップページであれば、毎日のように変化するの はわかるだろう。過去のエントリならば変化しないように見えるが、誰かがコ メントすれば、そのコメントがつけくわわるし、トラックバックもあるだろう。

原理的に言えば、万能の解決策は存在しない。そもそも元のページが消えてし まうこともありうる。そのような場合には打つ手が無いのであきらめるとして も、しかしコメントが追加されたという程度の変化だったら、追随してほしい わけだ。しかしそのような比較的簡単な変化だとしても、どのように変化する のかがあらかじめわかっていれば簡単だが、そうでなければ対応はとても難しい。

XPointerというXML文章の一部分を指定するための規格も存在しているが、そ の文章の中にも、万能の方法は無いと記述されている。その文章によれば、現 時点で最も確度が高い方法は、IDによる指定である。annpolyでは、ID名、ク ラス名による指定と、XPathとを組み合わせた方法でアノテーションの位置を 指定することによって、ロバストに対応できるとしている。しかしおそらくア ノテーションする対象によってルールを微妙に変更するなどの工夫が必要にな るだろう。

また、アノテーションの表示については、テンプレートによって指定できるよ うにしている。表現方法においても、弱タルムード的表現、1/fゆらぎ、まん が的Visualizeの併用など、いくつかの手法を組み合わせて面白く見せている。 大量にアノテーションがついてしまった場合の対処もおこなっている。

アノテーション・システムはシステム単体で提示しても、なかなか利点が想像 しずらいが、なんらかのCMSに組み合わせる形で提示すれば、その利点が自然 に理解されるようになるのではないだろうか。具体的には、なんらかのブログ ツールと組み合わせた形で使うようにすれば、場所指定の問題など、様々な制 約をクリアできるのではないだろうか。おそらく、イントラ・ブログのような 制限された利用形態において利用すると、効果を発揮するのではないだろうか。

Galapagosにもかなり感心した。

中嶋氏はXM (eXtrem Meeting)という概念(プラクティス)を提唱している。要 するに、XP (eXtrem Programming)の会議版である。会議をよりよくするため のいくつかのプラクティスをまとめ、それを実践するためのツールとして Galapagosを作成した。

まず、会議の役割を再定義し、「会議とは共同で議事録を作成する作業である」 としている。私も以前同じことを考えたことがある。これはとてもいい考え方 だと思う。しかし、これはXMがまずは対象としている「てきぱき決める系の会 議」ではうまくいくように思うが、「じっくり考える系の会議」はこれではう まくいかないのではないか。アジェンダの設定そのものが難しい会議、いわゆ るブレストのような、とらえどころのない会議に、このような手法を用いると、 逆効果になってしまうこともあるかもしれない。

私も会議の再定義に注目しているため、大変興味のあるプロジェクトである。 「てきぱき決める系」についてはとても素晴しい成果が達成されたことと思う ので、私は「じっくり考える系」の会議に集中しようかと思っているところで ある。

Gonzui Hack

一般に検索エンジンにおいては、インデックス作成のコストと検索コストがト レードオフの関係にある。インデックスがしょぼいと、それだけ検索の際に時 間がかかる。その逆に、時間かけて豪勢なインデックスを作ると、その分検索 が速くなる。

Gonzuiは情報量の豊富なインデックスを作成することによって、検索を高速に 行えるようにしている。そのインデックスは、gonzui.dbというディレクトリ の下に、Berkeley DBによるファイルの一群という形で置かれている。その中 身をおおざっぱに眺めながら、実際の検索がどのように行われるのかの手順を 見てみる。

inside of gonzui.db

検索窓から何らかの単語を入力して、検索をかけたと仮定しよう。まず、 word_wordidというDBを用いて、その単語のwordidを取得する。Gonzui内部で 検索可能な単語には、全て一意の数値がふられている。これを単語ID(wordid) という。これによってまず、検索したい単語を一つの数値に変える。この段階 で、該当する単語IDが存在しなかった場合には、どこを探してもこの単語は出 てこないということになるので、検索結果は無しということになる。

次に、wordid_pkgidsというDBを使い、単語IDからパッケージIDを検索する。 Gonzuiではパッケージ単位でデータを管理していて、それぞれにパッケージID という数値をふっている。この段階で、その検索単語を含んでいるパッケージ がどれかがわかるようになる。

次に、pkgwordid_pathidsというDBを使い、パッケージIDと単語IDの組から、 どのファイルにその単語が含まれているかを検索する。パスIDとは、要するに ファイル名のことだ。これによって、その単語が含まれるファイルがどれかが わかるようになる。

次に、pathwordid_infoというDBを使い、そのファイルの中に、ある単語が、 どの位置に出現するかを調べる。この位置情報とは、そのファイル中の行数、 バイト数である。また、その単語の種類(関数名かクラス名か文字列かなどの 情報)も保持する。

ここまでの情報を総合すると、ある単語が、どのパッケージのどのファイルの どの位置に出現するかがわかるようになるわけだ。

単語情報として、ファイル中の何行目の何バイト目から入っているかという情 報も保持しているため、その行の前後の行を取り出し、その単語だけをハイラ イトして表示するということが、パターン・マッチング無しで行える。また、 そのファイルの本体も、またそのファイルの本体も、pathid_contentというDB に収められており、ファイルにアクセスしなくても内容を取り出せるようになっ ている。

このように、DBの構造が、パッケージ、ファイル、単語情報などと複数のレイ ヤにわかれて、それぞれ別個に存在するような仕組みになっているため、パッ ケージ単位、ファイル単位の検索や、関数名、クラス名などの単語の種類を指 定した検索ができるようになっているわけだ。

探索方法

DBの中身が見えると、何をやってるのかがよくわかって楽しい。 gonzui/dbm.rbのGonzui::AbstractDBMのcloseというmethodに、以下のような コードをつっこんで解析をした。このコードをつっこんだ後に、 gonzui-importで何かコードをimportすると、終了時に全てのDBをテキストと してダンプしてくれる。

==> gonzui/dbm.rb 233行目あたりから <==
    def close
      flush_cache
      raise DBMError.new("dbm is already closed") unless @opened
      @db_opened.each {|name, db| 
	open(name.to_s+".txt", "wb"){|f|
	  db.each {|k, v|
	    f.print("#{k}	#{v}\n")
	  }
	}
      }
      @db_opened.each {|name, db| 
        db.close
      }
      @opened = false
    end

文書検索エンジンとしての利用

今はまだあまり強調されていないが、実はGonzuiは通常の文章の検索エンジン としても利用できる。Gonzuiでは、Unigramという方法でインデックスを作成 しているので、辞書による方式によるNamazuと比較しても、利点がある。 Unigramとは簡単に言えば、一文字ごとに分割してインデックスにしていると いうことである。例えば「モーニング娘。」のような、文法的に難解な単語の 場合は、辞書方式だと検索ができない場合があるが、Unigramの場合は絶対に 検索できるという特徴がある。

また、文章においても、パッケージ単位で管理したいということもよくある。 前述のデータベースの構造から、パッケージを指定しての検索や、ファイルを 指定しての検索が簡単にできるようになっている。例えば具体的には、メール ボックスを検索させたいというときに、フォルダ単位で検索をかけるという こともできる。

また、単語の種類を指定した検索もできる。例えば先程の例で言えば、 Subjectに含まれる単語などの指定もできる。これはもちろん、そのようなイ ンデクサを作れば、ということであるが。

つまり、構造を持った文章の、構造情報を利用した検索をかけることができる ようになるわけで、うまくインデクサを設計してやれば、とても便利な高機能 文章検索エンジンとして使えるようになるはずだ。

で、

ソースコード検索エンジンというと、「GLOBALとgrepを組み合わせれば、すぐ に出来るんとちゃう?」と考える人もいるだろう。実際、この考え方はあなが ち間違いとも言いきれない。原理的に言えば、grepを使えば何でも検索できる し、ソースコードの色付けも難しいものではない。しかし、その検索を0.1秒 以内に終らせられるようにしようと思うと、かなり難しい。

「0.1秒じゃなくて、1秒くらいでもいいじゃん」という意見もありうる。しか し本当の問題は、秒数ではなくてオーダーである。検索の元データが増えると、 どんどん検索に必要な時間も増えていく。元データの増大に対してどのくらい のオーダーで、検索に要する時間が増えるのか。Gonzuiでは元データから多様 なインデックスを作成することによって、検索を高速に行えるように工夫して いるわけである。

「工夫」という言葉を使うと、王様の発明のような、パッとおもいつくアイデ アのようなものを連想するが、実際にはそれがデータ構造の工夫などという形 で表れており、それが開発コストの大部分を占めているわけである。

謝辞

この文章は高林氏に聞いた情報を元に再構成したものである。 とても面白い検索エンジンを公開してくれて、どうもありがとう。

モスバーガー国立店

モスバーガー国立店。4/22にオープンだそうです。行かないと!

ディック・ブルーナモデル店舗

こんな感じになるらしい。

Ajax

最近、Ajaxが流行ってるらしい。

なんでこんな昔のゲームが今ごろ流行ってるんだろう…。まぁいいか。

Exerb

御大から「Exerbで動いたりしない?」との質問。試してみる。

% ruby setup.rb config
% ruby setup.rb setup
% ruby setup.rb install
% cd ~/gonzui
% mkexr gonzui-import wget-1.9.tar.gz

こうすると、gonzui-import.exr, gonzui-import.makというファイルができる。 help messageを表示させるだけではだめ。 ちゃんとimportの動作をさせないと、必要なライブラリ群が読み込まれない。

% make -f gonzui-import.mak

とすると、下記のコマンドがよびだされる。

exerb gonzui-import.exr

これで、gonzui-import.exeができる。

しかし、実行してみても何も表示されずに終了してしまう。おかしいと思って 取り込むライブラリを少なくしてみると、エラーメッセージは出るようになる。 しかし、一つでも.soがついた拡張ライブラリを追加しようとすると、何にも 言わない状態になってしまう。どうやらCygwinでは拡張ライブラリの取り込み に問題があるようだ。

example/visualuruby.exrを試してみる限りでは問題なくうまくいく。なので、 拡張ライブラリがまったく使えないということは無い。拡張ライブラリのコン パイル時になにか処理をする必要があるのか? example/ext/swin.so, Win32API.soの二つのファイルは、tarballについてきたファイルなので、これ らをコンパイルする方法はよくわからない。

http://exerb.sourceforge.jp/trouble.html#no15

Exerbでは、mswin32版以外の拡張ライブラリを使用することはできません。mswin32版の拡張ライブラリに変更してください。

ということで、Cygwinで拡張ライブラリを使用している場合は、Exerbできな いということですね。それなら素直にエラーにしてくれればいいと思うのだが…。

しかし実は、swin.soが使えたように、特別な方法を使えばCygwinでも拡張ラ イブラリが使えるから、あえてエラーにはしてないということなのか。 しかしその特別な方法は発見できず。

mswin32であれば拡張ライブラリも使えるということであるが、私の記憶では mswin32だとRuby/BDBがうまくコンパイルできなかったような。これをクリア すれば、バイナリ化もできるはずだ。でも、Visual C++が必要なんだな。 私にはできないので、誰かやってくれー。

関連

○ 各種拡張ライブラリへの対応

とのことで、やはり状況の整理はついていないようだ。

議論

たむらです。

Exerbは拡張ライブラリを選びまする。 作者のYuyaのページがMLに情報があった気が。

Tkとか、Apolloの対応してたと思う。

  • どうもです。調べてみますー。

Gonzui install

Gonzuiのinstallにチャレンジ。まずはDebianでinstall。

Gonzui 0.5

wget http://jaist.dl.sourceforge.net/sourceforge/gonzui/gonzui-0.5.tar.gz

なぜかこのパッチをあてる必要があった。

--- ./langscan/c/c.c.org        Wed Feb 23 15:11:11 2005
+++ ./langscan/c/c.c    Wed Feb 23 15:11:20 2005
@@ -44,0 +45 @@
+  size_t len = maxlen;
@@ -47 +47,0 @@
-  size_t len = maxlen;
--- ./langscan/php/php.c.org    Wed Feb 23 15:11:27 2005
+++ ./langscan/php/php.c        Wed Feb 23 15:11:40 2005
@@ -44,0 +45 @@
+  size_t len = maxlen;
@@ -47 +47,0 @@
-  size_t len = maxlen;
--- ./langscan/java/java.c.org  Wed Feb 23 15:11:03 2005
+++ ./langscan/java/java.c      Wed Feb 23 15:10:41 2005
@@ -44,0 +45 @@
+  size_t len = maxlen;
@@ -47 +47,0 @@
-  size_t len = maxlen;
--- ./langscan/python/python.c.org      Wed Feb 23 15:11:48 2005
+++ ./langscan/python/python.c  Wed Feb 23 15:11:55 2005
@@ -44,0 +45 @@
+  size_t len = maxlen;
@@ -47 +47,0 @@
-  size_t len = maxlen;

これでOK。うまくいった。

サンプルとしてwgetをwget

wget http://ftp.gnu.org/pub/gnu/wget/wget-1.9.tar.gz

リカーシブな感じ。

使ってみる

% gonzui-import wget-1.9.tar.gz

とすると、wgetの中身を解読してDBを作ってくれる。 gonzui.dbというdirectoryができて、その中身にいろいろ保管される。

% gonzui-server

として起動する。

こいつをアクセスする。OK!

CVS版にチャレンジ

cvsから最新版をgetする。

cd ~
cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/gonzui login
cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/gonzui co -P gonzui
cd gonzui
./autogen.sh

CVS版をbuildするにはflexが必要。これが曲者。 普通のDebianだとflex 2.5.4が入っている。

% /usr/bin/flex --version
/usr/bin/flex version 2.5.4

これだと下記のようなエラーメッセージがでる。

flex -d -octok.c ctok.l || cp ctok.c.dist ctok.c
"ctok.l", line 12: unrecognized %option: reentrant
cp: cannot stat `ctok.c.dist': No such file or directory

ということで、flexの最新版をいれなくてはいけない。

flex最新版の入手

普通にflexを探すと、GNU flexのページに行く。 しかしこのページにあるflexは古いものである。

最新版はsourceforgeにあるので、ここで探す。

ここでflexで検索すると、flexというプロジェクトがひっかかるが、 実はこれは古いものである。無視しなくてはならない。(トラップ!)

こちらが最新版。ここからflex-2.5.31をdownload, installする。

これでgonzuiに戻ってmake。ちゃんとflexの部分も通って、普通に動く状態になる。

Cygwinでのinstall

Debianでの経験をふまえて、Cygwinでのinstallを試してみる。 まずは必要なソフトをいれる。

Berkeley DBが古いままだと、下記のようなエラーがでる。

./gonzui/bdbdbm.rb:31:in `initialize': /cygdrive/c/temp/gonzui-0.5/gonzui.db/__db.001: unable to initialize environment lock: Invalid argument -- Invalid argument (BDB::Fatal)

この場合、Bekeley DBの最新版をいれる必要がある。

Berkeley DB

最新版はBerkeley DB 4.3.27.3。patchを3つあてる。

db-4.3.27.NC/docs/ref/build_unix/intro.html

この文章を参考にする

% cd build_unix
% ../dist/configure
% make
% make install

とすると、/usr/local/BerkeleyDB.4.3以下にinstallされてしまう。

% cd /usr/local/BerkeleyDB.4.3/bin
% mv * ../../bin
% cd ../lib
% mv * ../../lib
% cd ../include
% mv * ../../include

として、全部移動した。

Ruby/BDB

最新版はRuby/BDB 0.5.4。

% ruby extconf.rb
extconf.rb: Entering directory `src'
checking for db_version() in -ldb-4.3... yes →ここ重要
creating Makefile
extconf.rb: Leaving directory `src'
% make
% make install
install -c -p -m 0755 bdb.so /usr/local/lib/ruby/site_ruby/1.8/i386-cygwin

ということで、無事install完了。

gonzui-0.5のinstall

普通に./configure; makeだと、拡張ライブラリのcompileでエラーがでる。 /usr/local/lib/ruby/1.8/i386-cygwin/rbconfig.rbに対してパッチをあてる。

--- rbconfig.rb.org     2005-02-23 17:58:26.184312000 +0900
+++ rbconfig.rb         2005-02-23 20:59:58.133444800 +0900
@@ -43 +43 @@
-  CONFIG["LIBS"] = "-lcrypt "
+  CONFIG["LIBS"] = "-lcrypt -lruby"

この後に、./configure; makeする。

OK! うまく動きました。

gonzui CVS版のinstall

flex-2.5.31のinstallが必要。あとは上記の通りでOK。 CVS版はgonzui-importが無茶苦茶速くなってて、快適です。

Happy Hacking!

JavaScript event handling

JavaScriptから動的にイベントを指定する方法。

例えば、ある領域をクリックしたかどうかを判定したい。 普通はonMouseDownなどのattributeを追加して、そこにコードを書く。

<div onmousedown="toggle();">text</div>

みたいな感じ。しかし、あえてhtmlはいじらないで、JavaScriptだけで同じ 指定をすることができないか。つまり、htmlにはonmousedownなどのコードを 含まずに、文章の構造指定だけにしたい。とりあえずidはつけとく。

<div id="text">text</div>

結論から言えば、こうすればいい。

 var div = document.getElementById("text");
 div.onmousedown = toggle;

上記のような指定をしたのと同じ効果が得られる。

逆に、うまくいかない例。

 div.setAttribute("onmousedown", "toggle();");

上記のhtmlの記述は、原理的にはこれと同値であるはずだと思うのだが、 なぜかこれではうまくいかない。なぜかというと、イベントはattributeとは 別のものとして管理しているからだ。

本当だったらうまくいってもいい例。

 div.addEventListener("mousedown", toggle, true);

DOM Level 2の規定によれば、これが正しい記述である。 しかし、このコードはFireFoxではうまく動くが、IEでは駄目だ。

最初のコード例は古い書き方なのだが、両者でうまく動くようにするには それが一番いいようである。

参考

これらのイベントハンドラの属性値は読み込みのみです。

明確に「読み込みのみです」と書いてある。でも書き込めちゃうんだよね…。 この記述から見るように、上記のコードは本当は勧められない方法のようだ。 でも両方で動かす限りはこれでしょうがないみたい。

JavaScript debug

JavaScriptのデバッグは面倒。

debug.jsというのを開発した人がいて、とても使いやすいです。 http://homepage1.nifty.com/kuraman/js/debug.html

で、オブジェクトのプロパティを出力するコードを作った人もいるのですが、 http://akiyah.bglb.jp/blog/558 私も以前から同様のコードを書いていて、inspectモドキと呼んでいます。 そのinspectモドキとdebug.jsを組み合わせたコードを公開してみます。

使い方はわかるよね。 なんかこのオブジェクトの中身見たいなーと思ったら、

debug.p(t);

みたいなコードをいれればいいと。そういう感じ。

debug.js

// ****************************** debug.js
// original from http://homepage1.nifty.com/kuraman/js/debug.html
// modified by Kouichirou Eto
// print(variable): variableの内容を出力バッファに保存
// flush(): 出力バッファの内容をデバッグウィンドウに出力
// clear(): 出力バッファの内容をクリア
// setDebug(true | false): デバッグ情報を出力する(true)か出力しない(false)かを設定
// inspect(obj): オブジェクトの内容をわかりやすい文字列にする
// p(obj): inspectした結果を表示する

var debug = new debug();

function debug() {
  this.html = "";
  this.hWin = null;
  this.bDebug = true;

  this.setDebug = function(flag) {
    this.bDebug = flag;
  }

  this.clear = function() {
    this.html = "";
    this.flush();
  }

  this.flush = function() {
    if (false == this.bDebug) return;
    if (null == this.hWin || this.hWin.closed) {
      this.hWin = window.open("", "debug",
	"height=200,width=400,menubar=yes,scrollbars=yes,resizable=yes");
    }
    this.hWin.document.open("text/html", "replace");
    this.hWin.document.write(this.html);
    this.hWin.document.close();
    this.hWin.focus();
  }

  this.print = function(html) {
    this.html += ("<tt>" + html + "</tt><br>\n");
  }

  this.inspect = function(obj) {
    //var delimiter = ", ";
    var delimiter = ", <br>";
    if (typeof obj == "number") {
      return ""+obj;
    } else if (typeof obj == "string") {
      return "\""+obj+"\"";
    } else if (typeof obj == "function") {
      return ""+obj;
    } else if (typeof obj == "object") {
      var str = "{";
      var added = false;
      for (key in obj) {
	var value = obj[key];
	if (value) {
	  if (added) str += delimiter;
	  added = true;
	  if (typeof value == "number") {
	    str += ""+key+"=>"+value+"";
	  } else if (typeof value == "string") {
	    str += ""+key+"=>\""+value+"\"";
	  } else if (typeof value == "function") {
	    str += ""+key+"()";
	  } else if (typeof value == "object") {
	    str += ""+key+"=>"+value+"";
	  } else {
	    str += ""+key+"=><"+(typeof value)+":"+value+">";
	  }
	}
      }
      return str+"}";
    } else {
      return "<"+(typeof obj)+":"+obj+">";
    }
  }

  this.p = function(elem) {
    this.print(this.inspect(elem));
    this.flush();
  }
}

直してくれた人がいました。

地震雲

たしかに昨日、地震雲があった。見えてたよ。 誰か昨の雲の写真アップしてくれないかな。写真撮り逃した。

この写真のイメージがかなり近かった。 このページはかなり冷静に検証していて参考になる。

写真

そう、これこれ。僕が見たのもまったくこんな感じ。(って、蒼井そらじゃん!)

リンク

夜見ると暗くて、昼に見ると明るいページ

以前から、夜見ると暗くて、昼に見ると明るいページというのを作りたかった んですね。で、ようやくできた。

http://eto.com/

このページの背景は、一分毎に変化します。今のウェブカムからの画像を取得 して、それを変形して背景にしている。夜に見ると暗いだけだけど、昼に見る とぼんやりと地上と空の境界が見えます。ちょっと前からこれにしてたんだけ ど、誰も気付かなかったので書いてみる。

今は背景の大きさは、適当にノートPCの画面サイズに近いくらいにあわせてい るのですが、本当はブラウザのウィンドウの大きさにあわせたい。そういう風 にするにはどうしたらいいんだろう。JavaScriptでwindowサイズを取得すれば いいのかな? そういうことをやってるページは他に無いもんだろうか。

クマチョコキター!

クマチョコをプレゼントしてもらいました。
すんげーかわいいです。
どうもありがとうございます!

消費期限が4月10日なので、それまではかざっておいて、
4月になったら食べちゃおうかな。バクバク。

trackfeed

http://trackfeed.com/ というのをいれてみたんだけど、すげー便利だね。びっくりした。 アクセスログ解析とかリファラ解析とかちまちまちしたのが面倒だし、 解析の精度が怪しいので全然やってなかったんだけど、これは明解。便利。

伊藤若冲展

2/16水-3/27日 9:30-17:00 伊藤若冲展 @京都国立博物館 平常展示館 075-541-1151 京都市東山区茶屋町527

クマァ

最近はピースが話題である。無茶苦茶かわいい。

ピース5歳 〜日本初 ホッキョクグマ哺育物語〜
1/28金 23:00-, 再放送 2/3木 1:00- (2/2深夜) @1ch

で、シロクマのピースと一緒に育った天才柔道少年。 元画像が残ってないけど、このビデオに出てきたピースもかわいかった。

で、クマチョコ。

こんなん。無茶苦茶いい出来なんですけど。欲すぃ…。 自分で自分にプレゼントしてしまいそうな勢いです。

   〇_〇 
   ( ・(ェ)・)  <クマァ! 
  /J ▽J 
  し―-J 

UI系シンポジウムの罠

http://home.att.ne.jp/sigma/satoh/diary.html 2005年2月2日

2月末にぐらいに某学会のUI系のシンポジウムがあって、そこではデモセッションが人気を集めていますが、格好の餌食ですよね。

展示説明は学生さんが多いのですが、学生さんはガードが甘い。

位置依存サービスをしようとしても、携帯端末がGPSなどから取得した位置情報を何らかのメッセージ(メールを含む) でサーバに転送して、そのサーバから現在位置に関するコンテンツを携帯端末が受け取ると特許に抵触します。

GPSを使ったサービスが立ち上がらない理由はこれか。

グローバルメディア2005

bloglines

せっかくsub bloglinesのボタンをつけてみたんだけど、RSSは更新されてない。 nagayamaさん作成のRSSが、新フォーマットに対応してないからか…。 http://www.mofd.jp/~nagayama/rssgen.cgi/eto こっちでRSS作らないとだめなのかな…。

http://d.hatena.ne.jp/tnx/20050214#p1 対応してもらいました! やった! どうもありがとう!

Last modified: 2006-09-05