ハチロク世代開発合宿 二日目

  • 「どんだけ『上野氏』書いてんですか」(上野氏)

$ otool -tv /usr/lib/libSystem.dylib | grep "sysenter"
__sysenter_trap:
00001237 sysenter

  • int80? 割り込みをかけるとレジスタの中身が退避されてカーネルに処理が渡るわけなのだけど、いちいち全部保管して終わった後に全部復元するのでパフォーマンスが悪い。sysenterを使うと退避しなくなるので自前で必要なものだけスタックに入れて必要なものだけ復元するというのができる。
  • 「コミットしてから寝てくださいよー。どうしたらいいんだ俺」(上野氏)
$ cat > hoge.c
void main(char* argv){
  printf("Hello!");
}
$ gcc hoge.c
$ otool -tv a.out 
a.out:
(__TEXT,__text) section
start:
00001f74	pushl	$0x00
00001f76	movl	%esp,%ebp
00001f78	andl	$0xf0,%esp
00001f7b	subl	$0x10,%esp
00001f7e	movl	0x04(%ebp),%ebx
00001f81	movl	%ebx,0x00(%esp)
00001f85	leal	0x08(%ebp),%ecx
00001f88	movl	%ecx,0x04(%esp)
00001f8c	addl	$0x01,%ebx
00001f8f	shll	$0x02,%ebx
00001f92	addl	%ecx,%ebx
00001f94	movl	%ebx,0x08(%esp)
00001f98	movl	(%ebx),%eax
00001f9a	addl	$0x04,%ebx
00001f9d	testl	%eax,%eax
00001f9f	jne	0x00001f98
00001fa1	movl	%ebx,0x0c(%esp)
00001fa5	calll	0x00001fd6
00001faa	movl	%eax,0x00(%esp)
00001fae	calll	0x00003000
00001fb3	hlt
dyld_stub_binding_helper:
00001fb4	calll	0x00001fb9
00001fb9	popl	%eax
00001fba	pushl	0x00000057(%eax)
00001fc0	movl	0x0000005b(%eax),%eax
00001fc6	jmp	*%eax
__dyld_func_lookup:
00001fc8	calll	0x00001fcd
00001fcd	popl	%eax
00001fce	movl	0x0000004b(%eax),%eax
00001fd4	jmp	*%eax
_main:
00001fd6	pushl	%ebp
00001fd7	movl	%esp,%ebp
00001fd9	pushl	%ebx
00001fda	subl	$0x14,%esp
00001fdd	calll	0x00001fe2
00001fe2	popl	%ebx
00001fe3	leal	0x00000015(%ebx),%eax
00001fe9	movl	%eax,(%esp)
00001fec	calll	0x00003005
00001ff1	addl	$0x14,%esp
00001ff4	popl	%ebx
00001ff5	leave
00001ff6	ret

うーん?そもそも"Hello"ってリテラルがないぞ?"Hello"って文字列とかprintfへの参照とかはどこか別のところに定数テーブルかなにかで持っているのかなぁ。

  • Vista青画面は半透明でグラデーションがかかっている
  • 10:56 子プロセスの標準出力をウォッチして、特定のパターンの文字列が現れたら指定された音を鳴らす、ってところまでできた。合宿にありがちな突発的プロジェクトは終了。ActionScriptの続きに戻る。
  • Rascutsed同様に子プロセスの標準出力を読むところでブロックしてしまうことがわかった。しょんぼり。
  • otoolの-tはテキストセクション、-dはデータセクションを表示するオプション
  • objdumpがない
  • hexdump -C a.outしてみたらちゃんと入っていた
  • strings a.outしたらちゃんととれた。
  • 入ってはいるけどotoolでうまくとれていないだけらしい。何かオプションが違うのかなぁ。
  • MacでダウンロードしたソフトがZipで、解凍したら実行可能そうなファイルが1個だけはいっていた場合とか、Windowsの癖で「これはインストーラだ」と思って起動してしまっていたんだけど大概それはインストーラではない。Cmd+Nして新しいFinderを開いてApplicationsにコピーする。
  • ファインダの各ウィンドウのタイトルバーへパスを表示する - yes > /dev/null
  • killall Finderするとデスクトップのアイコンも消えるんだな。透明なウィンドウが一番下にあるというわけか。
  • タイトルバーにPOSIXパスが表示されるようになったけど、これはコピペできないんだな。Windowsの場合、Explorerのお気に入りとWSHブックマークレット的なことができるのだけど、MacでFinderを拡張したいと思ったらどうしたらいいのかな。
  • 「西尾泰和」偽名説


  • お祭りに遭遇
    • 昼御飯のためなくなく帰宅する
  • あまちゃんが寝てるので昼御飯が一個余っている。置いといていいのかな?
$ otool -s __TEXT __cstring -v a.out
a.out:
Contents of (__TEXT,__cstring) section
00001ff7  Hello!
  • おお、あった。
  • コンパクトデジカメでHDRするのより、大きくてちゃんとぼけるカメラを買う方がいい写真になるという結論になった。
  • GIMP起動できない。エラーで死んだ。

Process: gimp-2.2 [89722]
Path: /Applications/Gimp.app/Contents/Resources/bin/gimp-2.2
Identifier: gimp-2.2
Version: ??? (???)
Code Type: X86 (Native)
Parent Process: Gimp [89702]

Date/Time: 2008-04-05 16:43:03.940 +0900
OS Version: Mac OS X 10.5.2 (9C2015)
Report Version: 6

Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread: 0

Dyld Error Message:
Library not loaded: /usr/X11/lib/libfontconfig.1.dylib
Referenced from: /usr/X11R6/lib/libXft.2.dylib
Reason: Incompatible library version: libXft.2.dylib requires version 3.0.0 or later, but libfontconfig.1.dylib provides version 2.0.0

Wii

ボーリングでもテニスでもhayamizに負けた。とりあえずロケットサーブを打たないと100%打てない位置に返ってくるし、「前衛であわてて打つとアウトになる位置」を狙って打ったりできるらしい。

  • 86合宿のチャンネルで++とか--とか発言するとマリオが増えたり減ったりするときの音を出すボットを入れた。
    • 誰が最初に状況を理解するかな、って言ってたらfaultierだった。faultier++。
    • hayamizが状況を理解せずitkz音声を流すなどしている。hayamiz--。
  • MacのTerminal.appはタブが作れて便利だが、タブの名前を変更できないのかな。どのタブがどれか忘れる。
  • 86開発合宿チャットで発言すると音が鳴ることを理解したsotarokが++弾幕を貼ったため、iPod touchが壊れるなどした。
  • 晩ご飯を食べるなどした。
  • Macのコンソールでコピーをするコマンドはpbcopy。paste boardの略。
  • 子プロセスの標準出力を読むプログラム、行単位で読んでいるので改行がくるたびにreadlineが完了することを期待しているわけだけども、プログラムが終了して標準出力が閉じられるまでブロックされるものとされないものがある。
    • されないもの
    • されるもの
  • Rascutはloggerを使っているためうまく読めない
  • loggerの出力の後にpをつけると、loggerの出力自体も読まれる。
  • 出力をflushするものとしないもの、という説
  • 表示されないPythonスクリプトにstdout.flushを付け加えると表示されるようになる。
  • 子プロセスにflushを促すとか、パイプの受け先が送り元にflushを促すとか、たぶん無理だと思う。
  • 標準出力を見て特定のパターンが含まれていたら音を鳴らしたりgrowlしたりするスクリプトがあればRascutでの開発にも使えて便利だと思ったんだけどそうは甘くなかった。うむむ。とりあえずあきらめよう。
  • crossdomain.xmlを吐いてくれるローカル用の手軽なサーバをweb.pyで作る流れ。
  • Terminal.appのタブに表示される文字って変更できないのかな。
  • 「OSのバグじゃん」(上野氏)
  • Leopardのバグであって俺のバグではない」(上野氏)
  • いろんなサイトのcrossdomain.xmlを参考にする方法
    • 「inurl:crossdomain.xml」で検索する

http://www.adobe.com/crossdomain.xml

<cross-domain-policy>
    <allow-access-from domain="*.macromedia.com"/>
    <allow-access-from domain="*.adobe.com"/>
</cross-domain-policy>

アドビは身内にしか許していない。

http://api.flickr.com/crossdomain.xml

<cross-domain-policy>
    <allow-access-from domain="*"/>
</cross-domain-policy>

flickrは素通し。ただしapi.filckr.comっていうサブドメインにしてあるので、www.flickr.comのクッキーとかは見えないんだと思う。

  • 本当はrascutでエラーになるとマリオの死んだ音がするってはずだったのだが(ぉ
  • もう26時か。眠い。寝よう。