blog.livewing.net
2024/10/31
Rust と Chumsky で作る自作言語パーサー入門
Rust 製パーサーコンビネータライブラリの Chumsky (v0.9.3) を使用して、自作のミニ言語を作成し、インタプリタを作ってみましょう。 @card 私は過去に TypeScript を使用してパーサーコンビネータをゼロから作る記事を書いています。パーサーコンビネータを自作しながら原理を詳しく知りたい方はこちらの記事もどうぞ。 @card Chumsky の名前の由来は言語学の権威 N...
2022/07/11
ブログを GatsbyJS から microCMS + Next.js に移行しました
GatsbyJS から Next.js へとブログシステムを作り直しました。 GatsbyJS から Next.js へ GatsbyJS は Easy であり、 Next.js は Simple であるフレームワークであると感じました。 GatsbyJS は簡単に静的サイトを生成できるフレームワークです。定型的な利用方法であれば GatsbyJS は静的サイト生成をものすごく簡単にしてくれます。...
2022/03/14
NodeCG + React で作る動的なライブ配信画面
NodeCG を使用して、動的なライブ配信画面を作成する方法を紹介します。 NodeCG とは NodeCG は Node.js とブラウザを使用して配信画面を作るフレームワークです。 OBS Studio (以下 OBS) などの配信ソフト単体では不可能もしくは難しい、動的なコンテンツを表示するのに使います。主な使用例として、 Games Done Quick や RTA in Japan など...
2021/07/18
Arch Linux + i3 快適環境を構築したときのログ
以前の Arch Linux + Xfce のインストール記事 がだいぶ古くなり、インストール方法が変わりましたので新しく記事を書きます。また、筆者の Arch Linux 環境も大きく変わりましたので、それも併せて紹介します。 Arch Linux とは Arch Linux は、常に最新・最先端を追い求める人に最適な Linux ディストリビューションです。シンプル・最新・実用的・ユーザー中...
2021/06/30
zsh のあの記号 (チートシート)
シェルやシェルスクリプトを使っていて「この記号なんだこれ」ってなったときに見る記事です。記号について調べたくてもググラビリティが低くて検索できないので、まとめました。正直 man ページ見れば全部分かるんだけどね 筆者は zsh (zsh 5.8) を使っているので基本的に zsh についてまとめていますが、 bash など他のシェルで使用できるものもあります。 POSIX sh では使えないもの...
2021/06/18
GPG で始める暗号・署名ライフ
PGP (Pretty Good Privacy) の実装のひとつである GPG (GNU Privacy Guard) を使用して鍵を生成する方法をゼロから紹介します。 また、ファイルを暗号化・署名してやりとりする方法や、 Git のコミットに署名をつける方法、エンジニアフレンドリーなパスワードマネージャー Pass によるパスワード管理の方法なども紹介します。 メールでパスワードつき zip ...
2021/05/08
GatsbyJS ブログ記事に楽譜を埋め込む
LilyPond を使用して、 GatsbyJS のブログ記事に自動で楽譜を埋め込むプラグインを作ってみました。 Markdown ファイルに LilyPond ソースコードを直接書くと、以下のように SVG 形式で楽譜を埋め込むことができます。楽譜作成ソフトから手動で SVG を出力して貼り付ける作業が不要になります。 ```lilypond:embed \version "2.22.0" \p...
2021/03/22
TypeScript でゼロから作るパーサコンビネータ
プログラミング言語などのコンピュータ言語を構文解析するパーサコンビネータを TypeScript で作ってみようと思います。既存のパーサライブラリは使用せず、すべて自作します。パーサコンビネータを実装した後、四則演算の式パーサや JSON パーサを作ってみます。 書いてみると、意外と簡単です。「関数型言語」という言葉に謎にビビっている人もレッツトライ。 パーサコンビネータとは 小さなパーサ関数を組...
2020/11/08
Brainf*ck インタプリタを作りつつ Rust を紹介
Brainf*ck は 8 種類の文字のみを用いるチューリング完全なプログラミング言語です。今回はインタプリタを Rust で作ってみます。正直 Brainf*ck インタプリタ実装の記事というよりは Rust の紹介記事みたいになっています。 Rust とは Rust はメモリ安全なシステムプログラミング言語で、 C 言語とほぼ同等の速度で動きます。ガベージコレクションはありません。ダングリング...
2020/11/06
GatsbyJS + TypeScript でゼロから作るサーバーレスブログ
当ブログでは GatsbyJS の Starter を用いてデザイン等を作っていましたが、 React と GraphQL を勉強したので、ブログシステムを自分好みにスクラッチから書き直しました。その時の作業をログとして残しておきます。 GatsbyJS とは GatsbyJS は静的サイトジェネレータ (SSG: Static Site Generator) の一種です。 React を使用して...
2019/11/27
GatsbyJS ブログの自動ビルドを AWS から GitHub Actions に移行しました
GitHub Actions が正式リリースされたので、当ブログの自動ビルドシステムを AWS CodePipeline + AWS CodeBuild から GitHub Actions へ移行してみました。 GitHub Actions とは GitHub Actions は、継続的インテグレーション (CI) を GitHub で直接行えるシステムです。今までは GitHub の外部に Je...
2019/08/07
ブログを VPS + WordPress から AWS + GatsbyJS に移行しました
せっかく AWS を使い始めたので、今まで VPS で運用していた WordPress ブログを AWS 上に移行し、 GatsbyJS でサーバーレス化してみました。 発端 WordPress は広く使われているブログソフトウェアであり、簡単に使うことができるという利点がありますが、使っていくうちに以下のようなことを思うようになりました。 ページが表示されるまで時間がかかる Jetpack 遅...
2019/02/24
Arch Linux + Xfce 快適環境を構築したときのログ
更新: 2021 年版の Arch Linux インストール記事 を書きました。下記の情報は古くなっていますのでご注意下さい。 自宅の Arch Linux 環境を一新したくなったので、再インストールがてら手順を記事にしてみました。どなたかの参考になれば幸いです。 Arch Linux とは Arch Linux は、x86_64 向けに独自に開発された、あらゆる用途に対応できる万能 GNU/L...
2018/12/08
使えなくなったiNicoを復活させた話
この記事は TCU-CTRL 場外乱闘 Advent Calendar 2018 8 日目の記事です。 また、本日 12/8 は著者りぶの誕生日です。プレゼントお待ちしています。 7 日目担当キンジーの記事はこちら。 「キンジー」の由来がよく分かる記事。昔は遊戯王のアニメをリアルタイムで観てました。 この記事は以下のツイートの詳細を記したものです。 免責事項 この記事では、本来 End-to-E...
2017/12/08
押し寄せる「こんばんは」を迎え撃つ
この記事は TCU-CTRL場外乱闘 Advent Calendar 2017 8日目の記事です。 また、本日 12/8 は著者りぶの誕生日です。プレゼントお待ちしています。 ごあいさつ こんばんは。挨拶は人間とコミュニケーションをとる上で重要です。 Wikipedia の「挨拶」の記事にはこう記されています。 挨拶(あいさつ、儐とも書く)は、新たに顔を合わせた際や別れ際に行われる、礼儀として行...
2016/06/26
C++で構文解析 Boost.Spirit.Qi #3
今回はQiの使いやすさを向上するものを紹介します。 構造体をtupleとして扱えるようにする パーサに>>演算子を適用すると、属性がtuple<A, B>になることは前回説明しました。でもtupleだと後々ゴチャゴチャしすぎるので、 struct Result { A a; B b; }; みたいなのに突っ込めたらとても分かりやすくなってGoodです。Boost.Fusionを使...
2016/06/16
C++で構文解析 Boost.Spirit.Qi #2
今回から、詳しい文法の定義方法を紹介します。 EBNF記法 コンピュータ言語の定義に使われるBNF(Backus-Naur form)を拡張したEBNF(Extended BNF)に近い書き方で文法を定義できるのがQiの特徴です。 例えば、EBNFで自然数(先頭が'0'でない1以上の数字列)を定義すると、 digit excluding zero ::= "1" | "2" | "3" | "4"...
2016/06/16
C++で構文解析 Boost.Spirit.Qi #1
Boost.Spirit.Qi(以下Qi)はC++用の構文解析ライブラリです。テンプレートや演算子オーバーロードを最大限に駆使しており、C++内で文法定義を完結させることができます。その分コンパイルがとても遅いです。 準備 QiはBoostの中に含まれています。Qiはビルド不要なライブラリなのでVisual Studioを使用している場合はNuGet経由でインストールすることができます。 ヘッダフ...
2015/12/04
INotifyPropertyChangedのよくある実装
大体こんな感じで安定してきたので書き残し。 public abstract class BindableBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected virtual bool SetProperty<T>(ref T stora...