憂鬱な午後のひととき


4月30日_

沢木耕太郎 推理ドキュメント 運命の一枚 ~"戦場"写真 最大の謎に挑む~

3カ月ぐらい前に録画したやつをようやく見た. ロバート・キャパという戦場カメラマンの「崩れ落ちる兵士」という写真の謎を解く.

写真の背景に写る山や草や人などからどういう位置でどのような状態でとられたのかをCGも使って突き詰めていく. これは見事な作品だ.

4月27日_

『老子・荘子』(野村茂夫)

小さいころによくみた故事成語や熟語の成り立ちのエピソードも多くて眺めてるだけでも楽しい.

まあ, 中身は置いといて今回一番驚いたのはタイトルの振り仮名が「ろうし・そうじ」となっていること. 「そうし」じゃないのか! でも, 本文中の人の名前の振り仮名は「そうし」なんだよな. 題名と人の名前とで違うのだろうか. 不思議だ.

4月25日_

『コーディングを支える技術』(西尾泰和)

「この言語はあの言語よりいい」, 「あの言語は駄目だ」というのはweb上で非常によく話題になる. 本書はなぜ言語がたくさんあるのか, 言語の文法はどうやって決まってるのかといった点を, 言語の成り立ちや歴史に立ち戻って解説する.

一つの言語しか知らなくて, その文法や概念が絶対的なものと思っている人(そういう人はそれを疑うことも難しいのでリーチしにくいが)は読むとよいかもしれない. 言語なんてしょせん人が決めた約束事と分かるだけでも不毛な議論は減るかもしれない.

本書の注釈には可能な限り一次ソースがつけられているようだ. それに掛けられた時間は相当なものだろうと想像すると頭が下がる. それだけに参考文献のページが全くないのがもったいない. 索引から「蛇口」とか「亜鉛」とかどうでもいいものを取り除いて, 文献やURLを列挙すべきだと思う(これは編集者の仕事だろうが).

補足) p.27 ルールの競合でC++のvecto<vector<int>>がNGと紹介されているが, C++11からOKになったというのも一言入ってるとよかった.

4月17日_

デストラクタ内で例外を呼んではいけない

いやいや基本なんだが, ↓の修正してるときにうっかりデストラクタ内で例外が発生する可能性のある関数を呼んでいた. で, たまたま例外が発動してしまったらcatchできなかったらしくて何が起こってるのか分からずしばらく悩んだ.

4月16日_

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は不要だ. 削除しよう.

4月15日_

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);
4月13日_

__declspec(selectany)

ヘッダの中でグローバル変数を複数回宣言できる(リンカが除去する). こんなのあったんだ. ヘッダでどうしても変数宣言したいときに便利だな.

gccの__attribute__にもあると思ったが, 残念ながらWindowsプラットフォーム専用だった.

4月12日_

『墨子』(浅野裕一)

なんとなく読んでみた. 人を区別することなく愛しなさいという兼愛を掲げ, 儒家などの家族の愛を中心にした考え方は差別愛だと批判する.

戦争をしてはならない. 人を一人殺すと殺人なのに沢山殺すと正当化されるのはおかしい. そういう考えは排除すべきだという非攻.

攻めはしないが守るための技術や手段は構築していいて, 墨家は専門的な軍事集団だったそうな. 様々な兵器の開発や作戦を行っていた.

繰り返しや似たような喩えが多く, あれこれさっき読んだっけとなって正直読みにくい. 「それは流石に無理だろう」という論理もあるけど, 根本の主張はシンプルで力強い. 2000年前にそんなことを考えて実践しようとしていた集団があったんだと思うとなんだか新鮮だ.

4月11日_

第3期サイボウズ・ラボユース募集

今年もやるらしい.

ラボユースって何?という方は「サイボウズ・ラボユースって知ってる?」を参照.
参加した人の感想としては一期生の@sinya8282さんの「サイボウズ・ラボユースっていいよね!」とか, @Constellationさんの「サイボウズ・ラボユースの最終成果報告会にて発表しました」とか読むと雰囲気が分かるかと.

二期生はあんまし感想を書いてなさそうですがたとえば「サイボウズ・ラボユースを終えて&リリースしました!」.

今年は開発テーマに「Webセキュリティ, 暗号技術」が入ったので興味のある方はぜひ.

4月6日_

家族も幸せそうだった「ALWAYS 三丁目の夕日」(朝日新聞be)

昭和30年代(195~64年)は, 小春日日和のような時代だった(略), ベルエポック(古きよき時代)でした.
確実にいえるのは, 貧しくても子どもでも, 人としての格があったことです.

昔を懐かしがるのは自由だが, 本当にそうだったのか. 昭和40年代は四大公害裁判の判決が出ている. きれいなスクリーンの裏には産業廃棄物や排煙の垂れ流しが横行していたんじゃないのか.

いじめだって, 昔はそんな酷いのは無かったというが, 単に報道されてなかっただけだろう. 過去を美化して「昔はできたのに, 無かったのに」と考えると対応を間違える.

記事の最後には『ALWAYS地獄の三丁目 本当は怖い昭和30年代』という本が紹介されている. 30年代ノスタルジーへのアンチテーゼらしい.

御意見は光成滋生<herumi@nifty.com>までお願いします