2009年 01月 01日

あけましてもおめでたくない\(^o^)/

1時間ぐらい布団にくるまってみたけど全く眠れない…… 少々先の未来とか想像するだけで恐しくて困る……

ああ、今ちょっと考えていたことが、全く、うまく、言葉に表すことができない。

本当に面白いぐらい何の才能もなくてウケる。いやウケない。

どうあがいたところで、中学・高校生活というものをやりなおせない以上、残りの人生は消化試合に過ぎないような気がしてならない。そういった、青春のときの眼で見る風景というのはもう、全く見ることができないし、そんな一方で今の俺はそれらこそが最も自分の心を動かす体験だと思っている。これから、何をしようとも二番目以下の体験にしかならないのではないか、と思う。

こういうことは、まぁたぶん、俺がこれからマトモに (マトモって何だ) 生きていくのであれば、考えるべきではないし、書きべきことでもないのだけれど、今のところそういう考えがあるのは事実なのだ。

実際のところ、俺が青春というものを経験しなかったせい (というよりは多少は経験したせいで) で、それを理想に勝手にそう思っているだけで、俺が俺である以上は、例え今そういう生活をやりなおせるとしても全く無駄にするのだろうとも思うし、結局隣の芝は青い的な何かだ。


というかどっちにしろやる事は決まってて、結局人生なんてのはばかばかしいネタなのだから、俺がどう思うかどうかに関らず、俺はアホなことやって死ねばいいというだけだ。俺はその過程で発生する一切を、俺が心で楽しいかどうか思うかどうかに関らず、楽しいということにしとかないといけない。

今はてブの非表示 id いくつかなぁと思ったら 26 個だった。思ったより少ない。

[あとで書く] おれが日記を書いてない人とコミュニケーションしたくない理由

そういえば「ゆの」で検索すると[[ゆの in language]]がトップだよ。IRCで知った。

そういえばちょっと前にメインキャラで裁縫7に

裁縫したいからというわけではなくて (裁縫キャラが別にいるので)、単純に Dex:AP の効率がいいスキルがだんだんなくなっているだけという…… 次は楽器演奏1か、調合と薬草学か、どっちも時間かかりそうなので上げおわる前にタイムリミット(謎)っぽい。


あと累積が500を超えた。

だいたい平均転生レベルが 55/21 ぐらいみたいだ。最初の転生は35ぐらいだったから、最近のでだいぶ稼いでる。テーブル変更で1日1.5時間・1週間で60は固いのでだんだんあがっていきそうだなぁ。ペット召喚時間の関係でプレイ時間が制限されるのはいい結構いい区切りがあっていい感じ

あと何か昔入ってたギルドのマスターが復帰したのでギルドに入りなおした。

2009年 01月 02日

そもそもそれを手動でやるっていう発想がないわ……

そういえば、「ぬるぬる動く」って肯定的に使われるけど、自分はどうしても「もっさり動く」っていう意味で考えてしまう

僕はリファラ見るの大好きなのでリファラが表示されないサービスはそもそも使えない

あああ、ケータイに連絡があったことに気付かなかった…… 寝る前に一応確認しとくか、程度なんだよなぁ…… そもそも電源がきれていることが多い。PC 側にも届いてれば気付いてたんだけどなぁ…… (基本的に他人に教えるのは転送メアドなんだけど、返信に返信されるとケータイにしか届かない)

通知がくる的な意味では mixi メッセージでもよかった。一番はやいのは IRC だけども

ケータイの充電器のコネクタが壊れていてとても危うい。うちにこんな小さいコネクタないよ……

2009年 01月 03日

ヤグルマギクっていたってキクでしょー? あたしキク科の花って好きじゃないのよねーってたぶん心の底で思っていたのだけれど、写真見てみたら可愛いくてびっくりした。あと別にキク科の花が嫌いというわけではなくて、イエギク(?)があんまり好きじゃないだけだった

gerry++

itai

2009年 01月 04日

これから! 人生が! もっと! おもしろく! なる!

2009年 01月 05日

本日までに日記をつけた日数はもっとみやすいところにあってもいい気がする

2009年 01月 06日

むー「べっ、別にアンタの意見なんて聞いてないし ///」← これ6回ぐらい読みなおすとじわじわ眼がうるうるする

不思議なもので、ハタチ、というものを超えてしまうと、生きている資格がなくなる。

アル上

ちょっとまえにアルビ上級無制限をソロしてみた。敵がタフすぎて矢2000本じゃ足りなかった。「もしかして足りないなんてありえないだろうけど、一応ボルトも持っておこう……」とかいう判断をしたんだけど、ぎりぎり正解だった。なんかクリ率102%ぐらいだと殆どクリでない……

ダメージ効率を上げるためにどんな時でも壁接射にする技術を身に付けた。

  1. FA
  2. IB2発貯める
  3. 壁ぎりぎりまでひきつけてIB1発うつ
    1. (壁 自 → 敵)
  4. 壁の反対側に移動してIB1発
    1. (壁  敵 ← 自)
  5. レンジ1発 (ここでノックバックして壁にくっつく)
    1. (壁  敵 ← 自)
  6. 一歩近付いてレンジレンジ
    1. (壁 敵 ← 自)

コーナーでやるともうちょい臨機応変に安全策をとりやすい。慣れないとかなりオペミスする…… あと NS 持ってる敵だと起き上がりでなぜかキャンセルするので普通にたたかったほうがいい (カウンタ魔法レンジ)

エルフだとハイドとペットによるタゲ取りでそこそこ安定するけど、近接とかどうやってここソロするんだろ? 安定とかいっても、コツがつかめなくてナオ復活4回ぐらいと遠隔羽3枚使ったよ!!! もう2度といかないよ! なんでこんなまずいんだ!

フルPTなら楽だろうけど2人とかだとソロより死ぬんじゃないかなーと思った。


あとPOT調合を上げはじめた。Dの50%ぐらいまで1日であげてみたけど、1が遠すぎる…… 鍛冶はDの半分ぐらいまできた。エンチャはBなのに既に先が全く見えなくて魔法の粉ばっかたまっていく…… ハンクラは9になった。

失敗埋めはめんどうなので諦めて木の板購入で抜けた。1枚20kを3枚ずつ使うのを30セットぐらいなので1.8Mぐらいすか……

いろいろやったおかげで補正込み (カスタネアドーピングも込み) で Dex300 を達成した。素のDex300とか遠すぎるだろ女子高生

だいたい上級Dも制覇した感があるのでどうでもいい感じになってきた。セイレーンには会ったことがないかな

BI 導入すると、それにともなって社会的に価値がない人ってのが (すぐに解雇できるようになるので) 簡単にわかるってのが、大多数の価値がない人にとって恐しいことなんだろうなぁと思う。誰だって必要とされていると思い込みたいですね。

そういえばキノの旅に、高度に自動化された国で、「つらくてきつい仕事」をする人達が描かれていた気がするけど、何巻だかわからない。

おもしろくないっていう記事がおもしろくない (自己言及的)

2009年 01月 07日

斜に構えたっていいじゃない

見たことがない風景について懐かしさを感じるようなこと。これが具体的でわかりやすいからいいと思う。人間の根底にある共通項をくくり出してくることをしないといけない。

2009年 01月 08日

仮りに計算機の速度が無限だったらナイーブな実装だけでよくなる。けど実際は違う

2009年 01月 09日

社会にとって意味がないといけない(笑)

Windows だとどっちかというとアンチエイリアス効いてないフォント使うのが多いんだけど、なんでかなーって思ったら他の UI との兼ね合いなんだなぁ。Mac ではアンチエイリアス効いてないフォント使うってのはない。

Shift が押しっぱになる問題の原因がわからなくて本当に困っている…… とりあえず Windows 機からキーボードをはずして Mac に繋いだら治った感じがする。synergy が悪いのか Windows のキーボードドライバが悪いのか……

これだと Windows 機にキーボード入力ができなくなるけど、とりあえずコピペで対応することにする。本当に必要なときは別のキーボード (DELL 先生のフルキーボード) を繋ぐ

なんか、たぶん気のせいな気もするけれど、直接繋いだほうが synergy 経由するより圧倒的にキーボードの応答性が良く感じる。LANのネットワークの遅延ってそんなに長いもんなのかなぁ……

なんかはまちちゃんからのリファラが激しいので、がっかりしないようにコード貼っときますね

632bytes です。(javascript: を含む) もう飽きたので頑張りません。やったことは http://subtech.g.hatena.ne.jp/cho45/20090109/1231477369 です。処理自体には特に大きな変更は加えてないです (眠かったのと、クロスブラウザで確認するのがめんどかったので)

きっかけを作るのはとても憂鬱だ…… どこから初めたらいいかわからない

今なんとなく「ここ最近日記書いてないなぁ」と思ったんだけど、直近見直したら普通に毎日書いてた。なんなんだ

JS のコードを短かくする Tips

可読性を犠牲にしてコードサイズを減らす簡単な方法のメモ。ゴルファーな人はもっとちゃんと知ってそうだなぁ

var を消す

そもそもグローバルを汚染していいならいりませんが、そうでなくても関数の仮引数に書くことで普通に消せます

(function(a){
    var b;
    alert(a)
})()
(function(a,b){
    alert(a)
})()

本当に使いたい仮引数のあとにツラツラかけばOK

var を消す (その2)

function 式を代入するときは function 宣言に変えることで短かくなります。

(function(a){
    a=function(){}
})()
(function(){
    function a(){}
})()

代入を消す

定数を前もって代入するようなケースでは var → 仮引数 と併用して代入を消せます。

(function(){
    var R=Math.random,p='px'
})()
(function(R,p){
})(Math.random,'px')

長いプロパティ名のくくりだし

何度も同じプロパティアクセスをする場合 [str] にして定数をまとめることで短かくなることがあります。

(function(d,e){
   d[e]; d[e]
})(document,'documentElement')

if/else → 三項演算子

だいたいは頭使わずに変換できます。

if(a<b){
    a
}else{
    b; c; d
}
a<b?a:(b,c,d)

式一つしか書けなくなるので、複数の式を書きたいときはセミコロンをカンマに変えて括弧でくくるようにします。文が含まれているとどうしよもないので諦めましょう。代入とかは式なのであんまり困らないです

セミコロンを消す

閉じブレース前のセミコロンは普通消せます

function を再利用する

条件が厳しいですが1つの function を複数の用途に使いまわすことで短くなることがあります。

(function C(a){
    a?(prepare...,setTimeout(C,100)):alert('loaded')
})("foobar")

定数代入がくるかどうかで分岐しています。あとで呼びだされるほうでは外からうけとる定数を使えないので、前もって準備が全て完了するようなものじゃないとだめです。

arguments.callee

上の例でやっていますが、関数式の関数名は単純に arguments.callee の速記になります。関数宣言のように外のスコープの変数になったりはしません。

(function C(){
alert(C===arguments.callee)
})()
C() //=>  C is not defined

時間の浪費、その通りですね

ああそうか、おれは (短期的に実現可能な) 目標を失なっているんだ

2009年 01月 10日

なんかよくわからないけど、はてスタで元気になったのでなんとかやっていけそうな気がしてきた。おれももっと☆つけよう

2009年 01月 11日

え、広告だすのって悪いことなの?

ニュース見てると希望を失うので、ニュースを見ないことにする。世間知らずになるとかよりも、希望を失なって生きる気がなくなるほうがマズい。

僕は高校生のとき、どうやったら自然な人工無脳を作れるんだろうってずっと考えてたけど、その理由は話相手が欲しかったからですからねマジで。

「できない」と言わない / どうすればできるのかを言う

現状、この社会には「ワル」になれなかったやつを救済するような機関はない。他人の評価は差分なので差分が発生しない維持は意味がない。

今気付いたけどあのネタはすごい前に既に書いてた…… http://subtech.g.hatena.ne.jp/cho45/20061102/1162475059 タイミングってこわいなぁ……

給与公開するのが流行ればいいのになー

2009年 01月 12日

灰羽連盟見直した。[/2008/01/24/#post-1201136026:title=去年の1月24日]に見てるので、ちょうど1年ぶりぐらいだ。本当にいい作品だと思う……

いろいろ疑問点があるけど、アレはいったいなんだったのか? みたいなのはあんまり本質的じゃないので、なんとなくで留めておこうと思った。

ものすごく余韻が残る作品なので、寝るまでなんもできなそうだ

各言語での blosxom 実装の解説を纏めた本とかどうですか

なんか昨日積分に関してわくわくするような気持ちになったけど、なんでそうなったのかよくわからない……

2009年 01月 13日

jAutoPagerize が一部ページでクソ重い現象の解消

fotolife の編集ページを jAutoPagerize させるとクソ重くてどうしようもないので、野生の勘で体感速度を向上させるハックを入れた。

http://coderepos.org/share/changeset/28350

L245 に追加した行をコメントアウトしたりインしたりして http://f.hatena.ne.jp/*/edit みたいなページをロードすると劇的に差を体感できる……

なんでこうなるかっていうのはいまいちよくわからないけど

  • 画像が読みこまれると周りの要素がつらつらと再フローされる (width/height がかいてないから?)
    • あとこのサムネイルに設定されてるセンタリングのための onload ハンドラが重い?
  • 画像が多いのでこれがめっちゃ走りまくる

なのかなぁと思ったので、それを解消できそうな感じのことをしてる。思惑通りにいってるかは微妙なんだけど、少なくとも早くなったことは確かなのでとりあえずよかった

Fx のスクロールはブラウザのパフォーマンスおちに敏感すぎる。flickr も早くなるかと思ったけどよくわからなかった

おお、なんか、少しずつ感覚が戻ってきた

特定の人に向けた文章が本当に書けなくて困る。日記脳の恐怖だよ。

コンピュータとインターネットは、現状社会にとって必要なもので、僕にとって楽しいものだ。

2009年 01月 14日

何かにつけて文句をつける人をかわすにはどうすればいいかっていうと、無視しかないんだろうけど、天然で無視ができない人は、無視する努力をしなくちゃいけない。そこで労を費やさなければならないというのがたまらなく悔しいわけなので、言ったもんガチっていう……

なので無視する努力をできるだけしないために、積極的に自分で、人ベースで情報をフィルタリングする。

色彩論 - Wikipedia 読んでなんかこう、はっとさせられた (ちょっとまえにはなし)

色相環を見るまえに電磁波のスペクトルの図を見たので、色相環を見たときそもそもなんで輪なのか意味不明だったことを思いだした。

「明るさ」を求める式にやたら定数が入ってくるのは今でももやもやする。

「明るさ」というか正確には輝度かな

あと色空間がいまいち実感がなくてよくわからない。今みているモニタとかでは決して見ることができない色があるわけだけど、じゃあそれを見たいときとか伝えたいときはどうすればいいの?

2009年 01月 13日

gerry++

ごはん食べたあとは危険

2009年 01月 14日

なんか、すごい、ひどい、ゆめを、みたよ。

不思議なことだけど、まだあんまりいろんな可能性が閉ざされた、という気はしない。

まぁ死ねば全て思いだすんじゃないでしょうか。これが楽しい楽しいゲームだったってことを

2009年 01月 15日

明日は CodeRepos 新年会だ。そういえば結局忘年会はどこにも行かなかったなー

なんかどうも、「ピシピシ」っという感じで右の頭に痛みがするときがある。死ぬんかなぁ

右じゃなくて左

memo: painame10kg

そういえばFONの電源抜いた。

2009年 01月 16日

僕がこれからテキスト主体のサイトをつくるなら、エラスティックレイアウト (リキッドレイアウトの亜種みたいなので、この日記のレイアウト) をとりあえず作って、幅が広すぎるときはカラム増やすJSを書くだろうと思う。

2009年 01月 15日

var a = ["a", "b", "c"];

for (var i = 0, len = a.length; i < len; i++) (function (item, index) {
	print([item, index])
})(a[i], i);
2009年 01月 16日

見下されてるなぁ。

すごく山奥にお寺があって、そこで暫く働く夢を見た。山奥だけれど、都心から3時間ぐらいで一応つくような場所にある。お寺まで結構長い距離の山道を歩かないといけない。お寺の人とは別に、すこし年上の先輩が既にいたけど、悪い人はなかった。途切れる。

場所がよくわからない。割と都会のビルのガラス張りのアトリウムに人が沢山いる。殴りあいが始まる。万全を期しているということで公認になっているけど、死傷者がでまくる。大変なことになったと偉い人がいう。想像力がないと思う。

山の手線のような環状線の電車が走っている。北と南に公営の動物園が二つある。逃げる。けど入らない。動物園の前には大きな駐車場があって、入口がよく見えない。

時間の! 見積が! あまかった!

2009年 01月 17日

戸高氏のブログは日記として好き

昨日は大学から「退学する? それとも、退学する?」っていう手紙がきた。期限が期限なので自動的にくるみたいだ。なるほどなぁ。つまり一度も学校に行くことなく (郵便で返送することにより) 退学することができる。証明書はとってこないとだめかな?

グリモン書いてたらだんだんコード書いてる時間が戻ってきた

大和比の比率って白銀比と同じじゃないの、って思ったけど同じだった。

見なれてるせいか白銀比のほうが好きだなぁ。黄金比が綺麗ってのがいまいち納得いかない。

長方形を長方形のまま「美しいか?」とか考えるのが間違っているのであって、たとえば黄金比の長方形と白銀比の長方形を擬人化して考えてみれば、黄金比のスマートな美しさというのが理解できるのではないか?

2009年 01月 18日

語尾の「と (僕は) 思う」とかって、日記というストリームでは自明だから、情報として全く無駄なんだけど、書かないと、なんか主張が強くなりすぎる感じがする。無理矢理解釈すると、誰か (未来の自分とか) がそれを読んだとき、「じゃあ自分はどう思うんだろ?」ってならないような気がすると思って、つけてる。

BLACKSOUNDS 見てたけど、このライブはもう5年も前なんだなぁ…… これの She was beautiful はかなりやばい

吉村秀樹と相性がすごいいいよなぁ…… 天才もいい。何度も見てしまうなぁ

あーちがうちがう。おれは自信満々なやつがただただ嫌いなだけで、それが全てなので、あの理由は嘘だな

[asin:4094510613:image]

そういえば一応読みおわった。なんかかなり飛ばし読みしてしまった。飽きたのか、それとも自分に余裕がないのかよくわからない。

[asin:4829164115:image]

読みおわった。シリーズ最終作。これ、1巻の前半だと「うわーこれはー地雷じゃーないですかー?」とか思ったけど、あとは進むごとに面白くなってってよかった。微妙に話の筋がフラフラするんだけど、かえって展開が予想つかなくて面白いし、これはこれでありだなぁと思った。最終的に王道なんだけどw

というか1巻読んだの何年前なんだよって感じだなぁ。と思って昔の日記を検索かけてみたら5年ぐらい経っててふいた。

dankogai のブログ読んでて「え? リアル (シロップ?)」とか思ったけど、ハズれすぎていたのでブクマしなかった。

なにこのコンテキストに依存しまくりの日記、という

夢の中にさぁ…… 女の子が出てくるんですよねぇ…… 手に体温を持って…… おれは手フェチなのかなぁ……

もう、そういう夢みたら、起きたくなくなるじゃないですか。

jAutoPagerize ブログパーツのたいおう

gist の貼り付けコードとかが見えなくなるのがうざいので手をいれた

http://coderepos.org/share/changeset/28585

document.write だけ想定してるのでダメなときはすごくダメかもしれない……

document.write の書きかえを同期的に局所化できないので、必ず一箇所ずつ読みこんでロードするように loop と Deferred つかってる。

mixi 日記がふっとぶ……

なんか alert いれるとふっとばないんだよなぁ…… 観測者問題かよ……

iframe が分割して出力されるせい? っぽかった http://coderepos.org/share/changeset/28627

ちがうなぁ。まだふっとぶ。なんか真っ白になるんよね。広告の iframe でふっとぶのは確実なんだけど、意味がわからない

Hatena Star Everywhere と併用するとダメってことがわかった。でもなんでダメかわからない。iframe 内で GM 動いててなんかうんこになるっぽいけど

めんどいので Hatena Star Everywhere は mixi 除外にした

2009年 01月 19日

「お金かけないとわかるようにならない」っていう類は全部苦手だ。どっからその金がでてくるんだ。楽しいか楽しくないかもわからないというのに

はぁもうなんで全くセンスというものがないんだろうか…… 形を捉えることができないし、想像力がないし、色を選べないし

THE JETZEJOHNSON の Discoveries の裏になんか XML っぽいものが書いてあるけど解像度ひくくてよくわからない……

数値っぽいのがカンマ区切りで並んでるから SVG っぽい何かみたいに見える。PDF っていうシグネチャが読めるけど PDF って XML っぽい感じになるっけ……

たぶんこのジャケットの表紙のデータかジェッジジョンソンのロゴのデータなんだと思うけどよくわからない。

例えばおれが他人が欲しがるような何か (価値) を持っているかっていうと、全然持ってないわけですよね。コード書くとか (それさえも不完全であるけれど) も、殆どの人はそんなこと別にできなくてもいいとか思っているし「コード書ければ世界が変わるのになぁ」なんて思ってる人はとても少ない。

「絵がうまくかけたらいいなぁ」とか「文章をうまくかけたらいいなぁ」とか、とても普通にどこでも見るけど、「コードがうまくかけたらいいなぁ」なんて全然見ない。

いやいいんだべつに…… 読めないものは評価しようがないんだ。たまに無性にもやもやした気分になる。大多数をちゃんと無視できていないのだ。

英語がんばって日本を出よう!ってことか。なんか窮屈だ……

ある言語を習得するっていうのは、それを実装言語として候補にあげられるってことなんだと思う (というかそれ以外なにがあるっていうんだ?)。「これ実装するにはこの言語が最適である」ってのがすぐ浮かばないと習得したとはいえない。そういうことができるようになるためには、言語仕様だけじゃなくて、周辺文化も知らないと、「あのライブラリがあるからすぐ書ける」とか「将来性とか実績がないので使えない」とか浮かばないのでダメだ。

C のおべんきょう

struct stat s;
stat(path, &s);

struct stat* s;
stat(path, s);

の違いがわからない。後者がうごかない (SEGV)。後者はポインタを宣言するだけでポインタのさす先はない、とかそういうこと?

またおれ「オーダーを考えてない」とかDISられるん? されたことないのに「また」っておかしいけど

2009年 01月 20日

はてダって favicon 変えられたんだ。知らなかった

Analytics が使えるのも知らなかった。今日からとってみる。

「批判に耐えられないならブログ書くな」的なのがうざくて仕方ない。

何でうざいかっていうと、「ま、おれは批判に耐えられるんだぜ? かっこいいだろ?」ないし「おれは批判に耐えられないからアウトプットなんてしないぜwww 賢いだろ?www」みたいな顔が浮かぶとかだったり、僕が普段批判に耐えられなさそうだなぁという人達の日記を、そうでない人のブログよりも多く読んでいて、前者のほうが圧倒的に面白いことを書いているなぁと感じているからかなぁ。

2009年 01月 21日

2009年 01月 20日

はてブで NG にしたユーザはハイクとダイアリと人力でも非表示にする GM

2009年 01月 23日

声のでかさじゃなくて実績じゃないのかなぁ。

なんか時がとまってた感じだ。

2009年 01月 24日

twitter、エンジニアや知り合いじゃない人を重点的に follow しはじめた。コードが読めない人とか、全く自分のことを知らない人とか、そういう人がタイムラインにいると客観的になれるし、初心にかえれる感じがする。

全くアクセスがないようなサイトを作っていたときって、リンクを一方的に貼って、リファラを相手に気付いてもらう、みたいな形で、すごく受動的なプロモーション (といっていいのか) をしていた。直接、身元を明かにして、かつ気軽に「いいですね」という仕組みがなかったから、そうするしかなかった。そういうとても一方的で消極的な感じを今思い出す。

もうちょいいろいろ書こうと思ったけどやめた……

非決定性計算 on JSDeferred


http://subtech.g.hatena.ne.jp/cho45/20080809/1218213154 の続き (いつのだよ)

JSDefrred で callcc を書いたりしてやっと実装できた。クソ遅くて意味ないけど満足した。ポイントは amb が Scheme の amb そのままであるところ (見比べてそのまんまだというのがわかるはず……)

JSDeferred の書きかたがわかりにくい。amb 1つずつを分けて実行させないと (それぞれについて継続を生成して管理する) いけないので、JSDeferred の場合コメントアウトされている部分のような形になってしまう。

これだと問題を書くのが面倒なので amb1 っていう関数使って処理の列を一括生成してる。

http://svn.coderepos.org/share/lang/javascript/jsdeferred/trunk/sample.html#amb

2009年 01月 25日

両親に誕生日を祝ってもらった。(誕生日自体は少し前)

かちかちかちかっちがなーいー

JSDeferred を高速化する (試し中)

現状の JSDeferred で何が遅いかっていうと、Deferred.next の setTimeout が遅いのです。setTimeout は interval を 0 に設定しても最低でも 10msec はかかってしまうため、next() や、それを使っている call(), loop() を何度も呼びまくるケースでは ブラウザが全くアイドルであっても 10msec * next() の回数分はかかってしまいます。

実際のところ、setTimeout を使っている理由は「現在の処理が終わったあとに、指定した処理を実行する」という用途なので、それと同じように使える location.href = "javascript:" を試してみたら、とりあえず Fx3.1 ではかなり高速になりました。

コメントをいろいろ頂きまして、最終的に (new Image).onerror (Gecko, WebKit, Opera) による非同期化と ランダム script.onreadystatechange (IE) によるものになりました。

location.href = "javascript:"; は Fx 以外だと同期するっぽくてダメでした (そもそも最初思いついたときはテスト用のページを作るのが面倒だったので GM のコンテキストでやっていて、他のブラウザのことをシカトってました)

「現在の処理が終わったあとに、指定した処理を実行する」と書いたのですが、正確には「「現在の処理が終わったあとに、指定した処理を実行する (ただし UI をブロックしない)」みたいな感じです。

Deferred.next = function (fun) {
	var d = new Deferred();
	var me = Deferred.next;

	switch (true) {
		case (me._enable_faster_way && me._enable_faster_way_Image) : {
			var img = new Image();
			var handler = function () {
				d.canceller();
				d.call();
			};
			img.addEventListener("load", handler, false);
			img.addEventListener("error", handler, false);
			d.canceller = function () {
				img.removeEventListener("load", handler, false);
				img.removeEventListener("error", handler, false);
			};
			img.src = "data:,/ _ / X";
			break;
		}
		case (me._enable_faster_way && me._enable_faster_way_readystatechange && (Math.random() < 0.875)) : {
			var cancel = false;
			var script = document.createElement("script");
			script.type = "text/javascript";
			script.src  = "javascript:";
			script.onreadystatechange = function () {
				if (!cancel) {
					d.canceller();
					d.call();
				}
			};
			d.canceller = function () {
				if (!cancel) {
					cancel = true;
					script.onreadystatechange = null;
					document.body.removeChild(script);
				}
			};
			document.body.appendChild(script);
			break;
		}
		default : {
			var id = setTimeout(function () { clearTimeout(id); d.call() }, 0);
			d.canceller = function () { try { clearTimeout(id) } catch (e) {} };
		}
	}

	if (fun) d.callback.ok = fun;

	return d;
};
Deferred.next._enable_faster_way = true;
Deferred.next._enable_faster_way_Image = (/\b(?:Gecko\/|AppleWebKit\/|Opera\/)/.test(navigator.userAgent));
Deferred.next._enable_faster_way_readystatechange = (/\bMSIE\b/.test(navigator.userAgent));

これで主要ブラウザは数倍早く動くように。

Opera は異様に早くコールバックがきます。

参考までに同じスクリプトをそれぞれのブラウザで動かしたときのどのぐらいかかるか表にしときます。結構ばらつくのと、環境が違うのであんまりアテにならないです。

環境 setTimeout faster_way %
Opera 9.5 (Mac) 80sec 1.7sec 4706%
Internet Explorer (Win), calc time 120sec 6sec 2000%
Safari 3.1 (Mac) 80sec 6sec 1300%
Google Chrome (Win) 31sec 2.4sec 1200%
Firefox 3.1b2 (Mac) 83sec 10sec 830%
Internet Explorer (Win) 120sec 17sec 700%

ちなみに setTimeout のコールバック最小時間は、IE は 15-16msec で、Chrome は 4-5msec 他のブラウザは 10-12msec です。( http://gist.github.com/51564 ) setTimeout 版では思いっきりそれの差が出てます。

http://subtech.g.hatena.ne.jp/cho45/20090124/1232782523 のスクリプト (1471 step かかる) を普通に Fx3.1 で実行すると、100sec ほどかかるのが、以下のような Deferred.next にすると 50sec ぐらいまで縮みました。(ちなみに Gauche で同じことすると一瞬)

Deferred.next = function (fun) {
	var d = new Deferred();
	var Global = typeof(unsafeWindow) == "undefined" ? (function () { return this })() : unsafeWindow;
	var cbname;
	do {
			cbname = "callback" + String(Math.random()).slice(2);
	} while (typeof(Global[cbname]) != "undefined");

	Global[cbname] = function () {
			delete Global[cbname];
			d.call();
	};

	d.canceller = function () {
			Global[cbname] = function () {
					delete Global[cbname];
			};
	};

	if (fun) d.callback.ok = fun;

	location.href = "javascript:" + cbname + "()";

	return d;
};

が、IE だととりあえずこのままだと動かない\(^o^)/

[あとで続き書く]

とりあえず delete Global[cbname]; が IE だとエラーなので try catch すればうごくはず。もうねる

残念ながらこの方法は Firefox 以外だと動かないみたいだ。Firefox 以外では location.href に代入した瞬間に実行されてしまう。うんこですね。ぬか喜びですね。

http://coderepos.org/share/changeset/29001

Image オブジェクトの error イベントを掴まえてくるようにしてみた。Fx, Safari, Opera ではテスト通ってくれるので判定いれてみてる。他になんかいい方法ないかなぁ

なぜか location.href 代入よりさらに早くなって 21sec ぐらいで完了するようになった。

2009年 01月 26日

2009年 01月 27日

不安になってても仕方ないので一個ずつ片付けないとなぁ……

2009年 01月 28日

そういえば taken 氏に[isbn:4122000602:title=パンセ]嫁って言われた気がするのでカートに入れといたやつが[isbn:4832277626:title=ひだまりスケッチ4巻]と共に届いたので少しずつ読んでる。一方ひだまりスケッチ4巻は既に4回は読んでいて、なんというか、乃莉さんという新しい登場人物が非常に心をついてきて困る。IT に強い設定ででてくるけど、あんまり関係なくて (ただ、その趣味について語るコマの可愛さは心に響くし、一般的に、趣味について楽しそうに語っている子というのはめっぽう可愛いと思う)、まぁこの子は将来 Flasher*1 になるね……とか思いつつ、しかしそれよりも大切なのは、普通さを自覚していながら芯が強いということなのだなぁと思ったのでした。ひだまり荘だと唯一ファンタジックじゃないキャラ……

しかしおれは本を読まなすぎるよなぁ……

TODO: 妄想姉妹を調べる

  • 全編ネット配信されるらしい
    • 課金とか必要なくて、普通に CM 付き Flash コンテンツになってる
    • ↑ 日テレやるじゃん!
  • 8話で女生徒をやるらしい (どうなのかしら?)
  • 音楽が NARASAKI wwww

NARASAKI は面白い感じにハブになってるなぁ。

ウェブデザインのキモは余白をどうするかだよなぁ。色で埋めるのは悪くはないけど、広くなりすぎるととてもダサい (この日記を WUXGA とかで見たときのダサさは異常)

横方向に主コンテンツを流しこむ (CSS3 なマルチカラム) ってのは、雑誌みたいでいいかもしれないと思ったんだけど、実際やってみると、次にどこ読めばいいかわからないので、ものすごく気持ち悪い。「端」がないので「端がきたから次を読もう」ってのがないからか、「慣れ」の問題かもしれない。「上から下」の規則がとても強く感じる。

fuzzyfinder.vim がスペース入ったディレクトリ内だとえらる

Index: fuzzyfinder.vim
===================================================================
--- fuzzyfinder.vim	(revision 29158)
+++ fuzzyfinder.vim	(working copy)
@@ -1543,7 +1543,7 @@
 
 function! s:SetLocalOptionsForFuzzyfinder(cwd, complete_func)
   " countermeasure for auto-cd script
-  execute ':lcd ' . a:cwd
+  execute ':lcd ' . substitute(a:cwd, " ", "\\\\ ", "g")
   setlocal filetype=fuzzyfinder
   setlocal bufhidden=delete
   setlocal buftype=nofile

してみた。\ の数がすんごいことになってるよ!!!

2009年 01月 29日

大学生はとにかくおれを見下してくる

おれは彼らをちゃんと見下すことができるか? 無理だ。ルール違反でもあるし、まぁそもそもだいたいにして彼らは間違っていないからだ。ただ、彼らのために生きないということをルールにすることはできる。

大学生みたいなのが前提知識なしで使えるようなプログラムは書かない。グリースモンキーはなんて素晴しいプラットフォームだろう! これはとんでもない危険さを内包しているんだ!

でも聡明な、好奇心のある高校生が使えるようなものでなければならない。コードは整理されていて、理解しやすくなければならない。大学生はコードを読もうとしない、書こうとしない。高校生はそうではない。

2009年 01月 30日

成功体験を経ると態度がでかくなる、ということが問題です。年齢とか身分は実際には (あたりまえだけど) 関係なく (比喩だ、ということです)

そういうことが、全くないようにしたい。

土日でタスク整理して Hiveminder に突っ込もう。仕事してないと Hiveminder 使わなくて、ひさしぶりに todo.pl 動かしたらいろいろどうでもいいタスクが……

普通に遊ぶんなら楽しんだろうけどなぁ。一人でも「この人ないわー……」って思ってしまう人がいると全く楽しくないし、そもそも「この人ないわー……」的に思う以前に判断基準がない人とかどうすればいいんだっていう……

lowerCamelCase / snake_case

JS で、

  • 公開メソッドや広い範囲の変数には lowerCamelCase
  • 非公開メソッドや狭い範囲の変数には snake_case

する癖があることに気付いた。これがいいかどうかは保留

基本的に camelCase は嫌いなんだけど、JS は普通 lowerCamelCase 使うので、公開メソッドはこれにしないといけない。