写真
ひさしぶりに近所を散歩して写真を撮ってみたけれど、ろくな写真がとれない……
ひさしぶりに近所を散歩して写真を撮ってみたけれど、ろくな写真がとれない……
自分は白くて派手じゃないシクラメンがベロニカペルシャの次ぐらいに大好きなので、もっと撮りまくりたい。うつむいて、静かにしてる感じがすごくいい。でもって、よくみると艶容なのもすごくいい。シクラメン、っていう名前もいい。「つめたくてかわいくてきれい」だと思う。
無口な女の子はそんなに好きではないけど、嫌いでもないなぁと考えながらコンビニの帰り道を歩いていたら、なんとなく、三人以上でいると良く喋るのだけれど、二人になると喋らなくなる女の子、というのが少しグっとくることに気付いた。
ロシア語のフィードバック的なものがあったのだけれど、全く読めなくて、最初それがロシア語かどうかもわからなくて、訊いたりして (ありがとうございます)、Google の機械翻訳で英語へ変換 (日本語への翻訳はできない) してみたときの、なんとも言えない感覚、あぁ読めた……っていう感覚が、なんとなく面白い。
日本語の文章を、英語圏の人が読もうとしたら、自分がその最初に感じた、読めない絶望感や、歯痒さ、途方もない感じが、やはりあるんだろうなぁと思った。そういう意味で、英語だと、いくら読めないといっても、調べる手段 (その文字をうちこめる) があり、読もうと思えばどうにか読める、というのは、大切なんだなぁと感じた。
userscripts.org をコマンドラインから更新するためのツール user.js みたいなのをつくるとしたら、はたして JS on Rhino と rubygems だとどっちのほうがいいんだろう、とおもった。(gem のほうがいいとおもう)
そういえば、Opera は公式みたいなところに user.js 配布するところあるのかな
rake が、あるファイルの、うめこまれた Rakefile を解釈する、みたいな機能をもってると便利だよなぁ
rake -f foo.user.js publish
とかできるようになるとうれしい。
と、まで書いたところで、Rakefile ってただの ruby スクリプトだから工夫したらできるよなと思ってやってみた。
ようは user.js でもあり ruby でもあるコードをかけばいい
// ; <<EOF # Embed Rakefile
// ==UserScript==
// @name Vox Editing with WYSIWYG or HTML alternately
// @namespace http://lowreal.net/
// @include http://www.vox.com/compose*
// ==/UserScript==
ここに JS コード
/*
EOF
# ↑ ここまでヒアドキュメント
# ここに Ruby コード。
# ただし */ は書けないので正規表現リテラルかくときは注意しないといけない
desc "upload to userscripts.org"
task :release do
foo...bar....
end
# ↓ JS のコメントアウトをとじる
# */Ruby では // はコメントではなく正規表現リテラル。ヒアドキュメントで JS コードをスキップさせてる。
もちろん、このままだと DRY じゃなくてダサいので、rubygems とかに userscripts.org を操作するライブラリをあげて (rubyforge みたいな)、それを使うようにたらよさそう。(require "userjs/raketasks" みたいな)
でもこれ壮絶にキモいからやめたほうがいい…… (正気にもどった)
Rakefile にする必要も別にない。なにがやりたかったんだろう……
\0 があるとそこでとめられてしまう……
無駄になったコードこぺ
function multipart(data) {
var ret = [], boundary = createBoundary();
for (var k in data) if (data.hasOwnProperty(k)) {
var list = data[k];
for (var i = 0; i < list.length; i++) {
var obj = list[i];
if (obj.filename) {
ret.push(
'--' + boundary,
'Content-Disposition: file; name="'+k+'"; filename="'+obj.filename+'"',
'Content-Type: '+obj.contentType,
'',
obj.content
);
} else {
obj = String(obj);
ret.push(
'--' + boundary,
'Content-Disposition: form-data; name="'+k+'"',
'',
obj
);
}
}
}
ret.push('--' + boundary + '--', '');
return {
contentType : "multipart/form-data; boundary=" + boundary,
data: ret.join("\r\n")
};
function createBoundary () {
return "B"+Math.floor(0x1000000 + Math.random() * 0xffffff).toString(16);
}
}