2011年5月28日土曜日

DSでinferno



Infernoの動く環境をいくつか確保しておきたいということで、
DSでのInfernoの起動を試してみました。

必要なものは、ユーザープログラムをDSにロードする装置ですが、
今回試したのは

・R4i SDHC

・R4DS

の二種類です。前者はよくわからず最新ぽいのを買ってみたのですが、
残念ながら動きませんでした。
DSLinuxも駄目だったので、どうしょうもない。
無駄な出費でした。

R4DSではLinux、Inferno どちらも動作しました。
infernoは http://code.google.com/p/inferno-ds/で公開されているバイナリを使用しました。
icds.ndsというファイルです。

これをSDカードに入れてロードすると、infernoが立ち上がります。
上の画面には画像が表示されます。
下の画面はWMが表示され、タッチパネルでの操作ができます。
ボタン1,2,3の区別はL/Rボタンで行うようです。

起動時になにか音が出るので、サウンドも有効みたいですね。

keyboardというソフトウェアキーボードプログラムがあるので、
文字入力も可能です。

かっこよすぎ。

さて、次に行いたいのは自分でビルドして動かすことですが、
なぜか自分でビルドしたバイナリでは起動しませんでした(画面が白いまま)。
困った。
これを追うのは大変そうです。

2011年5月27日金曜日

infernoはjslinuxで動くか?

jslinuxというものがあります。
なんと、ウェブブラウザのJavascriptで386のエミュレーションをし、
その上でlinuxが動くというのです。

http://bellard.org/jslinux/

素晴らしいです。

さて、新しい環境が出てきたら、そこでinfernoが動くのか考察するのが礼儀です。

この環境は386上のLinuxということで、普通にLinux上でビルドすると動くような気がしますね。
結論から言うと、FPUが原因で動かなかったのですが。

キャラクターコンソールオンリー、ディスクスペースが全部で最大4Mbyteなどの制限があり、
ミニマムなビルドにしないと動かなそうです。

・手順

1. ローカル環境、ディスクの用意

http://blog.livedoor.jp/dankogai/archives/51683749.html
を参考にローカル環境と4Mbyteのディスクを作ります。

cpux86.js, cpux86-ta.js, index.html, jslinux.js, linuxstart.bin, root.bin, term.js, vmlinux26.binがあれば動くようです。

2. mkconfig の編集

普通にセルフビルドする設定にしておく。
SYSHOST=Linux, OBJTYPE=386。

3. ミニマムなビルドのためにいらないものを削る

emu/Linux/emu-gを編集。

dev: env, prof, dup, ssl, cap, indir, ip, eia, mem

mod: math, srv, keyring, crypt, ipints, loader

あたりをコメントアウト。

4. ビルド、strip

mk CONF=emu-g install

こうすると、GUIを持たないemu-gというプログラムが出来る。

strip emu-g でダイエットしておく。

5. 必要なファイルをディスクイメージにコピー

作ったemu-g、必要なライブラリ、必要なdisをコピーしておく。

emu-gは/binに、ライブラリは/libに、disは/root/inferno/dis/においた。
ライブラリはldd emu-gで表示されるライブラリをコピー(ホストのlinuxのものをコピー)。
libpthread.so.0も元々あるやつだとダメっぽいのでこれもコピー。

必要なdis は
lib/bufio.dis, lib/filepat.dis, lib/arg.dis, lib/string.dis, sh.dis, emuinit.dis。

6. 実行

jslinuxを立ち上げて(ブラウザでindex.htmlを開く)、
emu-g -r /root/inferno を実行すると・・・
うーん、動かず。

どうやらFPinit()でだめになるっぽいです。
そもそもCPUエミュレーターはFPUには対応していないようで、
inferno emuはFPU必須なのかも。

起動の流れが追えて勉強になりましたが、動かなかったのは残念。

ちなみに、emu-gのサイズは291kbyte、disは合わせて58kbyte。
共有ライブラリはでかいですが(全部で2Mbyteほど、ミニマムは不明)、
結構小さいですね。

私の技量ではここまで。
Native infernoをやるのはおそらく無理かと。
動けば、ブラウザ上でinfernoができてすごくいいんですけどね。
IEのプラグインはあるようですが、他のブラウザではまだなので、動くと良いのですが。

2011年5月26日木曜日

Acmeを使い込んでみる

最近脱emacsを計り、Acme-sacを使っています。
ちょっとずつコツが掴めてきました。
なお、windowsでの使用を想定しています。
OSXでもそれっぽいことができるとは思いますが、まだ試してはいません。

落ちることがあるので注意

Zeroxというコマンドでウィンドウを二重化できますが、
それをしたあと、片方のウィンドウをいじるとAcmeが固まるようです。
カーソルキーをおして、ctrl-s とかctrl-gとかおすと出ます。
条件はまだはっきりとしないのですが、zeroxした時だけ出るようです。
メーリングリストにはまだ報告していません。

なお、落ちたときに$home/acme.dumpというダンプファイルができることに気づきました。
もしエラーがでたら前バッファのバックアップを残してくれるようです。
知らなかった。

Acmeでメールの現実解

Acme上でMailを使うのは厳しいです。日本語がだめなので。
現実解としては、Thunderbirdの外部エディタにAcmeを指定することですね。
特に文字化けもなく使えることは確認しました。

Thunderbirdにはexternal editorとかいうアドオンをいれて、
外部エディタとして後述のバッチファイルを指定すればOK。

まだメインのエディタとしてmewを使っていますが、ゆくゆくは完全に移行したい。

Acmeにエクスプローラーからファイルを送る

エクスプローラーでファイルをAcmeでオープンできるように頑張ってみました。

やり方は、

・AcmeでWinのパス名をInferno上のパス名に変更するプログラムを作成
・Acme起動時にrstyxサーバーを立てる
・Acmeに対しrstyxでコマンドを送るバッチファイルを作成(emuをコールする)。

といった感じです。
無駄にHosted Infernoを使っています。
rstyxがいい感じです。

こうすると、メーラーから外部エディタとしてAcmeが使えたり、
バッチファイルのショートカットをデスクトップに置いておいて、そこにドラッグアンドドロップでファイルがAcmeで開けるようになったり、コンテキストメニューの「送る」に登録してみたり、といろいろできます。
残念ながら開いているAcmeへのドラッグアンドドロップは無理ですが。

やり方の説明は面倒なので、subversionのリポジトリをお知らせします。

http://www.assembla.com/code/yosinori_public/subversion/nodes/trunk/limbo/cmd/openwithacme

index.txt に説明があります。

Goog、Pediaを日本語対応に
Goog word、Pedia word、で単語のグーグル検索、Wikipedia検索が出来ます。
が、日本語に対応していないので、日本語対応をしてみました。
urlencodeというプログラムを作成し、それを挟むことで
日本語がコード変換されて、情報のgetが可能になります。
なお、プログラム名はurlencodeという大層な名前ですが、
ちゃんとはしておらず、ただ渡された文字列を%xx という形に書き出すだけです。

http://www.assembla.com/code/yosinori_public/subversion/nodes/trunk/limbo/cmd/urlencode.b

においておきます。
Acmeでテキストブラウズなかなかいい感じ。

矩形切り取り

バッファで矩形に切り取りたい箇所を選択し、rect を実行。簡単。
残念ながら、貼付けはできないっぽい。

固定幅フォント

Fontを実行するとそのバッファが固定幅・プロポーショナルが切り替わります。
Fontにフォントパスを引数として付けると、フォントの切り替えも可能です。

いっぱいバッファを開くとSortが便利

次々バッファを開くと訳が分からなくなりますが、
Sortを実行するとバッファがファイル名で並ぶので、
ソートされたバッファリストとして使えます。