憂鬱な午後のひととき

12月29日_

mclのLLVM依存の切り離し

LLVMはasmコード生成にしか使っていないので中間生成物のasmを保存しておくことでユーザはLLVMなしでもコンパイルできるようにした.

x86/x64/ARM/ARM64でちゃんと動くか確認するのは結構面倒.

明日から1/2までネットワークにつながりません. マシンは非力になるけど雑音が無くなるので開発はかどるかな.

ARM版でTEPLAの2倍いけるとうれしいのだが, それには後1.4倍速くする必要がある.

それではよいお年を.

12月28日_

mclのLLVMによるasmコード生成

静的に出力するのでIntelのBMI2命令セットを有効にしてbuildしていると持ってないマシンで例外が発生してしまう.

いろいろ考えたが今回はできるだけ広く使ってもらうことが目標の一つなのでbuild時に-mattr=bmi2ありなしの両方のコードを生成し, 片方の関数名にはサフィックスをつけて区別し, 実行時にCPU判別して切り替えられるようにした.

Windows版はもともとXbyakしか使ってないので関係ない.

mulxを使う関数だけすればよいと思っていたが生成コードを見ていると意図しないところでその他のビット演算命令が使われる可能性があるようだ. 結局同じ関数になってしまう無駄を承知で全ての関数を切り替えることにした(個別に確認するのは面倒すぎる).

12月27日_

niftyコース変更

@homepageサービスのために毎月1000円少々払っていたのを, サービス終了によりついに250円の基本コースに変更できた.

長年使っているメールアドレスがあるので解約はしない.

12月26日_

mclのベンチマーク

ARM64版もう少し速くなってTEPLAの4倍. LLVMまわりは一端終わりにして上位をいじろう.

12月24日_

mclの高速化続き

ARM64版ほんの少し速くなってTEPLAの3.98倍.

12月23日_

mclの高速化

最終巾の一部を若干高速化. 10%ちょい速くなった. 最速の1/1.6倍. x64版はTEPLAの5倍. ARM64版は3.9倍. 来月までに4倍越えたいな.

OpenSSL 1.1系列でbuildできない部分があったので修正. EVP_CIPHER_CTXなどのクラスの中身が見えなくなっていた.

12月22日_

『「レジリエンス」を育てる本』(藤野博 日戸由刈監修)

たまたま図書館で見かけて読んでみたら面白かった.

レジリエンスとは心の回復力やしなやかさを意味する.

強い心ではなく, 失敗したときに立ち直れるようになりやすくする.

「レジリエンス」(落ち込んでも立ち直る力)+「ソーシャルスキル」(失敗したときにまわりに支えを求める)+「自尊心」(課題にとりくんでいるとき成功を信じる力) というのは先日のバグの調べ方で聞かれた「どうやってモチベーションを保ちますか」という質問の答えにうまく合致する.

12月21日_

ラボ忘年会

何年ぶりかで忘年会. 前やったのはいつだろう.

忘年会やろう→飲まない人多し→夜だと都合つけにくい→昼にしよう→という流れでランチ会になった.

えらく景色のよい店でこういうのもよい(こういうほうがいい).

12月20日_

暗号通貨読書会#5参加

Sidechain, アイデア自体は面白いけど実現性が?な感じ. 派生物を好きなように作れると言っても, bitcoinの総量は変更できず, 匿名性も担保できるのか不明.

12月19日_

Re: VelvetSweatshop

この謎仕様は古いExcelだけじゃなくて今のもそうだった. Excel 2016で新しく作ったファイルにVelvetSweatshopというパスワードを付けて保存したファイルは何もせずに開ける.

PowerPoint 2016ならパスワードを聞かれる. 変なの.

When is a password not a password? When Excel sees "VelvetSweatshop"によると このパスワードで暗号化したファイルはだれでも開けるけどアンチウイルスソフトがチェックしにくくなるという(一つだけなのでパターンを追加すればいいのだけど).

12月18日_

VelvetSweatshop

msofficeの暗号化・復号ツールを使ってる人から, 「なんか, 暗号化されてるけどパスワード入れてないのに開けるファイルがあった. なんだろう」という質問があった.

正直古いOfficeのフォーマットなんて全く興味無いのだが, ついつい調べてしまった. 確かに暗号化されてるのにパスワード無しで開く. 私のツールだとパスワードを入れないとエラーになる. しかしそのパスワードは分からない.

LibreOfficeをインストールしてそのファイルを試したら開けたのでデバッガで追いかけてみるかとbuildしてみる.

build中にソースコードを見てみるかと眺めていたらあっさり見つけてしまった. filterdetect.cxx

/*  "VelvetSweatshop" is the built-in default encryption
    password used by MS Excel for the "workbook protection"
    feature with password. Try this first before prompting the
    user for a password. */
std::vector<OUString> aDefaultPasswords;
aDefaultPasswords.push_back("VelvetSweatshop");

という記述があった. 試しに自作ツールで-p VelvetSweatshopをつけたらちゃんと復号できた. 昔のExcelのデフォルトパスワードってどういう経緯で付けられた仕様なんだろう. 不思議だ.

12月17日_

足の小指の爪

昨日で直近の締め切りがあるタスクが全て終わったので一息ついた. 疲れていたのか夜中トイレに行くとき足の指をぶつけた.

次の日痛いなと思って見たら血が出てた. 思ったより強くぶつけていたようだ.

12月16日_

SCIS2017

とりあえず出した. 「使いやすいように実装がんばってみた」というだけで理論的な新規性は一切ない. でもまあ, じっさいぽつぽつと使われているのでそれなりの価値はあるかな.

依頼があったのでXbyakのラベルクラスにそのラベルが定義されたアドレスを取得するgetAddress()メソッド追加.

最近ちょいちょいと複数の人から要望がある.

12月15日_

社内成果発表会

終わった. 今年は外部のいろいろな人と共同でやることが増えて面白かった. 来年も頑張ろう.

12月14日_

『「こころ」は遺伝子でどこまで決まるのか』(宮川剛)

ゲノム脳医学入門. ノックアウトマウスを使って作業記憶のみ劣化していることを突き止めていく.

最近流行のゲノム解析診断サービスに対して, どうあるべきかという提言をしているのがこういった新書では目新しい. 実際に著者が試して, どこがよくて, どういう誤りを避けるべきか書いてるのもいい.

12月13日_

Cybozu Tech Conference 2016

無事終了. 私の発表資料(バグの調べ方)

緊張して朝4時に目が覚めたので懇親会は眠かった. でも面白かったといってくれた方がいたのでよかった.

12月12日_

『5アンペア生活をやってみた』(斎藤健一郎)

朝日新聞出版から出てるのかと思ったら岩波ジュニア新書だった. 福島の原発事故を機に出来るだけ電気を使わないようにする生活を選ぶ.

たいした行動力だな. 冷蔵庫を手放すのは無理そうだが箒で掃除はできるかもしれない.

12月9日_

Re: disp8N

disp8N時の負数の処理のバグ修正依頼.

dip8Nにマッチするかの処理がoffsetが負のときうっかりunsignedとして扱っていたため, 1byteにできるときも4byteのままだった.

3byte長くなるだけでプログラム自体はちゃんと動くので気がつきにくい. もちろん修正したのだけど, よく気がついたな. ツールで警告がでるのだろうか.

12月8日_

disp8N

NASMをアップデートしたらXbyakでいくつかテストが失敗するようになった. 調べたらNASMがバグっていた部分に合わせていたところが修正されて顕在化したのだった.

disp8NのT1Sのときのエンコーディング処理が間違っていたのだった. Intelのマニュアル、エンコーディングのところ(Opcode/Instruction, Op/En)を読んだだけでは駄目でinputSizeを文章の中で確認しないと分からない仕様はなんとかしてほしい. それとも私が読み間違いしてるのかなあ.

12月7日_

Re: Cybozu Tech Conf

資料とりあえずできた. 次はSCIS2017の資料.

mcl

うまく動かないと問い合わせがあって調べたら, あるヘッダファイルをC++11モードでコンパイルしたものとそうでないものを混ぜて使っていた.

まあそれはしかたないだろうな.

12月6日_

Cybozu Tech Conference 2016

資料の準備. 来週はいろいろ締め切りや発表会が目白押しでやばい. なんとか乗り切らねば.

12月1日_

clang for Visual Studio

XbyakがWindows用のclangに一部対応してなかったので修正依頼があった.

今回初めて気がついたのだが2種類あるようだ. LLVMのサイトでダウンロードできるWindows snapshot buildsとMicrosoftのサイトからダウンロードできるもの. 後者のClang/C2はintrinsic関数は定義されているけど実体がなくてリンクエラーになった. inline assemblerはclang 3.8ではサポートしていたけどバイナリは何を書いてもint 3しか生成されないようで使えない.

前者のやつはVisual Studioのintrinsic関数と同じものが使えるようだ. というわけで前者のやつだけサポートした.

ところで今回の件はそもそも私が__xgetbv()ではなく_xgetbv()を使っていれば問題なかった. 最初ドキュメントが無くて__xgetbv()を試したら何故か動いたのでそのままになっていたんだな.


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