たぶんやらないけど、やりたいことを書いとく。

  • まず libxml-ruby を捨てて REXML を使う。もともと libxml-ruby を使おうと思ったのは REXML が名前空間をまともに処理してないからだったんだけど、名前空間とかどうでもよくなった。んで、libxml-ruby は Pure Ruby じゃないのでいちいち環境間で面倒くさい。REXML は標準添付だからその辺は心配ない。できるだけ Pure Ruby じゃない外部ライブラリを使わないようにしたい。
  • ちゃんとライブラリ化する。
  • 公開できるようにする。
  1. トップ
  2. taglibro
  3. taglibro の今後の予定
  1. トップ
  2. site
  3. taglibro の今後の予定

前々からいちいちあのクソながったらしい evaluate を書くのがだるかったのでちゃんと関数はさむようにした。

大きなバグがあります。詳細はXPath, $X function, NSResolverに書きました。以下のコードは非推奨です。

$X = function (exp, context) {
if (!context) context = document;
var result = document.evaluate(exp, context, null, XPathResult.ANY_TYPE, null);
switch (result.resultType) {
case XPathResult.STRING_TYPE : return result.stringValue;
case XPathResult.NUMBER_TYPE : return result.numberValue;
case XPathResult.BOOLEAN_TYPE: return result.booleanValue;
case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: {
result = document.evaluate(exp, context, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var ret = [];
for (var i = 0, len = result.snapshotLength; i < len ; i++) {
ret.push(result.snapshotItem(i));
}
return ret;
}
}
return null;
}
alert($X("//p")); // Array of p elements
alert($X("count(//node())")); // => node number
alert($X("count(//body) = 1")); //=> must be true
// Firefox が嫌いになる GM スクリプト
if ($X("contains(string(/), 'Firefox')")) {
alert("I LOVE FIREFOX!");
}

これでコピペ地獄から開放される。

  1. トップ
  2. xpath
  3. JS の XPath
  1. トップ
  2. js
  3. JS の XPath

まえのとあわせて

$N = function (name, attr, childs) {
var ret = document.createElement(name);
for (k in attr) {
if (!attr.hasOwnProperty(k)) continue;
v = attr[k];
if (k == "class") {
ret.className = v;
} else {
ret.setAttribute(k, v);
}
}
switch (typeof childs) {
case "string": {
ret.appendChild(document.createTextNode(childs));
break;
}
case "object": {
for (var i = 0, len = childs.length; i < len; i++) {
var child = childs[i];
if (typeof child == "string") {
ret.appendChild(document.createTextNode(child));
} else {
ret.appendChild(child);
}
}
break;
}
}
return ret;
}
var pq;
document.body.appendChild($N("div", {}, [
$N("div", {style:"font-weight:bold"}, "foobar"),
$N("div", {}, [
pq = $N("ol")
])
]));
for (var i = 0; i < 10; i++)
pq.appendChild($N("li", {}, "hoge");
var div = $N("div");

みたいなのを使ってる。

innerHTML を使いたくない (application/xhtml+xml では一切使えない) けど、document.createElement の嵐はキモイ。中間とって GreaseMonkey のテンプレート (xyzzy の拡張 lisp を入れてる) にごちゃごちゃ書いてしのいでるます。

  1. トップ
  2. js
  3. 簡易ビルダー

GMwindow.addEventListener("scroll", fuction (e) {}, false); とかやってみたんだけど、どうもページごとにイベントが発生したりしなかったりする。なんでだろう。全然わからない。

例えばこのサイトだと、日記のページは全てイベントが発生しない。で、/about とか /xbel とかはちゃんと発生する。

  1. トップ
  2. js
  3. scroll イベントが起きたり起きなかったり

例えば就職するときには (別にバイトでもなんでもいいけれど) 自分を売り込む必要がある。自分がこういう能力をもっていて、こういうことができることを、自信を持って言わなければいけない。相手に自分を認めさせる必要がある。

でも、その能力があるとかっていう自覚・自信をどうやってつければいいんだろう。自分で自分を認めて自信をつける場合、よくある自信過剰パターンに陥っている場合が殆ど。だから、他人に認めてもらう必要があるのだけれど、他人に認めてもらうには売り込む必要がある。売り込むには自信がいる。無限ループ。

しかも、自信っていうのは時間がたつにつれて薄れていく。もっと自分より若い人達が現れてすごいことをやるし、あるいは世界が広がってもっとすごい先輩を発見することになる。

で、そういう感じで、まぁいいやって思えてくると就職というかバイトさえできなくなる。人前というか面接だと平気で嘘をつけるので、その嘘をあとでどうやって回収するかを想像してどうにもこうにもいかなくなる。嘘じゃなくなるまで腕を磨くとか、そういう方向になるけど、結局上には上がいる以上嘘は嘘のままになる。

例えば Ruby が書けるっていったらあたりまえだけど Ruby が書けないとだめだ。でもどのレベルから Ruby が書けるっていえるのかが全くわからない。人によって違うだろうし。例えばだから、Ruby に限らない。プログラミングができるっていうのはどのレベルからなのか、ウェブデザインっていうのは何を指しているのか。相手に聞けよ、というのは解決にならない。相手に聞く段階には既に自信が必要だし、嘘をつかないといけない情況になっている。

中には嘘をあとから本当にすればいいという人もいる。でもそれは自分で撒いた嘘に追われる形になる。強制的に嘘によって何かをやらされることになる。そういうのはだめだ。何かをやらされているなんて感じるのはだめだ。もっと能動的に動かないといけない。でもまたそこで必要なのが自信だ。人前で能動的に動くには自信が必要になる。無限ループ。

はいどうしよもない。ただ、どうしよもないからといって諦めてもいい問題じゃないのが鬱陶しい。誰もが働かないといけないから、自分もその例外じゃないのだ。

  1. トップ
  2. life
  3. 自信はどこからやってくる?
  1. トップ
  2. thinking
  3. 自信はどこからやってくる?

クラウド表示させた VIP

rep2 のスレッドリストに雲を表示する GreaseMonkey スクリプト rep2-cloud.user.js

インストールしたら設定で include の設定しないとだめです。もしかしたらデフォルトの rep2 ではだめかも。勢いが表示されてないとだめです。

  1. トップ
  2. 2ch
  3. 2ch cloud / rep2
  1. トップ
  2. web
  3. 2ch cloud / rep2

最初聞いたときは、最後の「望んだ世界はどうだった?」の意味を完全に無視して、プロポーズ系の唄なんだろうか、とてきとーに考えてた。

聞き込むにつれて「望んだ世界はどうだった?」がどう考えてもキーになっているように感じはじめた。というか明らかに文脈が違う。

それで、もしかしてそれまでの綺麗だったりする部分は全部「望んだ世界」で、悪魔が、夢を見せた後に「望んだ世界はどうだった? (そして今の情況を見てみろよ)」訊いているような解釈をした。ようは MARCH 系。

  1. トップ
  2. music
  3. 指輪 / BURGER NUDS, 自分の印象

だいたい固定されたので書く。でも書かないほうがいいかもしれない。基準が曖昧だ。だから、曖昧に書く。

当たり前だけれど、正しい解釈は存在しない。いや、間違った解釈は存在しない。感じたままでいい。だから、もし指輪を聞き込んでいないなら、なおさら読まないほうがいいと思う。

指輪は BEST に収録されており、解説がついているから、それを参考にする。っていうかこの解説が既に意味不明なのがどうもこうも。ぎりぎりセーフってなんだよもう。

解説には三つのヒントがある。それは「指輪」が、「いつでも振り返る事で新しいステップを踏み出す力をくれる、思い出」を唄っているということと、「望んだ世界はどうだった?」は過去の自分による今の自分への問いかけであるということ、そして「望んだ世界」は今の自分にとって「どうしよもないもの」であること。これを前提にして考える。

最初の部分は悪い状態の自分に関するところ。子供たちは残酷に笑う 皆いつか 大人になるから だけど気負ってない こんな眼はしてない までのところ。「大人になるから」とあるけど、たぶん「大人になるのに」という意味だと思う。大人になって汚くなっていくことが決まっている子供たちを見つつ、汚くなっていくことに対して気負いがない純粋さが、自分にとって残酷である、ぐらい。子供たちは気負っていないけど、自分は気負っているわけだ。汚くなりかけの時期に、汚くなりたくないことを望んで。

そいで少し飛ばして 何か忘れたろ? そんな眼をしてるだ。自分は何かを忘れている。あとでもう一度この問いかけが繰り替えさえれるけど、その忘れたモノをしっかり思い出すことが「指輪」の目的である。

忘れたものを思い出すために、ピカピカのピンセットで腐乱した情熱の解剖実験をする。解剖実験は記憶をほじくりかえす作業そのもの。

で、思い出したのが「あの日細い指に 錆びた指輪をして 全てに笑いかけたろ」なわけだ。笑いかけているのはまだでてきていないけど「君」なはず。「君」って誰だかわからないけれど、とりあえず綺麗なので女の子ってことにしとく。いやどうでもいい。ここで重要なのはもちろん「錆びた指輪」だ。「錆びた指輪」はおそらく「腐乱した情熱」と同じもの。「君」は腐乱した情熱をもっていたのにも関わらず、笑っていた。

何を恐れてんだよ 錆びた指輪でいい 気取っている場合じゃないだろ 「錆びた指輪」は「腐乱した情熱」と読み替えてもいい。「気取っている」というのは、純粋なままであろうとするということ。腐らないように、錆びないように生きていくことが「気取っている」こと。

ここで戻るけど いつかここは地獄と言ったろ それは嘘で実はよく分からない 別に気取ってない そんな不快じゃない がわかるようになる。いつかここを地獄といった。地獄というのは腐乱した、錆びた世界について自分が持っているイメージだ。でも、だんだん気持ちが変わってきている。腐乱していて、錆びている世界でもいいのかもしれないと思い始めている。気取っていない、すなわち、自分の素をさらけ出した状態でも、「そんな不快じゃない」と思えるようになった。という変化。

何を忘れたの? それを確かめなきゃ 「生きる意味」も軽いだけ ここでまた忘れたものは何かという問いかけがある。ピカピカのピンセットで腐乱した情熱を解剖して、思い出し、確かめないといけない。気負ったまま、笑えないままでは「生きる意味」も軽いのだ。

そして「あの日細い指に」と入る。君は指輪をして 世界一の笑顔で -snip- 「全て」に笑いかけたろ。「君」は錆びた指輪をしつつも、世界一の笑顔で笑っていられた。腐乱した情熱の中に、硬いガラス玉のようなものを持っていられた。硬いガラス玉というのは、すなわち忘れたモノである。記憶の中の「君」を通して、忘れたものを見つけられた状態が最後の部分。変わっていない部分があるということに気付く。

それで最後に「望んだ世界はどうだった?」だけど、「望んだ世界」がなんだったかというと、純粋なままでいられる世界・純粋なまま生きていける世界。でも、結局どう転んでも、変わらない部分があることがわかっていれば、表向きが腐ろうが錆びてしまおうが、あまり関係ないわけだ。だから、そういう世界にこだわっても無駄だし、「どうしよもなかったもの」と笑い飛ばせる。

つまり、自分が腐ってしまった、あるいは、腐ってしまうかもしれないと思うときに、いつまでも根底に変わらないものがあることを思い出させるのが「指輪」なわけだ。終わり。

「プラチナ」について言及しなかったけれど、それはぶっちゃけよくわからないから。腐食に強い金属の代表かな? エンゲージリング (マリッジリング) によく使われるからかしら。安直だけど

「全てに笑いかける君」という非現実さと、「冷たい水を求める」理想感と、「腐るしかない」ということを暗示させる現実感が共存しているのが美しいと思う。

  1. トップ
  2. music
  3. 指輪 / BURGER NUDS

かさはもっています。ふくはぬれていません。

拙い言葉で理解しあった気分になれるのがインターネット。あいまいでいい。程度の違いでしかないのだから、今なんとなくいい感じなら、それでいい。

家にいながら、てきとーにコミュニケーションがとれる。面倒くさい話に巻き込まれないようにすれば、巻き込まれなくてすむ。いつの間にか巻き込まれているなかで、どうでもいいことに発言を求められるのは面倒くさい。

  1. トップ
  2. music
  3. いんたーねっと、コミュニケーション refusal desire
  1. トップ
  2. net
  3. いんたーねっと、コミュニケーション refusal desire
  1. トップ
  2. thinking
  3. いんたーねっと、コミュニケーション refusal desire

ずっと collect を使ってきたんだけど、マイノリティなのか。

今日 Symbol#to_proc 関連で map をよく見かけたから、map ってなんだっけーとか思いつつリファレンスをひいたら、あら不思議、collect のシノニムだった。IRC でそんなこと言ってたら「collect ってむしろなんだよ」的で驚いた。

map のほうが短くていいからこれからは map にしようかと思いつつ、やっぱどうも map に慣れないいやそれは当たり前だけど。

そもそもなんで collect を使い始めたんだろう。謎だ。リファレンスマニュアルで map より上にあるからだろうか。

あーそうだ。一応忘れないように印象を書いておいてみる。ちなみに俺は数学がわからんちんな坊やなので、map が写像だとかってのは微塵も知りませんでした。いやもだめすぎなんですが、その辺を考慮してください (謎)。

map ってなんか戻り値が予想できない感じがする。配列の各要素にブロックを適用する (脳内での map のイメージは適用だった)、までは名前から分かるのだけれど、そのあとどうやって返ってくるのかが直感的にわからなかった。

対して collect は、集めて配列にするみたいなことが名前からわかるので戻り値は直感的だった。ついでに配列のメソッドにブロックを与えている時点でブロックを適用する感じを醸し出していたので、動作が予想できる感じ。

書くなら断然 map のほうが楽だなぁ……

ちなみに collect, find, select を使ってる。find_all じゃなくてなぜか select, detect じゃなくてなぜか find。この場合 finddetect にして語尾を統一すべきか。

マイノリティじゃないかも。

Rubyist Magazine - Rubyist Hotlinks 【第 1 回】 最初は map はなかったみたいだ。だから collect のほうが上にあるのか。

  1. トップ
  2. ruby
  3. Ruby, collect or map