憂鬱な午後のひととき

4月26日_

mclライブラリ

楕円曲線暗号を使うためのライブラリと, ペアリング暗号で使うためのライブラリを統合したくてちまちまとやってるのだけどなかなか進まない. 目標は最速ではなくてもいいが, それなりに速くて, パラメータも多少自由度があってx64だけでなくその他のアーキテクチャで動くようにすること.

夏までにはなんとか形になるものにしたい. あとxbyakのAVX512対応も.

4月24日_

『ジョーカー・ゲーム』『ダブル・ジョーカー』(柳広司)

期せずして少し前に読んだ『ライアー』と似た系統. あちらは非公認殺し屋でこちらはスパイ.

「なににもとらわれない」方針はこちらが上かな. あっちは刑事とはいえ部外者にぼろぼろと内実をしゃべっていたし.

天皇に関する軍とD機関の考え方の違いの議論がおもしろかった.

4月23日_

頭痛

めちゃくちゃ酷い. 二日間寝ていた.

4月21日_

問い合わせ2件

CODE BLUE 2015の時に公開したMicrosoft Officeファイルのコマンドラインによる暗号化ツールmsofficeについて.

Excelの拡張子ってxlsxだけかと思ったら, xlsmとかxlsbとかいろいろあるそうな. それらも対応してという依頼. 中身は同じフォーマットらしいのではじいていた部分を修正するだけ.

xbyakをAVX512対応してほしいという依頼. コンシューマで使えるCPUはまだ無いからもう少しあとでいいかと思っていたが, 使ってくれてるのね. ありがたい. フォーマットの調査するか.

4月20日_

3次式の有理化

x = a + bi(i2 = -1)について1 / x = 1 / (a + bi)の分母を有理化するには分子, 分母にa - biをかければよい.

1 / x = (a - bi) / (a2 + b2).

ではx = a + bv + cv2, v3 = t(a, b, c, t ∈ K , vはKの元でない)について1 / xはどうすれば分母を有理化できるか. いくつか方法があるが2次式の応用でやってみる.

x = a + bv + cv2 = (v - α)(v - β)と因数分解する. 解と係数の関係からα + β = -b/c, αβ = a/c.

v3 - α3 = (v - α)(v2 + vα + α2)だからv2 + vα + α2をかければよい. v - βについても同様. したがって

P = (v2 + vα + α2)(v2 + vβ + β2)を計算する. v3 = tなので

P = v4 + (α + β)v3 + (α2 + αβ + β2)v2 + (αβ2 + α2β)v + α2β2
=((α + β)2 - αβ)v2 + (αβ(α + β) + t)v + (αβ)2 + (α + β)t

よって
Pc2 = (b2 - ac2)v2 + (-ab + tc2)v + a2 - bct.

Q = (v3 - α3)(v3 - β3) = t2 - ((α + β)3 - 3αβ(α + β))t + (αβ)3.

よって Qc3 = c3 t2 - (-b3 + 3abc)t + a3.

1 / x = 1 / c(v - α)(v - β) = Pc2 / Qc3.

4月19日_

『ライアー』(大沢在昌)

極秘の殺し屋組織の話. おもしろかった. 後半の戦いの描写は引き込まれた. よく調べたな. ラストの真相解明の部分はもう少しシンプルにした方が, 人の名前がたくさん出てくるとわからなくなる私にはよかったかな. ちょっと分厚い.

4月17日_

第12回数学カフェ「重力波」参加

ばりばりの研究者による講演. 質問もたくさんできてとてもぜいたく. ありがとうございました.

正田亜八香さんの観測装置の誤差をどうやって減らすかというお話. 不要な区間は制度が悪くなってもいいから, 狙った場所の誤差を減らす方法がおもしろかった. 4kmの長さを使っても原子より小さい長さしかずれないらしい. よくそんなのを検出できるなあ.

「ブラックホールがぶつかって見つかった」の意味が多少なりとも理解できた.

久徳浩太郎さんの相対論的力学, 電磁気学などのサーベイをしつつ一般相対性理論のはなしまで. とても早くてついていくのが大変だったけど約20年に勉強したことでも意外と覚えてるものだ.

ポイントを抑えた講義はすばらしかった. 時間の関係でスキップした部分も聞きたかったなあ.

4月16日_

『昭和元禄落語心中』(アニメ)

最後までみた. よかった. みよきちのせつなさ, 助六と菊比古が期せずして小夏に見せた野ざらし, 最後の二人会での芝浜. すばらしい.

4月15日_

情報幾何学の基礎輪読会#4参加

この分野は記号が本によって結構違うからすりあわせが大変やね.

4月13日_

『シュッツ相対論入門』(Bernard Scheutz著 江里口良治, 二間瀬敏史訳)

週末の勉強会に向けて久しぶりに最初の方を読み返す. みなでああだ, こうだ言いながら読んだなあ. 懐かしい.

4月12日_

makeの.SECONDARY

たとえば次のMakefileを作っておいて

>cat Makefile
%.o: %.c
    touch $@

%.exe: %.o
    touch $@

a.cというファイルがあったときに

make a.exe

とするとa.cからa.oが作られてそれからa.exeができる.

しかしディレクトリを見ると何故かa.oが無い. それで状況をよく見ると

>make a.exe
touch a.o
touch a.exe
rm a.o

だれかがa.oを削除してる! でもMakefileにrmなんて書いてない.

実はmakefileは暗黙の依存関係があるとき, 最初に無かった中間ファイルは削除するものなのらしい(暗黙ルールの連鎖). 全然知らなかった.

第二にmakeが他の何かを更新するためにbを作成する場合に, bが必要でなくなり次第削除されるという点が違います. そのため, make実行前に存在していなかった中間ファイルはmake実行後も存在しない事になります. どのファイルを削除したか, というのはmakeが`rm -f'コマンドを出力して報告してくれます.

だから(もっと複雑な状況で)dependファイルとか正しく書いてるのにたまにbuildし直しになることがあったのか.

そういうのを防ぎたいときはSECONDARYというのを使ってMakefileに

.SECONDARY a.o

を追加すればよい.

4月11日_

『だれもが知ってる小さな国』(有川浩)

発売されてすぐ購入していたけど, 冒頭を読み始めたところで勿体なくて止めていた. けど, せっかくの旅行なので読んでみた.

主人公の特殊な環境の選び方, コロボックルの登場のしかたなど実にうまい.

ただ問題解決にはもっと主人公が主体的に関わってほしかったな. 無い物ねだりというものかもしれないけど.

4月10日_

金沢旅行2日目

朝4時半に目が覚めたのでもう一度付近をランニング. 想像以上に暖かくて気持ちよい.

9年振りぐらいで大学のときの友達に会うため, 午後からは会社の人たちと別行動.

しかし自分が泊まるホテルがなんだったか忘れるというおおぼけをしてしまった. 仕方がないので友達に「今日, 私が泊まるホテルってなんだっけ」というメール.

幸い事前に友達に泊まるホテル名を知らせていたので助かった.

4月9日_

金沢旅行1日目

会社の方たちと金沢へ. 金沢は4回目かな. 初回は大学の友達と来た. 運悪く台風直撃で兼六園は10分ほどしか見られなかった. あと2回は学会関係だったのでほとんど何も見ていない.

今回は念願の金沢美術館. 天気がよくて気持ちよい. 夜は能登半島のほうまで行って泊まる. 料理がおいしかった. 食べすぎて少しランニング.

4月8日_

ライブラリコンパイル時とヘッダ利用時のマクロの不一致をチェックする

7日のミスは次のようなコードにしていたせいだった.

-------------
>cat a.h
#include <stdio.h>

inline bool definedA()
{
#ifdef A
    return true;
#else
    return false;
#endif
}

#ifdef A
    #define STR "defined"
#else
    #define STR "not defined"
#endif

void init();
-------------
>cat a.cpp
#include "a.h"

void init()
{
    const bool b =
#ifdef A
    true;
#else
    false;
#endif
    printf("init: A is %s %s\n", STR, (b == definedA()) ? "ok" : "ng");
}
-------------
>cat b.cpp
#include "a.h"

int main()
{
    printf("main: A is %s\n", STR);
    init();
}
-------------
>cl -c a.cpp -DA
>cl b.cpp a.obj
>b.exe
main: A is not defined
init: A is defined ok

definedA()はマクロAが定義されていたときのみtrueを返す関数. init()の中でinit()がbuildされたときのbool bとdefinedA()を比較して b.cppとa.cppでAが定義されている/いないが異なっていることをチェックしたつもりだった.

が, init.cppがbuildされたときにtrueは決まってしまうので意味がなかったという初歩的なミス.

init()がbool bを受け取るようにしてdefinedA()を渡すべきだった.

初歩的なのだけど実際にはまるとなかなか気がつきにくい. デバッガで追いかけても突然変数が変わったように見えてしまうこともある.

こういうパターンはわりとある気がする. 大昔, 知り合いがはまっていたのは10進数計算を行うdecNumberというライブラリ.

decNumber.hではDECNUMDIGITSというマクロが定義されてなければ自動的に1になる. ライブラリを作ってから使うときにDECNUMDIGITSに別の値を設定して動かして死んでいた.

もちろんドキュメントには書いてあるのだができるならこういうケースは自衛処理は入れたいな(自戒).

4月7日_

Re: Re: バグ追跡

>さあて, 原因は何かな(楽しみw).

ものすごくくだらない理由だった. 単にコンパイルオプションに必要なマクロがついていないだけだった.

私やlibsnarkの作者はそのマクロが必要なのを知ってつけていたのだけど, libsnarkを使うアプリにも必要なのを忘れていた(というか知らなかった).

オプションの値を表示させてようやく気がついた. libsnarkがライブラリをラップしているのでate-pairingのヘッダが直接ユーザライブラリまで見えているとは思わなかった.

こんなに単純な理由ではまったのは久しぶりだ. 思わせぶりな食い違いが多すぎた.

これはライブラリビルド時につけたオプションとライブラリ使用時のオプションが異なるときに検出する機構を入れておくべきだったな. libsnarkの作者に言われて追加したものなのでおざなりになっていた.

→ 自分のコードを見たら食い違っているとエラーになる機構は埋め込んでした(忘れてた).

→→ でもその機構はうまく働いていなかったようだ(駄目駄目).

4月6日_

Re: バグ追跡

まだ続くけど大分状況を絞り込めた. 発端は私のライブラリ(ate-pairing)を使うライブラリ(libsnark)を使うアプリ(zcash)で発生していた不具合. 私のライブラリを使わないとバグが出ないのでate-pairingに何か起因する問題.

ate-pairingと, 正しく動く(と思われる)代替物のalt-bn128とを切り替えながら調べるのだけど途中の演算が複雑でかなりやっかいだった.

一番困るのが途中の計算方法が違うので値が違ってるのかあってるのか最後の方にならないと分からない点.

覚え書きメモ:

結局, 現状ate-pairingを直接使うとうまくいくけどlibsnarkから間接的に呼ぶとおかしくなることが判明(issues). さあて, 原因は何かな(楽しみw).

ところでZcashって何だろう. 暗号学的に匿名性を保証するBitcoinの派生通貨?

4月5日_

gtagsで細かい設定

share/gtags/gtags.confをコピペして編集して使う(コマンドラインで直接指定する方法は分からなかった).

たとえば除外したいディレクトリは

common:\
    :skip=HTML/,HTML.pub/,...

に追加. C++でtemplateの実装を.tccに書いていたりしてそれを参照したいときはbuiltin-parserやlangmap=C++に.tccを追加すればうまくいった.

>gtags . --gtagsconf mygtags.conf
4月4日_

バグ追跡

まだ見つからない. どこから計算がおかしくなってるのか追跡するのが大変. とりあえず自分のとlibsnarkの両方をいじって出力フォーマットを揃える. 乱数処理部分をいじって固定にする.

4月3日_

ate-pairingのバグ?

私のライブラリを使ってるlibsnarkを使ったプロジェクトからの報告. 数日前から調べてるけどどこが悪いのかなかなか見つけられない.

4月1日_

第5期ラボユース成果報告会

先月末にあったもの. みなさんすごいな.


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