ToDo:
なにやらネガティブだなあと思うけど、なんか概ねそんなもんかな感がある話
まぁそもそも英語、車、国、的な問題であんまアメリカ行きたくないんだけど、そのへん無いとしてもあまり行きたくないなあ…と思ってて、この話に書いてあるようなことが、第四の理由くらいになってる気はする。
ただちょっとグーグルの話とクビになった後の話が混じってるのかなーというか、あまりグーグルだとそれは無いんじゃね、てのもあるな。年中仕事って感じじゃないと思う。たぶん日本グーグルのエンジニアの方が平均的に見てよく働く。まあ最もワーカホリックな連中は日米両方で同程度に社畜な気はするけど…
まあ生活費クソ安い日本でたぶん給料水準が大幅に違いない気がするので日本で働くのは勝ち組感ある。
それはそれとして、しかしこの話に納得しにくいのは、あれかな。僕が知ってる向こうに行った人は、金が欲しいから行ってるんじゃなくて、単に「最先端」に触れたい的なひとがほとんどな気がするからかな。まぁ僕の知ってるひとたちがたまたまそういうひとたちなのかもしれないけど。
なんかつまり、最後に書いてる、自分の技術を磨く、ってののために行ってる気がするんだよな。まぁ日本でもできんじゃね、と言われれば僕も賛成するところだけど。
(01:39)
最近 ingress 廃人度合いを低めている…が、今日は腕が痛かったので家にいるのやばげーということでおでかけした。
なんか港区自転車シェアリングというものがあり
http://docomo-cycle.jp/minato/
つまり月1000円で自転車が使い放題になるのだった。まあ ingress 関係なく単に生活に便利そうなので試してみている。
とりあえずわかったことは電動アシスト自転車というのはすごい便利だなーという。電気自転車とか意味わからんと思ってたけど、なんか要するに自分でペダルを踏んでる時に、ちょっと回してくれる感じなんだな。たぶん踏んでる力とか検知してるからか、坂道でペダル回せてない時もなんか「ああこの乗ってる人回したいんだろーなー」と察して回してくれる感じで良い。
慣れるまでなんか謎の急発進とか起きてちょっとこわかったけど
ingress 的にはミッションが40個くらい。だいたい6時間ほど活動した気がするので、ひとつ10分くらいかな。
(01:49)
なんか安くなってるとのことで、遅らばせながらアセンブラ短歌本を読んでみた。なんか自分でも考えてみたくなる。
で、中の余談の一節のしょうもないことが気になった。
なお正式 には exit() は _exit() を呼び出すためのライブラリ関数であり, _exit() が 本来 のシステムコールの API だ . このため 「exit システムコール」 ではなく 「_exit システムコール」 と表記すべきで , man のカテゴリは exit(3) と_exit(2) になっている . まあでもあまり気にせずに , ここでは 「exit システムコール」と呼んでしまっている .
これはなんか全体的におかしいような気がする。
int 0x80 で呼ぶ文脈なんだから、 linux システムコールというレイヤで見るべきというのは良いと思う。間違ってると思うのは
あたり。いろいろ書いてみる。
まず、システムコールまわりには3つのレイヤがあると考えて良いと思う。
これは歴史的な事情とかで名前とか引数が微妙にヘンだったりする。これらの正式な名前は、 linux kernel のコードを SYSCALL_DEFINE で git grep するか、 /usr/include/asm/unistd_{32,64}.h あたりを見るのが良いと思う。
unistd_32.h を見れば、まぁ __NR__exit なんてものは無いし、 kernel 内でも SYSCALL_DEFINE1(exit, int, error_code) などとなってる。まぁでも _llseek とかは kernel 内ではアンダースコア落ちてるな。。
このレイヤにあるのは exit と exit_group 。 exit はスレッド終了であり、 exit_group がプロセス終了をする。まあ短歌の世界ではどっちでも同じだろう。
基本的に、このレイヤが glibc の man の 2 番目のセクションに載っている、と考えるのが良いと思う。 gettid や futex なんかの、 glibc が提供してないシンボルも man 2 で出るんだけど、やつらはちょっとした親切で載ってるだけという感じで良いと思う。また、 syscall wrapper と syscall の ABI がだいぶ違う場合なんかは、親切で linux 側の方も紹介してくれる時もある。例えば clone(2)
がまぁ、基本的に man 2 が出すのは syscall wrapper 。 x86 には send なんて linux システムコールは無いし (c.f., man 2 socketcall) 、実際には pread64 が呼ばれるはずだけど pread しか書いてない。などなど。
man 2 にはエラー時には errno がセットされるとか書いてあるけど、これなんかも libc がやってること。 errno なんて kernel の世界には無くて、 -4095 から -1 までの数字が返ればそれを errno にセットする、てのを libc がやってる。
このレイヤの仕事は libc の ABI を kernel の ABI に変換する、ってこと。おかげさまで syscall(__NR_XXX, ...) とかしないでも割と簡単にシステムコールを叩くプログラムが書ける。
普通あまりたいした仕事しないけど、 sigaction とか fork とかは割と仕事ありますね。 mmap の第6引数がアラインされてない時 EINVAL 返すのが glibc の仕事とか (c.f., man 2 mmap2)、 x86 含めて、 kernel の sigsuspend で第1,2引数使ってないアーキテクチャがあるとか言い出すとだいぶ libc マニヤ。
これが man 3 で出てくるやつ。普通、単なる syscall wrapper と違って、もうちょっと libc チックなイロイロをする。 fopen(3) と open(2) とかを考えると良いと思う。僕的には exit(3) と _exit(2) は fopen と open くらい違う。 atexit 呼ぶとかをはじめとして、結構いろいろやるんで。たぶん、歴史的には exit(3) が単なる syscall wrapper じゃない感満載なので、 syscall wrapper 足す時に名前かぶらないように _exit としたんじゃないかな。 C99 では _Exit 。
exit(3) も _exit(2) も _Exit(2) も exit システムコールは呼ばない。呼ぶのは exit_group 。 exit システムコールに対応する syscall wrapper は…たぶん無いと思う。一番近いのが pthread_exit(3) と言えなくはないけど…くらい。
と思う。
ただこのへんのレイヤをきちんと分別しないと大変な珍しい世界でしばらく仕事してたので、どうでもいい知識がたくさん身についた。まあ int 0x80 とかする人は上記3レイヤくらいは把握しといてもいいんではないかな。
(22:38)
イングレスのFSとかいうイベントに一度行った時に、10万AP増えたと言ってる(L8以上の)人がいた。はて、10万APてコンビニに行くと増えてる程度の量じゃなかったっけ、とか嘘ぶいてた。
ちょうど agent stats に上げたすぐ後くらいに、今さっきコンビニに行って、つまり行き帰りでかなりうろつくわけだけど、ああそういえばどんなくらいだろうな、と見てみたら、だいたい10万増えてた。
なんか割と気持ちよく多重できたなーくらいの感じだったので、ちょっと大袈裟だった感じだな…
(01:41)
前 | 2015年 4月 |
次 | ||||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 |
全てリンクフリーです。 コード片は自由に使用していただいて構いません。 その他のものはGPL扱いであればあらゆる使用に関して文句は言いません。 なにかあれば下記メールアドレスへ。