2048リモートコントローラー

2048ゲームがちょっと流行ったところで、

http://gabrielecirulli.github.io/2048/

今更ながらソルバーを作ったりするのも芸がないので、オリジナルのサイトのコンテンツをよそからリモートコントロールできるようにしてみました。

http://lively-web.org/users/ohshima/lively-2-webpage.html

を開け、Generate connect codeのボタンを押した後でdrag this to your bookmark barのリンクをブックマークバーにドラッグします。その後http://gabrielecirulli.github.io/2048/を別のタブで開き、そのタブが表示されているところで先ほどブックマークに登録したブックマークレットを押します。これでLivelyの方に戻るとしばらくして右にあるラベルが"connected"に変わるので、open remote workspaceのボタンを押します。

後は左上の"2"を押すたびに、ゲームの画面が更新されるようになる、はずです。少なくともChromeであれば。

LivelyはSmalltalkみたいな環境なので、リモートコントローラ側の機能をどんどん拡張していけるところが面白いところですし、Robert Krahnの作ったlively2livelyという仕組みがあるので、複数のウェブサイトを自由につないで遊ぶ、ということができるわけなのです。

難しかったところは、KeyboardEventを作った後でそのフィールドに正しい値をセットするところでした。whichプロパティなどはリードオンリーなので、簡単には変えられません。結局のところsetterとgetterを定義してかわす、というのが定番のようで、私のコードは

(function() {var v = document.createEvent("KeyboardEvent"); Object.defineProperty(v, "keyCode", {get: function() {return parseInt(this.keyIdentityfer.slice(2), 16)}}); Object.defineProperty(v, "which", {get: function() {return parseInt(this.keyIdentifier.slice(2), 16)}}); v.initKeyboardEvent("keydown", true, true, window, ' + k + ', 0); document.getElementsByClassName("container")[0].dispatchEvent(v)})()

みたいになっています。おそろしや。

プレゼン心得

日本ではそういう時期なのですね。


http://keigomi29.hatenablog.com/entry/2014/02/11/140251

とか、基本線として分かりやすいです。

まず「訊かれたことに答える」ことです。

そんなんあたりまえやろ、と思うでしょ。それが全然当たり前じゃないんですよ。みんな普通に訊かれたことじゃないこと答えてます。まじで。何が、で訊かれたら「何」を答えましょう。「〜なのか」と訊かれたら答えはYesかNoです。

のあたり、日本の人が英語で発表しているときにも悪い例を良く見かけますね。"Is this XYZ?"という質問に対して、あるいは"Did you do XYZ?"という質問に対しても。"It is difficult."という返事を聞くのが結構定番な気がします。「難しい質問ですが」という前置きが訳されているのか、「やるべきだったのだけど技術的に難しかったのでやりませんでした。すみません」というのが訳されているのか、とは想像しますが、不慣れなときはまずはYes/Noで答えておかないと。

5年もすればネタになるでしょうし、20年後には思い出すことさえほとんどなくなっているでしょう。

これは(笑)。世の中には20年後にも卒論発表で失敗した夢を見て夜中にぱっと飛び起きている人もいるに違いない。

Robot Turtles

Kickstarterに出資したBertに送ってもらいました。

http://www.robotturtles.com/
コンセプトとしては阿部さん他の「にんげんプログラミングhttp://www.canvas.ws/kenkyujo/scratch/index.html」のようなものですが、きれいにパッケージして製品化しているところがすごいです。ルールはあってもないようなもので、子供と一緒にルールを作りながら遊べます。なかなかよし。

Emina Torlak来訪

Eminaさんは、KodkodというSATソルバーを作ったり、ソルバーを使ったDSLを作るためのフレームワークRosetteというものを作ったりししている研究者の人です。Onward 2013!で発表が前後したりした関係で(同僚のHesamは前からDagstuhlセミナーに一緒に参加したりしていたので既知でしたし)、Viewpointsに一度来て話をしてもらうということになりました。

Alanの斜め上からの質問にも動じずに、かつ分からないことは分からない、ということもはっきりと言える落ち着いた人でした。

どきどきプログラミング

こんなものがでるとは。

http://www.amazon.co.jp/dp/4822297314/ref=cm_sw_r_tw_dp_eEpMsb12D4SRP
「わくわくプログラミング」に載っているエッセイを以下のサイトに載せるときに、本の説明のために書名を英語に訳してくれないか、と命令を受けたのですが、
http://www.vpri.org/pdf/hc_what_Is_a_dynabook.pdf
「いやいや、私ごときのものが訳すのは難しいです」と答えて、結局は訳さず内容の説明をするにとどめた、という経緯がありました。いやー、我ながら素晴らしき慧眼。「どきどき」が出るとしらないままで「わくわく」を訳していたら、大はまりしていたところでした。

第三弾は「てかてか」に違いない。

Cyc

先週は1週間まるまるAustinにあるCycorpに缶詰になり、みっちりとCycについて勉強していました。

Cycというのは大きな知識ベースとその推論システムの名前です。もともとは日本の第5世代コンピューティングプロジェクトに脅威を覚えたアメリカが、対抗するプロジェクトとしてMCCという組織を立ち上げて、知識ベースをを作って行こうということではじまったプロジェクトでした。第五世代の人々とも交流が多々あったようです。その後は会社組織となり、山あり谷ありながら30年の時間をかけてみっちりと知識やルールを積み上げ、矛盾を内包するようなデータからでもなんらかの結論を出せるという推論エンジンになっています。

Cycは現在のところ、50万の概念、17万の集合、それらの関係を記述するassertionの総数として1200万、というような規模に育っています。Doug曰く、成人は5億個くらいの言明を頭に蓄えているが、Cycはその2%くらいまで来ていて、主導者のDoug Lenat曰く、予定より20年遅れたがようやく「使えるようになってきた」というところです。

いろいろなデモをみた限りでは、「常識」を備えたコンピュータ、というところまでは来ているとは言えないのですが、ちゃんとドメインに特化した知識を登録し、それに応じたqueryを投げるとちゃんと推論して、推論の根拠をちゃんと表示できるようになっています。

我々の研究では、プログラム同士がお互いを発見して、どのように恊働できるかを導きだす、というようなこともしたいのですが、Cycがその助けになるのではなかろうかと探っているところです。