読者です 読者をやめる 読者になる 読者になる

いものやま。

雑多な知識の寄せ集め

MacにErlangをインストールしてみた。

技術 Erlang Mac

最近、関数型言語に関してちょっと思うところがあって、いろいろ勉強中。
といっても、モナドとかではなく、並列性に関して。

それについてはまた別の機会に書くとして、今日はそれに関係してErlangMacに入れてみたので、それについて。

全体の流れ

最初に断っておくと、普通ならMacPortsとかHomebrewを使えば、簡単なはず。
ただ、自分はそのいずれも使ったことがない(^^;
似たようなものがいくつもあるので、いまだにどれを使うべきなのかがよく分かっていなくて。

ということで、基本的にはtarボールもしくはGitHubからソースを取得して、ビルドしていった。

そして、全体の流れは、以下のとおり:

  1. autoconfのビルド、インストール
  2. Erlang/OTPのソースのダウンロード
  3. パッチのダウンロードと適用
  4. Erlang/OTPのビルド、インストール
  5. Erlang/OTPのドキュメントのビルド、インストール

ちなみに、自分の環境は以下のとおり:

Mac OS X: 10.11.6 (El Capitan)
Xcode: 8.0
Clang: 8.0.0
autoconf: (インストールなし)

autoconfのビルド、インストール

まず最初に必要なのが、autoconfのビルドとインストール。

というのも、Erlang/OTPのソースをGitHubからダウンロードした場合、configureスクリプトが入っていないので、otp_buildを使ってconfigureスクリプトを作る必要があるから。
このとき、autoconfの2.59以降が必要になってくる。

自分の環境の場合、autoconf自体が入っていなかったので、まずはautoconfをビルドしてインストールする必要があった。
もし、autoconfの2.59以降が入っているのなら、この手順は不要。

さて、autoconfのビルドとインストールなんだけど、autoconfのソース自体は、GitHubからダウンロードできるようになっている。
けど、autoconf自体が入っていない場合には、GitHubからダウンロードするのではダメ。
なぜかというと、autoconfをビルドするためのconfigureスクリプトGitHubのソースには入っていないからw
GitHubのソースからautoconfをビルドしたい場合、ブートストラップーーすなわち、すでに入っているautoconfを使ってconfigureスクリプトを作ってやる必要がある。
鶏が先か、卵が先かw

幸い、tarボールにはconfigureスクリプトが入っているので、tarボールをダウンロードしてきて使えば問題ない。
http://ftp.gnu.org/gnu/autoconf/から適当なものをダウンロードしてくる。
自分はautoconf-2.69.tar.gzをダウンロードしてきた。

ダウンロードしてきたら、展開して、お決まりの手順でビルド&インストール。

$ tar zxvf autoconf-2.69.tar.gz
$ cd autoconf-2.69/
$ ./configure
$ make
$ sudo make install

特に問題はないはず。

Erlang/OTPのソースのダウンロード

次は、Erlang/OTPのソースをGitHubからダウンロード。

といっても、cloneするだけ。

$ git clone https://github.com/erlang/otp.git
$ cd otp/

そして、今後使うので、環境変数ERL_TOPを設定しておく。

$ export ERL_TOP=`pwd`

パッチのダウンロードと適用

さて、これで普通にビルドできればいいんだけど、どうやらバグがあるらしく、普通に手順を進めていくと、エラーになってビルドに失敗する(^^;

=== Entering application hipe
 VSN    hipe.hrl
 ERLC   ../ebin/hipe_rtl.beam
dyld: lazy symbol binding failed: Symbol not found: _clock_getres
  Referenced from: /Users/yasufumi/Development/erlang/otp/bin/x86_64-apple-darwin15.6.0/beam.smp (which was built for Mac OS X 10.12)
  Expected in: /usr/lib/libSystem.B.dylib

dyld: Symbol not found: _clock_getres
  Referenced from: /Users/yasufumi/Development/erlang/otp/bin/x86_64-apple-darwin15.6.0/beam.smp (which was built for Mac OS X 10.12)
  Expected in: /usr/lib/libSystem.B.dylib

/bin/sh: line 1: 46066 Trace/BPT trap: 5       erlc -W +debug_info -Werror +inline +warn_unused_import +warn_export_vars -o../ebin hipe_rtl.erl
make[3]: *** [../ebin/hipe_rtl.beam] Error 133
make[2]: *** [opt] Error 2
make[1]: *** [opt] Error 2
make: *** [secondary_bootstrap_build] Error 2

幸い、pull requestでこの問題の修正が投げられていて、特に問題もないようなので、このパッチを取り込んであげれば大丈夫だった。

自分がビルドした時点ではまだmaintブランチに取り込まれていなかったけど、おそらくしばらくしたら取り込まれるはず。
取り込まれていたら、以下の手順は不要。

まず、pull requestの変更を取り込むために、フォークされたリポジトリをリモートリポジトリに追加して、フェッチ。

$ git remote add rickard-green https://github.com/rickard-green/otp
$ git fetch rickard-green

そして、適当なブランチを用意して、変更をマージ。

$ git checkout -b quick_patch
$ git merge rickard-green/rickard/macosx-config-mess/OTP-13904

さらに、以下の環境変数を設定しておく。

$ export MACOSX_DEPLOYMENT_TARGET=10.11.6

これでOK。

Erlang/OTPのビルド、インストール

パッチのダウンロードと適用ができたら、いよいよビルドとインストール。

まずはconfigureスクリプトを作らないといけないので、otp_buildを実行する。

$ ./otp_build autoconf

これでconfigureスクリプトを作ってくれる。
最後にいろいろメッセージが出ると思うので、必要ならconfigureスクリプトに渡すオプションを変えること。

そして、お決まりの手順。

$ ./configure
$ make
$ sudo make install

ちなみに、make installを行う前に、make release_testsを実行すると、テストをしてくれるみたい。

これで何もエラーが出なければ、Erlang/OTPのインストールは完了!

Erlang/OTPのドキュメントのビルド、インストール

さて、これでErlang/OTP自体のインストールは終わりなんだけど、ドキュメントもビルドしてインストールしておいた方がよさそう。

ドキュメントをビルドするには、まず、PATH環境変数を追加する必要がある。

$ export PATH=$ERL_TOP/bin:$PATH

そして、ビルド&インストール。

$ make docs
$ sudo make install-docs

これでドキュメントもインストールされる。

動作確認

最後に、ちょっとした動作確認。

とりあえずErlangシェルを使ってみる。

$ erl
Erlang/OTP 19 [erts-8.1] [source-9e29e8f] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V8.1  (abort with ^G)
1> 1 + 2.
3
2> io:format("Hello, world!~n").
Hello, world!
ok
3> q().
ok
4> 
$ 

ちゃんと動いていることが分かると思う。


ちなみに、今読んでる本は、コレ。

すごいErlangゆかいに学ぼう!

すごいErlangゆかいに学ぼう!

まだ全然最初の方だけど、Haskellとはまた全然違って興味深いw
動的型付けで副作用もあるので、あんまり関数型っぽくない感じ。
ちょっと(かなり?)構文にクセのある、オブジェクト指向のない、昔ながらのプログラミングを見てる気分(^^;

今日はここまで!

『人工知能のための哲学塾』を読んでみた。

読書 哲学 AI

人工知能のための哲学塾』を読んだので、感想とか。

人工知能のための哲学塾

人工知能のための哲学塾

この本は「何を」扱っているのか

ディープラーニングの成功によって、最近何かと話題になっている人工知能
ただ、この本で議論しているのは、そういった「人工知能の『技術』」についてではない。

あるいは、人工知能が発展してきたことで、自動運転が可能になったり、プロ棋士がAIに負けてしまったりと、社会が変わりつつあるような風潮がある。
そうなると出てくるのが、人工知能をめぐる社会的な問題。
例えば、自動運転で事故が起きたら誰が責任を取るのかや、人工知能に人の仕事が奪われてしまわないのかや、はたまた、人工知能が人類に対して反乱を起こしたりしないか、などなど。
けど、そういった「人工知能をめぐる『社会的な問題』」の議論をしているわけでもない。

それらの内容を期待してこの本を買うと、ちょっとガッカリするかも。
もしかしたら、いい意味で期待を裏切られて、知的好奇心を満足させられるかもしれないけど。

じゃあ、この本で扱っているのは、人工知能の「何」なのか?

誤解を恐れずにあえて書けば、それは人工知能の『心』」
「『知能』とは何なのか?」を人工知能を通して哲学しながら、その実、その対象は上辺の「知能」を通り越し、より深いレベルの「知能」ーーすなわち、「この『心』とは何なのか?」を考えている。
それがこの本。

と、ここまで書くと、何とも野心的な、すごい本のように感じられるだろうけど(そして、実際そうなんだけど)、自分の感想は「いろいろ惜しい本だなぁ」と。
もちろん、知能を考えるうえで、「身体性」というものがどれだけ重要なのかということに気付けているだけで、そこらへんの哲学書なんかよりもずっと鋭いんだけど、惜しいかな、問題意識が伝わってこないので、「哲学的な議論」と「人工知能に関する議論」がどう結びついているのかが伝わってこない。

ある意味、致命的とも言えるのだけど・・・

例えるなら、そば屋に行ったら、なぜか主人がうどんについていろいろ語ってくれて、その話はとても納得できるものだったし、出てきたそばも絶品で美味しかったんだけど、なんでそばじゃなくてうどんの話をしたの?というような。
もちろん、そば屋の主人からしたら、そこでうどんについて話すことは必然だったんだろうけど、そば屋の主人の問題意識(例えば、「美味いうどん」とは何かを知らないで、それに勝って選ばれ続ける「美味いそば」を出し続けられるはずなどない、とか)を知らない客からしたら、うどんの話とそばとの関係がよく分からず、「?」となってしまう。

この本もそういうところがあって、哲学の議論も(慣れてないと難しく感じるだろうけど)読めば納得できるものがあるし、人工知能の議論も興味深いものがある。
けど、その2つがどう繋がっているのかがよく分からないということが多かった。

もちろん、自分は似たようなことを考えてきたので、問題意識を推測することが出来て、こういうことが言いたかったのねというのはある程度伝わってくるのだけど(それでも結びつきが「?」な部分はけっこうあった)、そうでない人には、哲学的な部分の難しさもあいまって、「何が言いたいのかよく分からない」となってしまいそうに感じた。
結論はいいものなのに、議論を追うことでそこに辿り着いてくれる読者が、果たしてどれだけいるのか・・・

人工知能の「課題」は何なのか

ということで、ここからはこの本のガイド。
この本で議論されている各要素が、どのような繋がりを持っているのかについて、書いてみたい。

まず、根本的な話として、三宅先生の問題意識は何なのか、ということ。
これはすなわち、ゲームAIの開発者である三宅先生が、現状のゲームAIの開発において、「課題」であると思っていることは何なのか、ということになる。

現状のゲームAIの開発において「課題」となっていること、それは、ゲームのキャラクターが、自らの意思を持って動く主体的な存在に見えず、外側から操られて動く操り人形に見えてしまうこと。

これは、古典的なRPGのキャラ(NPC: Non Player Character)とオンラインRPGのキャラ(PC: Player Character)を比較してみれば、分かりやすい。
NPCは外側からプログラムで動かされているだけで、決まりきった動き、反応しか返さない(返せない)ので、「何かをしよう」という意志は感じられない。
一方、PCは、その背後には実際に何かを感じ、判断を行い、操作している人間がいるので、決まりきった動き、反応しか返さないということはなく、それゆえ、「何かをしよう」という意志が感じられる。
もちろん、PCの動きは人それぞれなので、NPCにしか見えないPCがいることもあるけど・・・

もし、ゲームのキャラクターが、決まりきった動きをするだけでなく、自らの世界を獲得し、自らの意志を持って動き出したとしたら、どうだろう。
ゲームはきっと、より面白いものになってくれる。

そこで、そのような「主体的に行動する」ゲームのキャラクターを作り出すには、どうしたらいいんだろう?というのが、三宅先生の問題意識。

さて、いま見たようなキャラクターの人工知能を作るには、二つのアプローチがあります。
すなわち、

  • 外から「知性を持ってふるまっている」と見えるように作る
  • 中から主観的な知性を作る

という方法です。
前述したパス検索は、外側から制御し、プレイヤーから見て知能を持っているようにふるまうための技術です。
しかし、外側から制御するという発想ではどうしても到達できないところがあります。
プレイヤーには、制御されているものと自律的に考えているものの区別がはっきりわかるのです。
(中略)
しかし、キャラクターの人工知能で必要なことは、機械的な仕組みだけでなく、生物の持つ主観的な世界を人工知能(キャラクター自身)に与えてあげることです。
では、「どのように生物の持つ主観的な世界を形成すればよいか?」というのが、僕のもっとも根幹にある意識です。
主観的な世界を持つことで、操り人形のようなキャラクターはそのゲーム世界で生き生きと生きるキャラクターへ変貌し、ユーザーに知能と遭遇するという新しいリアリティと体験を与えるのです。
(『人工知能のための哲学塾』第一夜より引用 ※強調は自分が付与)

ところで、上記のような提案すると、次のような意見が出てくるかもしれない:
それは単に、外側から制御するアルゴリズムが単純すぎるだけで、より複雑で巧妙になれば、「主観的な世界」とか考えなくても、生き生きしたキャラクターは作れるんじゃないか。

こういった意見をそもそも本では取り扱っていないんだけど(おそらく、三宅先生の中では「いや、どんなに複雑で巧妙になろうと、ダメなんだよ」と結論が出てるから)、実際のところ、難しい。
というのは、その主張は第三夜に書かれている方法論の延長線上にあるもので、哲学的には「『記号』を世界全部と対応させることは可能なのか」という問題や「『欲求』をどう扱えばいいのか」という問題があったり、また、本には書かれていないけど、数学的には「フレーム問題」という頭の痛い問題が転がっているから。
これらについては、後述。

人工知能への古典的なアプローチ

ところで、本では第一夜から現象学を扱っていて、デカルト的な機械論(つまり、人工知能に対する古典的なアプローチ)を乗り越える話から始まっている。
いや、そこは重要な話なんだけど、いきなりそこから始まっても、おそらくほとんどの人は「?」だと思う・・・
なぜって、そもそも、乗り越えようと思っている古典的なアプローチというものがどんなものなのかが分かっていないから。

この、人工知能への古典的なアプローチについて書かれているのは、第三夜。

これまでの人工知能の研究は、数学的な枠組みで、人間の「論理的な思考」を写しとることで、機械にも同様の「論理的な思考」が出来るようにすることを目指してきた。
その発端とも言えるのがデカルトで、公理から演繹を重ねることで誰でも真理に到達できると解き、それをライプニッツフレーゲが記号の運用という形で引き継いで、ヒルベルトが(書かれてないけど)形式主義を打ち立てた、という話。
その結果、「意味」を考えずとも「形式的な」記号の操作をすることで「証明」が出来るようになり、それを応用した論理プログラミングが生まれた。

これは、三段論法を考えてみると、分りやすい。

三段論法というのは、「 A である」「 A ならば  B である」という前提から、「 B である」が正しいという帰結を出す論法のこと。
このとき、 A とか  B には何が入ってもいい。

例えば、「今日は月曜日である」「今日が月曜日なら、明日は火曜日である」という命題が真であれば、「明日は火曜日である」という命題も真となる。

このときポイントとなるのが、 A B の「意味」を知らなくていい、ということ。
なので、「意味」を理解できない機械でも、真である命題の集合(モデル)が与えられれば、そこから真となる様々な命題を「形式的に」導き出すことが出来る。
すなわち、「機械的に」論理的な思考が出来るようになる、と。

これが古典的な人工知能の考え方で、「意味」なんてよく分からないものは扱わないで、「形式」だけ扱うことで、論理的な思考を実現しようという発想になっている。

これは、第四夜で扱われている構造主義に通じるものがある。

構造主義では、「真理とは何なのか」や「どうしてそうなるのか」といったよく分からないものは横に置いといて、「いろいろ観測すると、(どうしてかは分からないけど)こういう共通した構造がある」とか「(どうしてかは分からないけど)こういう構造があると想定すると、いろいろ分りやすく説明がつく」といったように、「モノそれ自体がなんなのか?」を問うのではなく、「モノとモノとの間にある関係(構造)」を抜き出していく。
そして、その抜き出された構造を使うことで、物事に説明をつけていく。

上のように言うとちょっと分かりにくいかもしれないけど、これは物理を考えてみると分りやすい。

例えば、地球上でボールを持っていて、手を離せばボールは当然下に落ちる。
何回やっても、毎回同じように下に落ちる。
これはなぜかといえば、重力が働いているからなわけだけど、「なぜ重力が働くの?」と言われれば、難しい。
「物体と物体の間には引力が働くようになっていて、その引力は質量が大きいほど強くなるから、質量の大きい地球は引力も強く、それゆえボールは下に落ちる」とか、説明をつけようとするわけだけど、「じゃあ、なんで引力が働くの?」とか「力が加わると物体に加速度が生じるのはなぜ?」とか、「なぜ?」の疑問にはキリがない。
そこで、そういった「なぜ?」の質問は置いといて、「物体と物体の間には引力が働く」「力を加えると物体に加速度が生じる」という構造(関係性、法則性)だけを抜き出す
これが構造主義的な考え方。
そうすれば、「なぜ?」の疑問には答えられないけど、いろいろな問題に対して、具体的な答えを与えることは出来る。

本には書かれていないけど、構造主義的なアプローチで作られる人工知能として、人工無脳というものがある。
これは、人間の会話を模倣するAIで、単語の意味とかは知らないけど、単語間の繋がり、会話での文の繋がりには一定の規則があるので、その法則性を抜き出し、法則性に従って文を組み立てることで、会話を実現するというもの。
もちろん、実際にやっているのは記号処理だけなので、どんなに巧みに会話をしようが、その会話が現実世界において何を指し示しているのかは、一切理解していないのだけど。
(興味のある人は「中国語の部屋」を検索してみるといいかもしれない)

ちなみに、人工無脳については以下の本が面白かったので、興味のある人は読んでみるといいと思う:

古典的なアプローチの問題点

さて、これまでの議論を見ると、至極まっとうなアプローチで、何が問題なのか分からないと思う。

実際、何でダメなのかについては、本でもあまり明確には書かれていない。

記号接地問題

本でさらっと指摘している問題は、「記号接地問題」というもの。
すなわち、「『記号』を世界全部と対応させることが出来るのか」という問題。

たしかに、世界全部を記号と対応させることが出来たのなら、その記号の中で人工知能は自由に思考を展開することが出来るだろう。
(ホントは「フレーム問題」という厄介な問題がいるのだけど・・・それは置いといて)
けど、そもそも世界全部を記号と対応させることなんて、可能なのか?

これは構造主義で指摘されていることだけど、記号が世界をどのように切り分けるのかは「恣意的」であることが分かっている。
例えば、日本なら虹は七色に切り分けられるけど、アメリカなら六色が普通だし、国によっては三色だったり、場合によっては二色(明るい色と暗い色、といった分類)だったりする。

「そんなの、どうやって切り分けるかだけで、お互いの合意さえ取れれば意図は通じあうでしょ?」と思うかもしれないけど(自分も最初そう思った)、実際にはそれでは済まされない。

例えば、色の見えない人に、「色の感覚」を伝えることが出来るかどうか。
「色の感覚」を伝えられなくても、RGBの値を伝えれば問題ないじゃないか、とも思うかもしれないけど、話はそんな簡単じゃない。

ちょっと昔に、次のようなツイートが話題になった:

ドレスが白と金に見えるか、青と黒に見えるか、という話題。

上のツイートのドレスの端の部分は、RGB値にすると、まったく同じになっている。
けど、実際には、白と金のドレスに見える人と、青と黒のドレスに見える人がいる。
これは、色をRGB値でしか色を認識できない人には、まったく意味の分からない話題だ。

さて、じゃあこの「色の感覚」というものを、どうやって「記号」で表現するのか?
当然、これを「記号」で表現できないのなら、その人工知能は、この話題について話すことは出来ない。

これは第二夜の話と繋がることだけど、このように、「世界をどのように見るのか」というのは、身体と切っても切れない関係があったりする。
それを無視して、世界全体を記号と対応付けられるのかというと、難しい。

「欲求」の扱い

また、本では別の指摘として、「『欲求』をどう扱えばいいのか」ということを挙げている。

「仕事を早く片付けなければならない」でも「お腹が空いた」というところから、「もういいや、ご飯食べちゃおう」と思うのか、「でも、もうひと頑張りしよう」と思うのか。
前者は要求を優先させた結論で、後者は論理的思考(理性)を優先させた結論なわけだけど、このように、欲求と論理的思考というものは、相反する場合がある。
このとき、どのように折り合いをつけたらいいのか、という問題。
もう少し言うと、このように欲求と論理的思考とが相反したときに、論理的思考(機械的思考)だけで、どちらにもなりうる思考というものが生まれてくるのかどうか?

欲求に従って動くことしか出来ないキャラクターは、知性的だとは言い難い。
かと言って、欲求に負けることがなく、論理的な思考しか出来ないようなキャラクターもまた、人間離れしていて魅力的だとは言い難い。

例えば、RPGでゲームのキャラクターと一緒にラスボスに臨んだとする。
このとき、我が身可愛さで逃げることしかしないキャラクターというのではダメだし、逆に、恐れも知らずにただ突っ込むだけのキャラクターというのもまた、非人間的でダメ。
「くっ、俺はもうダメかもしれないが、死んでもここは食い止めるから、その隙にあいつを倒すんだ!」というセリフを吐いてくれるようなキャラクターじゃなきゃ、面白くない。
けど、死にたくないという欲求と、ラスボスを倒さないといけないという論理的思考がせめぎ合う葛藤を、論理的な思考一本だけで、生み出せるものなのか。
論理的思考で導き出されるのは、真か偽か、それだけだ。

フレーム問題

最後にーーそしてこいつが一番厄介なんだけどーー「フレーム問題」というものがある。
(これは本では触れられていない)

感覚的な話で説明されることが多いけど、これはつまり、真となる命題の数が膨大すぎて、どれとどれをどう組み合わせたら、今欲しい「答え」に辿り着けるのかが、実用的な時間の範囲内で求まらなくなるという問題。

例えば、今、真である命題(=知識)が10個あるとする。
ここから、2つの知識を用いて、ある命題が正しいかどうかを推論したいとする。
そうすると、知識の組合せは、 10 \times 9 \div 2 = 45 通り。
45通くらいなら、あっという間だ。

じゃあ、今度は10個の知識のうち、5つの知識を用いて、ある命題が正しいかどうかを推論したいとする。
そうすると、知識の組み合わせは、 (10 \times 9 \times 8 \times 7 \times 6) \div (5 \times 4 \times 3 \times 2 \times 1) = 252 通り。
まだまだ余裕・・・?

それなら、今度は知識の数を100個にして、そのうち50個を使うようにしてみる。
この場合、知識の組合せは、 (100 \times 99 \times \cdots \times 51) \div (50 \times 49 \times \cdots \times 2 \times 1) \fallingdotseq 1.0 \times 10^{29} 通り。
わぉ。
これは無理。

たった100個の知識を組合せようとしただけでも、こんな酷いことになってくる。

「いやいや、普段考えるとき、100個も同時に知識を使ったりしないよ」と思うかもしれないけど、そこが人間のすごいところで、必要であるたった数個の知識を膨大な数の知識の中から「直感的に」引っ張ってこれるのは、人間だからこそ。
そういったことが出来ない機械は、まったく関係のない知識だろうと何だろうと、とにかく組合せて使えるものかどうかを判断しないと始まらない。

これはコンピュータ将棋とかを考えてみると分りやすいと思う。
コンピュータは、ある程度、枝刈りという方法を使って読む手を限定しているけれど、基本的には全部の手を読む。
一方、プロ棋士は、正解と思われる数手を中心に読む。
(そういったことが「直感的に」出来る)
そのせいで、コンピュータは人間に比べて膨大な計算量を誇るけど、効率という意味ではとても敵わないとなってくる。

が、最近のコンピュータ将棋やコンピュータ囲碁(特にAlphaGo)の活躍を見ていると、より上手い方法が見つかり、コンピュータの計算速度も上がれば、効率が悪くてもなんとかなるんじゃないの、と思えてしまうのも、また事実。

これについては、 P \neq NP 予想という数学の大問題が関係してくる。
この予想は、コンピュータの計算速度がどんなに速くなっても、問題のサイズが大きくなると、途端に手のつけられなくなる本質的に難しい問題というものが存在するだろう、という予想。
これまでに述べたような、組合せの数が急激に大きくなる現象のことを「組合せ爆発」と言ったりするのだけど、この予想が正しかった場合、そういった組合せ爆発を起こす問題は、組合せ爆発を起こさないような簡単な問題には変換できないことになる。
(※厳密には違うのだけどーーというのは、計算量は上から抑えるので、無理やり組合せ爆発を起こさせるアルゴリズムを作ることは容易に出来てしまうからーーここでは、そうやって意図的に組合せ爆発を起こさないものとしている)
なので、 P \neq NP 予想が正しかった場合、どんなにコンピュータの計算速度が速くなっても、膨大な知識が存在する「世界」においては、それは「焼け石に水」にしかならない。

知能を「より深く」、「ありのまま」観る

ここでやっと、第一夜の議論に辿り着ける。

これまで議論してきたように、古典的なアプローチでは、限界がある。
そこで、それを乗り越えるためには、どうしたらいいんだろう、という話になる。

これまでの古典的なアプローチの何が問題なのかというと、本質的には、知能の「上辺」の部分しか見ていないところにある。

これは、小さい子の描く絵を思い浮かべると、分りやすい。
丸い顔を肌色で描いて、その中に黒い丸をグリグリと二つ書いて目とし、オレンジ色で鼻を塗って、赤い線で口を描く。
首があって、四角い胴体があって、そこから横に腕が二本、下に脚が二本生えている。
空は水色、太陽は赤、地面は茶色。
そして、背景は画用紙の白。

f:id:yamaimo0625:20160827085545p:plain
こんな感じw

実はこれは、小さい子が「見たまま」を絵に描いているのではなく、「観念」を絵として表現していることを意味している。
「顔」には「目」、「鼻」、「口」というパーツがあって、「顔」は丸くて肌色、「目」二つあって黒、「鼻」は一つあって肌色なんだけど、肌色で描くと鼻が見えないから、それっぽいオレンジで描くことで「鼻」があることを分かるようにし、「口」は一つあって赤。
「胴体」があって、「腕」と「脚」は二本ずつ。
上には「空」と「太陽」、下には「地面」があって、「空」は空色、「太陽」は赤で、日差しを放ち、「地面」は茶色。

この絵を見ると、いろいろおかしいところが見つかって(例えば、鼻はオレンジじゃないとか、股がないとか、太陽を実際に見ると赤くないとか、背景の白い部分は現実には何か存在しているとか)、ダメだなぁと思うわけだけど、人工知能の古典的なアプローチというのは、本質的にこれと同じことをやっている。
すなわち、「モノ」や「概念」を「記号」として表現し、その「繋がり」を描くことで、「知能はこうなっているんだ」と主張している。

上のように指摘すると、古典的なアプローチというのが、方向性としてどれだけ幼いものなのかに気がつくと思う。
(と同時に、人間の凄さも感じるーーそんな小さい子ですら、物事を「観念」と「その繋がり」の中で理解しているわけだから)
そして、このチグハグに描き出された知能を、どのようにすれば「まともな」知能として描き出すことが出来るようになるのかという方向性も見えてくる。

それはつまり、「観念」は一旦忘れて(エポケー)、「ありのまま」をまずはちゃんと見て(現象学的還元)、そこからどのように「観念」が見出されてくるのかという「心の働き」(志向性)を観測するという方向性。
これが現象学の方法論。
そして、この方法論を使うことで、古典的なアプローチが取りこぼしていた、「観念」が発生するよりも前の、より深い心の働きをキャラクターに実現させようというのが、三宅先生の目論見とも言える。
ここで取り扱うのは、記号化される以前の現象そのものなので、記号接地問題は起きないし(これはもう少し考慮する必要があるーーそれが第二夜の話に繋がる)、欲求というものも当然現象なので、扱えるようになるし、フレーム問題も、数多ある知識を相手にするのではなく、目の前にあるーーあるいは心に浮かんできたーー現象(知識)だけを扱えばいいとなるので、起こらなくなる。
(もっとも、今度は逆に、「心に浮かばなかった」というところから、「その問題は想定外でした」となる問題が起きてくるわけだけどーーただ、それはそれで、人間らしいとも言える)

こういったことを踏まえて第一夜を読むと、より内容が伝わってくると思う。

「世界」は誰にとっても同じなのか

これで「現象学」という方法論を得たわけだけど、下手すると、ここで罠にハマってしまう場合がある。
というのは、現象学では、「身体が世界を見ているんだ」とかいうことすら忘れて考え始めるから。
なので、身体の存在を忘れてしまい、意識こそが至高、意識こそがすべてなんだという「意識だけの世界」に引きこもってしまう危険性がある。

「忘れる」というのは、「それを当然のように使える前提では無くす」ということであって、「それを否定する」というところまでは言っていないことに注意しないといけない。
意識だけのところから世界を観測した結果、「身体が世界を見ているんだ」というふうに自分たちは捉えているんだ、という帰結が得られるのは、何も問題ない。
これは、 \lim_{x \to \infty} \frac{x}{x - 1} = 1 というのを、無反省な計算で求める(分子分母を  x で割り、 \frac{1}{x} \to 0 (x \to \infty) であることを利用する)のは一旦やめて、 \varepsilon - \delta 論法から捉え直して、正しいと帰結するのに似ている。

三宅先生が幸運だったのは、キャラクターに身体があったことだと思う。
そのおかげで、このような「意識だけの世界」に引きこもってしまうということを防げた。

さて、「ありのまま」を見ていくとしたわけだけど、その「ありのまま」というのは、何にも依存することなく、誰にとっても同じものになるのか、というのが、第二夜の話。

ここで引き出されるのが、生物学の知見。
つまり、「ありのまま」見ると言っても、その「ありのまま」というのは、環境と身体に大いに依存しているという話。

例えば、上の方で記号接地問題について書いたとき、色の見えない人にとって「色の感覚」というのは何なのか、ということを書いた。
これはまさにこのことを表現していて、つまり、色の見えない人にとって、「世界」というのは「色のない世界」ということになる。
「世界」にないのだから、当然それについて語ることは出来ない。

色の見える人がほとんどなので、「色のない世界」がその人にとっては「世界」なんだと言っても、実感が持てないかもしれないけど、それなら、逆に考えてみるといい。

例えば、周りの人間がみんなニュータイプになったとしたら、どうだろう。
よく分からないんだけど、とにかく直感で、みんなは「分かっている」。
その「とにかく直感で分かる」という謎の感覚を自分も分かろうとするんだけれど、分からないものは分からない。
「それってXXXっていう感じ?」とか聞いてみても、「いやー、そういうんじゃなくて」という反応しか返ってこない。
これは、自分にとっての「世界」というのが、ニュータイプのみんなの「世界」とは異なっているから。

もし、何かのきっかけでニュータイプになれたとしたら、「あぁ、こういうことだったんだ!」と目が開ける思いがするだろう。
そして、自分が過去に聞いていた「XXXっていう感じ」というのが、どれほどズレたものだったのかというのも、分かるだろう。
けど、そうなるには、自分がニュータイプになって、その感覚(クオリア)を実際に経験してみないことには、始まらない。
だって、それは自分の「世界」の「外側」なのだから。
(気になる人は、「マリーの部屋」で検索してみるといい)

このように、「知能」をちゃんと考えるなら、まず上辺の「論理的思考」だけを見ててもダメで、さらに「心の働き」だけを見るのでも足りなくて、「環境と身体の関係」ーー特に、身体は環境から何を受け取り、環境に対して何を行えるのかというインタフェースーーについてまで考えないといけないということが見えてくる。
そして、「知能」について考えてたはずなのに、いつの間にか、思索は「身体」にまで及ぶことになる。

「身体」について考える

そうして議論は、第五夜の身体の話に辿り着く。

現象学的に知覚、そして身体を研究したメルロ=ポンティを引き合いに出しつつ、身体に対する様々な実験の結果を通して、自分たちが「身体」というものを(そして「身体のイメージ」を)捉えているのかについて、議論されている。

ここで議論されている遠心性コピーというのは、非常に面白い。
そして、身体感覚を持ったキャラクターを作る上で、考慮に入れないといけない項目だと言える。

この遠心性コピーというのは、すごく簡単に言ってしまうと、針で指を刺したときに、「痛っ!」という感覚を「指に」感じる仕組みとも言える。
「痛い」という判断をしているのは「脳」なのに、実際に「痛い」と感じられるのは「指」の方であるというのは、クオリアをめぐる議論で、よく取り上げられる。
これは、遠心性コピーを考えると分かりやすくて、つまり、「指」が痛いと感じるのは、脳で作られた身体のイメージの「指」に対して遠心性コピーが働くから、と考えると、スッキリする。
身体の外部からの情報と、身体の内側からの情報が統合されて現れるイメージが、そこにはある。

以下は自分の書いた同人誌からの引用。
哲学少女のゆうらがお風呂の中で自分の身体について思索を巡らせているシーン。

改めて考え直してみると、腕の感覚が(痺れて)なくなったって、その腕の動脈にカッターをスゥーッと走らせたなら、血はどんどん溢れ出て、やがて僕は意識を失い、そして死んでしまう。
そういう意味で、僕の腕はたとえ感覚がなくなったとしても、やっぱり僕の身体なんだ。

きっと、「僕の身体」と言っても、そこには二つの「僕の身体」が存在するんだろう。

一つは物理的な「僕の身体」。
その「僕の身体」は僕を生かし、僕を僕としてくれている。
この「僕の身体」は非常に寡黙だ。
意識の下で黙々と働き、普段認識されることもない。
けど、そういった「意識」や「認識」が生まれているという事実が、暗黙的にその「僕の身体」の存在を教えてくれることになる。

もう一つは意識によって認識された「僕の身体」。
僕は感覚によって「ここまでが僕の身体」という境界線を引くことになる。
この「僕の身体」は非常に雄弁だ。
いろんな感覚を僕に教えてくれるし、僕もそれによって身体をどのように動かそうかと意識を向けることになる。

この二つの「僕の身体」は表裏一体として統合されていて、普段そのズレを意識することはない。
けど、腕が痺れたりしたときには、そこにズレが生じてくる。
そのせいで「僕の身体なのに僕の身体じゃないようだ」ということが起きてくる。

(中略)

そうやって考えたときに、簡単にズレが生じてしまってもおかしくない二つの「僕の身体」が、まるで一つしかないかのように一体混然となって存在しているという事実は、不思議に思えてくる。
あまりに重なりすぎていて、寡黙な物理的な「僕の身体」の声に気づけず、「なんで『僕』は『僕』なんだろう?」と考えてしまう人がいるくらいに。
(これは物理的な「僕の身体」が「僕」という意識を生み出しているのだから当然だ。けど、寡黙な「僕の身体」の声に気がつけないと、「僕」という意識と、意識によって認識された「僕の身体」の繋がりの必然性が見出せずに、このような疑問が生じてくる)

改めて身体に意識を向けると、そこには二つの「僕の身体」が一つあった。

(『ゆうら 意識の眼差し』より引用)

遠心性コピーというのは知らなかったけど、似たような考えに至っていたので、まさに本で議論されていたような内容になっているのが面白い。

それと、強化学習の観点から見ても、これは面白い内容だったりする。

強化学習の手法の一つに、プランニングというのがある。
これは、環境との相互作用によってAIが直接学習を行うだけでなく、その相互作用をモデルに反映することで、モデルからも学習を行おうとする手法。

遠心性コピーがやっていることは、これにかなり近い。
遠心性コピーによって身体のイメージを作るというのは、このモデルへの反映に相当している。
そして、そのモデルを使うことで予測を行えるようにし、うまく身体を動かせるようにしているというわけだ。

さらに先へーー受動意識仮説

ここから先は、本には書かれていない内容。

さて、知能を考えるには、より深い、身体の知能にまで考えを巡らせないといけないということが、本では見えてくる。
そのうえで、「論理的な思考」と「身体の知能」をどう結びつければいいのか、という話が出てくる。

これに関して本で言及していたのは、「先導レベル」という概念。
「先導レベル」というのは、意識レベルでの「〜をやろう」という意思のこと。
例えば、腕を動かす場合、「腕を動かそう」という意識レベルの意思が「先導レベル」で、それを受けて、あとは身体がうまいことやってくれる、と考える。

けど、そんな「先導レベル」なんて本当にあるの?というのが、大きな問題。
というのも、リベットの行った、興味深い実験結果があるから。

リベットの実験とは、次のようなものだ:

リベットは、時計回りに光の点が回転する時計のような点滅型モニターを作った。
そして、脳に運動準備電位を測るための電極を取り付けた人に、モニターの前に静かに座ってもらった。
その人には、心を落ち着けてもらい、「指を動かしたい」という気持ちになったときに、指を動かしてもらった。
さらに、「指を動かしたい」と自発的に「意図」した瞬間に、光点の位置がどこにあったかを尋ねた。
つまり、「意識」が「動かそう!」と「意図」する指令と、「無意識」に指の筋肉を動かそうとする準備指令のタイミングを比べたのだ。
(中略)
人が指を「動かそう!」と「意識」するのが最初で、その指令が随意運動野に伝わるから、「無意識」のスイッチが入り、運動準備電位が生じ、最後に指が動くんじゃないか。
(中略)
ところが、結果は衝撃的だった。
なんと、「無意識」下の運動準備電位が生じた時刻は、「意識」が「意図」した時刻よりも350ミリ秒早く、実際に指が動いたのは、「意図」した時刻の200ミリ秒後だったからだ。
(『脳はなぜ「心」を作ったのかーー「私」の謎を解く受動意識仮説』著:前野隆司 より引用)

これは非常に面白い。
つまり、自分たちは、「〜をやろう」と思って身体が動く準備を始め、そして身体が動くと思っているけど、実験結果は、身体が動く準備を始めたあとに「〜をやろう」と思い、そして身体が動くというものだったということだ。

この実験結果と<私>をめぐる考察から、前野先生は「受動意識仮説」という面白い説を出している。

脳はなぜ「心」を作ったのか「私」の謎を解く受動意識仮説 (ちくま文庫)

脳はなぜ「心」を作ったのか「私」の謎を解く受動意識仮説 (ちくま文庫)

この本では、身体のイメージという話にまでは及んでいないけど、フィードフォワード制御については語られている。
そういう意味でも、一緒に読んでおきたい本だと言える。
(前野先生は、ロボットの制御工学が専門(だったはず))

「身体性」の必要性に関する議論

また、人工知能の「身体性」を考えるのがどう重要なのかについては、このブログでもいろんな観点から述べてきた:

これらの記事も、ぜひ参考に。

今日はここまで!

人工知能のための哲学塾

人工知能のための哲学塾

脳はなぜ「心」を作ったのか「私」の謎を解く受動意識仮説 (ちくま文庫)

脳はなぜ「心」を作ったのか「私」の謎を解く受動意識仮説 (ちくま文庫)

Javaで動画作成ツールを作った話。(その1)

技術 Java ニコニコ動画

自分はニコニコ動画にいくつかボードゲーム動画を上げてるんだけど、動画を作るときに使っている自作ツールの話を少ししようかなと。

ちなみに、ツールの名前はMSC
Movie-create-tool by Script and Commandの頭文字をとってMSCーーというのは建前で、実際には大好きなGRANRODEOのModern Strange Cowboyからw

特徴

さて、このMSCがどんなツールなのかというと、以下のとおり:

  • Javaで書かれたコンソールアプリ
  • 独自仕様のスクリプトを書いて読み込ませることで、動画ファイル(Quick Time Movie形式)を生成する
    • ノード(画像、文字、プレイスホルダー)の表示をサポート
    • ノードのアクション(レイヤーへの追加・削除、前面・背面への移動、移動、フェード、文字列のセット、待ち)をサポート
    • ノードのグループ化をサポート
    • アクションの直列化、並列化をサポート
    • 複数レイヤーをサポート
    • 音声は未サポート
  • プレビュー機能あり
  • フレームワークはJMF(Java Media Framework)を使用

スクリプトを書いて動画を作るので、作業は基本的にテキストを打ち込むだけ。
あとは、プレビューで表示を確認したり、出来上がったらファイルに書き出したりすればいい。

この方法のいいところは、テキストエディタさえあればどこでも作業が出来るというところ。
それと、ボードゲーム動画のように、細かい要素を細かく動かす必要がある場合、プログラムを書くように動きをつけることが出来るので、比較的簡単に作ることが出来る。
(ただ、サブルーチンとかはサポートしていないので、そこまで使い勝手はよくない・・・DSLとして使えるようにするのが一番いいのだけど)

ちなみに、音声とQuick Time Movie形式以外の出力形式をサポートしていないので、実際には出力された動画をiMovieに読み込ませて、BGMやSEをつけたあと、MPEG4形式(コーデックはH.264)にエンコードして、アップをしている。

iMovieを使ったニコニコ動画向けのエンコードについては、自分の作った以下の動画を参照:

実例

例えば、自分がボードゲーム動画として最初にアップした動画が、以下:

この動画は、以下のようなスクリプトを読み込ませて作っている:

まず、全体的な設定をする、config.txt:

# コンフィギュレーション

> movie()
width: 800;
height: 600;
frame_rate: 25.0;
temp_dir: tmp;
<

> font(丸ゴ)
name: Hiragino Maru Gothic Pro;
size: 24;
color: ffffff;
<

> font(丸ゴ黒)
name: Hiragino Maru Gothic Pro;
size: 24;
color: 000000;
<

これで、以下を設定したことになる:

  • 動画の設定
    • 動画のサイズは800x600
    • フレームレートは25.0
    • 一時出力ディレクトリはtmp
  • フォントの設定
    • 「丸ゴ」というフォントとして、ヒラギノ丸ゴシックPro、サイズ24pt、色は白を使用する
    • 「丸ゴ黒」というフォントとして、ヒラギノ丸ゴシックPro、サイズ24pt、黒は黒を使用する

次に、動画に出現させるアイテムを定義する、item.txt:

# アイテム

#----------------------------------------
# レイヤー
#----------------------------------------
> layer(背景レイヤー) <
> layer(人物レイヤー) <
> layer(ボードレイヤー) <
> layer(移動レイヤー) <
> layer(効果レイヤー) <
> layer(会話背景レイヤー) <
> layer(会話レイヤー) <

#----------------------------------------
# 画像
#----------------------------------------

#------------------------------
# 一般
#------------------------------
> image(背景)
file: 画像/穂波部屋.png;
x: 0; y: 0; visible: true;
<

〜省略〜

> draw(黒塗り)
type: rect;
x: 0; y: 0; visible: true;
width: 800; height: 600;
color: 000000;
<

〜省略〜

#------------------------------
# 矢印
# x方向の間隔は53 / y方向の間隔は43
#------------------------------
> image(上矢印)
file: 画像/上矢印.png;
x: 582; y: 419; visible: false; <

〜省略〜

#------------------------------
# コマ
# x方向の間隔は53 / y方向の間隔は43
# 移動するときは、-5x-5で浮かせる
#------------------------------
> image(o1)
file: 画像/コマ/o1.png;
x: 582; y: 32; visible: false; <

〜省略〜

> group(コマ)
item: o1, o2, o3, o4, o5, b1, b2, b3, b4, b5; <

> place(カウント)
font: 丸ゴ黒;
x: 541; y: 18; visible: true;
<

#------------------------------
# サイコロ
#------------------------------
> image(dl_1)
file: 画像/サイコロ/サイコロ1.png;
x: 372; y: 314; visible: true; <

〜省略〜

> group(dice)
item: dl_1, dl_2, dl_3, dl_4, dl_5, dl_6, 
    dr_2, dr_3, dr_4, dr_5, dr_6, dr_1; <

〜省略〜

#------------------------------
# 穂波アップ1
# x: 172; y: 0; / x: 12; y:0;
#------------------------------
> image(hu01)    # 真顔
file: 画像/穂波アップ/HOBDA01.png;
x: 172; y: 0; visible: false; <

> image(hu02)    # 微笑み
file: 画像/穂波アップ/HOBDA02.png;
x: 172; y: 0; visible: false; <

> image(hu03)    # 柔らかい笑み
file: 画像/穂波アップ/HOBDA04.png;
x: 172; y: 0; visible: false; <

〜省略〜

#----------------------------------------
# テキスト、プレースホルダー
#----------------------------------------
> text(会話穂波)
text: 穂波;
font: 丸ゴ;
x: 100; y: 426; visible: true;
<

> text(会話拓也)
text: 拓也;
font: 丸ゴ;
x: 100; y: 426; visible: true;
<

> text(会話ゆのは)
text: ゆのは;
font: 丸ゴ;
x: 95; y: 426; visible: true;
<

> text(会話前回)
text: 〜前回のおさらい〜;
font: 丸ゴ;
x: 30; y: 426; visible: false;
<

# 30文字、3段までOK
> place(会話)
font: 丸ゴ;
x: 10; y: 494; visible: true;
duration: 0.04;
<

そして最後に、実際のシナリオと動作を記述する、scenario.txt:

# シナリオ

> scene(アイテム追加)
背景レイヤー: > add() <;
人物レイヤー: > add() <;
ボードレイヤー: > add() <;
移動レイヤー: > add() <;
効果レイヤー: > add() <;
会話背景レイヤー: > add() <;
会話レイヤー: > add() <;

背景: > add() layer: 背景レイヤー; <;
黒塗り: > add() layer: 効果レイヤー; <;
会話バー:
    > add() layer: 会話背景レイヤー; < ,
    > fade() type: in; sec: 0.5; < ;
名前バー:
    > add() layer: 会話背景レイヤー; < ,
    > fade() type: in; sec: 0.5; <;
会話:
    > add() layer: 会話レイヤー; <;
<

> scene(intro1)
before: アイテム追加;
会話穂波:
    > add() layer: 会話レイヤー; <;
会話:
    > set()
        text: 「……拓也くん。;
        text:  …………拓也くん。」;
    <,
    > wait() sec: 0.5; <,
    > act() sec: 0.32; <,
    > wait() sec: 2; <,
    > act() <,
    > wait() sec: 2; <;
<

> scene(intro2)
before: intro1;
会話穂波: > remove() <;
会話拓也: > add() layer: 会話レイヤー; <;
会話:
    > set()
        text:  穂波のやわらかい声が聞こえてくる。;
        text:  昨日はたしか、雪かきのバイトでヘトヘトになって;
        text:  わかばちゃんの家に帰って寝たはず。;
    <,
    > wait() sec: 0.5; <,
    > act() sec: 0.76; <,
    > wait() sec: 2; <,
    > act() <,
    > wait() sec: 4; <,
    > set()
        text:  夢でも見てるのかな?;
    <,
    > act() <,
    > wait() sec: 4; <;
<

> scene(intro3)
before: intro2;
会話穂波: > add() layer: 会話レイヤー; <;
会話拓也: > remove() <;
会話:
    > set()
        text: 「……拓也くん?;
        text:  ………………起きないといたずらしちゃいますよ?」;
    <,
    > wait() sec: 0.5; <,
    > act() sec: 0.32; <,
    > wait() sec: 2; <,
    > act() <,
    > wait() sec: 4; <;
<

> scene(intro4)
before: intro3;
名前バー: > remove() <;
会話穂波: > remove() <;
会話:
    > set()
        text:  ガバッ!;
        text:  慌てて飛び起きる。;
    <,
    > wait() sec: 0.5; <,
    > act() sec: 0.2; <,
    > wait() sec: 1; <,
    > act() <,
    > wait() sec: 2; <;
<

> scene(intro5)
before: intro4;
hb02: > add() layer: 背景レイヤー; <;
会話バー: > remove() <;
会話: > remove() <;
黒塗り:
    > fade() type: out; sec: 1; <,
    > wait() sec: 2; <,
    > remove() <;
<

> scene(intro6)
before: intro5;
名前バー:
    > add()
        layer: 会話背景レイヤー;
        visible: false; <,
    > fade() type: in; sec: 0.5; <;
会話バー:
    > add()
        layer: 会話背景レイヤー;
        visible: false;
    <,
    > fade() type: in; sec: 0.5;
    <;
会話:
    > add() layer: 会話レイヤー; < +
    > set() <;
<

> scene(intro7)
before: intro6;
会話穂波: > add() layer: 会話レイヤー; <;
会話:
    > set()
        text: 「拓也くん、おはよう。」;
    <,
    > wait() sec: 0.5; <,
    > act() <,
    > wait() sec: 4; <;
<

〜以下略〜

ちなみに、ルール説明のために矢印をスタートからゴールへ動かしたり(3:35付近〜)、サイコロを振ったり(4:35付近〜など)、ゲーム中に駒を動かしたり(11:55付近〜など)というのは、以下のような感じ:

# 矢印をスタートからゴールへ動かす

> scene(move_explain)
before: rule1;
矢印:
    > add() layer: 移動レイヤー; <,
    > wait() sec: 0.7; <,
    > move() dx: 0; dy: -387; sec: 1; <,
    > wait() sec: 0.2; <,
    > move() dx: 53; dy: 0; sec: 0.5; <,
    > wait() sec: 0.2; <,
    > move() dx: 0; dy: 387; sec: 1; <,
    > wait() sec: 0.2; <,
    > move() dx: 53; dy: 0; sec: 0.5; <,
    > wait() sec: 0.2; <,
    > move() dx: 0; dy: -387; sec: 1; <,
    > wait() sec: 0.2; <,
    > move() dx: 40; dy: 0; sec: 0.5; <,
    > wait() sec: 3; <,
    > remove() <,
    > wait() sec: 1; <;
上矢印:
    > fade() type: in; sec: 0.2; <,
    > wait() sec: 1.5; <,
    > fade() type: out; sec: 0.2; <,
    > wait() sec: 2.4; <, # 0.5+0.2+1+0.2+0.5
    > fade() type: in; sec: 0.2; <,
    > wait() sec: 1; <,
    > fade() type: out; sec: 0.2; <;
右矢印:
    > wait() sec: 1.7; <,
    > fade() type: in; sec: 0.2; <,
    > wait() sec: 0.5; <,
    > fade() type: out; sec: 0.2; <,
    > wait() sec: 1; <,
    > fade() type: in; sec: 0.2; <,
    > wait() sec: 0.5; <,
    > fade() type: out; sec: 0.2; <,
    > wait() sec: 1; <,
    > fade() type: in; sec: 0.2; <,
    > wait() sec: 2; <,
    > fade() type: out; sec: 0.2; <;
下矢印:
    > wait() sec: 2.4; <, # 0.2+0.5+1+0.2+0.5
    > fade() type: in; sec: 0.5; <,
    > wait() sec: 1; <,
    > fade() type: out; sec: 0.2; <;
<
# ダイスロール

> scene(rule10)
before: rule9;
dice: > add() layer: 効果レイヤー; <;
dl_1: > wait() sec: 0.1; <, > add() layer: 効果レイヤー; <;
dl_2: > wait() sec: 0.2; <, > add() layer: 効果レイヤー; <;
dl_3: > wait() sec: 0.5; <, > add() layer: 効果レイヤー; <;
dl_4: > wait() sec: 0.4; <, > add() layer: 効果レイヤー; <;
dl_5: > wait() sec: 0.6; <, > add() layer: 効果レイヤー; <;
dl_6: > wait() sec: 0.3; <, > add() layer: 効果レイヤー; <;
dr_1: > wait() sec: 0.3; <, > add() layer: 効果レイヤー; <;
dr_2: > wait() sec: 0.1; <, > add() layer: 効果レイヤー; <;
dr_3: > wait() sec: 0.6; <, > add() layer: 効果レイヤー; <;
dr_4: > wait() sec: 0.2; <, > add() layer: 効果レイヤー; <;
dr_5: > wait() sec: 0.4; <, > add() layer: 効果レイヤー; <;
dr_6: > wait() sec: 0.5; <, > add() layer: 効果レイヤー; <;
<
### 駒を動かす

> scene(replay14)
before: replay13;
o3:
    > remove() < + > add() layer: 移動レイヤー; <,
    > move() dx: -5; dy: -5; sec: 0.4; <, > wait() sec: 0.2; <,
    > move() dx: 0; dy: -43; sec: 0.4; <, > wait() sec: 0.2; <,
    > move() dx: 5; dy: 5; sec: 0.4; <, > wait() sec: 0.2; <;
カウント:
    > wait() sec: 1; <,
    > set() text: 1; < + > wait() sec: 0.6; <,
    > set() text:  ; <;
b4:
    > wait() sec: 1.6; <,
    > remove() < + > add() layer: 移動レイヤー; <,
    > move() x: 582; y: 419; sec: 0.4; <,
    > remove() < + > add() layer: ボードレイヤー; <;
b5:
    > wait() sec: 2; <,
    > remove() < + > add() layer: 移動レイヤー; <,
    > move() x: 542; y: 419; sec: 0.4; <
        + > fade() type: to; sec: 0.4; alpha: 0.5; <,
    > remove() < + > add() layer: ボードレイヤー; <,
    > wait() sec: 2; <;
<

> scene(replay15)
before: replay14;
会話:
    > act() <,
    > wait() sec: 4; <;
<

> scene(replay16)
before: replay15;
o2:
    > remove() < + > add() layer: 移動レイヤー; <,
    > move() dx: -5; dy: -5; sec: 0.4; <, > wait() sec: 0.2; <,
    > move() dx: 0; dy: -43; sec: 0.4; <, > wait() sec: 0.2; <,
    > move() dx: 0; dy: -43; sec: 0.4; <, > wait() sec: 0.2; <,
    > move() dx: 53; dy: 0; sec: 0.4; <, > wait() sec: 0.2; <,
    > move() dx: 5; dy: 5; sec: 0.4; <, > wait() sec: 0.2; <;
カウント:
    > wait() sec: 1; <,
    > set() text: 1; < + > wait() sec: 0.6; <,
    > set() text: 2; < + > wait() sec: 0.6; <,
    > set() text: 3; < + > wait() sec: 0.6; <,
    > set() text:  ; <;
b2:
    > wait() sec: 2.8; <,
    > remove() < + > add() layer: 移動レイヤー; <,
    > move() x: 582; y: 419; sec: 0.4; <,
    > remove() < + > add() layer: ボードレイヤー; <;
b4:
    > wait() sec: 3.2; <,
    > remove() < + > add() layer: 移動レイヤー; <,
    > move() x: 542; y: 376; sec: 0.4; <
        + > fade() type: to; sec: 0.4; alpha: 0.5; <,
    > remove() < + > add() layer: ボードレイヤー; <,
    > wait() sec: 2; <;
<

GUIでチマチマと動きをつけるとかなり大変だけど、スクリプトならサクッと書けるので、(比較的)楽チン。
(まぁ、いろいろと問題もあるんだけど・・・例えば、会話表示の適切な待ち時間を自分で指定しないといけなかったりとか)

ちなみに、scenario.txtは約3,000行。

そして、スクリプトを書いたら、あとはコマンドで動画を出力:

$ java -jar msc_console.jar -o output.mov config.txt item.txt scenario.txt
compile...
  configuration... OK
  item... OK
  scenario... OK
done.
output...
  scene progress... OK
  file output... OK
done.

これでoutput.movという名前で動画が書き出される。

ちなみに、JMFでの動画の出力方法がよく分からなかったので、かなり効率の悪い出力の仕方をしていて、そのせいでoutput.movのファイルサイズは1.7GBとかあったり(^^;
まぁ、実際にはH.264エンコードしてしまうので、そこまでアップ時のサイズはそれほどでもないんだけど。

今日はここまで!

コミックマーケット90の3日目に一般参加してきた。

その他

2日目に引き続き、3日目も一般参加してきたので、その話を。

f:id:yamaimo0625:20160816194712p:plain

なお、2日目の様子は以下から:

再び国際展示場へ!

せっかくなので、始発で行って、何時ぐらいに入れるのかをもう一度確認してみようと思ったのだけど、普通に起きれなかった(^^;
ということで、2日目と大差なく、11時半ちょっと前に国際展示場駅に到着。

3日目ということで、さすがに2日目ほどすんなりと入れるわけではなく、一応入場列に並んだ。

f:id:yamaimo0625:20160816194211p:plain

といっても、10分程度で普通に入場できた。
やはり、「これだ!」というお目当てのものがないのであれば、これくらいの時間に行くのがいいと思う。

自転車関係エリア

今日のお目当ては、西1ホールの自転車関係、西3, 4ホールのソフトウェア関係、東5ホールの創作関係。
あと、俗に言う薄い本がいくつかw
もっとも、薄い本は人気のサークルさんなので、入手できればラッキーかなくらいの感覚だけど。

どうやって回ろうかなと考えたのだけど、西から入場したので、2日目と同じように、西→東という順番で回ることにした。

ということで、まずは自転車関係エリアから。

この自転車関係エリアの配置が普段とちょっと違っていて、「れ」になっていた。
この「れ」というのは、島じゃなくて壁。
壁は列形成がしやすいので、人気の高いサークルが(あまりジャンル関係なく)配置されていくというのが普通なのだけど、今回はこの壁の一部のエリアに自転車関係が配置されていた。
これにはちょっとビックリ。
もっとも、そのせいなのか、配置されたサークル数自体は島に割り当てられたときよりも少なかったように思う・・・

自転車関係では、以下の同人誌をゲット。

f:id:yamaimo0625:20160816194736p:plain

  • 自転車女子はじめてみたらね、しまなみ自転車一人旅 総集編(CUTIE KIDS CLUBさん)
  • 自転車女子はじめてみたらね、沖縄八重山自転車旅(同上)
  • びわっこ三姉妹自転車旅行記 佐渡ロングライド2016(大塚志郎さん)
  • 腐ったオタクの自転車ライフ3 〜腐女子台湾最高峰の山を登る〜(脂華さん)
  • Spot Rider Vol.3(FlowerParkさん)※小笠原諸島ポタリングガイド

西1, 2ホールをブラブラ

自転車関係を一通り見たので、その周辺の島をブラブラと見たり。

ここで心惹かれたのが、数々の聖地巡礼レポート。
聖地巡礼レポートを見ると、そこへ自転車で行ってみたいなぁと思ったりするw

そんな中、「これは!」と思って手に取ったのが、これ。

f:id:yamaimo0625:20160816194756p:plain

「地元が聖地になった LocoDol Leaks 2016」(Wipe Out!さん)

アニメにもなった「ろこどる」は流山市(自宅からも結構近いw)がモデルになっているのだけど、そのときに実際に地元で起こったいろいろな問題(?)を地元民の実体験として書かれている。
非常に興味深かったので、購入。

他にも、歩いていたら、こんなステキ写真が。

f:id:yamaimo0625:20160816194809p:plain

「街角画像集 Vol.12 東京の夕景・夜景 2016 1st」(四条烏丸屋本舗さん)

思わず買ってしまった・・・w

他にも廃墟の写真集だとか、いろいろあって、素晴らしい。
こういったいろんな同人の存在をもっと多くの人が知ってくれればいいんだけど。

ただ、このままだと財布のお金がなくなるということで、切り上げて西2ホールへ。

西2ホールで目指したのは、skyclaymanさんの同人誌。

ただ、行く途中で、こんなすごいポスターが。

f:id:yamaimo0625:20160816194837p:plain

なんという書き込み・・・

ということで、1冊購入。

f:id:yamaimo0625:20160816194847p:plain

「TWINS」(マイナスガーデンさん)

これ、タイトルの通り、よく見ると全部顔が2つずつあるのね。

そして、skyclaymanさんのブースへ。
以下を購入:

f:id:yamaimo0625:20160816194859p:plain

  • I love I' 総集編(vol.1〜vol.4 + vol.5〜vol.6 + Hairy Heaven)
  • Lingeric Hand II

この人はホントに変態天才だと思うので、大好き。

ソフトウェア関係エリア

ここで西2ホールを離れて、西3, 4ホールのソフトウェア関係エリアへ。

いろいろ興味深いんだけど、全部をやれるわけではないので、当初の予定どおり、まつらリッチ研究所さんへ。

まつらリッチ研究所さんでは、以下をゲット:

f:id:yamaimo0625:20160816194916p:plain

  • Shell Script ライトクックブック 2014-2016 ーーWindows, Mac, UNIX, すべてで動くプログラムを書くーー
  • 解説Coreutils(第7開発セクションさん)
  • バブみある技術(第7開発セクションさん)

最近、Shell Scriptを書くことがあって、癖は強いけど、やはりコマンドを普通に使えるというのがめちゃくちゃ便利だと実感したので、必要な技術だなぁ、と。

あと、新刊が到着してなかったので、軽く眺めただけだったんだけど、ヲタMacさんが出展してたのには驚いたり。
マンガの更新がずっと昔に止まって、もうすっかり活動を止めたんだと思っていたのだけど、まだ活動してたのか・・・

創作関係エリア

このあとは東へ移動。

余談だけど、東への移動が時間かかった・・・
3日目はやはり人が多いから大変。

東ではまず薄い本をいくつかゲット。
壁サークルなので手に入れられるか分からなかったけど、意外となんとかなるものw
(ちなみに、東に着いたのが13時ちょっと前)

そして、東5ホールの創作関係のエリアへ。

創作関係エリアでは、哲学を扱ったものがあるかなぁと島を巡ったのだけど、ほとんど見つからず。
やはり哲学関係のサークルは少ない・・・
一つ見つけたサークルも、ウィトゲンシュタイン論理哲学論考を読むという同人誌を出してたんだけど、レジュメみたいな冊子で、自分の求めてるものとは違う感じ。
そういう「思想を勉強しました」っていうのじゃなくて、「哲学をしました」っていう本が読みたいんだけどなぁ。

そんな中、ICUさんのブースへ。
ICUさんは河村塔王さんのサークルで、趣向を凝らした小説などを出されている。
これが非常に面白い。

今回は、以下のものをゲット:

f:id:yamaimo0625:20160816194934p:plain

「星芒の消息」には、ビンに入った手紙が付属してきて、これが本文と関係してたりする。
そして、†は変わった構造の作りになっている本で、その構造自体が文章と非常に関係を持っている。

f:id:yamaimo0625:20160816194950p:plain

よくこういうのを思いつくなぁと脱帽w

あと、ちょっと変わったものも見つけたり。
何かというと、「語りべ少女ほのか」というアニメと、そのメイキングの冊子。

f:id:yamaimo0625:20160816195018p:plain

最初に目を取られたのは百合な冊子だったのだけど、その横にこのアニメも置いてあって、見れば、声優がなんと桑島法子さんとのこと!
このアニメは岩手県は遠野を舞台にしたもので、語りべ(見習い?)のほのかという少女が主人公になってる。
その縁なのかどうなのか、この主人公の声を桑島法子さんがやられている、と。
これはゲットせねばということで、早速ゲット。

ちなみに、動画自体はニコニコ動画にアップされてたw

普通にいい話なので、オススメ。


そんな感じで、コミックマーケット90は終了。
哲学関係の本に出会えなかったのは残念だったけど、それでもたくさん収穫があってよかったw

今日はここまで!

コミックマーケット90の2日目に一般参加してきた。

その他

コミックマーケット90の2日目に一般参加してきたので、そのレポート(?)

f:id:yamaimo0625:20160813180643p:plain

国際展示場へ!

さて、コミケというと、朝早くから待機列に並んで開場を待つもの、というイメージの人も多いだろうけど、必ずしもそんなことはない。
「大人気のサークル/企業さんの、これは絶対欲しいんだ!」というのがないのであれば、後からまったりと行くのがオススメだったりする。

例えば、今回、自分は11時半に国際展示場駅に到着したのだけど、待ち時間0分で入場できたw
いろんな時間から並び始めたことがあるけど、(ホントはアウトだけど)始発前の4時くらいからだと、確か10:05〜10:10くらい、始発で行って6時半くらいからだと、確か10:20〜30くらい、8時〜9時くらいから並び始めると、10:30〜11:00くらいで入れた気がする。
なので、時間対効果を考えるなら、11時とか11時半くらいになって待機列が落ち着いてから行った方が、断然いい。
どうせ、早く売り切れてしまうようなところは、早く行ってもシャッター組に勝てるかどうか分からないし、大手の企業だったら、1時間や2時間は誤差の内。
もちろん、あまりに遅いと、それはそれでダメだけど。

今回の導線

今回の導線でちょっと気になっていたのは、企業ブースへの行き方。

今回は、西ホール奥の屋外エリアが使えないということで、企業ブースは狭い西3, 4ホールではなく、広い西1, 2ホールを使うようになり、代わりに1, 2日目だけの出展となっていた。
そうなると、当然、西1, 2ホールへの太い導線が必要になってくる。
そこで、入口から入って西1, 2ホールへ直接向かうエスカレーターを利用するのではなく、西3, 4ホールへ向かう階段を一度登り、西3, 4ホールの周りをグルッと回って、スロープを下りていくような導線になっていたみたい。

f:id:yamaimo0625:20160813193004p:plain

ただ、行ったときにはちょうどその導線を切り替える作業をしていて(立て看板の矢印の向きを変えてた)、普通に入口から入ってエスカレーターを使って西1, 2ホールへ。
なので、自分は特に困ることはなかったんだけど、周りはどうだったのかな?

企業ブース

さて、そんなこんなで、さっそく企業ブースへ。

今回の自分のお目当ては、SHOW BY ROCK!!関係とろんぐらいだぁす!関係。
プラプラといろんなブースの展示を眺めつつ、それぞれのブースへと向かっていく。

まずは、ろんぐらいだぁす!のブースへ。
そこでは、もうイベントではお馴染みとなった、咲耶パカ店長がお出迎えw

f:id:yamaimo0625:20160813183822p:plain

可愛い!

その次は、SHOW BY ROCK!!関係ということで、サンリオ男子のブースへ。
ここではシアンがお出迎えw

f:id:yamaimo0625:20160813193206p:plain

可愛いなぁ!

そのあとは、これまたSHOW BY ROCK!!関係で、ポニーキャニオンへ。

とまぁ、自分がちゃんと見たのは、それくらい。

で、歩いてたら、いろんなコンパニオンさんがいるんだけど、すーぱーそに子のコスプレをしたコンパニオンさんがめちゃエロかった可愛かったので、これまた一枚パシャリと撮らせてもらった。

f:id:yamaimo0625:20160813193811p:plain

うーん、堪りませんなw

他、ちょっと気になったのは、これ。

f:id:yamaimo0625:20160813194257p:plain

えっ、丸井!?

なんかカードの宣伝をしてたみたい。
これにはちょっと驚き。

あと、すみぺこと上坂さんのブースが真っ赤だったり(※上坂さんはロシア大好き)、

f:id:yamaimo0625:20160813194418p:plain

真空管ドールズが企業出展してたり、

f:id:yamaimo0625:20160813194607p:plain

ばなにゃがいたりw

f:id:yamaimo0625:20160813194625p:plain

いろいろ面白いw

非電源ゲームエリア

そんな感じで企業ブースを一通り回ったら、東4ホールの非電源ゲームのエリアへ。

ちなみに、西3, 4ホールでは東方関係、東1ホールでは艦これ関係が集まってたのだけど、華麗にスルーw
昔だったら行ってただろうけど、資金も限られてるからねぇ・・・

非電源ゲームのエリアでは、いくつか知ってるサークルさんも出展してたけど、それほど数は多くなく。
島を一通り歩いてみたけど、やはりTRPGTCG、ウォーゲーム関係がコミケでは大多数を占めるようだった。
やはり冊子で展開できる方がコミケにはあってるのかもしれない。

そういう意味で、実は伝統ゲーム(もしくは、伝統ゲーム寄りの創作ゲーム)の方が、コミケには親和性が高いのかも。
なんせ、コンポーネントは市販されている一般的なものを使うので、ルールが書かれた冊子があれば頒布可能だから。
実際、今回、ドミノのルール集を出しているサークルさんがいて(だらだら部ゲーム分科会さん)、思わず買ってしまったw
(※狂道化さんの出した『ドミノたおさず。』とはまた別の冊子)

そんな中、大盛況だったのがEJIN研究所さん。
新作のサバイバルホラーボードゲーム「ハコオンナ」を引っさげての出展だったのだけど、自分が行ったときには島中ながら人混みが出来るほどの人気!
思わず、その盛況ぶりを写真に撮ってしまったw

f:id:yamaimo0625:20160813200707p:plain

いやー、「ハコオンナ」のポスターの迫力がとんでもない!
これは嫌でも気になるw

なお、自分は買ってないんだけど・・・
気にはなるけど、自分が「これ遊びましょうよ」と提案するかというと「?」なので、そういう場合、買わないようにしている・・・

まぁ、そんな感じで一通り回って、撤退。

戦利品

ということで、今回の戦利品はこちら。

f:id:yamaimo0625:20160813201400p:plain

ろんぐらいだぁす!のフェイスタオル、SHOW BY ROCK!!の冊子、CD(プラズマジカル★ミュージカル♪ by 魔法少女プラズマジカwww)、倒さない!ドミノルール集(無印、トリックテイキング編)と、数は少ないけど、厳選して購入したので、大満足!

あ、あと、コミックマーケット91のサークル参加申込書も買ってきたので、冬コミにはサークル参加する予定。

今日はここまで!

宝川温泉に輪行で行ってみた。

自転車

群馬県の水上にある、宝川温泉

とっても大きな露天風呂があるということで、すごく気になってた。

ただ、自宅から自走で行くとなると、かなり遠い。
片道160km強とか。
そいつはキツイなということで、輪行で行ってみることにした。

ルート

今回走ったのは、水上〜宝川温泉の約20km。

距離的には全然たいしたことない。
山を登るとはいえ、(ルートを見る限りでは)そんなにキツくなさそうだし、1時間くらいかな、と。

ちなみに、最初は、高崎とか渋川くらいまで電車で行き、そこから自転車を使うことを考えてた。
けど、例えば渋川〜水上を自転車で行くとなると、距離が約35kmなので、自分の脚だと2時間弱、追加で必要になる。
ところが、電車を使った場合、渋川〜水上は約40分で着いてしまうw

今回は温泉でまったりしたいと思っていたので、時間優先で水上まで電車を使うことにした。

自宅〜水上

最寄りの駅で自転車を輪行状態にするのが面倒だったので、自宅で輪行状態にして、最寄り駅までは車で。
そして、8時半頃に電車に乗って、いざ出発。

ここで早速のミスw
8:21の電車に乗っていれば、鈍行だけで11:35に水上に到着できたんだけど、その電車を逃していたので、そのまま行くと、到着が12:38に。
さすが山の方は電車の本数が少ない(^^;

これはアカンということで、急遽、特急を使うルートに変更。
大宮〜渋川は特急草津に乗ることにした。

ただ、この急行草津がクセ者で、初めて乗ったんだけど、出入り口がめっちゃ狭い
そのせいで、入り口で詰まった。。。
今後、急行や新幹線を使うときには気をつけないと。

そんなこんなで、まずは渋川に到着。
せっかくなので、記念写真w

f:id:yamaimo0625:20160731234614p:plain

そこからは上越線で水上まで。
渋川〜水上は車窓からの風景も素敵なので、もし行くことがぜひ見て欲しいな。

f:id:yamaimo0625:20160731235739p:plain
昔、上牧(かみもく)に行ったときに駅から撮った風景


f:id:yamaimo0625:20160801000310p:plain
上牧もいいところだったなぁ

水上到着

そんなこんなで、11時半頃に水上に到着。

さっそく輪行状態を解いて、いろいろ準備して、12時に水上駅を出発。

f:id:yamaimo0625:20160801000526p:plain

薄い上り下りをしつつ、大穴まで。
なんとここで、4人組のローディーが。
とくに話したりはしなかったけど、(スピードの関係で)道中一緒に行くことになったw

しばらくはほぼ平坦で、これなら何も問題ないかなぁと思ってたのも最初だけ。
栗沢の信号を過ぎたところから、ヤバい区間がw

栗沢〜藤原ダム

栗沢の信号のあとの登りがキツかった。
いや、クライマーなら何てことないんだろうけど、自分のように体重の重いおじさんライダーにはキツイw
脚は全然余裕なんだけど、心拍マックスでもうヘロヘロw
もうちょっと心肺を鍛えないとイカンよね。
(でも、あとでルートラボで見てみたら、部分的に平均斜度10%超えてた・・・)

そんな感じで、ヒーコラ言いながら藤原ダムに到着。

f:id:yamaimo0625:20160801002337p:plain

いやー、いい眺めw
自転車を脇に止めて、一休み。

しかし、ホントにキツイのは、この後だった・・・

藤原ダム〜新立岩トンネル

これは帰りに撮ったものだけど、藤原ダムの写真。

f:id:yamaimo0625:20160801002704p:plain

なんてことないような写真だけど、お分かりだろうか・・・

f:id:yamaimo0625:20160801003021p:plain

この登りである。

どれくらい信用できるか分からないのだけど、ルートラボで該当区間の斜度を見てみると、平均斜度約10%とかになってる。
おぉう・・・
距離こそ短かったので助かったけど、こいつはキツかった・・・

新立岩トンネル〜武尊(ほたか)トンネル

ただ、ホントにキツかったのは、藤原ダム〜新立岩トンネルまでと、さっきの栗沢直後の登りだけで、あとはほぼ平坦or下り。
奥多摩湖に行ったとき、トンネル内でひたすら登らされたので、トンネルがちょっと怖かったんだけど、そんなことはなかったので一安心。

新立岩トンネルを通った後は、ダム湖の横を気持ちよく走る。

平出神社のあたりからまた登り。
ルートラボで見てみると、平均斜度8%くらいあるけど、さっきまでの登りに比べれば大したことないので、余裕。
といっても、自分にはキツイので、一番軽いギヤでゆるゆると回すんだけどw

武尊トンネル〜宝川温泉

武尊トンネルを抜ければ、あとはほぼ下り。
ラーメン武尊の手前、水上藤原郵便局のところで道連れの4人組ローディーとも分かれて、宝川温泉へ。

橋を渡った後、宝川温泉まで最後の登りがあるけど、もうゴールは目前なので、そんなに気にならない。

f:id:yamaimo0625:20160801011527p:plain
めっちゃいい景色


f:id:yamaimo0625:20160801011535p:plain
水もびっくりするくらい透き通ってる

そしてとうとう、宝川温泉に到着!

f:id:yamaimo0625:20160801011641p:plain

着いたのが13時半頃だったので、大体1時間半弱かかったことになる。

宝川温泉

さて、到着したので自転車を止めなきゃということなんだけど、サイクルラックはなし。
適当なところに括り付けようと思ってたんだけど、受付の人が「こっちにどうぞ」って、建物の裏を案内してくれたので、そこに止めることにした。
ちなみに、このあと、温泉に入ってる間にちょっと小雨がふってきたんだけど、そしたら自転車の上に段ボールを掛けておいてくれたw
めちゃくちゃいい人達だったw

日帰り入浴だったので、1,500円。
それと、フェイスタオル(200円)とバスタオル(100円)をレンタル。

到着してお腹も空いてたので、さっそくご飯。
岩魚塩焼き定食(1,200円)を食べてみた。

f:id:yamaimo0625:20160801012816p:plain

いやー、これがまた絶品!
熱々に焼かれた魚が柔らかく、また、塩味もいい感じで、美味しい!

ちなみに、行くことが確定しているなら、日帰りプランもオススメ。
これだと、入浴料とレンタルタオル、それに岩魚塩焼き定食がついて、2,500円で済んでしまう。

お昼も済ませて、いよいよ温泉!

食堂を出て、曲がりくねった道を進むと、橋が見えてくる。

橋の向こうには、立派な宿が。

f:id:yamaimo0625:20160801013735p:plain

透き通った川がめちゃくちゃキレイ。

f:id:yamaimo0625:20160801013800p:plain

温泉はこの川の少し下流にあるので、橋は渡らずに、左に折れて進む。

そして、見えてきましたよ、大露天風呂!
と、それに入ってくつろいでる人々がw

そう、実は宝川温泉温泉と周りを区切るような壁とかは、ほとんどないwww
開放感100%www

というかまぁ、混浴だしね。(さらっと

脱衣所とかの様子を描いてみると、普通の温泉とは全然違うことが分かる。

f:id:yamaimo0625:20160801015433p:plain

普通、脱衣所って、入口と浴場への出口が違うわけだけど、宝川温泉の場合、同じw
入っていったところから出ていって、温泉に入るw
(脱衣所の意味、あるのかな・・・?)

ってなわけで、ぶっちゃけ丸見え。
その分、開放感は抜群で、まさに自然の中で温泉に浸かれる感じはすごくいい。
普通はどんなに景色がよくても壁で遮られちゃってるからね。

ちなみに、混浴ではあるけど、女性はタオルを巻いて入るんで、もろに見えたりはしないw
(そういうタオルを貸し出してるっぽい)
あと、普通は湯船にタオルはご法度だけど、そんな感じなので、男性も腰にタオル巻いてる場合が多い感じ。
別に巻かなくてもいいけどw

この温泉が最高なのなんのって、もう泳ぎたくなるレベルの広さなのね。
周りは自然に囲まれれて、湯船の中にもいい感じに腰掛けられる感じの岩が用意されてたり、ホント最高かよ!
上を見てみれば、モミジっぽかったので、秋に来たらまた格別なんだろうなぁと思った。

ただ、一つ注意が必要で、大自然の中だけあって、アブがすごかった(^^;
時期的なせいもあるだろうけど、夏場はちょっと気をつける必要があるかも。

さてさて、たっぷりと温泉を満喫したあとは、食堂に戻って、水を飲んだり。
この水もね、めちゃくちゃ美味しいの。
ゴクゴクと何杯でも飲めるw
あまりにいい感じだったので、許可をもらってボトルに入れさせてもらったw

帰路へ

少し小雨に降られたんだけど、すぐに止んだので、そこからは帰路へ。

帰りはラクチンなもんで、少し登るところはあったけど、ほとんど下り。
何もしなくても、勝手に進んでいくw
もちろん、雨上がりで、(一応ブレーキだけ105に替えてるけど)制動力にちょっと心配のあるTiagraなので、そんなにスピードは出さなかったけれど。

無事、水上駅に到着して、輪行状態にしたら、あとは電車に乗って、帰宅。
自転車に乗ってる時間は短かったけど、たっぷりと温泉を満喫できたので、とてもよかった。
また行きたいなw

今日はここまで!

トランプゲーム「トレセッテ」(2人用ルール)の紹介。

ゲーム

以前、iOSで遊ぶトリテのススメ。 - いものやま。でも少し紹介したのだけど、イタリアの伝統的なトランプゲームである「トレセッテ」の2人用のルールをちゃんと紹介してみたいと思う。

というのも、日本語で書かれている「トレセッテ」のルールは、4人用、もしくは、4人用のペア戦のものがほとんどだから。
この4人用のルールについては、『トランプゲーム大全』では「ゲーム会ではあまり評判がよくなかった。というのも、単に点数のあるカードをたくさん取ればいいだけだから」と、イマイチの評価。
けど、2人用のルールはめちゃくちゃ面白いと思うので、ぜひ2人用のルールを試してみてほしい。

カードの説明

トレセッテはイタリアの伝統的なトランプゲームなので、イタリアのカード構成を使う。

具体的には、使うカードは各スートの3、2、A、K、Q、J、7、6、5、4で、合計40枚。
カードの強さは、3 > 2 > A > K > Q > J > 7 > 6 > 5 > 4となっている。

カードにはそれぞれポイントがあって、このポイントを得るのがゲームの目的。

  • Aは1点
  • 3、2、K、Q、Jは1/3点(端数切り捨て)
  • 7、6、5、4は0点

一番点数の高いAが一番強いカードではない、というのが肝心なところ。
そこで、このAをいかに取ることが出来るのかという駆け引きが生まれてくる。

ディール

ディーラーはカードをよくシャッフルし、相手と自分に手札として10枚ずつカードを配る。
そして、残りの20枚は山札として裏向きのまま置いておく。

ディーラーの相手プレイヤーが最初のリードプレイヤーになる。

プレイ

リードプレイヤーから順に、カードを1枚ずつプレイする(これをトリックという):

  • リードプレイヤーは、どのカードをプレイしてもいい
  • 相手プレイヤーは、リードプレイヤーのプレイしたカードと同じスートのカードが手札にあれば、必ずそのスートのカードをプレイしなければならない。(マストフォロー)
    もしなければ、どのカードをプレイしてもいい。

カードが1枚ずつプレイされたら、強さを比べてトリックの勝者を決める:

  • 同じスートがプレイされたら、より強いカードをプレイした方がトリックの勝者
  • 違うスートがプレイされたら、リードプレイヤーがトリックの勝者

トリックの勝者は、プレイされた2枚のカードを獲得し、裏向きに伏せて自分の手元に置いておく。

もし、山札が残っている場合、トリックの勝者から順に、1枚ずつ手札の補充を行う。
山札からカードを1枚ドローして、相手プレイヤーにドローしたカードを見せてから、ドローしたカードを手札に加える。

そして、トリックの勝者が次のリードプレイヤーになり、次のトリックを行う。

これを、手札がなくなるまで繰り返す。

得点計算

手札がなくなったら、得点計算を行う。

それぞれのプレイヤーは獲得したカードのポイントを数え、そのポイント分の点数を得る。(端数切り捨て)
また、最後のトリックに勝ったプレイヤーは、追加で1点を得る。

得点は、チップなどで記録しておくといい。

もし、いずれかのプレイヤーの得点が21点以上になったら、ゲーム終了。
より得点の高いプレイヤーが、ゲームの勝者になる。

そうでなければ、ディーラーを交代し、次のディールを行う。


この2人用ルールのキモは、手札を補充するときに、ドローしたカードを相手に見せてから手札に加えるというところ。
このルール(とマストフォローのルール)があるおかげで、相手の手札のどのスートがなくなっているのかという情報が、ずっと保持されることになる。
なので、この情報をうまく使うことで(そして切り札がないということで)、「ずっと俺のターン!」を実現することが出来るというのがすごく面白い。
(逆に、「ずっと俺のターン!」をやられることもあって、そうなると「ぐぬぬ」となるので、それもまた楽しいw)
そして、マストフォローというルールがめちゃくちゃ効いてることも実感できる。

この2人用の「トレセッテ」のルールはホントによく出来ていて、少しでもルールを変えると、途端にほつれが出てくる。

具体的には、以下のとおり:

  • マストフォローをメイフォローに変えた場合
    • 相手の手札に関する情報がさっぱり引き出せなくなる
    • 相手のAを刈り取るといったことが出来なくなる
  • ドローしたカードをそのまま手札に加えるとした場合
    • ドローしたカードが分からないので、相手の手札のどのスートがなくなっているのかという情報が保持されなくなる
  • 切り札ありとした場合
    • 相手の手札の特定のスートがなくなっているという情報を使った「ずっと俺のターン!」が出来なくなる
  • 1点のカードをA以外に変えた場合
    • (ポイントがあってAより強いカード):(ポイントがあってAより弱いカード):(ポイントがないカード) = 2:3:4という絶妙なバランスが崩れる

そんな感じで、すべてのルールがうまい具合に働いているがホントに素晴らしい。

以前紹介したシュナプセンもいいゲームだけど、それよりも圧倒的にシンプルなルールで、ここまでしっかりと考えさせられるというのは、すごいと思う。

ちなみに、以前紹介した通り、この「トレセッテ」はiOSのアプリでも遊ぶことが出来る。

Tressette - Classic Card Games

Tressette - Classic Card Games

  • OutOfTheBit Ltd
  • ゲーム
  • 無料

なので、まずはアプリで試してみるのもありかもしれない。

今日はここまで!

トランプゲーム大全

トランプゲーム大全

ポーカーチップ (中) ゲーム小物

ポーカーチップ (中) ゲーム小物