2011年3月8日火曜日

wikifs一部修正

メモ取り環境としてwikifsがいい感じです。Dropboxで共有することで、
各所で同じwikiにアクセスできます。

が、!で始まる行があるとputするたびに!のあとに空白がだんだんと増えていくようです。
これを抑制するのに、wiki.bを編集しビルドしなおしました。
場所は/appl/cmd/wikifs/wiki.b。


Wpre =>
if(inlist){
prefix = "";
inlist = 0;
}
if(inpara)
inpara = 0;
s = endlin(s, dosharp);
s += "! " + w.text + sharp;


とあるところの最終行、"! "となっており、空白がくっついています。
空白を取り除くと解消されました。

その他小技

行番号の表示。
行番号を表示するのは難しそうなので、
力業で行の先頭に行番号を挿入してやる。


Edit 0,$ |grep -n .*


こうすると行の頭に番号が振られる。

取り除くには、


Edit 0,$ s/^[0-9]+://g


とする。

選択範囲をパイプでコマンドに渡し、その結果で置換するには、
マウスで選択した後、| コマンド を実行するだけ。
たとえば、上で示したように、|grep を実行するとgrepの結果に置き換わる。

あと、困ったのが、HOST OSとのコピー/ペースト。
ペーストは問題無さそうだが、Acmeの文字列をsnarfすると、
ペーストするソフトによっては日本語が文字化けするっぽい。
ひとまず、クリップボード監視ソフトを使い、
クリップボードの内容を逐一テキストにダンプするようにし、
そのファイルをロードすることで日本語入りの文字列を取り出せるようにしておく。
ちょっと面倒だけどしょうがないか。

ちなみに、クリップボード監視ソフトのオススメは
!Mr.Clipboard
Windows7でも動いた。

2011年3月6日日曜日

Acme wikiでひらメソッド

wikiが安定して動いているようなので、wikiの利用を考える。

ひらメソッドが以前話題になっていたが、
今更手を出してみようかな。

カーネルのコードはC、アプリケーションはlimboで書かれている。
場合によってはシェルスクリプトもありそう。
コードを引用することが多発しそうなので、引用がしづらいと厳しい。

wikifsのルールでは引用は行頭に!が必要。
ブロックでの引用ができないのか・・・

そこで、簡単に引用できないか考えてみた。
置換を使うのがやりやすい。
引用するテキストを選択した状態で、


Edit s/^/!/g

これでOK。簡単。

wikifsの文法は、

・先頭行はwikiname(大文字小文字区別なし、スペース可)
・空行は段落
・*は箇条書き
・大文字の単語は見出し(日本語どうするんだ?)
・リンクは[タイトル|URL]
・!は引用

以上。潔い。
対応していない書式は多いが、いろいろ覚えるのも面倒なので、
このぐらいシンプルなほうがかえって良いかも。

さて、ページは関数ごと、ソースファイルごと、どの単位で分けるのが
よいのだろうか?

acmeでPOP3

この概要は表示できません。投稿を閲覧するには ここをクリック してください。

2011年3月5日土曜日

POP3でメール受信

TOEIC受験やらiPhoneアプリ開発やらで忙しくなってきたので手短に。

ようやくメールの送受信が何となくできました。
niftyのプロバイダメールで確認。

条件

・生のpop3 (apopではなく)
・smtp認証なし

ソフトウェア

・wm/readmail
・wm/sendmail

あらかじめndb/csを実行しておく。
readmailを立ち上げて、左端のconnectボタンを押し、
サーバー、アカウンと情報をいれる。
サーバー名はホスト名だけでOK。

新しいメールから一通ずつ表示される。
サマリー一覧は表示されないようだ。

メールを送信するときも同様。
ログイン名は@以下も必要とのこと。

日本語の入ったメールを受信すると文字化けしていた。
実用は遠い。

Acmeでのメール受信もやろうとしたが失敗。こっちが本命なんだけど。

ちなみにgmailはまだできていない。
TLSごしのPOPになるが、どうも認証エラーになる。

世の中にはnupasとかいうメールFSがあるようなのだけれど、
infernoにはまだないようだ。

2011年3月3日木曜日

wikifs + acme wiki

wikiを導入してみました。

参考: Inferno Wiki

すでにwikifsが組み込まれているacme-sacにて作業。

ローカルwiki

wikiの元になるディレクトリを用意。
空だとうまくいかなかったので、
このへん
から作成済みのディレクトリを持ってきた。

wikiディレクトリを/usr/USER/lib/wikiとして配置。


mount {wikifs -d $HOME/lib/wiki} /mnt/wiki

とする。
こうすると、/mnt/wikiにwikifsがマウントされる。
この状態でAcmeからアクセス可能。

acmeでWikiを記述し、中クリックするとWikiインターフェースが起動する。
カバーページがまず表示されるので、それを編集し、putすると更新される。
Newすると新規ページが作られる。
一行目にnameをつけてputするとその名前のページが作成される。
リンクは[名前]とする。
右クリックでジャンプ。

段落以外の改行はputの時に取り除かれるようだ。ちょっと面倒。

wikiをウェブで公開

wikiをウェブで公開可能。
/services/httpd/root/wikiディレクトリをつくっておく。
先程の/sys/lib/wikiの直下のファイルをそこに置いておこう(ウェブでwikiを編集するときに使われる)。


bind /mnt/wiki /services/httpd/root/wiki
svc/httpd/httpd &

とすると、wikiがhttp://ホスト/wiki というアドレスで参照可能となる。

ブラウザでアクセスするとカバーページが見える。
編集機能も使えるっぽいが、編集後のジャンプ先のページのURLがおかしいのと、
日本語が化ける問題がある。
ブラウザからは閲覧のみがよさそう。

ウェブ上のwikiをacmeで直接編集


ndb/cs
mount -9 tcp!plan9.bell-labs.com!wiki /mnt/wiki


とすると外部公開されているplan9のwikiがマウントできる。
編集はさすがに試していないが、ジャンプは可能だった。

自分で同じようなことをする場合は、


ndb/cs
listen -A tcp!*!wiki {export /mnt/wiki &}

とかするといいのかな?(公開するのは$HOME/lib/wikiじゃないよね?)

所感

なかなか使えそうなので使ってみよう。
分散してストアしたいが、それは今後の課題とする。
通常のhosted inferno、native infernoでもやってみる予定。

2011年2月27日日曜日

libinterp.aが見つからない

Native infernoをクロスビルドしようとすると、libinterp.aが見つからないと
言われることがある。
その対処法がなんとなくわかったのでメモ。

mkconfigを編集する。


SYSHOST=Linux
SYSTARG=Inferno
OBJTYPE=arm


などとする。
Linuxの上でarmのnative infernoをビルドする設定ね。


cd libinterp
mk install


とすると、Inferno/arm/libにライブラリがインストールされる。
なるほど。

2011年2月4日金曜日

Kuro-sheeva(sheevaplug)でInferno

どうしてもARMのNative Inferno環境が欲しくなったので、玄人志向のkuro sheevaを買ってしまいました。
コンパクトで非常にcoolです。

linuxにはそれほど興味はないので、いきなりinfernoを動かします。

○ビルド

過去の日記参照。
ビルド環境は、アットマークテクノで提供しているATDE3というVMware用のイメージを
つかわせてもらった。とても便利。

○シリアルの用意

windowsでつなぐことにした。
sheevaplugのサポートサイト?からドライバを持ってきてインストール。
kuro sheevaとUSBで接続すると、kurosheevaはUSBシリアルに見える。

なお、USBコントローラーはFTDIで、シリアルのブリッジをしている。
kuro sheevaがおかしくなったとしてもシリアルは無事の可能性が高い。
電源を切るとFTDIも落ちるのでちょっと不便だけど、こういった構成は今後も使われるであろう。

シリアルコンソールはteratermを使用した。
何でもいいんだけど。

○ubootでtftpブートの設定。

あらかじめPCではtftpを立ち上げておく。
poor tftp serverがとても良い感じ。
PCはIPアドレス192.168.12.12を割り当てておく。PCとkuro sheevaはEtherで直結。
ビルドでできたuisheeva.gzを持ってきて、
tftpのルートに置いておく。

kuro sheevaを立ち上げるとlinuxが立ち上がってしまう。
rootでログインし、shutdown -r nowでリブート。
hit any keyと言われるのでキー入力すると、ubootのコンソールに入れる。

そこで、

setenv ipaddr 192.168.12.11
setenv serverip 192.168.12.12
setenv bootfile uisheeva.gz
saveenv
tftpboot
bootm

とすると、一瞬でinfernoのシェルが現れる。


Inferno Fourth Edition (20101127)
Vita Nuova
conf sheeva (1293936724) jit 0

kirkwood 88F6281-A0

mvfeat 0x41410000
l2: on, ecc off, mode writethrough
icache on, 16kb, 4-way associative, 32 byte lines
dcache on, 16kb, 4-way associative, 32 byte lines
Initial Dis: "/osinit.dis"
sheevainit...
shell...
;


かっこ良すぎ。

○ネットワーク設定

はて、ネットワーク設定はどうやるのか?

/netrcというスクリプトを用意してくれていた。
dhcpもいけるようだが、今回は固定IPで試した。


sh /netrc


を実行するとstaticかdynamicか聞かれるので、staticと答える。
残念ながらIPは決め打ちになっていて、192.168.12.11が選ばれる。
このスクリプトをみると、ネットワーク設定の方法の参考になる。
マニュアルをみただけでは難しいのでありがたい。

設定を変えようにも、エディタがないので現時点では無理(不可能ではないけど面倒)。

○Telnetで接続

netrcに驚きの箇所が。


ndb/cs
listen -A net!*!telnet {sh -i >[2=1]} &


の一行でtelnetサーバーを立ち上げている。
listenの仕組みで即telnetができてしまうとは。
認証していないのでセキュリティ的にはアレですが。

○リモートファイルシステムをマウント

・kuro sheeva側


listen net!*!styx {export /&}


・PC側
Infernoを立ち上げる。


ndb/cs
mount -A net!192.168.12.11!styx /n/remote


これで設定をacmeで変えられる。

○今後

wikiサーバーでも立ち上げようかと思ったけど、HTTPdは入っていなかった。
その前に、ストレージはどこまで対応しているのだろうか。
wikifsを使った個人用wikiがほしい。
インターネットにさらすのは恐いが。