ねぇうしくんうしくん

今週のまとめ (一週間で自分が見た技術系サイトのログ)が今のところメインです。プログラミング言語、人工知能、セキュリティ 等

今週のまとめ (2017/4/28)

4月も終わり (ここで家賃振込みを忘れてたことに気づき書くのを中断し銀行へ行く) ですね。

プログラミング言語

Monads to Machine Code

www.stephendiehl.com

HaskellLLVMライクな中間言語から x86 の命令を出力する JIT コンパイラを作る記事。それぞれの命令解説があるのでx86の知識がなくても読める。

Helix: Native Ruby Extensions without Fear

Helix: Native Ruby Extensions Without Fear

Rust で Ruby拡張を書くためのライブラリ。Ruby では高速化などの目的で C で拡張を書くことが多々あるが、 Rust もこの目的として使えるようになる。Rust の マクロ機能を用いてより直感的に書きるようになっており、Rust コードで定義したクラスを Rubyバリアフリーに使うことができる。

Bonobo: data-processing for humans | Python 3.5+

www.bonobo-project.org

Python3.5のためのデータ処理フレームワーク。Python3 の言語機能を取り込みよりモダンな設計になっている。 開発中のため現時点で利用は推奨されていない。

Kaitai Struct

kaitai.io

バイナリ構造をパースするライブラリ・フレームワーク。 バイナリフォーマットを KSL というマークアップ言語で書くと ( GIFでの例 ) 、バイナリデータが構造体やオブジェクトにマップされるようになる。対応言語は、C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby。 KSLを直接各言語のコードに変換するコンパイラビジュアライザ、Webで動作するIDEなども提供されている。

また、Githubレポジトリ には、画像フォーマットからネットワークプロトコルまでいろいろな KSLでの定義がある。

アルゴリズム

C++ implementation of a fast and memory efficient HAT-trie

github.com

HAT-trie木 *1C++による実装。HAT-trie木は空間計算量が良い木で連想配列などに用いることができる。 この実装は pure HAT-trie 木の実装で、もっと効率の良い hybrid HAT-trie 木は “may arrive later” とのこと。 Cによる実装は既にある

セキュリティ

Referrer Policy

scotthelme.co.uk

See also: Referrer-Policy - HTTP | MDN, Referrer を制御する - Qiita

サイトから出ていく際に付く Refererヘッダ (遷移先のサイトに遷移前のサイトのURLを追加する)をどのように扱うかを制御することができるヘッダ Referrer-Policy についての説明。*2 それぞれの設定項目に対して丁寧に場合分けされている。残念ながら現在 Referrer-Policy を利用できるブラウザは少ない (Firefox等)。

このブログ筆者が運営しているサービスに securityheaders.io というのがある。サイトのセキュリティヘッダが設定されているか確認でき、ランクが付けられる。 securityheaders.io 某大のポータルサイトがF判定だった

Top 10 Developer crypto mistakes

Top 10 Developer Crypto Mistakeslittlemaninmyhead.wordpress.com

プログラマが暗号にして最も起こりしやすい10の誤り」。目次を引用すると、

  1. ハードコード化されたキー
  2. 不適切な初期ベクトル(IV)の選択
  3. ECBモードでの操作
  4. パスワード保管のための暗号プリミティブの誤使用
  5. MD5SHA1
  6. パスワードは暗号化キーでは無い
  7. 暗号化がメッセージの完全性を保証していると考える *3
  8. 非対称キーの長さが短い
  9. 暗号的でない乱数
  10. “暗号スープ” (暗号プリミティブの混在)

データベース

CMU 15-721

Advanced Database Systems

15721.courses.cs.cmu.edu

カーネギーメロン大学のデータベースの講義。講義のスライドとビデオ、また参考文献となる論文が公開されている。 DBMS の実装においての並列モデル・データレイアウト・データ圧縮・最適化などを論文を参照しながら行う。

*1: http://crpit.com/confpapers/CRPITV62Askitis.pdf

*2: 前者は Referer で、後者は Referrer。非常にややこしい

*3: HMACなどを使おうという話らしい