<?xml version="1.0" encoding="utf-8" ?>


<?xml-stylesheet href="http://d.hatena.ne.jp/oraccha/rssxsl" type="text/xsl" media="screen"?>


<rdf:RDF
	xmlns="http://purl.org/rss/1.0/"
	xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xml:lang="ja">
<channel rdf:about="http://d.hatena.ne.jp/oraccha/rss">
	<title>Plan9日記</title>
	<link>http://d.hatena.ne.jp/oraccha/</link>
	<description>Plan9日記</description>
	
	<dc:creator>oraccha</dc:creator>
	<dc:date>2010-01-30T02:19:42+09:00</dc:date>
	<items>
	<rdf:Seq>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/oraccha/20100130/1264785582"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/oraccha/20100129/1264777170"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/oraccha/20100128/1264624907"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/oraccha/20100128/1264620362"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/oraccha/20100126/1264452453"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/oraccha/20100123/1264183903"/>
		<rdf:li rdf:resource="http://d.hatena.ne.jp/oraccha/20100123/1264179283"/>
	</rdf:Seq>
	</items>
</channel>



<item rdf:about="http://d.hatena.ne.jp/oraccha/20100130/1264785582">
	<title>[TOPS-20] TECOエディタ</title>
	<link>http://d.hatena.ne.jp/oraccha/20100130/1264785582</link>
	<description> 前にTOPS-20に関係してTECO（Text Editor and Corrector）について触れた*1。@iratqqさんのつぶやきで知ったのだが、「本物のプログラマ」にはこんなことが書かれている。 本物のプログラマは``what you see is what you get’’なんて、テキストエディタと女については邪悪な</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>前にTOPS-20に関係してTECO（Text Editor and Corrector）について触れた<span class="footnote"><a href="/oraccha/#f1" name="fn1" title="OpenVMSにはいまでもTECOが付属するらしい。">*1</a></span>。@iratqqさんのつぶやきで知ったのだが、「<a href="http://www.geocities.co.jp/Milkyway-Orion/3324/prog/realprog.html" target="_blank">本物のプログラマ</a>」にはこんなことが書かれている。</p>
			<blockquote>
			<p>本物のプログラマは``what you see is what you get''なんて、テキストエディタと女については邪悪なコンセプトとしか考えていないのだ。いや、本物のプログラマがほしいのは、``頼んだら、やってくれる (you asked for it, you got it)'' そんなテキストエディタだ -- 複雑で、神秘的で、強力で、情け容赦なく、そして危険なエディタ。TECO は、そんな貴重なエディタだ。</p>
			<p>TECO のコマンドシークエンスは、可読テキストと言うよりは、むしろ送電線の輻射雑音に近いと言う観察が報告されている[4]。TECO でとても楽しめるゲームのひとつに、コマンドラインに自分の名前を入力して、何が起こるか当てる、と言うものがある。TECO と対話している間は、ほんのわずかのタイプミスでもプログラムはたいてい破壊されるし、もっと深刻なことも起こりうる -- 繊細かつ神秘的なバグが、それまで動いていたサブルーチンに混入するのだ。</p>
			<p>こうした理由から、本物のプログラマは一般にちゃんと動いているプログラムをいじるのを好まない。</p>
			</blockquote>
			<p><a href="http://en.wikipedia.org/wiki/Text_Editor_and_Corrector" target="_blank">Wikipedia</a>にはTECOマクロでBrainfuckインタプリタの例が載っているが、文字化けした何かにしか見えない。。。TECOもBarinfuckもチューリング完全という意味では似てるな。いやー、よくこれでEmacs書いたよなぁ。</p>
			<p>TECO関連の読み物としては、bitに掲載された「<a href="http://www.ueda.info.waseda.ac.jp/~ueda/readings/teco/bit.pdf" target="_blank">好々爺の部屋 (4) ― TECO</a>」ってのもある。</p>
			<div class="hatena-asin-detail">
  <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4938704269/hatena-hamazou-22/"><img src="http://d.hatena.ne.jp/images/hatena_aws.gif" class="hatena-asin-detail-image" alt="The Craft of Text Editing―手作りのテキストエディタ" title="The Craft of Text Editing―手作りのテキストエディタ"></a>
  <div class="hatena-asin-detail-info">
    <p class="hatena-asin-detail-title"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4938704269/hatena-hamazou-22/">The Craft of Text Editing―手作りのテキストエディタ</a></p>
    <ul>
      
      <li><span class="hatena-asin-detail-label">作者:</span> <a href="http://d.hatena.ne.jp/keyword/%a5%af%a5%ec%a5%a4%a5%b0%a1%a6A%2e%a5%d5%a5%a3%a5%f3%a5%bc%a5%b9" class="keyword">クレイグ・A.フィンゼス</a>,<a href="http://d.hatena.ne.jp/keyword/Craig%20A%2e%20Finseth" class="keyword">Craig A. Finseth</a>,<a href="http://d.hatena.ne.jp/keyword/%b4%e4%c3%ab%b9%a8" class="keyword">岩谷宏</a></li>
      
      <li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a href="http://d.hatena.ne.jp/keyword/%a5%d3%a5%ec%a5%c3%a5%b8%a5%bb%a5%f3%a5%bf%a1%bc%bd%d0%c8%c7%b6%c9" class="keyword">ビレッジセンター出版局</a></li>
      
      <li><span class="hatena-asin-detail-label">発売日:</span> 1994/04</li>
                                                      <li><span class="hatena-asin-detail-label">メディア:</span> 単行本</li>
      <li><span class="hatena-asin-detail-label">購入</span>: 1人 <span class="hatena-asin-detail-label">クリック</span>: 19回</li>
      <li><a href="http://d.hatena.ne.jp/asin/4938704269" target="_blank">この商品を含むブログ (2件) を見る</a></li>
    </ul>
  </div>
  <div class="hatena-asin-detail-foot"></div>
</div>

		</div>
		<div class="footnote">
			<p class="footnote"><a href="/oraccha/#fn1" name="f1">*1</a>：OpenVMSにはいまでもTECOが付属するらしい。</p>
		</div>
]]></content:encoded>
	<dc:creator>oraccha</dc:creator>
	<dc:date>2010-01-30T02:19:42+09:00</dc:date>
	<dc:subject>TOPS-20</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/oraccha/20100129/1264777170">
	<title> 玄柴（SheevaPlug）購入</title>
	<link>http://d.hatena.ne.jp/oraccha/20100129/1264777170</link>
	<description> 3月ごろにSheevaPlug/Plan 9ハッカソンがあるという噂があり、どうやって入手しようかなと思っていた矢先に、@naobsdさんから秋葉の店頭に玄柴が出ているという情報が！気がつくと机の上には黒いプラグが置いてありましたとさ。16800円なり。玄柴はオリジナルのSheevaPlugと</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>3月ごろにSheevaPlug/Plan 9ハッカソンがあるという噂があり、どうやって入手しようかなと思っていた矢先に、@naobsdさんから秋葉の店頭に玄柴が出ているという情報が！気がつくと机の上には黒いプラグが置いてありましたとさ。16800円なり。玄柴はオリジナルのSheevaPlugと比べるとeSATAが付いているところが違う。本家SheevaPlugは$99という値段もあって飛ぶように売れているようだ（需要に供給が追いついてない）。玄柴にはubuntu 9.04がインストールされているのだが、とりあえず動作確認するだけはしてみましたというのが今日のエントリ。</p>
			<p><a href="http://f.hatena.ne.jp/oraccha/20100129152212" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/images/fotolife/o/oraccha/20100129/20100129152212.jpg" alt="f:id:oraccha:20100129152212j:image" title="f:id:oraccha:20100129152212j:image" class="hatena-fotolife"></a></p>
			<p>（右は比較用のMagic Mouse）</p>
			<p>玄柴にはシリアルコンソールとJTAG用にminiUSBの口がある。FTDIのチップを使っているので、以前LS-HGLのエントリでMacOS X用のドライバをインストールしたが、それが使える。ただし、<a href="http://openplug.org/plugforum/index.php?topic=34.0" target="_blank">このページ</a>に書かれているように/System/Library/Extensions/FTDIUSBSerialDriver.kext/Contents/Info.plistに記述を追加する必要があった（ほぉ、プロダクトIDを追加するためにカーネルをリビルドする必要がない訳ね）。</p>
<pre>
--- Info.plist.ORIG	2010-01-29 15:51:44.000000000 +0900
+++ Info.plist	2010-01-29 15:55:12.000000000 +0900
@@ -6958,5 +6958,39 @@
 		&#60;key&#62;com.apple.kpi.mach&#60;/key&#62;
 		&#60;string&#62;8.0.0&#60;/string&#62;
 	&#60;/dict&#62;
+	&#60;key&#62;SheevaPlug JTAGKey FT2232D A&#60;/key&#62;
+	&#60;dict&#62;
+		&#60;key&#62;CFBundleIdentifier&#60;/key&#62;
+		&#60;string&#62;com.FTDI.driver.FTDIUSBSerialDriver&#60;/string&#62;
+		&#60;key&#62;IOClass&#60;/key&#62;
+		&#60;string&#62;FTDIUSBSerialDriver&#60;/string&#62;
+		&#60;key&#62;IOProviderClass&#60;/key&#62;
+		&#60;string&#62;IOUSBInterface&#60;/string&#62;
+		&#60;key&#62;bConfigurationValue&#60;/key&#62;
+		&#60;integer&#62;1&#60;/integer&#62;
+		&#60;key&#62;bInterfaceNumber&#60;/key&#62;
+		&#60;integer&#62;0&#60;/integer&#62;
+		&#60;key&#62;idProduct&#60;/key&#62;
+		&#60;integer&#62;40591&#60;/integer&#62;
+		&#60;key&#62;idVendor&#60;/key&#62;
+		&#60;integer&#62;40584&#60;/integer&#62;
+	&#60;/dict&#62;
+	&#60;key&#62;SheevaPlug JTAGKey FT2232D B&#60;/key&#62;
+	&#60;dict&#62;
+		&#60;key&#62;CFBundleIdentifier&#60;/key&#62;
+		&#60;string&#62;com.FTDI.driver.FTDIUSBSerialDriver&#60;/string&#62;
+		&#60;key&#62;IOClass&#60;/key&#62;
+		&#60;string&#62;FTDIUSBSerialDriver&#60;/string&#62;
+		&#60;key&#62;IOProviderClass&#60;/key&#62;
+		&#60;string&#62;IOUSBInterface&#60;/string&#62;
+		&#60;key&#62;bConfigurationValue&#60;/key&#62;
+		&#60;integer&#62;1&#60;/integer&#62;
+		&#60;key&#62;bInterfaceNumber&#60;/key&#62;
+		&#60;integer&#62;1&#60;/integer&#62;
+		&#60;key&#62;idProduct&#60;/key&#62;
+		&#60;integer&#62;40591&#60;/integer&#62;
+		&#60;key&#62;idVendor&#60;/key&#62;
+		&#60;integer&#62;40584&#60;/integer&#62;
+	&#60;/dict&#62;
 &#60;/dict&#62;
 &#60;/plist&#62;
</pre>

			<p>で、ドライバをリロードすればOK（ドライバがロードされていなければ、kextunloadは不要）。</p>
			<blockquote>
			<p>$ sudo touch /System/Library/Extensions</p>
			<p>$ sudo kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kext</p>
			<p>$ sudo kextload /System/Library/Extensions/FTDIUSBSerialDriver.kext</p>
			</blockquote>
			<p>これで/dev/tty.usbserial-XXXXAとBの二つのデバイスが見えるようになる。AはJTAG、Bはシリアルコンソール用なので、</p>
			<blockquote>
			<p>$ sudo screen /dev/tty.usbserial-XXXXB 115200</p>
			</blockquote>
			<p>でコンソールにつながる。</p>
			<p>ブートメッセージは<a href="http://gist.github.com/289542" target="_blank">この通り</a>。</p>
			<p>余談だが、SheevaPlugの次世代機<a href="http://www.globalscaletechnologies.com/t-guruplugdetails.aspx" target="_blank">GuruPlug</a>も発表されている。3ラインナップあって（Server Standard/Server PLUS/Display）、GuruPlug DisplayにはHDMIが付いている。あと、<a href="http://www.globalscaletechnologies.com/p-24-openrd-client-openrd-client-board-with-enclosure.aspx" target="_blank">OpenRD Client</a>とか。データセンタがらみの研究の一つのトレンドとして省電力で非力なwimpyノードをたくさん使ってMapReduce型処理の「ジュール／クエリ」を抑えるといういう話があるが、Atomみたいなx86系プロセッサと比較してARM系はどんな性能なんだろうか？</p>
			<p>さらに余談だが、Marvellの<a href="http://www.marvell.com/products/processors/embedded/kirkwood/" target="_blank">kirkwood</a>のラインナップを見ると、2コアとか2.0GHz駆動とかあるんだな。さらにARMADAプロセッサは4コアなんだとか。MarvellはIntelからXScaleの資産を買った会社であり、その前はNICベンダのSysKonnectを買収したりもしている。</p>
		</div>
]]></content:encoded>
	<dc:creator>oraccha</dc:creator>
	<dc:date>2010-01-29T23:59:30+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/oraccha/20100128/1264624907">
	<title> timeline: Twitter reader</title>
	<link>http://d.hatena.ne.jp/oraccha/20100128/1264624907</link>
	<description> ターミナルで動くTwitterクライアントというかリーダーを書いてみた。データの取得形式はJSONになっているので、Plan9portのsmugfsで使われているJSONパーザを使わせてもらった。クライアントで表示される部分はわずかだけど、結構なデータ量がやりとりされているのね。twee</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>ターミナルで動くTwitterクライアントというかリーダーを書いてみた。データの取得形式はJSONになっているので、Plan9portのsmugfsで使われているJSONパーザを使わせてもらった。クライアントで表示される部分はわずかだけど、結構なデータ量がやりとりされているのね。tweetごとにユーザプロファイルとか。</p>
			<p>本当はHTTP通信部分も自分で書こうと思ったのだが（webfsもよいかもしれない）、hgetを呼び出すだけになっている。</p>
			<p>なんだかVMWare Fusion上だとsleep(2)が正確に動いてないか<span class="footnote"><a href="/oraccha/#f1" name="fn1" title="2.xも3.xも同じくダメだった。@masami256さんによるとKVMは問題ないとのこと。">*1</a></span>。タイマ割込みの仮想化がうまくいってないのかな。3倍以上の速度で進んであっという間にAPIを使い果たしてしまった。。。</p>
			<p>とりあえずソースはgithubにさらしておく。</p>
			<p><a href="http://f.hatena.ne.jp/oraccha/20100128053736" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/images/fotolife/o/oraccha/20100128/20100128053736.png" alt="f:id:oraccha:20100128053736p:image" title="f:id:oraccha:20100128053736p:image" class="hatena-fotolife"></a></p>
			<p>（追記）<a href="http://mirtchovski.com/p9/irc/" target="_blank">IRCクライアント</a>が存在するので、IRC経由でTwitterを使うというのもありかもしれない。</p>
			<p>（追記：2010-01-29）webfs経由に書き換えた。初版ではsystem(3)モドキの関数を作ってhgetを実行していた。</p>
<pre class="syntax-highlight">
<span class="synType">int</span>
fetch(<span class="synType">char</span> *file)
{
	<span class="synType">int</span> pid, p[<span class="synConstant">2</span>], f;
	<span class="synType">int</span> nr, nw;
	<span class="synType">char</span> buf[<span class="synConstant">1024</span>];
	<span class="synType">char</span> cmd[<span class="synConstant">64</span>];
 
	<span class="synStatement">if</span>(lastid)
		sprint(cmd, <span class="synConstant">&#34;hget '</span><span class="synSpecial">%s</span><span class="synConstant">?since_id=</span><span class="synSpecial">%lld</span><span class="synConstant">'&#34;</span>, HOME_TIMELINE_URL, lastid + <span class="synConstant">1</span>);
	<span class="synStatement">else</span>
		sprint(cmd, <span class="synConstant">&#34;hget </span><span class="synSpecial">%s</span><span class="synConstant">&#34;</span>, HOME_TIMELINE_URL);
 
	<span class="synStatement">if</span>(pipe(p) &#60; <span class="synConstant">0</span>)
		sysfatal(<span class="synConstant">&#34;pipe: %r&#34;</span>);
 
	<span class="synStatement">switch</span>(pid = fork()){
	<span class="synStatement">case</span> -<span class="synConstant">1</span>:
		sysfatal(<span class="synConstant">&#34;fork: %r&#34;</span>);
	<span class="synStatement">case</span> <span class="synConstant">0</span>:
		close(p[<span class="synConstant">0</span>]);
		dup(p[<span class="synConstant">1</span>], <span class="synConstant">1</span>);
		execl(<span class="synConstant">&#34;/bin/rc&#34;</span>, <span class="synConstant">&#34;rc&#34;</span>, <span class="synConstant">&#34;-c&#34;</span>, cmd, nil);
	<span class="synStatement">default</span>:
		close(p[<span class="synConstant">1</span>]);
 
		sprint(file, <span class="synConstant">&#34;/tmp/tweet.</span><span class="synSpecial">%d</span><span class="synConstant">&#34;</span>, pid);
		f = create(file, OWRITE, <span class="synPreProc">0</span><span class="synConstant">666</span>);
		<span class="synStatement">if</span>(f &#60; <span class="synConstant">0</span>)
			sysfatal(<span class="synConstant">&#34;open: %r&#34;</span>);
 
		<span class="synStatement">while</span>((nr = read(p[<span class="synConstant">0</span>], buf, <span class="synStatement">sizeof</span>(buf))) &#62; <span class="synConstant">0</span>){
			nw = write(f, buf, nr);
			<span class="synStatement">if</span>(nw &#60; <span class="synConstant">0</span>)
				sysfatal(<span class="synConstant">&#34;write: %r&#34;</span>);
		}
		<span class="synStatement">if</span>(nr &#60; <span class="synConstant">0</span>)
			sysfatal(<span class="synConstant">&#34;read: %r&#34;</span>);
 
		close(f);
		close(p[<span class="synConstant">0</span>]);
	}
 
	<span class="synStatement">return</span> <span class="synConstant">0</span>;
}
</pre>

			<p>で、webfs版はこんな感じになる。cloneファイルをopenしてctlファイルに"url <a href="http://..." target="_blank">http://...</a>"を書き込むと、n/bodyをreadすることでページが取得できる。ただしBASIC認証時にhgetのようにパスワードを入力するインタフェースを作っていないので、あらかじめfactotumにパスワードを登録する必要がある。</p>
<pre class="syntax-highlight">
<span class="synType">int</span>
fetch(<span class="synType">char</span> *file)
{
	<span class="synType">int</span> ctlfd, conn, fd, newfd;
	<span class="synType">int</span> nr, nw;
	<span class="synType">char</span> buf[<span class="synConstant">1024</span>];
	<span class="synType">char</span> url[<span class="synConstant">128</span>];

	<span class="synStatement">if</span>(lastid)
		sprint(url, <span class="synConstant">&#34;</span><span class="synSpecial">%s</span><span class="synConstant">?since_id=</span><span class="synSpecial">%lld</span><span class="synConstant">&#34;</span>, HOME_TIMELINE_URL, lastid + <span class="synConstant">1</span>);
	<span class="synStatement">else</span>
		sprint(url, <span class="synConstant">&#34;</span><span class="synSpecial">%s</span><span class="synConstant">&#34;</span>, HOME_TIMELINE_URL);

	ctlfd = open(<span class="synConstant">&#34;/mnt/web/clone&#34;</span>, ORDWR);
	<span class="synStatement">if</span>(ctlfd &#60; <span class="synConstant">0</span>)
		sysfatal(<span class="synConstant">&#34;open /mnt/web/clone: %r&#34;</span>);
	nr = read(ctlfd, buf, <span class="synStatement">sizeof</span>(buf));
	<span class="synStatement">if</span>(nr &#60; <span class="synConstant">0</span>)
		sysfatal(<span class="synConstant">&#34;read: %r&#34;</span>);
	<span class="synStatement">if</span>(nr == <span class="synConstant">0</span>)
		sysfatal(<span class="synConstant">&#34;read clone failed&#34;</span>);
	buf[nr] = <span class="synConstant">0</span>;
	conn = atoi(buf);

	<span class="synStatement">if</span>(fprint(ctlfd, <span class="synConstant">&#34;url </span><span class="synSpecial">%s</span><span class="synConstant">&#34;</span>, url) &#60;= <span class="synConstant">0</span>)
		sysfatal(<span class="synConstant">&#34;write ctl failed 'url </span><span class="synSpecial">%s</span><span class="synConstant">': %r&#34;</span>, url);

	snprint(buf, <span class="synStatement">sizeof</span>(buf), <span class="synConstant">&#34;/mnt/web/</span><span class="synSpecial">%d</span><span class="synConstant">/body&#34;</span>, conn);
	fd = open(buf, OREAD);
	<span class="synStatement">if</span>(fd &#60; <span class="synConstant">0</span>)
		sysfatal(<span class="synConstant">&#34;open </span><span class="synSpecial">%s</span><span class="synConstant">: %r&#34;</span>, buf);

	sprint(file, <span class="synConstant">&#34;/tmp/tweet.</span><span class="synSpecial">%d</span><span class="synConstant">&#34;</span>, conn);
	newfd = create(file, OWRITE, <span class="synPreProc">0</span><span class="synConstant">666</span>);
	<span class="synStatement">if</span>(newfd &#60; <span class="synConstant">0</span>)
		sysfatal(<span class="synConstant">&#34;create </span><span class="synSpecial">%s</span><span class="synConstant">: %r&#34;</span>, file);

	<span class="synStatement">while</span>((nr = read(fd, buf, <span class="synStatement">sizeof</span>(buf))) &#62; <span class="synConstant">0</span>){
		nw = write(newfd, buf, nr);
		<span class="synStatement">if</span>(nw &#60; <span class="synConstant">0</span>)
			sysfatal(<span class="synConstant">&#34;write: %r&#34;</span>);
	}
	<span class="synStatement">if</span>(nr &#60; <span class="synConstant">0</span>)
		sysfatal(<span class="synConstant">&#34;read: %r&#34;</span>);

	close(newfd);
	close(fd);

	<span class="synStatement">return</span> <span class="synConstant">0</span>;
}
</pre>

			<p>で、hgetのコードを見ながら、パスワード追加のコードを追加。たぶんこれでOK。auth_getuserpasswd関数はユーザ／パスワードの組を取得するものだが、第一引数にauth_getkey関数を指定すると、ユーザにパスワード問い合わせるようになる。</p>
<pre class="syntax-highlight">
<span class="synPreProc">#include </span><span class="synConstant">&#60;auth.h&#62;</span>

<span class="synPreProc">#define TWITTER_SERVER </span><span class="synConstant">&#34;api.twitter.com&#34;</span>
<span class="synPreProc">#define TWITTER_REALM </span><span class="synConstant">&#34;Twitter API&#34;</span>

<span class="synType">void</span>
initauth()
{
	UserPasswd *up;

	up = auth_getuserpasswd(auth_getkey, <span class="synConstant">&#34;proto=pass service=http server=%q realm=%q&#34;</span>, TWITTER_SERVER, TWITTER_REALM);
	<span class="synStatement">if</span>(up == nil)
		sysfatal(<span class="synConstant">&#34;auth_getuserpasswd: %r&#34;</span>);
}
</pre>

		</div>
		<div class="footnote">
			<p class="footnote"><a href="/oraccha/#fn1" name="f1">*1</a>：2.xも3.xも同じくダメだった。@masami256さんによるとKVMは問題ないとのこと。</p>
		</div>
]]></content:encoded>
	<dc:creator>oraccha</dc:creator>
	<dc:date>2010-01-28T05:41:47+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/oraccha/20100128/1264620362">
	<title> abaco: Webブラウザ</title>
	<link>http://d.hatena.ne.jp/oraccha/20100128/1264620362</link>
	<description> 「Plan 9にはWebブラウザがないうんぬん」というつぶやきを見て思い出したが（そういえば前のTIP9UGで言ってたな）、標準ディストリビューションにabacoが入っている。acmeライクなインタフェースを持つブラウザである。最近のWebブラウザはタブベースだけど、abacoはタイリ</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>「Plan 9にはWebブラウザがないうんぬん」というつぶやきを見て思い出したが（そういえば前のTIP9UGで言ってたな）、標準ディストリビューションにabacoが入っている。acmeライクなインタフェースを持つブラウザである。最近のWebブラウザはタブベースだけど、abacoはタイリングウィンドウ方式である<span class="footnote"><a href="/oraccha/#f1" name="fn1" title="Operaにもタイリングモードがあるらしい。">*1</a></span>。</p>
			<p>今時のファンシーな機能な期待できないし、レンダリングもいまいちだけど、Twitterで遊ぶぐらいの日本語の表示、フォームへの入力には問題ない。</p>
			<p><a href="http://f.hatena.ne.jp/oraccha/20100128042025" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/images/fotolife/o/oraccha/20100128/20100128042025.png" alt="f:id:oraccha:20100128042025p:image" title="f:id:oraccha:20100128042025p:image" class="hatena-fotolife"></a></p>
			<p>内部的にはwebfsとwebcookiesを使っているので、こんな感じで起動する。</p>
			<blockquote>
			<p>% touch $home/lib/webcookies  # 最初の一回必要</p>
			<p>% webfs</p>
			<p>% abaco</p>
			</blockquote>
		</div>
		<div class="footnote">
			<p class="footnote"><a href="/oraccha/#fn1" name="f1">*1</a>：Operaにもタイリングモードがあるらしい。</p>
		</div>
]]></content:encoded>
	<dc:creator>oraccha</dc:creator>
	<dc:date>2010-01-28T04:26:02+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/oraccha/20100126/1264452453">
	<title> NetBSD@LinkStationでPlan9portを動かす（その３）</title>
	<link>http://d.hatena.ne.jp/oraccha/20100126/1264452453</link>
	<description> X周りも動くか見てみたいので、LOCAL.configを削除して再ビルド。 準備 とその前に今度はMercurialを使うことにする。普通にpkg_add mercurialをしたらdependencyでインストールされるpython25のところでコケてしまったので、こんな感じにしてみた（きっともっといいやり方</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>X周りも動くか見てみたいので、LOCAL.configを削除して再ビルド。</p>
			<h4> 準備</h4>
			<p>とその前に今度はMercurialを使うことにする。普通にpkg_add mercurialをしたらdependencyでインストールされるpython25のところでコケてしまったので、こんな感じにしてみた（きっともっといいやり方はあるはず）。</p>
			<blockquote>
			<p>$ sudo pkg_add python26</p>
			<p>$ sudo ln -s /usr/pkg/bin/python26 /usr/pkg/bin/python</p>
			<p>$ sudo pkg_add -f mercurial</p>
			</blockquote>
			<p>あとSSHでX11 forwardingするために/etc/ssh/sshd_configの以下の設定を追加した。「X11UseLocalhost no」がないと"X11 connection rejected because of wrong authentication."とエラーになった（最初これがわからなかった）。</p>
			<blockquote>
			<p>X11Forwarding yes</p>
			<p>XAuthLocation /usr/X11R7/bin/xauth</p>
			<p>X11UseLocalhost no</p>
			</blockquote>
			<h4> acme</h4>
			<p>とここまで来ればあとはビルドが終わるのを待つだけ。とここまで来て思ったがNetBSDにもPlan9portのパッケージがあるのでは？クロスビルドする方が圧倒的に早いよね。</p>
			<p>ちゃんとacmeや9termも動くことを確認した。</p>
			<blockquote>
			<p>$ SHELL=rc acme</p>
			</blockquote>
			<p><a href="http://f.hatena.ne.jp/oraccha/20100126100956" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/images/fotolife/o/oraccha/20100126/20100126100956.png" alt="f:id:oraccha:20100126100956p:image" title="f:id:oraccha:20100126100956p:image" class="hatena-fotolife"></a></p>
			<p>ここまでの<a href="http://github.com/oraccha/Plan-9-Playground/blob/master/plan9port.netbsd-evbarm.patch" target="_blank">パッチ</a>はgithubに置いた。</p>
		</div>
]]></content:encoded>
	<dc:creator>oraccha</dc:creator>
	<dc:date>2010-01-26T05:47:33+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/oraccha/20100123/1264183903">
	<title>ARMクロスコンパイル環境</title>
	<link>http://d.hatena.ne.jp/oraccha/20100123/1264183903</link>
	<description> いつか使う日のためにメモしておく。 まずARMマシン用のクロスコンパイラを生成する。386用のコマンド名は8?だったけど、ARM用は5?になる。 % cd /sys/src/cmd % for(i in 5?) @{ cd $i; mk clean; objtype=$cputype mk install; mk clean } % lc /bin/5? 5a 5c 5i 5l コン</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>いつか使う日のためにメモしておく。</p>
			<p>まずARMマシン用のクロスコンパイラを生成する。386用のコマンド名は8?だったけど、ARM用は5?になる。</p>
			<blockquote>
			<p>% cd /sys/src/cmd</p>
			<p>% for(i in 5?) @{ cd $i; mk clean; objtype=$cputype mk install; mk clean }</p>
			<p>% lc /bin/5?</p>
			<p>5a	5c	5i	5l</p>
			</blockquote>
			<p>コンパイルはあっという間に終わる。続いて、</p>
			<blockquote>
			<p>% cd /sys/src</p>
			<p>% objtype=arm mk install</p>
			</blockquote>
			<p>で、システム一式が/arm以下にインストールされる。</p>
			<p>けど、なんかunvacのinstallに失敗している。なぜかcmd/unvacディレクトリがからっぽだな。とりあえず無視して深追いしない。</p>
			<blockquote>
			<p>:</p>
			<p>mk unvac</p>
			<p>mk: don't know how to make 'install' in directory /sys/src/cmd/unvac</p>
			<p>mk: for(i in 1a ...  : exit status=rc 7957: rc 18096: mk 18098: error</p>
			<p>mk: test -e 8._cp ...  : exit status=rc 6819: mk 7945: error</p>
			<p>mk: date for (i ...  : exit status=rc 613: rc 6806: mk 6807: error</p>
			</blockquote>
			<p>これでクロスコンパイルできるようになる。まぁ、実行するすべがないけど。</p>
			<blockquote>
			<p>% 5c hello.c</p>
			<p>% 5l hello.5</p>
			<p>% file 5.out</p>
			<p>5.out: arm plan 9 executable</p>
			<p>% 5.out</p>
			<p>5.out: exec header invalid</p>
			</blockquote>
			<p>参考までにSheevaPlug用のカーネルをコンパイルする方法は次の通り。</p>
			<blockquote>
			<p>% cd /sys/src/9/kw</p>
			<p>% mk 'CONF=plug'</p>
			<p>    :</p>
			<p>% file s9plug</p>
			<p>s9plug: ARM plan 9 boot image</p>
			<p>% file 9plug</p>
			<p>9plug: binary</p>
			</blockquote>
			<p>U-bootからのブート方法はbooting(8)に書かれている通りで、tftpコマンドで9plugを0x800000番地にロードして、go 0x800000すればよい<span class="footnote"><a href="/oraccha/#f1" name="fn1" title="U-bootイメージ形式にする必要はない。">*1</a></span>。</p>
			<p>SheevaPlugと言えば<a href="http://code.google.com/p/inferno-kirkwood/" target="_blank">inferno-kirkwood</a>ってプロジェクトができていた。</p>
		</div>
		<div class="footnote">
			<p class="footnote"><a href="/oraccha/#fn1" name="f1">*1</a>：U-bootイメージ形式にする必要はない。</p>
		</div>
]]></content:encoded>
	<dc:creator>oraccha</dc:creator>
	<dc:date>2010-01-23T03:11:43+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/oraccha/20100123/1264179283">
	<title> LS-HGLのネットワーク性能</title>
	<link>http://d.hatena.ne.jp/oraccha/20100123/1264179283</link>
	<description> LS-HGLがどのくらいのネットワーク性能が出るものか、Plan9port上でベンチマークを作って試してみた。 コードはgithubに置いたdialperfってやつ。ネイティブのPlan 9と違って、dialの第3、4引数をnull以外に設定するとエラーになる。 結果は次の通り（単位はMB/s）。MacBook</description>

	<content:encoded><![CDATA[
		<div class="section">
			<p>LS-HGLがどのくらいのネットワーク性能が出るものか、Plan9port上でベンチマークを作って試してみた。</p>
			<p>コードはgithubに置いた<a href="http://github.com/oraccha/Plan-9-Playground" target="_blank">dialperf</a>ってやつ。ネイティブのPlan 9と違って、dialの第3、4引数をnull以外に設定するとエラーになる。</p>
			<p>結果は次の通り（単位はMB/s）。MacBook AirはSnow leopardが動いている。</p>
			<blockquote>
			<p>length LS-&#62;MBA MBA-&#62;LS</p>
			<p>1024 5.086 7.874</p>
			<p>2048 7.382 8.440</p>
			<p>4096 8.118 9.211</p>
			<p>8192 10.250 9.934</p>
			<p>16384 11.619 10.976</p>
			<p>32768 10.321 11.267</p>
			<p>65536 10.634 11.110</p>
			<p>131072 10.333 11.486</p>
			<p>262144 10.426 11.421</p>
			<p>524288 10.330 11.342</p>
			<p>1048576 10.340 11.188</p>
			</blockquote>
			<p>ん、GbEなのに90 Mbps前後しか出ていないぞ、と思ったらApple純正のUSB Ethernetアダプタは100Base-Tだった。それならば納得の性能か。</p>
			<p>ではと別のLinuxマシンからiperfしてみたら、さらに悪くて60 Mbpsしか出ない。何か設定が悪いのかな？</p>
		</div>
]]></content:encoded>
	<dc:creator>oraccha</dc:creator>
	<dc:date>2010-01-23T01:54:43+09:00</dc:date>
</item>
</rdf:RDF>
