記事
Pike VMとEarley法の関係についてRubyで実装して考えてみる
正規表現マッチングの実装手法の1つとしてPike VMと呼ばれるものがあります。
これはGo言語の正規表現実装やRustのregex
crateで使われている手法であり、正規表現と入力文字列に対しての計算量でマッチングができるのが特徴です。
Earley法はJay Earleyの提案した文脈自由文法 (CFG) の構文解析手法の1つです。 すべてのCFGを構文解析できる手法で最悪計算量はですが、無曖昧であればで、決定的であればで構文解析ができます。
実装してみると分かりますが、Pike VMとEarley法には類似している点があり、Earley法をPike VMの発展系のように考えることができます。 この記事ではPike VMとEarley法のRubyでの実装を通じて、それらの関係を解説します。
想定読者: 形式言語や構文解析についての基本的な知識がある (NFAやCFGなどを知っている) ことを想定しています。
L*について説明してみる
Automata Learning とは、未知の (ブラックボックス) システムに対する入力とその出力から、システムの振舞いを有限状態オートマトンとして再現する手法です。 これは、仕様が形式化されていないシステムに対して形式的な手法を適用するための足掛りになるなど、近年重要な技術となっています。
Angluin によるは Automata Learning のアルゴリズムの中でも最も代表的な存在です。 は未知の正規言語を教師を使って学習するアルゴリズムで、多くの Automata Learning の基礎となっています。
この記事ではの、その原理やアルゴリズムの詳細について解説します。
OGP 画像の自動生成をする
前々から課題として感じていた、このブログの OGP 画像の自動生成を実装しました。 OGP 画像は Twitter などの SNS にシェアするときに表示される画像です。
この記事では自動生成の実装や、skia-canvas や budoux といったライブラリを利用して、タイトルの自動改行や高速な生成を実現したので、それらについても解説します。
JavaScript のソースコードを (意地でも) 小さくする技術
JavaScript のソースコードを小さくする方法として UglifyJS や Terser といった minification ツールを用いるものが良く知られています。 これらはソースコード中の空白やコメントを削除し、変数名などを短い形式にすることで、ソースコードを小さくしています。
こういった minification ツールを適用し、さらに GZip などで圧縮して配信するのが今日の Web での標準的な方法となっています。 ですが、JavaScript を圧縮できる可能性のある方法として、自己解凍的な圧縮技術を用いる、というアイディアがあります。
この記事では、そういった自己解凍的な圧縮技術として JS Crush や Roadroller について紹介します。
ブログを Next.js へ移行しました
元々は GatsbyJS で作られていたこのブログを、Next.js で書き直して復活させました。 放置している間にもいくつか記事にしたい事柄があったのですが、元の仕組みでは記事を書く気が起きず、結果的に 1 年近く放置することになってしまいました。
この記事では「なぜ GatsbyJS から移行したのか」と「他のフレームワークを比較した結果」、そして「最終的な技術スタック」について説明します。