Home About
2024年改訂版) データ変換を Writer Monad 的に処理する

データ変換を Writer Monad 的に処理する その1というポストを一年くらい前に書いたのだが、 今時点で最新の kotlin で作動させようとしたところ、 このコードが作動しなくなっていた。

» Read More
box.com の API を使った(覚え書き)

box.com の個人アカウントで OAuth2 を使って、ファイルをアップロードして新規作成/更新/ファイルリストの取得を試した。 言語は Node.js、もう非推奨らしい。(詳細はこちら https://github.com/box/box-node-sdk

box.com といえば基本企業が対象なのだろう。個人アカウントの場合での情報が見つからず四苦八苦した。 とくに、ネットにある情報をみると「管理者に承認してもらうためにリクエストを出す」というプロセスの説明が出てくるのだが、 個人アカウントの場合、管理者へのリクエストとか出せない。 そして結論としては、そのプロセスは(個人アカウントでは)不要。 自分の個人アカウントで管理しているクラウドファイルストレージにAPIアクセスするのだから、 たしかに承認とかいらない。 個人アカウントと企業アカウントでできることが異なるようなのだが、その違いも良くわからなかった。 個人ユーザーとか端から相手にしていないのだろう。

そもそも OAuth2 で認証する場合は、管理者への承認プロセスとかはもともと不要だった気がする。

» Read More
Gradle を使ってライブラリプロジェクトを作成して local maven に publish、それをアプリケーションプロジェクトで使う(覚え書き)

自分用のちょっとしたライブラリを local maven に publish しておくと便利。 その方法とそれを使う方法。

» Read More
QuickJS を ブラウザ上で使う(その2)

以前に QuickJS を WebAssembly に変換して ブラウザ上で使う というポストを書いたのですが、 その後、もっと良いガイド Running self-hosted QuickJS in a browser があったので、こちらの方法でやり直します。

この方法であれば、 https://github.com/justjake/quickjs-emscripten を使うことで、emcc コマンドが不要。 自分で emscripten をインストールしなくてよいので助かる。

» Read More
Chromebook Linux に emacs をセットアップ migemo インストール

Chromebook

新しく Chromebook を入手したので、執筆環境を構築中。 ローエンドのマシンですが、出たばかりの機種だからなのか(メモリが DDR5, WiFi 6E をはじめとして...) ものすごくキビキビ動きます。やる気が出る(たぶん)。

» Read More
Kotlin multiplatform で Kotlin/JS するときに JSON を扱う

org.json で JSON 操作するコードを書いていたが Kotlin/JS ではこれは使えない。 そのかわりに Serialization JSON を使った。

以前のメモ

» Read More
MacBook Air M1 に Emacs のセットアップ再び(備忘録)

もうこれ何度目?とにかく macbook air m1 に GNU Emacs 28.2 をインストールしたのでメモる。

» Read More
Thinkpad X1 Nano (Gen1)のファンから異音 / BIOS画面に入る方法

いつからかファンあたりからカチャカチャという音が出るようになってしまった。 ファンが回っていないときは音が出ないのでファンが原因だと思うのだが。 裏蓋をあけてファンを取り出し、エアダスターを噴射してみる。 そのときは異音は出ないので、ファン以外に原因があるのだろうか?と思ったり。 それでもそうやってファンのホコリを払ってもやはり同じように異音が出る。

Thinkpad X1 Nano Fan

ファンが原因かそれ以外か?この状態ではらちがあかない。 交換部品を購入することにした。 幸い Amazon で入手できる。 AliExpress でも取り扱いはある。Amazon の半額程度で入手できるが敷居が高いのであきらめる。 到着まで2週間程度かかったが入手することができた。

しかし、残念ながらはずれを引いてしまったようだ。

» Read More
改善版2024)kotlin でパーサーコンビネータを実装する 【おまけ】 HtmlBlock の改良

このエントリーは 改善版2024)kotlin でパーサーコンビネータを実装する【追伸】 の続きです。

この方法を使ってパースした場合、 最後にHTMLを出力する段階で HtmlBlock をまとめるコードがあるのですが、 やっていることは同じ種類の HtmlBlock を一つにしているだけです。 しかし、 HtmlBlock を sealed class として用意しているので、それを まとめる だけの操作をするのにもこれだけのコードを書く必要があります。

» Read More
改善版2024)kotlin でパーサーコンビネータを実装する 【追伸】

このエントリーは 改善版2024)kotlin でパーサーコンビネータを実装する 【後編】Bold パーサーを追加してみる の続きです。

後編では Hello, **World**! Hello, *Again*! というイタリックとボールドマークアップが混在した文字列をパースしました。 このとき、パーサーはイタリックやボールドの開始・終了に相当するマークアップ文字列を見つけてそれを <i></i> とか <b></b> に変換するという 発想で実装していました。

別の考え方として、イタリックのマークアップで囲まれた部分がイタリック属性を持つ文字列(ここでは Again がイタリック属性を持つ文字列)、 ボールドとしてマークアップされた部分がボールド属性を持つ文字列(ここでは World )という発想もあり得ます。 直接HTMLへ変換するのではなく、いったんASTに変換したいなどといったケースでは、このような発想でパーサーを書いた方がよいでしょう。

今回は前回のコードを修正して、 この 別の考え方 で実装してみます。

» Read More
改善版2024)kotlin でパーサーコンビネータを実装する 【後編】Bold パーサーを追加してみる

このエントリーは 改善版2024)kotlin でパーサーコンビネータを実装する【前編】 からの続きです。

前編で Hello, *World*! Hello, *Again*! という文字列を自前で実装したパーサーコンビネーターを使ってHTMLに変換しました。 後編ではボールド用マークアップが混ざっていてもうまくパースできるのか調べます。

» Read More
改善版2024)kotlin でパーサーコンビネータを実装する【前編】

以前に改善版) kotlin でパーサーコンビネータを実装する を 書いたのですが、 その後さらに改良した。

ここでは Hello, *World*! という文字列を自前で実装したパーサーコンビネーターを使ってHTMLに変換することを考えます。

» Read More