#17qiita.com前の記事は、binzumeさんのqiita.com次の記事は、sileさんです。先に断っておきますと、Erlangについての記事というよりは、「今まで構想に留まっていた実装がErlangで実現できちゃた」といった感じなので、Erlangについてあまり深掘りした話は出てこないと思います。FormatErlangを触り初めて5ヶ月目の僕です。以前(といってもいつだったか忘れましたが...)参加したとあるCTFの大会で、「与えられたPNG画像の拡張子を.zipに書き換えて解凍すると中からフラグ画像が現れる」みたいな問題を見た時に、僕は非常に感動しました。確かにPNGの画像として読み込めたはずのファイルが、拡張子を.zipに書き換えただけでZIPアーカイブファイルとして解凍することができました。そんな「エディタで編集したテキストファイルの拡張子を.pdfで保存するとPDFファイルになる」みたいな事あり得るんかwみたいな気持ちだったんですが、バイナリエディタでそのファイルを読んだりPNGやZIPのRFCや仕様を読んだりしているうちに、うまくそれぞれのファイルフォーマットの特性を活かしてやるとどうやらジェネレータ作成の実現が可能かもしれない?という推測が頭のなかに浮かんできました。いうか理論上確実に可能でした。「拡張子を書き換えるだけでPNG/ZIPとして変換できるファイルジェネレーター」、通称"ZIPNG"ズィーアイ・ピングです。Erlang?バイナリパターンマッチが滅茶苦茶有用!!!これに尽きます。PNGやZIPはファイルを任意の数のセクションに分割することができて、それらのセクションの長さは各セクションのヘッダやらシグネチャやらに値として保存されています。今回のジェネレータの実装にあたってファイルの解析と分割は必須の処理なのですが、各セクションからその値を取り出してやれば、Erlangのバイナリパターンマッチを用いてファイルのバイナリをうまくセクション毎に再帰的に分割してやることが可能なのです。