LaTeXでオブジェクト指向プログラミング

LaTeXのコマンドは複数の単語のものも一続きにしないと一つのシンボルと見なしてもらえないのが不便だったので, 名前空間が使えるというか, 記号で区切った後にサブコマンドを続ける書き方をサポートするものを作っていた. そうしたらいつの間にかオブジェクト指向プログラミングフレームワークが出来上がっていた.

続きを読む

Emacsでプレフィックスキーにもコマンドを割り当てる

Emacsでは, たとえばC-c C-jにコマンドが割り当たっているとすると, C-cまで打った時点では入力待ちになる. 慣れてくるとC-c C-jは素早く打てて, C-cを押して次が何のキーだったか迷うようなことはなくなってくるので, C-cを押してしばらく(0.5秒とか)経った場合は続けて別のキーを入力するつもりはないものとして扱って, C-c単体に別のコマンドを割り当てられるようにしてもよいのではないか.

もっと深刻な話としては, たとえばESC xというキー列はM-xと同等に解釈されてしまうので, ESCそのものにコマンドを割り当てることはできない. もしもM-xはAlt+xでしか打たないというのであれば, M-xのときにはESCとxが同時に入力されるはずなので, ESCの入力があってからほんの少しでも(0.01秒とか)入力待ちになったら, それはESC単体の入力とみなしても問題はなさそうなもの. 実際, ViperVimpulse, Evilなどでは, この発想でESCとM-x等の両方に別々のコマンドを割り当てている. 今回は, これをESCだけでなく一般のキーに対してできるようにしたという話.

続きを読む

C++のテンプレートでラムダ計算と型推論

C++のテンプレートを, コンパイル時に走るプログラムを記述するための言語だと思うと, この言語はチューリング完全なので, 当然ラムダ計算のインタプリタを実装できるし, そのラムダ計算の項の型を推論することもできる. できるからと言って馬鹿みたいにやってしまったという話. ソースコードは末尾.

続きを読む

Rubyで関数型プログラミング

Rubyでの快適関数型プログラミングライフを追求するあまり, 使えるのか使えないのかよくわからないものを作ってしまったという話. Rubyに不慣れな人や関数型プログラミングに不慣れな人に対して酷なのはまだわかるとしても, C++(というかboostでの関数型プログラミング)に不慣れな人も全力で置いてきぼりにする誰得記事になってしまった......

続きを読む

Vimperatorのコマンドラインで自動的にIMEをオフにする

VimperatorのコマンドラインIMEがオンになっていると, f等でヒントを選択できなくて困ることがある. 32ビットのWindows XPを使っていたときは, ime_controller.jsを使うことでコマンドラインや挿入モードでは自動的にIMEをオフにすることができたけれど, 他の環境でうまく動作しなくて困っていた.

ime_controller.jsが動かないのはFirefoxにおけるCSSのime-modeプロパティの動作環境が限られているのが原因で, Firefoxに限らずたとえばIME and DiMENSiONもうちの環境(Windows 7 64ビット)では動作が不完全(たまにIMEの状態が反映されない, IMEのオン・オフを制御できない)だったりして, IMEをアプリケーションから制御すること自体が難しいらしい*1.

そんな中で, Linux上のVimperatorからSCIMのオン・オフを制御する方法を見つけた:
Linux + Vimperator2.x で hint時にIMをオフにする - 備忘録 beta

これは, IMEのオンとオフのショートカットキーを個別に割り当てておいて, Vimperatorから外部コマンドを呼び出すことでキー入力をエミュレートするという手法. この方法ならWindowsにも対応できることに気づいたので, Vimperatorのプラグインを実装してみた.

*1:IME and DiMENSiONはFlash PlayerのIME制御機能を使っているので, FirefoxだけでなくFlash PlayerもIMEの扱いに難儀している模様

続きを読む

「当選確率が2倍に!」の解釈

MacBook Air 11インチ欲しい!」のキャンペーンページに,

はてなブックマークを使って当選確率UP!

さらに、このキャンペーンページをあなたのはてなブックマークに追加すると、当選確率が2倍に!この機会にぜひはてなブックマークもご利用開始ください。

※ブックマークだけでは応募できません。応募には、ダイアリーの投稿が必須となります。

MacBook Air 11インチ欲しい!

と書いてあって, この意味を誤って解釈したせいで2倍になる理由がわからずに悶々としたので, どう誤ったか, 本来はどういう意味なのかまとめておく.

続きを読む

GNU screenのattach時に環境変数を自動的に引き継ぐ

GNU screenを使っていれば, 作業の途中でログアウトするときにdetachしておいて, 作業を再開するときにattachすれば, 作業途中の端末の状態がそのまま維持されるのでとてもべんり. たとえば, 最初作業していたのとは別のホストからsshでログインしてattachなんてこともできる.

ただし, 最初にscreenを立ち上げたのとは別の端末でattachすると, screenは最初に立ち上げた端末の環境変数のままになっていて, 別のホストから接続していることを認識できず面倒な思いをすることがある. 今回はこれをなんとかしたという話.

続きを読む