2009年 10月 01日

2009年 10月 02日

2009年 10月 03日

2009年 10月 04日

2009年 10月 05日

何も書かないで寝ようと思ったけど、他人の日記を読んで少々元気になったので書く

  • 土曜日、夕方に北野天満宮をみて平野神社までいったけど、なんか憂鬱になってすぐ帰ってきた。
  • 日曜日、どっかいって頭使ってなんかしよう、という気分にならなかったので、植物園にいった。これは良かった。

妙にぽかーんとした気分になってしまっていて、何もする気にならない。とはいえ、家にずっといるともっとよくない気分になるので外にでるようにした。休日、割と16時ぐらいには家に帰ってくるような行動をとっていたのを、時間をずらして、15時ぐらいに目的地に付くようにとかするようにしてみた。時間を変えると見えるものも違う。早朝とかもやってみたい。

外にでると気持ちの振動がおおきくなるので、結構疲れるのだった。ある瞬間では「もうこれでいいなぁ。自然でいい」と思えるのも、次の一瞬では「全くだめだ。何も足りない」と感じたりと落ちつかない。家にいると落ちつきはするが、ずっと後者のような気分になる。

うー 秋ってこんなにアレだっけ……

gerry++

2009年 10月 06日

2009年 10月 07日

MP3 プレイヤーのUSB端子が壊れて充電できなくなってしまったので[asin:B0017M71IE:title]を買ってみた。8GBで5kしないのでまぁ失敗でもUSBメモリとして使えばいいやみたいな……

最低限使えるのでとりあえずいいかなぁという気がする。ボタンがちょっとふにゃってて押しにくい。慣れれば気にならないのかもしれない、わからない。

今だに、中学、高校と使っていた SAMSUNG のMP3プレイヤーに勝るプレイヤーが見つからない…… あれ、ハード的にもよかったしソフト的にも良かったのになぁ……もったいない。

うさぎドロップ6

[asin:4396764677:image]

やっと買って読んだ。ほんと面白い漫画だなぁ…… 前巻にあったもやもやした感じが吹っ切れてよかった。

まだ読んでないけど他に買ったもの

[asin:483992998X:image]

[asin:483992998X:title] 昔からこういう展開図とか載ってる本が好きなのでなんとなく買ってみた。

[asin:447930066X:image]
[asin:4061592998:image]

[asin:447930066X:title], [asin:4061592998:title] 社内のどっかで見て気になったので

そういえば書いてなかったけど、最近以下の本も手に入れた。

[asin:4499279100:image]

[asin:4499279100:title] 仕組み解説。実際に作ってみるために買ったのだけど、まだ作ってない。

[asin:4763007300:image]

[asin:4763007300:title] 写真集をちゃんと手にするのは初めてなので興味深かった。どでかい本なので殴ったら凶器になりそう。

「自分自信を知るために自身を被写体にする必要がない」というのがあとがき?にあって、あぁやっぱここがスタート地点なのかという感じがした。これだって遅かれ早かれ気付くことだけど、明文化されていて嬉しいような悔しいような気がした。

Android の geolocation で GPS を使う方法

Android には Gears が入っていて、gears の geolocation API が使えることは使えるのだけど、GPSをちゃんと使う方法がなかなかわからなかったのでメモ (素朴に使うと WiFi + IP アドレス?しか使わないっぽくて、とれないことが多い)

var geo = navigator.geolocation || google.gears.factory.create('beta.geolocation');

geo.getCurrentPosition(
        function (pos) {
                alert([pos.coords.latitude, pos.coords.longitude].join(','));
        },
        function (e) {
                alert(e.message);
        },
        {
                enableHighAccuracy: true
        }
);

enableHighAccuracy が true じゃないと GPS 情報を使わないようだ。このままだと Google の Geoloation API をまだ叩きにいく。さらに gearsLocationProviderUrls: [] とか指定すれば、純粋にGPSだけの情報がとれるようだ。

        {
                enableHighAccuracy: true,
                gearsLocationProviderUrls: []
        }

ただ、なんか GPS のタイムアウト時間が短いので、前もって別のアプリケーションで GPS fix させてからじゃないとダメな気がする。要検証。watchPosition でとれるまで待つという方法もあるかもしれない

追加検証してみたけど、ちゃんと座標を取得したいなら、watchPosition でとれるまで待って、clearWatch するのがよさそう (キャンセルボタンもつけて)。

watchPosition ならとれるまで試行できる。

gearsLocationProviderUrls: [] を指定すると Chrome でエラーがでるようになったようだ。なのでつけないほいがいい、ないしブラウザ判定を入れる必要がある

2009年 10月 08日

Levenshtein 距離 / Ruby / RubyInline

module Levenshtein
	def levenshtein(a, b)
		if Inline::USABLE
			Inline.levenshtein(a, b)
		else
			PureRuby.levenshtein(a, b)
		end
	end

	module PureRuby
		def levenshtein(a, b)
			case
			when a.empty?
				b.length
			when b.empty?
				a.length
			else
				d = Array.new(a.length + 1) { |s|
					Array.new(b.length + 1, 0)
				}

				(0..a.length).each do |i|
					d[i][0] = i
				end

				(0..b.length).each do |j|
					d[0][j] = j
				end

				(1..a.length).each do |i|
					(1..b.length).each do |j|
						cost = (a[i - 1] == b[j - 1]) ? 0 : 1
						d[i][j] = [
							d[i-1][j  ] + 1,
							d[i  ][j-1] + 1,
							d[i-1][j-1] + cost
						].min
					end
				end

				d[a.length][b.length]
			end
		end

		module_function :levenshtein
	end

	module Inline
		begin
			require "rubygems"
			require "inline" # sudo gem install RubyInline

			inline do |builder|
				builder.c <<-'EOS'
					VALUE levenshtein (VALUE array1, VALUE array2) {
						VALUE ret;
						long len1 = RARRAY(array1)->len;
						long len2 = RARRAY(array2)->len;
						long i, j;

						long** d = ALLOC_N(long*, len1 + 1);
						for (i = 0; i <= len1; i++) {
							d[i] = ALLOC_N(long, len2 + 1);
							memset(d[i], 0, sizeof(d[i]));
						}

						for (i = 1; i <= len1; i++) d[i][0] = i;
						for (j = 1; j <= len2; j++) d[0][j] = j;
						for (i = 1; i <= len1; ++i) {
							for (j = 1; j <= len2; ++j) {
								int del = d[i-1][j  ] + 1;
								int ins = d[i  ][j-1] + 1;
								int sub = d[i-1][j-1] + (
									rb_equal(
										RARRAY(array1)->ptr[i-1],
										RARRAY(array2)->ptr[j-1]
									) ? 0 : 1
								);

								d[i][j] =
									(del <= ins && del <= sub) ? del:
									(ins <= del && ins <= sub) ? ins:
									sub;
							}
						}

						ret = LONG2FIX(d[len1][len2]);

						for (i = 0; i < len1; i++) free(d[i]);
						free(d);

						return ret;
					}
				EOS
			end

			module_function :levenshtein

			USABLE = true
		rescue LoadError
			USABLE = false
		end
	end
end


require 'rubygems'
require 'spec'

[Levenshtein::Inline, Levenshtein::PureRuby].each do |m|
	describe m do
		it "should return correct levenshtein distance" do
			[
				["kitten", "sitting", 3],
				["foo", "foo", 0],
				["", "", 0],
				["foO", "foo", 1],
				["", "foo", 3],
			].each do |a, b, expected|
				m.levenshtein(a.split(//), b.split(//)).should == expected
				m.levenshtein(b.split(//), a.split(//)).should == expected
			end
		end
	end
end

Spec::Runner.run

require "benchmark"

Benchmark.bm(10) do |x|
	n = 10000

	x.report("inline") do
		n.times {
			Levenshtein::Inline.levenshtein("kitten".split(//), "sitting".split(//))
		}
	end if Levenshtein::Inline::USABLE

	x.report("pureruby") do
		n.times {
			Levenshtein::PureRuby.levenshtein("kitten".split(//), "sitting".split(//))
		}
	end
end

なんか度々使うたびに移植している気がするのでメモ

結構 Ruby でやると遅いので RubyInline でも書いてみた。

ruby 1.8.6 (2008-08-11 patchlevel 287) [universal-darwin9.0]
                user     system      total        real
inline      0.330000   0.010000   0.340000 (  0.346537)
pureruby    2.500000   0.020000   2.520000 (  2.596968)

1.9 にすれば pureruby でも 1.8 の pureruby の倍ぐらいにはなる。

2009年 10月 09日

実名匿名ハンドルの話って盛り上るなぁ。ハンドルと実名は大して違わなくて、単に積み重ねがどちらの名前にかかっているかによっている。ネットでも最初っから実名でやってる人は当然実名に積み重ねがあるはずだし、そうじゃないのならハンドルに積み重ねがあるだろう。匿名ではそもそも積み重ねがない、その割に批判だけは受け止めるハメになるので気持ちで損をする。そう考えると僕は匿名以外ならどっちでもいいと思っている。匿名が悪いとかじゃなくて、単に、匿名でなんかしても意味がないというか、もったいない。貧乏性なので、自分の成果は自分の名のもとにおいておきたいと思うので、匿名で何かするのは僕には結構 (気持ち的に) 難しいなぁ。

例えばだけど、作家の人の本名って重要だと思うだろうか? 誰も聞いたことがない名前をいわれても仕方ない。積み重ねが多いほうが使われてしかるべきだ。

2009年 10月 08日

net-irc をgithub に移動。2ig.rb (2ch IRC Gateway)

割とちょこちょこ触ることが多く、svn だと不便なので、http://github.com/cho45/net-irc に移動した

でもって要望があって気がむいたので 2ig.rb というものを作ってみた。

ruby example/2ig.rb --debug

で起動する

実況スレみるにはいいかもしれない。(実況系の板でしか試してないのでほかの板だとへんかも)

  • dat 取得 interval はデフォルトで90秒、トピックのスレアドレスに後に数字をいれると設定できる
  • AA っぽいものは tinyurl に投げて URL 化している。
    • 改行が多く、記号の割合が多いものを AA と判断 (aa? メソッド)
  • 1000 までいくと次スレを推測して提示する
    • 提示されたやつを /topic url.. すればチャンネルそのままで継続
    • 現スレのスレタイの数字+1が含まれるスレッド、直近にアドレスが投稿されたスレッド、編集距離を見て判断
      • 可能性が非常に高いスレッドが見つかった場合は色つき
  • post 機能は実装してないのでだれかつくってほしい


2009年 10月 10日

2009年 10月 11日

幸せな記憶を思い出す余裕があるので幸せです。

2009年 10月 12日

昨日は京都御苑を散歩、夕方になってお天気雨がふりだし、虹がでていた。今日は今宮神社、船岡山公園を散歩した。今宮神社、なんか人が多かった。涼しくなってきて観光する人が増えたのかな

写真には音が入らないので、うるさい中で何かを見ていたのか、しずかな中で何かを見ていたのかってのは、音を出しているものを直接とらない限りわからない。直接とらない場合、すなわち何か聞きながら別のものを見ているという状況は、一枚に収めることができない。組みにするか多重露光になる。ほかになんか方法あるのかな

gemcutter

net-irc を gemcutter にうつしてリリースした http://gemcutter.org/gems/net-irc 。RubyForge からの migration が

gem migrate net-irc

だけでできて感動した。単に RubyForge から gem もってきて push しているだけっぽいけど

でもって、net-irc の Rakefile を修正し、リリース

Rake::ShipitTask.new do |s|
	s.ChangeVersion "lib/net/irc.rb", "VERSION"
	s.Commit
	s.Task :clean, :package, :upload_doc
	s.Step.new {
	}.and {
		system("gem", "push", "pkg/net-irc-#{VERS}.gem")
	}
	s.Tag
	s.Twitter
end

shipit.rb に gemcutter のステップを定義してないので手動実行させてる。shipit.rb は git に対応しているので (いつのまに! っておもったら自分でやってた……)、元 (svn) のタスク定義からそんなに変わってはいない。ただし push まではしないので、自分で git push --tags, git push とかやる必要がある。ステップ定義すればいいんだけど、ぼくは確認してから push したいので定義してない。

gemcutter 側の Links とかに表示されているやつは gemspec にデータになっている。ちょっと残念なのは、RDoc のホストはやってくれないところだ。正直 gemcutter の説明だけで「この gem は使えそうだ」という判断はできない。CPAN みたいになるといいなぁ

2009年 10月 13日

2009年 10月 14日

gerry++

腹痛ではないが下痢ってる。アルコールのせいかな

2009年 10月 15日

2009年 10月 16日

12日は大文字山に。そんなに登りまくる感じではないのでたまにいくのはいいかもしれない。京都の街全域が見えるので気持ちいい。見通しを妨げる建物が厳しく規制されているせいなんだろうなと思った。

[asin:4088460618:image]

アニメやるらしい。かなり面白い……死ぬ…… 2巻までしかまだ読んでないけど読んでるとしんどくなってくる。爽子かわいいけど、風早くんのほうもかわいいので全く嫌な感じがしないというか、とりあえずまだ嫌なキャラ (広い意味で) がでてきてなくていい感じです……

2009年 10月 17日

Android のビューで活用すると便利な select 要素

Android では select をクリックすると選択肢がいい感じにポップアップしてくれ見た目を大幅に変えることができそれによりアクションを選択するような場面で場所をとらずに有効に使うことができる以下例

フォーカス (オレンジの outline) がついているのが select である。クリックすると

というふうにポップアップされる。ここで、したい操作を選ぶ、という感じになる。もちろん選択肢が増えても適切にスクロールバーがでるため問題ない。

上の例に関係する部分の CSS と JS をぬきだす。ようは onchange イベントを監視しているだけでポイントというほどのところではないけど selectedIndex は代入できセレクトされているものを変更できるので戻しているところか

form select.post {
        position: absolute;
        top: 0;
        right: 5px;
        width: 25px;
        height: 24px;
        margin: 7px 0;;
        padding: 0 5px;
        outline: none;
        border: 1px solid #000;
        background: #999;
        color: #fff;
        text-align: center;
        -webkit-appearance: none;
}
new function PostOperations () {
    var define = {
        Post : function (form) {
            form.submit();
        },
        Location : function (form, input) {
            // do
        }
    };

    var form = document.getElementById("input");
    if (form) {
        var input = form.querySelector("input[name=msg]");
        var select = document.querySelector("select.post");
        select.addEventListener("change", function (e) {
            var fun = define[select.value];
            try {
                if (fun) fun(form, input);
            } catch (e) { alert(e) }
            select.selectedIndex = 0;
        }, false);
    }
};
2009年 10月 18日

斜陽を連想した

2009年 10月 19日

昨日は

  • 南禅寺
    • 三門
    • 方丈庭園
    • 金地院
  • 東福寺
  • 伏見稲荷大社
  • 下鴨神社

今日は

  • 比叡山延暦寺
    • 東塔
    • 西塔
  • ガーデンミュージアム比叡

延暦寺はさすがに広くて規模がでかかった。服にお香の匂いがつきまくった。なぜか自分は仏教信仰ないな、となんか実感した。

ガーデンミュージアム比叡は入場料1000円の割にはそんなに広くなくてどうなんだろうというか、府立植物園 (200円) と比べてしまうとコストパフォーマンスの悪さが気になった。まぁもう行かないだろう…… 眺めは良かった。

2009年 10月 20日

2009年 10月 21日

最近撮った写真が殆どDP2だなぁ。

DP2 のおかげで、5D での写真の撮りかたというか意識も変わり、技術的には適切なシーンで適切に絞るようになっただけだけれど、雰囲気を撮るときの方法が広がったので、また面白くなった。今まで、できるだけ開放にしてピントを甘くしたりして対象を明確にしない方法で雰囲気を撮ってたけど、そうじゃなくて、鮮明にいろんなものを説明する方法で雰囲気を撮れることが分った。小説で良くあるパターンなので、こっちが正攻法なのかもしれない。

2009年 10月 22日

JSDeferred 0.3.0 リリース

一年ぶりぐらいにリリース http://github.com/cho45/jsdeferred/tree/release-0.3.0

Deferred.connect

を API を変えてとりこんだものです。コールバックを引数にとる任意の関数を Deferred を返す関数に変更できます。

var timeout = Deferred.connect(setTimeout, { target: window, ok: 0 });
timeout(1).next(function () {
  alert('after 1 sec');
});

Deferred#retry

これもセコンさんが実装していたやつをだいたいそのまんま入れたものです。

Deferred.retry(3, function () {
  return http.get(...);
}, { wait: 1 }).
next(function (res) {
  res // 成功したらこっち
}).
error(function (e) {
  e // 3回リトライしてもダメなときはエラー
});

Deferred.onerror

これもセコンさんが(ry

Deferred 処理中に発生した例外を全部キャッチすることができます。デバッグに便利です。デフォルトでは undefined なので、適当な関数をつっこんでください。この関数によってエラーをキャンセルしたりとかはできません。

Deferred.onerror = function (e) { if (window.console) console.log(e) };

jQuery binding への変更

これもセ(r

$.fn.deferred が追加で定義されるようになり、コールバックをとる任意の jQuery メソッドを Deferred を使うようにできます。今までは $.ajax 系のみが Deferred を返すように jQuery をいじっていましたが、このメソッドは汎用性が高くなっています。

var click = $('div').deferred('click');
loop(10, function (i) {
    console.log(i);
    return click;
});

とかやるとステップ実行が実装できそうですね (試してない)

binding/googlechrome-extensions.js

セ(rさんが作ってたやつです。http://subtech.g.hatena.ne.jp/secondlife/20091013/1255435673

[asin:4088460618:image]

[asin:4088463137:image]

[asin:4088464400:image]

3巻以降が届いたので全部読んだ。ひどい話がなくて良かった……個人的には、大きな心の変化がある1、2巻がいいなぁ。また何回か読んだら違うかもしれない。

2009年 10月 23日

2009年 10月 24日

2009年 10月 25日

2009年 10月 26日

gerry++

2009年 10月 27日

親不知がだいぶ伸びてきた……

  • [asin:B002LZTX0U:image:small]
  • [asin:B001LNNO6M:image:small]
  • [asin:B002LAQKFQ:image:small]
  • [asin:B002GKBLLO:image:small]

最近 PS3 と DELL の 2709W というモニタを買って遊んでる。PS3 はメディアプレイヤーのつもりで購入して、ついでにいくつかゲームタイトルも買った。

PS3 とモニタを HDMI、Windows 機とモニタを DVI、Wii をコンポジット (コンポーネントで繋ぎたいけど Wii をたいしてやってないので買いたくない)、VGA を余らせて適当なやつ (鯖とか Mac とか) に繋ぐようにしてる。モニタに入力がいっぱいあると想像以上に便利で良かった。24インチのローエンドのやつと悩んだけどモニタはこっち買って正解だった。

PS3 のプライマリ音声は HDMI に流したままにして (2709W は一応出力できるのでそのうち使うかもしれない)、光デジタルのほうに同時出力で流すようにしてる。前から使っていた USB オーディオデバイスの ONKYO SE-U55GX がソースセレクタになることに気付いたので PC とか Wii とかの音声入力を全部これに集約して、こいつからヘッドフォンとスピーカに流してる (音量調節もできる)。PS3 が音量調節できなくてあせったけど、追加の出費なしでどうにか構築できた。

あとは ubuntu サーバに PS3 Media Server を適当にセットアップして DLNA サーバにし、PS3 経由でダラ見できるようにした。思ったより快適で、いい感じにアップコンバートされていて良い。

gerry++

2009年 10月 28日

[asin:B002JB3VOK:image]

[asin:B000PD3KCW:image]

People In The Box は、今まで Rabbit Hole しか持ってなくて、最初聴いたときなんか普通だなーと思って放置していたのだけど、何度かランダム再生で出てきて聴くうちに好きになっていて、つい最近どっかの日記で Ghost Apple が紹介されていたので買ってみた。正統進化していてすごくいい。1年か2年ぐらいかけて好きになって新しい音源買うってこともあるんだなぁと思った。

2009年 10月 29日

gerry++

今週はちょうしわるい……

2009年 10月 30日

2009年 10月 31日