2009年10月2日金曜日

Inferno on Armadillo Linux 挫折

先日休暇をとりました。
暇な時間にArmadilloでInfernoでも動かすか、と
Arm-linux用のemuを動かそうとしてみました。

結果は失敗でしたが。

CFがなかったので、RAMディスクにemuのバイナリを置こうとしたら
容量不足・・・

いろいろ消して再度挑戦するも、起動せず。

面倒になって、バイナリ配布のものではなく自分で作ろうとしたが、
gccが落ちたり。

半端な気持ちでやっても成果は出ないですね。

次から本気出す。

2009年9月13日日曜日

ktrans移植難航

plan9の日本語入力環境のktransをlimboに移植しようかなー、と軽く考えてました。
元のktransはkenのccで書かれている。
おそらく実用的なレベルに達していると思われ、skk方式となっている。

辞書をハッシュテーブルに格納しているようなので、limboで書き直してみたところ、、、
うーん、どう書いていいかわからない。
リストにどんどん突っ込んでいったら、メモリがあふれたのか、segvで落ちた・・・
さて、どうしたものか。

アドレスをダンプできないから、具体的なメモリ配置がよくわからないのがつらいところ。


以下情報源。

・ktrans配布元

http://basalt.cias.osakafu-u.ac.jp/plan9/s39.html

・ktrans辞書配布元

http://basalt.cias.osakafu-u.ac.jp/plan9/s17.html


・SKK辞書をktrans用に変換する方法

http://plan9er.hp.infoseek.co.jp/plan9/9log.html

・acme-sacにはktrans.bが付属している(日本語非対応)

http://code.google.com/p/acme-sac/

戯れにktrans.bをちょっと書き換えて、ローマ字→ひらがな
変換を試してみた。

漢字変換を早く実現したい。

なお、acme-sac付属のktrans.bをwindows xp上のhosted infernoに
持ってくることは可能だった。
一時ファイル/n/tempがなぜかcreate出来なかったので、
ひとまず一時ファイル名を書き換え(ソース埋め込み)。

使い方は、wm/wm起動前に、

% pipefile -r ktrans /dev/keyboard


として、キーボード入力にフィルターとして追加する。
(起動時設定をしたい場合は、先日の日記にあるように、profileに処理を書いておく)

※acme-sacはinfernoを学ぶ上で避けて通れないな。

2009年8月28日金曜日

Infernoのスタートアップスクリプト

スタートアップスクリプトはどこにあるのか?

1. /lib/sh/profile

ここにコードを置くと良いらしい。
acme-sacにはここに色々と書かれている。
ホストOSのファイルシステムのマウントも書かれていて参考になる。


wm/wm
とか書いておくと、emu起動時にwmが立ち上がる。

2. /usr/[user]/lib/profile

これも呼ばれるらしい?

3. emuの引数に追加する(hostedの場合)

emu /dis/sh -c 'スクリプト'

といった感じで、任意のコードを実行できるらしいが。

emu [コマンド]

もOK。例えばデーモンプログラムを実行するとか。
VMであることを意識せずに起動できる。

参考
http://osdir.com/ml/inferno.general/2005-02/msg00008.html

2009年8月8日土曜日

分散プログラミング

どう書く?のお題の分散関数呼び出しがちょうどぴったりだったので、
Limboで書いてみました。

分散関数呼び出し
http://ja.doukaku.org/comment/9449/

リンク先には説明を入れませんでしたが、次のような方針です

・サーバーでは仮想ファイル(synthetic file)を用意する。
 このファイルに対し、リードしたりライトすることで、処理を実行させることが出来る。
 (今回の例では数字をライトすると、整形した文字列がリードできる)

・クライアントではサーバーのファイルをマウントし、そのファイルに対し読み書きを行う。
 こうすることで、実際の演算はサーバー側で行われ、クライアントでは結果の収集のみが行える。

これは面白い。

ポイントは、
・#sをbindしなければならない。#sという特殊なシンボルをsynthetic fileを置こうとするディレクトリにbindする。
・sys->file2chanでsynthetic fileを生成する。
・file2chanは戻り値がFileIO型だが、そのread, writeというメソッドで、
 そのファイルに書き込みが行われたとき、あるいは読み込みが行われたときの
 処理を記述する。

その他わかったこと

・サーバーとクライアントの通信プロトコルはstyxと呼ばれ、mount サーバーホスト名 マウントポイント という処理を行えば、サーバーのネームスペースをクライアントの特定のディレクトリにマウントできるようだ。
・altというのはcaseと似ているが、数値ごとの処理わけを記述するのではなく、チャネルごとの処理わけを記述する。列挙したチャネルのどれかでイベントが発生したらブロックの中の処理に移行するが、それまでは待ち状態になる。(selectにあたる?)


alt{
<- channel1 =>
# channel1のイベントが発生した時の処理
<- channel2 =>
# channel2のイベントが発生したときの処理
}


Limbo/TkでGUIプログラムを書く場合、イベント待ちのループを書く必要があり(マウスのクリックとか)、その場合にaltを使うようだ。

・定数の記述はcon


変数名 : con 初期化データ;

2009年8月6日木曜日

Inferios

検索してもオフィシャルな情報が見つからなくてアレですが、
プレステ2のOSはInferiosというInfernoベースのものだという噂を目にしました。
そうだったのか。
CPUはMIPSらしい。ふーん。

PS3ってどうなんだろう。

分散プログラミング事始

Infernoは分散環境に強いと言われているのに、まったくやったことが無いのでした。

そこで、分散プログラミングを始めてみることにしました。
目標はリモートのプロセッサで任意のプログラムを実行し、実行結果を受け取るところに設定します。

参考としたのはこのURLです。

http://www.resc.rdg.ac.uk/twiki/bin/view/Resc/CallingRemoteServices

そのものずばりのことを示しています。
リモートで実行されているのか、ローカルで実行されているのかがよくわからなくなりそうなところを、うまく工夫されていてすばらしいです。

いまさら自分が追記するようなことは特に無いのですが、一応試したことを記録しておきます。

○まずはテスト

二台のinferno環境を用意し、ネットワークでつなぎます。
別のホストOSで動いているとわかりやすいです。
今回はリモートをLinux、ローカルをcygwinで実験しました。

・remote


svc/net
bind -a '#C' /


サービス立ち上げて、/cmdをバインド(ホストOSのコマンド実行のため)。

・local

bind -a '#C' /
mount [remoteホスト] /n/remote
bind -b /n/remote/cmd /cmd


mountでremoteホストにstyxで接続、remoteの/cmdを上書きで(?)バインド。
-bがポイント。

os uname を実行すると、remoteのOS名(Linux)が表示される!
なお、バインドする前はもちろんos unameを実行するとlocalのOS名(cygwin)が表示されます。

○file2chanの簡単なテスト

・remote

svc/net
cd /usr/user
load file2chan
file2chan oschan {} { os uname}


oschanという名前のsynthetic file ができるらしいが正直よくわからない。

echo rubbish > oschan
とかやると、remoteのOS名が表示される。
なんなんでしょうね?
(echoする文字列は別にrubbishじゃなくていいんですが)

・local

svc/net
mount remoteホスト /n/remote
cd /n/remote/usr/user


echo rubbish > oschan
とすると、remoteのプロンプトにremoteのos名が表示される。
不思議。

○limboでプログラミング

・・to be continued.

file2chanモジュールをロードしてごにょごにょするはず。

○疑問点

・いまだにunion directoryがよくわかっていない。

・bindを解除する方法は?

・認証を絡めるには?

2009年7月22日水曜日

meadow + alpaca.elのインストール

ご無沙汰です。
忙しくなりInfernoの研究は止まった状態です。
そろそろ再開の予定ではあります。
それまでinfernoに関係ない話題でつないでいこうかと思います。

alpaca.elという便利ソフトがあります。
.gpgという拡張子のファイルをpgp暗号化されているものと見なし、
ファイルを開くときに復号、保存のときに暗号するソフトです。
えらく便利。
各種ウェブサイトのログインパスワードの保存とかに使っています。

windows上でmeadow + alpaca.elする場合、なかなかインストールが面倒なので、
手順をまとめたいと思います。

1. cygwin, meadowのインストール

省略。
meadowはmeadowメモさんのパッケージがよさげです。
(http://www.bookshelf.jp/soft/meadow_8.html)

2. gpgのインストール

gpgのオフィシャルページからソースコードを持ってきてビルドします。
1.4系列のソースでなければならないようです。

tar jxvf gpg-1.4.x.bz2
cd gpg-1.4.x
./configure
make
make install

でOK。
(※configureのとき、--disable-nlsを付けろという記述がmeadowのwikiにアッたので、付けた方が良いかもしれません)

3. fakecygpty.exeのインストール

www.meadow.orgではmeadowのソースツリーのリポジトリを閲覧できます。
trunk/nt/fakecygpty.c
というソースコードを持ってきて、ビルドします。
gcc fakecygpty.c でOK(a.exeという名前のプログラムが生成)。
ファイル名が大事で、f_gpg.exeとしなければいけません。
a.exeをf_gpg.exeにリネームし、gpg.exeと同じところに置きます。
f_gpg.exeにパスを通し、meadowから実行できるようにしておきます。

gcc fakecygpty.c
cp a.exe /usr/local/bin/f_gpg.exe

4. alpaca.elのインストール

http://www.mew.org/~kazu/proj/cipher/en/
にalpaca.elがあるようです。
alpaca.elをダウンロードし、
meadowのインストールディレクトリの下のsite-lispの
中にコピーします。

5. meadowの設定

.emacsに
(autoload 'alpaca-after-find-file "alpaca" nil t)
(add-hook 'find-file-hooks 'alpaca-after-find-file)
(setq alpaca-program "f_gpg.exe")
と書きます。

以上。
あとは、拡張子.gpgのファイルをmeadowで新規に開いて編集し、
保存したらパスワードを聞かれることを確認します。