メニュー

関連ページリンク

トップ > common > common - 人気ブログ(Blog)検索結果詳細 (2008年12月1日 10時)

[misc][book] アレコレ

  • WEB+DB PRESS Vol.47
    • http://gihyo.jp/magazine/wdpress/archive/2008/vol47
    • CodeRepos の記事が載ってるので買おうと思ってたんだけど、そもそも発売日とかチェックしてなかったのとなんかいろいろあって手に入れられなかったという状況 ( ポチろうと思いつつ忘れてたとか ) 。が、今日ふらっとよった本屋で 30 冊くらい積まれてたので購入。誰か注文したのかな。
    • とりあえず CodeRepos の記事は真っ先に読んだ。おれも root から co しようかなとかちょっと思ったり思わなかったり。そんなに容量の空きなかったので断念。
    • 他にもパラパラ見てたけど TCP/IP レベルでの処理の仕方とか memcached のハナシとかも載っててこれからじっくり読もうという感じ。あと BPM とかよく知らなかったんだけど載ってる記事読んだらマジメに ( つったら失礼なんだけど ) modeling からやろうとしててちょっと覗いてみるかという気に。ただ UML みたいに誤解とか曲解とかされてわけのわからないものへ進化しそうな気配は感じた。てか読後の感想がやっぱりゆーすけべー氏のおやじさんはすげぇという結論なんだが ( http://yusukebe.com/archives/08/10/22/121124.html ) 。あと JavaScript の連載記事に Range object の記載があった気がするのであとでいじりながら読む予定。
    • てか WEB+DB PRESS は web とか database がメインではあるんだけど特定 domain に縛られずに使える programming / development の話題が多いんだな。最近メジャーな LL はだいたい連載記事あるし流行の技術からめてるし、ある程度言語知ってるならこれを通年で読んで勉強するのもアリかもしれない。で、今気付いたんだけど WEB+DB PRESS も Software Design もおなじ技術評論社が出してて、後者は OSS を使ったシステム構築のハナシがメイン、という棲み分けなのね。読んでておもしろい雑誌がことごとく同じ会社なのはんー、って感じだけど。
  • イエスタデイをうたって 6 巻
    • 出てたので買った。まだ読んでない。冬目景氏は何でか知らないけど好きなんだよな。儚いのがいいんだろうか。いやでもリアルで病弱なひと見ると ( 自分含めて ) イラッとくる性格だしな。あー病弱と儚いのは違うか。冬目景氏の作品の登場人物 = 儚いというのは羊のうたのイメージが強いのかも。いやでもいま思い出すとあれは儚いというより背徳とかそっちのほうだな。どこで「儚い」ってイメージが出てきたんだ… ?
  • 意志
    • 最近何かやろうとするとトラブルが起きて解決する頃には体力が尽きていることが多い。例を挙げると仕様変更追従のための調査時に以前書いたスクリプトのバグを見つけてしまってそれをつぶすための調査の途中で検証コードを書いている中で framework の bug が見つかって〜、ってアホかと。
    • で、そういう場合に頼りになるのはやっぱり意志の強さなんだけどそれだけではダメだなぁと最近気付いた。意志ってのは言ってみれば offense で、それだけでは defense に頭がまわらなくて自滅に至る。そして defense に重要なのは現状把握で、こいつは本能でできるひともいれば ( 女性はここらへん本能的にやってるという偏見がある ) 経験や traning で身につく skill でもある。というわけで意志を貫き通すにはそれを backup する本能や経験が必要になってくるんじゃねーかなと思った。
    • てのはまぁ一回意志だけでまわそうとしてつぶれた経験から考察して今になってわかったことなんだけど。

作者:janus_wel

更新日:2008年12月2日 2時43分

このブログのホーム

[JavaScript][Firefox][Greasemonkey] delicious bundle tag

tag の数が多いと delicious の bundle tag 操作ページがやっぱり使いづらかったので ( http://d.hatena.ne.jp/janus_wel/20080826/1219850336 ) すでに bundle 済みの tag を隠す Greasemonkey script を書いた。というか既に誰か書いてると思ったんだけど、最近 vimp plugin ばかり書いてたから Greasemonkey script 書けるかなってところでとりあえず書いてしまってそのあとで答え合わせでもやろうかと思ったんだけど CodeRepos の userscript directory ( http://coderepos.org/share/browser/lang/javascript/userscripts/ ) になくて拍子抜けした。誰か同じ思いをしてると思ったんだけどな。まぁ書けるかどうかってのは一発で通ったのでいらん心配だったんだけど。

http://coderepos.org/share/browser/lang/javascript/userscripts/hide_inbundle_label_of_delicious.user.js?

cloneNode 使ってる割に子要素を個別にいじりすぎとか insertNode の指定わかりづらくね ? ってのはおれも思う。思うからそっと修正してやるかほっておくかしてあげてください。

作者:janus_wel

更新日:2008年11月30日 17時50分

このブログのホーム

[JavaScript] DOMParser ?

multi_requester.js に foks.info ( http://foks.info/about/ ) を追加するときに気付いたんだけど parse 処理なんかおかしい。ので応急処置はした ( http://coderepos.org/share/changeset/25338 ) んだけど原因サッパリわかってない。いや commit した時点では DOCTYPE 指定がないから parse おかしくなってるんだと思ったんだよ。

multi_requester.js で request した document を xml として parse する理由は大まかに以下の 2 つ ( 他にもある ? ) 。

  • liberator.echo では valid な xml 文書しか受け付けないのでそのチェック
  • evaluate での XPath 式の適用前準備

今回は parse した結果 DocumentFragment object が返ってきてた ( 期待するのは xmlDocument ) ので前者の条件は満たされてたみたいなんだけどこいつには evaluate がないのでコケてたという状況。幸い multi_requester.js では parse に失敗したときに代替手段で無理矢理 xmlDocument object に変換する方法をとっていたのでそっちへ switch するようにしたんだけど…。

今検証コード書いてみたら ( 以下の code 流し込んでから :domtest http://foks.info/translate/?target=%E5%A4%A9%E7%B6%B2%E6%81%A2%E3%80%85 ) foks.info の検索結果も普通に parse できてるんだけどどういうことなの… ?

commands.addUserCommand(
    ['domtest'],
    'domtest',
    function (args) {
        let xhr = new XMLHttpRequest();
        xhr.open('GET', args[0], false);
        xhr.send(null);
        if (xhr.status === 200) {
            let dom = (new DOMParser()).parseFromString(xhr.responseText, 'application/xml');

            // result: true
            liberator.log(dom instanceof xmlDocument, 0);
            // xml 文書として整形して表示される
            liberator.echo(xhr.responseText, commandline.FORCE_MULTILINE);
        }
    },
    {}
);

取ってきたあとで Range object ( https://developer.mozilla.org/en/DOM/document.createRange ) 使ってこちゃこちゃやってるところがおかしそうなんだけど Range とかいまサパーリなのでとりあえず保留。まぁちょっとさわってみたかったのでいろいろ遊びながらいじってみる予定ではある。てか今回の問題は html を xml に変換する妥当な方法が見つかればいいわけだからそういう方向でも考えてみた方がよさげかなぁ。

作者:janus_wel

更新日:2008年11月30日 17時50分

このブログのホーム

[misc] 花粉

だかなんだか知らないがここ数日何かが飛んでいてすこぶる体調が悪い。もう冬なんだが。体中が痛かったり目がしょぼしょぼするのは別にあまり気にしないんだがその結果思考能力が下がるのが致命的なのでどうにかしたい。どうにもならんのだが。

今日書いた日記は文章おかしいのはわかるんだがどう直せばいいのかわからんというレベル。攻撃的だしな…。とっとと寝てしまえということでもあるんだがどうにもならんことがわかっている以上どうにかするしかないのでどうにかしようとしている結果だ。現代の生存競争は過酷だぜ。

作者:janus_wel

更新日:2008年11月30日 20時18分

このブログのホーム

[book][misc][vapor] 狼と香辛料 II

読んだ。なんか期待するモノと違ってたんだけど、おれがこの小説に期待しているものは他愛もない雑談感というか、主人公ふたりが荷馬車に揺られながら延々と経済そのほかについて語るという場面なのでそもそもそれがおかしい気がする。この巻にもそういうシーンはあるんだけど前巻よりも少なかったからかちょっとがっかりというか。

この巻の構成というのかあらすじというのかは知らないけど露骨すぎて拍子抜けというか、予定調和至上主義的な何かを感じてしまった。構成は強引すぎるというかストレートすぎるというかわかりやすすぎて興ざめしたというか。 object の生成タイミングとかに通ずる論理くささがあってちょっとアレだった。予定調和は別にキライなわけではないと思うので ( 今やってるアニメで最たる予定調和の例であるゴルゴ 13 やラオウ伝は普通にみれている ) おれの期待とこの小説の展開の乖離が原因なのかなぁと思う。そもそもおれはこの小説に対して予定調和的な展開を期待していなかったのでそこで思ったよりもつまらなく感じているのかも。

予定調和はそもそもラクというか安心して臨めるというか励起されるものが少ないので余計なエネルギーを使わなくていいはずなんだけど、最初から結果がわかっているものでないと展開予測をしたり登場人物のタイムラインを描いたりしてしまうので結局エネルギーを使ってしまう。あとその予測が自分の望むものでないと失望しがち ( その物語と自分の予測のどちらが優れているかとかは関係ないはず。予測には通常願望が含まれているので予測通りに展開しないこと自体が失望をうむ ) なのでその物語が予定調和的であるかわかっているか否かというのはけっこう重要なことなのかもと思った。

あと前巻でも似たような描写があったと思うんだけど切り札は絶対に使わないと言いながらさっさと切っちゃっているのがんー、という気分にさせた。経済がテーマのひとつだから現実離れしたものがより浮いてしまうとかあるのかもしれない。そもそも light novel だから軽く読んで軽く流すべきなのかとは思うけども。

とりあえず高校生の恋愛的なハートフルボッコな内容は今回もあって、それは予想の範囲内 ( もんどりうつこともなくなった ) で楽しめるようにはなったので今後はそれを期待して読むかもしれない。ただ、気恥ずかしさ分はこの巻のおかげで足りたのですぐに次の巻に手を付けることはないと思う。そしてそのままおれの選択肢から消えることもあるかもしれない。まぁそこは巡り合わせの問題よな。

作者:janus_wel

更新日:2008年11月30日 13時59分

このブログのホーム

[JavaScript][vimperator][Firefox] appendAnchor.js refactoring

前々からニコ動で blog 晒してるひととか mp3 配布してくれてるひとの URL を選択するのにマウス使っててどうにかならないかと思ってたんだけど今更ながら appendAnchor.js に気付いたので使ってみたら便利すぎて鼻血でそうになったというハナシ。ではなくソース読むのに難儀したので refactoring してしまったというハナシ。おれは cosmetic change がしたかったんだけど。おかしい。

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

とりあえずポイントは 2 つ。

  • buffer.evaluateXPath は結果に iterator generator を仕込んでくれる
    • ので普通に for in で回せばおk。 document.evaluate method を使う場合はこういう書き方できないけど今回は vimp の plugin なのでこっちのがいいね。てかここの loop の終了条件はなんか怪しげだったので全面的に書き直してしまった。
  • window.eval は使わない
    • 今回は liberator.globalVariables.auto_append_anchor の値 ( 文字列 ) を真偽値として扱いたいわけなので以下に示す関数で対処するようにした。 3 項演算子もこうやって使うと if よか見やすい ( ラクダ本からパクってきてる ) 。てか :let での指定はすべて文字列扱いなのと JavaScript の String object に toBoolean method がないのがアレというハナシなんだけどまぁそこはそれということで。
function stringToBoolean(str, defaultValue) {
    return !str                          ? (defaultValue ? true : false)
         : str.toLowerCase() === 'false' ? false
         : /^\d+$/.test(str)             ? (parseInt(str) ? true : false)
         :                                 true;
}

あーあと eval 関連で vimperator の場合は liberator.eval があるんだけどこれは旧 eval ( https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Functions/eval ) を emulate していて第 2 引数で context の指定ができるんだけどなんで旧 eval 仕様が obsolete になったかを考えるとあまり使わないほうがいい。 http://d.hatena.ne.jp/ZIGOROu/20070730/1185783891http://d.hatena.ne.jp/brazil/20080102/1199271357 の例のように開発中にアレコレするってんならわからないことはないけど plugin 内で使うとかは避けるべき。

作者:janus_wel

更新日:2008年11月30日 17時29分

このブログのホーム

[vimperator][Firefox] status bar 最適化計画そのよん ( clock.js )

http://d.hatena.ne.jp/janus_wel/20081127/1227812752 で status bar がかなりいい感じになって最適化も終了かと思ったそのときおれに電流走る。「時計だ。時計を表示しよう。」ゴメンどうしてそうなったのかおれもわかんない。

http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/clock.js

設定できる変数は以下の 3 つ。

  • clock_position
    • 表示位置を示す目印要素の id 。 migratestatusbar.js の position と同じ。 default は 'liberator-commandline-command' 。コマンドラインの右側。
  • clock_after
    • clock_position で指定した要素の後ろに表示するかどうか。これも migratestatusbar.js の after と同じ。 default は true 。
  • clock_format
    • 書式。特殊な指定として下表の 3 つがある。他は書いたとおりに出力される。 default は '[%t]'
tokendescription
%t時間表示。 24 時間表記で hh:mm 形式。コロンが点滅する。
%d月日表示。 MM/DD 形式。
%y年表示。 YYYY 形式。

うちの設定は

let clock_format='[%t %d]'

てしてる。 prompt の前に出したい場合は以下のようにすればいいけど見づらいのであまりオススメしない。

let clock_position='liberator-commandline-prompt'
let clock_after='false'

あと時計部分は id="liberator-plugin-clock-box" な hbox として生成されるので :style コマンドで見た目の変更も可能。以下のようにすると緑で表示するようになる。 font-family とかもいじるとより見やすくなるかも。

" clock style
style -name clock chrome://* <<EOM
#liberator-plugin-clock-box > * {
    color: green !important;
}
EOM

" vim: sw=4 sts=4 ts=4 et

というわけで以下のように変わった。

  • before
    • f:id:janus_wel:20081128040243p:image
  • after
    • f:id:janus_wel:20081128141315p:image

これにて最適化完了。ッしたァ !!!

作者:janus_wel

更新日:2008年11月28日 14時16分

このブログのホーム

[vimperator][Firefox] vimperator customize tips

migratestatusbar.js ( http://d.hatena.ne.jp/janus_wel/20081127/1227807826 ) とか clock.js ( http://d.hatena.ne.jp/janus_wel/20081128/1227849365 ) の移動させる要素とか position 指定に使う id ってどうやってみつけんの ? って思うでしょ思うはず思え。

おれの場合以下の手順で見つけてる。

  1. まず DOM inspector ( https://addons.mozilla.org/ja/firefox/addon/6622 ) 、 inspector.js ( http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/inspector.js ) 、 mouseinspect.js ( http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/mouseinspect.js ) 、 mouseinspect.js に必要な hightlight.js ( http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/highlight.js ) をセッタップ。
  2. おもむろに :mins ( :mouseinspect ) って打って Enter 。マウスでそれっぽいところをウロウロ。すると要素の id がわかるのでそれをもとに migratestatusbar.js や clock.js の設定を書く。 :nomins で mouse inspect mode を解除するのを忘れないように。
  3. それでうまくいかない場合は :inspect! #id を使って DOM inspector を起動。 #id のところは :mins で調べた id 名を入力する。そうすると指定した id に直接飛べるので前後の要素を見て親要素を指定してみたり兄弟要素を指定してみたりと微調整。これでたいていうまくいく。

:mins で調べてるときは以下のようになる。赤枠がマウスで指定してる要素で青枠がその要素の id ね。

あとたまに設定ミスって起動時に赤メッセージでてるときあるんだけどこれが一瞬で流れちゃうので何いってんだかどこが悪いんだかわからないときがある。こういう場合は :messages って ex-command を使うと直前の赤メッセージが出てくるのでそれで原因を探る。直前のメッセージだけしか参照できないんだけど見えないよりかなりマシ。前々からあったかもしれないんだけど最近気付いた。設定時以外にも仕様変わって plugin 動かないとか plugin 書くときとかにも使えるので覚えとくと幸せになれるはず。

作者:janus_wel

更新日:2008年11月28日 16時42分

このブログのホーム

[vimperator][Firefox] image eater

スクリーンショットはっつけるときいつもはてなフォトライフの thumbnail 画像の URL をコピーして使ってるんだけどいちいちマウス握るのめんどくさいので extended-hints mode に追加する形で作った。それだけじゃ寂しいので画像保存 ( 名前を付けて画像を保存 ) ができる extended-hints mode とページ内の画像をすべて落とすコマンドも抱き合わせで。

http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/imageextender.js

機能と発動キーの設定用変数、 default 設定は以下。

featurevariabledefault
名前を付けて画像を保存image_extender_save_key'i'
画像の URL をコピーimage_extender_yank_key'm'

let image_extender_save_key='e' とかすると ';e' で発動するようになる。あと毎回画像保存用の dialog が出るのがうっとうしいひとは image_extender_skip_prompt って変数に 'true' をセットすると dialog 出なくなるのでどうぞ。その場合落ちてくる場所は :pref の「一般」タブ、ダウンロードの項で指定されている場所になるのでファイルが見つからない場合はそこをチェキラ !!

:downimageall はそのままだけど使用する際は十分注意してくださいな。こっちじゃ責任持たないんで。ぶっちゃけるとできるかなと思って試しに実装してみたモノなのであんまり効率的じゃないかも。

あと動的に画像生成してるとこはファイル名取得がうまくいってなくてすべて拡張子 htm で落としてきちゃうんだけどちょっと解決法が見つからないので保留で。あ、サンレッド生放送はじまった。

作者:janus_wel

更新日:2008年11月28日 22時2分

このブログのホーム

[vimperator][Firefox][JavaScript] status bar 最適化計画そのいち ( migratestatusbar.js )

ちょっと status bar ごちゃごちゃしてきたので整理すんべと思っていろいろやってみた結果そのいち。前書いた http://d.hatena.ne.jp/janus_wel/20081028/1225230512 がちょっとアレだったのと http://vimperator.org/trac/ticket/17 のコードが今更理解できたので混ぜて設定とかもできるようにしてみた。

http://d.hatena.ne.jp/janus_wel/20081028/1225230512 では favicon を表示してくれる element を clone していて、まぁ動いてくれるっちゃ動いてくれるんだけど clone 元と id がかぶっているのでよろしくない。そして id を変更してしまうと favicon のないページでは何も出てこなくなったりと Firefox 側で面倒を見てくれなくなる。

対して id:teramako が書いてる方は要素を移動させているというのがキモで、中身をいじってないなら動的な変更は Firefox 側でよしなにやってくれる。 RSS / Atom のあるページで feed button を表示してくれたり favicon を切り替えてくれたり favicon がないページでは適用している theme の default icon を表示してくれたりとかそういうの。

てなわけで feed button だけ移動させるのもちぐはぐな感じがする -> 全部移動させちゃえばいいじゃない -> 移動するためのおれ plugin 書いた -> あれ ? これ抽象化できね ? -> logic 抽象化した plugin 書いた -> 移動する要素と移動先の指定もできるようにしよう -> 完成 <- イマココ!!

http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/migratestatusbar.js

liberator.globalVariables.migrate_elements に以下のような配列を指定すると移動するようになる。以下は star button, feed-button, favicon を移動させる。 local bookmark したらハートが出るから star button はいらなくね ? って設定したあとに一瞬おもったけど URL 長いとハート隠れちゃうので持ってくるようにしてる。うちはこれくらいしか使ってないけど他にも有用なものがあるかも。

liberator.globalVariables.migrate_elements = [
    {
        // star button of awesome bar
        id:    'star-button',
        dest:  'security-button',
        after: true,
    },
    {
        // icon that show the existence of RSS and Atom on current page
        id:    'feed-button',
        dest:  'security-button',
        after: true,
    },
    {
        // favicon of awesome bar
        id:    'page-proxy-stack',
        dest:  'liberator-statusline',
        after: false,
    },
];

スクリーンショットは以下に。移動なので awesome bar は当然悲惨な姿になる。

  • before
    • f:id:janus_wel:20081128023922p:image
    • f:id:janus_wel:20081128023923p:image
  • after
    • f:id:janus_wel:20081128023924p:image
    • f:id:janus_wel:20081128023925p:image

つづく。

作者:janus_wel

更新日:2008年11月28日 2時43分

このブログのホーム

[vimperator][Firefox] status bar 最適化計画そのに ( statusbar_organizer.vimp )

http://d.hatena.ne.jp/janus_wel/20081127/1227807826 で status bar のアイコンも増えてちょっと使い勝手がよくなったんだけどちょと見栄え悪い。ていうかなにこの空白。キモい。主に padding がキモい。 Greasemonkey のサルはイラッとくる顔してるし。

てなわけで :style でこの空白を殺すことに。以下を ~/vimperator/colors/ に statusbar_organizer.vimp とかって保存。ゴメン、 evening.vimp の設定 ( http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/colors/evening.vimp ) パクった。

" organize icons of status bar
style -name statusbar chrome://* <<EOM
#status-bar statusbarpanel {
    padding: 1px !important;
}
statusbarpanel > * {
    margin: 0 !important;
    padding:0 !important;
}
EOM

" vim: sw=4 sts=4 ts=4 et

vimpratorrc like に double quotation がコメント。 here document で流し込むのは定型で覚えればいいと思う。あとこうやって目的ごとにファイル切り分けとくといい感じにアレコレできてよいかも。これでだいぶマシになった。

  • before
    • f:id:janus_wel:20081128023924p:image
  • after
    • f:id:janus_wel:20081128031424p:image

つづく。

作者:janus_wel

更新日:2008年11月28日 3時17分

このブログのホーム

[vimperator][Firefox] status bar 最適化計画そのさん ( pathtraq.js, yslow.js )

http://d.hatena.ne.jp/janus_wel/20081127/1227809863 でかなり引き締まった status bar だけどなんつーかさ、一番右のアレ、邪魔じゃね ? スペース使いすぎじゃね ? というわけで個別に何とかする plugin を書いた。

別 profile で YSlow 使ってて同じく盛大にスペース浪費してるので yslow.js も。 Pathtraq のアイコンは favicon からパクってきたんだけど著作権とか大丈夫かな ? まぁ文句言われたら差し替えよう。

で、 page/site の rating もこのままだと見られないんだけど vimp 的には pageinfo を使うのが正解だと思ったので pageinfo option を拡張してある。 pathtraq.js は 'p' 、 yslow.js は 'y' が指定可能でそれぞれ status bar に表示してた値 ( Pathtraq は page/site ratings 、 YSlow は grade, size, time ) を pageinfo に表示するようになる。

スクリーンショットは以下。

  • before
    • f:id:janus_wel:20081128031424p:image
  • after
    • f:id:janus_wel:20081128040243p:image

もうちょっとだけ続くんじゃ。

作者:janus_wel

更新日:2008年11月28日 4時5分

このブログのホーム

[misc][book] アレコレ

  • WEB+DB PRESS Vol.47
    • http://gihyo.jp/magazine/wdpress/archive/2008/vol47
    • CodeRepos の記事が載ってるので買おうと思ってたんだけど、そもそも発売日とかチェックしてなかったのとなんかいろいろあって手に入れられなかったという状況 ( ポチろうと思いつつ忘れてたとか ) 。が、今日ふらっとよった本屋で 30 冊くらい積まれてたので購入。誰か注文したのかな。
    • とりあえず CodeRepos の記事は真っ先に読んだ。おれも root から co しようかなとかちょっと思ったり思わなかったり。そんなに容量の空きなかったので断念。
    • 他にもパラパラ見てたけど TCP/IP レベルでの処理の仕方とか memcached のハナシとかも載っててこれからじっくり読もうという感じ。あと BPM とかよく知らなかったんだけど載ってる記事読んだらマジメに ( つったら失礼なんだけど ) modeling からやろうとしててちょっと覗いてみるかという気に。ただ UML みたいに誤解とか曲解とかされてわけのわからないものへ進化しそうな気配は感じた。てか読後の感想がやっぱりゆーすけべー氏のおやじさんはすげぇという結論なんだが ( http://yusukebe.com/archives/08/10/22/121124.html ) 。あと JavaScript の連載記事に Range object の記載があった気がするのであとでいじりながら読む予定。
    • てか WEB+DB PRESS は web とか database がメインではあるんだけど特定 domain に縛られずに使える programming / development の話題が多いんだな。最近メジャーな LL はだいたい連載記事あるし流行の技術からめてるし、ある程度言語知ってるならこれを通年で読んで勉強するのもアリかもしれない。で、今気付いたんだけど WEB+DB PRESS も Software Design もおなじ技術評論社が出してて、後者は OSS を使ったシステム構築のハナシがメイン、という棲み分けなのね。読んでておもしろい雑誌がことごとく同じ会社なのはんー、って感じだけど。
  • イエスタデイをうたって 6 巻
    • 出てたので買った。まだ読んでない。冬目景氏は何でか知らないけど好きなんだよな。儚いのがいいんだろうか。いやでもリアルで病弱なひと見ると ( 自分含めて ) イラッとくる性格だしな。あー病弱と儚いのは違うか。冬目景氏の作品の登場人物 = 儚いというのは羊のうたのイメージが強いのかも。いやでもいま思い出すとあれは儚いというより背徳とかそっちのほうだな。どこで「儚い」ってイメージが出てきたんだ… ?
  • 意志
    • 最近何かやろうとするとトラブルが起きて解決する頃には体力が尽きていることが多い。例を挙げると仕様変更追従のための調査時に以前書いたスクリプトのバグを見つけてしまってそれをつぶすための調査の途中で検証コードを書いている中で framework の bug が見つかって〜、ってアホかと。
    • で、そういう場合に頼りになるのはやっぱり意志の強さなんだけどそれだけではダメだなぁと最近気付いた。意志ってのは言ってみれば offense で、それだけでは defense に頭がまわらなくて自滅に至る。そして defense に重要なのは現状把握で、こいつは本能でできるひともいれば ( 女性はここらへん本能的にやってるという偏見がある ) 経験や traning で身につく skill でもある。というわけで意志を貫き通すにはそれを backup する本能や経験が必要になってくるんじゃねーかなと思った。
    • てのはまぁ一回意志だけでまわそうとしてつぶれた経験から考察して今になってわかったことなんだけど。

作者:janus_wel

更新日:2008年12月1日 17時43分

このブログのホーム

[JavaScript][Firefox][Greasemonkey] delicious bundle tag

tag の数が多いと delicious の bundle tag 操作ページがやっぱり使いづらかったので ( http://d.hatena.ne.jp/janus_wel/20080826/1219850336 ) すでに bundle 済みの tag を隠す Greasemonkey script を書いた。というか既に誰か書いてると思ったんだけど、最近 vimp plugin ばかり書いてたから Greasemonkey script 書けるかなってところでとりあえず書いてしまってそのあとで答え合わせでもやろうかと思ったんだけど CodeRepos の userscript directory ( http://coderepos.org/share/browser/lang/javascript/userscripts/ ) になくて拍子抜けした。誰か同じ思いをしてると思ったんだけどな。まぁ書けるかどうかってのは一発で通ったのでいらん心配だったんだけど。

http://coderepos.org/share/browser/lang/javascript/userscripts/hide_inbundle_label_of_delicious.user.js?

cloneNode 使ってる割に子要素を個別にいじりすぎとか insertNode の指定わかりづらくね ? ってのはおれも思う。思うからそっと修正してやるかほっておくかしてあげてください。

作者:janus_wel

更新日:2008年11月30日 8時50分

このブログのホーム

[JavaScript] DOMParser ?

multi_requester.js に foks.info ( http://foks.info/about/ ) を追加するときに気付いたんだけど parse 処理なんかおかしい。ので応急処置はした ( http://coderepos.org/share/changeset/25338 ) んだけど原因サッパリわかってない。いや commit した時点では DOCTYPE 指定がないから parse おかしくなってるんだと思ったんだよ。

multi_requester.js で request した document を xml として parse する理由は大まかに以下の 2 つ ( 他にもある ? ) 。

  • liberator.echo では valid な xml 文書しか受け付けないのでそのチェック
  • evaluate での XPath 式の適用前準備

今回は parse した結果 DocumentFragment object が返ってきてた ( 期待するのは xmlDocument ) ので前者の条件は満たされてたみたいなんだけどこいつには evaluate がないのでコケてたという状況。幸い multi_requester.js では parse に失敗したときに代替手段で無理矢理 xmlDocument object に変換する方法をとっていたのでそっちへ switch するようにしたんだけど…。

今検証コード書いてみたら ( 以下の code 流し込んでから :domtest http://foks.info/translate/?target=%E5%A4%A9%E7%B6%B2%E6%81%A2%E3%80%85 ) foks.info の検索結果も普通に parse できてるんだけどどういうことなの… ?

commands.addUserCommand(
    ['domtest'],
    'domtest',
    function (args) {
        let xhr = new XMLHttpRequest();
        xhr.open('GET', args[0], false);
        xhr.send(null);
        if (xhr.status === 200) {
            let dom = (new DOMParser()).parseFromString(xhr.responseText, 'application/xml');

            // result: true
            liberator.log(dom instanceof xmlDocument, 0);
            // xml 文書として整形して表示される
            liberator.echo(xhr.responseText, commandline.FORCE_MULTILINE);
        }
    },
    {}
);

取ってきたあとで Range object ( https://developer.mozilla.org/en/DOM/document.createRange ) 使ってこちゃこちゃやってるところがおかしそうなんだけど Range とかいまサパーリなのでとりあえず保留。まぁちょっとさわってみたかったのでいろいろ遊びながらいじってみる予定ではある。てか今回の問題は html を xml に変換する妥当な方法が見つかればいいわけだからそういう方向でも考えてみた方がよさげかなぁ。

作者:janus_wel

更新日:2008年11月30日 8時50分

このブログのホーム

[misc] 花粉

だかなんだか知らないがここ数日何かが飛んでいてすこぶる体調が悪い。もう冬なんだが。体中が痛かったり目がしょぼしょぼするのは別にあまり気にしないんだがその結果思考能力が下がるのが致命的なのでどうにかしたい。どうにもならんのだが。

今日書いた日記は文章おかしいのはわかるんだがどう直せばいいのかわからんというレベル。攻撃的だしな…。とっとと寝てしまえということでもあるんだがどうにもならんことがわかっている以上どうにかするしかないのでどうにかしようとしている結果だ。現代の生存競争は過酷だぜ。

作者:janus_wel

更新日:2008年11月30日 11時18分

このブログのホーム

[book][misc][vapor] 狼と香辛料 II

読んだ。なんか期待するモノと違ってたんだけど、おれがこの小説に期待しているものは他愛もない雑談感というか、主人公ふたりが荷馬車に揺られながら延々と経済そのほかについて語るという場面なのでそもそもそれがおかしい気がする。この巻にもそういうシーンはあるんだけど前巻よりも少なかったからかちょっとがっかりというか。

この巻の構成というのかあらすじというのかは知らないけど露骨すぎて拍子抜けというか、予定調和至上主義的な何かを感じてしまった。構成は強引すぎるというかストレートすぎるというかわかりやすすぎて興ざめしたというか。 object の生成タイミングとかに通ずる論理くささがあってちょっとアレだった。予定調和は別にキライなわけではないと思うので ( 今やってるアニメで最たる予定調和の例であるゴルゴ 13 やラオウ伝は普通にみれている ) おれの期待とこの小説の展開の乖離が原因なのかなぁと思う。そもそもおれはこの小説に対して予定調和的な展開を期待していなかったのでそこで思ったよりもつまらなく感じているのかも。

予定調和はそもそもラクというか安心して臨めるというか励起されるものが少ないので余計なエネルギーを使わなくていいはずなんだけど、最初から結果がわかっているものでないと展開予測をしたり登場人物のタイムラインを描いたりしてしまうので結局エネルギーを使ってしまう。あとその予測が自分の望むものでないと失望しがち ( その物語と自分の予測のどちらが優れているかとかは関係ないはず。予測には通常願望が含まれているので予測通りに展開しないこと自体が失望をうむ ) なのでその物語が予定調和的であるかわかっているか否かというのはけっこう重要なことなのかもと思った。

あと前巻でも似たような描写があったと思うんだけど切り札は絶対に使わないと言いながらさっさと切っちゃっているのがんー、という気分にさせた。経済がテーマのひとつだから現実離れしたものがより浮いてしまうとかあるのかもしれない。そもそも light novel だから軽く読んで軽く流すべきなのかとは思うけども。

とりあえず高校生の恋愛的なハートフルボッコな内容は今回もあって、それは予想の範囲内 ( もんどりうつこともなくなった ) で楽しめるようにはなったので今後はそれを期待して読むかもしれない。ただ、気恥ずかしさ分はこの巻のおかげで足りたのですぐに次の巻に手を付けることはないと思う。そしてそのままおれの選択肢から消えることもあるかもしれない。まぁそこは巡り合わせの問題よな。

作者:janus_wel

更新日:2008年11月30日 4時59分

このブログのホーム

[JavaScript][vimperator][Firefox] appendAnchor.js refactoring

前々からニコ動で blog 晒してるひととか mp3 配布してくれてるひとの URL を選択するのにマウス使っててどうにかならないかと思ってたんだけど今更ながら appendAnchor.js に気付いたので使ってみたら便利すぎて鼻血でそうになったというハナシ。ではなくソース読むのに難儀したので refactoring してしまったというハナシ。おれは cosmetic change がしたかったんだけど。おかしい。

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

とりあえずポイントは 2 つ。

  • buffer.evaluateXPath は結果に iterator generator を仕込んでくれる
    • ので普通に for in で回せばおk。 document.evaluate method を使う場合はこういう書き方できないけど今回は vimp の plugin なのでこっちのがいいね。てかここの loop の終了条件はなんか怪しげだったので全面的に書き直してしまった。
  • window.eval は使わない
    • 今回は liberator.globalVariables.auto_append_anchor の値 ( 文字列 ) を真偽値として扱いたいわけなので以下に示す関数で対処するようにした。 3 項演算子もこうやって使うと if よか見やすい ( ラクダ本からパクってきてる ) 。てか :let での指定はすべて文字列扱いなのと JavaScript の String object に toBoolean method がないのがアレというハナシなんだけどまぁそこはそれということで。
function stringToBoolean(str, defaultValue) {
    return !str                          ? (defaultValue ? true : false)
         : str.toLowerCase() === 'false' ? false
         : /^\d+$/.test(str)             ? (parseInt(str) ? true : false)
         :                                 true;
}

あーあと eval 関連で vimperator の場合は liberator.eval があるんだけどこれは旧 eval ( https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Functions/eval ) を emulate していて第 2 引数で context の指定ができるんだけどなんで旧 eval 仕様が obsolete になったかを考えるとあまり使わないほうがいい。 http://d.hatena.ne.jp/ZIGOROu/20070730/1185783891http://d.hatena.ne.jp/brazil/20080102/1199271357 の例のように開発中にアレコレするってんならわからないことはないけど plugin 内で使うとかは避けるべき。

作者:janus_wel

更新日:2008年11月30日 8時29分

このブログのホーム

[vimperator][Firefox] status bar 最適化計画そのよん ( clock.js )

http://d.hatena.ne.jp/janus_wel/20081127/1227812752 で status bar がかなりいい感じになって最適化も終了かと思ったそのときおれに電流走る。「時計だ。時計を表示しよう。」ゴメンどうしてそうなったのかおれもわかんない。

http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/clock.js

設定できる変数は以下の 3 つ。

  • clock_position
    • 表示位置を示す目印要素の id 。 migratestatusbar.js の position と同じ。 default は 'liberator-commandline-command' 。コマンドラインの右側。
  • clock_after
    • clock_position で指定した要素の後ろに表示するかどうか。これも migratestatusbar.js の after と同じ。 default は true 。
  • clock_format
    • 書式。特殊な指定として下表の 3 つがある。他は書いたとおりに出力される。 default は '[%t]'
tokendescription
%t時間表示。 24 時間表記で hh:mm 形式。コロンが点滅する。
%d月日表示。 MM/DD 形式。
%y年表示。 YYYY 形式。

うちの設定は

let clock_format='[%t %d]'

てしてる。 prompt の前に出したい場合は以下のようにすればいいけど見づらいのであまりオススメしない。

let clock_position='liberator-commandline-prompt'
let clock_after='false'

あと時計部分は id="liberator-plugin-clock-box" な hbox として生成されるので :style コマンドで見た目の変更も可能。以下のようにすると緑で表示するようになる。 font-family とかもいじるとより見やすくなるかも。

" clock style
style -name clock chrome://* <<EOM
#liberator-plugin-clock-box > * {
    color: green !important;
}
EOM

" vim: sw=4 sts=4 ts=4 et

というわけで以下のように変わった。

  • before
    • f:id:janus_wel:20081128040243p:image
  • after
    • f:id:janus_wel:20081128141315p:image

これにて最適化完了。ッしたァ !!!

作者:janus_wel

更新日:2008年11月28日 5時16分

このブログのホーム

[vimperator][Firefox] vimperator customize tips

migratestatusbar.js ( http://d.hatena.ne.jp/janus_wel/20081127/1227807826 ) とか clock.js ( http://d.hatena.ne.jp/janus_wel/20081128/1227849365 ) の移動させる要素とか position 指定に使う id ってどうやってみつけんの ? って思うでしょ思うはず思え。

おれの場合以下の手順で見つけてる。

  1. まず DOM inspector ( https://addons.mozilla.org/ja/firefox/addon/6622 ) 、 inspector.js ( http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/inspector.js ) 、 mouseinspect.js ( http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/mouseinspect.js ) 、 mouseinspect.js に必要な hightlight.js ( http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/highlight.js ) をセッタップ。
  2. おもむろに :mins ( :mouseinspect ) って打って Enter 。マウスでそれっぽいところをウロウロ。すると要素の id がわかるのでそれをもとに migratestatusbar.js や clock.js の設定を書く。 :nomins で mouse inspect mode を解除するのを忘れないように。
  3. それでうまくいかない場合は :inspect! #id を使って DOM inspector を起動。 #id のところは :mins で調べた id 名を入力する。そうすると指定した id に直接飛べるので前後の要素を見て親要素を指定してみたり兄弟要素を指定してみたりと微調整。これでたいていうまくいく。

:mins で調べてるときは以下のようになる。赤枠がマウスで指定してる要素で青枠がその要素の id ね。

あとたまに設定ミスって起動時に赤メッセージでてるときあるんだけどこれが一瞬で流れちゃうので何いってんだかどこが悪いんだかわからないときがある。こういう場合は :messages って ex-command を使うと直前の赤メッセージが出てくるのでそれで原因を探る。直前のメッセージだけしか参照できないんだけど見えないよりかなりマシ。前々からあったかもしれないんだけど最近気付いた。設定時以外にも仕様変わって plugin 動かないとか plugin 書くときとかにも使えるので覚えとくと幸せになれるはず。

作者:janus_wel

更新日:2008年11月28日 7時42分

このブログのホーム

[vimperator][Firefox] image eater

スクリーンショットはっつけるときいつもはてなフォトライフの thumbnail 画像の URL をコピーして使ってるんだけどいちいちマウス握るのめんどくさいので extended-hints mode に追加する形で作った。それだけじゃ寂しいので画像保存 ( 名前を付けて画像を保存 ) ができる extended-hints mode とページ内の画像をすべて落とすコマンドも抱き合わせで。

http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/imageextender.js

機能と発動キーの設定用変数、 default 設定は以下。

featurevariabledefault
名前を付けて画像を保存image_extender_save_key'i'
画像の URL をコピーimage_extender_yank_key'm'

let image_extender_save_key='e' とかすると ';e' で発動するようになる。あと毎回画像保存用の dialog が出るのがうっとうしいひとは image_extender_skip_prompt って変数に 'true' をセットすると dialog 出なくなるのでどうぞ。その場合落ちてくる場所は :pref の「一般」タブ、ダウンロードの項で指定されている場所になるのでファイルが見つからない場合はそこをチェキラ !!

:downimageall はそのままだけど使用する際は十分注意してくださいな。こっちじゃ責任持たないんで。ぶっちゃけるとできるかなと思って試しに実装してみたモノなのであんまり効率的じゃないかも。

あと動的に画像生成してるとこはファイル名取得がうまくいってなくてすべて拡張子 htm で落としてきちゃうんだけどちょっと解決法が見つからないので保留で。あ、サンレッド生放送はじまった。

作者:janus_wel

更新日:2008年11月28日 13時2分

このブログのホーム

[vimperator][Firefox][JavaScript] status bar 最適化計画そのいち ( migratestatusbar.js )

ちょっと status bar ごちゃごちゃしてきたので整理すんべと思っていろいろやってみた結果そのいち。前書いた http://d.hatena.ne.jp/janus_wel/20081028/1225230512 がちょっとアレだったのと http://vimperator.org/trac/ticket/17 のコードが今更理解できたので混ぜて設定とかもできるようにしてみた。

http://d.hatena.ne.jp/janus_wel/20081028/1225230512 では favicon を表示してくれる element を clone していて、まぁ動いてくれるっちゃ動いてくれるんだけど clone 元と id がかぶっているのでよろしくない。そして id を変更してしまうと favicon のないページでは何も出てこなくなったりと Firefox 側で面倒を見てくれなくなる。

対して id:teramako が書いてる方は要素を移動させているというのがキモで、中身をいじってないなら動的な変更は Firefox 側でよしなにやってくれる。 RSS / Atom のあるページで feed button を表示してくれたり favicon を切り替えてくれたり favicon がないページでは適用している theme の default icon を表示してくれたりとかそういうの。

てなわけで feed button だけ移動させるのもちぐはぐな感じがする -> 全部移動させちゃえばいいじゃない -> 移動するためのおれ plugin 書いた -> あれ ? これ抽象化できね ? -> logic 抽象化した plugin 書いた -> 移動する要素と移動先の指定もできるようにしよう -> 完成 <- イマココ!!

http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/migratestatusbar.js

liberator.globalVariables.migrate_elements に以下のような配列を指定すると移動するようになる。以下は star button, feed-button, favicon を移動させる。 local bookmark したらハートが出るから star button はいらなくね ? って設定したあとに一瞬おもったけど URL 長いとハート隠れちゃうので持ってくるようにしてる。うちはこれくらいしか使ってないけど他にも有用なものがあるかも。

liberator.globalVariables.migrate_elements = [
    {
        // star button of awesome bar
        id:    'star-button',
        dest:  'security-button',
        after: true,
    },
    {
        // icon that show the existence of RSS and Atom on current page
        id:    'feed-button',
        dest:  'security-button',
        after: true,
    },
    {
        // favicon of awesome bar
        id:    'page-proxy-stack',
        dest:  'liberator-statusline',
        after: false,
    },
];

スクリーンショットは以下に。移動なので awesome bar は当然悲惨な姿になる。

  • before
    • f:id:janus_wel:20081128023922p:image
    • f:id:janus_wel:20081128023923p:image
  • after
    • f:id:janus_wel:20081128023924p:image
    • f:id:janus_wel:20081128023925p:image

つづく。

作者:janus_wel

更新日:2008年11月27日 17時43分

このブログのホーム

[vimperator][Firefox] status bar 最適化計画そのに ( statusbar_organizer.vimp )

http://d.hatena.ne.jp/janus_wel/20081127/1227807826 で status bar のアイコンも増えてちょっと使い勝手がよくなったんだけどちょと見栄え悪い。ていうかなにこの空白。キモい。主に padding がキモい。 Greasemonkey のサルはイラッとくる顔してるし。

てなわけで :style でこの空白を殺すことに。以下を ~/vimperator/colors/ に statusbar_organizer.vimp とかって保存。ゴメン、 evening.vimp の設定 ( http://coderepos.org/share/browser/lang/javascript/vimperator-plugins/trunk/colors/evening.vimp ) パクった。

" organize icons of status bar
style -name statusbar chrome://* <<EOM
#status-bar statusbarpanel {
    padding: 1px !important;
}
statusbarpanel > * {
    margin: 0 !important;
    padding:0 !important;
}
EOM

" vim: sw=4 sts=4 ts=4 et

vimpratorrc like に double quotation がコメント。 here document で流し込むのは定型で覚えればいいと思う。あとこうやって目的ごとにファイル切り分けとくといい感じにアレコレできてよいかも。これでだいぶマシになった。

  • before
    • f:id:janus_wel:20081128023924p:image
  • after
    • f:id:janus_wel:20081128031424p:image

つづく。

作者:janus_wel

更新日:2008年11月27日 18時17分

このブログのホーム

[vimperator][Firefox] status bar 最適化計画そのさん ( pathtraq.js, yslow.js )

http://d.hatena.ne.jp/janus_wel/20081127/1227809863 でかなり引き締まった status bar だけどなんつーかさ、一番右のアレ、邪魔じゃね ? スペース使いすぎじゃね ? というわけで個別に何とかする plugin を書いた。

別 profile で YSlow 使ってて同じく盛大にスペース浪費してるので yslow.js も。 Pathtraq のアイコンは favicon からパクってきたんだけど著作権とか大丈夫かな ? まぁ文句言われたら差し替えよう。

で、 page/site の rating もこのままだと見られないんだけど vimp 的には pageinfo を使うのが正解だと思ったので pageinfo option を拡張してある。 pathtraq.js は 'p' 、 yslow.js は 'y' が指定可能でそれぞれ status bar に表示してた値 ( Pathtraq は page/site ratings 、 YSlow は grade, size, time ) を pageinfo に表示するようになる。

スクリーンショットは以下。

  • before
    • f:id:janus_wel:20081128031424p:image
  • after
    • f:id:janus_wel:20081128040243p:image

もうちょっとだけ続くんじゃ。

作者:janus_wel

更新日:2008年11月27日 19時5分

このブログのホーム