Development Environment Conference に行ってきた。
- vim text-objects
- *, #
- CSS 超高速リロード
- svk, CPAN-Mini でオフライン化
- バイナリパッチングカッコヨス
Development Environment Conference に行ってきた。
最近なんとなく null より nil のほうが好き。
この日記はローカルで XML 編集してアップロードして書いているのだけど、いい加減 XML 書くのが嫌になってきた。Markdown と Trac Wiki 記法とを混ぜたやつで書きたい。それとローカルでしか書けないのがだめすぎ。外出先から日記を書けない。
XML で書くのは、全て制御できるけれど、もうそれにいまいち魅力を感じなくなってしまった。別に Markdown だって HTML が書けないわけじゃないし、HTML を完全に思い通りに書いても、そんなに意味がない気がしてきた。well-formed なら十分なんじゃないか? って思い始めた。abbr はかけるコストの割りに役に立たない。ような。
URL はそのままで、うまく再構築したいなぁ。トラックバックはいらないし、久しぶりに Ruby だろうか。Rails 使ってみたいけど、CGI 動作じゃ死にそうだから使う気にならない。うーん
>>+++++[-<++++++>]<+[-<++>]<.>+++[-<------>]<-.... .....>++++++[-<++++++++>]<.>>+++++++++++[-<++>]<+[ -<-->]<.+++++++++++++++.-----------------......... ...>+++[-<++++++>]<+.>+++++[-<++++++>]<+.>++++++++ +++[-<--->]<.-----------------.+++.-........+.---. ..........>+++++++++++[-<--->]<.>+++++++++++[-<+++ >]<....+++.++++++++++++++++.>+++[-<------>]<-...>+ +++++[-<++++++++>]<.>>+++++++++++[-<++>]<+[-<-->]< .+++++++++++++++.---------------......++++++++++++ +++++.>+++++[-<++++++>]<+.>+++++++++++[-<--->]<.-- -------------.+.++++++++++++++++.>+++[-<------>]<- .............>++++++[-<++++++++>]<.>>+++++++++++[- <++>]<+[-<-->]<.+++++++++++++++.---------------... ..+++++++++++++++++.>+++++[-<++++++>]<+.>+++++++++ ++[-<--->]<.--------------.++++++++++++++++.>+++++ ++++++++[-<---->]<.>+++++++++++[-<+++>]<.......... .......>++++++[-<++++++++>]<.>>+++++++++++[-<++>]< +[-<-->]<.+++++++++++++++.-----------------..>+++[ -<++++++>]<+.>+++++[-<++++++>]<+.>+++++++++++[-<-- ->]<.--------------.---....+++.++++++++++++++++.>+ ++[-<------>]<-..........>++++++[-<++++++++>]<.>>+ ++++++++++[-<++>]<+[-<-->]<.+++++++++++++++.------ ---------.....>+++++++[-<----->]<.>+++++++[-<+++++ >]<.+++++++++++++++++.>+++++[-<++++++>]<+.>+++++++ ++++[-<--->]<.--------------.>++++++[-<------>]<.
おまけ。昔書いたやつ。選択範囲内のbfを実行.js for JSActions
ごちゃごちゃやる用事があって MT を使っているのだけど、テンプレートを一括して作ってある場合インポートするのがひどく面倒くさいのでスクリプト化してみた。
make-import-mt-templates-bookmarklet.rb
開くと TEMPLATES の定義があるので、例にならって適当に書く。書いたら ruby make-import-mt-templates-bookmarklet.rb 出力ファイル名.js とかやると、本体ができる。ついでにブックマークレットの雛形を出力する。
なんか説明すると意味わからないな。できた JS は Fx1.5 以上で動く。
配布する人さえこれを使えば、そのテンプレートを利用したい人はブックマークレットを利用するだけ、という形をとる。
サンプルとして、Web Standards with MT ver.3.2 Strict : ダウンロードページ のテンプレをパックしてここで再配布してみる (自分のやつはちょっと問題があるので)。パックしたやつはもとのライセンスにしたがい CC-by-nc-sa に。
テンプレートをインポートする : このブックマークレットを一時的にブックマークして、MT のテンプレ一覧ページで使うだけです。
書き換えて使った上のスクリプト pack_mt_3_2_strict.rb
バグっててテンプレが壊れても知りません。テストしてみようとして既存のテンプレ上書きしても知りません (自分がやった)
少し前某所にいたとき、絶対パスを「http:// からはじまる~」と説明していたのを傍で聞いていて、なんか違うような (で、でも、わたし、正確に調べたわけじゃないし##) みたいな感じだったのでちゃんと調べる。
といっても、普通に RFC を確認するだけ。おなじみ RFC3986 を適当に調べる。と、該当部分は
なんだけど、こっちの RFC だと少しまわりくどいので、上書き前の RFC2396 を見てみる。もちろん若干違うのだけど、上書きされたのが最近ということを考えれば、もともとの由来はこっちにあったと考えられる。
absoluteURI = scheme ":" ( hier_part | opaque_part ) hier_part = ( net_path | abs_path ) [ "?" query ]
relativeURI = ( net_path | abs_path | rel_path ) [ "?" query ]
abs_path = "/" path_segments rel_path = rel_segment [ abs_path ]
絶対 URI (absoluteURI) はスキームから始まるやつ。相対URIはパスにクエリー付けられるやつ。絶対パスは / からはじまるやつ。
URI 的にはこういうものらしい。
あと上書き後では次のようなノートが書いてあったり、定義が微妙に変わっていたり (フラグメントがどうとか) する。とりあえず相対 URI は今は正確には URI 相対参照みたいだ。
NOTE: Previous specifications used the terms "partial URI" and "relative URI" to denote a relative reference to a URI. As some readers misunderstood those terms to mean that relative URIs are a subset of URIs rather than a method of referencing URIs, this specification simply refers to them as relative references.
何度も書いているけど、新しい人とリアルで話すのは、果てしなく面倒くさい。相手がどのレベルでキレるか、相手がどのぐらいリテラシを持ってるかを、慎重に量らないといけない。こういうこと、どうにかできていたのが、その期限だったわけだけど、それがとっくに終わってしまってる。もう成り行き上仕方なく、という展開以外に、そういう作業はしない。というか、期限内でも、どうにかやっているというレベルではなかったように思う。慎重さに欠けてたように思う。もういいけど。
例えば大学で誰か知り合いを作るにしても、こういう手順を踏むのはなかなか難しい。たいして会うわけでもないし、しかも、量った結果が、望んだ結果であるとは限らない。というより、多くの場合期待は裏切られる。最初からないものに期待してる頭の悪さがここにある。
ネットリテラシの量りかたも、いまいちよくわからない。「これはひどい」の響き方が、タイプによって違うことに気付いたけど、どうも使い分けているような人もいてややこしい。ツンデレにしても萌えにしても、レベルというか、使い方の違いがあってわからない。フィードリーダーを使っていなかったりする。フィードリーダーを使っていてもあんまり購読していなかったりする。何か一個のことで、ちゃんと量れない。つまり、そこそこの長い時間をかけないといけない。どんだけ面倒くさいんだよ、って。かけた時間は殆ど無駄になる。そこまでして、いまさらリアルが必要か? リアリティで十分ではないか?
ネットで日記を読むのが面白いのは、画面の向こうの人の形を、こちらが自由に想像できるから。何か、自分の中のキーワードにひっかかる人の日記を見て、こういう人なんだろうか、こういう人なんだろう、とか、勝手に想像できる。自由に。ネットの中で完結している限り、自分の想像は守られる。
ここで、期待が膨らんで、コミュニケーションをとろうとしてみても、割と大丈夫だ。なぜかといえば、想像が侵されそうになったとき、自分からそのコミュニケーションをやめることができるから。自分の想像が、壊れない程度に、コミュニケーションができる。面倒くさそうなことになったら、回線切って寝ればいい。明日は曇りのち晴れ。
これが正しくない、と思うだろうかとか。実際、リアルでも同じようなプロセスが、より短時間により集中的により危険な状態で行われているだけ、だけど。一日の間に、何十もの勘違いをして、少しわかった気になって、次会うとき終わるような。しかも、何も全く知らないところから、手探りで。より無駄が多い。楽しみが少ない。よく考える時間がない。何より、コミュニケーションを強要されるのは面倒くさい。別に、そんな話聴きたくないよ。別に、こんな話、聴きたくないでしょう。
昨日は、9時間寝て、夢を見たけど、夢の内容を忘れた。いい夢だった気がする。けど、忘れた。忘れても、いい夢だった、と。雰囲気。でもたぶん、それじゃなくて、ちゃんと思い出しても、妄想なのかもしれないけど。
,他人のページを見たとき、その人がいつぐらいに mixi に登録したかを表示します。インストールすると最終ログインの下におおよその登録した月が表示されるようになります。
データは今日までのを適当に集計したやつで、今日以降登録した人は一括して 2006-08 以降と表示されます。メンテナンスする気はありません(てきとう
verbose 設定を追加しました。デフォルトでオン。オンのときはそこらじゅうの写真にいつ登録されたかが表示されます。
,やたら好評で見たほうがいいよ!とかいう話だったので、ゆーさん (誰) と真雪さんと見てきますた。
また (謎) 時間跳躍系なんですが、これは SF っぽさは殆どなく、終始青春でした。やばい。青春やばい。青春系で、ただし切なさ多め、ぐらい、だった。
17歳に、なりたい。ただ、それが、高校で、オレが、オレでないことを祈って、あるいは、オレがオレであっても、オレ以外のオレが、オレの中にいるように、生きたい。
どうでもいいけど、自分が想像する、洗濯機からでてくる女の子は、ヘッドフォンをつけてない。なぜなら、彼女にはそれが必要ないからなんだけど、いや別についていたっていいんだけど、ついていない子を見るほうが、多い。洗濯機から出てくる女の子は、目立たない。違和感がない。日常に溶け込んで、洗濯機から出てくる。
普通さの正しさ、自分の考える完全な普通さは、洗濯機からでてくる女の子につまっている。その日常とか、透明さが普通で、でもこの論理的じゃない、理不尽な世界においてそれは異常に見えることも、ときにはあるよね、っていうこと、なんですね。
すごく普通なことは、実際ほんとにリアルに溢れていて、それが自分の眼に「リアリティ」として現れるには、自分がそれに気付けるか、という一点にかかってる。自分がそれを感じられるか、って忘れないようにしないと。
雰囲気に飲み込まれて、立ち位置を見失うと、せっかく構築しかけた世界観も壊れるから、注意しながら、しっかり考えないと、また明日も明後日も危ない。
君と僕が、繋がるってことさ。
dll 関数 の補足と覚書
GM_xmlhttprequest の onload でなんで .call とかやっているかというと、一部ライブラリが this を window (Global) と仮定したコードになっているからです。eval のコンテキストの this を window (Global) オブジェクトにしてあげて、例えば MochiKit の export 先オブジェクトをそこにしてあげているわけです。
でもって、なぜ unsafeWindow でなく window なのかっていうのは、その export された関数とかが、ロードされたページに影響を及ぼさないためです。Greasemonkey 中の window はページ内のスクリプトからはアクセスできない (safe) ので、Greasemonkey 内限定で使う場合、副作用の懸念を減らすことができます。
でもって、id:brazil さんの記事 で、あああって思った。全部とってきてから eval したら、変に何回もリクエスト送らないでいいや。と、いう、か、GM_setValue 使えばいいんだけど、ちょっと GM_setValue で長い文字列突っ込むのは怖い。
大学在学中にやりたいこと。もっと、物理的なことをやりたい。が、それだけで完結せず、コンピュータ・ネットワークと繋げたい。具体的に何か思い浮かばないけど、なんらかの形で光をとりいれたい。もちろん接触センサーとかもやりたい、が、まったくその辺わからない。理系大学じゃないのがネック
vim に慣れるために Windows でのエディタも vim にしてみる、といってもしばらくは共存になりそうだ?
vim といっても gvim でバッファは使わず、タブをひたすら開くことにする。とりあえず関連付けは変えない。というのも、既に開いている vim で開く方法がよくわからないから、だけど、ドラックアンドドロップが使えるのでとりあえずはいいかな。
しかし何故か ft=xml で、閉じタグの omni 補完ができない。ft=html ならいけるんだけど、未登録タグ直下でオートインデントしてくれないので切ない。ついでに CDATA セクションの扱いもアレだし、うーん。とりあえず今は html で書いてる。閉じタグ補完ないと生きていけない。
できれば xyzzy の xml-mode C-. 相当の機能が欲しいけど、とりあえずそんなに困らないからいいか的何か。むしろ = 入力後のクオーテーション補完のほうが欲しい、んだけど、うまく vim script 書けない。
全然関係ないけど、このサイトの更新システムをどうにかしたい。家の PC でしか基本的に書けないのがイマイチ。FTP うpろどしないといけないしなぁ。めんどい
しかしながら何らかのタイミングでプロンプトが見え隠れするのが嫌だなぁ。
既にある vim で開くには --remote らしい。
win32 gvim は見た目がちゃんとネイティブっぽくていい感じ。マウスホイールも効く。が、コマンドプロンプトが開いたり閉じたりするのはどうするんだ gtlt
なんかやったらすぐに normal に戻る癖をつけよう。
コマンドプロンプトがいちいちでるのは screen の window 名変える echo が動いてるせいだった。gtlt
バッファとタブを併用すると混乱するのでタブに統一したい。vim のバッファはタブごとに複数のバッファ、という風になっていてややこしい。タブ1個に対してバッファ1個にしたい。
たいした方法が思いつかないので以下を加えた。
" バッファを使わない autocmd BufReadPost * tab ball
これで一応関連付けとかドラッグアンドドロップのときはタブを開くようになる。けど、ちょっと挙動が気持ち悪い。タブを閉じても結局バッファは残っているため、次に何かのファイルを開いたりすると閉じたのが復活したりする。これは常に bw (バッファを閉じる) を使っていればたぶん大丈夫なんだろう?
GreaseMonkey で外部ライブラリが使いたいな。みたいな。似たようなのでは CMS researcher - Greasemonkeyでprototype.jsやscript.aculo.usを使う方法 があるのですが、どうもうまくいかなかったので自力実装。
function dll(loadLibs, afterLoadedFunction) {
if (afterLoadedFunction._retry)
afterLoadedFunction._retry = 0;
else
afterLoadedFunction._retry++;
if (afterLoadedFunction._retry > 10) throw("Library is not loaded because of some reason.");
loadLibs.forEach(function (lib) {
GM_xmlhttpRequest({
method : "GET",
url : lib[0],
onload : function (req) {
try {
(function (r) { eval(r.responseText) }).call(window, req);
} catch (e) {
// nigiri tubushi
}
},
onerror : function (req) {
alert(req.responseText);
}
});
});
var loaded = true;
loadLibs.forEach(function (lib) {
try {
loaded = loaded && typeof eval(lib[1]) != "undefined";
} catch(e) {
loaded = false;
}
});
if (loaded) {
try {
afterLoadedFunction();
} catch (e) {
unsafeWindow.console ? unsafeWindow.console.log(e)
: window.dump(e);
}
} else {
var f = arguments.callee;
setTimeout(function () { f.apply(this, [loadLibs, afterLoadedFunction])}, 500);
}
} で、以下のように使う。
// 第一要素にロードする js への URL
// 第二要素にロード確認用のオブジェクトの名前
// を入れた配列の配列
dll([["http://example.com/mochi/Base.js", "MochiKit"]], function () {
// ロードされたら実行される
}) ポイントは eval を使うところ? eval を使うので unsafeWindow を極力使わなくてすむ。あとは DOM 系の処理でおかしいこと (ここには append できないぜ系エラー) になりにくい気がする。
ロードするスクリプトの依存関係上、何度かリクエストが発射されることがある。めんどいのでブラウザのキャッシュ機能にまかせてこっちではキャッシュしていないけど、ホントはちゃんとキャッシュしたほうがいいはず。
でもって、はてなアンケートの円グラフを PlotKit で描画しなおす GreaseMonkey スクリプトを書いてみた。hatena-q-make-graphs-with-plotkit.user.js
結果をソートするようにした。あと Global じゃなくて window 使うようにした。
id:secondlife さんからの指摘により、エラーを握りつぶす処理を追加し、最大ロード試行数を加えました。
なんとなくぼーっとソースを読みたいときって、コンソールのアプリケーションだとだめなんだよなぁ。マウスでドラッグアンドドロップでエディタで開いて、マウスホイールで眺める。そういうのを楽にやりたい。
Linux デスクトップとかだとこういうのがすっごいやりにくい。ファイラが使いにくい。なんか疲れる。
キーボードがもっとうまく使えたらいいんだろうなぁ。気合入れないとキーボード使えない。なんかキーボードは typo しまくるから、ストレスたまる。いつまでたってもタッチタイピングできない。P とか今だに一発でうてなくて @ を押しまくる。, も . もうまく入力できない。数字もだめだ。みないと打てない。[ とか ] も、? も / もうまくうてない。そして、そもそも左シフトを押す習慣がない。右手の動きに無駄が多すぎる。そういうのをいちいち感じるから、キーボードはストレスが溜まる。
それで結局、改善しようと思っても、いつもの無駄なうちかたをしてしまう。無駄な打ち型のほうが早いんだから仕方ない。少しずつやっていくしかない。左手があんまり動かなくなったのもかなり最近だしなぁ。CapsLock を Ctrl に変えたあたりでやっとあんまり動かなくなった。
Remember The Milk 使い始めた。思ったより使いやすく感じない (タスクの選択とかがイマイチわかりにくい気がする)。
課題とかのタスクを登録しておいた。あと、おきてからすることとか。不安なことをタスク化するのは楽になってよい感じ。でも登録したはしたで、「まだ登録しきってないタスクがあるんじゃないだろうか」と不安になるダメさ。
タスクの一覧ってないのかなぁ。リストを超えたグローバルなやつ。