どうにも使い道が少ない E4X をちょっとメモる。

基本的に XPath (の省略記法) に似ているので、相違点とかあげつつみたいな。XPathE4X に似せるため省略記法を使います。省略しないと全然違う

var doc = <root>
<foo>hoge</foo>
<bar>huga</bar>
<baz>
<foo name="neko">
<bar>pqpq</bar>
</foo>
</baz>
</root>;
doc.baz..foo
/root/baz//foo
E4X ではルートノードがない。
doc..foo.(@name == "neko")
//foo[@name = 'neko']
E4X では括弧の前にドットがいる。括弧の中は ECMAScript の式そのまま。すなわち or||, and&&
doc.*
/root/*
* はそのままの意味。@* もそのまま書ける。
doc..foo[0]
//foo[1]
数値は普通の ECMAScript 配列とかとと同じように 0 基準。
doc..foo.length()
count(//foo)
XPath の例はどうでもいいけど、数を知りたいときは length() を使う。括弧をつけず length と書くと length 要素を選択しようとするので注意が必要。

for each とかいう構文がある (構文?)

for each (ele in doc.*) {
// hoge
}

XMLList とかいうオブジェクトがある。無名の要素をルートにして作る。ちょっときもい。

// XMLList (DOM の DocumentFragment みたいなの)
var xmlList = <>
<li>1</li>
<li>2</li>
<li>3</li>
</>;
var doc = <root>
<li>999</li>
</root>;
doc.appendChild(xmlList);
doc.toString() //=>
<root>
<li>999</li>
<li>1</li>
<li>2</li>
<li>3</li>
</root>

名前空間

var rssDoc = <rdf:RDF
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel rdf:about="http://example.com/">
<title>Example</title>
<link>http://example.com/</link>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://example.com/3"/>
<rdf:li rdf:resource="http://example.com/2"/>
<rdf:li rdf:resource="http://example.com/1"/>
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://example.com/3">
<title>ex3</title>
<link>http://example.com/3</link>
<dc:date>2006-03-01T13:52:32+09:00</dc:date>
</item>
<item rdf:about="http://example.com/2">
<title>ex2</title>
<link>http://example.com/2</link>
<dc:date>2006-03-01T13:52:30+09:00</dc:date>
</item>
<item rdf:about="http://example.com/1">
<title>ex1</title>
<link>http://example.com/1</link>
<dc:date>2006-03-01T13:52:24+09:00</dc:date>
</item>
</rdf:RDF>;
var rdf  = new Namespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#");
var rdfs = new Namespace("http://www.w3.org/2000/01/rdf-schema#");
var rss  = new Namespace("http://purl.org/rss/1.0/");
// var dc   = new Namespace("http://purl.org/dc/elements/1.1/");
for each (i in rssDoc.rss::channel.rss::items.rdf::Seq.rdf::li) {
var item = rssDoc.rss::item.(@rdf::about == i.@rdf::resource);
alert(item.rss::title);
}

見ればわかるように Namespace オブジェクト作って :: を解決に使うみたい。使わないなら別に宣言しなくてもいい。あくまで E4X でアクセスするために名前をつける (=変数に代入する) ので、別にどんな名前でもいい。

var h = new Namespace("http://www.w3.org/1999/xhtml");
default xml namespace = h;
var HtmlDoc = <html>
<head>
<title>E4X</title>
</head>
<body>
<h1>for (;;)</h1>
</body>
</html>;

みたいなこともできるみたい。

XPath における following-sibling 軸のようなメソッドはないっぽい?とりあえず眺めてみたらないっぽい。よくわからん。

しかし、GreaseMonkey で E4X を使うにしても、XMLHttpReqeust のハンドラぐらいでしか使えなくてなんともかんとも。もちろん生成するのは自由なんだけど……

@ の働きがいまいちわからない。ちゃんと仕様読もう

  1. トップ
  2. e4x
  3. てきとう E4X
  1. トップ
  2. js
  3. てきとう E4X

CGI 設置するのとかめんどいので xpost-del-hatena.user.js, GM スクリプトにした。

はてなの認証方法がややこしいので、はてなをメインにして、del.icio.us をスクリプトで同期するように。新規ブックマーク, 編集, 削除がそれぞれ del.icio.us にも反映される。ただ、編集の場合、del.icio.us で上にあがってしまう問題がある (はてなの編集画面にはポスト時刻が表示されないのでめんどい)。

最初なぜか API 使わないで実装してた。頭が悪い

ちょっと補足します。

Fx 1.5.0.1 + GreaseMonkey 0.6.4 ではとりあえず動いています。中身で無駄に E4X 使っているので、1.5 未満では絶対に動かないです。

ついでに動いてても何も言われません。淡々と del.icio.us に追加されたり削除されたりします。(最初の一回は del.icio.us の API Basic 認証がでます。これには del.icio.us のユーザ名とパスを入れます。)

del.icio.us 側の操作ははてブに反映されません。「はてなをメインにして」はそういう意味です。

  1. トップ
  2. js
  3. はてブと del.icio.us を同時に使うように
  1. トップ
  2. gm
  3. はてブと del.icio.us を同時に使うように
  1. トップ
  2. net
  3. はてブと del.icio.us を同時に使うように
  1. トップ
  2. web
  3. はてブと del.icio.us を同時に使うように

はてダ の2カラムさえなんか邪魔になってきたので ignore-hatena-2c.user.js 書いた。

GM ばっか書きまくり!!

GM の Edit ボタンが効かなかったんだけど、改めて about:config で設定しなおしたら使えるようになった。前より簡単につくれる><

  1. トップ
  2. web
  3. はてダ の2カラムさえ

Ajax るようにした。UI がイマイチ。

  • Comments を押したらとりあえず消えて欲しい。
  • 投稿したあとガックンってなるのがちょっとキモイ。

なんかいい方法はないかなぁ。

Opera でおかしい。めんどいので Opera はじく。

なんだか、この今のスタイルがまずだめみたいで、Opera だと挙動不審になる。

クッキーに保存を実装しろといいたい。誰に。俺に。

Ajax のほうのフォームはクッキーに保存するようにした。Singleton Cookie オブジェクト

  1. トップ
  2. js
  3. コメントのポスト方法をちょっと変更
  1. トップ
  2. ajax
  3. コメントのポスト方法をちょっと変更
  1. トップ
  2. site
  3. コメントのポスト方法をちょっと変更
  1. トップ
  2. web
  3. コメントのポスト方法をちょっと変更

なんか静的に XSLT で変換している /about とかの再構築さえめんどうくさくなってきた。動的にしたいなぁ。

って思って簡単な CMS (といえるものじゃない) を作ったんだけど、なんかいまいち使う気になれない。こうね、IPv4 と IPv6 の違いみたいになっちゃって、ね。要するに互換性がなくてめんどい。もちろんそれだけじゃなくて、URL とかを変えたくないから、mod_rewrite で全て CGI に渡すハメになるんだけど、なんで CGI でウェブサーバを再実装みたいなことをしないといけないんだって感じに。

もうね。例えばこれが自分のサーバーで、lighttpd で動いてて、FastCGI を使えるなら、まだ導入する気にもなれるんだけど、ね。だめね。もっと考えないとね。

  1. トップ
  2. site
  3. なんかもうめんどうくさい

parameters= に渡す値はすべて自分でクオートしとこう。

libxslt はもともとパラメータの値に XPath そのまんま書けるんだけど、なぜか ruby-xslt の parameters= ではクオートして必ず文字列で渡す。しかしながら、なんかこのクオートの実装が狂ってて、自分でクオート付け足してる癖に Invalid expression とか言い出してくれちゃう。やれやれだぜ!

正確に言うとクオートを付与する段階で、与えた文字列を中途半端に破壊的に変更するらしく、クオーテーションがかたっぽだけ付く。セッションとかで保存させながらのコードでもうハマったハマった。dup してどうにかしたけど、自分でクオートして明示的に文字列にしたほうがよさげ。

ソースは読んでないので間違っているかも。あくまで挙動からの推測

  1. トップ
  2. xslt
  3. ruby-xslt の parameters=
  1. トップ
  2. ruby
  3. ruby-xslt の parameters=

外部認証をコメント投稿に導入したくていろいろやっているんだけど、なんともかんとも。

Flickr, TypeKey を用いてログインするところまでは作った。とりあえず、コメントを投稿するとき、アイコンやら、名前やらもそのまま記録するような方式のをやってみたのだけど、やっぱ認証サービス側で名前とかが変わったら、こっちの過去の名前とかも変えたいなぁ、と思った。

サービス名と、サービス内で特定できる ID だけをコメントの情報につけて、ログインするごとに他のデータを更新するような感じにしたい。でもめんどい。RDB でテーブル複数つくって関係付ければ簡単なんだけど、いかんせん全てのデータを XML に入れてしまっているのでめんどうくさい。かなり重くなるだろうし……

というところで、諦めて全部一気に保存して更新しないようにするか、ちゃんと更新するようにするかで悩む

  1. トップ
  2. web
  3. 外部認証

ZAZEN BOYS の HIMITSU GIRL'S TOP SECRET がかっこよすぎる。特にカシオマン。

そういえば、ここ最近 UR/40 を使っていたんだけど、ひさしぶりに ATH-A500 をつけたら付け心地がよすぎて困る。きもちいい。

この前でかけたとき、明大前でアートモニターシリーズの何かのヘッドフォンをつけた人を見た。男だったけど

黒かったけどなんだろ。A900LTD なのかなぁ。男だったけど

もっといかにもゴツイヘッドフォンつけてる人は見かけるけど、アートモニターはあんまり見ないなぁ。男だったけど

見ないなぁっていうか、そもそも外に出ないんだった。男はいらない。

どうでもいいけど、女子高生って存在しないんだってね。最近知った。よく考えてみると女子高生なんて見たことなかったんだ。見たっていうおぼろげな記憶は妄想だったみたいだ。でもさ、もし女子高生の存在を信じている人がいても、余計なことは言わないようにしようと思う。サンタクロースの存在を信じるのも、女子高生の存在を信じるのも、夢があっていいことだからね。

  1. トップ
  2. music
  3. 秘密がある。HIMITSU GIRL。ヘッドフォン

この日記にもつけてみた。

結局大して書く人がいないだろうってことでログインごとにユーザー情報を保持している XML を更新し、それを XSLT から document() 使って読み込むようにした。

  1. トップ
  2. web
  3. 認証付きコメント実装
  1. トップ
  2. site
  3. 認証付きコメント実装

そうとは限らないし、ちゃんと変わったほうがいいことも多い。

Ajax なりなんなりを含めて、JavaScript でいいことって画面遷移がないことであって、URL が変わらないことじゃない。

UI の補助ではなく、コンテンツを書き換える場合はむしろ URI は変わったほうがいい。要はあとでそのリソースにリンクを貼りたいとき、困るか困らないかが分かれ目だと思ってる。

  1. トップ
  2. ajax
  3. Ajax では URL が変わらない?
  1. トップ
  2. js
  3. Ajax では URL が変わらない?
  1. トップ
  2. web
  3. Ajax では URL が変わらない?

結構説明書読まない人って多いみたいだ。

小学生のときはそれこそ読まない人が全く理解できなかったけど、最近説明書を読みたくないときがあって、もしかしたらこういう感じなのかなぁって分かり始めたかもしれない。それはなんかとにかくいじくりまわしたい衝動が先にくる感覚だったのだけれど。

まぁでも結局そのあと説明書を最初から最後まで読んだわけです。何ができて何ができないのか、よくやる操作はどうやるのが一番スマートなにかを頭に入れておきたい。結構何度も説明書を読んでいると、新しい機能の発見があったりする。最初は「使わないだろう」って思って見逃しちゃうものを再発見できる。結構楽しい。

仕様書やら、プログラミングのリファレンスなんかもそういう感じでよく読む。一時期は XSLTXPath の仕様書が常に開きっぱなしだった。ECMAScript の仕様書 (日本語 HTML 版) はむしろリファレンスとして使ってる。Ruby リファレンスマニュアルは気が付くと何故か上下になんどもスクロールしながら見てる。

暇だからできることだけど、とにかく自分が使うものは隅々まで一応知っておきたい。もし必要な機能じゃなかったら、頭の片隅にその機能があることだけを覚えておけばいい。使い方はまたあとで見ればいいから。

  1. トップ
  2. life
  3. 説明書を読むのが好き。

そういえば、貧困な思考はいつも あなたのパターンを 安易なイメージ処理して のところの最後をしばらくの間「アニメーションにして」と勘違いしていた。

  1. トップ
  2. music
  3. 遊体離脱の空耳

めんどくさがって例外処理しなくても http://static.flickr.com/0/buddyicons/ 以下は全てリダイレクト。

アイコンが設定されていないときは、特別に http://www.flickr.com/images/buddyicon.jpg をアイコンとして使うんだけど、なんとなく面倒くさくてこの処理をしていなかった。というか、どういうレスポンスが返ってくるかわからなかったから放置していた。

で、なんとなくアレしてコレして見てみたら、iconserver=0 がレスポンスされるらしい。例外処理しとくかーって思ったけどリダイレクトだった。細かい配慮ないす。

  1. トップ
  2. net
  3. Flickr は親切だった。

weblogin.rb, 名前失敗したけどもういいや。

そのうち忘れるので使い方をめもる。

@cgi.header を使うことを前提にしてる。

api_keys = {
"Flickr" => {
"api_key" => "Flickr70c55b82e10021ffaaapi_key6",
"secret"  => "Flickrdf5secret3"
},
"TypeKey" => "fsakfsTypeKeyafasAPI"
}
require "weblogin.rb"
@cgi = CGI.new
WebLogin.open(@cgi, api_keys) do |login|
begin
case login.auth
when :login
# login したときの処理
# DB にユーザ ID とユーザ情報を保存したり
end
rescue WebLogin::NoActionError => e
puts @cgi.header("type" => "text/plain")
puts login.services # 有効なサービスの配列
end
end

上のようなのを認証スクリプトとしておいとく。このサイトだと /login.rb がコレ。ログインスクリプトの query_string が logout だったらセッションを破棄してリファラにリダイレクトする。ちょっとアレ。

/login.rb/Flickr?return_path= のようなリクエストをすると Flickr にリダイレクトして認証させる。認証されるとコールバック (Flickr の対応する API key のコールバックには http://example.com/login.rb/Flickr/callback のように指定しておく) にリダイレクトされるので、セッションに情報をセットして、return_path にリダイレクトする。

login.auth は、path_info に何も指定されていなかったりすると NoActionError を投げる。

require "weblogin.rb"
@cgi = CGI.new
WebLogin.open(@cgi, api_keys) do |login|
if login.service
# login している場合
login.service #=> "Flickr"
login.id #=> "25514198@N00"
login.user_name #=> "cho45"
login.profile_uri #=> "http://www.flickr.com/photos/25514198@N00/"
login.icon #=> "http://static.flickr.com/23/buddyicons/25514198@N00.jpg"
login.full_name #=> "Hiroh Satoh"
else
# login していない場合
# id その他上記メソッドは全て nil
end
end

いまいち気持ち悪いんだけどどうにもこうにもわからんのでこんな感じ。ブロックをとっているのはセッションファイルを確実に閉じるため。fcgi 環境で死ぬことがあったのでこういうことやってる。

WebLogin クラスは、それ以下にある、サービス名に対応するクラスをインスタンス化してメソッドを呼び出す。例えば /login.rb/Flickr?return_path=somepath の場合、WebLogin::Flickr.new(@cgi, @session, @api_keys["Flickr"]).auth が呼ばれる。

各サービス名の auth メソッドはサービスの認証画面にリダイレクトする。サービスは /login.rb/Flickr/callback にリダイレクトする。

callback が指定されている場合、インスタンス化されたサービスクラスの callback メソッドを呼ぶ。callback メソッドはユーザ情報をまとめて Hash にして返す。WebLogin はその Hash をセッションに保存して、最初に指定された return_path にリダイレクトする。

いろいろアレなことが思い浮かんだけどあとで考えよう。

new にブロックって一般的じゃないんじゃ?という指摘をうけたので open にした。確かに new にブロックは微妙だった。

  1. トップ
  2. ruby
  3. ログインに使ってるスクリプト

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

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

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

  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

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

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

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

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

例えば 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

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

  • まず 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 のブロック引数が全く理解できんかった。yield をよぶとどこに飛ぶか、とか結構悩むと思うんだ。

each の「使い方」を先に覚えて、実行してみてやっとブロック引数の概念が理解できた。んで、「じゃあ自分で書くときはどうするんだ」とかでリファレンスを読むと yield とか書いてあって、でもそれ以上はリファレンス読んでもよく分からなかったから、てきとーにサンプル作ってみてやっと理解した。

それまで書いていたのが PHP とかいう謎言語だったので、Ruby が余計に神がかってみえた。Perl は読めなかったし、Python は知らなかったし。今は Perl とか Python を勉強しようと思っても、必要性が見当たらなくて書けない。所詮「勉強」にすぎなくなるから、やる気があんまり起こらない。しかし Perl はホントに、本当に読めない。map { hoge } hage {} @foobar みたいなのをよく見るけど、どういう仕組みで評価されてるのかよくわからない。

まぁ、とりあえず、自分は実装を触りながらじゃないとぜんぜん理解できない。頭が悪い上に「自分の今考えてること」に対してかなり不安を覚えるので、すぐにコンピュータで実行させて、考えていることがあっているのか間違っているのかを確定させたい。

あんまり頭の中で構造を考えないで、とにかく動かしてみる。一行書いて、p 書いて、実行して、ってのを繰り返す。しかもこれ、未だにこういう感じなのだ。数行書くごとに実行する。とにかく p を書きまくる。んで、暇なときにリファレンスを眺めて、「こういうことができるのか」ってまた書いて実行してみたりする。

だから、何か作ろうとしていないと、そもそもプログラムを書かないからなかなか理解できるようにならない。Perl も書いてみたらわかるかもしれないけど、Perl を使って書きたいものがない。気がつくと面倒くさくて Ruby を使ってる。だめじゃん。

  1. トップ
  2. prog
  3. Ruby で、Ruby に限らず

JS の XPath なんて書きましたけど、重大なバグがありまして、っていうかなんで気がつかなかったんだろう、えーそれは application/xhtml+xml なページ、すなわち XML として、名前空間をちゃんと扱うページではまともにセレクトできないんですよーははははー、例えばこのサイトとかね。

$X = function (exp, context) {
if (!context) context = document;
var resolver = function (prefix) {
var o = document.createNSResolver(context)(prefix);
return o ? o : (document.contentType == "text/html") ? "" : "http://www.w3.org/1999/xhtml";
}
var exp = document.createExpression(exp, resolver);
var result = exp.evaluate(context, 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 = exp.evaluate(context, 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("//x:p")); // Array of p elements
alert($X("count(//node())")); // => node number
alert($X("count(//x:body) = 1")); //=> must be true

かなり強引に修正してみた。

XPath で要素を指定するとき x という prefix (上のコードの場合は別になんでもいいんだけど、普通は x とか xhtml とかいうのをつける) を必ずつけるようにしとく。使い勝手が悪くなったけど、仕方ない。prefix がないときは resolver をよんでくれないみたいだ。

そう、で、resolver なんだけど、実はただの関数だった。evaluate は prefix を見つけると、resolver に prefix を渡し、URI を返すように要求する。resolver は prefix に対応する URI を返す。null の場合はエラー, "" の場合は、名前空間が null のものとして扱われるみたい (要追試)。

つまり、上のコードの resolver がやってることは、とりあえず普通の場合のように NSResolver を作って投げてみて、ダメだったら contentType にあわせて名前空間を返してやるっていう、かなり強引な (二回目) 方法なわけです。誰かもっと美しくして!

使い勝手が悪くなったけど と書いたけど、XSLT で使うような XPath と同じになった。まぁ名前空間を考慮するとこういうことになるっていう名前空間マジックなんだけど、やっぱり面倒くさいよなぁ。

$X("count(//x:body) = 1")$X("count(//*[local-name() = 'body' and namespace-uri() = "http://www.w3.org/1999/xhtml"]) = 1") みたいに書きたくはないし、HTML なページと XHTML ページとで、同じ XPath を使おうとするとこんなもんになってしまうような気もする。

冷静に考えると x より h のほうがいいや。

  1. トップ
  2. xpath
  3. XPath, $X function, NSResolver
  1. トップ
  2. js
  3. XPath, $X function, NSResolver

pre だけ色付けするようにした。

前に Pure JavaScript で色つけていたことがあったけど、あからさまにブラクラだった。で、なんとなく思いついたのでもっかい別の方法で実装してみた。

なんていうか非常にローテクといいますか他力本願な方法でして、PEAR::Text_Hightlighter に Ajax で丸投げというソリューションでございますです。

<?php
header("content-type: text/xml");
require_once 'Text/Highlighter.php';
require_once 'Text/Highlighter/Renderer/Html.php';
$options = array(
'numbers' => HL_NUMBERS_LI,
'tabsize' => 4,
);
$renderer =& new Text_Highlighter_Renderer_HTML($options);
$hl =& Text_Highlighter::factory($_GET["lang"]);
$hl->setRenderer($renderer);
$ret = $hl->highlight($_GET["source"]);
echo '<div xmlns="http://www.w3.org/1999/xhtml">';
echo $ret;
echo '</div>';
?>

こんなスクリプト書いたら、あとは JSpre 要素列挙して投げてあげる。レスポンスを importNode して、pre と置き換える。みたいな。

でもこんなクソ簡単なスクリプトなのに IE ではちゃんとうごかない。importNode がだめなのか、それとも responseXML から importNode ができないのか……謎。

あーHtml.php の &nbsp; は全部 &#160; に置き換えた。DTD がないからエラーになる。

  1. トップ
  2. js
  3. ソースの色づけを復活
  1. トップ
  2. site
  3. ソースの色づけを復活
  1. トップ
  2. prog
  3. ソースの色づけを復活

GeSHi - Generic Syntax Highlighter を使うようにした。対応言語が多いことと、シンタックスファイルを増やし易いことがいい感じ。ただし時々 well-formed じゃないエラーがでることがあるっぽい。

  1. トップ
  2. prog
  3. ソースの色づけを復活 2
  1. トップ
  2. js
  3. ソースの色づけを復活 2
  1. トップ
  2. site
  3. ソースの色づけを復活 2
  1. トップ
  2. prog
  3. ソースの色づけを復活 2

toSource とかはじめて知った。

GreaseMonkey で設定値保存するときはこれ使うといいね! わざわざ JSON 云々のコピペなんてしなくてよさげ。

var foo = new Object;
foo.bar = "test";
foo.baz = "pqpq";
foo.toSource(); //=> '({bar:"test", baz:"pqpq"})'
(new Date).toSource(); //=> (new Date(1142625169156))
(function () { return ""}).toSource(); //=> '(function () { return "";})'
alert.toSource(); //=> 'function alert() {[native code]}'

ていうか、forEach とかあるのね! やべ。

var sum = 0;
[1, 2, 3].forEach(function (item, index, array) {
sum += item;
}, this); // 第二引数は callback 中の this
alert(sum);

同じように (Ruby -> JS) select -> filter, all -> every, map -> map, any -> some が使えるみたいだ。どうせ Fx 用の GM しか書かないから使いまくろう。

  1. トップ
  2. js
  3. .toSource(), forEach, etc

必要なのは技術じゃないってことは分かっているつもりだけど、俺はその必要なものを手に入れるのが嫌なわけで、そのへんどうにかしないといけないんだけど、その辺どうにかすると俺は俺でなくなるわけで、まぁ俺が考えている俺は所詮誰かが作った俺でしかないんだけどさってことを昨日友達の父親の友人の吉弥さんが言ってた。

コミュニケーション能力が必要とか、そういう話だけど、欲しくないのだ。真面目な話を一対一あるいは、一対多でするのがめちゃくちゃ嫌いなのだ。それって楽しくないから。

ネットワークゲームなんかで、ギルド戦について真面目に議論を交わして揉めているのとか、めちゃくちゃ嫌なわけで、悪いわけじゃないんだけど、単純にああいうのを楽しめない。そういうときはログアウトするんだけどっていうか、ギルド戦とか結局嫌で仕方ないからやらなかったんだけど、っていうかホムンクルスをプログラミングしてみたいんだけど、っていうかアカウントないんだけど、っていうか1500円はたけぇよ、いやこんなの関係ないんだけど。

ネットワークゲームなんかは「ゲーム」であるから、嫌ならばログアウトすればいい。でも実際の面を合わせた情況ではそういうわけにはいかない。そういうわけにはいかない。面を合わせて真面目な話というのは、逃げ道 (例えば相手を認める余裕だったり) を確保することすらぎりぎりのラインだから、本当に話たいことなんて、全く伝わりはしない。もともと伝わらないのがさらに伝わらなくなるわけだ。もういい。

例えばどこから沸いてくるかわからない自信とか、昔はモテたんだぜ今の俺は仮の俺だとか、とりあえず批判しとけとか、とりあえず謝っとけとか、とりあえずお前うざいとか、そういうのが苦手なのでコーヒーゼリー食いたい。

  1. トップ
  2. life
  3. A -> Z

これなしで生きていけないジェスチャ

  1. ← - 戻る
  2. ↓→ - 現在のタブを閉じる (ウィンドウは閉じないようにカスタマイズ)
  3. ↑←↑ - 一つ上の階層を開く
  4. ↑↓ - リロード

思いついたようにときどき壮絶に使いまくるジャスチヤー

  1. Any Gestures + →↑← - Any Gestures でホバーしたリンクをすべてタブで開く。mixi とか、■ばっかり並んでる絵サイトとかで使いまくる。

このホバーしたリンクを全部開くのは魔法ちっくで好き。こうね、杖をふる的な、ね。

だいじなことを書き忘れていた。ようするに言いたいことはハーマイオニー可愛いよってことで、それ以上でも以下でもない。

  1. トップ
  2. soft
  3. よく使うジェスチャ・最後の日

何かを書きたい。

  • 理想の女性像を明確に想像できないことに気付いた。萌える女の子は明確だけど、あぁだめだ自分きもすぎる。
  • なにかしら美しいものを見つけたい。
  • 目を閉じるととにかく手がある。
  • 俺は正常かつこの上なく普通な人間である。
  • 日記が日記として機能しなくなるのは悲しいことだ。
  • タイミングさえあっていればあとはてきとーでもいい。
  • それっぽい口調が重要らしい。
  • 名前が重要であって中身は重要じゃない。
  • だからそれっぽい口調では書きたくないし、名前もてきとーなままにしておきたい。
  • 俺がなぜウェブに日記を書くというキモイ行動をしているかを、誰かは考えない。
  • それでいい。余計な分析はいらない。
  • 表に出していいものと、出すべきじゃないのがある。
  • 分かり合えるかもしれない、ぐらいの状態でコミュニケーションを止めるべき。
  • 他人に気を使うのは果てしなく面倒くさい。
  • 自分で考えることができる可能性をすべて考慮しても、考慮しすぎるということはない。
  • グロゲーと殺人ゲーは苦手。
  • 誰か一人でいい。
  • まいっか。
  • あらゆるやるべきことに対してやる気が起きない。それがかつてやりたいことであったとしても、やるべきことになったとたんやる気が起きなくなる。内容じゃなくて、情況・環境がじゅうようなのだ。
  • 別に君に訊いてはいるわけじゃないんだから、わざわざ嫌な顔して答えなくてもいいよ。
  • そんなこと、誰も訊いてないよ。
  • 余計なことは言わないようにしよう。何度決めたかわからないけど、特に、つまらない話に関しては気をつけよう。
  • メレンゲについて何度か書いては消しを繰りかえしているけど、うまく書けない。
  • そういえば 地下室で死んだふりしようよ 外は怖いことだらけ って面白すぎるよなぁ。笑っちゃうよなぁ。このフレーズ大好きなんだけど笑える。日々の唄ってこれだよこれ。これこれ詐欺。
  • はずかしそうに水たまりをよけながら よすぎる。ああ。あああ。
  • Omae Ga Dai-Kirai Da / bloodthirsty butchers
  • マナーについて考えようよ。「マナーについて考えようよ」と何かあるごとに言うのが、真にマナーがない。
  • お察しください。
  • 鯖の金を払ってない。早く払えよ。無駄なことばかり、書きすぎて、腹出てるぜ。そんなこといったって、ケーブル切る気に、なれないなぁ? もうだって、両手は、
  • 誰かの言うことを聞きたくないなぁ。
  • 知りたくないことを教わるのが好きじゃない。
  • だから、ね、あなたに、僕は、何も訊いていないんだよ?
  • (a, b) だったらお前らは
  • 独学できないやつが何できるっていうんだ。やる気があるなら独学でできるだろ。
  • 少し前までは「忙しい」っていう社会人の人は本当に「忙しい」んだと思ってたけど、実際は「忙しい」ぐらい忙しくないってことに気がついた。
  • そこでまた、誰かが言うんだよ「社会人の人」っておかしくね、ってね。
  • やろうとすれば、いくらでも他人を貶すことができるから、何が本当に悪いのかを見極めたい。そのためにまず、何が良いのかを考えたい。
  • ということを力がないうちから言っていると、そもそも生きていけないらしい。つまり、むしろそのことで自分は損害を被るってことさ
  • まぁそれでもいいか。いざとなって耐え切れなくなったら死ねばいいのだ。許可はもらったからだいじょうぶ。
  • どちらかといえば、理想的に生きていたい。現実的だと、何か得をするんかな?
  • 今なら、なんでもできそうだ。忘れないようにしとこう。
  • 今日成績通知がくるだろうけど、それの結果が良くても悪くても、先の数日は地獄だ。結果が良かったらクソやりたくない課題をやらないといけないし、悪かったら
  • やーほんと、課題をちゃんとこまめに出来る人ってすごいよなぁ。そういうシステムってどうやって得たのかな。「課題ができる」ことじゃなくて「課題が進められる」ことがすごい。すごすぎる。どうやったら手に入ったのかなぁ。セーブしとけばよかった。LV30 飽きてきた。
  • 無理さ
  1. トップ
  2. life
  3. 何かを書きたい

必修で落としたのは二科目四単位でした。情報処理概論 (講義に出てない) と、ネットワーク情報概論1 (講義に出てない)

教養 (哲学・論理学) は一つも取れませんでした。講義に出てない。テストも出てない。健康科学論も同じ。

他のとれた科目は A:B:C = 4:9:1 。どうでもいいけど情報処理概論が2点なのが謎い。何よ2って。

ということで課題に追われるほうになりました。よかったね。

CD コースのかたはよろしく。成績見る限り CD に全く向いていませんが、強制グループワークで忍耐力をつけたいと思います。

  1. トップ
  2. life
  3. 成績通知がきたよ
  1. トップ
  2. school
  3. 成績通知がきたよ

expand-textarea.user.js

flickr の textarea がいちいち小さいので作ってみた。textarea の右下のはじっこのほう (謎) をドラッグすると大きさが変わる。

なんで getElementsByTagName を使っていないのかというと、forEach が使いたかったから!! getElementsByTagName が返すのは NodeList であって、Array じゃない。

もうちょいまともにするように修正。

それと「左下」って書いてたのを修正した。ひだりもみぎもわかりませんがなにか?

拡張では Resizeable Textarea 0.1a, Resize textareas to your needs っていうのがあるみたい。ってことを IRCklm さんに教えてもらった。

  1. トップ
  2. js
  3. textarea の大きさの呪縛から逃れるための GM スクリプト
  1. トップ
  2. net
  3. textarea の大きさの呪縛から逃れるための GM スクリプト

コピペのしにくさが激しいので、オリジナルソースへのリンクをつけた。data スキームで飛ばす。

あるいはコピー用の Flash を使ったほうがいいかもしれない。

  1. トップ
  2. site
  3. ソースの色づけに伴い

シュガーレスのスクリーンショット

ポポスカートが好きなんですよ。低価格・高耐久なのに、とても素敵だと思うのですよ。裁縫で作れば防御も稼げるし言うこと無しですよ。防御高いポポスカのために裁縫を7にした感じですよ。メインキャラのポポスカは銘入りですよ。

なんとなくスクリーンショットあさってたらポポスカツーショットが数枚でてきた。

あの世にて白黒ポポスカ*2
少し前のあの世のアルベイ祭壇前にて。一言も喋らず (めんどくさかった) にコミュケーションをとりつつ、とか奇妙なことをやってた。
銀行にてパイオニアと
去年の。ポポスカに関しては、実はこの横に写っている人の影響が強く、勝手に自分の中 (とギルドの一部中) で「ポポスカの先駆者」を呼んでいたりしました。やー、作ったポポスカが気に入ったのでずっと着ていたらなんと向こうから話しかけられまして、先駆者きたーっとギルチャで言ったか言わなかったかしました。たまに見かけますが未だにポポスカのようです。

関係ないけど、画像のレイアウトがうまくいかない。IE で float: right はご法度だし、CSS がだんだんスパゲティになってきて !important が多くなってきて萎える。

  1. トップ
  2. mabinogi
  3. mabinogi, ポポスカートについて

サイトの CSS を一つ前に戻した。とはいえ alternate になっているだけだけれど。

その CSS で使っている画像が All rigthts reserved になっていて、しかも許可をとっていなかったからだ。でもこの写真、もともとは Creative Commons で公開されていたはずなんだよね。いつのまにか All rights reserved になっていることに今日気付いた。(flickr の favorites を整理していた)

こういう場合、俺は派生作品をどう扱えばいいんだろうか。俺は著作権侵害で訴えられる可能性がある?

ここで、例えば訴えられたとき、「俺が見たときは CC でライセンスされていた」と主張しても、確実に証明ができる気がしない。今だって、実は最初から CC じゃなくて、自分の勘違いだったんじゃないか、と自分でも少し思ってしまう。

ライセンス関連の勉強不足のせいか、いまいち途中でライセンスが変わったときの対応方法がわからない。そもそもライセンスを途中で変えていいのかとか、そういうのも含めてよくわからない。厳しいライセンスから緩いライセンスにするのはよさそうだけど、その逆は無理な感じがする。

Flickr の場合、デフォルトのライセンスを設定しておくと、アップロード直後は必ずそのライセンスで一度公開されてしまう。だからもし、デフォルトライセンスに CC をしていたら、少なくとも一瞬はそのライセンスで公開される。

俺の Flickr のデフォルトのライセンスは最初から CC-by だから、途中にあるいくつかの All rights reserved な写真は「あとから変えた」ものになる。だから、一瞬のスキで見た人は俺と同じような思いをしているかもしれない (とはいえ Flickr は何人見たかが表示されるけど)。特別にシビアな理由があってそうなっているわけじゃないから何時でも CC にできるけど、なんか気持ち悪い。

そういう場合は、デフォルトのライセンスを All rights reseved にして、あとから CC に変えないといけないのかな。面倒くさい。Flickr はポスト時にライセンスを指定させるべきで、そのときのデフォルトを設定のデフォルトにすべきなんじゃないかなぁ。緩いライセンスから厳しいライセンスにできないとしたら、だけど、普通に考えるとできるように思えない。(じゃあなんでやってるの、って言われそう)

ライセンスを変えるのは、システム的にはいつでもできる。途中から CC にしようが、All rights reserved になろうが、どうにでもできる。

途中でライセンスを変えられて、権利主張されたら、主張された方はどうしようもないよなぁ。誰が CC で公開していたことを証明してくれるんだろう。定期的に巡回してライセンス表示を確認して、「まだ大丈夫だ」なんてビクビクしながら利用しないといけないんだろうか。

と、一般ピーポーな俺は思ってしまうわけでした。とりあえず完全にライセンスを気にしなくて良い CSS を一枚書かないとなぁ。

  1. トップ
  2. cc
  3. Creative Commons on Flickr
  1. トップ
  2. license
  3. Creative Commons on Flickr

空気が読めない日記 (mixi) をこたえる。久しぶりにバトンだ。

【Q1】今つきあってる人はいる?
えぇ。もちろん nounai サーバーに、ですけれど。名前は教えませんわ。
人じゃなくていいなら Ruby さんとか。
【Q2】今好きな人、気になる人はいる?
BURGER NUDS にでてくる女の子が好きです。nounai。
まじれすすると、そもそも周りに女の子がいません。最後に女性と話したのはいつかな?
【Q3】a:告白した回数 b:告白された回数は?
{a => 1, b => 0} どういうのをカウントするんだろう? 明確に好きだと言ったことはないと思う。あれ、あった気もする。でもあれはカウントしていいんだろうか。あんまり覚えてないんだけど、っていうか、今まで忘れてたけど、最悪だな。とか、まぁ、キラめく世界。君の好きなあの娘の 写真はもうここにはない まあでもキラめく世界 一応カウントしといた。ああ
【Q4】a:振った回数 b:振られた回数は?
{a => 0, b => 0} これもカウント方法がよくわからない。ある意味常に振られているので b は数え切れないとも言えますが!!
【Q5】どんな顔・体の異性が好き?
俯いてはにかむ笑顔が似合う子・黒髪 (というより地の色)・肩幅が狭い子。
黒髪の美しさに気付くべきなんだ (独り言)
【Q6】異性の体で好きな部分は?
髪の毛・肌
【Q7】昔付き合ってた人と復縁する可能性アル?ナイ?
nounai の話ですか?
【Q8】好きな人ができたらどうやってアタックする?
対話
「アタック」とか面倒くさいから、対話のなかで「なんかいいなぁ」って思える人がいい。実際そんな人ってもう現れないと思うけどさ。
【Q9】今告白されたらOKしちゃう異性、今回りに何人いる?
だからそもそも(ry
【Q10】年上・年下どっちが好き?
±2ぐらいがベストだけど、どちらかといえば年上で!
【Q11】浮気されたらどうする?
わからないけど、まぁそんなもんなのかなって思う。でもできれば「そんなもんなのかな」と思わないぐらいの人と付き合いたいものだ。無理だ。
【Q 番外】ずばり今年のちょこれいとの数は?
ちょこれいと? たべたかず? きょうもたべたよ。きのうもたべたよ? せいさんりょうのはなしかなぁ。
【Q12】次にまわす人5人
回せそうな人がだいたい nounai 系なんですが!!

生まれ変われるなら、可愛い女の子に生まれたい。

  1. トップ
  2. baton
  3. 何バトンかわからないけど空気が読めないバトン

自分の写真で CSS 書いても、あんまり面白くない。自分が撮った写真には、自分しかいない。

他人の写真は、少なくとも自分と撮影者の二人が確実にいる。さらに、同じようにその写真をいいと思う人たちにそれぞれがいる。そういうのもあってかで、他人の写真は適度に刺激があって面白いんだと思う。写真って、その人が見ているものを写しているから、他人の視点というのがよくわかる。ただたんに「いい写真だなぁ」と思って、その後自分でその場に居合わせたときどうやって撮るかを比較するっていうのも面白い。

それと写真に直接言葉は書かれていないということ。

写真は曖昧な伝達・表現手段だけど、それゆえに解りあった気分になれる。ひとつの写真を通して、それぞれかなり思うところが違っていても「いい写真だなぁ」と思うところが変わらない。そういうのが重要だと/いいと思うんです。人によって解釈が違う写真 (作品) のほうが、面白い。どの解釈が正しいかなんてチリの価値もないと思う。

あんまり関係ないけど、完全に分かりあう必要性が見出せない。「どこかで分かり合えるはずだ」と思い合って議論をするなら、「どこかで分かり合えるはずだ」っていう部分は共通しているんだから、それでいい感じがする。実際俺はホンモノのちゃんとした、意味のある議論を見たことがないから、議論っていうのがどういうものなのかわからない。でもそれについて、「ホンモノの議論が何か」を議論するつもりはないし、別段わかりたくもない。

話がずれたけど、他人の写真や画像を使って派生物を作るのは面白い。「あーしてみたい」「こーしてみたい」っていうのをできるわけだから、すごくワクワクする。でもこれが All rights reserved なものだと、改変しても公開できなくてつまらない。その「あーしてこーして」っていう欲求よりも、許可をとるっていう行為は遥かに面倒くさい。

そういう面倒くさいうえにつまらない手続きを省いて、純粋に楽しいことをできるから、CC な画像を使ってる。Flickr は Creative Commons 用のページ があって使いやすい。

でもまぁ、途中でライセンスが変わるのが怖くてなんともかんともな感じに今はなっている次第でございます。favorites は増やしているけど!

  1. トップ
  2. license
  3. Flickr の Creative Commons を使う理由

要するに期限切れの日から 35 日たつと開放されるってことかな。30 日の RGP (取り戻し猶予期間) のあと、5 日間の削除保留期間がある。

レジストラのキャッシュ?とかがよくわからない。

  1. トップ
  2. net
  3. ドメインの削除プロセス

なんかうまくいかねーってごちゃごちゃやっていたけど、$stdout.flush しないとだめだった。

あーあーあー CLON - 2005/12/05 に書いてあった……全部読んどくべき!!

Ruby の場合 $| にあたるのは $stdout.sync かな?

  1. トップ
  2. screen
  3. screen backtick with Ruby

スクリーンのスクリーンショット

長い処理させてウィンドウ切り替えたとき、バックグラウンドのウィンドウの処理が終わっているんだかいないんだかが気になるので手を入れた。

何かいい方法があるのかもしれないけど、よくわからないのでごちゃる。

ari's diary - ステータスライン のスクリプトを使っている。

if [ "$TERM" = "screen" ]; then
chpwd () { echo -n "^[_`dirs`^[\\" }
preexec() {
# see [zsh-workers:13180]
# http://www.zsh.org/mla/workers/2000/msg03993.html
emulate -L zsh
local -a cmd; cmd=(${(z)2})
case $cmd[1] in
fg)
if (( $#cmd == 1 )); then
cmd=(builtin jobs -l %+)
else
cmd=(builtin jobs -l $cmd[2])
fi
;;
%*)
cmd=(builtin jobs -l $cmd[1])
;;
cd)
if (( $#cmd == 2)); then
cmd[1]=$cmd[2]
fi
;&
*)
echo -n "^[k$cmd[1]:t^[\\"
prev=$cmd[1]
return
;;
esac
local -A jt; jt=(${(kv)jobtexts})
$cmd >>(read num rest
cmd=(${(z)${(e):-\$jt$num}})
echo -n "^[k$cmd[1]:t^[\\") 2>/dev/null
prev=$cmd[1]
}
precmd() {
#local prev; prev=`history -1 | sed "s/^[ 0-9]*//" | sed "s/ .*$//"  `
echo -n "^[k$:$prev^[\\"
}
chpwd
fi

みたいにした。precmd を追加しただけ。

これで、実行が終わったら$:prevcmd みたいなウィンドウ名になるので一目でわかりやすい気分。

上のスクリーンショットだと、0 が入力待ち (前回のコマンドは sleep) 1 がアクティブで emacs, 2 が sleep 実行中

preexec の処理を利用するようにした。cd の場合にちゃんとディレクトリになるように。

  1. トップ
  2. zsh
  3. screen, zsh, 処理終わったか見たい
  1. トップ
  2. screen
  3. screen, zsh, 処理終わったか見たい

emacs がなかなか使えなかった理由はタブインデントをデフォルトでちゃんとしてくれないからだった。今までは色の設定を変えるのが面倒臭いからだと思ってた。

class Foo
\tdef initialize(hoge, huga)
\t\tfoooooooooooooooooooo(aaaaaaaaaaaaaaa,
\t\t                      bbbbbbbbbbbbbbb)
\tend
end

本当は上記のようにインデント (環境が変わってタブ幅が変わっても問題が起きないタブインデント) をさせたいんだけど、さすがに無理っぽいので、タブの部分だけちゃんとできていればいいことにした。

人それぞれ読みやすいインデント幅は違うから、誰にでも読みやすいソースを書くならタブでインデントすべきだと思ってる。でも全部タブにすればいいってわけじゃなくて、文字幅が重要なところには、ちゃんとスペースを使いたい、みたいな。

そんなにこだわる必要はないんだけど、少なくともタブインデントじゃないとコードを書く気がしないことに気付いた。いやむしろ、タブインデントにすると書きたくなる (謎)

  1. トップ
  2. life
  3. 色じゃなかったんだ。タブだったんだ。
  1. トップ
  2. prog
  3. 色じゃなかったんだ。タブだったんだ。

Shibuya.js Technical Talk #1

俺だけ存在がおかしいですが気にしないように努めます。わろすわろす。

人前で喋るのは中学の部活紹介以来かな。何喋ったかは覚えていないけれど、同級生の部員が俺含めて3人だったのはよく覚えている (内訳:やる気ない部員2, 幽霊部員1)

  1. トップ
  2. js
  3. Shibuya.js でライトニングトークするみたい

BASH Programming - Introduction HOW-TO: 参照テーブル, 11.2 文字列比較の実例

なんで if [ "$X" = "$Y" ] とか if [ x$X = x$Y ] にするのかわからなかったけど、変数がセットされていないときにエラーになるらしいからだった。へー

  1. トップ
  2. sh
  3. シェルスクリプト, test で変数をクオートする理由

コンソール上で IRC するのに Riece を入れてみた。というのも、りなざう使用時にいちいちウィンドウ切り替えるのがめんどいから、端末内で全て完結させたいのだ。

新しいフレームを作るのが、xyzzy だと C-x 5 2 で、emacs だと C-x 6 2 ってところに激しくハマる。いぢめだ。いぢめだ。

うーん。フレームの名前ってひたすらインクリメントされるのかな。一覧の出し方がわからない。

問題は、SKK の確定キーを RET にしていること。ぼーっとしてるといちいち▼と一緒に変換文字列を送っちゃうのだ。困った。C-j を送信にして RET は RET のままにすればいいかな。

  1. トップ
  2. irc
  3. Riece, emacs vs xyzzy
  1. トップ
  2. emacs
  3. Riece, emacs vs xyzzy

レポート書けよ。レポート書けよと書く暇があったらレポート書けよ。あと数日でどうやってレポートやるつもりなんだろうか。まだ一文字も書いてないうえに本も読んでない。本気でやばいんだけど、本気でやる気にならない。困った……いやだなぁ。直前になるまでやらないで。直前になってあひゃあひゃいいながら (実際言うのだ) 課題をやるわけだけど、これでどうにかなってしまう。どうにかならないほうがいいってわけじゃないけれど、もっとやる気を出して生きたい。もう、そういう風に育ってしまったから、今更どうにかできることではないのだけれど。まぁでもほんと留年しなくてよかった。後回しになっただけ感があるし、必修授業のことを考えるとすごくいやな気分になるけど、とりあえずはよかった。

よくわからないかもしれない話をするけれど、まっすぐ歩くというのはめちゃくちゃ難しい。眼を開いていようが閉じていようがまっすぐ歩くのってすごく難しい。磁石があっても難しい。まっすぐ歩いていればいつかたどり着くというのはよくわからない。たどり着く先が目的地ではない可能性のほうが高いように思う。

へりくつなら、なんとでもいえる

やる気のない畑から出してくれようとする人と、やる気のない畑に叩き戻す人がいる。これは良い悪いの問題じゃなくて、そういうシステムのようで、こちらからは (彼らにも) どうにもできない。絶妙のタイミングで叩き戻されたりするから、ちょっと「上手くできたシステムだなぁ」と感心するぐらいだ。これはこれでバランスがとれてしまっているから、もし最初にやる気のない畑に生まれてしまったら、死ぬまでやる気のない畑から出ることは出来ない。でようとしても、ひっぱられたり、たたきもどされたりするだけだ。

へりくつなら、なんとでもいえる

ある展覧会に (レポートのため) 行ったのだけれど、やる気に満ち溢れていてなんか疲れた。それと、すごくいいものを作っていたりするのに、ウェブに公開していないことを残念に思った。もっと楽に公開できるシステム (と検索するシステム) が必要だと思った。今よりもっと楽にならないと、作品作りに集中している人は公開する気にならないと思った。でも、デジタルならともかく、アナログな作品ってどうやったら楽に公開できるんだろうか。

無駄に長いことを書けるようになった。

  1. トップ
  2. life
  3. レポートやれよ
  1. トップ
  2. school
  3. レポートやれよ

なんか YAML の話とか読むと、ことごとく XML が比較されて貶されてて寂しい。

確かに XML ってちゃんと書かないと読みにくいし、名前空間とか意味不明だし、DOM とか面倒くさい。

全ての XMLYAML に置き換えられる的に書かれた YAML の紹介とかもあったりして、なんかアレだなぁって思った。例えば HTML より、YAML のほうが断然書きやすいとか、それは違うよって思った。いやそもそも HTMLXML じゃないからこの話にはあんまり関係ないんだけど。

というかどうも、YAMLXML を比べるのに違和感を感じて仕方がない。なんかうまく言葉に出来ないんだけど、用途が違うんだよなぁ……とはいえ用途が違う、YAML のほうが向いている分野に XML が使われている (例えば SOAP とか XML-RPC とか、そこらの設定ファイルとか) からこういう話になるんだろうけどさ……

だからといって XML は悪い!みたいな勘違いを見たくないよ……なぜなら俺は XML さんが好きだから!

適所適材てのをちゃんと考えたい。まぁ設定ファイルに XML なんて面倒くさすぎてやらないんだけど(w

  1. トップ
  2. xml
  3. XML と YAML

なるほどなぁ、ってすごく思った。だから上手く負けて生きたい。

課題を一つ終わらせた。先は長い。

インターネットを使っていろんなことをやると自分がいかに知識がないかってことが、よくわかる。何も知らないにほぼ等しい。だから例えば、小さなコミュニティに属するべきじゃない。いい気になりやすいからだ。

  1. トップ
  2. life
  3. できるだけ負けるように

オーバーレイでライセンスを表示してみる

flickr-show-licenses.user.js

マウスをホバーさせるとライセンスが表示されるように。

最初はとにかく全部表示させていたけど、さすがに Flickr にアタックかけているがごとく HTTP リクエストするのでホバー起動にしてみた。

  1. トップ
  2. js
  3. ライセンスをずばばっと表示する@Flickr

でも結局、真面目な話が嫌いとかいう話を書くあたり、頭が悪くて性格が悪い。

現在位置を自覚をせんとー結果は容易に予想できるー

こう、<p><q title="hoge">huga</q></p> とか書くと頭痛い。

言葉で細かく説明されても、直感的にわかりはしない。わかるっていうのは結局、過去の自分の経験に照らし合わせて、うまくピースがハマることだから、曖昧さが多く、誰にでも適用できるような説明がいいと思う。勘違いでもいい。でも全てがそうであるべき、とは言わない。法とかは仕方ないしね。

人間とは無理だけど、コンピュータとは分かり合える。なぜかといえば、コンピュータは意見を変えないからで、こちら側が歩み寄るしかないから、かな。それに、変な期待がない。やりたいことをやれればいい、という諦めがあるから、完全に道具として「扱う」ことができる。いやもちろん今のところコンピュータはただの道具なんだけどさ。ソフトウェア

世界はめちゃくちゃ広い。凄い人はいくらでもいる。でも、ずっと楽しんでいられる場所があるほど、世界は広くない。

  1. トップ
  2. life
  3. さっそく矢のようにやる気が失せてくね 「あっそう」って言われて 君にきっと会えるね
  1. トップ
  2. thinking
  3. さっそく矢のようにやる気が失せてくね 「あっそう」って言われて 君にきっと会えるね

金曜日の6時限目に爆睡して、ホームルームでも起きなくて、いつの間にかみんないなくなって、起きたら一人クラスメイトの女の子がいて、「やっと起きた(笑)」って言われる、そんなイベントが欲しい。


(BURGER NUDS の) ミナソコで想像するのって、夕暮れのプールサイドに立って、水底を立ったまま見つめてる、夏制服の女の子だったりする。なぜか赤いワンピースじゃない。半そでのYシャツとあんまり長くない髪。

女の子は水底にピントをあてて、子供のころの思い出を水面に写しているんだけど、はじめたらやめられなくなって、いつの間にか涙が流れてて、日が暮れて、そこで誰かがやっと迎えに来る。みたいな。

ちなみにまだ夏本番ではなくて、ちょうど夏服への衣替えが終わったぐらいの季節。プールのフェンス (緑色で網状のやつ) の周りにあじさいが咲いてる。プールは学校の校舎から少し離れてて、校庭からは見えない位置にある。

キモイなぁ……


どうも日記のアレが上手く書けないので、hr 要素を使うことにした。十分に構造化されていれば hr はいらないんだけど、日記を書くとき、どうしてもそういう構造化までいくと大げさになってしまうので (言い換えれば面倒くさい) フラットな hr を使ってみる。


自分の発言がどうも矛盾していて気持ち悪い。もっと考えよう。もっと考えよう。


どういうのを Geek っていうんだろう。ヲタクはともかく、Geek はいいイメージがするなぁ。


やばいな。ちゃんとキャリブレーションしないと色おかしい。現実逃避したくなるほど色がおかしい場合どうしたらいいだろう。見ているものが信用できないのは怖い。

  1. トップ
  2. life
  3. そろそろミカンの話をしようか