controlClientSideView.js

Object.setAttribute('onclick', 'CCSV.showMoreText.changeStyle(\'' + moreTextBoxNodeId[i] + '\')') => Object.onclick = function(){ CCSV.showMOreText.changeStyle(..); }; でもどうせIEを捨てるならaddEventListenerを使った方が。

controlClientSideViewって名前から察するにメソッドっぽいけれど、メソッドのインスタンスを作るという発想が抽象的に理解しにくいというか、prototype経由で参照されるメソッドの中に特定のインスタンス(CCSV)への参照があるのはいかがなものかと。

まあ私がある種の固定観念に汚染されつつあるだけです。全然間違っていません。

ColorMatch Remix

EfAというテーマが好き。

24時間

何も食っていないので眠れない。ちなみに風邪を引いた時には一日二日断食するといいらしいと、読売に記事が出ていた。余計なエネルギーを消化活動に奪われるので、栄養価の高い肉などは食べてはならないらしい。

私はただ生活を憎んでいるだけ。

XML Events

どうか普及しませんように。

Webに現われつつある新たな潮流とそれらを利用した可能性について (2003/01/20)

迅速に勧告することが普及にかなり効果を発揮するらしい。JavaScript 2.0は遅すぎる。

変なノイズが入らないから却って良いものになるということが、W3Cではしばしば起こるらしい。XMLの偉い人もどこかで言っていた。

JavaScript 2.0

Virgo - JavaScriptでsys-Commonとかが公開されていて継承やらプライベート変数やらは何とかなるので、せめてJavaScript 2.0 パッケージだけでも使えるようにならないだろうか。

ホームページ楽々講座 No.134

あんまり楽々って感じじゃあないですな。(参考:Re:画像をポイントすると説明文を表示する(neroのメモ帳)

再帰とジェネレータ

この「ジェネレータを使ったバージョン」がようやく理解できた。

def fg(args):
  if not args:
    yield ""
    return
  for i in args[0]:
    for tmp in fg(args[1:]):
      yield i + tmp
  return

このreturnに何か意味があるのかと思って苦戦。少なくともここでは意味は無いようなのでとっぱらって、さらにどこでgeneratorが「凍結」しているのか分かりやすくするために、for in文内の暗黙的なものを明示的に書いてみた。

def h(args):
    if not args:
        yield ""
    else:
        for i in args[0]:
            gen = h(args[1:])
            itr = gen.__iter__()
            while 1:
                try:
                    tmp = itr.next()
                except StopIteration:
                    break
                yield i + tmp

この関数hは、評価されるとgeneratorオブジェクト(gen)を返す。で、genのnextメソッドが呼ばれた時(gen.__iter__()は恐らく自分自身を返しているので、gen.__iter__().next() は gen.next()と同じ)、初めて関数の中身を評価するのだけれども、yield文(returnのように値を返す)を実行した時点の状態で凍結し、次回にnextメソッドが呼ばれるまでその状態を保持している。だから、StopIteration例外が発生するまではwhile 1:ループの中にいることになる。

nextメソッドの呼び出しと例外の発生が隠蔽されて、頭の中でループを追いかけている最中にどこで凍結しているのか分からなくなっていたのが理解しづらかった原因らしい。で、rdflibのソースコードが異常にシンプルなのにさっぱり意味不明だったのはこのgeneratorが原因だったわけで、ようやく色々弄れるようになった。

というか検索用にPython