沢木耕太郎 推理ドキュメント 運命の一枚 ~"戦場"写真 最大の謎に挑む~
3カ月ぐらい前に録画したやつをようやく見た. ロバート・キャパという戦場カメラマンの「崩れ落ちる兵士」という写真の謎を解く.
写真の背景に写る山や草や人などからどういう位置でどのような状態でとられたのかをCGも使って突き詰めていく. これは見事な作品だ.
沢木耕太郎 推理ドキュメント 運命の一枚 ~"戦場"写真 最大の謎に挑む~
3カ月ぐらい前に録画したやつをようやく見た. ロバート・キャパという戦場カメラマンの「崩れ落ちる兵士」という写真の謎を解く.
写真の背景に写る山や草や人などからどういう位置でどのような状態でとられたのかをCGも使って突き詰めていく. これは見事な作品だ.
『老子・荘子』(野村茂夫)
小さいころによくみた故事成語や熟語の成り立ちのエピソードも多くて眺めてるだけでも楽しい.
まあ, 中身は置いといて今回一番驚いたのはタイトルの振り仮名が「ろうし・そうじ」となっていること. 「そうし」じゃないのか! でも, 本文中の人の名前の振り仮名は「そうし」なんだよな. 題名と人の名前とで違うのだろうか. 不思議だ.
『コーディングを支える技術』(西尾泰和)
「この言語はあの言語よりいい」, 「あの言語は駄目だ」というのはweb上で非常によく話題になる. 本書はなぜ言語がたくさんあるのか, 言語の文法はどうやって決まってるのかといった点を, 言語の成り立ちや歴史に立ち戻って解説する.
一つの言語しか知らなくて, その文法や概念が絶対的なものと思っている人(そういう人はそれを疑うことも難しいのでリーチしにくいが)は読むとよいかもしれない. 言語なんてしょせん人が決めた約束事と分かるだけでも不毛な議論は減るかもしれない.
本書の注釈には可能な限り一次ソースがつけられているようだ. それに掛けられた時間は相当なものだろうと想像すると頭が下がる. それだけに参考文献のページが全くないのがもったいない. 索引から「蛇口」とか「亜鉛」とかどうでもいいものを取り除いて, 文献やURLを列挙すべきだと思う(これは編集者の仕事だろうが).
補足) p.27 ルールの競合でC++のvecto<vector<int>>がNGと紹介されているが, C++11からOKになったというのも一言入ってるとよかった.
デストラクタ内で例外を呼んではいけない
いやいや基本なんだが, ↓の修正してるときにうっかりデストラクタ内で例外が発生する可能性のある関数を呼んでいた. で, たまたま例外が発動してしまったらcatchできなかったらしくて何が起こってるのか分からずしばらく悩んだ.
Xbyak::util::StackFrame
x64プログラミングではgccとVC呼び出し規約が違う. で, プログラムを書くときしょっちゅう自分のページのx64アセンブリ言語プログラミングを見ながら書いてたのだが, 面倒になって軽いラップクラスを作った.
果てし無く今更感が漂ってるしjitasmの洗練された形に比べて全くいけてないのだが, 私にはこのぐらいのむき出し感がちょうどいい.
Xbyak::util::StackFrame sf(this, 関数の引数の個数, 使いたい一時レジスタの個数); という感じで使う(test/sf_test.cpp). たとえば
void gen() { Xbyak::util::StackFrame sf(this, 2); lea(rax, ptr [sf.p(0) + sf.p(1)]); }
だとVCではlea rax, [rcx + rdx]に, gccではlea rax, [rdi + rsi]になる.
rcxやrdxを特別扱いしたいときはUseRCXやUseRDXを指定するとそれを避けて一時変数にレジスタがアサインされる. たとえば
void gen() { StackFrame sf(this, 3, 3 | UseRCX | UseRDX); xor_(rcx, rcx); // rcxが使える xor_(rdx, rdx); // rdxが使える mov(sf.t(0), 1); // 0番目の一時レジスタを使う mov(sf.t(1), 2); mov(sf.t(2), 3); mov(rax, sf.p(0)); add(rax, sf.p(1)); add(rax, sf.p(2)); }
がVCだと
sub rsp,18h mov qword ptr [rsp+20h],rdi mov qword ptr [rsp+28h],rsi mov r10,rcx // 一つ目の引数をr10に退避 mov r11,rdx // 二つ目の引数をr11に退避 xor rcx,rcx xor rdx,rdx mov r9,1 // t(0) mov rdi,2 // t(1) mov rsi,3 // t(2) mov rax,r10 // p(0) add rax,r11 // p(1) add rax,r8 // p(2) mov rdi,qword ptr [rsp+20h] mov rsi,qword ptr [rsp+28h] add rsp,18h ret
になるし, gccだと
mov r11,rdx mov r10,rcx xor rcx,rcx xor rdx,rdx mov r10,0x1 mov r8,0x2 mov r9,0x3 mov rax,rdi add rax,rsi add rax,r11 ret
になる. しばらくこれを使ってごにょごにょ書いてみる.
あれ, gccでmov r10, rcxは不要だ. 削除しよう.
Linux kernel driverからユーザコマンドを呼び出す
call_usermodehelperを使えばそんな怖いことが簡単にできる. へぇ.
/* make -C /lib/modules/`uname -r`/build M=`pwd` see kernel/kmod.c */ #include <linux/module.h> #include <linux/kmod.h> char usercmd[256] = "/bin/ls"; static int __init call_user_init(void) { int ret; char *argv[] = { usercmd, NULL }; char *envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL }; ret = call_usermodehelper(usercmd, argv, envp, UMH_WAIT_PROC); if (ret) { printk(KERN_INFO "call_user_init fail=%d\n", ret); } return ret; } static void __exit call_user_exit(void) { printk(KERN_INFO "call_user_exit\n"); } module_init(call_user_init); module_exit(call_user_exit);
ヘッダの中でグローバル変数を複数回宣言できる(リンカが除去する). こんなのあったんだ. ヘッダでどうしても変数宣言したいときに便利だな.
gccの__attribute__にもあると思ったが, 残念ながらWindowsプラットフォーム専用だった.
『墨子』(浅野裕一)
なんとなく読んでみた. 人を区別することなく愛しなさいという兼愛を掲げ, 儒家などの家族の愛を中心にした考え方は差別愛だと批判する.
戦争をしてはならない. 人を一人殺すと殺人なのに沢山殺すと正当化されるのはおかしい. そういう考えは排除すべきだという非攻.
攻めはしないが守るための技術や手段は構築していいて, 墨家は専門的な軍事集団だったそうな. 様々な兵器の開発や作戦を行っていた.
繰り返しや似たような喩えが多く, あれこれさっき読んだっけとなって正直読みにくい. 「それは流石に無理だろう」という論理もあるけど, 根本の主張はシンプルで力強い. 2000年前にそんなことを考えて実践しようとしていた集団があったんだと思うとなんだか新鮮だ.
今年もやるらしい.
ラボユースって何?という方は「サイボウズ・ラボユースって知ってる?」を参照.
参加した人の感想としては一期生の@sinya8282さんの「サイボウズ・ラボユースっていいよね!」とか,
@Constellationさんの「サイボウズ・ラボユースの最終成果報告会にて発表しました」とか読むと雰囲気が分かるかと.
二期生はあんまし感想を書いてなさそうですがたとえば「サイボウズ・ラボユースを終えて&リリースしました!」.
今年は開発テーマに「Webセキュリティ, 暗号技術」が入ったので興味のある方はぜひ.
家族も幸せそうだった「ALWAYS 三丁目の夕日」(朝日新聞be)
昭和30年代(195~64年)は, 小春日日和のような時代だった(略), ベルエポック(古きよき時代)でした.
確実にいえるのは, 貧しくても子どもでも, 人としての格があったことです.
昔を懐かしがるのは自由だが, 本当にそうだったのか. 昭和40年代は四大公害裁判の判決が出ている. きれいなスクリーンの裏には産業廃棄物や排煙の垂れ流しが横行していたんじゃないのか.
いじめだって, 昔はそんな酷いのは無かったというが, 単に報道されてなかっただけだろう. 過去を美化して「昔はできたのに, 無かったのに」と考えると対応を間違える.