近況 2019-10-31

今月の活動について (ミローネ言語, knowbug, 競プロ, AtGraph, checklist)

ミローネ言語

F# サブセットのコンパイラ

https://github.com/vain0x/milone-lang

https://github.com/vain0x/milone-lang/commits/master?after=89312d708fa1ebfe0b4b7fc229397e390cdcbff8+34

そしてついに セルフホスティングを達成 ! 記念に記事を書いた:

F# サブセットのセルフホスティングコンパイラを作ってみた

knowbug

HSP3 デバッグウィンドウ

https://github.com/vain0x/knowbug

https://github.com/vain0x/knowbug/commits/master?after=6286b749c2a951d1cb1cc3cb38a07c2db7df6383+69

  • ミローネ言語にかかりきりになって間があいた
  • 間が空いたときはリファクタリングから進めるのが定番になりつつある
  • ファイル名や関数名を snake_case に統一するとか
  • 文字列エンコーディング変換の実装がいまいちだったので書き直したり
    • 例えば C++17 では basic_string のバッファーに変更操作を行えるので、vector に書き込んでからコピーするという操作は無駄
  • 細かい不具合を直したり
  • まだまだ微妙だけど、納得できるレベルになるまで時間がかかりそうなので、やや見切り発車ながら v2.0.0 beta をリリース
    • オブジェクトツリーの挙動が微妙すぎるので v1 の挙動に一時的に戻している
    • shift_jis 版は v1 と比べると機能が減って使いづらくなっただけ感がなくもない

競プロ

週末は AtCoder に参加。AGC に不参加だったり台風で1週飛んだため2回だけ。

AtGraph

https://github.com/vain0x/at-graph

  • 何らかのアプリを作りたいが何を作ればいいか分からないので、とりあえず手あたり次第に書いてみるシリーズ第一弾
  • AtCoder の入力のような形式でグラフを与えるとビジュアライズしてくれるアプリ
  • Dagre というグラフのレイアウトを計算するライブラリを使っている
  • 実装はサンプルコードをちょっといじっただけという趣だが、すでに一定の実用性があるのでよい
  • デプロイは GitHub Pages
    • ソースコード自体を docs 以下に置く
    • 依存ライブラリは CDN から ES モジュールとして import
    • No more webpack

checklist

https://github.com/vain0x/checklist

  • 何らかのアプリ~書いてみるシリーズ第二弾
  • チェックリストを作って共有できるアプリ
  • URL の # 以降にすべての状態が含まれているので、URL を貼るだけで共有できる
    • 状態を JSON にシリアライズして、Gzip で圧縮して、Base64 でエンコードして、# 以降に貼る
    • というのを状態が変わるたびにやる
    • ページロード時は # 以降を逆の手順で状態を復元する
    • 状態そのものをシリアライズするとアプリのバージョンアップで過去の URL が壊れるので、状態とは微妙に異なる中間表現に変換してからシリアライズしている
    • チェックリストは文字列を含むので状態が非常に大きく、URL が数百文字になってしまう
    • 実用的には、文字列データはストレージにおいてIDで参照するとかの方がよさそう
  • hyperapp v2 の練習でもある
    • v2 の主な変更点は、v1 の Wired Actions が消えて、effects や subscriptions が入ったこと
    • かなりとっつきづらくなったが、慣れると便利そう
    • effects とかはテスタブルにするために入ったらしいが、まだテストは試していない
  • これもデプロイは GitHub Pages
    • No more webpack と思いきや、依存ライブラリの1つ (pako) をブラウザ上で動かせるように webpack でバンドルするということをした
    • サンキュー webpack

関連記事