2006年 12月 01日

キーボード

学校の端末を英語配列で使えるようにする方法を考える。権限が少なすぎ……なんか簡単に変えられないのかなぁ。ユーザごとにキーレイアウト変えられないわけがないとは思うのだけれど……

memo

OSX Drag Picture

スクリーンショットを対話的にとるとき、マウスでドラッグして選択するのがあるけど、あれってどうやってやるんだろうって考えてた。
マウスイベントをキャプチャーして……とか面倒くさそうだなぁとか思ってたけど全然違う方法で実装できそうだ。

require 'osx/cocoa'
include OSX

class SelectionView < NSView
	attr_accessor :delegate

	def drawRect(rect)
		NSColor.colorWithCalibratedRed(0, :green, 0, :blue, 0, :alpha, 0.1).set
		NSRectFill(bounds)

		if @start && @end
			NSColor.colorWithCalibratedRed(0.5, :green, 0.5, :blue, 0.5, :alpha, 0.5).set
			NSRectFill(calc_rect)
		end
	end

	def mouseDown(event)
		@start = NSEvent.mouseLocation
	end

	def mouseDragged(event)
		@end = NSEvent.mouseLocation
		setNeedsDisplay(true)
	end

	def mouseUp(event)
		@end = NSEvent.mouseLocation
		delegate.windowShouldClose(nil)
		window.close
	end

	def calc_rect
		x = [@start.x , @end.x].min
		y = [@start.y , @end.y].min
		w = (@start.x - @end.x).abs
		h = (@start.y - @end.y).abs
		[x, y, w, h]
	end
end

class TEST < NSObject
	def applicationDidFinishLaunching(aNotification)
		size = NSScreen.mainScreen.frame.size
		rect = [0, 0, size.width, size.height]
		@window = NSWindow.alloc.initWithContentRect(rect,
		                                  :styleMask, NSBorderlessWindowMask,
		                                    :backing, NSBackingStoreBuffered,
		                                      :defer, 0)
		@window.setDelegate(self)
		@window.setOpaque(0)
		@window.setHasShadow(0)
		@window.setLevel(1000) # NSScreenSaverWindowLevel

		@view = SelectionView.alloc.initWithFrame(rect)
		@view.delegate = self
		@window.setContentView(@view)

		@window.makeKeyAndOrderFront(nil)
		@window.orderFrontRegardless
	end

	def windowShouldClose(sender)
		p @view.calc_rect
		exit
		true
	end
end

$App = NSApplication.sharedApplication
$App.setDelegate(TEST.alloc.init)
$App.run

スクリーンと同じサイズのできるだけ透明なウィンドウを作ってあげてそいつでイベントうけとる。

2006年 12月 02日

OSX スクリーンショット

画面イメージを取得して書き出してみる。

// gcc -framework Cocoa
// depth 32bit, intel little endian
#import <Cocoa/Cocoa.h>

int main() {
	int w = CGDisplayPixelsWide(kCGDirectMainDisplay);
	int h = CGDisplayPixelsHigh(kCGDirectMainDisplay);
	NSLog(@"%d, %d", w, h);

	unsigned char* _screenBytesActual = (unsigned char*)CGDisplayBaseAddress(kCGDirectMainDisplay);
	NSLog(@"Address: %08x", _screenBytesActual);

	int bitPerPixel    = CGDisplayBitsPerPixel(kCGDirectMainDisplay);
	int bitPerSample   = CGDisplayBitsPerSample(kCGDirectMainDisplay);
	int samplePerPixel = CGDisplaySamplesPerPixel(kCGDirectMainDisplay);
	int bytePerRow     = CGDisplayBytesPerRow(kCGDirectMainDisplay);
	int bytePerPixel   = bitPerPixel / 8;
	NSLog(@"%d %d %d %d %d", bitPerPixel, bitPerSample, samplePerPixel, bytePerRow, bytePerPixel);

	FILE* fp;
	if ((fp = fopen("test.bin", "w")) == NULL) {
		NSLog(@"fopen failed");
		exit(1);
	}

	int x, y;
	for (y = 0; y < h; y ++) {
		fwrite(_screenBytesActual + y * bytePerRow, w * bytePerPixel, 1, fp);
	}
	fclose(fp);

	return 0;
}

書き出されたファイルは BGRA がディスプレイの左上から並んでる (intel)。
1ピクセルあたり 4 bytes なので、全体では 1280*800*4 = 4096000 = 4000KB

でできた test.bin を png なりに変換してみる。ここでは rmagick

require 'rubygems'
require 'RMagick'
require 'ostruct'
require 'profiler'

frame = OpenStruct.new
frame.width = 1280
frame.height = 800

Profiler__.start_profile
img = Magick::Image.new(frame.width, frame.height)
img.import_pixels(0, 0, frame.width, frame.height, "BGRA", File.read("test.bin"), Magick::CharPixel)

img.write("test.png")

Profiler__.print_profile(STDOUT)

img.write は遅い。

OSX スクリーンキャストツール

への布石

を組み合わせてスクリーンショットをとりまくって変換してみる。

#!/usr/bin/ruby

require 'rubygems'
require 'RMagick'
require 'ostruct'
require 'pathname'
require 'osx/cocoa'
require 'ext/osxscreen'
require 'zlib'
require 'progressbar'

include OSX

system('rm test/*')

size = eval( `./fullscreen.rb` )
p size

fps = 12 # frames per second

interval = 1.0 / fps

time = Time.now + 3

nextrun = 0
loop do
	true while Time.now.to_f < nextrun
	nextrun = Time.now.to_f + interval
	filename = "test/temp-#{Time.now.to_i}.#{Time.now.usec}.bin"

	File.open(filename, 'wb') do |f|
		f.write OSX::ScreenData.data
	end
	
#	Zlib::GzipWriter.open(filename + '.gz', Zlib::BEST_SPEED) do |f|
#		f.write OSX::ScreenData.data
#	end

	puts filename
	break if Time.now > time
end

frame = NSScreen.mainScreen.frame.size

files = Pathname.glob('test/*')
bar = ProgressBar.new('Convert', files.size)
files.each do |f|
	img = Magick::Image.new(frame.width, frame.height)
	img.import_pixels(0, 0, frame.width, frame.height, "BGRA", f.read, Magick::CharPixel)
	img.crop!(*size)

	img.write(f.to_s + '.png')
	f.unlink
	bar.inc
end

zlib は使わない方がいい気がする。ハードディスクあいてないときは使わざるを得ないけど……
fullscreen.rb (名前わるすぎ)

#!/usr/bin/ruby

require 'osx/cocoa'
include OSX

class SelectionView < NSView
	attr_accessor :delegate

	def drawRect(rect)
		NSColor.colorWithCalibratedRed(0, :green, 0, :blue, 0, :alpha, 0.1).set
		NSRectFill(bounds)

		if @start && @end
			NSColor.colorWithCalibratedRed(0.5, :green, 0.5, :blue, 0.5, :alpha, 0.5).set
			NSRectFill(calc_rect)
		end
	end

	def mouseDown(event)
		@start = NSEvent.mouseLocation
	end

	def mouseDragged(event)
		@end = NSEvent.mouseLocation
		setNeedsDisplay(true)
	end

	def mouseUp(event)
		@end = NSEvent.mouseLocation
		delegate.windowShouldClose(nil)
		window.close
	end

	def calc_rect
		x = [@start.x , @end.x].min
		y = [@start.y , @end.y].min
		w = (@start.x - @end.x).abs
		h = (@start.y - @end.y).abs
		[x, y, w, h]
	end
end

class TEST < NSObject
	def applicationDidFinishLaunching(aNotification)
		size = NSScreen.mainScreen.frame.size
		rect = [0, 0, size.width, size.height]
		@window = NSWindow.alloc.initWithContentRect(rect,
		                                  :styleMask, NSBorderlessWindowMask,
		                                    :backing, NSBackingStoreBuffered,
		                                      :defer, 0)
		@window.setDelegate(self)
		@window.setOpaque(0)
		@window.setHasShadow(0)
		@window.setLevel(1000) # NSScreenSaverWindowLevel

		@view = SelectionView.alloc.initWithFrame(rect)
		@view.delegate = self
		@window.setContentView(@view)

		@window.makeKeyAndOrderFront(nil)
		@window.orderFrontRegardless
	end

	def windowShouldClose(sender)
		size = NSScreen.mainScreen.frame.size
		rect =  @view.calc_rect
		rect[1] = size.height - rect[1] - rect[3]
		p rect
		exit
		true
	end
end

$App = NSApplication.sharedApplication
$App.setDelegate(TEST.alloc.init)
$App.run

ext/screendata は C

#include <Carbon/Carbon.h>
#include <ruby.h>

VALUE
screendata_data () {
	VALUE ret;
	int w = CGDisplayPixelsWide(kCGDirectMainDisplay);
	int h = CGDisplayPixelsHigh(kCGDirectMainDisplay);

	unsigned char* _screenBytesActual = (unsigned char*)CGDisplayBaseAddress(kCGDirectMainDisplay);
	unsigned char* _screenBytes       = (unsigned char*)malloc(w * h * 4);
	//NSAssert(_screenBytes != 0, "fail malloc");

	int bitPerPixel    = CGDisplayBitsPerPixel(kCGDirectMainDisplay);
	int bitPerSample   = CGDisplayBitsPerSample(kCGDirectMainDisplay);
	int samplePerPixel = CGDisplaySamplesPerPixel(kCGDirectMainDisplay);
	int bytePerRow     = CGDisplayBytesPerRow(kCGDirectMainDisplay);
	int bytePerPixel   = bitPerPixel / 8;

	int x, y;
//	for (y = 0; y < h; y++) {
//		unsigned long step = y * bytePerRow;
//		for (x = 0; x < w; x++) {
//			unsigned long pixel;
//			pixel =  *((unsigned long*)(_screenBytesActual + (x * bytePerPixel) + step));
//			// pixel on Intel => AABBGGRR
//			// bitmap data planes => AARRGGBB
//			pixel = ((pixel & 0x00ff0000) >> 16) | ((pixel & 0x000000ff) << 16) | (pixel & 0xff00ff00);
//			*((unsigned long*)(_screenBytes + x * 4 + y * w * 4)) = pixel;
//		}
//	}
	for (y = 0; y < h; y ++) {
		memcpy(_screenBytes + y * w * 4, _screenBytesActual + y * bytePerRow, w * bytePerPixel);
	}

	ret = rb_str_new((const char*)_screenBytes, w * h * 4);
	free(_screenBytes);
	return ret;
}

void
Init_osxscreen () {
	VALUE ScreenData;
	VALUE module;

	rb_eval_string("require 'osx/cocoa'");
	module = rb_eval_string("OSX");

	ScreenData = rb_define_module_under(module, "ScreenData");
	rb_define_module_function(ScreenData, "data", screendata_data, 0);
}

memcpy の引数を逆にしてひどいことになった。すぐなおるからいいけど(CGDisplayBaseAddress の先には直接書き込める。すなわち直接描画できる。)
ここから flv に変換したい。
rmovie という gem があるんだけど、コンパイルできない。ffmpeg を port で入れて云々がうまくいかない。深く追ってない。

2006年 12月 03日

英和辞書ひきまくる Greasemonkey スクリプト

このエントリは古いのでアテにしないでください。新しいスクリプトは userscripts.org で公開され、CodeRepos で保守されています。

mallowlabsの備忘録 - ポップアップ型英英辞書 見てて選択したらすぐ検索できるのっていいなぁと思ったので似たようなのを作ってみた。

fastlookupalc.user.js

相違点

  • 英和 (alc)
  • 一個ひいた後に、さらにひける。(こういう機能は英英のほうが便利だけど)

結果のタイトル (赤い部分) をクリックするとその結果だけ消えます。ドキュメント内のどっかをクリックすると全部消えます。

ダブルクリックで単語を選択するのでどんどんひける。

2006年 12月 04日

<a href="http://espion.just-size.jp/archives/06/338142930.html">「Greasemonkeyスクリプティング TIPS&SAMPLES」と言う本を書きました</a>

献本欲しい!と書くともれなく gaba さんが献本して下さるかもしれません。という仕組みはまだありません?><

註記:このエントリは、なんらかのオープンなライセンスに基づいて、http://subtech.g.hatena.ne.jp/secondlife/20061204/1165212092 をコピペしたものです。

註記:このエントリは、なんらかのオープンなライセンスに基づいて、http://subtech.g.hatena.ne.jp/antipop/20061204/1165212198 をコピペしたものです。

HHKB

やばい。素敵だ。なんでもっとはやく買わなかったんだろう。

2006年 12月 05日

gerry++

haraitai
15日ぶり。久しぶりにトイレにこもったら足が痺れた。

proxy

学内の proxy よりも ssh でトンネリングした SOCKS 経由の接続の方がはやい。

2006年 12月 06日

うんこー

もっと精進します。

Windows 機が起動しなくなった

なんか synergy がやたらきれて調子が悪かったので再起動かけたら、ログイン画面がでる直前に青画面になってリブートがかかってしまうようになった。
いったんセーフモードで起動して再起動したら起動した。怖すぎる。
mayu かと思ったけど、インストールしてから数日たってて問題がなかったので、なんとなくだけどグラフィックカードのような気がする(解像度の変更に失敗している?)

perl

やっぱ Perl むずい。ithread 周りをまたちょっと見てみたけど、罠が多くて覚えられない。
というのはどうでもいいけど、内部データ構造もよくわからない。utf8 まわりがぜんぜん……

2006年 12月 08日

XP Reinstall

起動時にブルースクリーンさんがでしゃばってなかなか起動しなくなってしまったので再インストールしました。

nLite でどうでもよさそうなのを軽く削って、CD ブート。

起動したと思ったら NIC が認識されてなくて途方に暮れた。マザボ付録の CD からドライバ入れて解決。怖かった。これのために部屋をひっくりがえした。見つからない見つからない……結局なぜか DELL の付属品入れに入ってた。引っ越しのときに適当な大きさだったから入れたんだろうけど……

ネットワークが繋がったら

  • Windows Update
  • Intel INF なんたらをインストール
  • nVidia のドライバインストール

とかごたごたやった。

そして

  • synergy
  • 窓使いの憂鬱
  • lhaplus
  • Mozilla Firefox 2.0
  • foobar2000
  • mabinogi

を入れた。既にメインマシンじゃないので適当


でなんかちょっとたったらハードディスクが一気に全部使い果たされてていきなりウィルスかとあせった。なんかオフラインファイル機能が有効だったらしく、ネットワークドライブを勝手に同期されてた。こわい。

dojo + MochiKit

なんかうまくいかない。
そもそも dojo 0.4 + MochiKit 1.3.1 の組み合わせはうごかない http://trac.dojotoolkit.org/ticket/1735

うえのチケットみて対策してみると一応使えるようにはなるけど、dojo と一緒に使った場合 MochiKit さんは export してくれない。
しかし dojo でどうやって export すればいいのかわからない。
もうめんどいので script 要素書いたけど……

dojo charting の font-size が素敵に決めうち

charting/vml/Axis.js 181
charting/svg/Axis.js 155

			var textSize=10;

ひっかけられそうなポイントがない!

blue screen

再起動させるとほぼ確実に blue screen で起動しない。
セーフモードで起動したり、電源を強制的に切ったりしたりしてると起動したりする。
blue screen はログイン画面がでる直前にでてすぐに消え、リブート。セーフモード云々の選択肢がでる。
セーフモードでは確実に起動するっぽい(二回しかやってないけど)。でもセーフモードで起動したあとそのまま再起動を行うとブートプロセスがはじまらない。ハードシャットダウン

一度起動してしまえば、ハイバネートはまったく問題ない。なんでだ……
とりあえずいい機会なので XP を再インストールすることにする。学校で CD を借りた。nLite で Luna 削って入れようと思う。しかしプロダクトキーが家のどこにあるか探し出さなければならない!

PIC

バイト先のすごい人(謎)が、PIC マイコンがどうとか言っててカッケかったので試してみたい。のでネタを考えてる。なんか世界がひろがりんぐだけどひろがりんぐすぎて思いつかない!
PIC マイコンとかって何か絶対手が出ないものとか中学の頃は思ってたけど、改めてアセンブリソースとか見せてもらったりすると意外にできるんじゃないかとか思えて面白かった。

2006年 12月 09日

OCN の手続きページ

重すぎてまともに見れない。まずロードが終わることがない。なんなんだろう。

Markdown で ins/del が使いにくい

ブロックレベルの ins/del が実質使えない。要素の中だと Markdown シンタックスが使えないため、ブロックレベル ins/del を使いたいならば ins/del の中身は全て手動でマークアップしないといけない。これが面倒くさい。

Text::Hatena にしたいけど、既存のエントリをどうするかで困る。meta でフォーマットもってそれを読むようにするとかしないとだめっぽい。むーん。

daimas の日記スペシャルの日記

ひさしぶりに DVD を手に取ってた見たけど、やっぱジャケットがはてななのが面白い。daimasの日記スペシャルの日記

amazon に画像がないのが残念だなぁ。なんか DVD ジャケットとしてはてなダイアリーがでてくるといつも見るはてなダイアリーとは違った感じがする。あたりまえか

2006年 12月 10日

夢:大学の裏手

寝まくってたらまた学校関連の夢を見た。

  • 大学のようだ(みんな私服/いつも五月蝿い)
  • 9階建ての建物がある。一番上に広い講義室がある。
  • その講義室で変な講義
  • グループワーク内の一人のやつがお茶をもってくる。しかし既にある。
  • そろそろやばくね。とかいう話をする
  • 解散する
  • よくわからん教授と話す。よくわからん話をする。
  • 階段を下りたりなにかしたりする。覚えてない
  • いつの間にか数名で行動している。
  • 大学の裏手のちょっと日陰になっているところを散策する
  • フェンスで囲まれたところに少年がいる
  • 幽霊らしい
  • 一緒に歩いてた年上の人が反応する。
  • 少年が近づいてくる
  • その岩は大事だから踏まないように とかいう
  • 岩の影に赤くて細長いラッパ状の花が咲いている。
  • プリンがどう とかいう
  • よく聞き取れなくて「プリン?」と聞き返すと「プリンじゃねぇよ」と言われる。
  • 答えを聴こうとしたところで昼食のため強制起床される。

キノの旅〈10〉the Beautiful World

キノの旅〈10〉the Beautiful World 時雨沢 恵一 を読んだ。

冒頭のペットのやつが地味に好き、かもしれない。あとがき以外は面白かった。

2006年 12月 11日

書くべき/書きたい事

少し前まで、書きたい事がたくさんあったけれど、最近はなんだか減ってきてしまった。そもそも自分の「書きたい欲求」は「不満」からくるものであったか、何かに対する言い訳だったと思うのだけれど、最近そういうのが減ってきたのかもしれない。諦めが良くなったのか、それとも本当に減ってきたのかはわからない。

それと、こうやって詳しく誰かに何かを伝えようとする、みたいなことがだんだん意味があることなのかよくわからなくなってきている。結局どんな言葉であっても、伝わらないものは伝わらない。ついでに言えば、最も伝えたい人には殆ど伝わらない。

だいたい自分が不満に思うのは、前提/思考レイヤーが違う人たちに対してなので、そもそも話が通じないのだ。だからそういう人たちに何かを言って伝えようとしたって、伝わらなくてみじめな思いをするだけだ。結局自分に何か嬉しいことがない。

何か嬉しいことや、楽しいことがしたいと思う。それはまずはじめに自分のためであって、誰かにためじゃない。ただし、その自分が楽しくなるための過程で、他人が楽しくないといけないならば、それを実行したいと思っている。最終的な目的を見失わないようにしたいし、変な言い訳をしないようにしたい。

いつまでたっても「したい」とかそういうのばっかりだ、なぁ。

前より少しいいのは、「なりたくない人」だけじゃなくて、「なりたい人」みたいなのが少しずつ見えてきていることかもしれない。漠然とじゃなくて、いろんな人から、自分がいいと思う部分をかき集めた感じの何かがなんとなくあったりする。

前より悪いのは、また構築したものがベリベリとはがれ落ちている感じがすること。いつだったか、球体の穴を埋めて行くとかなんとか書いたけれど、あれがまた元に戻っている。もしこれが他人に対して「オープンになる」という感覚だったとしたら、自分は一生クローズでありたいと思う。地に足がついている気がしない。落ち着かない。いやしかし単に読書不足かもしれない。最近ラノベぐらいしか読んでない。


学校がちょっと本当に楽しくないので、やめることを一応半分本気で考えているけれど、今のままでは無理なので、どっちにしろやめられないという結論はでてる。ただ今のまま学校をつづけても、そして今のまま学校をやめてもほぼ確実に後悔するだろうと思う。学校を今のまま続けたら、数年後に「あれは時間の無駄だった」と思うだろうし、今学校をやめれば「学校を出ておけばよかった」と思うだろう。

で、どっちもだめなのだから、ここは変えるべきポイントじゃないんだと考えることにする。いや、今そう考えることにした。タイピングしながら考えている。HHKB 素晴らしい。関係ない。

さてじゃあ何を変えるべき? 自分が今不満なのは何? やる気が出ないのはなぜ?

とか考えてみるけど現実的な解がいまいち見つからない。とりあえず可愛い女の子といちゃいちゃしたい。そんな子がいて、例えば冬の日に「寒いね」って言うその子の口からでる霧が綺麗で、逆光の中で髪が輝いてて、僕は眼を細めて、「ああ、幸せだなぁ」なんて思いたいんだよ。そんな夢を壊さないで!

学校の何がつまらないんだろう。一通り考えたけど、結局「学校だから」つまらない気もする。例えば学校が「校内全て禁煙」で「全てのトイレが綺麗」で「クソくだらない講義をする教授」がいなくて「svn, svk するために ssh -D しない」でよかったら楽しいかっていったら楽しくない気がする。

というかクソ講義をする教授は論外だとしても、自分が一番なんかひっかかるのは、学生のほうだと思う。しかし自分自身学生であるから、他の学生について書くのは難しいし、だいたいは人の事を言えないのがアレすぎる。ベンチとか出入り口とかで偉そうにタバコ吸って粋がっている学生とかはほんとに死んで欲しい(灰皿があるのがそもそも間違っているとは思うけど)。最低限考えられている暗黙のクオリティをすっ飛ばしてるとか、そのくせ効果を言わずに意見だけいうとか。


はいはい人の事言えない。

何にしても、結局いろんなことは全部自分に帰ってくるんだよなぁ。だから自分がちゃんとしないといけない。ちゃんとするの難しい。誰だってそうだ。考えよう。

他人のことが不満なら、自分で全てやってしまうしかない。自分でやれば解決する。


もう、いいや。

2006年 12月 10日

C-SPC on Firefox

OS X の Firefox で IME きりかえ (C-SPC) をするとスペースが入力されることがある。この状態になると一度 Firefox を再起動しないと治らない。うーん。

2006年 12月 11日

E4X 属性に変数

属性に変数を使いたい時にハマった。クオートしたらだめなのか

var xml = <>
    <a href="{foo}">unco</a>
</>;

は foo が展開されない。

var xml = <>
    <a href={foo}>unco</a>
</>;

だと展開される。
属性値の途中に埋め込みたい時はどうするんだろう。JS の式書くしかないのかなぁ。キモイなぁ。

どこでも hjkl 使いたい

^!h::Send {Left}
^!j::Send {Down}
^!k::Send {Up}
^!l::Send {Right}

みたいにするようにした。C-f C-b C-n C-p に慣れたほうがいい気もする。

gerry++

おなかいたいお

2006年 12月 12日

何書いても無駄なのは/ネットではじめるノーリスクいぢめ☆

よくある攻撃手法で、スルー力がない自分が最も嫌いなもの

> よくある攻撃手法で、スルー力がない自分が最も嫌いなもの

きめぇ文章だなw 日本語書けよw スルー力いいたいだけなんじゃねぇのっっw

とか引用して適当に書くやつ。こういうのを透明にする GM スクリプトを書こうと思ったけどうまく書けないので諦めた。


攻撃対象になった時点で負けである。負けを認めて引きこもって対象が変わるのを待つしかない。これがひたすら気持ち悪くて嫌いなのは、反論を許さないことにある。何言っても無駄にも関わらず、向こうは何を言っても、こちらがそれを読んでいる限り攻撃が有効だ。

回避方法はとにかく無視するしかない。脳内フィルタでうまく排除できないのなら機械的に排除するしかない。機械的に排除できない部分は (例えばコンピュータを介さないとか) 耳や目を塞ぎ、相手の手が及ばないところに逃げるしかない。


コメント欄があるブログなら、匿名で「きもいですね」と書いたら十分だ。コメント欄は性質的に SBS より無視しにくいので攻撃するにはうってつけ。バナナフィッシュに

2006年 12月 11日

g-tools の吐くhtml が好かんので

	var params = {};
	location.search.replace(/^\?/, '').split(/&/).forEach(function (e) {
		var t = e.split('=');
		params[t[0]] = t[1];
	});
	$X('//img[contains(@src, "'+params.asin+'")]').forEach(function (e) {
		var ref = $X('./preceding::h2[1]/following-sibling::*[1]', e)[0];
		var s = <>
			<a href={"http://www.amazon.co.jp/exec/obidos/ASIN/"+params.asin+"/nuso-22/ref=nosim/"}>
			<img src={e.src}  alt="" />
			{e.alt}
			</a>
		</>.toString();

		ref.parentNode.insertBefore(
			$N('div', {'class':'document_indent'}, [
				$N('textarea', {cols:70, rows:10}, s)
			]),
			ref
		);
	});

みたいの書いてごまかした。(画像のみのページで使う)
一から AWS 使って書こうと思ったけど UI 作るのがめんどいのでやめた。

2006年 12月 12日

freenode auto identify

なんかサーバパスワードとして NickServ のパスワード送ればいいだけだった。

2006年 12月 13日

Basic 認証するスクリプト

自前で Basic 認証するスクリプト書きたいけど想定してる環境だとうまくできないなぁ。
CGI は無理だし、mod_fcgi もユーザ名/パスワードとれない。


Ajax で叩く API って Basic 認証の方が便利だと思うだよなぁ。クッキーだとダイアログ出すとかできないからログインしてない場合に特別何かしてあげないと気付けない。

2006年 12月 14日

zaurus USB keyboard

W-ZERO3 が流行っているおかげで mini-A USB コードが入手しやすくなってる。せっかくなので一本買ってみた。

キーボードを繋いでみたけど、何も設定しなくてもそのまま使える。ただし日本語配列。ドライバレベルで手を入れないと英語キーボードは使えるようにならないみたいだ。(ぐぐるといくつかでてくる)

そんなに使いたいわけじゃないので深追いしてない。

livedoor テクノロジセミナーに行ってきた

技術的なことを深く掘り下げるっていうより、考えていること (mala さんのアレとかはてな哲学とか) を聴けたのがよかった。

なんていうか、当たり前だけどレベルが違うなぁとか思った。途中で最近自分は何にもそういうこと考えてないなぁって気付いてヤバい。

Capistrano のシェルってすごいなぁっておもたけど、個人レベルじゃ使う機会がなくてうんぬん。

2006年 12月 13日

zaurus mutt

qpe-embeddedkonsole-ja だと mutt がうまく表示できない。

2006年 12月 14日

うぇぶでざ

このサイトもそうだけど、たくさんのサイトは一番上にサイト名があって、次にナビゲーションがあって……みたいになってる。

でもこのサイト名とかナビゲーションって一番上になくてもいい気がする。サイト名って別にそのページのリソースとは直接関係ないし、サイト名がわかったからといって、読んでる人はそんなに得をしない気がする。ページのタイトルが一番上に来ている方がスマートなんじゃないかって、なんかさっき坂を上りながら考えた。


そろそろ古い CSS セットを捨てて HTML を書き直しつつ新しい CSS を書こうと思う。今のはごちゃごちゃしすぎている。

モチベーション

モチベーションって何かなぁ。モチベーションのスイッチが入っているときは、いつスイッチが切れてしまうんだろうって不安だし、切れているときはもう二度と入らないんじゃないかと不安だ。なんか不健康なもののようだ。いやでもスイッチが完全に入っていれば集中してるからいいのか。でも集中ってずっと続かないのが明らかというかご飯食べないと死ぬよね、みたいな。

ご飯食べたり、トイレいったりする時に、悪い方向にピンとくるとスイッチが切れてしまう。良い方向にピンとくるともっとスマートな実装を思いついたりする。プラスマイナスゼロ


追いつめられないとあらゆることにモチベーションが沸いてこない。ぎりぎりまで何もしない。正確には、スイッチがどうすれば入るのかを考えている。けど手を動かしていないので何もしていないのとおなじ。


モチベーションから行動。

自分が「とりあえずやってみるか」と思えるのはアンドゥが効くときだけみたいだ。全くリスクがないとき。

何かしらリスクがあることはそうはいかなくて、そのままでは全く行動までいかない。でもってここで「失敗したら死ねばいい」と考えているから、やっと行動ができる。失敗ケースの逃げ道は、もちろんそれ以外にも用意はするけど、結局ワーストケースで全く逃げ道がない場合でも、死ねばいいという逃げ道を確保できる。自分はこれはネガティブな考え方だとは思ってない。もしこれについてネガティブだなぁっていうなら、そいつは何もわかっちゃいないのだ、と思う。

gvim on Windows

なんかフォントが M+ になったり MS ゴシックになったり謎の挙動。

guifont=BDF_M+:h9:cSHIFTJIS

としてあるんだけど、M+ になっているところとなってないところがある。謎すぎる

2006年 12月 15日

吉永さん家のガーゴイル 11

吉永さん家のガーゴイル 11 を読んだ。

もう11巻目なのか!とか思いつつ、しかし10までの内容をあんまり覚えてなかったりする。もう安定した話になってて大枠でストーリーが動いたりはしないみたいだ? 普通に面白い。

日記ツール作りたい病

blosxom いいんだけど、なんかまた日記ツールを作りたい病にかかってる。
taiytry の何がアレなんだっけなぁ。テンプレートに処理が書いてあるのがアレなんだっけ。今はどうだかわからないけど……
CGI で動くのが作りたい。

lightweight framework on Ruby

Rails は(殆ど触った事ないけど)特定の用途ではいいっぽいけどそんなに汎用性がある感じじゃないイメージ。あと重い。CGI で動かすと死ぬ。データベース必須。とか……
データベース使わなくてもできることはできるのだろうけど、AR とコアとの関係が深そう。ORM が強いのが Rails の強みみたいな話を聞く。
イメージ的には Catalyst の Ruby 版が欲しいんだよなぁ。概念とある程度のガイドラインがあって、実装はコントローラぐらいしかない。


欲しいのは

  • リクエストのラッパ/CGI/FCGI/mod_ruby のクッション
  • URL とメソッドの規約/REST 対応
  • Catalyst っぽいチェイン(あれなんていうんだっけ)
  • CGI で動く軽さ(そもそものコード量が少ないことが必要?)

CGI のことを考えてるあたりアレだけど、実際使うとなるとなぁ……XREA で動かしたい。自分でサバ管理したくない。

rails は AR なくても動くみたいです! オフにできるって!

2006年 12月 16日

エロサイトで便利かもしれない GMS

	var host = (frames.top) ? frames.top.location.host : location.host;
	Array.forEach(document.getElementsByTagName('a'), function (e) {
		log(host, e.href);
		if (e.href.indexOf(host) != -1 && e.href.indexOf('http:', 1) == -1) {
			e.style.background = '#f00';
			e.style.fontWeight = 'bold';
		}
	});

というのをざっと書いたのだけど、セキュリティエラーで frame がうまく処理できない。
(同じホストへのリンクをハイライトするものです。普通のサイトに使うとうざったい。あと out.php?h=http://hoge/ みたいなのを排除)

夢:渋谷城/スクラッチ

  • 渋谷のどっかの建物の二階
  • なんかお湯をわかしてお茶を飲む
  • 変なおっさんと意気投合する
  • 削る(よくわからない)
  • 朝になって眠い
  • 帰る事にする
  • 駅に向かう
  • 駅ののり口は一階分ぐらい地面に潜っていて、全ての路線の改札が密集していた
  • 駅の看板に「渋谷城駅」と書いてある。駅のでかさからきているようだ。なるほどと思った。
  • 小田急 区間急行 新月島行きにのる(区間急行も新月島も存在しません)
2006年 12月 17日

成人式

引っ越したので案内状が今住んでいるところからしかこない。一応不安なので調べてみた。

以前住んでいたのは川崎市。

とりあえず「成人式 他の市」でぐぐると、FAQ みたいなのがでてくる。しかし別の市のもの。川崎市にも FAQ みたいなのがあるのかな、と思い「川崎市 成人式」でぐぐる。

川崎市 FAQ 成人式について知りたい。というのがでてくるけどここには書いてない。

「関連するホームページ」というのがあるので見てみると成人式概要 があり、

Q3:川崎市内に住民登録していないが、川崎市の式典に参加したい。

A:案内状がなくても参加できます。身分証明証等の提示も必要ありません。

案内状がない方の入口がありますので、そちらから入場してお名前を記入してください。

と書いてあった。普通に入れるようだ。

Mac

外部ディスプレイつないだときに輝度がMAXになるけど、これって変えないように出来ないのかな

2006年 12月 19日

単三で動く mp3 player

YP-C1 ってもう売ってないんだなぁ。

単三1本で動くプレイヤーがなくなると困る。iriver が一つシリーズ出してるけど、いつなくなるかわからない……

単三1本で動くプレイヤーだと充電池3本で(1本ごとに充電できる充電器なら2本) 回せるからいいんだけどなぁ。電池きれてもカバンの中に常に予備を入れておける。

ドックみたいな感じだと充電忘れまくる。携帯でさえ充電忘れてたまに家におきっぱだし……


だから iPod がどんだけ売れてても論外というか、再生時間短すぎというか iTunes に依存してるのが気に食わないというか iTunes インストールするとき勝手に関連づけ変更されるのが気に食わないので Windows には iTunes 入れてないとうか、だからといって fb2k から iPod プラグインを使うというのはなかなか不安なのでやりたくないしというか、いやだから電池がアレじゃ……

2006年 12月 18日

ループ変数 i の意味

歴史なんてどうでもいい。

for (var i = 0; i < foo.length; i++) {
    // hoge
}

i -> index

foo.each do |i|
    # hoge
end

i -> item

2006年 12月 19日

イラレで同じ座標にこぴぺ

ずっと C-v でコピペしてて、座標がリセットされるの意味わからんとか思ってたけど、C-f, C-b でペーストすると同じ座標にペーストされた……(重なり順以外は同じ挙動だと思ってた)
Asano さんに教えてもらった。kami gtlt

irssi で notice 簡単に送りたい

/notice はいいんだけど、複数行送りたい時いまいちいい方法がない!
scripts にいくつかあるけどいまいち……でもって内部 perl から system('vim') とかやってみたけど画面崩れてだめだった(わらい

GreasemonkeyスクリプティングTIPS&amp;SAMPLES

GreasemonkeyスクリプティングTIPS&SAMPLES をいただきました。ありがとうございます。ホントは貰えるとは思ってなかった (メールに気付かなかった) のですが、いろいろあって貰えました。

Greasemonkey の API を使おうと思うたびに authoring.html を開いていたので (GM_xmlhttpRequest はコピペ)、さりげなく API リファレンスが便利かも。

一旦流して読んでみたので、コンピュータ見るのに疲れたときに布団の中で読もうと思います。

このサイトで公開された 2006 年分の user.js は http://lowreal.net/2006/?D=A にあります。Javascript なやつをてきとうにさがしてください(てきとう)。自分がもう使ってないやつは動かないかも。


そういえば $X のまともな説明ページって書いてないっぽい感じすね。あの日記のセクション読んでも意味わかんなそうだ。

その人間ごっこを誰が止めるか

ろんりてきじゃない。タイプしながら考える。


努力がどうとか、ホントにずっと考えているけど、恐らく誰かが望むであろう「良い」答えはでてない。ただ、絶対にしたくない努力についての考え方みたいなのはあったりする。

自分でその最上級にくだらなくて、つまらなくて、つらい「努力」とやらを望んでやっているのに、「俺はつらい努力をしているから偉い」みたいな考え方をするのはさけたい。意識的/無意識的に関わらず、さけたい。だから時々自分をチェックする必要がある。


人間が生きていることになんて、なんの意味も、価値もない。意味も価値も、見いだしているのは人間/自分そのものだ。だから、「つらい」ことをやっている自分、というのは、自分がそれを望んだからそれをやっているに過ぎないと思う。いくらでも、楽しい方向に考えることはできるはずだ。でもそれは殆どの場合うまくいかない。ちょっと「つらい」ことをしたあとに楽しいことをしたほうが、より楽しいことを知っているからだ。でもって人によって、この「つらい」ことをするのと「楽しい」ことをするのとのバランスが違う。殆どずっと楽しい人もいるし、殆どずっと辛い人もいる。


そしてそのバランスは一度決まってしまうと(たぶん小学生か中学生ぐらいのときに決まる)、変化しにくい。辛い環境に慣れてしまうと、楽しいことが楽しんだ後、その楽しいことのせいでバランスが崩れ、今より辛いことになる想像をしてしまう。楽しい環境に慣れてしまうと、辛い環境の覗き込んだ時、その深さに耐えきれず現実逃避してまで楽しいことをしようとする。(というか、無意識的であれ意識的であれ、「隣の芝生は青い」ことを直感しているので、そうそうそのバランスを変えて情緒不安定になるリスクをおかしてまで、変化させるメリットがない。どうせ変えても、その状況もまた、その視点では辛い)


具体的な話をすると、自分は今学校がクソつまらなくて、授業にでなきゃいけないのにでてない。授業にでるのがすごく嫌で、自分にとって「努力」を必要とすることなんだけど、たぶんこれって、解らない人には絶対わからない。いやわからないほうがいいんだけど……それで、そんな状況で「努力」して卒業したからって、自分はそのことを偉いとは思いたくない(でも実際には思いそうなので嫌だ)。明らかにそんなくだらない、実にならない「努力」をするより、楽しく学問をできる人がそれをやったほうがいい。

実際もっとモチベーションに溢れていれば、学問の勉強ではなく、実務あるいは芸術的なことを深く追いつめることで、学校をやめる道(ないし休学)もあるだろうと思う。でも自分はそれをしてない。その程度の雑魚であるから、この中途半端な状況にいる。でも自分はそれを必死で変えたりもする気がないようだ。つまり今の状況は今の状況でそこそこ満足しているらしい。発展性がないやつだ。

ただし、状況は常に変化するし、親は死ぬし、金はなくなるので、次の状況に対応するバランスを見つけておかないといけないとは思ってる。どこに、今の自分が納得して、かつ未来の自分が安定するバランスがあるのか。


でもだいたいどっちにしろ、「辛いふり」をしたり「楽しいふり」をしなければならない。くだらない人間ごっこをしなければならない。みんな楽しいことをしていればいいのにも関わらず、「みんな楽しいこと」をしている状況になるためには、既にみんなが楽しくなければいけない。誰か一人が壊れていると、それが人間ごっこをはじめるせいで周りが巻き込まれる。誰がこのクソマゾゲーを始めたか知らないけど、だいたい今生きている人は巻き込まれてるだけだ。しかも連鎖的に確実に悪化していくので、救いようがなく、そのうち必ず終わってしまう。

と今は考えてる。でもって、しかし自分はこの人間ごっこをやめて、幸せになりたいので、抜け道を探している。今のところ人間ごっこをやめる方法は一つしか思いついてない。

GM 本

がきた。メロンパン食いながら読む

ruby throw を catch catch catch

別に <title> とは relation がないんだけど、とここまで IO#write したところで何を IO#write しようとしたのかを GC された。

2006年 12月 20日

irssi で notice をちょっと簡単にする

http://d.hatena.ne.jp/xcezx/20061219/1166516755 で TB がきたので設定したみた。けど、たぶんあれだとスペースを含むメッセージで問題があるので

/alias n notice $C

した。

流行

りゅうこうは HTML 4.0 をできるだけ省略して書く。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<title>a</title>
<p>a

This Page Is Valid HTML 4.0 Strict!

実装がマジカル

なんかちょっとウケたのだけど(はてなちゃん想像した)、普通に言う表現なのかなぁ

あ、マジカルなパーサって表現がるびまでもあった。

COLOURlovers が変わってる

http://www.colourlovers.com/
いつのまにかかわてた

SNES 用の cht ファイルつくる ruby script

def cht(data)
	ret = ""
	data.each do |a, v, c|
		ret << [0x08, v, a, 0, 0, c].pack("CCVCCZ20")
	end
	ret
end

data = []

base = [
	[0x7e2605, 0x03, "MHP"],
	[0x7e2606, 0xe3, "MHP"],
	[0x7e2609, 0x63, "MMP"],
	[0x7e260b, 0x63, "str"],
	[0x7e260c, 0x63, "vit"],
	[0x7e260d, 0x63, "agi"],
	[0x7e260e, 0x63, "int"],
	[0x7e260f, 0x63, "hit"],
	[0x7e2610, 0x63, "flee"],
	[0x7e2611, 0x63, "mdef"],
]
data << [0x7e240f, 0xc5, "last e"]
data << [0x7e250f, 0x63, "last e"]

(0..3).each do |i|
	base.each do |a, v, c|
		a = a + i * 0x50
		data << [a, v, c]
	end
end
code = cht(data)
File.open('t.cht', 'wb') {|f| f.print code }

~/tmp あさってたら出てきた。

2006年 12月 21日

cgi.rb

  • HTML 生成系メソッドは全ていらない
  • CGI#path_info は PATH_INFO がないとき空文字列を返して欲しい (nil になるので (cgi.path_info || '').split('/') とかやるはめになる)

vim C-x

考えてみると殆ど補完使ってない。HTML/XHTML モードだとなぜか omni が効かないし、C-n しようと思ったときにはまだそれを書いてなくて補完できないし、もう一度書こうとしたときには「なんでまた書こうとしてるんだろう、DRY じゃないんじゃないか?」とか考えて他の方法さがしてる。考えてないときは補完の事が頭にないので全部うってる……
勝手に補完メニューでてくれたらいいのになぁ……

map collect

最近どっちも使ってるなぁ。そんなに意識してないんだけど、数字的なときは map で、ソレ以外のときは collect 使ってる気がする。

foo = (0..9).map {|i| 2 ** i }

hoge = [
    { :Foo => :aaa },
    { :Foo => :bbb },
]
p hoge.collect {|i| i[:Foo] }

どっちかっていうと collect 派だけど、ちょっとかくのがめんどい

irssi

Alt-q (11) でチャンネル変える時に Cmd-q 押して終了してしまうことが多々ある

2006年 12月 22日

たまに悲しい

	if (location.href == 'http://reader.livedoor.com/reader/') {
		window.addEventListener('beforeunload', function (e) {
			e.preventDefault();
			e.stopPropagation();
		}, true);
	}

ユーザスクリプトを分離するのがめんどい。

JS の Array.prototype.concat は破壊的じゃないんだよ!!!!

まじはまって20分ぐらい損した。。。sinitize

2006年 12月 23日

色を何にあわせるべきか

こう定期的にモニタの色を気にしたりして、結局デフォルトに戻したりを繰り替えているけれど、何にあわせればいいのかわからない。

今日はなんとなく NVIDIA Contorol Panel からのキャリブレーションを実行してみた(マルチモニタの接続先を変えたので)のだけど、かなり今まで見てた色と違って怖い(ホントに恐ろしさを感じる)

ウェブ関連の画像を作るときは、むしろ積極的にキャリブレーションすべきじゃない気がするけど(世の中の人の殆どはキャリブレーションをしないし、そして安い液晶を使っている)、そういう考えも相まってどこにあわせるか悩む。

そしてついでに MacBook のキャリブレーションもしてみたけど、結構青い方向に補正された。うううううん。


うーん。結局入力/出力であってればいいんだから自分の使う範囲で色があってればいいんだよなぁ……

ウェブの画像作る時ってどうすればいいんだ。


あと疑うべきが多すぎる。モニタ自体(ハードウェア)、モニタプロファイル、モニタの設定、OS のドライバ設定、自分の眼。

OS X フリーズ

ここ数日の間に同じ症状で二度フリーズした。電源ボタン長く押して再起動

現象

  • マウス以外の全ての操作が不可能に

夢:車いす 黒い竜

  • バス
  • 渓谷
  • 近代的な建物
  • 地下へ
  • ラーメン/冷やし中華/カレー
  • ラーメン
  • iPod nano
  • 車椅子
  • 許可をとらない
  • 不注意
  • 責任がどうとか
  • 黒い竜
  • よくわからん機械(アトロポス)がでてくる
  • いたづら電話で起こされる

Win 機のメモリ増やした

256 * 2 Dual Channel なところに 512 一本差した。
ゲームがちょっと快適に(げーむかよ

ubuntu Kernel Update

なんとなく sudo apt-get upgrade したらカーネルのアップデートがあったのでインストール。
なんかアレな気分になって /boot/grub/menu.lst 見たら書き換え前の状態 (root=/dev/sda) に戻ってる。
とかいう話を IRC でしたら Topia さまが上のほうにあるコメントアウトされた kopt を変えて grub-update するんだよ!とか言ってくれたのでやった。なるほどなぁ

# kopt=root=/dev/md0 ro

コメントアウトはしたまま。

2006年 12月 25日

OS X で Esperanto を入力する

キーボードの U.S. Extended を選ぶと、Alt-6 (サーカムフレックス) Alt-b (ブリーブ) が入力できるようになるみたいだ。あとは続けて c, g, h, j, s / u をうてばいい。

Wikipedia の Esperanto の項に書いてあった

sonĝi (うたう不定形)

しかし全然語彙を覚えてない件

2006年 12月 24日

gerry++

ついでにここ数日頭痛が激しい。左後頭部が痛い。

2006年 12月 25日

vox の言語設定

vox の言語設定をすぐに変えられるといいなぁと思ってちまちま GM 書いてたけどハマりまくった。

  • "Content-Type":"application/x-www-form-urlencoded" してないと 404 Not Found を吐くらしくて typo をしらべまくった
  • 送るクエリで cancel が含まれてるとそっちが優先されてリダイレクトされるのに気付くまで時間かかった

http://lab.lowreal.net/trac/browser/c/userjs/voxchangelangononeclick.user.js?rev=537
http://svn.lab.lowreal.net/lowreal/c/userjs/voxchangelangononeclick.user.js

lowreal.net にうpるのが面倒くさい……ミラーリング環境整えないとなぁ


関係ないけど Greasemonkey は content-type に関わらず user.js に対してインストールダイアログだすのをやめてほしい! っていうかインストールダイアログはどう考えても改悪としか……ソース読むのにワンステップ踏まないといけないし

2006年 12月 26日

bluetooth

bluetooth なキーボード/マウスが欲しい。
けどなんか bluetooth 機器はやたら高い

lftp mirror

ファイルサイズしか見てないようだ。なので、鯖上にファイルがあり、ローカルにもファイルがある場合かつ、ファイルサイズが違う場合、問答無用で鯖上のファイルが上書きされるっぽい。

なんか、まだ、しらべて、ない、けど、旧日記のコメントデータをいくらか失った、かも、し、れない。ときどきダウンロードしてたから、完全になくなってはいないだろうけど……

けつろん

  • 面倒くさくても、rsync を使いましょう。

rsync

っていうか速度的に lftp とかありえない>< ファイルリストとってくるの遅過ぎる。
ので結局 rsync でミラーリングするようにスクリプト書き直した。いそがばまわれですよ。

2006年 12月 27日

flickr から Blog This

Your account -> You blog で適当に追加したあと Layout -> 500px, on its own line (例) -> CUSTOMIZE ってやると HTML が修正できることに気付いた。
せいかくには、だれかが写真のエントリの CSS を変えていたんだけど、どうやってやってるかわからなかったから一日中調べてたんだけど!!! Layout 選択のときにさらに奥に行けるとは思わなかった。

js text-hatena hilight source

text-hatena とソースコードハイライト使ってほげほげする。
というか vimcolor のソースよんで移植できそうだったら移植してつかおう?


designMode の iframe でキャレット位置を取得するほうほうがわからないなぁ。外側からだとできないのかもしれない?

window.getSelection().getRangeAt(0).insertNode したい。

http://developer.mozilla.org/en/docs/DOM:window.getSelection

vimcolor

Text::VimColor って内部で vim 使ってるのか!!
vim の syntax ファイルを読み込んで使えるように実装した何かだと思ってた。orz

GM

Greasemonkey は選択して右クリックから「選択範囲を GMS に」みたいな機能がいるとおもうんだ!!
Stylish みたいにさ!!!

Ruby countdown

(5 * 60).downto(0) do |i|
    print i, "\r" 
    $stdout.flush
    sleep 1
end
2006年 12月 28日

XREA を rsync で更新する

なんか GUI のクライアント使うのさえ面倒くさくなってきてミラーリングツールを使って更新することにした。

#!/usr/bin/ruby

require 'optparse'
require 'pathname'
require 'open-uri'

ROOT = '/srv/www/virtual/userid/public_html'
SERV = '/virtual/userid/public_html'
HOST = 's63.xrea.com'
USER = 'userid'
PASS = 'hogehoge'

open("http://www.#{HOST}/jp/admin.xcg?id=#{USER}&pass=#{PASS}&telnet=t") do |f|
    data = f.read
    ip =  data[/NAME="remote_host" VALUE="([¥d.]+)"/, 1]
    raise "can't get IP" unless ip

    open("http://www.#{HOST}/jp/admin.xcg?id=#{USER}&pass=#{PASS}&remote_host=#{ip}&ssh2=SSH%93o%98%5E") do |f|
    end
end


host = nil
dry  = false
OptionParser.new do |opts|
    opts.on('-n', '--dry-run') { dry = true }

    opts.parse!

    host = ARGV[0]
    unless host
        puts opts
        exit 1
    end
end


def sync(host, dry=false)
    dir = Pathname.new(ROOT) + host
    raise "#{host} is not exists." unless dir.exist?

    system(<<-EOC.gsub(/^¥t+/, ''))
    rsync #{dry ? '--dry-run' : ''} -vptr #{dir}/  #{USER}@#{HOST}:#{SERV}/#{host}
    EOC
end

unless sync(host, dry)
    puts "rsync failed. retry after 5min."

    (5 * 60).downto(0) do |i|
        print i, "¥r"
        $stdout.flush
        sleep 1
    end
    sync(host, dry)
end

こんなスクリプト書いて実行させてる。ホストごとに rsync できるようにしてる。


最初は lftp でやってたのだけど、こいつはなぜかファイルサイズを見るらしく困ったうえに、ファイルリストとるのが劇遅くてやる気がなくなるので結局 rsync にした。ssh 登録がめんどいけどそれも自動化した。

ピンホール

ピンホールかめら楽しいよ!

gerry++

2006年 12月 29日

XP がまた不安定

んがー。ログオフしたら再起動かかった。こわい

2006年 12月 30日

なんか

なんだかわからないけど、うまく対称性があるインスタンスメソッドの対を見ると、ドキドキします。

OS X のブラウザでのフルスクリーンモード

Opera 以外はできないのかなぁ。

今日書いたコード

JS 部分は Opera/Firefox/Safari でうごいて IE がなかまはずれ
CSS 部分は Firefox/Safari で想定したものになって、Opera/IE が想定外(ただしこのふたつは挙動が一緒)ってなった

なんかこの組み合わせが多いきがする

2006年 12月 31日

THAL like

	html = html.replace(/>([^<]+)/g, function () {
		var ret = arguments[1];
		ret = ret.replace(/¥[?(https?:¥/¥/[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+)¥]?/g, '<a href="$1">$1</a>');
		ret = ret.replace(/¥[?(d:id:([A-Za-z][a-zA-Z0-9_¥-]{2,14}))(¥:(¥d{8}))?(?:(¥#|:)([a-zA-Z0-9_]+))?¥]?/ig, function () {
			if (arguments[5]) {
				var delim = arguments[5] == ':' ? '/' : '#';
				return [
					'<a href="http://d.hatena.ne.jp/',
					arguments[2],
					'/',
					arguments[4],
					delim,
					arguments[6],
					'">',
					arguments[1],
					arguments[3],
					arguments[5],
					arguments[6],
					'</a>'
				].join('');
			} else {
				return [
					'<a href="http://d.hatena.ne.jp/',
					arguments[2],
					'/',
					arguments[4],
					'">',
					arguments[1],
					arguments[3],
					'</a>'
				].join('');
			}
		});
		return '>'+ret;
	});

2006年おわり

あー日記を最初から読み直してメモしてたけど、途中で Fx 固まって消えたのでもういいや。でも年に一度ぐらいは日記を読み直したほうが絶対いいなぁと思った。こんなことあったのか、とか気付いたり、あれって今年のできごとだったんだ、と気付いたり面白い。

現在位置の確認をするのに、過去の日記はたいへんつかえるのかもしれないなぁと思いました。

今年は前年にも増していろいろなことがあり、いろいろな人のお世話になりました。おかげさまで二年ぐらいたったように感じられます。ありがとうございます。

だんだん書ける事が少なくなっていくのが不安ですが、できるだけ何も考えないで書いていけるようにするために緩やかな変化をつけていこうと思います。

img_231602