今週のまとめ (2017/5/12)
前回はおやすみでした。
プログラミング言語
Categorical Semantics for Dynamically Typed Programming Languages
Categorical Semantics for Dynamically Typed Programming Languages
「動的型付言語の圏論的意味論」というタイトルの短い論文。「単純型付ラムダ計算がデカルト閉圏(CCC)に対応する (Lambek)」というのはプログラミングをする上ではもはや知らなければ恥ずかしいレベルの常識であるが、じゃあ型無しラムダ計算の場合はどうなるの?という疑問に答えている。短い論文で歴史的なオーバービューの側面が強いが、参考文献から参照することができる。
A true heterogeneous container in C++
A true heterogeneous container in C++gieseanw.wordpress.com
C++ で任意の型のデータが格納できるコンテナを実行時型情報を用いずに作ったもの。TMPとC++14/17の機能を用いて実現している。 std::visit などは初めて知った。
CPU Utilization is Wrong
プログラムのパフォーマンスを評価するときには、stall-waiting も含まれる CPU使用率ではなくIPC(Instruction per Clock)を見るべきという論説。そうすることによって、問題がメモリバウンドかCPUバウンドか分かるようになる、と主張している。
セキュリティ
[PDF] Quick introduction into SAT/SMT solvers and symbolic execution
SAT/SMTソルバとシンボリック実行の入門書。未だ草稿らしいが、内容は豊富である。典型的な数独等のパズルを解くものから、簡単なデコンパイラを作りその検証をZ3で行うと言った高度なものまである。シンボリック実行については LLVM の シンボリック実行ツール KLEE の解説に一章割かれている。 筆者は Reverse Engineering for Beginners で有名であり *1 、そういった話題が多い。
Linux Kernel Exploitation
近年の Linux カーネルに存在した脆弱性についてのまとめ。それぞれの脆弱性の発見手法や報告の他に、ファジングや検出・exploitツール、CTFのwriteupなども紹介されている。
機械学習
Data Version Control
機械学習での開発においては前処理→学習→評価などの幾つかの段階を経ることが普通であるが、それらの依存関係を解析し、自動的に処理フローを実行できるようにするといった趣旨のビルドツール。 コードやデータの変更に対しても容易に適応できるような設計を売りにしている。
Deep Learning AMI — Amazon Web Services
AWSでディープラーニングをするときに役立つ公式イメージ(AMI)。設定済みの TensorFlow, CNTK, Caffe, Caffe2, Theano, Torch, Keras 等が使用できる。 どうでもよいが、Theanoだけロゴが見えないのかわいそうである。
数学
Coding The Matrix と線形代数
情報工学のための線形代数の講義のサポートページ。本(有料)やスライドやソースコードなどのリソースが置かれている。また、情報工学における線形代数の応用例についてもいくらか説明されている。
ところで、情報工学のための線形代数のリソースは巷に多くあるが、個人的には以下の講義資料『産業応用のための基礎数理』が面白いと感じた。
内容はスペクトル分解やノルムや特異値分解など一歩進んだ線形代数の内容であるが、「産業応用のための」とあるように、画像処理や信号処理などの実際の応用においてそれらがどのように役に立つか分かるような構成になっている。
*1: 自分でも言っている / “As of 2013-2017 I mostly known for “Reverse Engineering for Beginners” free book.” https://yurichev.com/
*2:4章以降はリンク切れに見えるがURLをいじれば(数字をインクリメントすれば)見ることは出来る