<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="rss.css" type="text/css"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="ja-JP">
	<channel rdf:about="http://ikejima.org/diary/index.rdf">
	<title>IKeJI diary</title>
	<link>http://ikejima.org/diary/</link>
	<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/" />
	<description></description>
	<dc:creator>ikejiIKeJI</dc:creator>
	<dc:rights>Copyright 2012 ikejiIKeJI &lt;e@ikejima.org&gt;, copyright of comments by respective authors</dc:rights>
	<items><rdf:Seq>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20120104#p02"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20120104#p01"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111214#p01"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111213#p01"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111210#p01"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111208#p01"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111207#p01"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111206#p01"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111101#p01"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111030#p01"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111010#p02"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111010#p01"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111008#p01"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111006#p01"/>
<rdf:li rdf:resource="http://ikejima.org/diary/?date=20111003#p02"/>
</rdf:Seq></items>
</channel>
<item rdf:about="http://ikejima.org/diary/?date=20120104#p02">
<link>http://ikejima.org/diary/?date=20120104#p02</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20120104#p02" />
<dc:date>2012-01-05T01:00:56+09:00</dc:date>
<title>ガジェット2011</title>
<dc:creator>ikejiIKeJI</dc:creator>
<dc:subject>ガジェット</dc:subject>
<description>今、Byflowをみなおしてたら、驚く事にほとんど買ってない!偉いぞ俺。リスト: http://www.byflow.com/user/ikeji?tag=%E3%82%AC%E3%82%B8%E3%82%A7%E3%83%83%E3%83%882011 ストレージ強化速度は遅くてもいいけど容量が必要な感じのストレージ用にUSB-HDDを10TBほど追加。RaidZ運用http://kuroutoshikou.com/modules/display/?iid=1194 ケースはこれ。バルクのHDDを通販で買ったのはこれがはじめてかもしれん。 モバギロイド某後輩から購入。買わないわけにはいくまい。まだ、あまり活用できてない。NP2を動かしてPC-98モドキとして使うのが幸せだったりする。のか？ オールドゲームブーム秋葉と通販を駆使して、ゲームボーイポケットとワンダースワンを購入。ワンダースワン(初代)の電池のもちぐあいに感動! STMマイコンARMやらんとな、という事ではじめたい。まあ、買ったのはこれだけど。まだ、とりあえず開発環境を構築しだだけ、続きはまたこんど。来年はもっといろい..</description>
<content:encoded><![CDATA[<h3>ガジェット2011</h3><p><br />今、Byflowをみなおしてたら、驚く事にほとんど買ってない!<br />偉いぞ俺。<br />リスト: <a href="http://www.byflow.com/user/ikeji?tag=%E3%82%AC%E3%82%B8%E3%82%A7%E3%83%83%E3%83%882011" class="outlink" rel="nofollow">http://www.byflow.com/user/ikeji?tag=%E3%82%AC%E3%82%B8%E3%82%A7%E3%83%83%E3%83%882011</a><br /></p><h3> ストレージ強化</h3><p>速度は遅くてもいいけど容量が必要な感じのストレージ用にUSB-HDDを10TBほど追加。RaidZ運用<br /><a href="http://kuroutoshikou.com/modules/display/?iid=1194" class="outlink" rel="nofollow">http://kuroutoshikou.com/modules/display/?iid=1194</a> ケースはこれ。<br />バルクのHDDを通販で買ったのはこれがはじめてかもしれん。<br /></p><h3> モバギロイド</h3><p>某後輩から購入。買わないわけにはいくまい。<br />まだ、あまり活用できてない。<br />NP2を動かしてPC-98モドキとして使うのが幸せだったりする。のか？<br /></p><h3> オールドゲームブーム</h3><p>秋葉と通販を駆使して、ゲームボーイポケットとワンダースワンを購入。<br />ワンダースワン(初代)の電池のもちぐあいに感動!<br /></p><h3> STMマイコン</h3><p>ARMやらんとな、という事ではじめたい。<br />まあ、買ったのは<a href="http://akizukidenshi.com/catalog/g/gM-03457/" class="outlink" rel="nofollow">これ</a>だけど。<br />まだ、とりあえず開発環境を構築しだだけ、続きはまたこんど。<br /><br />来年はもっといろいろ買いたい。</p>
<p><a href="http://ikejima.org/diary/?date=20120104#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20120104#p01">
<link>http://ikejima.org/diary/?date=20120104#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20120104#p01" />
<dc:date>2012-01-04T14:32:20+09:00</dc:date>
<title>大掃除メモ</title>
<dc:creator>ikejiIKeJI</dc:creator>
<dc:subject>テク</dc:subject>
<description>vmware esxi サーバーマシンを変えようと、HDDだけ取り外して別のマシンにつないだらハマった。 macアドレスが変IPアドレス重複警告がでて、何じゃらほい、と思ったら、とりかえたマシンと元のマシンでIPアドレスが重複してた。esxiサーバーのコンソールに表示されるmacアドレスと、外にパケットが飛んでいく時に使われるmacアドレスが違ってる上に、実際には古いマシンのNICのアドレスが使われてる。sshでesxiに入って、/etc/vmware/esx.confを書き換える。/net/pnic/child[0000]/mac = 00:ac:de:ad:be:ef /net/pnic/child[0000]/virtualMac = 00:ac:de:ad:be:ef という二行を書き換えた。 サスペンドして移動したら何もできないVMのインスタンスをサスペンド状態にして、移動したら、何もできなくなってこまった。CPUが違うから復帰もできないし、終了もできない。こっちもsshでログインして、まず、# vim-cmd vmsvc/getallvmsで、vmid(数字)を知る。#..</description>
<content:encoded><![CDATA[<h3>大掃除メモ</h3><p></p><h3>vmware esxi サーバー</h3><p>マシンを変えようと、HDDだけ取り外して別のマシンにつないだらハマった。<br /></p><h4> macアドレスが変</h4><p>IPアドレス重複警告がでて、何じゃらほい、と思ったら、とりかえたマシンと元のマシンでIPアドレスが重複してた。<br />esxiサーバーのコンソールに表示されるmacアドレスと、外にパケットが飛んでいく時に使われるmacアドレスが違ってる上に、実際には古いマシンのNICのアドレスが使われてる。<br />sshでesxiに入って、/etc/vmware/esx.confを書き換える。</p><pre>/net/pnic/child[0000]/mac = &quot;00:ac:de:ad:be:ef&quot;
/net/pnic/child[0000]/virtualMac = &quot;00:ac:de:ad:be:ef&quot;
</pre><p>という二行を書き換えた。<br /></p><h4> サスペンドして移動したら何もできない</h4><p>VMのインスタンスをサスペンド状態にして、移動したら、何もできなくなってこまった。<br />CPUが違うから復帰もできないし、終了もできない。<br /><br />こっちもsshでログインして、<br />まず、</p><pre># vim-cmd vmsvc/getallvms</pre><p>で、vmid(数字)を知る。</p><pre># vim-cmd vmsvc/unregister {vmid}</pre><p>で、そのvmを管理対象から外す<br />viで、vmを編集して</p><pre># vi /vmfs/volumes/datastore1/{vmname}/{vmname}.vmx</pre><p>checkpoint.vmStateを空にする。</p><pre>checkpoint.vmState = &quot;&quot;</pre><p>また、管理対象にして、</p><pre># vim-cmd solo/registervm /vmfs/volumes/datastore1/{vmname}/{vmname}.vmx</pre><p>でおk<br /></p><h4> テラタワーが認識されない</h4><p>古いしねー<br /><br />家にあった金メッキしてある高そうなUSBケーブルにしたら認識された。謎</p>
<p><a href="http://ikejima.org/diary/?date=20120104#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111214#p01">
<link>http://ikejima.org/diary/?date=20111214#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111214#p01" />
<dc:date>2011-12-15T00:31:26+09:00</dc:date>
<title>SRUのエラー表示がクソな件について</title>
<dc:creator>ikejiIKeJI</dc:creator>
<dc:subject>SRU</dc:subject>
<description>1年ぶりぐらいに自作の言語でプログラムを書いていたら、文法エラーの表示がイマイチなのに気がついた。f = {|a,b,3|  hoge()} みたいなコードを書いてしまった時(3つ目の仮引数名が数字)、できればその場所を指摘して欲しいのだが、[utils.cc:114] x = {|a,b,3|   hoge(); fuga(); } [utils.cc:117]   ^ [interpreter.cc:152] Parse error: End of src not found. というようなエラーがでる。 背景SRUはPackrat Parsingをするのだが、エラー表示をどうやったら良いかわからなかったので、なるべく先の方までパースできたのを使っている。例えば、flow_statement ← if_statement / while_statement if_statement ← if expression then ... while_statement ← while .... という文法にif true some_statement # forgot then とい..</description>
<content:encoded><![CDATA[<h3>SRUのエラー表示がクソな件について</h3><p>1年ぶりぐらいに自作の言語でプログラムを書いていたら、文法エラーの表示がイマイチなのに気がついた。<br /></p><pre>f = {|a,b,3|  hoge()}
</pre><p>みたいなコードを書いてしまった時(3つ目の仮引数名が数字)、できればその場所を指摘して欲しいのだが、</p><pre>[utils.cc:114] x = {|a,b,3|   hoge(); fuga(); }
[utils.cc:117]   ^
[interpreter.cc:152] Parse error: End of src not found.
</pre><p>というようなエラーがでる。<br /></p><h3> 背景</h3><p><span class="autolink"><a href="http://ikejima.org/SRU/">SRU</a></span>は<a href="http://ja.wikipedia.org/wiki/%E8%A7%A3%E6%9E%90%E8%A1%A8%E7%8F%BE%E6%96%87%E6%B3%95" class="outlink" rel="nofollow">Packrat Parsing</a>をするのだが、エラー表示をどうやったら良いかわからなかったので、なるべく先の方までパースできたのを使っている。<br />例えば、</p><pre>flow_statement ← if_statement / while_statement
if_statement ← &quot;if&quot; expression &quot;then&quot; ...
while_statement ← &quot;while&quot; ....
</pre><p>という文法に</p><pre>if true some_statement # forgot &quot;then&quot;
</pre><p>という入力を渡すと、<br />flow_statementにある/の両側は、それぞれ「9文字目でthenが見付からなかった」、「1文字目でwhileが見つからなかった」というエラーを起こすので、前者を採用してバックトラックする。<br /><br />しかし、頭で書いた例の場合、</p><pre>statement ← ( let_statement / flow_statement ) eos
let_statement ← flow_statement &quot;=&quot; flow_statement
</pre><p>という感じの文法定義になっているので、<br />1. let_statementに入る。<br />2. 左辺値&quot;f&quot;をflow_statementがパース<br />3. fの後ろの&quot;=&quot;がlet_statement内の&quot;=&quot;にマッチ<br />4. 右辺値をflow_statementがパースしようとして途中でエラー<br />5. バックトラックしてlet_statementを抜ける<br />6. flow_statementの&quot;/&quot;の後ろ側のflow_statementとして&quot;f&quot;を取り出す。<br />7. statement全体としては成功したので&quot;/&quot;の前側のエラーメッセージは捨てる<br />8. うしろに余計な文字があるので &quot;)&quot; の後ろでエラー<br />しかし、エラーは既に破棄されている。<br /></p><h3> 案1</h3><p>とりあえず、statementの定義を</p><pre>statement ← ( let_statement / flow_statement !&quot;=&quot;) eos
</pre><p>という風にしてみると、少し改善される。</p><pre>[utils.cc:114] x = {|a,b,3|   hoge(); fuga(); }
[utils.cc:117]      ^
[interpreter.cc:152] Parse error: } not found.
</pre><p>まだもうちょっと。<br /></p><h3> 案2</h3><p>案1で解決しない部分は省略可能部、もしくは、任意回の繰り返しの中でおこりえる。<br />なぜなら、それらの中で起こったエラーがその節ごと不要にできるので無視されてしまうからだ。<br />無視できないようにするために、<a href="http://www.cs.tsukuba.ac.jp/H19Syuron/200620989.pdf" class="outlink" rel="nofollow">誰かの修論</a>を参考にカット演算子を入れてやればいい気がする。<br /><br />まだ、試してみてないけど、メモのために。</p>
<p><a href="http://ikejima.org/diary/?date=20111214#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111213#p01">
<link>http://ikejima.org/diary/?date=20111213#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111213#p01" />
<dc:date>2011-12-14T02:14:43+09:00</dc:date>
<title>jython</title>
<dc:creator>ikejiIKeJI</dc:creator>
<dc:subject>JVMスクリプト処理系探訪</dc:subject>
<description>ParserantlrObjectPyObject? - PyType? - 自作hashmapInvokeinvokeVirtualJIT ow2 asm% cat hoge.py def taky(x,y,z):   if x = y:     return y   else:     return taky(taky(x-1,y,z), taky(y-1,z,x), taky(z-1,x,y)) print(taky(14,8,0)) % java -jar jython.jar hoge.py 14 ------------------------------------------------------------- Job Name. :java -jar jython.jar hoge.py Elapsed Time. :133.91s (User: 126.91s, Kernel: 4.60s, CPU Usage: 98%) ------------------------------------------------------------- ちなみに% p..</description>
<content:encoded><![CDATA[<h3>jython</h3><p></p><dl class="def"><dt>Parser</dt><dd>antlr</dd><dt>Object</dt><dd><span style=".notfound">PyObject<a href="http://ikejima.org/PyObject/">?</a></span> -&gt; <span style=".notfound">PyType<a href="http://ikejima.org/PyType/">?</a></span> -&gt; 自作hashmap</dd><dt>Invoke</dt><dd>invokeVirtual</dd><dt>JIT</dt><dd> ow2 asm</dd></dl><p></p><pre>% cat hoge.py
def taky(x,y,z):
  if x &lt;= y:
    return y
  else:
    return taky(taky(x-1,y,z), taky(y-1,z,x), taky(z-1,x,y))
print(taky(14,8,0))
% java -jar jython.jar hoge.py
14
-------------------------------------------------------------
Job Name. :java -jar jython.jar hoge.py
Elapsed Time. :133.91s
(User: 126.91s, Kernel: 4.60s, CPU Usage: 98%)
-------------------------------------------------------------
</pre><p>ちなみに</p><pre>% python hoge.py
14
-------------------------------------------------------------
Job Name. :python hoge.py
Elapsed Time. :199.98s
(User: 196.78s, Kernel: 0.28s, CPU Usage: 98%)
-------------------------------------------------------------
</pre><p>jruby/rubyとの差が興味深い</p>
<p><a href="http://ikejima.org/diary/?date=20111213#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111210#p01">
<link>http://ikejima.org/diary/?date=20111210#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111210#p01" />
<dc:date>2011-12-11T00:15:40+09:00</dc:date>
<title>JRuby</title>
<dc:creator>ikejiIKeJI</dc:creator>
<dc:subject>JVMスクリプト処理系探訪</dc:subject>
<description>http://jruby.org/ある意味佳境Parser jayObject [String] - lookup class - [cachestr, method] - lookup in super classInvoke invokeVirtualJIT ow2asmシンボルのハッシュをキャッシュする意味はあんまないのかね。MRIがyaccだからjayになるのはしかたない。% cat hoge.rb def taky(x,y,z)   if(x = y)     y   else     taky(taky(x-1,y,z), taky(y-1,z,x),taky(z-1,x,y))   end end puts(taky(14,8,0)) % ./jruby hoge.rb 14 ------------------------------------------------------------- Job Name. :./jruby hoge.rb Elapsed Time. :28.03s (User: 26.83s, Kernel: 0.37s, CPU Usa..</description>
<content:encoded><![CDATA[<h3>JRuby</h3><p><a href="http://jruby.org/" class="outlink" rel="nofollow">http://jruby.org/</a><br /><br />ある意味佳境<br /></p><dl class="def"><dt>Parser</dt><dd> <a href="http://www.informatik.uni-osnabrueck.de/alumni/bernd/jay/" class="outlink" rel="nofollow">jay</a></dd><dt>Object</dt><dd> [String] -&gt; lookup class -&gt; [cache<span class="">&lt;str, method&gt;] -&gt; lookup in super class</span></dd><dt>Invoke</dt><dd> invokeVirtual</dd><dt>JIT</dt><dd> ow2asm</dd></dl><p><br />シンボルのハッシュをキャッシュする意味はあんまないのかね。<br />MRIがyaccだからjayになるのはしかたない。<br /></p><pre>% cat hoge.rb
def taky(x,y,z)
  if(x &lt;= y)
    y
  else
    taky(taky(x-1,y,z), taky(y-1,z,x),taky(z-1,x,y))
  end
end
puts(taky(14,8,0))
% ./jruby hoge.rb
14
-------------------------------------------------------------
Job Name. :./jruby hoge.rb
Elapsed Time. :28.03s
(User: 26.83s, Kernel: 0.37s, CPU Usage: 97%)
-------------------------------------------------------------
</pre><p><br />ちなみに</p><pre>% ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin10.0]
% ruby hoge.rb
14
-------------------------------------------------------------
Job Name. :ruby hoge.rb
Elapsed Time. :450.82s
(User: 435.24s, Kernel: 1.32s, CPU Usage: 96%)
-------------------------------------------------------------
</pre><p></p><h3> Continationの実装がヒドイ</h3><p><a href="https://github.com/jruby/jruby/blob/master/src/org/jruby/RubyContinuation.java#L101" class="outlink" rel="nofollow">https://github.com/jruby/jruby/blob/master/src/org/jruby/RubyContinuation.java#L101</a><br />&gt; throw continuation;<br />えーえーえーえー<br /></p><pre>% cat callcc.rb
callcc{|c|
  p 1
  c.call(nil)
  p 2
}

first = true
x = callcc{|c| c}
p 3
if(first)
  p 4
  first = false
  x.call(x)
end
p 5
% ruby callcc.rb 
1
3
4
3
5
% ./jruby callcc.rb
1
3
4
LocalJumpError: continuations can not be called from outside their scope
    call at org/jruby/RubyContinuation.java:97
  (root) at callcc.rb:13
</pre>
<p><a href="http://ikejima.org/diary/?date=20111210#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111208#p01">
<link>http://ikejima.org/diary/?date=20111208#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111208#p01" />
<dc:date>2011-12-09T02:21:20+09:00</dc:date>
<title>ObjectScript</title>
<dc:creator>ikejiIKeJI</dc:creator>
<dc:subject>JVMスクリプト処理系探訪</dc:subject>
<description>http://objectscript.sourceforge.net/ObjectScript?も結構昔からありそう。ParserJavaCC + JTBObject [String] - Global symbol table - [symbol id] - InObjectMap? - [index] - OArray - [value]Invoke ValueにあるcallAsFunction?をinvokeVirtualJITApache BCELJTBはJTreeよりは良さげ。% cat hoge.os function taky(x,y,z){   if(x = y){     return y;   } else {     return taky(taky(x-1,y,z), taky(y-1,z,x),taky(z-1,x,y));   } } writeln(taky(14,8,0)); % java -jar oscript.jar hoge.os 14 ----------------------------------------------------..</description>
<content:encoded><![CDATA[<h3>ObjectScript</h3><p><a href="http://objectscript.sourceforge.net/" class="outlink" rel="nofollow">http://objectscript.sourceforge.net/</a><br /><span style=".notfound">ObjectScript<a href="http://ikejima.org/ObjectScript/">?</a></span>も結構昔からありそう。<br /></p><dl class="def"><dt>Parser</dt><dd>JavaCC + JTB</dd><dt>Object</dt><dd> [String] -&gt; Global symbol table -&gt; [symbol id] -&gt; <span style=".notfound">InObjectMap<a href="http://ikejima.org/InObjectMap/">?</a></span> -&gt; [index] -&gt; OArray -&gt; [value]</dd><dt>Invoke</dt><dd> Valueにあるcall<span style=".notfound">AsFunction<a href="http://ikejima.org/AsFunction/">?</a></span>をinvokeVirtual</dd><dt>JIT</dt><dd><span class="autolink"><a href="http://ikejima.org/Apache/">Apache</a></span> BCEL</dd></dl><p><br />JTBはJTreeよりは良さげ。</p><pre>% cat hoge.os
function taky(x,y,z){
  if(x &lt;= y){
    return y;
  } else {
    return taky(taky(x-1,y,z), taky(y-1,z,x),taky(z-1,x,y));
  }
}
writeln(taky(14,8,0));
% java -jar oscript.jar hoge.os
14
-------------------------------------------------------------
Job Name. :java -jar oscript.jar hoge.os
Elapsed Time. :167.16s
(User: 159.01s, Kernel: 0.80s, CPU Usage: 95%)
-------------------------------------------------------------
</pre>
<p><a href="http://ikejima.org/diary/?date=20111208#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111207#p01">
<link>http://ikejima.org/diary/?date=20111207#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111207#p01" />
<dc:date>2011-12-08T00:58:49+09:00</dc:date>
<title>Pnuts</title>
<dc:creator>ikejiIKeJI</dc:creator>
<dc:subject>JVMスクリプト処理系探訪</dc:subject>
<description>古くからあるJVMスクリプト処理系http://java.net/projects/pnutsサイトは大破。mavenからダウンロードできるとkmizuに聞いた。http://download.java.net/maven/2/pnuts/pnuts/1.2/pnuts-1.2.jarParserjavacc + jtreeObjectContextというのが、自前実装のhash table.Invoke関数はCallableインターフェスを持つように実装されていてinvokeVirtualJIT自前のコード生成クラスがある自前のコード生成クラスがかっこいい。% cat hoge.pnut function taky(x,y,z){   if(x = y){     return y;   } else {     return taky(taky(x-1,y,z), taky(y-1,z,x),taky(z-1,x,y));   } } System.out.println(taky(14,8,0).toString()) % LC_ALL=ja_JP.SJIS luit jav..</description>
<content:encoded><![CDATA[<h3>Pnuts</h3><p>古くからあるJVMスクリプト処理系<br /><a href="http://java.net/projects/pnuts" class="outlink" rel="nofollow">http://java.net/projects/pnuts</a><br />サイトは大破。mavenからダウンロードできるとkmizuに聞いた。<br /><a href="http://download.java.net/maven/2/pnuts/pnuts/1.2/pnuts-1.2.jar" class="outlink" rel="nofollow">http://download.java.net/maven/2/pnuts/pnuts/1.2/pnuts-1.2.jar</a><br /></p><dl class="def"><dt>Parser</dt><dd>javacc + jtree</dd><dt>Object</dt><dd>Contextというのが、自前実装のhash table.</dd><dt>Invoke</dt><dd>関数はCallableインターフェスを持つように実装されていてinvokeVirtual</dd><dt>JIT</dt><dd>自前のコード生成クラスがある</dd></dl><p><br />自前のコード生成クラスがかっこいい。<br /></p><pre>% cat hoge.pnut
function taky(x,y,z){
  if(x &lt;= y){
    return y;
  } else {
    return taky(taky(x-1,y,z), taky(y-1,z,x),taky(z-1,x,y));
  }
}
System.out.println(taky(14,8,0).toString())
% LC_ALL=ja_JP.SJIS luit java -cp pnuts-1.2.jar pnuts.tools.Main hoge.pnut
14
-------------------------------------------------------------
Job Name. :LC_ALL=ja_JP.SJIS luit java -cp pnuts-1.2.jar pnuts.tools.Main hoge.pnut
Elapsed Time. :20.09s
(User: 19.94s, Kernel: 0.51s, CPU Usage: 101%)
-------------------------------------------------------------
</pre>
<p><a href="http://ikejima.org/diary/?date=20111207#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111206#p01">
<link>http://ikejima.org/diary/?date=20111206#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111206#p01" />
<dc:date>2011-12-07T01:49:51+09:00</dc:date>
<title>Dyn.js</title>
<dc:creator>ikejiIKeJI</dc:creator>
<dc:subject>JVMスクリプト処理系探訪</dc:subject>
<description>http://dynjs.org/Java7に入ったinvokeDynamic命令を使いたいがために作られたJS処理系ParserANTLRObjectjava.util.HashMap?InvokeinvokeDynamicJITjitescripthttps://github.com/dynjs/dynjs/blob/master/dynjs/src/main/java/org/dynjs/parser/statement/CallStatement.javaとかを見ると、本当にinvokeDynamicに意味あるのか心配になる、、、、% cat hoge.js function taky(x,y,z){   if(x = y){     return y;   } else {     return taky(taky(x-1,y,z), taky(y-1,z,x),taky(z-1,x,y));   } } print(taky(14,8,0)) % java -jar dynjs-all.jar hoge.js (中略) 14.0 --------------------..</description>
<content:encoded><![CDATA[<h3>Dyn.js</h3><p><a href="http://dynjs.org/" class="outlink" rel="nofollow">http://dynjs.org/</a><br /><br />Java7に入ったinvokeDynamic命令を使いたいがために作られたJS処理系<br /></p><dl class="def"><dt>Parser</dt><dd>ANTLR</dd><dt>Object</dt><dd>java.util.<span style=".notfound">HashMap<a href="http://ikejima.org/HashMap/">?</a></span></dd><dt>Invoke</dt><dd><a href="https://github.com/dynjs/dynjs/blob/master/dynjs/src/main/java/org/dynjs/parser/statement/CallStatement.java" class="outlink" rel="nofollow">invokeDynamic</a></dd><dt>JIT</dt><dd><a href="https://github.com/qmx/jitescript" class="outlink" rel="nofollow">jitescript</a></dd></dl><p><br /><a href="https://github.com/dynjs/dynjs/blob/master/dynjs/src/main/java/org/dynjs/parser/statement/CallStatement.java" class="outlink" rel="nofollow">https://github.com/dynjs/dynjs/blob/master/dynjs/src/main/java/org/dynjs/parser/statement/CallStatement.java</a><br />とかを見ると、本当にinvokeDynamicに意味あるのか心配になる、、、、<br /></p><pre>% cat hoge.js
function taky(x,y,z){
  if(x &lt;= y){
    return y;
  } else {
    return taky(taky(x-1,y,z), taky(y-1,z,x),taky(z-1,x,y));
  }
}
print(taky(14,8,0))
% java -jar dynjs-all.jar hoge.js
(中略)
14.0
-------------------------------------------------------------
Job Name. :java -jar dynjs-all.jar hoge.js
Elapsed Time. :17.96s
(User: 17.61s, Kernel: 0.65s, CPU Usage: 101%)
-------------------------------------------------------------
</pre><p><br />kmizuに「JVM上で動くスクリプト言語を10個あげろ」と行ったら、pnuts, objectscript, jruby, jython, groovy, clojure, fantom, sisc, <span style=".notfound">BeanShell<a href="http://ikejima.org/BeanShell/">?</a></span>, Rhino が出てきたのでこれらも調べたい(願望)</p>
<p><a href="http://ikejima.org/diary/?date=20111206#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111101#p01">
<link>http://ikejima.org/diary/?date=20111101#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111101#p01" />
<dc:date>2011-11-02T00:57:06+09:00</dc:date>
<title>前回から11ヶ月今回は遅刻せずに済ん..</title>
<dc:creator>ikejiIKeJI</dc:creator>
<dc:subject>初出社</dc:subject>
<description>前回から11ヶ月今回は遅刻せずに済んだ。だいぶ痩せたので、また太らないように気をつけます。</description>
<content:encoded><![CDATA[<h3></h3><p><a href="http://ikejima.org/diary/?date=20101201" class="outlink" rel="nofollow">前回</a>から11ヶ月<br />今回は遅刻せずに済んだ。<br /><br />だいぶ痩せたので、また太らないように気をつけます。</p>
<p><a href="http://ikejima.org/diary/?date=20111101#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111030#p01">
<link>http://ikejima.org/diary/?date=20111030#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111030#p01" />
<dc:date>2011-10-31T04:55:27+09:00</dc:date>
<title>Chatservice</title>
<dc:creator>ikejiIKeJI</dc:creator>
<description>シンプルなテキストチャットを作ろうと思って適当に作ってみました。http://chat.ikeji.ma/Comet的な事をしています。たぶん、ログを見る複数のルームプライベートなルームクライアントアプリ友達帳からの招待などはすぐには実装されません。</description>
<content:encoded><![CDATA[<h3>Chatservice</h3><p>シンプルなテキストチャットを作ろうと思って適当に作ってみました。<br /><a href="http://chat.ikeji.ma/" class="outlink" rel="nofollow">http://chat.ikeji.ma/</a><br /><br />Comet的な事をしています。<br />たぶん、</p><ul><li>ログを見る</li><li>複数のルーム</li><li>プライベートなルーム</li><li>クライアントアプリ</li><li>友達帳からの招待</li></ul><p>などはすぐには実装されません。</p>
<p><a href="http://ikejima.org/diary/?date=20111030#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111010#p02">
<link>http://ikejima.org/diary/?date=20111010#p02</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111010#p02" />
<dc:date>2011-10-11T00:53:28+09:00</dc:date>
<title>AutoLink</title>
<dc:creator>ikejiIKeJI</dc:creator>
<dc:subject>tDiary</dc:subject>
<description>AutoLink?と手動のリンクが同じデザインなのが気にいらないので、スタイルシートをいじる。設定画面からいじれればいいのに。/theme/base.css.autolink A {   text-decoration: none !important;   border-width: 0px !important;   border-bottom-width: 1px !important;   border-style: dotted !important;   color: black; }</description>
<content:encoded><![CDATA[<h3>AutoLink</h3><p><span style=".notfound">AutoLink<a href="http://ikejima.org/AutoLink/">?</a></span>と手動のリンクが同じデザインなのが気にいらないので、スタイルシートをいじる。<br />設定画面からいじれればいいのに。</p><div class="code"><div class="filename">/theme/base.css</div><pre>.autolink A {
  text-decoration: none !important;
  border-width: 0px !important;
  border-bottom-width: 1px !important;
  border-style: dotted !important;
  color: black;
}
</pre></div>
<p><a href="http://ikejima.org/diary/?date=20111010#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111010#p01">
<link>http://ikejima.org/diary/?date=20111010#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111010#p01" />
<dc:date>2011-10-11T00:40:03+09:00</dc:date>
<title>Unite-scriptを非同期にする</title>
<dc:creator>ikejiIKeJI</dc:creator>
<dc:subject>vim</dc:subject>
<description>vimで作業中に音楽を聞くのに、unite.vim,unite-scriptとunite-scriptについてくるサンプルのitunes制御スクリプトのセットを使ってるんだけど、曲数が増えると、unite.vimを開くのが遅くなる問題がある。5000曲ぐらいリストにあると20秒ぐらいかかるみたい。この状態だと、unite.vimを他の事に使うのも厳しくなるので、こいつにひっぱられないように、unite-scriptを非同期化した。ーパッチvimのsystem関数は多分Cのsystem関数を呼んでるだろう、とあたりをつけて、コマンドを呼ぶ時に、( {呼びたいコマンド}  {一時ファイル} ; echo OK  {一時ファイル2} ) という形にして、一時ファイル2が作られるのを待ってから結果を取る。とりあえず、Macでは動いた。Unix(というかsystem関数が呼ぶシェルが)上の形式をサポートしてたら動くと思う。Windowsのcmd.exeもが;の代わりに使って、startコマンドか、rundll32 kernel32.dll,CreateProcess?的な事をすれば同じ事がで..</description>
<content:encoded><![CDATA[<h3>Unite-scriptを非同期にする</h3><p><span class="autolink"><a href="http://ikejima.org/vim/">vim</a></span>で作業中に音楽を聞くのに、<br /><a href="https://github.com/Shougo/unite.vim" class="outlink" rel="nofollow">unite.vim</a>,<a href="https://github.com/hakobe/unite-script" class="outlink" rel="nofollow">unite-script</a>とunite-scriptについてくるサンプルのitunes制御スクリプトのセットを使ってるんだけど、<br />曲数が増えると、unite.<span class="autolink"><a href="http://ikejima.org/vim/">vim</a></span>を開くのが遅くなる問題がある。<br />5000曲ぐらいリストにあると20秒ぐらいかかるみたい。<br />この状態だと、unite.<span class="autolink"><a href="http://ikejima.org/vim/">vim</a></span>を他の事に使うのも厳しくなるので、こいつにひっぱられないように、<br />unite-scriptを非同期化した。ー&gt;<a href="https://github.com/ikeji/unite-script/commit/c5303b7bd8007fa8c7e2a7eee2eb268e12714d66" class="outlink" rel="nofollow">パッチ</a><br /><br /><span class="autolink"><a href="http://ikejima.org/vim/">vim</a></span>のsystem関数は多分Cのsystem関数を呼んでるだろう、とあたりをつけて、<br />コマンドを呼ぶ時に、</p><pre>( {呼びたいコマンド} &gt; {一時ファイル} ; echo OK &gt; {一時ファイル2} )&amp;
</pre><p>という形にして、<br />一時ファイル2が作られるのを待ってから結果を取る。<br /><br />とりあえず、Macでは動いた。Unix(というかsystem関数が呼ぶシェルが)上の形式をサポートしてたら動くと思う。<br /><br />Windowsのcmd.exeも&amp;が;の代わりに使って、startコマンドか、&quot;rundll32 kernel32.dll,<span style=".notfound">CreateProcess<a href="http://ikejima.org/CreateProcess/">?</a></span>&quot;的な事をすれば同じ事ができると思うけど、試してない。<br /><br />どっかにこういうのをやってくれるラッパーがあったりしないかな?</p>
<p><a href="http://ikejima.org/diary/?date=20111010#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111008#p01">
<link>http://ikejima.org/diary/?date=20111008#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111008#p01" />
<dc:date>2011-10-09T01:04:38+09:00</dc:date>
<title>Asyncronized</title>
<dc:creator>ikejiIKeJI</dc:creator>
<description>spellチェッカがエラーを出すと思ったら、オタ用語なのね。http://www.amelia.ne.jp/user/reading/essay_284.jsp</description>
<content:encoded><![CDATA[<h3>Asyncronized</h3><p>spellチェッカがエラーを出すと思ったら、オタ用語なのね。<br /><a href="http://www.amelia.ne.jp/user/reading/essay_284.jsp" class="outlink" rel="nofollow">http://www.amelia.ne.jp/user/reading/essay_284.jsp</a></p>
<p><a href="http://ikejima.org/diary/?date=20111008#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111006#p01">
<link>http://ikejima.org/diary/?date=20111006#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111006#p01" />
<dc:date>2011-10-07T00:29:16+09:00</dc:date>
<title>追悼</title>
<dc:creator>ikejiIKeJI</dc:creator>
<description>いつか倒してやろうと思ってたんだけど、残念です。いや、別に後からでも勝てるんだけど。</description>
<content:encoded><![CDATA[<h3>追悼</h3><p>いつか倒してやろうと思ってたんだけど、残念です。<br />いや、別に後からでも勝てるんだけど。</p>
<p><a href="http://ikejima.org/diary/?date=20111006#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://ikejima.org/diary/?date=20111003#p02">
<link>http://ikejima.org/diary/?date=20111003#p02</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://ikejima.org/diary/?date=20111003#p02" />
<dc:date>2011-10-04T00:20:56+09:00</dc:date>
<title>Classが作りたい</title>
<dc:creator>ikejiIKeJI</dc:creator>
<description>JavaでClassを作りたいJavassistASMSerpApache Commons BCEL™あたりが有名らしい。Javassistが一番日本語で参照してるページが多いみたい。千葉先生作Clojureはどうしてるかというと、gen-classマクロは、generate-class関数を呼んでて、これはASMライブラリそのものっぽい。2007年にコピーして、それを使ってるっぽい。</description>
<content:encoded><![CDATA[<h3>Classが作りたい</h3><p>JavaでClassを作りたい<br /><br /><a href="http://www.csg.is.titech.ac.jp/~chiba/javassist/" class="outlink" rel="nofollow">Javassist</a><br /><a href="http://asm.ow2.org/" class="outlink" rel="nofollow">ASM</a><br /><a href="http://serp.sourceforge.net/" class="outlink" rel="nofollow">Serp</a><br /><a href="http://commons.apache.org/bcel/" class="outlink" rel="nofollow">Apache Commons BCEL™</a><br />あたりが有名らしい。<br /><br />Javassistが一番日本語で参照してるページが多いみたい。千葉先生作<br /><br />Clojureはどうしてるかというと、<br /><a href="https://github.com/clojure/clojure/blob/9146b490dacb321a852c975af6ba11e794c737b8/src/clj/clojure/genclass.clj#L492" class="outlink" rel="nofollow">gen-classマクロ</a>は、<br /><a href="https://github.com/clojure/clojure/blob/9146b490dacb321a852c975af6ba11e794c737b8/src/clj/clojure/genclass.clj#L111" class="outlink" rel="nofollow">generate-class関数</a>を呼んでて、<br />これはASMライブラリそのものっぽい。<br />2007年にコピーして、それを使ってるっぽい。</p>
<p><a href="http://ikejima.org/diary/?date=20111003#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
</rdf:RDF>

