トップ 追記

IKeJI diary

2003|06|07|08|
2007|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|04|08|09|10|
2010|01|10|11|12|
2011|02|03|04|07|09|10|11|12|
2012|01|

2012-01-04 [長年日記]

_ [テク]大掃除メモ

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(数字)を知る。

# vim-cmd vmsvc/unregister {vmid}

で、そのvmを管理対象から外す
viで、vmを編集して

# vi /vmfs/volumes/datastore1/{vmname}/{vmname}.vmx

checkpoint.vmStateを空にする。

checkpoint.vmState = ""

また、管理対象にして、

# vim-cmd solo/registervm /vmfs/volumes/datastore1/{vmname}/{vmname}.vmx

でおk

テラタワーが認識されない

古いしねー

家にあった金メッキしてある高そうなUSBケーブルにしたら認識された。謎

_ [ガジェット]ガジェット2011


今、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やらんとな、という事ではじめたい。
まあ、買ったのはこれだけど。
まだ、とりあえず開発環境を構築しだだけ、続きはまたこんど。

来年はもっといろいろ買いたい。


2011-12-14 [長年日記]

_ [SRU]SRUのエラー表示がクソな件について

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.

というようなエラーがでる。

背景

SRUPackrat Parsingをするのだが、エラー表示をどうやったら良いかわからなかったので、なるべく先の方までパースできたのを使っている。
例えば、

flow_statement ← if_statement / while_statement
if_statement ← "if" expression "then" ...
while_statement ← "while" ....

という文法に

if true some_statement # forgot "then"

という入力を渡すと、
flow_statementにある/の両側は、それぞれ「9文字目でthenが見付からなかった」、「1文字目でwhileが見つからなかった」というエラーを起こすので、前者を採用してバックトラックする。

しかし、頭で書いた例の場合、

statement ← ( let_statement / flow_statement ) eos
let_statement ← flow_statement "=" flow_statement

という感じの文法定義になっているので、
1. let_statementに入る。
2. 左辺値"f"をflow_statementがパース
3. fの後ろの"="がlet_statement内の"="にマッチ
4. 右辺値をflow_statementがパースしようとして途中でエラー
5. バックトラックしてlet_statementを抜ける
6. flow_statementの"/"の後ろ側のflow_statementとして"f"を取り出す。
7. statement全体としては成功したので"/"の前側のエラーメッセージは捨てる
8. うしろに余計な文字があるので ")" の後ろでエラー
しかし、エラーは既に破棄されている。

案1

とりあえず、statementの定義を

statement ← ( let_statement / flow_statement !"=") eos

という風にしてみると、少し改善される。

[utils.cc:114] x = {|a,b,3|   hoge(); fuga(); }
[utils.cc:117]      ^
[interpreter.cc:152] Parse error: } not found.

まだもうちょっと。

案2

案1で解決しない部分は省略可能部、もしくは、任意回の繰り返しの中でおこりえる。
なぜなら、それらの中で起こったエラーがその節ごと不要にできるので無視されてしまうからだ。
無視できないようにするために、誰かの修論を参考にカット演算子を入れてやればいい気がする。

まだ、試してみてないけど、メモのために。


2011-12-13 [長年日記]

_ [JVMスクリプト処理系探訪]jython

Parser
antlr
Object
PyObject? -> PyType? -> 自作hashmap
Invoke
invokeVirtual
JIT
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%)
-------------------------------------------------------------

ちなみに

% python hoge.py
14
-------------------------------------------------------------
Job Name. :python hoge.py
Elapsed Time. :199.98s
(User: 196.78s, Kernel: 0.28s, CPU Usage: 98%)
-------------------------------------------------------------

jruby/rubyとの差が興味深い


2011-12-10 [長年日記]

_ [JVMスクリプト処理系探訪]JRuby

http://jruby.org/

ある意味佳境

Parser
jay
Object
[String] -> lookup class -> [cache<str, method>] -> lookup in super class
Invoke
invokeVirtual
JIT
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 Usage: 97%)
-------------------------------------------------------------


ちなみに

% 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%)
-------------------------------------------------------------

Continationの実装がヒドイ

https://github.com/jruby/jruby/blob/master/src/org/jruby/RubyContinuation.java#L101
> throw continuation;
えーえーえーえー

% 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

2011-12-08 [長年日記]

_ [JVMスクリプト処理系探訪] ObjectScript

http://objectscript.sourceforge.net/
ObjectScript?も結構昔からありそう。

Parser
JavaCC + JTB
Object
[String] -> Global symbol table -> [symbol id] -> InObjectMap? -> [index] -> OArray -> [value]
Invoke
ValueにあるcallAsFunction?をinvokeVirtual
JIT
Apache BCEL


JTBは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
-------------------------------------------------------------
Job Name. :java -jar oscript.jar hoge.os
Elapsed Time. :167.16s
(User: 159.01s, Kernel: 0.80s, CPU Usage: 95%)
-------------------------------------------------------------

2011-12-07 [長年日記]

_ [JVMスクリプト処理系探訪]Pnuts

古くからあるJVMスクリプト処理系
http://java.net/projects/pnuts
サイトは大破。mavenからダウンロードできるとkmizuに聞いた。
http://download.java.net/maven/2/pnuts/pnuts/1.2/pnuts-1.2.jar

Parser
javacc + jtree
Object
Contextというのが、自前実装のhash table.
Invoke
関数はCallableインターフェスを持つように実装されていてinvokeVirtual
JIT
自前のコード生成クラスがある


自前のコード生成クラスがかっこいい。

% 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 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%)
-------------------------------------------------------------

2011-12-06 [長年日記]

_ [JVMスクリプト処理系探訪] Dyn.js

http://dynjs.org/

Java7に入ったinvokeDynamic命令を使いたいがために作られたJS処理系

Parser
ANTLR
Object
java.util.HashMap?
Invoke
invokeDynamic
JIT
jitescript


https://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
-------------------------------------------------------------
Job Name. :java -jar dynjs-all.jar hoge.js
Elapsed Time. :17.96s
(User: 17.61s, Kernel: 0.65s, CPU Usage: 101%)
-------------------------------------------------------------


kmizuに「JVM上で動くスクリプト言語を10個あげろ」と行ったら、pnuts, objectscript, jruby, jython, groovy, clojure, fantom, sisc, BeanShell?, Rhino が出てきたのでこれらも調べたい(願望)


2011-11-01 [長年日記]

_ [初出社]

前回から11ヶ月
今回は遅刻せずに済んだ。

だいぶ痩せたので、また太らないように気をつけます。


2011-10-30 [長年日記]

_ Chatservice

シンプルなテキストチャットを作ろうと思って適当に作ってみました。
http://chat.ikeji.ma/

Comet的な事をしています。
たぶん、

  • ログを見る
  • 複数のルーム
  • プライベートなルーム
  • クライアントアプリ
  • 友達帳からの招待

などはすぐには実装されません。


2011-10-10 はれ [長年日記]

_ [vim]Unite-scriptを非同期にする

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?"的な事をすれば同じ事ができると思うけど、試してない。

どっかにこういうのをやってくれるラッパーがあったりしないかな?

_ [tDiary] AutoLink

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;
}

トップ 追記