<?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://soranoumi.net/diary/index.rdf">
	<title>滝谷日記</title>
	<link>http://soranoumi.net/diary/</link>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/" />
	<description>読書日記のようなもの</description>
	<dc:creator>滝谷無人</dc:creator>
	<dc:rights>Copyright 2010 滝谷無人, copyright of comments by respective authors</dc:rights>
	<items><rdf:Seq>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100908.html#p02"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100908.html#p01"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100815.html#p02"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100815.html#p04"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100815.html#p03"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100815.html#p01"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100728.html#p01"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100724.html#p01"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100601.html#p01"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100529.html#p01"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100528.html#p01"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100527.html#p02"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100527.html#p01"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100522.html#p03"/>
<rdf:li rdf:resource="http://soranoumi.net/diary/20100522.html#p02"/>
</rdf:Seq></items>
</channel>
<item rdf:about="http://soranoumi.net/diary/20100908.html#p02">
<link>http://soranoumi.net/diary/20100908.html#p02</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100908.html#p02" />
<dc:date>2010-09-09T05:21:23+09:00</dc:date>
<title>Barking / Underworld</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>音楽</dc:subject>
<description>Underworldのアルバム。上のを買ったついでにiTunesでアルバム買い。 噂通り歌成分強め。爽やかだったりもします。懐かしさもあり。期待以上。かなり好き。</description>
<content:encoded><![CDATA[<h3>Barking / Underworld</h3><p>Underworldのアルバム。上のを買ったついでにiTunesでアルバム買い。</p>
<p>噂通り歌成分強め。爽やかだったりもします。懐かしさもあり。期待以上。かなり好き。</p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B003SUP1L2/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/61PNk7fFoaL._SL160_.jpg"
height="160" width="160"
alt="" title="">
</a></p>
<p><a href="http://soranoumi.net/diary/20100908.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100908.html#p01">
<link>http://soranoumi.net/diary/20100908.html#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100908.html#p01" />
<dc:date>2010-09-09T03:24:12+09:00</dc:date>
<title>色彩のブルース / EGO-WRAPPIN’</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>音楽</dc:subject>
<description>夕食後、雨宿りも兼ねて近くの喫茶店に入って読書してる時に突然耳に入ってきた曲。懐かしさで一瞬金縛り。たしか「くちばしにチェリー」が収録されてるアルバム買って、すぐ「色彩のブルース」のミニアルバム？を買うべくCD屋に走った気がする。 あんまり懐かしかったので、読んでる本から顔上げて、なぜか音の発生源のスピーカーを探すという、ちょっと不審な動きをしてしまった。同じように明らかに曲に反応してる同年輩のおじさんおばさんが数人いて、ニンマリ。 それにしても曲の威力はすさまじく、しばらく昔の記憶から抜け出せなかった。この曲が発売された10年前を遥かに超えて、学生時代よく通ってた喫茶店の思い出があふれ出して苦しくなった。そういえばジャック・フィニィの小説に機械を使わないタイムトラベルする話があったのを思い出す。たしか、部屋などの環境を行きたい時代のものにして自己暗示で過去へ行く話。 家に帰りCD探したけど出てこなかったので、1曲だけiTunesで購入。 中森明菜、甲斐よしひろによってカバーされているのも聞いたけど、いまひとつ。ただ、Youtubeで見つけた韓国の女優さんが映画の中で歌うカバーは結..</description>
<content:encoded><![CDATA[<h3>色彩のブルース / EGO-WRAPPIN’</h3><p>夕食後、雨宿りも兼ねて近くの喫茶店に入って読書してる時に突然耳に入ってきた曲。懐かしさで一瞬金縛り。たしか「くちばしにチェリー」が収録されてるアルバム買って、すぐ「色彩のブルース」のミニアルバム？を買うべくCD屋に走った気がする。</p>
<p>あんまり懐かしかったので、読んでる本から顔上げて、なぜか音の発生源のスピーカーを探すという、ちょっと不審な動きをしてしまった。同じように明らかに曲に反応してる同年輩のおじさんおばさんが数人いて、ニンマリ。</p>
<p>それにしても曲の威力はすさまじく、しばらく昔の記憶から抜け出せなかった。この曲が発売された10年前を遥かに超えて、学生時代よく通ってた喫茶店の思い出があふれ出して苦しくなった。そういえばジャック・フィニィの小説に機械を使わないタイムトラベルする話があったのを思い出す。たしか、部屋などの環境を行きたい時代のものにして自己暗示で過去へ行く話。
<p>家に帰りCD探したけど出てこなかったので、1曲だけiTunesで購入。</p>
<p>中森明菜、甲斐よしひろによってカバーされているのも聞いたけど、いまひとつ。ただ、Youtubeで見つけた韓国の女優さんが映画の中で歌うカバーは結構好き。歌っているのはキム・へスという人らしい。真木よう子と広田玲央名と余貴美子をたして3で割ったような感じな人。日本語で歌ってます。</p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00005HMAN/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/41VVVJHCJ7L._SL160_.jpg"
height="160" width="160"
alt="" title="">
</a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4042735010/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/51CCTJ81JFL._SL160_.jpg"
height="160" width="114"
alt="" title="">
</a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4042735029/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/51CX77K0T4L._SL160_.jpg"
height="160" width="113"
alt="" title="">
</a></p>
<p><a href="http://soranoumi.net/diary/20100908.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100815.html#p02">
<link>http://soranoumi.net/diary/20100815.html#p02</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100815.html#p02" />
<dc:date>2010-08-16T01:11:27+09:00</dc:date>
<title>「花屋の娘」と「若者のすべて」 / フジファブリック</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>音楽</dc:subject>
<description>ここしばらく買おうか買うまいか迷い続けているフジファブリックの最新アルバム「MUSIC」。といってもフジファブリックの事は全く知らず、辛うじてバンド名を知っているだけの状態。きっかけはテレビ東京の変な時間帯（夜のニュース番組「ワールドビジネスサテライト」の後のスポーツ番組の後）にやっているドラマ24「モテキ」の主題歌になっている「夜明けのBEAT」。iTunesで買えないので先日Perfumeの「VOICE」買いに行ったときについでに買おうかと一旦は思いましたが、1曲の為にアルバムは冒険過ぎるかなと思い断念。YouTubeで聴いたのが「夜明けのBEAT」と「銀河」だけだったので。「銀河」パンチ効いてるし。 で、昨日サカナクションの曲をiTunesで買ったときに、「MUSIC」以外の曲は購入できることがわかり、本日YouTubeで探索開始。 数曲聴いたけど今ひとつぴんとこない。が、ついに見つけた、どストライク、「花屋の娘」。かっこよすぎて鳥肌たったよ。大好きな曲があると確信がもてたので、丁寧に再探索。イントロではじいてしまっていた「若者のすべて」をちゃんと聞いたら、泣いちまった。 「..</description>
<content:encoded><![CDATA[<h3>「花屋の娘」と「若者のすべて」 / フジファブリック</h3><p>ここしばらく買おうか買うまいか迷い続けているフジファブリックの最新アルバム「MUSIC」。といってもフジファブリックの事は全く知らず、辛うじてバンド名を知っているだけの状態。きっかけはテレビ東京の変な時間帯（夜のニュース番組「ワールドビジネスサテライト」の後のスポーツ番組の後）にやっているドラマ24「モテキ」の主題歌になっている「夜明けのBEAT」。iTunesで買えないので先日Perfumeの「VOICE」買いに行ったときについでに買おうかと一旦は思いましたが、1曲の為にアルバムは冒険過ぎるかなと思い断念。YouTubeで聴いたのが「夜明けのBEAT」と「銀河」だけだったので。「銀河」パンチ効いてるし。</p>
<p>で、昨日サカナクションの曲をiTunesで買ったときに、「MUSIC」以外の曲は購入できることがわかり、本日YouTubeで探索開始。</p>
<p>数曲聴いたけど今ひとつぴんとこない。が、ついに見つけた、どストライク、「花屋の娘」。かっこよすぎて鳥肌たったよ。大好きな曲があると確信がもてたので、丁寧に再探索。イントロではじいてしまっていた「若者のすべて」をちゃんと聞いたら、泣いちまった。</p>
<p>「Sugar!!」とか他にも買いそうな予感がしますが、とりあえず2曲購入して昼から延々聴いてます。</p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00009PNC0/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/21JKHR6PNML._SL160_.jpg"
height="130" width="130"
alt="" title="">
</a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/B003G88FNC/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/41wfFXiVklL._SL160_.jpg"
height="158" width="160"
alt="" title="">
</a></p>
<p><a href="http://soranoumi.net/diary/20100815.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100815.html#p04">
<link>http://soranoumi.net/diary/20100815.html#p04</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100815.html#p04" />
<dc:date>2010-08-16T01:09:30+09:00</dc:date>
<title>LaTeX2e 美文書作成入門 改訂第5版 / 奥村晴彦</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>本</dc:subject>
<description>平台で見つけたので、つい購入。特に使う予定は無いけれど。第3版以来かな、買うの。 相変わらず親切な説明。インストールがとんでもなく簡単になっていてびっくり（時間はかなりかかりますけど）。TeXWorksが便利。</description>
<content:encoded><![CDATA[<h3>LaTeX2e 美文書作成入門 改訂第5版 / 奥村晴彦</h3><p>平台で見つけたので、つい購入。特に使う予定は無いけれど。第3版以来かな、買うの。</p>
<p>相変わらず親切な説明。インストールがとんでもなく簡単になっていてびっくり（時間はかなりかかりますけど）。TeXWorksが便利。</p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/9784774143194/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/41%2BUKxd5w8L._SL160_.jpg"
height="160" width="127"
alt="" title="">
</a></p>
<p><a href="http://soranoumi.net/diary/20100815.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100815.html#p03">
<link>http://soranoumi.net/diary/20100815.html#p03</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100815.html#p03" />
<dc:date>2010-08-16T00:59:51+09:00</dc:date>
<title>おおきく振りかぶって 15巻 / ひぐちアサ</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>本</dc:subject>
<description>高校野球を見ていて、新刊出たかな?と思ったら2ヶ月も前に15巻でてました。唯一買い続けているコミックなのに・・・ 相変わらず安定したおもしろさ。「たった1人の選手」はどの程度ストーリーに関わってくるんだろう。監督の過去というくくりだとかなり引っ張ってるからな。楽しみ。</description>
<content:encoded><![CDATA[<h3>おおきく振りかぶって 15巻 / ひぐちアサ</h3><p>高校野球を見ていて、新刊出たかな?と思ったら2ヶ月も前に15巻でてました。唯一買い続けているコミックなのに・・・</p>
<p>相変わらず安定したおもしろさ。「たった1人の選手」はどの程度ストーリーに関わってくるんだろう。監督の過去というくくりだとかなり引っ張ってるからな。楽しみ。</p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/9784063106701/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/51ahUdql%2BZL._SL160_.jpg"
height="160" width="113"
alt="" title="">
</a></p>
<p><a href="http://soranoumi.net/diary/20100815.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100815.html#p01">
<link>http://soranoumi.net/diary/20100815.html#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100815.html#p01" />
<dc:date>2010-08-15T05:51:06+09:00</dc:date>
<title>アイデンティティ / サカナクション</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>音楽</dc:subject>
<description>テレビ東京「JAPAN COUNTDOWN」で 「ROCK IN JAPAN FESTIVAL2010」ライブ映像見て、即購入。「どおしてぇーえーええー」のやつ。PVのパチンコ玉の形をした溢れ出る後悔の涙もいい。  「アイデンティティ」と一緒に、3rdアルバム「シンシロ」の曲「ネイティブダンサー」も購入。このアルバムの発売時にナタリーのインタビューで「フォークテクノバンド」みたいな気持ちでいるとボーカルの人が言ってるけど、なるほどなぁ。まさにそんな感じ。今日はとりあえず2曲だけ買ったけど、まだまだ買ってしまうかも。</description>
<content:encoded><![CDATA[<h3>アイデンティティ / サカナクション</h3><p>テレビ東京「JAPAN COUNTDOWN」で 「ROCK IN JAPAN FESTIVAL2010」ライブ映像見て、即購入。「どおしてぇーえーええー」のやつ。PVのパチンコ玉の形をした溢れ出る後悔の涙もいい。</p>
<p><object width="580" height="360"><param name="movie" value="http://www.youtube.com/v/1awua0YrSRs?fs=1&amp;hl=ja_JP&amp;border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/1awua0YrSRs?fs=1&amp;hl=ja_JP&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="580" height="360"></embed></object></p>
<p>「アイデンティティ」と一緒に、3rdアルバム「シンシロ」の曲「ネイティブダンサー」も購入。このアルバムの発売時にナタリーのインタビューで「フォークテクノバンド」みたいな気持ちでいるとボーカルの人が言ってるけど、なるほどなぁ。まさにそんな感じ。今日はとりあえず2曲だけ買ったけど、まだまだ買ってしまうかも。</p>
<p><object width="445" height="364"><param name="movie" value="http://www.youtube.com/v/zo4JPwCdXTU?fs=1&amp;hl=ja_JP&amp;border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/zo4JPwCdXTU?fs=1&amp;hl=ja_JP&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="445" height="364"></embed></object></p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B003NB98WY/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/61mAeHYk7yL._SL160_.jpg"
height="159" width="160"
alt="" title="">
</a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/B001LKQNUY/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/31832EVq5vL._SL160_.jpg"
height="159" width="160"
alt="" title="">
</a></p>
<p><a href="http://soranoumi.net/diary/20100815.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100728.html#p01">
<link>http://soranoumi.net/diary/20100728.html#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100728.html#p01" />
<dc:date>2010-07-28T14:19:01+09:00</dc:date>
<title>VOICE 公式PV - Perfume</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>音楽</dc:subject>
<description>どうやら昨日、公式PV（ショートバージョン）がYouTubeで公開された模様。</description>
<content:encoded><![CDATA[<h3>VOICE 公式PV - Perfume</h3><p>どうやら昨日、公式PV（ショートバージョン）がYouTubeで公開された模様。</p>
<p><object width="580" height="360"><param name="movie" value="http://www.youtube.com/v/XLMgoHgXF1g&amp;hl=ja_JP&amp;fs=1?border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/XLMgoHgXF1g&amp;hl=ja_JP&amp;fs=1?border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="580" height="360"></embed></object></p>
<p><a href="http://soranoumi.net/diary/20100728.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100724.html#p01">
<link>http://soranoumi.net/diary/20100724.html#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100724.html#p01" />
<dc:date>2010-07-26T13:29:06+09:00</dc:date>
<title>VOICE - Perfume</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>音楽</dc:subject>
<description>来月発売されるPerfumeの新曲「VOICE」PVを、噂の流出動画で見ました。 PVは、今年東京ドームで公演をする人たちのものとは思えないほど地味でお金かかってなさそうです。capsuleのグライダー並み。好きですけどね。 で、肝心の曲ですが、初めて聴いた時は「あれっ?なんか控えめ」な印象だったのですが、聴けば聴くほど好きになりました。この一見地味かなと思いきや圧倒的に好きになる度合いは、少し前のアルバム「GAME」の「シークレットシークレット」やcapsuleの「グライダー」に匹敵します。確実に体温が上がる感じとかちょっと泣ける感じもあります。もちろんかっこいいもあり。壮大さもあり。YMOの「YOU'VE GOT TO HELP YOURSELF / 以心電信」風味もあり。久々に大好きな曲。やっぱりPerfumeいいわ。 そういえばこの曲1人で歌っている箇所がないような気がする。これまでだとAメロBメロの部分で個人パートがあるのが常だったのに。エフェクトや人間業ではないコーラスがあまりない素直な、珍しく歌うのに適した曲。多少歌唱力に難がある人がいたとしても、ごまかせるというかな..</description>
<content:encoded><![CDATA[<h3>VOICE - Perfume</h3><p>来月発売されるPerfumeの新曲「VOICE」PVを、噂の流出動画で見ました。</p>
<p>PVは、今年東京ドームで公演をする人たちのものとは思えないほど地味でお金かかってなさそうです。capsuleのグライダー並み。好きですけどね。</p>
<p>で、肝心の曲ですが、初めて聴いた時は「あれっ?なんか控えめ」な印象だったのですが、聴けば聴くほど好きになりました。この一見地味かなと思いきや圧倒的に好きになる度合いは、少し前のアルバム「GAME」の「シークレットシークレット」やcapsuleの「グライダー」に匹敵します。確実に体温が上がる感じとかちょっと泣ける感じもあります。もちろんかっこいいもあり。壮大さもあり。YMOの「YOU'VE GOT TO HELP YOURSELF / 以心電信」風味もあり。久々に大好きな曲。やっぱりPerfumeいいわ。</p>
<p>そういえばこの曲1人で歌っている箇所がないような気がする。これまでだとAメロBメロの部分で個人パートがあるのが常だったのに。エフェクトや人間業ではないコーラスがあまりない素直な、珍しく歌うのに適した曲。多少歌唱力に難がある人がいたとしても、ごまかせるというかなんとかなるというか。歌い方も少し変わったような気がする。</p>
<p>もしかしたら、ひょっとすると、ついに、曲始めの数フレーズだけじゃなく1曲まるまる生歌のPerfumeをテレビで見れるのか？ 「踊るPerfume」から「歌うPerfume」に生まれ変わるのか？タイトルもVOICEだし、ひょっとするとひょっとするかも。</p>
<p>というわけで、一年前に立てた「シングルはもう買わない」の誓いはあっさり破り捨て8月11日に必ず買います。</p>
<p><a href="http://www.amazon.jp/VOICE-%E5%88%9D%E5%9B%9E%E9%99%90%E5%AE%9A%E7%9B%A4-DVD%E4%BB%98-Perfume/dp/B003RITVJ8%3FSubscriptionId%3D17YY4RH3N5K3CNPJCC82%26tag%3Dtongpoonikki-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB003RITVJ8"><img class="amazon" src="http://ecx.images-amazon.com/images/I/41oSSIf7ufL._SL160_.jpg"
height="158" width="160"
alt="" title="">
</a> <a href="http://www.amazon.jp/VOICE-%E9%80%9A%E5%B8%B8%E7%9B%A4-Perfume/dp/B003RITVJI%3FSubscriptionId%3D0JMD40C8FKA06V74BX82%26tag%3Dtongpoonikki-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB003RITVJI"><img class="amazon" src="http://ecx.images-amazon.com/images/I/51CgC%2BriuWL._SL160_.jpg"
height="158" width="160"
alt="" title="">
</a></p>
<p><a href="http://soranoumi.net/diary/20100724.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100601.html#p01">
<link>http://soranoumi.net/diary/20100601.html#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100601.html#p01" />
<dc:date>2010-06-02T01:18:17+09:00</dc:date>
<title>雷桜 - 宇江佐真理</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>本</dc:subject>
<description>数ヶ月前「雷桜」の映画のCMを見かけ誰が書いた時代小説なのか気になって調べたところ宇江佐真理さんの作品であることが判明。が、品切れのようで書店に置いてないしAmazonにもないので図書館で借りた。  江戸から三日を要する山間の村で、生まれて間もない庄屋の一人娘、遊が、雷雨の晩に何者かに掠われた。手がかりもつかめぬまま、一家は失意のうちに十数年を過ごす。その間、遊の二人の兄は逞しく育ち、遊の生存を頑なに信じている次兄の助次郎は江戸へ出、やがて御三卿清水家の中間として抱えられる。が、お仕えする清水家の当主、斉道は心の病を抱え、屋敷の内外で狼藉を繰り返していた…。遊は、“狼少女”として十五年ぶりに帰還するのだが―。運命の波に翻弄されながら、愛に身を裂き、凛として一途に生きた女性を描く、感動の時代長編。    [内容（「BOOK」データベースより）より引用]  満点。甘く、優しく、美しい。至福の読書タイムでした。 主人公の遊と清水家の若当主・斉道の悲恋はもちろん重要なのだけれど、あくまでメインは遊の生きざま。他にも瀬田村の遊の家族や清水家の当主と家臣の描き方とか、遊の失踪の謎など、隅々まで..</description>
<content:encoded><![CDATA[<h3>雷桜 - 宇江佐真理</h3><p>数ヶ月前「雷桜」の映画のCMを見かけ誰が書いた時代小説なのか気になって調べたところ宇江佐真理さんの作品であることが判明。が、品切れのようで書店に置いてないしAmazonにもないので図書館で借りた。</p>
<blockquote cite="http://www.amazon.co.jp/gp/product/404373901X/ref=s9_simh_gw_p14_i1?pf_rd_m=AN1VRQENFRJN5&amp;pf_rd_s=center-1&amp;pf_rd_r=0KWY6H2ZH1MZJ1K28AQ9&amp;pf_rd_t=101&amp;pf_rd_p=463376736&amp;pf_rd_i=489986" title="内容（「BOOK」データベースより）">
<p>江戸から三日を要する山間の村で、生まれて間もない庄屋の一人娘、遊が、雷雨の晩に何者かに掠われた。手がかりもつかめぬまま、一家は失意のうちに十数年を過ごす。その間、遊の二人の兄は逞しく育ち、遊の生存を頑なに信じている次兄の助次郎は江戸へ出、やがて御三卿清水家の中間として抱えられる。が、お仕えする清水家の当主、斉道は心の病を抱え、屋敷の内外で狼藉を繰り返していた…。遊は、“狼少女”として十五年ぶりに帰還するのだが―。運命の波に翻弄されながら、愛に身を裂き、凛として一途に生きた女性を描く、感動の時代長編。 </p>

</blockquote>
<p class="source">[<cite><a href="http://www.amazon.co.jp/gp/product/404373901X/ref=s9_simh_gw_p14_i1?pf_rd_m=AN1VRQENFRJN5&amp;pf_rd_s=center-1&amp;pf_rd_r=0KWY6H2ZH1MZJ1K28AQ9&amp;pf_rd_t=101&amp;pf_rd_p=463376736&amp;pf_rd_i=489986" title="内容（「BOOK」データベースより）より引用">内容（「BOOK」データベースより）</a></cite>より引用]</p>

<p>満点。甘く、優しく、美しい。至福の読書タイムでした。</p>
<p>主人公の遊と清水家の若当主・斉道の悲恋はもちろん重要なのだけれど、あくまでメインは遊の生きざま。他にも瀬田村の遊の家族や清水家の当主と家臣の描き方とか、遊の失踪の謎など、隅々まですばらしい。中盤の初めあたりからじんわりと目が潤みっぱなし。涙が零れ落ちるほどではなく、終始潤んでいる感じ。具体的に書くと、斉道が遊の兄・助次郎を家臣に取り立てる場面、遊と遊の母・たえが梅干を作る場面、遊と遊の兄嫁・初の和解の場面とかあげたらきりがないほど。</p>
<p>「雷桜」前後の作品を単行本で多く読んでいた頃なのに、なんで見落としてしまったのか今となっては不明。もしかしたらファンタジー過ぎると敬遠してしまったのかもしれない。ディズニー映画にありそうなきれいなお話と思ったのであながちはずれてはいませんが。</p>
<p>尚、本書を読むきっかけとなった映画（のCM）の情報を少し。今年の10月22日に封切。主なキャストは、斉道（岡田将生）、遊（蒼井優）、助次郎（小出恵介）、榎戸角之進・清水家用人（柄本明）。斉道はご乱心の若当主っぽくはある。遊は少々薹が立っているのと女性らしすぎるような。というか、なぜ遊の名前が最初じゃないんだ？一番の問題は物語上重要な人物ではあるが登場場面はほとんどないはずの役に時任三郎が配役されていること。</p>
<blockquote cite="http://news.ameba.jp/eigacom/2010/03/61515.html" title="蒼井優、「雷桜」で初共演・岡田将生の新たな魅力を開拓 - Ameba News [アメーバニュース]">
<p>時代小説ながら女性読者からの支持を獲得し、発行部数10万部を突破した原作を、「余命1ヶ月の花嫁」の廣木隆一監督とTBSの平野隆プロデューサーが再タッグを組む。</p>

</blockquote>
<p class="source">[<cite><a href="http://news.ameba.jp/eigacom/2010/03/61515.html" title="蒼井優、「雷桜」で初共演・岡田将生の新たな魅力を開拓 - Ameba News [アメーバニュース]より引用">蒼井優、「雷桜」で初共演・岡田将生の新たな魅力を開拓 - Ameba News [アメーバニュース]</a></cite>より引用]</p>

<p>うわ、NGワードがいっぱい。トレーラー見ましたがやはり不安。2時間弱に納めなければいけないわけだから後半悲恋話をメインにせざるを得ないのはなのはわかるが・・・原作というよりかぎりなく原案な扱いなのかも。ダメ映画臭がぷんぷんする。というわけで残念ながら期待値は0。</p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/404373901X/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/51J43W7VPYL._SL160_.jpg"
height="160" width="111"
alt="" title="">
</a></p>
<p><a href="http://soranoumi.net/diary/20100601.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100529.html#p01">
<link>http://soranoumi.net/diary/20100529.html#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100529.html#p01" />
<dc:date>2010-05-29T03:01:13+09:00</dc:date>
<title>世界卓球2010 女子準々決勝 日本 × 韓国</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>スポーツ</dc:subject>
<description>平野早矢香選手の第1試合は残念ながら見逃してしまいましたが、福原愛選手の第2試合途中以降見ました。 5時間にも及ぶ大接戦、大熱戦。韓国のキム・キョンア選手の強さというかしぶとさに苦しめ続けられました。平野早矢香選手、福原愛選手とももうほんの少しだったのに・・・。でもよくがんばった。 この試合で一番心震えたのはやはり、第3試合。石川佳純選手が2ゲーム落としてからの大逆転劇。よー頑張った。おっちゃん泣いたよ。 結局平野早矢香選手・福原愛選手・石川佳純選手とも1勝しての準決勝進出。めでたい。次は男子・女子とも中国戦。厳しいとは思いますが頑張ってください。 あとテレビ東京さん。お願いだから今日みたいに途中で放送終了はやめてね。</description>
<content:encoded><![CDATA[<h3>世界卓球2010 女子準々決勝 日本 × 韓国</h3><p>平野早矢香選手の第1試合は残念ながら見逃してしまいましたが、福原愛選手の第2試合途中以降見ました。</p>
<p>5時間にも及ぶ大接戦、大熱戦。韓国のキム・キョンア選手の強さというかしぶとさに苦しめ続けられました。平野早矢香選手、福原愛選手とももうほんの少しだったのに・・・。でもよくがんばった。</p>
<p>この試合で一番心震えたのはやはり、第3試合。石川佳純選手が2ゲーム落としてからの大逆転劇。よー頑張った。おっちゃん泣いたよ。</p>
<p>結局平野早矢香選手・福原愛選手・石川佳純選手とも1勝しての準決勝進出。めでたい。次は男子・女子とも中国戦。厳しいとは思いますが頑張ってください。</p>
<p>あとテレビ東京さん。お願いだから今日みたいに途中で放送終了はやめてね。</p>
<p><a href="http://soranoumi.net/diary/20100529.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100528.html#p01">
<link>http://soranoumi.net/diary/20100528.html#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100528.html#p01" />
<dc:date>2010-05-29T00:55:51+09:00</dc:date>
<title>ボナンザVS勝負脳―最強将棋ソフトは人間を超えるか 保木邦仁, 渡辺明</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>本</dc:subject>
<description>読了。  ２００７年３月２１日、若きタイトルホルダーと最強コンピュータの歴史的一戦。多くの人の予想を裏切り、あと一歩というところまで攻め込んだ「ボナンザ」。どのようにしてこの最強ソフトは生まれたのか？   [ボナンザVS勝負脳: 書籍: 保木邦仁　渡辺明 | 角川書店・角川グループより引用]  探索アルゴリズムについては全幅探索ということなので「リバーシのアルゴリズム」でも解説されていたミニマックス法に枝刈りの手法（alpha-beta法など）を組み合わせたものであることは本書を読む前から予想できていたので、個人的には評価関数について知りたかったのだけれどあまり書かれていなくて残念でした。 予想以上に面白かったのが渡辺明竜王のパート。プロ棋士からみた従来のコンピュータ将棋とボナンザの差、ボナンザの癖、コンピュータ将棋の今後の予想など。あと、プロ棋士が対局前にどう準備し研究をつづけているのかなど。将棋読み物として面白かったです。 日本将棋連盟への挑戦状で少し前に話題になりましたが、プロ棋士とコンピュータ将棋の対局が、今秋再び行われるそうです。相手は清水市代女流二冠。対戦するコンピュー..</description>
<content:encoded><![CDATA[<h3>ボナンザVS勝負脳―最強将棋ソフトは人間を超えるか 保木邦仁, 渡辺明</h3><p>読了。</p>
<blockquote cite="http://www.kadokawa.co.jp/book/bk_detail.php?pcd=200704000327" title="ボナンザVS勝負脳: 書籍: 保木邦仁　渡辺明 | 角川書店・角川グループ">
<p>２００７年３月２１日、若きタイトルホルダーと最強コンピュータの歴史的一戦。多くの人の予想を裏切り、あと一歩というところまで攻め込んだ「ボナンザ」。どのようにしてこの最強ソフトは生まれたのか？</p>

</blockquote>
<p class="source">[<cite><a href="http://www.kadokawa.co.jp/book/bk_detail.php?pcd=200704000327" title="ボナンザVS勝負脳: 書籍: 保木邦仁　渡辺明 | 角川書店・角川グループより引用">ボナンザVS勝負脳: 書籍: 保木邦仁　渡辺明 | 角川書店・角川グループ</a></cite>より引用]</p>

<p>探索アルゴリズムについては全幅探索ということなので「リバーシのアルゴリズム」でも解説されていたミニマックス法に枝刈りの手法（alpha-beta法など）を組み合わせたものであることは本書を読む前から予想できていたので、個人的には評価関数について知りたかったのだけれどあまり書かれていなくて残念でした。</p>
<p>予想以上に面白かったのが渡辺明竜王のパート。プロ棋士からみた従来のコンピュータ将棋とボナンザの差、ボナンザの癖、コンピュータ将棋の今後の予想など。あと、プロ棋士が対局前にどう準備し研究をつづけているのかなど。将棋読み物として面白かったです。</p>
<p>日本将棋連盟への挑戦状で少し前に話題になりましたが、プロ棋士とコンピュータ将棋の対局が、今秋再び行われるそうです。相手は清水市代女流二冠。対戦するコンピュータ将棋は、ご近所電気通信大学の方も開発に携わっているらしい合議アルゴリズム「文殊」に各種コンピュータ将棋の予定（単独のほうが強ければ、単独の可能性もあり）。今回もし勝てば、今後プロ四段からトッププロ、最終的には名人か竜王と対戦もあるかもしれないそうで、今から楽しみです。</p>
<p><a href="http://homepage1.nifty.com/ta_ito/ito-lab/gougi/gougi.html">合議システムと文殊</a><br>
<a href="http://www.ipsj.or.jp/03somu/shogi/FAQ.html">挑戦状に関するFAQ</a></p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/9784047101074/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/41xq9NSAI5L._SL160_.jpg"
height="160" width="100"
alt="" title="">
</a></p>
<p><a href="http://soranoumi.net/diary/20100528.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100527.html#p02">
<link>http://soranoumi.net/diary/20100527.html#p02</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100527.html#p02" />
<dc:date>2010-05-28T02:13:31+09:00</dc:date>
<title>「リバーシのアルゴリズム」をRubyで その8</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>Ruby</dc:subject>
<description>一通り実装し終わったので、本書の感想など。  思考プログラムの基本が紹介されている 本書は200ページの薄い本ではありますが、思考ゲームプログラミングの入門として必要不可欠な要素を広く薄く紹介しています。解説は詳しくはないし私にはわかりにくかったですが、言及はされているので自分で調べる際に助かりました。ただ、機械学習については紹介されていません。 誤植や実装漏れが比較的多い（特にJava) 出版元の工学社には本書のサポートページがありません。ですが、著者によるサポートページがあり、そこに正誤表や参考文献が載っています。 著者によるサポートページ: 「リバーシのアルゴリズム」補足 本書の表紙には「C++Java対応」とありますが筆者の方はC++で作成しているらしく、Javaのコードの方に正誤表に載っていない誤植や実装漏れが目立ちます。私が持っているのは第1版第3刷ですが修正されていませんでした。  いろいろ文句を書きましたが入門書としては良い本であると思います。値段も安いですし。 本書の他に特に役立ったのが以下のページ  リバーシプログラムの作り方 サンプル あと、Rubyで書くに当..</description>
<content:encoded><![CDATA[<h3>「リバーシのアルゴリズム」をRubyで その8</h3><p>一通り実装し終わったので、本書の感想など。</p>
<dl>
<dt>思考プログラムの基本が紹介されている</dt>
<dd>本書は200ページの薄い本ではありますが、思考ゲームプログラミングの入門として必要不可欠な要素を広く薄く紹介しています。解説は詳しくはないし私にはわかりにくかったですが、言及はされているので自分で調べる際に助かりました。ただ、機械学習については紹介されていません。</dd>
<dt>誤植や実装漏れが比較的多い（特にJava)</dt>
<dd>出版元の工学社には本書のサポートページがありません。ですが、著者によるサポートページがあり、そこに正誤表や参考文献が載っています。<br>
著者によるサポートページ: <a href="http://sealsoft.jp/thell/book_errata.html">「リバーシのアルゴリズム」補足</a><br>
本書の表紙には「C++&amp;Java対応」とありますが筆者の方はC++で作成しているらしく、Javaのコードの方に正誤表に載っていない誤植や実装漏れが目立ちます。私が持っているのは第1版第3刷ですが修正されていませんでした。</dd>
</dl>
<p>いろいろ文句を書きましたが入門書としては良い本であると思います。値段も安いですし。<br>
本書の他に特に役立ったのが以下のページ<br>
 <a href="http://www.es-cube.net/es-cube/reversi/sample/html/3_1.html">リバーシプログラムの作り方 サンプル</a></p>
<p>あと、Rubyで書くに当ってよく見たのは</p>
<ul>
<li><a href="http://doc.okkez.net/static/191/doc/index.html">Rubyリファレンスマニュアル Ruby 1.9.1版(全般)</a><br>昔のは右上に検索窓があったような気がするけど、今は無くてちと使いにくい。</li>
<li>プログラミング言語Ruby第2版言語編 (第13章 デバッガ)</li>
<li>オブジェクト指向スクリプト言語Ruby (第6章3節 life.rb)</li>
</ul>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4875934289/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/51P83V533KL._SL160_.jpg"
height="160" width="122"
alt="" title="">
</a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274066428/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/4151YFZ27NL._SL160_.jpg"
height="160" width="122"
alt="" title="">
</a> <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4756132545/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/41A6ZQVF71L._SL160_.jpg"
height="160" width="113"
alt="" title="">
</a>
<p><a href="http://soranoumi.net/diary/20100527.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100527.html#p01">
<link>http://soranoumi.net/diary/20100527.html#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100527.html#p01" />
<dc:date>2010-05-27T23:51:23+09:00</dc:date>
<title>「リバーシのアルゴリズム」をRubyで その7</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>Ruby</dc:subject>
<description>間がかなり開きましたが、前回の続き。第5章「定石」と第6章ゲームの実装。これでひとまず終了。  # -*- cording: sjis -*- # coordinatestransformer.rb   require 'point'   class CoordinatesTransformer   def initialize(first)     @rotate = 0     @mirror = false       if first.equals(Point[&quot;d3&quot;])       @rotate = 1       @mirror = true     elsif first.equals(Point[&quot;c4&quot;])       @rotate = 2     elsif first.equals(Point[&quot;e6&quot;])       @rotate = -1       @mirror = true     end   end     #   # 座標f5を開始点とする座標系に正規化する   #   def normalize(point)     new_point..</description>
<content:encoded><![CDATA[<h3>「リバーシのアルゴリズム」をRubyで その7</h3><p>間がかなり開きましたが、<a href="http://soranoumi.net/diary/20100522.html#p03">前回の続き</a>。第5章「定石」と第6章ゲームの実装。これでひとまず終了。</p>
<pre>
# -*- cording: sjis -*-
# coordinatestransformer.rb
 
require 'point'
 
class CoordinatesTransformer
  def initialize(first)
    @rotate = 0
    @mirror = false
 
    if first.equals(Point["d3"])
      @rotate = 1
      @mirror = true
    elsif first.equals(Point["c4"])
      @rotate = 2
    elsif first.equals(Point["e6"])
      @rotate = -1
      @mirror = true
    end
  end
 
  #
  # 座標f5を開始点とする座標系に正規化する
  #
  def normalize(point)
    new_point = rotate_point(point, @rotate)
    new_point = mirror_point(new_point) if @mirror
 
    return new_point
  end
 
  #
  # f5を開始点とする座標を元の座標に戻す
  #
  def denormalize(point)
    new_point = Point.new(point.y, point.x)
    new_point = mirror_point(new_point) if @mirror
    new_point = rotate_point(new_point, -@rotate)
 
    return new_point
  end
 
  #
  # 座標の回転
  # 半時計回り90度 1
  #
  def rotate_point(old_point, rotate)
    rotate %= 4
    rotate += 4 if rotate < 0
    new_point = Point.new
 
    case rotate
    when 1
      new_point.y = Board::BOARD_SIZE - old_point.x + 1
      new_point.x = old_point.y
    when 2
      new_point.y = Board::BOARD_SIZE - old_point.y + 1
      new_point.x = Board::BOARD_SIZE - old_point.x + 1
    when 3
      new_point.y = old_point.x
      new_point.x = Board::BOARD_SIZE - old_point.y + 1
    else
      new_point.y = old_point.y
      new_point.x = old_point.x
    end
 
    return new_point
  end
 
  #
  # 左右反転
  #
  def mirror_point(point)
    new_point = Point.new
    new_point.y = point.y
    new_point.x = Board::BOARD_SIZE - point.x + 1
 
    return new_point
  end
end
</pre>
<p>reversi.book(定石データ)</p>
<pre>
f5f6e6f4e3d3f3c5c4e2
f5f6e6f4e3d6g4d3c3f2
f5d6c4g5c6d3e6d7f6c7
f5d6c5f4e3c6d3f6e6d7e7c7c4b4
</pre>
<pre>
# -*- coding: sjis -*-
# bookmanager.rb
 
require 'point'
require 'coordinatestransformer'
 
class BookManager
 
  BOOK_FILE_NAME = "reversi.book"
 
  class Node
    attr_accessor :child, :sibling, :point
 
    def initialize
      @child = nil
      @sibling = nil
      @point = Point.new
    end
  end
 
  attr_accessor :root
 
  def initialize
    @root = Node.new
    @root.point = Point["f5"]
 
    File.open(BOOK_FILE_NAME) {|f|
      while line = f.gets
        book = []
        line.chomp!
 
        0.step(line.size - 1, 2) do |i|
          point = Point[line[i, 2]]
          book << point
        end
 
        add(book)
      end
    }
  end
 
  #
  # 定石手の検索
  #
  def find(board)
    node = @root
    history = board.get_history
 
    if history.empty?
      return board.get_movable_pos
    end
    first = history.first
    transformer = CoordinatesTransformer.new(first)
 
    # 座標を変換してf5から始まるようにする
    normalized = []
    for i in 0...history.size
      point = history[i]
      point = transformer.normalize(point)
      normalized << point
    end
 
    # 現在までの棋譜リストと定石の対応を取る
    for i in 1...normalized.size
      node = node.child
      point = normalized[i]
 
      until node.nil?
        break if node.point.equals(point)
        node = node.sibling
      end
 
      if node.nil?
        # 定石を外れている
        return board.get_movable_pos
      end
    end
 
    # 履歴と定石の終わりが一致していた場合
    if node.child.nil?
      return board.get_movable_pos
    end
    next_move = get_next_move(node)
 
    # 座標を元の形に変換する
    next_move = transformer.denormalize(next_move)
    v = []
    v << next_move
 
    return v
  end
 
   private
 
  #
  # bookで指定された定石を定石木に追加する
  # book[0] ノードはf5
  #
  def add(book)
    node = @root
 
    for i in 1...book.size
      new_point = book[i]
 
      if node.child.nil?
        # 新しい定石手
        node.child = Node.new
        node = node.child
        node.point.y = new_point.y
        node.point.x = new_point.x
      else
        # 兄弟ノードの探索
        node = node.child
        while true
          # すでにこの手はデータベース中にあり、その枝を見つけた
          break if node.point.equals(new_point)
 
          # 定石手の新しい枝
          if node.sibling.nil?
            node.sibling = Node.new
            node = node.sibling
            node.point.y = new_point.y
            node.point.x = new_point.x
            break
          end
 
          node = node.sibling
        end
      end
    end
  end
 
  #
  # 次の一手を決める。引数nodeは現在の手数の位置に対応するノード。
  # 直前にboardに打たれた手
  # node.childの世代が次の手を表すノード
  #
  def get_next_move(node)
    candidates = []
 
    target = node.child
    until target.nil?
      candidates << target.point
      target = target.sibling
    end
 
    index = rand * candidates.size
    point = candidates[index]
 
    return Point.new(point.y, point.x)
  end
end
 
if __FILE__ == $0
  require 'board'
  bm = BookManager.new
  b = Board.new
  b.move(Point["f5"])
  b.move(Point["f6"])
  b.move(Point["e6"])
  b.move(Point["f4"])
  b.move(Point["e3"])
  puts bm.find(b).to_s
end
</pre>
<pre>
# -*- encoding: sjis -*-
# reversigame.rb
 
require "ai"
require "consoleboard"
 
class GameException < Exception; end
class UndoException < GameException; end
class ExitException < GameException; end
class GameOverException < GameException; end
 
class Player
  def on_turn(board)
  end
end
 
class HumanPlayer < Player
  def on_turn(board)
    if board.get_movable_pos.empty?
      puts "あなたはパスです。"
      board.pass
      return
    end
 
    loop do
      puts "手を\"f5\"のように入力、もしくは(U:取り消し/X:終了)を入力してください:"
      input = gets
      input.chomp!.downcase!
 
      case input
      when "u"
        puts "取り消します。"
        board.undo
        board.undo
        board.undo while board.get_movable_pos.empty?
        return
      when "x"
        puts "終了します。"
        exit
      else
        begin
          point = Point[input]
        rescue
          puts "正しい形式で入力してください。"
          next
        end
      end
 
      unless board.move(point)
        puts "そこには置けません。"
        next
      end
 
      break
    end
  end
end
 
class AIPlayer < Player
  def initialize
    @ai = AlphaBetaAI.new
  end
 
  def on_turn(board)
    puts "コンピュータ思考中..."
    e = @ai.move(board)
 
    printf("選択:%s 評価値:%5d\n", board.get_history.last.to_s, e )
  end
end
 
board = ConsoleBoard.new
 
player = {}
player[1] = AIPlayer.new
player[-1] = AIPlayer.new
 
 
loop do
  board.print_board
  print "黒石#{board.count_disc(Disc::BLACK)} "
  print "白石#{board.count_disc(Disc::WHITE)} "
  puts "空マス#{board.count_disc(Disc::EMPTY)}"
  msg = board.get_current_color == 1 ? "黒(O)番" : "白(X)番"
  puts "手を入力してください #{board.get_turns + 1}手目#{msg}"
  player[board.get_current_color].on_turn(board)
  puts
 
  if board.is_gameover
    board.print_board
    puts "ゲーム終了"
    puts "黒石: #{board.count_disc(Disc::BLACK)}"
    puts "白石: #{board.count_disc(Disc::WHITE)}"
    break
  end
end
</pre>
<p>実行画面はこんな感じ。</p>
<pre>
  a b c d e f g h
1 _ _ _ _ _ _ _ _
2 _ _ _ X _ _ _ _
3 _ _ O O O X _ _
4 _ _ O O O O _ _
5 _ X X X O X _ _
6 _ X X X O _ _ _
7 _ _ _ O O O _ _
8 _ _ _ _ O X _ _
黒石13 白石10 空マス41
手を入力してください 20手目白(X)番
コンピュータ思考中...
候補01 d8,評価値 566
候補02 f2,評価値 644
候補03 f6,評価値 618
候補04 c2,評価値 343
候補05 b4,評価値 525
候補06 e2,評価値 540
候補07 g5,評価値 527
候補08 g3,評価値 514
候補09 c8,評価値 473
候補10 b3,評価値 157
候補11 g8,評価値 55
選択:f2 評価値:  644
 
  a b c d e f g h
1 _ _ _ _ _ _ _ _
2 _ _ _ X _ X _ _
3 _ _ O O X X _ _
4 _ _ O X O O _ _
5 _ X X X O X _ _
6 _ X X X O _ _ _
7 _ _ _ O O O _ _
8 _ _ _ _ O X _ _
黒石11 白石13 空マス40
手を入力してください 21手目黒(O)番
コンピュータ思考中...
候補01 f6,評価値 1107
候補02 b4,評価値 1263
候補03 e2,評価値 1131
候補04 g6,評価値 1029
候補05 a5,評価値 1081
候補06 e1,評価値 1038
候補07 c7,評価値 1148
候補08 g5,評価値 1029
候補09 d1,評価値 1001
候補10 g4,評価値 1031
候補11 c1,評価値 908
候補12 a4,評価値 1001
候補13 g3,評価値 1066
候補14 f1,評価値 949
候補15 a6,評価値 752
候補16 g8,評価値 650
候補17 b7,評価値 686
候補18 g2,評価値 714
選択:b4 評価値: 1263
</pre>
<p><a href="http://soranoumi.net/diary/20100527.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100522.html#p03">
<link>http://soranoumi.net/diary/20100522.html#p03</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100522.html#p03" />
<dc:date>2010-05-22T19:00:46+09:00</dc:date>
<title>「リバーシのアルゴリズム」をRubyで その6</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>Ruby</dc:subject>
<description>第4章「評価関数」の実装終了。   # -*- coding: sjis -*- # evaluator.rb  require 'point' require 'board'  # # 完全読み用評価関数 # class PerfectEvaluator   def evaluate(board)     board.get_current_color \       * (board.count_disc(Disc::BLACK) - board.count_disc(Disc::WHITE))   end end  # # 必勝読み用評価関数 # class WLDEvaluator   WIN = 1   DRAW = 0   LOSE = -1    def evaluate(board)     disc_diff = board.get_current_color \       * (board.count_disc(Disc::BLACK) - board.count_disc(Disc::WHITE))     if disc_diff  0       WIN..</description>
<content:encoded><![CDATA[<h3>「リバーシのアルゴリズム」をRubyで その6</h3><p>第4章「評価関数」の実装終了。</p>
<p><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4875934289/tongpoonikki-22/ref=nosim/"><img class="amazon" src="http://ecx.images-amazon.com/images/I/51P83V533KL._SL160_.jpg"
height="160" width="122"
alt="" title="">
</a></p>
<pre># -*- coding: sjis -*-
# evaluator.rb

require 'point'
require 'board'

#
# 完全読み用評価関数
#
class PerfectEvaluator
  def evaluate(board)
    board.get_current_color \
      * (board.count_disc(Disc::BLACK) - board.count_disc(Disc::WHITE))
  end
end

#
# 必勝読み用評価関数
#
class WLDEvaluator
  WIN = 1
  DRAW = 0
  LOSE = -1

  def evaluate(board)
    disc_diff = board.get_current_color \
      * (board.count_disc(Disc::BLACK) - board.count_disc(Disc::WHITE))
    if disc_diff &gt; 0
      WIN
    elsif disc_diff &lt; 0
      LOSE
    else
      DRAW
    end
  end
end

#
# 中盤の評価関数
# + 着手可能手数
# - 開放度
# - ウイング
# + 確定石
# - 隅が取られていない状態でのC打ち
# - 隅が取られていない状態でのX打ち
#
class MidEvaluator
  #
  # 辺に関するパラメータ
  #
  class EdgeParam
    attr_accessor :stable, :wing, :mountain, :cmove

    def initialize
      # 確定石の個数
      @stable = 0
      # ウイングの個数
      @wing = 0
      # 山の個数
      @mountain = 0
      # EC
      # CX
      # 危険なC打ちの個数
      @cmove = 0
    end

    def set(param)
      @stable = param.stable
      @wing = param.wing
      @mountain = param.mountain
      @cmove = param.cmove
    end

    def add(param)
      @stable += param.stable
      @wing += param.wing
      @mountain += param.mountain
      @cmove += param.cmove
      return self
    end
  end

  #
  # 色別のEdgeParamオブジェクトを管理するクラス
  #
  class EdgeStat
    attr_reader :data

    def initialize
      @data = {}
      [Disc::BLACK, Disc::WHITE, Disc::EMPTY].each do |color|
        @data[color] = EdgeParam.new
      end
    end

    def add(stat)
      @data.each do |color, param|
        param.add(stat.data[color])
      end
    end

    def get(color)
      @data[color]
    end
  end

  #
  # 隅周辺に関するパラメータ
  #
  class CornerParam
    attr_accessor :corner, :xmove

    def initialize
      @corner = 0 # 隅にある石の数
      @xmove = 0 # 危険なX打ちの個数
    end
  end

  #
  # 色別のCornerオブジェクトを管理するクラス
  #

  class CornerStat
    attr_reader :data

    def initialize
      @data = {}
      [Disc::BLACK, Disc::WHITE, Disc::EMPTY].each do |color|
        @data[color] = CornerParam.new
      end
    end

    def get(color)
      @data[color]
    end
  end

  #
  # 重み係数を規定する構造体
  #
  Weight = Struct.new(
    :mobility_w, # 着手可能手数
    :liberty_w, # 開放度
    :stable_w, # 確定石
    :wing_w, # ウイング
    :xmove_w, # X打ち
    :cmove_w # C打ち
  )

  #
  # 辺のパターンの組み合わせ用インデックスのサイズ
  # 3 ** 8 = 6561
  #
  TABLE_SIZE = 6561

  # 辺のパターン毎のEdgeStatの配列
  @@edge_table = Array.new(TABLE_SIZE){ EdgeStat.new }

  @@table_init = false

  def MidEvaluator.edge_table
    @@edge_table
  end

  attr_reader :eval_weight

  def initialize
    # 初回起動時にテーブルを生成
    unless @table_init
      line = Array.new(Board::BOARD_SIZE)
      generate_edge(line, 0)
      @@table_init = true
    end

    # 重み係数の設定（全局面共通）
    @eval_weight = Weight.new
    @eval_weight.mobility_w = 67 # 着手可能手数
    @eval_weight.liberty_w = -13 # 開放度
    @eval_weight.stable_w = 101 # 安定石
    @eval_weight.wing_w = -308 # ウイング
    @eval_weight.xmove_w = -449 # X打ち
    @eval_weight.cmove_w = -552 # C打ち
  end

  #
  # 評価関数
  #
  def evaluate(board)
    edge_stat = nil
    corner_stat = nil
    result = nil

    # 辺の評価
    edge_stat = @@edge_table[idx_top(board)]
    edge_stat.add(@@edge_table[idx_bottom(board)])
    edge_stat.add(@@edge_table[idx_right(board)])
    edge_stat.add(@@edge_table[idx_left(board)])


    # 隅の評価
    corner_stat = eval_corner(board)

    # 確定石に関して、隅の石を2回数えているので補正
    edge_stat.get(Disc::BLACK).stable \
      -= corner_stat.get(Disc::BLACK).corner
    edge_stat.get(Disc::WHITE).stable \
      -= corner_stat.get(Disc::WHITE).corner

    # パラメータの線形結合
    result = \
      edge_stat.get(Disc::BLACK).stable * @eval_weight.stable_w \
      - edge_stat.get(Disc::WHITE).stable * @eval_weight.stable_w \
      + edge_stat.get(Disc::BLACK).wing * @eval_weight.wing_w \
      - edge_stat.get(Disc::WHITE).wing * @eval_weight.wing_w \
      + corner_stat.get(Disc::BLACK).xmove * @eval_weight.xmove_w \
      - corner_stat.get(Disc::WHITE).xmove * @eval_weight.xmove_w \
      + edge_stat.get(Disc::BLACK).cmove * @eval_weight.cmove_w \
      - edge_stat.get(Disc::WHITE).cmove * @eval_weight.cmove_w

    # 開放度の評価
    unless @eval_weight.liberty_w == 0
      liberty = count_liberty(board)
      result += liberty.get(Disc::BLACK) * @eval_weight.liberty_w
      result -= liberty.get(Disc::WHITE) * @eval_weight.liberty_w
    end

    # 現在の手番の色についてのみ、着手可能手数を数える
    result += \
      board.get_current_color \
      * board.get_movable_pos.size \
      * @eval_weight.mobility_w

    return board.get_current_color * result
  end

  #
  # @@edge_tableの生成
  #    generate_edge(line, 0)
  #
  def generate_edge(edge, count)
    if count == Board::BOARD_SIZE
      # このパターンは完成したので、局面のカウント
      stat = EdgeStat.new
      stat.get(Disc::BLACK).set(eval_edge(edge, Disc::BLACK))
      stat.get(Disc::WHITE).set(eval_edge(edge, Disc::WHITE))
      @@edge_table[idx_line(edge)] = stat

      return
    end

    # 再帰的にすべてのパターンを網羅
    edge[count] = Disc::EMPTY
    generate_edge(edge, count + 1)

    edge[count] = Disc::BLACK
    generate_edge(edge, count + 1)

    edge[count] = Disc::WHITE
    generate_edge(edge, count + 1)

    return
  end

  def eval_edge(line, color)
    edge_param = EdgeParam.new

    # ウィングなどのカウント
    if line[0] == Disc::EMPTY and line[7] == Disc::EMPTY
      x = 2
      while x &lt;= 5
        unless line[x] == color
          break
        end
        x += 1
      end
      if x == 6 # 少なくてもブロックが出来ている
        if line[1] == color and line[6] == Disc::EMPTY
          edge_param.wing = 1
        elsif line[1] == Disc::EMPTY and line[6] == color
          edge_param.wing = 1
        elsif line[1] == color and line[6] == color
          edge_param.mountain = 1
        end
      else # それ以外の場合に、隅に隣接する位置に置いていたら
        if line[1] == color
          edge_param.cmove += 1
        end
        if line[6] == color
          edge_param.cmove += 1
        end
      end
    end

    # 確定石のカウント
    # 左から右に走査
    for x in 0..7
      unless line[x] == color
        break
      end
      edge_param.stable += 1
    end

    if edge_param.stable &lt; 8
      # 右からの走査も必要
      7.downto(0) do |x|
        unless line[x] == color
          break
        end
        edge_param.stable += 1
      end
    end

    return edge_param
  end

  #
  # 隅のパラメーターを調べる。この関数は各評価時に使う。
  #
  def eval_corner(board)
    corner_stat = CornerStat.new

    corner_stat.get(Disc::BLACK).corner = 0
    corner_stat.get(Disc::BLACK).xmove = 0
    corner_stat.get(Disc::WHITE).corner = 0
    corner_stat.get(Disc::WHITE).xmove = 0

    point = Point.new

    # 左上
    point.y = 1
    point.x = 1
    corner_stat.get(board.get_color(point)).corner += 1
    if board.get_color(point) == Disc::EMPTY
      point.y = 2
      point.x = 2
      corner_stat.get(board.get_color(point)).xmove += 1
    end

    # 左下
    point.y = 8
    point.x = 1
    corner_stat.get(board.get_color(point)).corner += 1
    if board.get_color(point) == Disc::EMPTY
      point.y = 7
      point.x = 2
      corner_stat.get(board.get_color(point)).xmove += 1
    end

    # 右下
    point.y = 8
    point.x = 8
    corner_stat.get(board.get_color(point)).corner += 1
    if board.get_color(point) == Disc::EMPTY
      point.y = 7
      point.x = 7
      corner_stat.get(board.get_color(point)).xmove += 1
    end

    # 右上
    point.y = 1
    point.x = 8
    corner_stat.get(board.get_color(point)).corner += 1
    if board.get_color(point) == Disc::EMPTY
      point.y = 2
      point.x = 7
      corner_stat.get(board.get_color(point)).xmove += 1
    end

    return corner_stat
  end

  #
  # 各辺の状態についてのインデックスの計算
  #

  # 上辺
  def idx_top(board)
    index = 0
    m = 1
    point = Point.new(1, 8)
    Board::BOARD_SIZE.downto(1) do |i|
      point.x = i
      index += m * (board.get_color(point) + 1)
      m *= 3
    end

    return index
  end

  # 下辺
  def idx_bottom(board)
    index = 0
    m = 1
    point = Point.new(8, 8)
    Board::BOARD_SIZE.downto(1) do |i|
      point.x = i
      index += m * (board.get_color(point) + 1)
      m *= 3
    end

    return index
  end

  # 右辺
  def idx_right(board)
    index = 0
    m = 1
    point = Point.new(8, 8)
    Board::BOARD_SIZE.downto(1) do |i|
      point.y = i
      index += m * (board.get_color(point) + 1)
      m *= 3
    end

    return index
  end

  # 左辺
  def idx_left(board)
    index = 0
    m = 1
    point = Point.new(8, 1)
    Board::BOARD_SIZE.downto(1) do |i|
      point.y = i
      index += m * (board.get_color(point) + 1)
      m *= 3
    end

    return index
  end

  #
  # 開放度を取得
  #
  def count_liberty(board)
    liberty = ColorStorage.new
    liberty.set(Disc::BLACK, 0)
    liberty.set(Disc::WHITE, 0)
    liberty.set(Disc::EMPTY, 0)

    point = Point.new

    for y in 1..Board::BOARD_SIZE
      point.y = y
      for x in 1..Board::BOARD_SIZE
        point.x = x
        l = liberty.get(board.get_color(point))
        l += board.get_liberty(point)
        liberty.set(board.get_color(point), l)
      end
    end

    return liberty
  end

  #
  # 石のパターンのインデックスを返す
  #
  # [-1, -1, -1, -1, -1, -1, -1, -1] =&gt; 0
  # [-1, -1, -1, -1, -1, -1, -1, 0] =&gt; 1
  # [1, 1, 1, 1, 1, 1, 1, 1] =&gt; 6560
  def idx_line(line)
    return 3 * (3 * (3 * (3 * (3 * (3 * (3 * (line[0] + 1) + line[1] + 1) + line[2] + 1) + line[3] + 1) + line[4] + 1) + line[5] + 1) + line[6] + 1)+ line[7] + 1
  end
end
</pre>
<p><a href="http://soranoumi.net/diary/20100522.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://soranoumi.net/diary/20100522.html#p02">
<link>http://soranoumi.net/diary/20100522.html#p02</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://soranoumi.net/diary/20100522.html#p02" />
<dc:date>2010-05-22T12:05:48+09:00</dc:date>
<title>堂々の1位</title>
<dc:creator>滝谷無人</dc:creator>
<dc:subject>NFL</dc:subject>
<description>大駒4枚落ちのカーディナルス。現時点で戦力的にどうなのか、気になるけれども素人には判断不能。そんなところへNFLニュース。 NFL JAPAN.COM｜2010シーズン、プレイオフ戦線を占う 「昨季から一転、プレイオフ進出を逃す可能性が高いチーム」の堂々第1位にアリゾナ・カーディナルス・・・逆に「新たにプレイオフ進出が有力なチーム」の第2位にサンフランシスコ・49ers。49ersはフロント・コーチがごたごたしているらしいというニュースがあったのでニンマリしてたんだけど、そうですか。うー。</description>
<content:encoded><![CDATA[<h3>堂々の1位</h3><p>大駒4枚落ちのカーディナルス。現時点で戦力的にどうなのか、気になるけれども素人には判断不能。そんなところへNFLニュース。</p>
<p><a href="http://www.nfljapan.com/headlines/14181.html">NFL JAPAN.COM｜2010シーズン、プレイオフ戦線を占う</a></p>
<p>「昨季から一転、プレイオフ進出を逃す可能性が高いチーム」の堂々第1位にアリゾナ・カーディナルス・・・逆に「新たにプレイオフ進出が有力なチーム」の第2位にサンフランシスコ・49ers。49ersはフロント・コーチがごたごたしているらしいというニュースがあったのでニンマリしてたんだけど、そうですか。うー。</p>
<p><a href="http://soranoumi.net/diary/20100522.html#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
</rdf:RDF>
