前回 音の鳴るシェル を作るために Pure Data で SE を作ってるんですがこういうのに使えるゲームの効果音みたいな素材ないんですかね、というようなことを言ったら ザ・マッチメイカァズ のようなまさに探していた感じの素材のありかを教えてもらう。「ダンジョンの壁に当たったとき」みたいな簡単な音を作るのさえけっこう手間だったので、ここで聞けてよかった。
年始から少し気になっていた GraphQL がおもしろくて API の実装を試してみたりしている。何が必要かをクライアント側がクエリではっきり簡潔に記述できるのいいなあ。スキーマから最低限の API ドキュメントが生成できるのも助かる。あと GraphiQL べんり。いいとこたくさん。でもサーバ側の実装はそんなに簡単じゃないかも。
作った API の使い心地を確認するために、いくつかクライアント側の実装も試してみた。Relay とか Apollo は色々やってくれて便利な反面、既にあるものを置き換えるにはそれなりに大きな変更が必要そうに見えた。その点 Lokka は単純な GraphQL のクライアントなので当たり前だけど自由度が高く、ちょっとした用途には使いやすかった。
fish では イベントハンドラ というかたちでコマンド実行前後の処理を実装できます。function 定義にイベントを指定しておくと、イベントが発火されたタイミングでその function が実行されます。この仕組みを利用してコマンド実行前後をフックするには、組込みの fish_preexec と fish_postexec イベントが使えます。
function my_preexec --on-event fish_preexec
echo "preexec: $argv[1]"
end
function my_postexec --on-event fish_postexec
echo "postexec: $argv[1] ($status)"
end
実行してみましょう。
$ uname
preexec: uname
Linux
postexec: uname (0)
$ hi
preexec: hi
fish: Unknown command 'hi'
postexec: hi (127)
ちなみに function 定義には --on-variable や --on-signal というオプションもあり、値の変化やシグナルの受信を監視できて便利そうです。
function my_pwd_changed --on-variable PWD
echo "PWD: $PWD"
end
function my_term_trap --on-signal SIGUSR1
echo "SIGUSR1 received"
end
実行結果は次のようになります。
$ cd /tmp/
PWD: /tmp
$ kill -USR1 %self
SIGUSR1 received
何かを削除するアクションをしたとき、即座にサーバへ反映したいけど、そのアクションを起こしたクライアント上ではまだちょっと表示していたい。例えば Twitter の Like 一覧で Unlike してもしばらく残ってるみたいな動きを Ember + Ember Data でやるときに、もっとうまくやれないかなという内容です。