新風館で地ビール祭があるというので腹も空かせたまま駆け付けてみると, 普段の夜の閑散とした物悲しさが嘘のように, ビールを飲む日本人と日本人以外のビールを飲む人々でごった返していた.
続きを読むzshの履歴検索にanything.elを使う(ターミナル版)
anything.elを使ってzshの履歴検索をする - http://rubikitch.com/に移転しましたを参考に, ポップアップせずにターミナル内で動くようにしてみた.
続きを読む複数のメジャーモードを文脈に応じて切り替え
multi-mode.elを使うと, 一つのバッファ内で文脈に応じてメジャーモードを切り替えることができる. けれど, カーソル位置を受け取って, 切り替えるべきメジャーモードとその有効範囲を返す関数を定義しないといけなくて, 使い方が難しい.
そこで, 開始・終了の正規表現と, その範囲内で有効になるメジャーモードを指定するとmulti-modeに渡すべき関数を作って登録してくれる関数を書いた.
続きを読む最小限のJavaで素数を列挙(Javaで無限リスト)
以前書いた「ラムダ計算基礎文法最速マスター」では, ラムダ計算に自然数やデータ構造, 条件分岐, ループが用意されていないため, これらをラムダ項を使って模倣する方法を紹介しました. このようなことはどんなプログラミング言語でも起きうることで, たとえば, アセンブリ言語にforループが無いために, C言語で書かれたプログラムをアセンブリ言語にコンパイルするときには条件ジャンプ命令とラベルでforループを模倣する, というのも同じことです.
今回は, Javaを最小限の機能だけに制限した純粋オブジェクト指向言語で, 以下のものを実現してみます.
- 真偽値と条件分岐
- 自然数と四則演算
- リスト
- 無限リスト
さらに, これらすべてを用いて任意個の素数を列挙するプログラムを書いてみます. 完全なソースコードは一番最後にあります.
続きを読むはてなグループ日記でプレゼンモード
はてなグループのキーワードで使えるプレゼンモードはちょっとしたスライドを作るときにとてもべんり. でも, はてなグループを無料で使っているとキーワードはパブリックになってしまうので, あんまり馬鹿なスライドを作って公開してしまうわけにもいかない.
はてなグループの日記は無料で使っていても閲覧可能範囲を設定できるので, 日記をそのままプレゼンモードに切り替えるブックマークレットを書いてみた.
続きを読むEmacsサーバを適切に終了する
emacs --daemon
でサーバを起動しておいて, 複数のターミナルウィンドウから
emacsclient -nw
することで, ターミナルモードでも単一のEmacsプロセスで複数フレームの編集ができる. これはとてもべんり. でもごく稀にサーバを再起動したいことがあって, killすればよいかと思ったら, ターミナルが崩れて悲惨なことになってしまった.
emacsclient -e '(kill-emacs)'
とすれば正常にサーバプロセスを停止できるけれど, これだといちいち
The current server still has clients; delete them? (yes or no)
と訊かれてしまう. 調べてみるとserver-kill-emacs-query-functionが呼ばれているせいらしいので, これをkill-emacs-query-functionsからremove-hookしてみたけれど, うまくいかない. 途方に暮れていると, Emacsのサーバ機能を実装している server.el のソースコードがこんなふうになっているのを見つけた:
... ;;;###autoload (defun server-start (&optional leave-dead) ... (interactive "P") (when (or (not server-clients) ;; Ask the user before deleting existing clients---except ;; when we can't get user input, which may happen when ;; doing emacsclient --eval "(kill-emacs)" in daemon mode. (if (and (daemonp) (null (cdr (frame-list))) (eq (selected-frame) terminal-frame)) leave-dead (yes-or-no-p "The current server still has clients; delete them? "))) ...emacs.git - Git mirror of Emacs CVS repo
ハードコードされとる!
仕方ないので,
emacsclient -e '(progn (defun yes-or-no-p (p) t) (kill-emacs))'
とすることにした. ただし, 保存されていないバッファがあった場合のメッセージもおそらく表示されないので注意.
JavaScriptで読む「ラムダ計算基礎文法最速マスター」
以前書いた「ラムダ計算基礎文法最速マスター」(以下「最速マスター」)は, 予想以上に多くの人に興味を持ってもらえたようですが, 同時に難しくてわからなかったという人も多かったようです. 反響から察するに, 構文を見慣れていない(と錯覚してしまう)ことが理解の妨げになっていたように思います.
ラムダ計算の構文は, 実際には全く特殊なものではありません. このことがよくわかるように, 「最速マスター」のラムダ計算の簡約の例をすべてJavaScriptの構文で書いてみました.
......という内容になるはずでしたが, 気がついたらラムダ計算のインタプリタをJavaScriptで実装していました! 実際に動かせるものは下記URLにあります.
続きを読むGNU screenのウィンドウタイトルを自動設定
imageLoaderをVimperatorから使う+α
d:id:tomo_snowbug:20090619:1245430454 のimageLoaderというGreasemonkeyスクリプトがなかなか素晴しいので, Vimperatorから使えるようにするついでに機能拡張してみた.
続きを読む