本気でJavaScriptによる端末エミュレーションを考えてみよう (1)

昔、某天才Yさんの紹介してくれたJS/UIXに本気で釣られて、JavaScriptで端末エミュレータを書き始めたことがあった。

結局まごまごしているうちにAjaxTermが出てしまったのだが、こちらはすべてサーバサイドでエスケープシーケンスを解釈してHTMLにレンダリングするタイプ。本質的に仕組みが違うし、自分のものと同じように改善すべき点はいっぱいあった。

そのときのソースは賞味期限切れる前にそのうち出すとして、今後同じことをやってみたいという好事家 (がいたとしたら) のためにメモを書いておきたい。

  • サーバサイドの問題
    • トランスポートを Comet ライクなものに置き換えないと、LAN外との通信ではつらい。
    • 実験では WEBrick と select() on tty の組み合わせで行ったが、結局は簡易的な Web サーバを自前で作る必要があるという結論に達した。
    • select()なんて遅い、epoll じゃなきゃだめでしょとか言ってる向きは作ってから言ってください。しかも *BSD は kevent だし。
  • クライアントサイドの問題
    • 最初1文字=1テキストノードというアホな構成でやってみたけど、愚の骨頂。スクロールが使い物にならなかった。innerHTML 操作がやっぱり速い。
    • <div style="font-family:monospace"> の中に展開するよりは、iframe に展開してスクロールバッファを兼ねてしまった方がパフォーマンスが出るかもしれない。
    • 1行を1ノードとして、カラーシーケンスの処理は、キャラクタバッファと HTML ラインバッファを持たせておいて、ライン単位で更新するのが最も効率がよさげだった。

なお、このメモは今後拡大する予定あり。
ですます調、面倒くさいのでやめる予定あり (今日みたいに)。

『JNIはジャワの原住民のインターフェイス』

http://www.tech-faq.com/lang/ja/jni.shtml より引用:

JNIはジャワの原住民インターフェイスである。

JNIはジャワと適用間のインターフェイスと他の言語で書かれる図書館である。

例として、JNIはジャワプログラムがCライブラリを使用することを可能にし、またCプログラムをJavaクラスを使用することを可能にする。

JNIjdkの一部として配られる。

な、なんだって?
ジャワの原住民は生まれつきのバイナリアンだったのか!!!?

………。

下を見ると

技術faqは地球からの私達の読者のためにこれらの言語に自動的に翻訳される。

ありがとう、地球外の人々。

英語版はこちら。