今日
23:30ぐらいから朝7時ぐらいまで寝てた。ずっと廻り出すセカイ (修正版とそうじゃないのどっちも) をかけっぱで寝てた。未修正版のほうがシガーロスっぽい。
23:30ぐらいから朝7時ぐらいまで寝てた。ずっと廻り出すセカイ (修正版とそうじゃないのどっちも) をかけっぱで寝てた。未修正版のほうがシガーロスっぽい。
atomutil がいいっぽいですね。http://rubyforge.org/projects/atomutil/ とかいうか他に選択肢ない感 (rubyforge で atom を検索するといっぱいでてくるけど、殆どハズれ (リリースいっこもない))
つかってみたら、feed.links に feed 直下の要素ではない link 要素も含まれてしまう。
--- atomutil.rb.orig 2008-01-01 15:07:56.000000000 +0900
+++ atomutil.rb 2008-01-01 15:05:54.000000000 +0900
@@ -604,10 +604,10 @@
def child_xpath(ns, element_name, attributes=nil)
ns_uri = ns.is_a?(Namespace) ? ns.uri : ns
unless !attributes.nil? && attributes.is_a?(Hash)
- "descendant-or-self::*[local-name()='#{element_name}' and namespace-uri()='#{ns_uri}']"
+ "child::*[local-name()='#{element_name}' and namespace-uri()='#{ns_uri}']"
else
attr_str = attributes.collect{|key, val| "@#{key.to_s}='#{val}'"}.join(' and ')
- "descendant-or-self::*[local-name()='#{element_name}' and namespace-uri()='#{ns_uri}' and #{attr_str}]"
+ "child::*[local-name()='#{element_name}' and namespace-uri()='#{ns_uri}' and #{attr_str}]"
end
end
endrubyforge の Tracker は使われてんのかなぁ……
ref. http://d.hatena.ne.jp/lyokato/20071211/1197353609
URI#path がつかわれてるけど、Atom ってクエリ文字列ふくんでる URI はダメなのかな……
client.get_resource("http://example.com/foo?bar") がたぶん失敗する (URI#path => "/foo")。rfc5023 には特に query についての記述はないっぽいけど、こういうリソースが妥当なのかどうか (実際あるのか) わからない。
fotolife API は Atom 0.3 なのでちょっとだけ工夫がいるのですが
require "rubygems"
require "atomutil"
require "yaml"
require "pathname"
file = Pathname.new("2150944907_5be2ee34ac.jpg")
entry = Atom::Entry.new({
:title => file.basename.to_s,
:updated => Time.now,
:content => Atom::Content.new { |c|
c.body = [file.read].pack('m')
c.type = "image/jpeg"
c.set_attr(:mode, "base64")
},
})
puts entry.to_s
config = YAML.load(Pathname.new("~/.hatena.ne.jp.yaml").expand_path.read)
client = Atompub::Client.new({
:auth => Atompub::Auth::Wsse.new(:username => config["user"], :password => config["pass"])
})
post_uri = "http://f.hatena.ne.jp/atom/post"
p post_uri
p client.create_entry(post_uri, entry, file.basename.to_s)とやるとできるみたいです。Atom::Entry とかがブロックをとれるので綺麗にかけていいですね! (mode="base64" は Atom 1.0 だとなくて、バイナリをそのまま Content-Type 指定して送信するみたい (まだちゃんと読んでないけど……)。base64 でいけると XHR でも画像が POST できるからいいんだけどなぁ)
ちなみに拡張子から mime-type への変換は WEBrick 使うと簡単です (mechanize でもこうやってる)
require "webrick/httputils"
mime_type = WEBrick::HTTPUtils.mime_type("foo.jpg", WEBrick::HTTPUtils::DefaultMimeTypes)
p mime_type #=> "image/jpeg"
javascript:(function c(s,i,a){if(a){window.jsonFlickrApi=c;s.type="text/javascript";s.src="http://api.flickr.com/services/rest/?method=flickr.photos.getInfo&format=json&api_key=13b98c6e595d688ce25febb790f85bc5&photo_id="+i;document.body.appendChild(s);}else{location=(s.photo.urls.url[0]._content)}})(document.createElement("script"),RegExp("http://farm\\d+.static.flickr.com/\\d+/([^_]+)_").exec(location)[1],document,1);http://farm3.static.flickr.com/2365/2153801040_558425c251_m.jpg みたいなとこから、もどるときユーザ名がわからないからめんどくさい。
やってることは flickr.photos.getInfo を JSONP で叩いているだけです。画像の URL も HTML として扱えるブラウザならうごきます (Opera はだめ。IE はしらない)
Opera でも動くようにしました。id:os0x さんありがとう!
もっと短かくしてみた
javascript:(function c(d,i){if(i)d.body.appendChild(s=d.createElement("script"),s.type="text/javascript",s.src="http://api.flickr.com/services/rest/?method=flickr.photos.getInfo&format=json&api_key=13b98c6e595d688ce25febb790f85bc5&photo_id="+i,jsonFlickrApi=c);else{location=d.photo.urls.url[0]._content}})(document,/\/\d+\/([^_]+)/.exec(location.pathname)[1]);
flickr 自体にリダイレクタがあるみたいです。→ http://monaural.net/post/2008/12/flickr-url/
箸の使いかたが少し上手になりました。
過去の日記読みかえしていたら、すこし、撮りたい写真を思いだしてきた。最近かわいい女の子について想像していないのと、同じような原因で忘れてしまっているようだ。なにかと、学校いかなくなってから、幸せだからなぁ……
なんで、おれは、センスがないんだろう…… 人生、なにもかもをやりなおすか、むしろ、別の、美しくて、なにもないようなところへ、いきたい……
自分は、悪意のあるものを徹底的に排除したいので、そういうのが、継続的に続くようなものは、自動で無視できるようにしようとしてる。そういう、本来、独りでつぶやき、独りで解決するような、悪意のあるつっこみ、茶々、みたいなのは、とにかく消してしまってかまわないと思う (消してしまう、というのはクライアントサイドの話で)。批判ではないネガティブなものは、本当に、意味がない。
「簡単にコメント」できる、みたいなのは、必ずしも良いことではない。簡単なフィードバックは、必ずしも良いことではない。ただし、機械的にある程度フィルタリングできるならば、できるだけ簡単にフィードバックができてもいい。いらないものは、機械によって読まれ、捨てることができる。でも、批判を気取った中傷みたいなのは、機械での判定が難しくて、嫌だ。
これ、めっちゃいいよなぁ……なんでいいんだろう。すこし混沌とした感じがするけど、そうでもない。
批判は、読んだあとに、考えることが、たくさんある。反論であったり、納得であったり、いずれにしても、対象をよく考えなおすことができる。でも悪意はそうじゃない。単に、嫌な気持ちになるだけだ。
なんかリミックスがどっかにあったような……って思って探してしまった……
Paradise Lost のボーナス CD だった…… (Tony Doogan mix) こっちのほうがすきかなぁ。遠くから響いてくる、遠近感が、おもしろい。
別に行きたいわけじゃないけど「グラスゴー」って語感がすごく好きだ。
技術力というより、評価がすごくフェアであることに尊敬する……メインの言語が違うから、直接何がすごいか、っていうのを実感できていないけど (頭ではわかる、みたいな感じ)、そういう部分が、本当に実感して、すごいと思う。
http://www.nicovideo.jp/watch/sm1878349 (gomez)
これすごい好きだなぁ。すこし凛とした感じ、冬の朝とか、冬の学校の放課後の屋上みたいなイメージ。じわじわ
ID3 にアーティスト名が入ってなくて迷ったけど作曲者の名前を入れるようにした。(同名の海外アーティストがいるみたいけど)
ポップな Sigur Rós って感じ (それ Sigur Rós じゃない)
高音のミクの声って Sigur Rós のボーカルにちょっと似てると思う。似てねぇよって言われそうだけど w
はぁ……まじいい曲だ
修正前のバージョンもめっちゃすき
http://d.hatena.ne.jp/keyword/Sigur%20R%8f%ab%d1s にキーワード記法でリンクはれないね。(数値参照になってしまうから)
あと、その場記法だとキーワードリンクが生成されない気がするんだけど大丈夫なのかな。
なんか右クリックすると Open Selection Links in Tabs が暴発することがかなりある…… たぶん右クリックメニューの挙動が変なんだろうけど、セレクションがないのにセレクションがあると勘違いするバグとの相乗効果でかなり困る。何がわるいんだろ……
ひさしぶりに近所を散歩して写真を撮ってみたけれど、ろくな写真がとれない……
自分は白くて派手じゃないシクラメンがベロニカペルシャの次ぐらいに大好きなので、もっと撮りまくりたい。うつむいて、静かにしてる感じがすごくいい。でもって、よくみると艶容なのもすごくいい。シクラメン、っていう名前もいい。「つめたくてかわいくてきれい」だと思う。
無口な女の子はそんなに好きではないけど、嫌いでもないなぁと考えながらコンビニの帰り道を歩いていたら、なんとなく、三人以上でいると良く喋るのだけれど、二人になると喋らなくなる女の子、というのが少しグっとくることに気付いた。
ロシア語のフィードバック的なものがあったのだけれど、全く読めなくて、最初それがロシア語かどうかもわからなくて、訊いたりして (ありがとうございます)、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);
}
}