NULL::something

Login via flickr, はてな, TypeKey.

2006-03-01

てきとう E4X

どうにも使い道が少ない 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 のハンドラぐらいでしか使えなくてなんともかんとも。もちろん生成するのは自由なんだけど……

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

Inserted at 2006-03-01T15:10:04+09:00

Trackback URI: http://lowreal.net/logs/2006/03/01/1.trackback

2006-03-02

はてブと del.icio.us を同時に使うように

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 側の操作ははてブに反映されません。「はてなをメインにして」はそういう意味です。

Inserted at 2006-03-03T23:55:39+09:00

Comments (1)

komagata's image
komagata says:
便利に使わせていただいてます。 ありがとうございまーす!
2008-03-13T22:05:18+09:00

Trackback URI: http://lowreal.net/logs/2006/03/02/1.trackback

はてダ の2カラムさえ

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

GM ばっか書きまくり!!

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

Trackback URI: http://lowreal.net/logs/2006/03/02/2.trackback

2006-03-03

コメントのポスト方法をちょっと変更

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

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

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

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

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

Inserted at 2006-03-04T02:07:02+09:00

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

Inserted at 2006-03-04T02:14:01+09:00

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

Inserted at 2006-03-04T11:29:24+09:00

Trackback URI: http://lowreal.net/logs/2006/03/03/1.trackback

2006-03-04

なんかもうめんどうくさい

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

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

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

Trackback URI: http://lowreal.net/logs/2006/03/04/1.trackback

2006-03-06

ruby-xslt の parameters=

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

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

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

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

Trackback URI: http://lowreal.net/logs/2006/03/06/1.trackback

2006-03-07

外部認証

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

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

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

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

Comments (4)

25514198@N00's image
cho45 says:
てst   てst
2006-03-08T14:52:02+09:00
's image
ne1 says:
認証なし てすと
2006-03-08T14:52:40+09:00
cho45's image
cho45 says:
TypeKey てすと
2006-03-08T14:57:32+09:00
cho45's image
cho45 says:
test
2006-03-08T15:00:57+09:00

Trackback URI: http://lowreal.net/logs/2006/03/07/1.trackback

秘密がある。HIMITSU GIRL。ヘッドフォン

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

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

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

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

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

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

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

Trackback URI: http://lowreal.net/logs/2006/03/07/2.trackback

あひるほしい!

最近あひるが欲しいです。モニタの前においてお話したい。だっくたいぴんぐ

Trackback URI: http://lowreal.net/logs/2006/03/07/3.trackback

2006-03-08

認証付きコメント実装

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

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

Comments (2)

's image
ne1 says:
Flickr でログインして無いのに、「あなたは Flickr 経由で、 としてログインしています。」と出ました。   1) Flickr へのリンクをたどる 2) ブラウザの戻るで戻ってくる 3) F5 で更新   で再現できます。Windows XP + Firefox 1.5 です。 この状態でコメントしたけどどうだろう。
2006-03-08T17:53:00+09:00
25514198@N00's image
cho45 says:
あ、ほんとですね。直しました。 セッション保存のタイミングがまずかったみたいです。 ありがとうございます。
2006-03-08T19:10:46+09:00

Trackback URI: http://lowreal.net/logs/2006/03/08/1.trackback

Ajax では URL が変わらない?

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

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

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

Comments (4)

iwaim's image
iwaim says:
> Ajax では URL が変わらない?   誰がそんな謎発言を。
2006-03-08T18:10:47+09:00
25514198@N00's image
cho45 says:
特にコレって指して書いたわけじゃないです。 たまにソレっぽい感じのコメントやらを見かける気がします。誤読かもしれませんがっていうか誤読の可能性のほうが高いですが!
2006-03-08T19:12:36+09:00
14146301@N00's image
gorou says:
> Ajax では URL が変わらない? Ajaxなアプリだとpermalinkが作れないと誤解してる人多いですよね。
2006-03-09T00:42:30+09:00
25514198@N00's image
cho45 says:
しかしハッシュ書き換えてもリロードされないの知ったのは結構最近だったり!(わらい location.hash = ってできると思ってなかったんですよね。location のプロパティって読み取り専用なイメージがなぜかあって。思い込み激しい。思い込み怖い
2006-03-09T12:26:23+09:00

Trackback URI: http://lowreal.net/logs/2006/03/08/2.trackback

2006-03-09

説明書を読むのが好き。

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

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

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

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

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

Trackback URI: http://lowreal.net/logs/2006/03/09/1.trackback

2006-03-10

遊体離脱の空耳

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

Trackback URI: http://lowreal.net/logs/2006/03/10/1.trackback

Flickr は親切だった。

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

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

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

Trackback URI: http://lowreal.net/logs/2006/03/10/2.trackback

ログインに使ってるスクリプト

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 にブロックは微妙だった。

Inserted at 2006-03-11T18:51:02+09:00

Trackback URI: http://lowreal.net/logs/2006/03/10/3.trackback

2006-03-11

いんたーねっと、コミュニケーション refusal desire

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

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

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

Trackback URI: http://lowreal.net/logs/2006/03/11/1.trackback

Ruby, collect or map

ずっと 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 のほうが上にあるのか。

Inserted at 2006-03-12T04:18:48+09:00

Trackback URI: http://lowreal.net/logs/2006/03/11/2.trackback

2006-03-12

自信はどこからやってくる?

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

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

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

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

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

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

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

Trackback URI: http://lowreal.net/logs/2006/03/12/1.trackback

2ch cloud / rep2

クラウド表示させた VIP

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

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

Trackback URI: http://lowreal.net/logs/2006/03/12/2.trackback

指輪 / BURGER NUDS, 自分の印象

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

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

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

Trackback URI: http://lowreal.net/logs/2006/03/12/3.trackback

指輪 / BURGER NUDS

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Inserted at 2006-03-13T01:46:10+09:00

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

Inserted at 2006-03-13T04:04:52+09:00

Trackback URI: http://lowreal.net/logs/2006/03/12/4.trackback

2006-03-13

taglibro の今後の予定

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

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

Trackback URI: http://lowreal.net/logs/2006/03/13/1.trackback

Last.fm の他人へのリンクで最近のトラックを表示させる GM スクリプト

pop-up-recent-lastfm.user.js

例えば Neighbours とか Friends のリンクとか

実装がすごい汚い。

Trackback URI: http://lowreal.net/logs/2006/03/13/2.trackback

JSXPath

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

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

Inserted at 2006-03-16T23:19:09+09:00

$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!");
}

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

Trackback URI: http://lowreal.net/logs/2006/03/13/3.trackback

簡易ビルダー

まえのとあわせて

$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 を入れてる) にごちゃごちゃ書いてしのいでるます。

Trackback URI: http://lowreal.net/logs/2006/03/13/4.trackback

scroll イベントが起きたり起きなかったり

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

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

Trackback URI: http://lowreal.net/logs/2006/03/13/5.trackback

2006-03-14

Ruby で、Ruby に限らず

やっぱ最初のころは Ruby のブロック引数が全く理解できんかった。yield をよぶとどこに飛ぶか、とか結構悩むと思うんだ。

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

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

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

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

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

Trackback URI: http://lowreal.net/logs/2006/03/14/1.trackback

2006-03-16

XPath, $X function, NSResolver

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 を使おうとするとこんなもんになってしまうような気もする。

Inserted at 2006-03-16T23:24:33+09:00

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

Inserted at 2006-03-17T02:41:30+09:00

Trackback URI: http://lowreal.net/logs/2006/03/16/1.trackback

2006-03-17

ソースの色づけを復活

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 がないからエラーになる。

Inserted at 2006-03-17T18:15:01+09:00

Trackback URI: http://lowreal.net/logs/2006/03/17/1.trackback

2006-03-18

ソースの色づけを復活 2

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

Trackback URI: http://lowreal.net/logs/2006/03/18/1.trackback

.toSource(), forEach, etc

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 しか書かないから使いまくろう。

Trackback URI: http://lowreal.net/logs/2006/03/18/2.trackback

2006-03-19

A -> Z

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

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

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

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

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

Trackback URI: http://lowreal.net/logs/2006/03/19/1.trackback

2006-03-20

よく使うジェスチャ・最後の日

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

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

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

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

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

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

Inserted at 2006-03-20T01:26:28+09:00

Trackback URI: http://lowreal.net/logs/2006/03/20/1.trackback

何かを書きたい

何かを書きたい。

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

参照リソース

  1. 鋼鉄の朝 / BURGER NUDS
  2. センチメンタル過剰 / NUMBER GIRL

Trackback URI: http://lowreal.net/logs/2006/03/20/2.trackback

成績通知がきたよ

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

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

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

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

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

Trackback URI: http://lowreal.net/logs/2006/03/20/3.trackback

2006-03-22

textarea の大きさの呪縛から逃れるための GM スクリプト

expand-textarea.user.js

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

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

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

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

Inserted at 2006-03-22T01:03:58+09:00

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

Inserted at 2006-03-22T01:26:36+09:00

Comments (2)

's image
ne1 says:
sdfsdf sdf sdf sdf sdf sdf sdf
2008-08-18T16:21:22+09:00
's image
ne1 says:
sdfsdf sdf sdf sdf sdf sdf sdf
2008-08-18T16:21:23+09:00

Trackback URI: http://lowreal.net/logs/2006/03/22/1.trackback

ソースの色づけに伴い

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

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

Trackback URI: http://lowreal.net/logs/2006/03/22/2.trackback

mabinogi, ポポスカートについて

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

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

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

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

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

Trackback URI: http://lowreal.net/logs/2006/03/22/3.trackback

2006-03-23

Creative Commons on Flickr

サイトの 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 で公開していたことを証明してくれるんだろう。定期的に巡回してライセンス表示を確認して、「まだ大丈夫だ」なんてビクビクしながら利用しないといけないんだろうか。<