SGF Reader

Lively Kernel勉強という言い訳で、数ヶ月前に遊んでいたMonte Carlo法によるコンピュータ囲碁プレイヤーをSqueakからJavaScriptに移植中。最強を目指しているわけではないが、Web Workerを使って4スレッドくらいで走らせると、Squeakでやるよりも多くのPlay Outができるようになりそうではある。Livelyの共有機能が作られていく上で、ネット対戦機能の実験台にもなれば良いかなと。

周辺機能を埋めるべく、以前書いたSGFのリーダーをOMeta/SqueakからOMeta/JSに移植。Livelyに付属のOMetaはバージョンがちょっと古くて使えない機能もあるので、Robertが更新してくれるまでの間は http://www.tinlizzie.org/ometa-js/#SGF で作業。いちおう動くようにはなりました。

それはそうと

コンピュータ囲碁 ―モンテカルロ法の理論と実践―

コンピュータ囲碁 ―モンテカルロ法の理論と実践―

がたまたま良いタイミングで発売されていなければこんなひまつぶし(じゃない)はしなかったはずである。ありがたい。

Naomi Hirahara

しばらく前に読んで日記にも書いたHank Umemotoさんの本だが(http://d.hatena.ne.jp/squeaker/20130120#p1)、彼が「プロの助けを借りた」というプロの人はNaomi Hiraharaさんという人で、しかも彼女は隣のビルで働いていてバスケも良く一緒にやっているJimmyちゃんのお姉様ということが判明した。これは不思議なつながりだ。Jimmy曰く、Naomiさんは「彼の知っている中で執筆のみで食べていけている唯一の人」ということで、小説も結構たくさん書いていて一部ではそれなりに流行っているのである。

というわけで、先週末USCで行われていたLA Festival of Booksで運良く彼女のサイン会も行われていたので、ミーハー気分で出かけてサインもらってきました。

Web Workers

JavaScript初心者の私ですが、Web Workersで遊んでいます。https://developer.mozilla.org/en-US/docs/DOM/Using_web_workers や他のページを見ても、Workerそのものは"transient"なものであって、一度生成したら一度走らせて終了したらさようならして、というモデルが推奨(?)されているようです。コードを書き直すたびにページをリロードしている場合には違いはわかりませんが、Livelyのような環境では同じWorkerを保持しておいて何度も使えるわけですし、私がやりたいと思っている対話的なMonte Carlo シミュレーションでもそういう使い方ができてほしいわけです。

まあ話は簡単で、

postMessage("xyz")

calc = (function() {
    var register = 0
    return function() {return register++}
    })()

onmessage = function (evt) {
    var result = calc()
    postMessage("result: " + result)
}

というようなWorker用のコードを書いておけば、Workspaceで

myWorker = new Worker("PlayerWorker.js")
myWorker.onmessage = function(evt) {
    console.log(evt.data.toString())
}
myWorker.postMessage("")

というコードを実行できます。面白いのは、こちらのコードをひとまとめにして実行する(全選択してCmd-dを押す)と、Worker側のpostMessage("xyz")が実行されるときにはすでにクライアント側の"myWorker.onmessage() = ..."が実行されているので"xyz"がコンソールに出力されますが、各行を別々に実行したときにはそうはならないということでしょうか。もちろんもう一つの面白い点は、最後の"myWorker.postMessage("")を繰り返しCmd-dすると、結果はちゃんと

result: 0
result: 1
result: 2
result: 3
result: 4
...

のように情報が記憶されている、というところでしょうか。大昔にLively Kernelのメーリングリストで話題になっていたhttps://github.com/eligrey/jsandbox でも結局はできていたことではあるでしょうが、まあ初心者にはそれでも発見です。

色彩を持たない多崎つくると、彼の巡礼の年

色彩を持たない多崎つくると、彼の巡礼の年

色彩を持たない多崎つくると、彼の巡礼の年

読みました。