2008年 06月 24日

本当に全くの初心者だったとき、僕には時間があり余っていたので、試行錯誤ないし試行錯誤のための試行錯誤を、いくらでもできた。周りにはコンピュータに詳しい人はいなかったから、独学するしかなかったし、掲示板での初心者的な質問は、すると殺される類ものだと思っていたから、質問したこともない。

誰かに教えてもらったことがないから、基本的なことについて、どうやって伝えたらいいか全くわからない。頭のなかでなんとなく考えた言語化するまえのものを抱えながら、実行してみて答えあわせしていただけで、そこには単純に、試行錯誤しかなかった。カリキュラムなんてなかった。言語について纏まった本は殆ど購入したことがない。作りたいものドリブンの学習しかしたことがなくて、(困ったことに) その方法でしか学習できない。

初心者のときに、周りに教えてもらえる人がいなかったというのは、よかったことなのかもしれない。でも遠まわりをしている。そしてゴールは見えない。いまだ安定しない。わるかったのかもしれない。一定までは、誰しも孤独に試行錯誤をせざるを得ないから、下手に誰かがまわりにいないほうが、集中できるのだと思うけれど、どっちがいいかは 一生でどちらかしか経験できない以上、わからない。

検索したらでてきたのでセルフリブログ

環境に求められている能力がないということは、つまり自分が自分でないことなんだよね。で、その差がいまいち釈然としなくて気持ち悪い感じ。じゃあその自分でない自分っていうのは、誰なんですかっていう、よくあり気な問答があるわけで、問答とか言いつつ答えがない罠が待っているわけで、なにこれ、みたいな。

アウトプットしないといけないのに、どうもアウトプットする能力が明らかに足りていなくて、あるいはモチベーションとかも足りていなくて、結局何もアウトプットできない。作れない。

どういう人がすごいかっていうと、なんだかんだでアウトプットが大きくて、それなりにフィードバックが (DIS であれ) ある人なんだよなぁ。そしてそのフィードバックを次に生かすことができるような、なんか、無理だな。

もちろんそのアウトプットは、適切な基礎があってこそで、あるラインを越えるまで、絶対的に孤独な向上作業であるはずだけれど、何か間違ってラインを越えないうちに誰かと何かをやったりするのは、困ったことになる。不安定なものを余計不安定にしてどうするんだ。しっかり基礎をやるべきだ。前も似たようなこと書いたなぁ。

http://lowreal.net/logs/2006/08/05/1

よく、ある程度熟したアーティストが、他のアーティストとコラボレーションして「いい刺激になった」とかいうけど、あれはそのアーティストが既に一つ山を越えていて、ある種完成されている (つまり、完成=安定の状態を崩すための刺激) からであって、その山を越えるまではずっと孤独なんじゃないかって

http://lowreal.net/logs/2006/04/14/1

そういえばコンピュータ関係で、最初にとても悩んだ疑問は「アップロード」の概念だったけど、今も昔もダウンロードの反対としか説明できない。なんでダウンロードが理解できていてアップロードが理解できていなかったのかが今となってはよくわからない。サーバ・クライアントモデルだとクライアントはダウンロードしかできないと思いこんでいたのかもしれない。サーバ・クライアント、みたいなモデルをいつ学んだかはわからない。

「自分」が書いたものは、誰かのコピーをシュレッダーにかけたものをかきあつめた断片みたいなものだから、もとはといえば他人のものなのだ。どれひとつとして、自分自身の言葉なんてものはない。過去の自分がとりあえず纏めあげたものは、頭に残っていて、検索しやすい。所詮過去の自分なんてのは他人で、しかも死んだ人間だから、好きなようにできる。特別な意味なんてないのだ。

サブセッションの自分の発表、みなおしたけど、とりあえず纏めがなくて dnbk した。30分は途中で冷静になって、全く見当外れのことを言っているのではないかと憂鬱になる。動画の記録が残るのは本当にいいなぁ。会場で感じた自分の印象と、客観的に見てみた印象ってのは結構違う……

本当に、あの程度の発表をするのにもなかなかしんどいのに (もちろん言いたいことを伝えるためにはしかたないのだ)、スピーカーをやって、スタッフをやって、普通に働いているなか、金・土・日と動けるのには本当に尊敬しかできない。

うんこ! うんこ!!!!!!

書き捨てているから何でも書けるにすぎない。あらゆる失敗がつまっている。

シュレッダーにかかったものだって、かきあつめて繋ぎあわせればなんかになるんじゃないかと思う。おれは本当のことを書けない。本当のことを知らないし、本当のことだと信じていることもないからだ。一人称がころころ変わるのはパッチワークの証しである。

そして列車は行く - Good Dog Happy Men

いいなー すげー かっこいいなー よくわかんないけど「敬礼返しながらこっそりベロ出した 一番最高の笑顔で」のところがめっちゃいいなー

そういえばつくばから帰ってくるときの片瀬江ノ島行きの電車の中で、なんかこう、不思議な女性がいたのを思いだした。顔を伏せて寝ていたから顔は見えなかったけど

中継されるからそれでいいや、っていうのは、それはそれでいいのだけど、CD あるからライブ行かなくていいやってのと全く同じだと思います。物理的な距離、場の共有っていうのは、すごく重要なんです。ネットばっかりやってる余計感じます。大学の講義のように形式知を効率的に得るための場ではなくて、空気の振動から、何かを感じとる場だと思っています。

眠れないけど、頑張って寝よう……

IRB でのデモを楽にする

.irbrc にかく

require "rubygems"
require "irb/completion"
require "wirble"

Wirble.init
Wirble.colorize


data  = <<EOS.split(/\n/)
require "future"
class Foo
  def omoi(n)
    sleep n
    n
  end
end
f = Foo.new
f.omoi(1)
f.async.omoi(1); nil
r = f.async.omoi(5); nil
r
r = f.async.omoi(3); nil
r
omois = (1..5).map {|i|
  f.async.omoi(i).async.tap { p [:ok, i] }
}; nil
EOS

Readline.completion_proc = proc {|word|
	if word.empty?
		[ data.shift ]
	else
		IRB::InputCompletor::CompletionProc.call(word)
	end
}
Readline.completion_append_character = ""
Readline.completion_case_fold = true

こんな風にすると、行頭で [TAB] をおして [RET] をくりかえすことでシナリオを喋りながら進行でき、かつ結果がリアルタイムに表示され、必要であれば [TAB] を押さずにコードをはさめるのでライブデモに便利です。

といっても、やっぱライブデモはタイプも含めでデモな感じがするのでちょっと寂しい感じになるのは否めないのですが!

~/sketch

~/tmp/test.* を ~/sketch にうつした。殴り書きのコードをいままで ~/tmp/test.rb とかに書いていたんだけど、~/tmp はやっぱ定期的にさっぱり消したいのでわけた。あと補完しやすいように test っていうファイル名をやめてファイルタイプをファイル名にした。

2008年 06月 23日

RubyKaigi

みなさん、お疲れさまでした! 特にスタッフの方々は動きまくっていて本当にすごすぎる……

今回初めて RubyKaigi に参加したので、「あーあの人が、あの人かー」というのをふむふむと眺めつつ、チキンなので話せなかったりしたりなど、とても普通の人っぽい楽しみかたをしていました。

いろいろ整理できていないのでちまちま書いていきます。

なんか、あれ、全部嘘だから気を付けたほうがいいと思いますよ

RubyKaigi というか、カンファレンス系のイベントは、帰ってきて、ネットに書かれた感想とかを、行っているからこそわかる空気感を想像しながら読めるのがとてもいいのだよなぁ。そういうのがあると、例え外にでて電車に乗って憂鬱になりながら帰ってきたりしても、よかったなぁと思えるのだ。

Firefox3 + Firebug 1.2.0b3 でハマった

なんかよくわからないんだけど

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja" dir="ltr">
	<head>

		<script type="text/javascript" src="uuu.js"></script>
		<script type="text/javascript" src="test.js"></script>
		<script type="text/javascript" src="foobar.js"></script>
	</head>
	<body>

	</body>
</html>
// uuu.js

typeof(console);

/*
 * typeof(console) を src でよみこんだスクリプトでやるとダメ
 * typeof(window["console"]); もだめ
 *
 */
// test.js
(function() {
	var scripts = document.getElementsByTagName('script');
	var script  = scripts[scripts.length - 1];
	alert(script.src);
})();

こうすると alert で test.js が alert されない。なぜか script.src が undefined になってしまう。Firebug を Disabled にすれば大丈夫。これ困る……

alert(window.__lookupGetter__("console"));

してみると

function () {
    return window.loadFirebugConsole();
}

ってなってる。

console を参照できるかどうか試すコードを書きたいなら

if (
	(
	 typeof(window["__lookupGetter__"]) == "function" &&
	 typeof(window.__lookupGetter__("console")) == "undefined" && typeof(window["console"]) == "undefined"
	) ||
	typeof(window["console"]) == "undefined"
) {
	alert("console is undefined");
}

と書いたほうがいいっぽいなぁ。もちろん Firebug の変更によってまただめになるだろうから、とても adhoc すぎてウンコなんだけど……

はてスタ IRC ストリーム

http://coderepos.org/share/browser/lang/ruby/net-irc/trunk/examples/hatena-star-stream.rb

はてなスターが付き次第 IRC に通知するのをつくりました。

  • ついたURL
  • つけた人
  • 引用コメント (あれば)

が通知されるようになります。

これメモリくいすぎるので書きなおします

外部ファイルハッシュにしてみた。なおったかな

2008年 06月 21日

RubyKaigi

1日目から参加します。2日目のサブセッションで net-irc について話をする予定です。ちょっと内容がいまいちなのでブラッシュアップ中。すごい緊張する……

RubyKaigi