Home About Contact
fern-parser をリリースした

The fern-parser logo

昨年くらいから断続的にテキストパーサーを調べて実験コードを書いてきた (この辺の話)のですが、 機能変更が落ち着いてきたのでとりあえず公開しました。TypeScript 版です。 ライセンスは MIT です。 このブログで書いてきたパーサーコンビネータは Kotlin で実装しているのですが、 それを TypeScript に移植してあれこれ修正したものです。 ライブラリ本体は TypeScript で書いていますが、パースするコードを書くときは JavaScript でゆるくかけるので楽です。

Kotlin 版では tailrec が使えたので深い再帰が発生してもスタックオーバーフローにはならないと思うのですが、 TypeScript 版はそのあたりの対策は今のところしていません。 そんな巨大なテキストをパースすることもないのかな。

» Read More
TypeScript で書いたコードを ExtendScript から使う

以前に 「Markdown to InDesign 開発入門」 という キンドル本を書いたのですが、書き直そうと思い始めた。 理由のひとつは、 内容が古くなってしまったこと、そして もうひとつは、パーサーコンビネーターを使えばもっと簡単にマークアップテキストをInDesign ドキュメントに 変換できるのではないか?と思い始めたから。

この本では、markdown テキストをパースするために既存の markdown パーサーライブラリを使っている。 その markdown パーサーを ExtendScript として作動させることができないので、 普通の Node.js でつくった markdown テキスト to JSON変換サーバーを用意してそっちで変換する、 という方法を使っている。 既存の markdown パーサーライブラリであるためパーサーを自分で書く必要もないのは 圧倒的なメリットだが、かなりややこしい話になってしまった。 使う側にしたらテキストをパースして InDesign ドキュメントに変換したいだけなのに (ローカルで変換サーバー起動するとか面倒なことを・・・)。

今使えるかどうか確認しているパーサーコンビネータは TypeScript で記述されているので、 ここではまずそのための事前調査としてごく簡単な TypeScript を ExtendScript で実行できるか試してみます。

» Read More
OpenAI API で GPT-4o-mini に英作文の添削をしてもらう

以前に大学受験の学生に英作文の添削を頼まれてつくったものです。 普通に ChatGPT でもできると思いますが、 毎回添削対象英作文以外のプロンプトは固定なので、APIでつくりました。 単に間違いを修正するだけでなく、修正個所について箇条書きで説明してもらうようにプロンプトで指示を出しています。

今なら GPTs を使うとよいのかもしれません。

API の場合、月額課金ではなく使用量に応じた課金なので、処理量が少なかったり実験レベルのアイデアの検証には API 課金の方が良い。

なお、 ここではシンプルにエンドポイントのURLに所定形式のJSONを投げて回答をもらう方式で実装していきます。 実装言語は Kotlin です。

» Read More
新規バッファを作成して Hello, World! 文字列をそこに挿入する (Emacs Lisp)

たとえばネットからダウンロードしたテキストを新しいバッファーに 貼り付けるにはどうしたらいいか?ということを考えた。

» Read More
date コマンドの結果を Emacs のバッファに挿入

insertshell-command-to-string を使うと、実行したコマンドの結果を emacs の buffer に挿入できることがわかった。

» Read More
Emacs でカーソル行にあるURL文字列を取得してブラウザで開く

以前のポストで書いたコード Emacs でカーソル行にあるURLを取得してブラウザで開く を 実際に emacs でテキストを編集しているときに使えるようにする方法を調べた。

» Read More
FLUX.1 [Schnell] を試した

A cup of coffee

FLUX.1 [Schnell]stable-diffusion.cppを使ってプロンプトで指定の文字列の入った画像を生成してみた。 手順はここ https://github.com/leejet/stable-diffusion.cpp/blob/master/docs/flux.md にある通り。

» Read More
Llamafile で気軽に Stable Diffusion する / ControlNet 編

Llamafile で気軽に Stable Diffusion するの続きです。 sdfile-0.8.4 のコマンドオプションを調べると control-net オプションがあります。 今回はこれを使ってみました。

A cup of coffee by Cezanne , ControlNet Line art

前回 Stable Diffusion で生成したセザンヌ風のコーヒーカップ画像を線画(line art)に変換しました。 左の画像が入力画像で、右が変換後の出力です。

» Read More
Llamafile で気軽に Stable Diffusion する

A cup of coffee by Cezanne

Llamafile は Mozilla https://future.mozilla.org/ のプロジェクトです。 Lamafile 自体の詳しい紹介はこちらhttps://future.mozilla.org/builders/news_insights/introducing-llamafile/をご覧ください。

いくつかのコマンドファイルがあるのですが、 その一つが sdfile で、これは Stable Diffusion のモデルを使って画像生成できる実行ファイルです。

Llamafile の特徴はプロジェクトのサイト https://github.com/Mozilla-Ocho/llamafile から単にファイルをダウンロードしてそれを実行するだけでよい、という点です。 ひとつの実行ファイルが各種OS(Windows/macOS/Linux) に対応しているので、 自分の使用OSにあったファイルはどれか?と悩むこともありません。 そして、特定のGPUが必要という制限もありません。

» Read More
Kotlin Multiplatform プロジェクト用のライブラリの作成と利用

以前のポスト Gradle を使ってライブラリプロジェクトを作成して local maven に publish、それをアプリケーションプロジェクトで使う(覚え書き) でつくった names というライブラリを Kotlin Multiplatform 用にする(覚え書き)。

» Read More
mac terminal で emacs を使うときに meta-f, meta-b ができない問題の解決

結論 Use Option as Meta key にチェックを入れる。

mac-terminal-use-option-as-meta-key

» Read More
「改善版2024)Kotlin でパーサーコンビネータを実装する HtmlWriter の導入」のコードを TypeScript にする(その3)

その2の続きです。 今まではパーサーが letter, zeroOrMore しか用意していなかったので、 HelloWrold! などという中途半端な文字列をパースする例で説明していた。 今回は普通に Hello, World! 文字列をパースできるように、 one, and および seq パーサーを追加します。

» Read More