Wed Feb 17 2021

最近やってたこと

cumin のアップデート

なんと関数を追加した. ただし条件分岐もないしループもない. 関数はかなり素朴な変数宣言と同じなので再帰しない(宣言時点の環境を捕捉して使うため). というわけでかなり単純なマクロ程度にしか使えないと思っている.

関数は変数と全く同様に let キーワードで宣言する. (fn キーワードでも良いように何故かなっている).

let f(x: Int, name: String) = {{
    value = x + 1,
    name = "Hello, " + name,
}};
f(0, "world")

Emacs/org-mode 入門

org-mode を使いたいがために Emacs の練習をしていた. 結果使いこなすには程遠いのだが, org-mode の片鱗を見た. すごい. 何でもかんでもここに詰まっている.

Source Block はメモ帳を瞬時に Jupyter-notebook に変異させる. しかも複数種類のプログラミング言語を自由に混ぜて使える. 計算結果を gnuplot に繋いで画像を生成して, 画像をそのまま埋め込むことが出来る. Emacs はなんといっても GUI プログラムなので画像を表示出来るのが強い. TODO リストは一番素朴な機能を提供してるだけに見えて org-agenda のおかげでかなり立派なTODOアプリとして使える. テーブル機能はデータをプログラムに渡す事もできるし, なんと org の中で表計算機能自体が組み込まれている.

しかし, 結局 Emacs らしいキーバインドを一つ一つ覚えていくのが辛くて挫折した.

journal.vim

org-mode の中でも org-journal は普段遣いしてもいいなと思いつつ挫折した. キーバインドもそうだが, 結局 org ファイルという摩訶不思議なフォーマットが嫌だったのもある. org-journal は scrapbox と TODO リストの合いの子といった感じ.

自分が思う org-journal の機能とは何か? の説明が以上である. もっとも org-mode は本当に巨大なので, こんなのは機能のごく一部だと言われたところで, 何も驚かないが.

作った: journal.vim

- 朝ごはん
    - [ ] お湯を沸かす
    - [ ] お湯を注ぐ

特に - [ ] とあるとそこはチェックボックス. チェックボックスが無いのは見出し.

- TODO 朝ごはん
    - [ ] お湯を沸かす
    - [ ] お湯を注ぐ
- TODO 朝ごはん
    - [x] お湯を沸かす [2021/02/17 (Wed) 02:38]
    - [ ] お湯を注ぐ
- TODO 朝ごはん
    - [x] お湯を沸かす [2021/02/17 (Wed) 02:38]
    - [x] お湯を注ぐ [2021/02/17 (Wed) 02:38]
- DONE 朝ごはん [2021/02/17 (Wed) 02:38]
    - [x] お湯を沸かす [2021/02/17 (Wed) 02:38]
    - [x] お湯を注ぐ [2021/02/17 (Wed) 02:38]

時刻情報はうるさく見えるだろうが, Vim 上では背景に溶け込むような色にシンタックスハイライトしている.

streamlit 入門

streamlit のチュートリアルをやって, ドキュメントを一通り読んだ. これが何かというと Python のライブラリであって, インタラクティブな関数, 例えばユーザーからテキストの入力を受け取って返す関数とか, 画像を出力(表示)する関数とか, そういった便利な関数がひたすら生えていて, あたかも sync な関数として使える. 実際にコードを動かすときは直接動かさずに streamlit run というコマンドを経由して起動する. すると web サーバとして立ち上がって, 入力は web ページ上で行うし, 画像が web ページの上に表示される. コード上では同期する関数だったが, これらがいい感じに上から実行される.

name = streamlit.text_input("Fill Your Name")
if not name:  # 入力が空
    streamlit.warning("Please Fille Your Name")
else:
    streamlit.success(f"Hello, {name}!")

この text_input() が標準関数の input() のように働いてると解釈してくれてよいが, web ページ上ではこれらが全部インタラクティブに働く. テキストを変えればもちろんそのたびにそれより後ろのコードが勝手に走り直される. Vue.js や React のような世界だと思って良いと思う.

何に使えるかというと, フロントエンドの技術にはならない. なぜなら出来上がりの見た目はいつも同じで, 基本的には上から一列に結果を並べるだけのものだから. Streamlit は Jupyter Notebook に対して選択肢を一つ増やしてくれる存在だと思う. Jupyter Notebook は一つの web ページの上でコードの断片とその結果を交互に混ぜて表示するが, これはコードはコード(しかも好きなエディタで書けばよろしい), web ページ上はその結果だけを表示してくれる(しかもかなりキレイに). もちろんコードを書き換えたら勝手に結果はアップデートされるといった機能は当然ある. またインタラクティブ要素が本当に充実している(スライダーで数値を指定するとか, いい感じのUIから時刻の範囲を指定するとか) ので, キレイに仕上げればこれがそのままデモとして人に見せる事ができる.

一方で, Jupyter Notebook はコードを共有したり, 結果込みの静的なファイルの共有といった使い方も出来るが, 逆にそれは Streamlit では出来ない. 自分一人でデータを眺めたり実験するのにこれは使えるが, Jupyter Notebook のすべての用途をこれで食えるわけではない.