<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>tohima!tohima!tohima!</title>
	<atom:link href="http://tohima.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://tohima.com</link>
	<description>iPhoneで撮った写真なんかとちょっとだけプログラム。世の中ってば自分の知らないことばかり。いろいろとりあえずかじってみる。</description>
	<lastBuildDate>Sun, 15 Aug 2010 16:27:02 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>[ネタバレ]インセプションみてきました</title>
		<link>http://tohima.com/2010/08/15/%e3%83%8d%e3%82%bf%e3%83%90%e3%83%ac%e3%82%a4%e3%83%b3%e3%82%bb%e3%83%97%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%bf%e3%81%a6%e3%81%8d%e3%81%be%e3%81%97%e3%81%9f/</link>
		<comments>http://tohima.com/2010/08/15/%e3%83%8d%e3%82%bf%e3%83%90%e3%83%ac%e3%82%a4%e3%83%b3%e3%82%bb%e3%83%97%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%bf%e3%81%a6%e3%81%8d%e3%81%be%e3%81%97%e3%81%9f/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 13:30:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://tohima.com/?p=138</guid>
		<description><![CDATA[映画インセプションをみてきました。 CGを嫌うクリストファー・ノーラン監督のSF作品であり、いろいろと話題の映画です。 なにが話題かっていうと大きく分けて２つ。映像の迫力と内容の複雑さです。その内容の複雑さとは、説明が不十分であることも原因のひとつです。このエントリでは主に作品の夢に関する設定部分について、記憶をたよりにまとめていきたいと思います。メモを取る訳でもなく、一度見ただけですので勘違いも多々あると思われますがご容赦を。 以下ネタバレありです。 夢の中で夢を見て、さらにその世界でも夢をみる、夢の階層を軸としたSF映画。今いったい第何層にいるのかを認識しながら見ないと混乱してきます。また、その夢の世界を行き来するルールが作品中でじわじわと明らかになっていくために、見てる人はついていくのが精一杯になります。 ルール 夢の中に入って、さらにそこでも夢の中に入れる 例）第２層から第３層にいく １層深くなると脳の処理速度が２０倍になるため、時間を２０倍の長さに感じる 例）第１層の１分は第２層の２０分、第３層だと４００分 上の層に戻るためにはその層で死ねばよい 例）第３層で死ぬ→第２層で目覚める 上の層で刺激を受ける（キック）と下の層にいても目が覚める 例）第２層で椅子から落ち水中に落ちる→第３層にいれば第２層で目覚める 強力な薬の影響下では死んでも上の層で目覚めない→精神は虚無の世界へ 夢の中ではトーテムというアイテムを使い、自分が夢の中にいるのかどうかを判別します。コブ（レオナルドディカプリオ）のトーテムはコマ。 夢の世界へは専用の機械を使って行きます。アタッシュケースの機械からケーブルが伸び、それを手首に巻いてスイッチを押すと夢の世界へと意識がとびます。それ以上の細かい情報は劇中では語られません。夢の世界では誰かが中心となりほかのメンバーがその人の夢の中で活動することが出来ます。誰が中心となるかは指定できます。眠らされたのか、意識を持って眠ったのかによって夢の世界での認識・眠る前の階層の記憶の有無が異なります。夢の中では基本的には思い通りですし、年もとりません。ですが、夢と認識してないと年をとるのが当然と考えてしまい年をとってしまいます。中心人物が夢の世界を作るのですが、ゲストの意識も投影されます。 階層について 第１層：ユスフの夢（カーチェイス・橋） 第２層：アーサーの夢（ホテル・エレベーター） 第３層：イームスの夢（雪） 第４層：コブがモブと過ごした世界。 虚無：コブがモブと過ごした世界。 [推測] 虚無についてですが、薬の影響下で夢の中で死ぬと行く世界のようですが、深く深く階層を潜る事によって死ななくてもいけるようです。今回のミッション以前にコブとモルは深くもぐり虚無へとたどり着き、サイトー（渡辺謙）とロバート（社長の息子）は死ぬ事でたどり着いた世界のようです。その世界は現実世界での機械を共有していた為に虚無も共有されたようです。 嫁殺害について。 夫婦で夢の世界の奥深くへ潜っていったコブとモル（レオ様の嫁）。モルは現実の世界でも夢と区別がつかなくなり自殺。コブは殺人犯として追われる身となるが、かなりのトラウマを抱えることとなる。これは、夢の世界から帰りたくないと考えるモルに対して「これは現実ではない」というインセプションをコブが行ったために、現実の世界でも夢と区別がつかなくなったために自殺してしまったのです。 ミッション 今回のミッションでは、第１層でロバートを誘拐し、第２層で夢の世界にいることを伝え信頼の獲得、第３層でインセプションを行うといったものになります。インセプションの影響で現実世界ではロバートが会社をつぶし、ライバル企業のサイトーはウハウハしたい訳です。嫁殺害として追われるコブは報酬としてそれをもみ消してもらって子供の待つ家に帰るためにミッションに挑みます。 ところが、第３層にて大けがで死んでしまったサイトーと心配停止状態となってしまったロバートを救うべく、急遽コブとアリアドネ（設計士の女の子）は虚無へと向かいロバートを、一人虚無の世界に残ったコブがサイトーを助けます。 無事ミッションをクリアしたコブは家に戻り子供達と再会します。 戻りかた 落下の刺激によるキックによって戻ります。 [予定] ２層：エレベーター落下により雪山から戻す ↓ １層：橋の上からの車両落下によりエレベーターから戻す ↓ 現実：飛行機の中 劇中ではこのような予定でしたので、階層順に戻っていかないと行けないルールのようです。つまりどの階層にいても現実で刺激を与えれば目覚めるっていうわけでもないようです。 ポイント 第１〜３層の敵はロバートの夢対策によるもの。 第１層の列車はコブのトラウマの投影。 サイトーがおじいさんになっていたのは、虚無を現実と信じていたため年を取った。 サイトーは虚無で若いコブと会い虚無と気づいて拳銃自殺→そのまま現実の体に戻る。 コブとモルが虚無で年をとらなかったのは夢と知っていたから。 サイトーがミッションについてきたのに理由はない、ただの観光のようなもの。 虚無ではロバートは飛び降りで死亡→第３層でAEDで心肺蘇生。 過去の部分ではモルはコブからインセプションを受け、２人で列車自殺。 モルは現実に戻っても夢と区別がつかなくなり投身自殺。 疑問点 後で追加していきます。 最後のシーン 最後のトーテムは回り続けるか止まるかは、あなたの想像におまかせします。 わかりやすい画像をみつけたので追加。]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftohima.com%2F2010%2F08%2F15%2F%25e3%2583%258d%25e3%2582%25bf%25e3%2583%2590%25e3%2583%25ac%25e3%2582%25a4%25e3%2583%25b3%25e3%2582%25bb%25e3%2583%2597%25e3%2582%25b7%25e3%2583%25a7%25e3%2583%25b3%25e3%2581%25bf%25e3%2581%25a6%25e3%2581%258d%25e3%2581%25be%25e3%2581%2597%25e3%2581%259f%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftohima.com%2F2010%2F08%2F15%2F%25e3%2583%258d%25e3%2582%25bf%25e3%2583%2590%25e3%2583%25ac%25e3%2582%25a4%25e3%2583%25b3%25e3%2582%25bb%25e3%2583%2597%25e3%2582%25b7%25e3%2583%25a7%25e3%2583%25b3%25e3%2581%25bf%25e3%2581%25a6%25e3%2581%258d%25e3%2581%25be%25e3%2581%2597%25e3%2581%259f%2F&amp;source=tohima&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>映画インセプションをみてきました。</p>
<p>CGを嫌うクリストファー・ノーラン監督のSF作品であり、いろいろと話題の映画です。</p>
<p>なにが話題かっていうと大きく分けて２つ。映像の迫力と内容の複雑さです。その内容の複雑さとは、説明が不十分であることも原因のひとつです。このエントリでは主に作品の夢に関する設定部分について、記憶をたよりにまとめていきたいと思います。メモを取る訳でもなく、一度見ただけですので勘違いも多々あると思われますがご容赦を。</p>
<p><span style="color: #ff0000;">以下ネタバレありです。</span></p>
<p>夢の中で夢を見て、さらにその世界でも夢をみる、夢の階層を軸としたSF映画。今いったい第何層にいるのかを認識しながら見ないと混乱してきます。また、その夢の世界を行き来するルールが作品中でじわじわと明らかになっていくために、見てる人はついていくのが精一杯になります。</p>
<h2>ルール</h2>
<ul>
<li>夢の中に入って、さらにそこでも夢の中に入れる<br />
例）第２層から第３層にいく</li>
<li>１層深くなると脳の処理速度が２０倍になるため、時間を２０倍の長さに感じる<br />
例）第１層の１分は第２層の２０分、第３層だと４００分</li>
<li>上の層に戻るためにはその層で死ねばよい<br />
例）第３層で死ぬ→第２層で目覚める</li>
<li>上の層で刺激を受ける（キック）と下の層にいても目が覚める<br />
例）第２層で椅子から落ち水中に落ちる→第３層にいれば第２層で目覚める</li>
<li>強力な薬の影響下では死んでも上の層で目覚めない→精神は虚無の世界へ</li>
</ul>
<p>夢の中ではトーテムというアイテムを使い、自分が夢の中にいるのかどうかを判別します。コブ（レオナルドディカプリオ）のトーテムはコマ。</p>
<p>夢の世界へは専用の機械を使って行きます。アタッシュケースの機械からケーブルが伸び、それを手首に巻いてスイッチを押すと夢の世界へと意識がとびます。それ以上の細かい情報は劇中では語られません。夢の世界では誰かが中心となりほかのメンバーがその人の夢の中で活動することが出来ます。誰が中心となるかは指定できます。眠らされたのか、意識を持って眠ったのかによって夢の世界での認識・眠る前の階層の記憶の有無が異なります。夢の中では基本的には思い通りですし、年もとりません。ですが、夢と認識してないと年をとるのが当然と考えてしまい年をとってしまいます。中心人物が夢の世界を作るのですが、ゲストの意識も投影されます。</p>
<h2>階層について</h2>
<p>第１層：ユスフの夢（カーチェイス・橋）<br />
第２層：アーサーの夢（ホテル・エレベーター）<br />
第３層：イームスの夢（雪）<br />
第４層：コブがモブと過ごした世界。<br />
虚無：コブがモブと過ごした世界。</p>
<p>[推測]<br />
虚無についてですが、薬の影響下で夢の中で死ぬと行く世界のようですが、深く深く階層を潜る事によって死ななくてもいけるようです。今回のミッション以前にコブとモルは深くもぐり虚無へとたどり着き、サイトー（渡辺謙）とロバート（社長の息子）は死ぬ事でたどり着いた世界のようです。その世界は現実世界での機械を共有していた為に虚無も共有されたようです。</p>
<h2>嫁殺害について。</h2>
<p>夫婦で夢の世界の奥深くへ潜っていったコブとモル（レオ様の嫁）。モルは現実の世界でも夢と区別がつかなくなり自殺。コブは殺人犯として追われる身となるが、かなりのトラウマを抱えることとなる。これは、夢の世界から帰りたくないと考えるモルに対して「これは現実ではない」というインセプションをコブが行ったために、現実の世界でも夢と区別がつかなくなったために自殺してしまったのです。</p>
<h2>ミッション</h2>
<ul>今回のミッションでは、第１層でロバートを誘拐し、第２層で夢の世界にいることを伝え信頼の獲得、第３層でインセプションを行うといったものになります。インセプションの影響で現実世界ではロバートが会社をつぶし、ライバル企業のサイトーはウハウハしたい訳です。嫁殺害として追われるコブは報酬としてそれをもみ消してもらって子供の待つ家に帰るためにミッションに挑みます。</p>
<p>ところが、第３層にて大けがで死んでしまったサイトーと心配停止状態となってしまったロバートを救うべく、急遽コブとアリアドネ（設計士の女の子）は虚無へと向かいロバートを、一人虚無の世界に残ったコブがサイトーを助けます。</ul>
<p>無事ミッションをクリアしたコブは家に戻り子供達と再会します。</p>
<h2>戻りかた</h2>
<p>落下の刺激によるキックによって戻ります。</p>
<p>[予定]</p>
<p>２層：エレベーター落下により雪山から戻す<br />
↓<br />
１層：橋の上からの車両落下によりエレベーターから戻す<br />
↓<br />
現実：飛行機の中</p>
<p>劇中ではこのような予定でしたので、階層順に戻っていかないと行けないルールのようです。つまりどの階層にいても現実で刺激を与えれば目覚めるっていうわけでもないようです。</p>
<h2>ポイント</h2>
<p>第１〜３層の敵はロバートの夢対策によるもの。</p>
<p>第１層の列車はコブのトラウマの投影。</p>
<p>サイトーがおじいさんになっていたのは、虚無を現実と信じていたため年を取った。</p>
<p>サイトーは虚無で若いコブと会い虚無と気づいて拳銃自殺→そのまま現実の体に戻る。</p>
<p>コブとモルが虚無で年をとらなかったのは夢と知っていたから。</p>
<p>サイトーがミッションについてきたのに理由はない、ただの観光のようなもの。</p>
<p>虚無ではロバートは飛び降りで死亡→第３層でAEDで心肺蘇生。</p>
<p>過去の部分ではモルはコブからインセプションを受け、２人で列車自殺。</p>
<p>モルは現実に戻っても夢と区別がつかなくなり投身自殺。</p>
<h2>疑問点</h2>
<p>後で追加していきます。</p>
<h2>最後のシーン</h2>
<p>最後のトーテムは回り続けるか止まるかは、あなたの想像におまかせします。</p>
<p>わかりやすい画像をみつけたので追加。</p>
<p><a href="http://www.forevergeek.com/2010/07/inception_timeline/">http://www.forevergeek.com/2010/07/inception_timeline/</a></p>
<p><a href="http://www.forevergeek.com/2010/07/inception_timeline/"><img class="alignnone size-full wp-image-157" title="Inception_Infographic_by_dehahs-550x825" src="http://tohima.com/wp-content/uploads/2010/08/Inception_Infographic_by_dehahs-550x825.jpg" alt="" width="550" height="825" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://tohima.com/2010/08/15/%e3%83%8d%e3%82%bf%e3%83%90%e3%83%ac%e3%82%a4%e3%83%b3%e3%82%bb%e3%83%97%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%bf%e3%81%a6%e3%81%8d%e3%81%be%e3%81%97%e3%81%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一風堂のホットもやしソースがうますぎるから。</title>
		<link>http://tohima.com/2010/07/30/%e4%b8%80%e9%a2%a8%e5%a0%82%e3%81%ae%e3%83%9b%e3%83%83%e3%83%88%e3%82%82%e3%82%84%e3%81%97%e3%82%bd%e3%83%bc%e3%82%b9%e3%81%8c%e3%81%86%e3%81%be%e3%81%99%e3%81%8e%e3%82%8b%e3%81%8b%e3%82%89%e3%80%82/</link>
		<comments>http://tohima.com/2010/07/30/%e4%b8%80%e9%a2%a8%e5%a0%82%e3%81%ae%e3%83%9b%e3%83%83%e3%83%88%e3%82%82%e3%82%84%e3%81%97%e3%82%bd%e3%83%bc%e3%82%b9%e3%81%8c%e3%81%86%e3%81%be%e3%81%99%e3%81%8e%e3%82%8b%e3%81%8b%e3%82%89%e3%80%82/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 03:49:16 +0000</pubDate>
		<dc:creator>tohima</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://tohima.com/2010/07/30/%e4%b8%80%e9%a2%a8%e5%a0%82%e3%81%ae%e3%83%9b%e3%83%83%e3%83%88%e3%82%82%e3%82%84%e3%81%97%e3%82%bd%e3%83%bc%e3%82%b9%e3%81%8c%e3%81%86%e3%81%be%e3%81%99%e3%81%8e%e3%82%8b%e3%81%8b%e3%82%89%e3%80%82/</guid>
		<description><![CDATA[一風堂のホットもやしソースがうますぎるから。 Originally uploaded by tohima 買いました。一風堂のホットもやしソース。 ラーメンが食べたいって行くんじゃなくて、もやしが食べたいって思って行くことが多い一風堂ですが、そのもやしソースは店舗で販売されてます。 ラベルに作り方も載ってます。 サッと茹でる→水を切る→ソースかける これだけで、あの味が家庭でも楽しめます。他にも焼肉のつけだれとしても楽しめますって書いてあるけどどうだろ、もやしが1番だとおもいます。 ホットもやしソース、400円。]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F30%2F%25e4%25b8%2580%25e9%25a2%25a8%25e5%25a0%2582%25e3%2581%25ae%25e3%2583%259b%25e3%2583%2583%25e3%2583%2588%25e3%2582%2582%25e3%2582%2584%25e3%2581%2597%25e3%2582%25bd%25e3%2583%25bc%25e3%2582%25b9%25e3%2581%258c%25e3%2581%2586%25e3%2581%25be%25e3%2581%2599%25e3%2581%258e%25e3%2582%258b%25e3%2581%258b%25e3%2582%2589%25e3%2580%2582%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F30%2F%25e4%25b8%2580%25e9%25a2%25a8%25e5%25a0%2582%25e3%2581%25ae%25e3%2583%259b%25e3%2583%2583%25e3%2583%2588%25e3%2582%2582%25e3%2582%2584%25e3%2581%2597%25e3%2582%25bd%25e3%2583%25bc%25e3%2582%25b9%25e3%2581%258c%25e3%2581%2586%25e3%2581%25be%25e3%2581%2599%25e3%2581%258e%25e3%2582%258b%25e3%2581%258b%25e3%2582%2589%25e3%2580%2582%2F&amp;source=tohima&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div style="float: right; margin-left: 10px; margin-bottom: 10px;">
<a href="http://www.flickr.com/photos/tohima/4842854392/" title="photo sharing"><img src="http://farm5.static.flickr.com/4127/4842854392_a0c12d0ac0.jpg" alt="" style="border: solid 2px #000000;" /></a><br />
<br />
<span style="font-size: 0.9em; margin-top: 0px;"><br />
<a href="http://www.flickr.com/photos/tohima/4842854392/">一風堂のホットもやしソースがうますぎるから。</a><br />
<br />
Originally uploaded by <a href="http://www.flickr.com/people/tohima/">tohima</a><br />
</span>
</div>
<p>買いました。一風堂のホットもやしソース。</p>
<p>ラーメンが食べたいって行くんじゃなくて、もやしが食べたいって思って行くことが多い一風堂ですが、そのもやしソースは店舗で販売されてます。</p>
<p>ラベルに作り方も載ってます。</p>
<p>サッと茹でる→水を切る→ソースかける</p>
<p>これだけで、あの味が家庭でも楽しめます。他にも焼肉のつけだれとしても楽しめますって書いてあるけどどうだろ、もやしが1番だとおもいます。</p>
<p>ホットもやしソース、400円。<br />
<br clear="all" /></p>
]]></content:encoded>
			<wfw:commentRss>http://tohima.com/2010/07/30/%e4%b8%80%e9%a2%a8%e5%a0%82%e3%81%ae%e3%83%9b%e3%83%83%e3%83%88%e3%82%82%e3%82%84%e3%81%97%e3%82%bd%e3%83%bc%e3%82%b9%e3%81%8c%e3%81%86%e3%81%be%e3%81%99%e3%81%8e%e3%82%8b%e3%81%8b%e3%82%89%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>クッキーつくってみる。材料買ってる。</title>
		<link>http://tohima.com/2010/07/16/%e3%82%af%e3%83%83%e3%82%ad%e3%83%bc%e3%81%a4%e3%81%8f%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b%e3%80%82%e6%9d%90%e6%96%99%e8%b2%b7%e3%81%a3%e3%81%a6%e3%82%8b%e3%80%82/</link>
		<comments>http://tohima.com/2010/07/16/%e3%82%af%e3%83%83%e3%82%ad%e3%83%bc%e3%81%a4%e3%81%8f%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b%e3%80%82%e6%9d%90%e6%96%99%e8%b2%b7%e3%81%a3%e3%81%a6%e3%82%8b%e3%80%82/#comments</comments>
		<pubDate>Fri, 16 Jul 2010 14:39:02 +0000</pubDate>
		<dc:creator>tohima</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://tohima.com/2010/07/16/%e3%82%af%e3%83%83%e3%82%ad%e3%83%bc%e3%81%a4%e3%81%8f%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b%e3%80%82%e6%9d%90%e6%96%99%e8%b2%b7%e3%81%a3%e3%81%a6%e3%82%8b%e3%80%82/</guid>
		<description><![CDATA[クッキーつくってみる。材料買ってる。 Originally uploaded by tohima 友達のアメリカみやげのクッキーがすごくおいしくて、スーパーに売ってるようなのじゃ満足できません＞＜ でも、意外とお金かかりそう。カントリーマーム買ったほうが全然やすくすむんじゃね？持ってなかったからキッチンスケールとかうらごしとかも買ってるし。。。]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F16%2F%25e3%2582%25af%25e3%2583%2583%25e3%2582%25ad%25e3%2583%25bc%25e3%2581%25a4%25e3%2581%258f%25e3%2581%25a3%25e3%2581%25a6%25e3%2581%25bf%25e3%2582%258b%25e3%2580%2582%25e6%259d%2590%25e6%2596%2599%25e8%25b2%25b7%25e3%2581%25a3%25e3%2581%25a6%25e3%2582%258b%25e3%2580%2582%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F16%2F%25e3%2582%25af%25e3%2583%2583%25e3%2582%25ad%25e3%2583%25bc%25e3%2581%25a4%25e3%2581%258f%25e3%2581%25a3%25e3%2581%25a6%25e3%2581%25bf%25e3%2582%258b%25e3%2580%2582%25e6%259d%2590%25e6%2596%2599%25e8%25b2%25b7%25e3%2581%25a3%25e3%2581%25a6%25e3%2582%258b%25e3%2580%2582%2F&amp;source=tohima&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div style="float: right; margin-left: 10px; margin-bottom: 10px;">
<a href="http://www.flickr.com/photos/tohima/4798761235/" title="photo sharing"><img src="http://farm5.static.flickr.com/4115/4798761235_1c4302214e.jpg" alt="" style="border: solid 2px #000000;" /></a><br />
<br />
<span style="font-size: 0.9em; margin-top: 0px;"><br />
<a href="http://www.flickr.com/photos/tohima/4798761235/">クッキーつくってみる。材料買ってる。</a><br />
<br />
Originally uploaded by <a href="http://www.flickr.com/people/tohima/">tohima</a><br />
</span>
</div>
<p>友達のアメリカみやげのクッキーがすごくおいしくて、スーパーに売ってるようなのじゃ満足できません＞＜</p>
<p>でも、意外とお金かかりそう。カントリーマーム買ったほうが全然やすくすむんじゃね？持ってなかったからキッチンスケールとかうらごしとかも買ってるし。。。<br />
<br clear="all" /></p>
]]></content:encoded>
			<wfw:commentRss>http://tohima.com/2010/07/16/%e3%82%af%e3%83%83%e3%82%ad%e3%83%bc%e3%81%a4%e3%81%8f%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b%e3%80%82%e6%9d%90%e6%96%99%e8%b2%b7%e3%81%a3%e3%81%a6%e3%82%8b%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5. Google App Engine for Python でテンプレートを使う。</title>
		<link>http://tohima.com/2010/07/15/5-google-app-engine-for-python-%e3%81%a7%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%86%e3%80%82/</link>
		<comments>http://tohima.com/2010/07/15/5-google-app-engine-for-python-%e3%81%a7%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%86%e3%80%82/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 14:39:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[GoogleAppEngine]]></category>

		<guid isPermaLink="false">http://tohima.com/?p=130</guid>
		<description><![CDATA[今回はテンプレートの使い方を試してみます。 WEBサイトを作るにあたって、デザイン部分とプログラム部分をわけることは管理をするうえで非常に重要なポイントとなります。サイトがシンプルなうちはまだいいのですが、複雑になるにつれメリットは大きくなります。このテンプレート機能はかなり充実してますが、全部を把握しょうとすると訳がわからなくなりますので、今回も最低限の機能だけ押さえます。 どのように分けるかというと、テンプレート部分でHTML上に変化される部分を置き、プログラム部分でその値を動的に変化をさせます。今回の出力結果は前回とまったく同じです。 [python] #templateモジュールをインポートします。 import os from google.appengine.ext.webapp import template import cgi from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app from google.appengine.ext import db class Message(db.Model): name = db.StringProperty() comment = db.StringProperty(multiline=True) date = db.DateTimeProperty(auto_now_add=True) class MainPage(webapp.RequestHandler): def get(self): messages = db.GqlQuery(&#8220;SELECT * FROM Message ORDER BY date DESC LIMIT 10&#8243;) #テンプレート上で置き換える部分です。データストアの結果をそのまま使います。 template_values =]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F15%2F5-google-app-engine-for-python-%25e3%2581%25a7%25e3%2583%2586%25e3%2583%25b3%25e3%2583%2597%25e3%2583%25ac%25e3%2583%25bc%25e3%2583%2588%25e3%2582%2592%25e4%25bd%25bf%25e3%2581%2586%25e3%2580%2582%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F15%2F5-google-app-engine-for-python-%25e3%2581%25a7%25e3%2583%2586%25e3%2583%25b3%25e3%2583%2597%25e3%2583%25ac%25e3%2583%25bc%25e3%2583%2588%25e3%2582%2592%25e4%25bd%25bf%25e3%2581%2586%25e3%2580%2582%2F&amp;source=tohima&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>今回はテンプレートの使い方を試してみます。</p>
<p>WEBサイトを作るにあたって、デザイン部分とプログラム部分をわけることは管理をするうえで非常に重要なポイントとなります。サイトがシンプルなうちはまだいいのですが、複雑になるにつれメリットは大きくなります。このテンプレート機能はかなり充実してますが、全部を把握しょうとすると訳がわからなくなりますので、今回も最低限の機能だけ押さえます。</p>
<p>どのように分けるかというと、テンプレート部分でHTML上に変化される部分を置き、プログラム部分でその値を動的に変化をさせます。今回の出力結果は前回とまったく同じです。</p>
<p>[python]</p>
<p>#templateモジュールをインポートします。<br />
import os<br />
from google.appengine.ext.webapp import template</p>
<p>import cgi<br />
from google.appengine.ext import webapp<br />
from google.appengine.ext.webapp.util import run_wsgi_app<br />
from google.appengine.ext import db</p>
<p>class Message(db.Model):<br />
  name = db.StringProperty()<br />
  comment = db.StringProperty(multiline=True)<br />
  date = db.DateTimeProperty(auto_now_add=True)</p>
<p>class MainPage(webapp.RequestHandler):<br />
  def get(self):</p>
<p>    messages = db.GqlQuery(&#8220;SELECT * FROM Message ORDER BY date DESC LIMIT 10&#8243;)</p>
<p>    #テンプレート上で置き換える部分です。データストアの結果をそのまま使います。<br />
    template_values = {<br />
      &#8216;messages&#8217;: messages<br />
    }</p>
<p>    #テンプレートファイルへのパスです。<br />
    #今回は同じディレクトリにindex.htmlというファイルをつくります。<br />
    path = os.path.join(os.path.dirname(__file__), &#8216;index.html&#8217;)<br />
    #template.render(テンプレートファイルへのパス, 変換する内容)という使い方です。<br />
    self.response.out.write(template.render(path, template_values))</p>
<p>class Addcomment(webapp.RequestHandler):<br />
  def post(self):<br />
    message = Message()</p>
<p>    message.name = self.request.get(&#8216;name&#8217;)<br />
    message.comment = self.request.get(&#8216;comment&#8217;)<br />
    message.put()<br />
    self.redirect(&#8216;/&#8217;)</p>
<p>application = webapp.WSGIApplication(<br />
                                     [('/', MainPage),<br />
                                      ('/add', Addcomment)],<br />
                                     debug=True)</p>
<p>def main():<br />
  run_wsgi_app(application)</p>
<p>if __name__ == &#8220;__main__&#8221;:<br />
  main()<br />
[/python]</p>
<p>続いて、テンプレートファイルの内容です。</p>
<p>[python]</p>
<p><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br />
<html><br />
  <head><br />
    <title></title><br />
  </head><br />
  <body></p>
<p>      {% for message in messages %}<br />
        {% if message.name %}<br />
          {{ message.name|escape }} :<br />
        {% else %}<br />
          nanashi :<br />
        {% endif %}<br />
        {{ message.comment|escape }}<br />
        ( {{ message.date }} )<br />
        <br />
      {% endfor %}</p>
<form action="/add" method="post">
<div>
        name</p>
<input type="text" name="name" value=""></textarea>
    </div>
<div>
        comment<br />
        <textarea name="comment" rows="3" cols="60"></textarea>
    </div>
<div>
<input type="submit" value="submit">
    </div>
</p></form>
<p></body><br />
</html><br />
[/python]</p>
<p>for message in messages という部分でデータストアでの検索結果について、ひとつづつループ処理をして行きます。内容は前回と同じですが、message.name がある場合はそのデータを、データがない場合はnanashiと表示します。|escape という部分はテンプレートの機能でページの表示を壊す可能性がある部分を置き換えます。</p>
<p><a href="http://www.djangoproject.com/documentation/0.96/templates/#escape">http://www.djangoproject.com/documentation/0.96/templates/#escape</a></p>
<blockquote><p>ESCAPE<br />
Escapes a string’s HTML. Specifically, it makes these replacements:</p>
<p>&#8220;&#038;&#8221; to &#8220;&amp;&#8221;<br />
< to "&lt;"<br />
> to &#8220;&gt;&#8221;<br />
&#8216;&#8221;&#8216; (double quote) to &#8216;&quot;&#8217;<br />
&#8220;&#8216;&#8221; (single quote) to &#8216;&#39;&#8217;</p></blockquote>
<p>最後に投稿フォームを表示して完了です。</p>
<p>テンプレート部分を別にすることによってデザインとプログラム部分の分離ができました。これにより保守も楽にできるようになるのではと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://tohima.com/2010/07/15/5-google-app-engine-for-python-%e3%81%a7%e3%83%86%e3%83%b3%e3%83%97%e3%83%ac%e3%83%bc%e3%83%88%e3%82%92%e4%bd%bf%e3%81%86%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>4. Google App Engine for Python のデータストアを使って簡単なゲストブックを作ってみる。</title>
		<link>http://tohima.com/2010/07/15/4-google-app-engine-for-python-%e3%81%ae%e3%83%87%e3%83%bc%e3%82%bf%e3%82%b9%e3%83%88%e3%82%a2%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e7%b0%a1%e5%8d%98%e3%81%aa%e3%82%b2%e3%82%b9%e3%83%88%e3%83%96/</link>
		<comments>http://tohima.com/2010/07/15/4-google-app-engine-for-python-%e3%81%ae%e3%83%87%e3%83%bc%e3%82%bf%e3%82%b9%e3%83%88%e3%82%a2%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e7%b0%a1%e5%8d%98%e3%81%aa%e3%82%b2%e3%82%b9%e3%83%88%e3%83%96/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 15:37:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[GoogleAppEngine]]></category>

		<guid isPermaLink="false">http://tohima.com/?p=116</guid>
		<description><![CDATA[Google App Engineも第４回です、いよいよ今回はデータストアを使います。 しかし、Googleのドキュメントを読んでたのですが難しくてよくわかりません＞＜ ですが最低限必要な知識だけでなんとか動くものを作る、それくらいだとなんとかなるものです。 本当に必要なものだけを使って簡単なゲストブックを作りたいと思います。ゲストブックに必要なものは「名前・コメント・時間」、これだけあればなんとかなります。目指すはこのシンプルなゲストブック！ Googel App Engineのデータストアでは、プログラムの中で定義をして利用するといった使い方になります。 それではデータストアに保存されるデータの定義部分です。 [python] class Message(db.Model): name = db.StringProperty() comment = db.StringProperty(multiline=True) date = db.DateTimeProperty(auto_now_add=True) [/python] db.Modelを継承したMessageクラスです。 また、データストアのデータオブジェクトをエンティティ、それぞれのデータの種類が設定された値をプロパティと呼びます。これらの用語の意味がわからないならスルーしても問題ありません。続けていくことによって、いつか「こういう意味なのか！」って瞬間がくるとおもいます。ぼくもよくわかってません＞＜ StringProperty()、DateTimeProperty()などでそれぞれのデータを定義します。 multiline=Trueは改行を許可する、auto_now_add=Trueは現在時刻を自動で登録するなどのオプションとなります。 プログラムは、データとフォームを表示するMainpage部分とデータを追加するAddcomment部分です。 [python] import cgi from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app #DBモジュールをインポートする from google.appengine.ext import db #モデル部分 class Message(db.Model): name = db.StringProperty() comment = db.StringProperty(multiline=True) date =]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F15%2F4-google-app-engine-for-python-%25e3%2581%25ae%25e3%2583%2587%25e3%2583%25bc%25e3%2582%25bf%25e3%2582%25b9%25e3%2583%2588%25e3%2582%25a2%25e3%2582%2592%25e4%25bd%25bf%25e3%2581%25a3%25e3%2581%25a6%25e7%25b0%25a1%25e5%258d%2598%25e3%2581%25aa%25e3%2582%25b2%25e3%2582%25b9%25e3%2583%2588%25e3%2583%2596%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F15%2F4-google-app-engine-for-python-%25e3%2581%25ae%25e3%2583%2587%25e3%2583%25bc%25e3%2582%25bf%25e3%2582%25b9%25e3%2583%2588%25e3%2582%25a2%25e3%2582%2592%25e4%25bd%25bf%25e3%2581%25a3%25e3%2581%25a6%25e7%25b0%25a1%25e5%258d%2598%25e3%2581%25aa%25e3%2582%25b2%25e3%2582%25b9%25e3%2583%2588%25e3%2583%2596%2F&amp;source=tohima&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Google App Engineも第４回です、いよいよ今回はデータストアを使います。<br />
しかし、Googleのドキュメントを読んでたのですが難しくてよくわかりません＞＜</p>
<p>ですが最低限必要な知識だけでなんとか動くものを作る、それくらいだとなんとかなるものです。<br />
本当に必要なものだけを使って簡単なゲストブックを作りたいと思います。ゲストブックに必要なものは「名前・コメント・時間」、これだけあればなんとかなります。目指すはこのシンプルなゲストブック！</p>
<p><a href="http://www.flickr.com/photos/tohima/4793042191/" title="スクリーンショット by tohima, on Flickr"><img src="http://farm5.static.flickr.com/4076/4793042191_1a332a2f60.jpg" width="500" height="259" alt="スクリーンショット" /></a></p>
<p>Googel App Engineのデータストアでは、プログラムの中で定義をして利用するといった使い方になります。</p>
<p>それではデータストアに保存されるデータの定義部分です。</p>
<p>[python]<br />
class Message(db.Model):<br />
  name = db.StringProperty()<br />
  comment = db.StringProperty(multiline=True)<br />
  date = db.DateTimeProperty(auto_now_add=True)<br />
[/python]</p>
<p>db.Modelを継承したMessageクラスです。<br />
また、データストアのデータオブジェクトをエンティティ、それぞれのデータの種類が設定された値をプロパティと呼びます。これらの用語の意味がわからないならスルーしても問題ありません。続けていくことによって、いつか「こういう意味なのか！」って瞬間がくるとおもいます。ぼくもよくわかってません＞＜<br />
StringProperty()、DateTimeProperty()などでそれぞれのデータを定義します。<br />
multiline=Trueは改行を許可する、auto_now_add=Trueは現在時刻を自動で登録するなどのオプションとなります。</p>
<p>プログラムは、データとフォームを表示するMainpage部分とデータを追加するAddcomment部分です。</p>
<p>[python]</p>
<p>import cgi</p>
<p>from google.appengine.ext import webapp<br />
from google.appengine.ext.webapp.util import run_wsgi_app</p>
<p>#DBモジュールをインポートする<br />
from google.appengine.ext import db</p>
<p>#モデル部分<br />
class Message(db.Model):<br />
  name = db.StringProperty()<br />
  comment = db.StringProperty(multiline=True)<br />
  date = db.DateTimeProperty(auto_now_add=True)</p>
<p>#データとフォームを表示する部分です。<br />
class MainPage(webapp.RequestHandler):<br />
  def get(self):<br />
    self.response.out.write(&#8216;<html><body>&#8216;)</p>
<p>    #登録済みのデータの取得部分です。<br />
    #SQLに似たGQLを使います、最新の投稿を１０件取得します。<br />
    messages = db.GqlQuery(&#8220;SELECT * FROM Message ORDER BY date DESC LIMIT 10&#8243;)</p>
<p>    #返って来たデータを一件ずつ処理して行きます。<br />
    for message in messages:<br />
      #もし名前が登録されていれば、その名前を表示。<br />
      #登録されていなければnanashiと表示させます。<br />
      if message.name:<br />
        self.response.out.write(&#8216;%s :&#8217; % cgi.escape(message.name))<br />
      else:<br />
        self.response.out.write(&#8216;nanashi:&#8217;)</p>
<p>      #コメントと日付を表示します 「名前：コメント（日付）」といったふうに表示されます。<br />
      self.response.out.write(&#8216; %s &#8216; % cgi.escape(message.comment))<br />
      self.response.out.write(&#8216; (%s) <br />&#8216; % message.date)</p>
<p>    #登録済みのデータが表示されたら、フォームを表示します。<br />
    #それぞれの項目名はモデルのname,commentと連動しています。<br />
    self.response.out.write(&#8220;&#8221;"</p>
<form action="/add" method="post">
<div>
                name</p>
<input type="text" name="name" value="" cols="60"></textarea>
            </div>
<div>
                comment<br />
                <textarea name="comment" rows="3" cols="60"></textarea>
            </div>
<div>
<input type="submit" value="submit">
            </div>
</p></form>
<p>        </body><br />
      </html>&#8220;&#8221;")</p>
<p>#投稿されたデータをデータストアに登録する部分です。<br />
class Addcomment(webapp.RequestHandler):<br />
  #メソッドはPOSTです。<br />
  def post(self):<br />
    #messageはモデルクラスのインスタンスです。<br />
    message = Message()</p>
<p>    #投稿されたデータを対応させます。<br />
    message.name = self.request.get(&#8216;name&#8217;)<br />
    message.comment = self.request.get(&#8216;comment&#8217;)<br />
    #データの登録はput()だけですみます。すごい！<br />
    message.put()<br />
    #登録がすむと、通常ページにリダイレクトします。<br />
    self.redirect(&#8216;/&#8217;)</p>
<p>application = webapp.WSGIApplication(<br />
                                     [('/', MainPage),<br />
                                      ('/add', Addcomment)],<br />
                                     debug=True)</p>
<p>def main():<br />
  run_wsgi_app(application)</p>
<p>if __name__ == &#8220;__main__&#8221;:<br />
  main()<br />
[/python]</p>
<p>データストアが出てくると、とたんに用語が増えて混乱してきます＞＜<br />
ですが、データを扱えるようになると世界が広がります。すこしづつ、すこしづつやって行きたいと思います。今回のエントリも用語の使い方について自信ありませんが、それでもなんとか動くものが作れました。まだまだGoogle App Engineの入り口にたったばかりです。なんとか、がんばります。</p>
]]></content:encoded>
			<wfw:commentRss>http://tohima.com/2010/07/15/4-google-app-engine-for-python-%e3%81%ae%e3%83%87%e3%83%bc%e3%82%bf%e3%82%b9%e3%83%88%e3%82%a2%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e7%b0%a1%e5%8d%98%e3%81%aa%e3%82%b2%e3%82%b9%e3%83%88%e3%83%96/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>3. Google App Engine for Python でユーザからの送信されたデータを処理する。</title>
		<link>http://tohima.com/2010/07/13/3-google-app-engine-for-python-%e3%81%a7%e3%83%a6%e3%83%bc%e3%82%b6%e3%81%8b%e3%82%89%e3%81%ae%e9%80%81%e4%bf%a1%e3%81%95%e3%82%8c%e3%81%9f%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%87%a6%e7%90%86/</link>
		<comments>http://tohima.com/2010/07/13/3-google-app-engine-for-python-%e3%81%a7%e3%83%a6%e3%83%bc%e3%82%b6%e3%81%8b%e3%82%89%e3%81%ae%e9%80%81%e4%bf%a1%e3%81%95%e3%82%8c%e3%81%9f%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%87%a6%e7%90%86/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 14:56:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[GoogleAppEngine]]></category>

		<guid isPermaLink="false">http://tohima.com/?p=107</guid>
		<description><![CDATA[google app engine。 ３つめのエントリではユーザからの送信されたデータを表示するという単純なものです。 「,&#038;」が送信された場合に、そのまま表示してしまうとページが崩れてしまう恐れがありますので、pythonの標準ライブラリからCGIモジュールを使って置き換えをしています。 [python] #pythonの標準ライブラリからcgiモジュールをインポートする。 import cgi from google.appengine.api import users from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app class MainPage(webapp.RequestHandler): #メソッドがgetの場合 def get(self): #出力 self.response.out.write(&#8220;&#8221;" &#8220;&#8221;") class Guestbook(webapp.RequestHandler): #メソッドがpostの場合 def post(self): self.response.out.write(&#8216;You wrote: ') #cgi.escapeでポストされたcontentの「&#038;,」を置き換えて出力。 self.response.out.write(cgi.escape(self.request.get('content'))) self.response.out.write(' &#8216;) #URLリクエストによって振り分ける。 #http://アプリケーションのURL/の場合はMainPage、 #http://アプリケーションのURL/signの場合はGuestbook。 application = webapp.WSGIApplication( [('/', MainPage), ('/sign', Guestbook)], debug=True) def main(): run_wsgi_app(application)]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F13%2F3-google-app-engine-for-python-%25e3%2581%25a7%25e3%2583%25a6%25e3%2583%25bc%25e3%2582%25b6%25e3%2581%258b%25e3%2582%2589%25e3%2581%25ae%25e9%2580%2581%25e4%25bf%25a1%25e3%2581%2595%25e3%2582%258c%25e3%2581%259f%25e3%2583%2587%25e3%2583%25bc%25e3%2582%25bf%25e3%2582%2592%25e5%2587%25a6%25e7%2590%2586%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F13%2F3-google-app-engine-for-python-%25e3%2581%25a7%25e3%2583%25a6%25e3%2583%25bc%25e3%2582%25b6%25e3%2581%258b%25e3%2582%2589%25e3%2581%25ae%25e9%2580%2581%25e4%25bf%25a1%25e3%2581%2595%25e3%2582%258c%25e3%2581%259f%25e3%2583%2587%25e3%2583%25bc%25e3%2582%25bf%25e3%2582%2592%25e5%2587%25a6%25e7%2590%2586%2F&amp;source=tohima&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>google app engine。<br />
３つめのエントリではユーザからの送信されたデータを表示するという単純なものです。<br />
「<,>,&#038;」が送信された場合に、そのまま表示してしまうとページが崩れてしまう恐れがありますので、pythonの標準ライブラリからCGIモジュールを使って置き換えをしています。</p>
<p>[python]<br />
#pythonの標準ライブラリからcgiモジュールをインポートする。<br />
import cgi</p>
<p>from google.appengine.api import users<br />
from google.appengine.ext import webapp<br />
from google.appengine.ext.webapp.util import run_wsgi_app</p>
<p>class MainPage(webapp.RequestHandler):<br />
  #メソッドがgetの場合<br />
  def get(self):<br />
    #出力<br />
    self.response.out.write(&#8220;&#8221;"<br />
      <html><br />
        <body></p>
<form action="/sign" method="post">
<div><textarea name="content" rows="3" cols="60"></textarea></div>
<div>
<input type="submit" value="Sign Guestbook"></div>
</p></form>
<p>        </body><br />
      </html>&#8220;&#8221;")</p>
<p>class Guestbook(webapp.RequestHandler):<br />
  #メソッドがpostの場合<br />
  def post(self):<br />
    self.response.out.write(&#8216;<html><body>You wrote:
<pre>')

    #cgi.escapeでポストされたcontentの「&#038;,<,>」を置き換えて出力。
    self.response.out.write(cgi.escape(self.request.get('content')))

    self.response.out.write('</pre>
<p></body></html>&#8216;)</p>
<p>#URLリクエストによって振り分ける。<br />
#http://アプリケーションのURL/の場合はMainPage、<br />
#http://アプリケーションのURL/signの場合はGuestbook。<br />
application = webapp.WSGIApplication(<br />
                                     [('/', MainPage),<br />
                                      ('/sign', Guestbook)],<br />
                                     debug=True)</p>
<p>def main():<br />
  run_wsgi_app(application)</p>
<p>if __name__ == &#8220;__main__&#8221;:<br />
  main()<br />
[/python]</p>
<p>CGIについてはpythonのサイトに詳細が載っています（英語）。<br />
<a href="http://docs.python.org/library/cgi.html">http://docs.python.org/library/cgi.html</a></p>
<blockquote><p>Convert the characters &#8216;&#038;&#8217;, &#8216;<' and '>&#8216; in string s to HTML-safe sequences. Use this if you need to display text that might contain such characters in HTML.</p></blockquote>
<p>get()とpost()の２つを定義することで、それぞれのリクエストメソッドに対応した動作をすることが出来ます。</p>
<p>このデータをDBに登録すると、例えば掲示板やチャットのようなアプリケーションが作成できます。</p>
]]></content:encoded>
			<wfw:commentRss>http://tohima.com/2010/07/13/3-google-app-engine-for-python-%e3%81%a7%e3%83%a6%e3%83%bc%e3%82%b6%e3%81%8b%e3%82%89%e3%81%ae%e9%80%81%e4%bf%a1%e3%81%95%e3%82%8c%e3%81%9f%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92%e5%87%a6%e7%90%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2: Google App Engine for Python でUsersライブラリを使ってみる。</title>
		<link>http://tohima.com/2010/07/13/2-google-app-engine-for-python-%e3%81%a7users%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b%e3%80%82/</link>
		<comments>http://tohima.com/2010/07/13/2-google-app-engine-for-python-%e3%81%a7users%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b%e3%80%82/#comments</comments>
		<pubDate>Mon, 12 Jul 2010 16:14:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[GoogleAppEngine]]></category>

		<guid isPermaLink="false">http://tohima.com/?p=98</guid>
		<description><![CDATA[前回からだいぶ時間が空いてしまいました＞＜ 趣味のひとつとして、無料で遊べるGoogleAppEngineでプログラミングの勉強をしていきます。まったくわかんない状態からなんとか頑張ります。今回はUsersライブラリについて。 Google App Engine はUsersライブラリを利用すると Google Acountと連携できます。 Googleの解説ページを見ながらさっそくやってみます。 http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/usingusers.html Userライブラリはローカルの場合はテスト用の動作になるので注意が必要です。 [python] #usersライブラリを使えるようにするためにインポートする。 from google.appengine.api import users from google.appengine.ext import webapp from google.appengine.ext.webapp.util import run_wsgi_app class MainPage(webapp.RequestHandler): def get(self): #get_current_user()はGoogleにログインしていればUserオブジェクトを返す。 #ログインしてなければNoneを返す。 user = users.get_current_user() if user: #ログインしている場合 self.response.headers['Content-Type'] = &#8216;text/plain&#8217; #user.nickname()はニックネームです。 #アカウントのメールアドレスとアプリケーションのドメインが一致しているかどうかで値が変わる。 self.response.out.write(&#8216;Hello, &#8216; + user.nickname()) else: #ログインしていない場合はログインページへとリダイレクトする。 #self.request.uriを指定することで、ログイン後にこのページへと戻ってくる。 self.redirect(users.create_login_url(self.request.uri)) application = webapp.WSGIApplication( [('/', MainPage)],]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F13%2F2-google-app-engine-for-python-%25e3%2581%25a7users%25e3%2583%25a9%25e3%2582%25a4%25e3%2583%2596%25e3%2583%25a9%25e3%2583%25aa%25e3%2582%2592%25e4%25bd%25bf%25e3%2581%25a3%25e3%2581%25a6%25e3%2581%25bf%25e3%2582%258b%25e3%2580%2582%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F13%2F2-google-app-engine-for-python-%25e3%2581%25a7users%25e3%2583%25a9%25e3%2582%25a4%25e3%2583%2596%25e3%2583%25a9%25e3%2583%25aa%25e3%2582%2592%25e4%25bd%25bf%25e3%2581%25a3%25e3%2581%25a6%25e3%2581%25bf%25e3%2582%258b%25e3%2580%2582%2F&amp;source=tohima&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>前回からだいぶ時間が空いてしまいました＞＜<br />
趣味のひとつとして、無料で遊べるGoogleAppEngineでプログラミングの勉強をしていきます。まったくわかんない状態からなんとか頑張ります。今回はUsersライブラリについて。</p>
<p>Google App Engine はUsersライブラリを利用すると Google Acountと連携できます。<br />
Googleの解説ページを見ながらさっそくやってみます。<br />
<a href="http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/usingusers.html">http://code.google.com/intl/ja/appengine/docs/python/gettingstarted/usingusers.html</a></p>
<p>Userライブラリはローカルの場合はテスト用の動作になるので注意が必要です。</p>
<p>[python]<br />
#usersライブラリを使えるようにするためにインポートする。<br />
from google.appengine.api import users</p>
<p>from google.appengine.ext import webapp<br />
from google.appengine.ext.webapp.util import run_wsgi_app</p>
<p>class MainPage(webapp.RequestHandler):<br />
  def get(self):</p>
<p>    #get_current_user()はGoogleにログインしていればUserオブジェクトを返す。<br />
    #ログインしてなければNoneを返す。<br />
    user = users.get_current_user()</p>
<p>    if user:<br />
      #ログインしている場合</p>
<p>      self.response.headers['Content-Type'] = &#8216;text/plain&#8217;<br />
      #user.nickname()はニックネームです。<br />
      #アカウントのメールアドレスとアプリケーションのドメインが一致しているかどうかで値が変わる。<br />
      self.response.out.write(&#8216;Hello, &#8216; + user.nickname())</p>
<p>    else:<br />
      #ログインしていない場合はログインページへとリダイレクトする。</p>
<p>      #self.request.uriを指定することで、ログイン後にこのページへと戻ってくる。<br />
      self.redirect(users.create_login_url(self.request.uri))</p>
<p>application = webapp.WSGIApplication(<br />
                                     [('/', MainPage)],<br />
                                     debug=True)</p>
<p>def main():<br />
  run_wsgi_app(application)</p>
<p>if __name__ == &#8220;__main__&#8221;:<br />
  main()</p>
<p>[/python]</p>
<p>Userには次のメソッドがあります。</p>
<ul>
<li>nickname()</li>
<li>email()</li>
<li>user_id()</li>
</ul>
<p>nickname()はアプリのドメインとメールアドレスのドメインが同一かどうかで返す値が変わります。同一の場合は＠の左側のみ、異なる場合はメールアドレス全体が返ってきます。<br />
email()はメールアドレスが返ってきます。<br />
user_id()は一意のIDを返します、これはユーザがアドレスを変更した場合でも変更されません。</p>
<p>Usersライブラリを利用すると、簡単にGoogleAcountを利用したサービスの作成が可能となります。</p>
<p>次：<a href="http://tohima.com/2010/07/13/3-google-app-engine-for-python-%E3%81%A7%E3%83%A6%E3%83%BC%E3%82%B6%E3%81%8B%E3%82%89%E3%81%AE%E9%80%81%E4%BF%A1%E3%81%95%E3%82%8C%E3%81%9F%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%87%A6%E7%90%86/">3. Google App Engine for Python でユーザからの送信されたデータを処理する。</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tohima.com/2010/07/13/2-google-app-engine-for-python-%e3%81%a7users%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ちょっとてすとー。</title>
		<link>http://tohima.com/2010/07/11/%e3%81%a1%e3%82%87%e3%81%a3%e3%81%a8%e3%81%a6%e3%81%99%e3%81%a8%e3%83%bc%e3%80%82/</link>
		<comments>http://tohima.com/2010/07/11/%e3%81%a1%e3%82%87%e3%81%a3%e3%81%a8%e3%81%a6%e3%81%99%e3%81%a8%e3%83%bc%e3%80%82/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 08:47:42 +0000</pubDate>
		<dc:creator>tohima</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://tohima.com/2010/07/11/%e3%81%a1%e3%82%87%e3%81%a3%e3%81%a8%e3%81%a6%e3%81%99%e3%81%a8%e3%83%bc%e3%80%82/</guid>
		<description><![CDATA[ちょっとてすとー。 Originally uploaded by tohima てすとで投稿してみます。 iPhoneからメールでflickrにポスト。 そこからwordpressへ自動ポスト。 そこからtwitterへ自動ポスト。 タイムラグあんのかな。現在17:47。]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F11%2F%25e3%2581%25a1%25e3%2582%2587%25e3%2581%25a3%25e3%2581%25a8%25e3%2581%25a6%25e3%2581%2599%25e3%2581%25a8%25e3%2583%25bc%25e3%2580%2582%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F11%2F%25e3%2581%25a1%25e3%2582%2587%25e3%2581%25a3%25e3%2581%25a8%25e3%2581%25a6%25e3%2581%2599%25e3%2581%25a8%25e3%2583%25bc%25e3%2580%2582%2F&amp;source=tohima&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<div style="float: right; margin-left: 10px; margin-bottom: 10px;">
<a href="http://www.flickr.com/photos/tohima/4782552602/" title="photo sharing"><img src="http://farm5.static.flickr.com/4102/4782552602_5df60863e1.jpg" alt="" style="border: solid 2px #000000;" /></a><br />
<br />
<span style="font-size: 0.9em; margin-top: 0px;"><br />
<a href="http://www.flickr.com/photos/tohima/4782552602/">ちょっとてすとー。</a><br />
<br />
Originally uploaded by <a href="http://www.flickr.com/people/tohima/">tohima</a><br />
</span>
</div>
<p>てすとで投稿してみます。</p>
<p>iPhoneからメールでflickrにポスト。<br />
そこからwordpressへ自動ポスト。<br />
そこからtwitterへ自動ポスト。</p>
<p>タイムラグあんのかな。現在17:47。<br />
<br clear="all" /></p>
]]></content:encoded>
			<wfw:commentRss>http://tohima.com/2010/07/11/%e3%81%a1%e3%82%87%e3%81%a3%e3%81%a8%e3%81%a6%e3%81%99%e3%81%a8%e3%83%bc%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ちゃんぽん@長崎亭。</title>
		<link>http://tohima.com/2010/07/07/083723/</link>
		<comments>http://tohima.com/2010/07/07/083723/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 23:37:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://tohima.com/2010/07/07/083723/</guid>
		<description><![CDATA[tohima posted a photo: うまー！560円。]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F07%2F083723%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F07%2F083723%2F&amp;source=tohima&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://www.flickr.com/people/tohima/">tohima</a> posted a photo:</p>
<p><a href="http://www.flickr.com/photos/tohima/4766617134/" title="ちゃんぽん@長崎亭。"><img src="http://farm5.static.flickr.com/4082/4766617134_7d3b6f4c37_m.jpg" width="180" height="240" alt="ちゃんぽん@長崎亭。" /></a></p>
<p>うまー！560円。</p>
]]></content:encoded>
			<wfw:commentRss>http://tohima.com/2010/07/07/083723/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>蒸した。魚とパプリカ。</title>
		<link>http://tohima.com/2010/07/05/200551/</link>
		<comments>http://tohima.com/2010/07/05/200551/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 11:05:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://tohima.com/2010/07/05/200551/</guid>
		<description><![CDATA[tohima posted a photo: マヨネーズと味ぽんでいただきます。]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F05%2F200551%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ftohima.com%2F2010%2F07%2F05%2F200551%2F&amp;source=tohima&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://www.flickr.com/people/tohima/">tohima</a> posted a photo:</p>
<p><a href="http://www.flickr.com/photos/tohima/4763075123/" title="蒸した。魚とパプリカ。"><img src="http://farm5.static.flickr.com/4139/4763075123_3120f470ff_m.jpg" width="180" height="240" alt="蒸した。魚とパプリカ。" /></a></p>
<p>マヨネーズと味ぽんでいただきます。</p>
]]></content:encoded>
			<wfw:commentRss>http://tohima.com/2010/07/05/200551/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
