<?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/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>Webシステム開発の株式会社フラッツ</title>
	<atom:link href="http://www.flatz.jp/feed" rel="self" type="application/rss+xml" />
	<link>http://www.flatz.jp</link>
	<description>フラッツはWebシステム開発専門の会社です。お客様のお悩み・ご要望に沿ったWebシステム開発プランをご提案いたします。お気軽にご相談ください。</description>
	<lastBuildDate>Mon, 08 Mar 2010 04:05:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/feed" />
		<item>
		<title>モテるアルゴリズム講座　 第1回 グラフでモテたい</title>
		<link>http://www.flatz.jp/archives/3001</link>
		<comments>http://www.flatz.jp/archives/3001#comments</comments>
		<pubDate>Fri, 05 Mar 2010 06:00:08 +0000</pubDate>
		<dc:creator>amakata</dc:creator>
				<category><![CDATA[FLATzブログ]]></category>
		<category><![CDATA[アルゴリズム]]></category>
		<category><![CDATA[技術情報]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[グラフ]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=3001</guid>
		<description><![CDATA[
天方です。

今日からモテるアルゴリズム講座を始めたいと思います。

それでは、第1回グラフでモテたいの講義を始めようと思います。
なんといってもアルゴリズムができるとかいうと、いろいろモテます。
この講座を通じて、皆 [...]]]></description>
			<content:encoded><![CDATA[<p>
</p><p>天方です。</p>
<br />
<p>今日からモテるアルゴリズム講座を始めたいと思います。</p>
<br />
<p>それでは、第1回グラフでモテたいの講義を始めようと思います。<br />
なんといってもアルゴリズムができるとかいうと、いろいろモテます。<br />
この講座を通じて、皆さんもアルゴリズムをマスターしてモテてください。</p>
<br />
<p>本日は、モテるアルゴリズムを考える上で重要な<br />
グラフのデータ構造について話をしたいと思います。</p>
<br />
<p>グラフというと、普通思い浮かべるのは棒グラフとか円グラフとかかもしれませんが、今回は違います。そんな反応をしていると婚期を逃します。</p>
<br />
<p>グラフというのは、点と枝かつながってできるものをグラフと言います。</p>
<br />
<div id="attachment_3023" class="wp-caption aligncenter" style="width: 310px"><img src="http://www.flatz.jp/wp-content/uploads/2010/03/graph01_01_03-300x250.PNG" alt="グラフの例" title="graph01_01_03" width="300" height="250" class="size-medium wp-image-3023" /><p class="wp-caption-text">グラフの例</p></div><br />
<br />
<p>グラフはいろいろな分野で使われていると思いますが、<br />
あのGoogleも検索エンジンのページの順位付けのためにグラフの概念を利用していたいりします。</p>
<br />
<p>さて、グラフをコンピュータ上で扱おうとすると、そのデータ構造の持たせ方に悩みます。<br />
グラフ用のライブラリを使えばそれほど大変でもないのですが、やはり自分で書いた方がモテます。</p>
<br />
<p>グラフをデータとして表現するにはいくつか方法があります。<br />
では、上記の図で示したグラフをさまざまなデータ構造で表現してみようと思います。</p>
<br />
<p>まず、上の図の点と枝を数学的な表現を使って次のように表現することにします。</p>
<br />
<p>点の集合 <img src="http://www.flatz.jp/wp-content/cache/tex_61c1f97f9d9d0d76206ce3ff9f6069ce.gif" class="tex" alt="V=&#92;{v_1,v_2,v_3,v_4,v_5,v_6&#92;}" /></p>
<br />
<p>枝の集合 <img src="http://www.flatz.jp/wp-content/cache/tex_b8a99854e1f8fab799c514dce2962621.gif" class="tex" alt="E=&#92;{e_1,e_2,e_3,e_4,e_5,e_6,e_7,e_8,e_9,e_{10}&#92;}" /></p>
<br />
<p>その場合、点と枝の接続関係は次のようになります。</p>
<br />
<p>枝, 始点, 終点<br />
<img src="http://www.flatz.jp/wp-content/cache/tex_4905f169cb5730dde4790a05da990d25.gif" class="tex" alt="e_1,v_1,v_2&#92;&#92;e_2,v_2,v_4&#92;&#92;e_3,v_3,v_4&#92;&#92;e_4,v_4,v_5&#92;&#92;e_5,v_5,v_6&#92;&#92;e_6,v_6,v_1&#92;&#92;e_7,v_1,v_3&#92;&#92;e_8,v_5,v_2&#92;&#92;e_9,v_3,v_6&#92;&#92;e_{10},v_1,v_1" /></p>
<br />
<p>ちなみに、向きがある枝でできたグラフを有向グラフと呼びます。<br />
向きがない枝でできたグラフを無向グラフと呼びます。</p>
<br />
<p>こういったグラフを表現するデータ構造としては、枝の始点と終点の番号の組を持たせることでグラフを表現する方法があります。</p>
<br />
<p>それではこのグラフのデータ構造をRubyをつかって表現してみましょう。</p>
<br />
<p>例えば、上記の視点と終点をRubyの配列で表現すると下記のようになります。</p>
<br />
<p>start_vertex = [1,2,3,4,5,6,1,5,3,1]<br />
end_vertex   = [2,4,4,5,6,1,3,2,6,1]</p>
<br />
<p>これは、さきほど示した数学的な表現だと下記のような表現になります。<br />
<img src="http://www.flatz.jp/wp-content/cache/tex_2d9ceefab138e7cd2104c4e05cf1e671.gif" class="tex" alt="start&#92;_vertex=[v_1,v_2,v_3,v_4,v_5,v_6,v_1,v_5,v_3,v_1]&#92;&#92;end&#92;_vertex=[v_2,v_4,v_4,v_5,v_6,v_1,v_3,v_2,v_6,v_1]" /> &#8230; ①</p>
<br />
<p>配列の添え字が、枝の添え字 &#8211; 1になります。</p>
<br />
<p>頂点間に枝があるかどうかを調べるには<br />
頂点数をnとすると<img src="http://www.flatz.jp/wp-content/cache/tex_7ba55e7c64a9405a0b39a1107e90ca94.gif" class="tex" alt="O(n)" />の計算量(時間的)がかかります。<br />
また、計算量(空間的)は枝数を<img src="http://www.flatz.jp/wp-content/cache/tex_6f8f57715090da2632453988d9a1501b.gif" class="tex" alt="m" />とすると<img src="http://www.flatz.jp/wp-content/cache/tex_93b47baf59ea142b485dc22577a56dac.gif" class="tex" alt="2m" />です。</p>
<br />
<p>そこで、各頂点毎に、出入りする枝を持つという手があります。</p>
<br />
<p>たとえば、下記の様な図のように一つの頂点に出入りする枝に注目します。</p>
<br />
<div id="attachment_3044" class="wp-caption aligncenter" style="width: 310px"><img src="http://www.flatz.jp/wp-content/uploads/2010/03/graph01_02_02-300x214.png" alt="頂点v1に入る枝と出る枝の例" title="graph01_02_02" width="300" height="214" class="size-medium wp-image-3044" /><p class="wp-caption-text">頂点v1に入る枝と出る枝の例</p></div><br />
<br />
<p>これはRubyで表現すると下記のようになります。</p>
<br />
<p>start_edge = [[1, 7, 10], [2], [3, 9], [4], [5, 8], [6]]<br />
end_edge = [[6, 10], [1, 8], [7], [2, 3], [4], [5, 9]]</p>
<br />
<p>数学的な表現では下記のようになります。<br />
<img src="http://www.flatz.jp/wp-content/cache/tex_2bfc331b5fed36f4219ee434e80b86cf.gif" class="tex" alt="start&#92;_edge=[[e_1,e_7,e_{10}],[e_2],[e_3,e_9],[e_4],[e_5,e_8],[e_6]]&#92;&#92;end&#92;_edge=[[e_6,e_{10}],[e_1,e_8],[e_7],[e_2,e_3],[e_4],[e_5,e_9]]" />  &#8230; ②</p>
<br />
<p>これで、頂点と枝の両方から検索ができるデータ構造ができました。ここモテます。<br />
でも、もうすこしハイクラスのモテを期待したい場合は、クラスを利用したほうがいいと思います。</p>
<br />
<p>さて、配列でグラフを表現できるとからモテモテだと思っていい気になってはいけません。<br />
やはりグラフを表現する場合にもTPOがあります。<br />
例えば、他のラフの表現方法としては、接続行列を使う方法もあります。</p>
<br />
<p>接続行列<img src="http://www.flatz.jp/wp-content/cache/tex_63db7b88830cf596a2e05c4297d55e10.gif" class="tex" alt=" M=&#92;left&#92;(<br />
  &#92;begin{array}{ccc}<br />
   1  &amp; 0  &amp;  0 &amp;  0 &amp; 0 &amp; -1 &amp;  1 &amp;  0 &amp;  0 &amp; 0&#92;<br />
   -1 &amp; 1  &amp;  0 &amp;  0 &amp; 0 &amp;  0 &amp;  0 &amp; -1 &amp;  0 &amp; 0&#92;<br />
   0  &amp; 0  &amp;  1 &amp;  0 &amp; 0 &amp;  0 &amp; -1 &amp;  0 &amp;  1 &amp; 0&#92;<br />
   0  &amp; -1 &amp; -1 &amp;  1 &amp; 0 &amp;  0 &amp;  0 &amp;  0 &amp;  0 &amp; 0&#92;<br />
   0  &amp; 0  &amp;  0 &amp; -1 &amp; 1 &amp;  0 &amp;  0 &amp;  1 &amp;  0 &amp; 0&#92;<br />
   0  &amp; 0  &amp;  0 &amp;  0 &amp;-1 &amp;  1 &amp;  0 &amp;  0 &amp; -1 &amp; 0&#92;<br />
  &#92;end{array}<br />
&#92;right)" /> &#8230; ③</p>
<br />
<p>縦の座標が頂点の添え字、横の座標が枝の添え字に対応し、<br />
要素が1であれば、その頂点を始点、要素が-1であれば、その頂点を終点とすることを表現しています。<br />
この場合、計算量(空間的)は<img src="http://www.flatz.jp/wp-content/cache/tex_93122a9e4abcba124d5a7d4beaba3f89.gif" class="tex" alt="nm" />です。頂点間に枝があるかを調べる計算量(時間的)は<img src="http://www.flatz.jp/wp-content/cache/tex_0e2ae329177722b1818828e92b441032.gif" class="tex" alt="O(m)" />です。<br />
ちなみに、接続行列だと、自己ループしている枝を表すことができません。<br />
そういえば、さきほどの配列を用いた、枝の始点と終点の番号の組のデータ構造だと、枝がない頂点を表現できません。<br />
そこらへんについて、「ちょっときみ、そのデータ構造だと、自己ループが表現できないので、今回の案件には使わない方がいいと思うよ」と<br />
それとなく耳打ちできるとそれとなくモテます。</p>
<br />
<p>他に隣接行列で表現する方法もあります。</p>
<br />
<p>隣接行列 <img src="http://www.flatz.jp/wp-content/cache/tex_0b2f32c35d706ae930da4fadc865fa68.gif" class="tex" alt="A=&#92;left&#92;(<br />
  &#92;begin{array}{ccc}<br />
  1 &amp; 1 &amp; 1 &amp; 0 &amp; 0 &amp; 0 &#92;<br />
  0 &amp; 1 &amp; 0 &amp; 0 &amp; 0 &amp; 0 &#92;<br />
  0 &amp; 0 &amp; 0 &amp; 1 &amp; 0 &amp; 1 &#92;<br />
  0 &amp; 0 &amp; 0 &amp; 0 &amp; 1 &amp; 0 &#92;<br />
  0 &amp; 1 &amp; 0 &amp; 0 &amp; 0 &amp; 1 &#92;<br />
  1 &amp; 0 &amp; 0 &amp; 0 &amp; 0 &amp; 0 &#92;<br />
  &#92;end{array}<br />
&#92;right)" /> &#8230; ④</p>
<br />
<p>これは、縦の座標を始点の頂点の添え字に対応させ、横の座標を終点の頂点の添え字に対応させて表現したもので、1なら接続している、0なら接続していないという表現です。この場合、計算量(空間的)は<img src="http://www.flatz.jp/wp-content/cache/tex_6595d679e306a127a3fe53268bcaddb2.gif" class="tex" alt="n^2" />です。頂点間に枝があるかを調べる計算量(時間的)は<img src="http://www.flatz.jp/wp-content/cache/tex_5e079a28737d5dd019a3b8f6133ee55e.gif" class="tex" alt="O(1)" />です。<br />
みなさん、もうお気づきとは思いますが、隣接行列では、同じ始点、終点をもつ複数の枝を表すことができなくなります。</p>
<br />
<p>さて、４種類ほど表現方法を扱いましたが、それぞれの表現では、表現できるパターンの制約や、グラフを参照、更新する場合の計算量（時間的、空間的）などが違います。<br />
シチュエーションや、相手の好みによって、表現方法を変えるとモテまくります。</p>
<br />
<p>みなさんもグラフでモテてみませんか？</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=3001&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/3001/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/3001" />
	</item>
		<item>
		<title>第1回プログラマーズカフェナイト＠原宿 を開催しました！</title>
		<link>http://www.flatz.jp/archives/2981</link>
		<comments>http://www.flatz.jp/archives/2981#comments</comments>
		<pubDate>Tue, 02 Mar 2010 05:30:50 +0000</pubDate>
		<dc:creator>hisasue</dc:creator>
				<category><![CDATA[FLATzブログ]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2981</guid>
		<description><![CDATA[
久末です。

先日(2月22日)、プログラマーズカフェナイト@原宿というイベントを弊社で行いました。



今回はLTをメインに行いました。

さて、今回のLT発表者は以下の方々です。

プログラマーズカフェナイト &#038; [...]]]></description>
			<content:encoded><![CDATA[<p>
</p><p>久末です。</p>
<br />
<p>先日(2月22日)、プログラマーズカフェナイト@原宿というイベントを弊社で行いました。</p>
<br />
<p><object id="utv820912" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="386" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="utv_n_467793" /><param name="flashvars" value="loc=%2F&amp;autoplay=false&amp;vid=4922682" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.ustream.tv/flash/video/4922682" /><embed id="utv820912" type="application/x-shockwave-flash" width="480" height="386" src="http://www.ustream.tv/flash/video/4922682" allowscriptaccess="always" allowfullscreen="true" flashvars="loc=%2F&amp;autoplay=false&amp;vid=4922682" name="utv_n_467793"></embed></object></p>
<br />
<p>今回はLTをメインに行いました。</p>
<br />
<div id="attachment_2983" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-2983  " title="プログラマーズカフェナイトの様子 Photo by 三鷹PGカフェ" src="http://www.flatz.jp/wp-content/uploads/2010/03/IMG_1172-300x225.jpg" alt="プログラマーズカフェナイトの様子" width="300" height="225" /><p class="wp-caption-text">プログラマーズカフェナイトの様子 Photo by 三鷹PGカフェ</p></div><br />
<br />
<p>さて、今回のLT発表者は以下の方々です。</p>
<br />
<p><a href="http://d.hatena.ne.jp/kuippa/20100222/1266836529" target="_blank">プログラマーズカフェナイト &#8211; 紅茶屋くいっぱのあれこれ日記</a></p>
<br />
<p>webプログラマが楽にiPhoneアプリを開発する方法<br />
<a href="http://twitter.com/jishiha" target="_blank">@jishiha</a></p>
<br />
<p>3分でできるGoogle App Engine<br />
<a href="http://twitter.com/bluerabbit777jp">@bluerabbit777jp</a></p>
<br />
<p>ExtJS &amp; HTML5<br />
<a href="http://twitter.com/Tommy1969" target="_blank">@Tommy1969</a></p>
<br />
<p>お手軽 GoogleAppEngine / Java + slim3<br />
<a href="http://shin1o.blogspot.com/2010/02/pgcafe.html" target="_blank">404 shin1のつぶやき ないわー Not Found: 第１回プログラマーズカフェナイト＠原宿に参加した #pgcafe</a><br />
<a href="http://twitter.com/shin1ogawa" target="_blank">@shin1ogawa</a></p>
<br />
<p>ギークハウスの話<br />
<a href="http://twitter.com/youchan" target="_blank">@youchan</a></p>
<br />
<p>月曜日にもかかわらず40名募集のところに47名ほどの応募があり、最終的には30名程度、Ustreamの試聴が30名を超えるイベントになりました。</p>
<br />
<p>LT発表者のみなさん、参加者のみなさん、お手伝いのみなさん、ありがとうございます。</p>
<br />
<h3>三鷹プログラマーズカフェとは？</h3>
<br />
<p>プログラマーズカフェナイトは<a href="http://groups.google.co.jp/group/m-pgcafe/" target="_blank">三鷹プログラマーズカフェ</a>の派生イベントと述べましたが、<br />
三鷹プログラマーズカフェをご存じない方のために簡単にご紹介を。</p>
<br />
<p>三鷹プログラマーズカフェは、毎週木曜日、15〜18時に、三鷹産業プラザ地下1階で開催しているイベントです。<br />
プログラマ(とは限らないのですが)が集まって話ができる「場」を提供しています。</p>
<br />
<p>プログラマーズカフェは会話が主体で、勉強会やセミナーと違って特定の目的がありません。<br />
ですから、</p>
<br />
<ul>
    <li>自分で作ったプログラムやサービス</li>
    <li>最近近話題になっている技術やサービス</li>
    <li>仕事のこと</li>
    <li>三鷹のこと</li>
    <li>プログラマーズカフェ自体のこと</li>
    <li>世間話</li>
</ul>
<br />
<p>といった話だけでなく、ちょっと公開できないようなこぼれ話や、プログラムなどとは全く関係のない話など、話題はあらぬ方向へ散らばっていきます。<br />
それが面白いかどうか、役に立つかどうかはその人次第ですが、よくわからないものに積極的に興味を持てる人ならおもしろさを感じられるかもしれません。</p>
<br />
<p>三鷹プログラマーズカフェの主催は以下の三方です。</p>
<br />
<ul>
    <li><a href="http://twitter.com/kuippa" target="_blank">@kuippa</a></li>
    <li><a href="http://twitter.com/kclab" target="_blank">@kclab</a></li>
    <li><a href="http://twitter.com/ysakaki" target="_blank">@ysakaki</a></li>
</ul>
<br />
<p>時間があったらこちらにも是非参加してください。</p>
<br />
<h3>三鷹プログラマーズカフェと私</h3>
<br />
<p>私(久末)は、昨年まで弊社が三鷹駅付近にあった関係で、三鷹プログラマーズカフェの最初のイベントから参加することができました。<br />
以来、できるだけ毎回参加しています。何が参ｌ</p>
<br />
<h3>なぜプログラマーズカフェナイト＠原宿なのか</h3>
<br />
<p>三鷹プログラマーズカフェは公式には15時〜18時なのですが、実際は、18時以降も<br />
三鷹産業プラザ内の<a href="http://www.hi-famiglia.com/" target="_blank">Cafe Hi Famiglia</a>さんで、話が盛り上がったりしています。</p>
<br />
<p>とはいえ、公式には、平日の午後に開催ということで一般の会社務めの方には現実的に難しいのも事実。<br />
そこで、たまたま弊社が三鷹から原宿に引っ越し、イベントができるスペースがあるということで、<br />
夜のカフェをやろうという話をプログラマーズカフェの方々に持ちかけました。<br />
すると主催のkuippaさんをはじめ、プログラマーズカフェに参加している数名に賛同していただき開催に至りました。<br />
以下が今回の実行委員会的なメンバー。</p>
<br />
<ul>
    <li><a href="http://twitter.com/2celeb" target="_blank">@2celeb</a></li>
    <li><a href="http://twitter.com/jishiha" target="_blank">@jishiha</a></li>
    <li><a href="http://twitter.com/kohyama" target="_blank">@kohyama</a></li>
    <li><a href="http://twitter.com/kuippa" target="_blank">@kuippa</a></li>
    <li><a href="http://twitter.com/naoranger" target="_blank">@naoranger</a></li>
    <li><a href="http://twitter.com/THashidate"  target="_blank">@THashidate</a></li>
    <li><a href="http://twitter.com/hisasue " target="_blank">@hisasue</a></li>
</ul>
<br />
<h3>次回</h3>
<br />
<p>さて、実は、次回については、既に話を始めています。<br />
興味のある方は是非参加してください。<br />
告知は</p>
<br />
<p>三鷹プログラマーズカフェ (pgcafe) on Twitter<br />
<a href="http://twitter.com/pgcafe" target="_blank">http://twitter.com/pgcafe</a></p>
<br />
<p>で行いますので、気になる方はフォローしてください。</p>
<br />
<p>最後に、弊社で開催と言っていますが、ここのオフィスはそもそも<a href="http://www.sinap.jp/" target="_blank">株式会社シナップ</a>さんのオフィスで弊社がオフィスシェアをさせていただいている場所です。<br />
この素敵なオフィス空間を無償でイベントに使わせてくださったシナップさんにも感謝します。</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2981&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2981/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2981" />
	</item>
		<item>
		<title>Google Buzz は全然使えない。 だがそれがいい!!</title>
		<link>http://www.flatz.jp/archives/2951</link>
		<comments>http://www.flatz.jp/archives/2951#comments</comments>
		<pubDate>Tue, 23 Feb 2010 10:30:26 +0000</pubDate>
		<dc:creator>hisasue</dc:creator>
				<category><![CDATA[FLATzブログ]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2951</guid>
		<description><![CDATA[
久末です。

Google Buzz(以下、Buzz)は今のところカオスです。
そしてBuzzの中ではBuzzについての話が多く、何かに利用しようと思っている人には全く使えないかも知れません。

一方、Buzzの中では [...]]]></description>
			<content:encoded><![CDATA[<p>
</p><p>久末です。</p>
<br />
<p>Google Buzz(以下、Buzz)は今のところカオスです。<br />
そしてBuzzの中ではBuzzについての話が多く、何かに利用しようと思っている人には全く使えないかも知れません。</p>
<br />
<p>一方、Buzzの中ではBuzzに対して良好なコメントが見受けられます。<br />
中にはTwitterやFacebookをやめてBuzzに移ったという発言もあるほどで、何らかの中毒的な要素はあるようです。<br />
例えば、多くのユーザをフォローすれば多くのユーザからフォローされ、投稿すると、早ければ1分〜数分で複数のコメントが付きます。<br />
反応しやすいBuzzには数百のコメントが付くこともあります。</p>
<br />
<p>他方、Buzzの外ではBuzzに対して批判的な意見も少なくありません。<br />
リリースされたばかりのサービスではありがちなので、無視しましょう。<br />
Twitterだってはじめはそんなもんでした。</p>
<br />
<p>さて、ここで私が投下したものをご紹介します。</p>
<br />
<p><a href="http://www.google.com/buzz/hisasue/NL4j1MqWKMx/フォローの数のわりに新しい">http://www.google.com/buzz/hisasue/NL4j1MqWKMx/フォローの数のわりに新しい</a></p>
<br />

<blockquote><p>フォローの数のわりに新しい投稿があんまりないのかな？<br />
代わりにスレッドにコメントする投稿が多いとかなのかな？</p></blockquote>
<p>
<br />
</p><p>とBuzzった内容には38のコメントがつきました。<br />
ここでは、Buzzは(Twitter)より会話的だというコメントが多く見られました。<br />
会話の連続性を妨げるようなTwitter雪崩(Twitterと連携しているユーザのつぶやきが<br />
Buzzの画面に一気に流れる現象)のようなものは敬遠され、<br />
コメントしやすいネタを提供といったものには好反応を得られるということでしょうか。</p>
<br />
<p>次。</p>
<br />
<p><a href="http://www.google.com/buzz/hisasue/g9t46SShA9a/Buzzるほどでもないスレですが">http://www.google.com/buzz/hisasue/g9t46SShA9a/Buzzるほどでもないスレですが</a></p>
<br />

<blockquote><p>Buzzるほどでもないスレですが？<br />
テキトーな会話とか独り言とか歓迎</p></blockquote>
<p>
<br />
</p><p>という私の投稿では現在のところ70のコメントが付いています。<br />
これは数日間にわたって、ゆるい雰囲気のなか、コメントが続いている状態で、<br />
2ちゃんねるのまったりとしたスレッドのようです。</p>
<br />
<p>また、Buzzは現在フォロー数の制限がありませんので、<br />
数十〜数百のフォローは当たり前で、数千から数万人をフォローしている強者もいます。<br />
そのフォロー数を可能にしているのは様々な言語圏のユーザです。<br />
翻訳サイトの力を借りるなどして、積極的に異言語ユーザのBuzzにもコメントするユーザも珍しくありません。</p>
<br />
<p>私も中国語のBuzzに「日本人」という発言を見てコメントしてみました。</p>
<br />
<p><a href="http://www.google.com/buzz/113897357861978367159/1yTZ95D8niZ/好多日本人FOLLOW-我-怎么回事">http://www.google.com/buzz/113897357861978367159/1yTZ95D8niZ/好多日本人FOLLOW-我-怎么回事</a></p>
<br />

<blockquote><p>Edward Huang       　好多日本人FOLLOW 我，怎么回事？<br />
(日本人はなぜ私をフォローするんだ？)<br />
Takahiro HISASUE   It&#8217;s not problem for them that following person is Japanese or not<br />
(日本人とか関係ないんだよ)<br />
Edward Huang       　Yes,indeed,I am just curious. What a pity,I don&#8217;t speak Japanese<br />
(まったく。不思議だよ。残念ながら私は日本語分からないしね)<br />
Takahiro HISASUE   Im a Japanese. But talking with you in English. It&#8217;s so fun.<br />
(私は日本人だよ。でも英語で話せるから結構面白い)<br />
jan zx             　　　　　ますます面白くなったね！<br />
(※中国語圏と思われる人が日本語でコメントしたもの)</p></blockquote>
<p>
<br />
</p><p>(()は私が翻訳したもの)</p>
<br />
<p>こんな感じです。</p>
<br />
<p>もちろん、まじめな議論もあったりします。<br />
以下のBuzzはBuzzにFacebookにあるようなゲームは必要だろうか？という話です。<br />
200以上のコメントが付いているようです。</p>
<br />
<p><a href="http://www.google.com/buzz/BuzzUsers/VoXtjjD9xrw/Social-Games-like-Farmville-on-Google-Buzz">http://www.google.com/buzz/BuzzUsers/VoXtjjD9xrw/Social-Games-like-Farmville-on-Google-Buzz</a></p>
<br />

<blockquote><p>Social Games like Farmville on Google Buzz?<br />
<br />
Social Games Like Farmville and Google Buzz?<br />
This is one of the biggest issues I have been hearing discussed about the future of Google Buzz. There are two ends of the argument for whether Google should allow social games like Farmville, and Mafia Wars to be allowed on Buzz. One thing is almost certain. We will see apps being developed specifically for Google Buzz in the near future. Just like you can use apps in Google Wave, I fully expect to have the same features in Buzz. Social gaming would surely make buzz even more attractive</p></blockquote>
<p>
<br />
</p><p>というわけで、</p>
<br />
<p>「で？」「だから？」「なんなの？」「Googleがマイクロソフト化するの？」</p>
<br />
<p>と感じる方も多いと思います。</p>
<br />
<p>「○○でいいじゃん」</p>
<br />
<p>と思えるサービスもあるでしょう。<br />
私もこんなにフォローして意味あるのかなと思いながらが、<br />
ちょっと多めにフォローを繰り返し、Buzzの画面をPCや携帯から覗いています。</p>
<br />
<p>しかし、積極的にやってみるとBuzzにはBuzzの味わいがあります。<br />
デジタルなものに味わいがあるのかかどうか分かりませんが、何となくそういう感じなので、しかたがありません。<br />
というわけで、Buzzを上手く説明できる気がしなかったので、今回は私が実際に使ってみたことを、かいつまんでご紹介してみました。<br />
まとめるべきところをまとめず、適当に何となく終わってみるのもBuzz的かなぁ、なーんて。</p>
<br />
<p>お粗末様でした。</p>
<br />
<p>P.S.<br />
よかったら、フォローしてください。<br />
<a href="http://www.google.com/profiles/hisasue#buzz">http://www.google.com/profiles/hisasue#buzz</a></p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2951&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2951/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2951" />
	</item>
		<item>
		<title>[ZenCart] とても便利な商品ページの設定機能を紹介します</title>
		<link>http://www.flatz.jp/archives/2899</link>
		<comments>http://www.flatz.jp/archives/2899#comments</comments>
		<pubDate>Tue, 23 Feb 2010 01:25:27 +0000</pubDate>
		<dc:creator>taniguchi</dc:creator>
				<category><![CDATA[FLATzブログ]]></category>
		<category><![CDATA[ZenCart]]></category>
		<category><![CDATA[技術情報]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2899</guid>
		<description><![CDATA[
谷口です。

Zen Cartで商品を登録して、商品ページが表示されるようになったのは良いけど、「この情報は商品ページに出したくないな」とか、「この商品はカートに入れられないようにしたいなぁ」とか、商品ページの情報を調 [...]]]></description>
			<content:encoded><![CDATA[<p>
</p><p>谷口です。</p>
<br />
<p>Zen Cartで商品を登録して、商品ページが表示されるようになったのは良いけど、「この情報は商品ページに出したくないな」とか、「この商品はカートに入れられないようにしたいなぁ」とか、商品ページの情報を調整したいものです。<br />
当然、テンプレートをカスタマイズすればできるのですが、テンプレートのカスタマイズは専門の知識も必要となり、運営者自身で編集するには敷居が高いこともあるかと思います。</p>
<br />
<p>でも、実はZen Cartでは商品ページに表示する内容をある程度調整ができます。<br />
テンプレートをカスタマイズすることなく、管理画面から調整できる項目であれば、専門知識を必要としないので、誰でも簡単にできます。</p>
<br />
<p>では、具体的にどんな設定ができるのか、簡単に紹介しようと思います。</p>
<br />
<p>まずは、とても分かりやすいメニューとして、商品情報の設定のメニューは[一般設定] → [商品情報の設定]で基本的な設定ができます。<br />
ここでは以下のような設定ができます。</p>
<br />
<table border="1" cellspacing="2">
<tbody>
<tr>
<td bgcolor="#ccc">[前へ] [次へ] リンクの表示設定</td>
<td>前の商品、次の商品へのリンクに関しての表示、動作を設定できます。</td>
</tr>
<tr>
<td bgcolor="#ccc">セール割引表示設定</td>
<td>セール商品に対して割引の表示を設定できます。</td>
</tr>
<tr>
<td bgcolor="#ccc">無料商品の表示設定</td>
<td>無料商品の場合の表示を設定できます。</td>
</tr>
<tr>
<td bgcolor="#ccc">お問合せ商品の表示設定</td>
<td>お問合せ商品の場合の表示を設定できます。</td>
</tr>
<tr>
<td bgcolor="#ccc">レビューの承認の要否</td>
<td>商品レビューで承認をしたものだけ掲載させるようにするかどうかを設定できます。</td>
</tr>
<tr>
<td bgcolor="#ccc">「こんな商品も購入しています」 &#8211; 横列あたりの表示点数</td>
<td>「こんな商品も購入しています」リストの一列あたりの表示数を設定できます。</td>
</tr>
</tbody></table>
<br />
<p><br /><br />
<br /></p>
<br />
<p>若干分かりにくいのですが、実はもう一つ商品ページに関する設定ができる画面があります。<br />
それは･･･[商品の管理] → [商品タイプの管理]の[表示設定]です。<br />
なんとこの画面で設定できる項目は、商品タイプ毎に変えることが可能です。<br />
「商品タイプGeneralなら重量表示する」、「商品タイプDocumentなら重量表示しない」とかです。<br />
こちらの画面で設定できる項目には、商品登録時の設定もありますので、商品ページの表示に関わる項目のみ簡単に紹介します。</p>
<br />
<table border="1" cellspacing="2">
<tbody>
<tr>
<td bgcolor="#ccc">型番表示</td>
<td>型番を表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">重量表示</td>
<td>重量を表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">オプション重量表示</td>
<td>オプションの重量を表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">メーカーの表示</td>
<td>メーカーを表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">カート内の数量表示</td>
<td>カート内の数量を表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">在庫数表示</td>
<td>在庫数を表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">レビュー数表示</td>
<td>レビュー数を表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">レビューボタン表示</td>
<td>レビューボタンを表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">購入可能になった日付の表示</td>
<td>購入可能になった日付を表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">登録日表示</td>
<td>商品登録日を表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">商品URL表示</td>
<td>商品URLを表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">ベース価格の表示</td>
<td>ベース価格を表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">Show Product Additional Images</td>
<td>関連画像を表示するか否か（関連画像はあるルールでFTPなどでアップロードする必要があります。）</td>
</tr>
<tr>
<td bgcolor="#ccc">「友達に知らせる」ボタン表示</td>
<td>友達に知らせるボタン表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">送料無料の画像ステータス &#8211; カタログ</td>
<td>送料無料の画像/テキストを表示するか否か</td>
</tr>
<tr>
<td bgcolor="#ccc">Show Metatags Title Default &#8211; Product Name</td>
<td>ブラウザのタイトルに商品名を表示するか否か（メタタグの設定をしていない場合の設定）</td>
</tr>
<tr>
<td bgcolor="#ccc">Show Metatags Title Default &#8211; Product Model</td>
<td>ブラウザのタイトルに型番を表示するか否か（メタタグの設定をしていない場合の設定）</td>
</tr>
<tr>
<td bgcolor="#ccc">Show Metatags Title Default &#8211; Product Price</td>
<td>ブラウザのタイトルに商品価格を表示するか否か（メタタグの設定をしていない場合の設定）</td>
</tr>
<tr>
<td colspan="2">etc&#8230;</td>
</tr>
</tbody></table>
<br />
<p><br /><br />
<br /></p>
<br />
<p>ただ、これらの表示設定はテンプレートによっては、設定しても効果のないものもあります･･･。<br />
そんなときは、テンプレート作成した人を恨みつつ、カスタマイズすることになってしまいます。<br />
業者にテンプレート作成を依頼する場合は、業者に設定が効かなくなる項目があるかないかを確認をすると良いと思います。</p>
<br />
<p>さて、ここで紹介した商品ページの設定だけでなく、Zen Cartでは一覧ページの設定、画像の大きさ、カート画面の表示設定などなど、表示に関してだけでもいろんな設定ができます。<br />
（おかげで管理画面が複雑になりすぎてるわけですが･･･。）<br />
ページの内容を変えたいと思ったときは、カスタマイズをする前に一度管理画面でできないか確認してみると面白い発見があるかもしれませんね。</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2899&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2899/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2899" />
	</item>
		<item>
		<title>Ruby On Rails Security Guideの訳 : 3.1 CSRF Countermeasures</title>
		<link>http://www.flatz.jp/archives/2601</link>
		<comments>http://www.flatz.jp/archives/2601#comments</comments>
		<pubDate>Fri, 19 Feb 2010 09:49:40 +0000</pubDate>
		<dc:creator>kimura</dc:creator>
				<category><![CDATA[FLATzブログ]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[技術情報]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Security Guide]]></category>
		<category><![CDATA[訳]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2601</guid>
		<description><![CDATA[
こんにちは。木村です。

今回は3.1 CSRF Countermeasuresです。

原文の単語と全く違う言葉に置きかえている場合が多々あります。原文ページと併せて、ご覧下さい。気になる箇所や間違っている箇所があれ [...]]]></description>
			<content:encoded><![CDATA[<p>
</p><p>こんにちは。木村です。</p>
<br />
<p>今回は<a href="http://guides.rubyonrails.org/security.html#csrf-countermeasures">3.1 CSRF Countermeasures</a>です。</p>
<br />
<p>原文の単語と全く違う言葉に置きかえている場合が多々あります。原文ページと併せて、ご覧下さい。気になる箇所や間違っている箇所があれば、どうかご指摘下さい。</p>
<br />
<p>では、以下訳です。</p>
<br />
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<br />

<blockquote><p>
</p><p><strong>3.1 CSRF Countermeasures</strong></p>
</blockquote>
<p>
<br />
</p><p><strong>3.1 CSRFの対策方法</strong></p>
<br />

<blockquote><p>
</p><p>- First, as is required by the W3C, use GET and POST appropriately. Secondly, a security token in non-GET requests will protect your application from CSRF.</p>
</blockquote>
<p>
<br />
</p><p>- まず最初にW3Cが求めるようにGETとPOSTを適切に使用する。2番目に、GETではないリクエストにセキュリティトークンを付加することでCSRFからあなたのアプリケーションを守ります。</p>
<br />

<blockquote><p>
</p><p>The HTTP protocol basically provides two main types of requests &#8211; GET and POST (and more, but they are not supported by most browsers). The World Wide Web Consortium (W3C) provides a checklist for choosing HTTP GET or POST:</p>
</blockquote>
<p>
<br />
</p><p>HTTPプロトコルは基本的に主に2つのタイプのリクエストを提供します。GETとPOSTです(他にもありますが、ほとんどのブラウザでサポートされていません)。 The World Wide Web Consortium(W3C)はHTTP GETまたはPOSTの仕様を選択する時のチェックリストを提供しています。</p>
<br />

<blockquote><p>
</p><p>Use GET if:</p>
</blockquote>
<p>
<br />
</p><p>GETを使う場合：</p>
<br />

<blockquote><p>
</p><p>
<ul>
    <li>The interaction is more like a question (i.e., it is a safe operation such as a query, read operation, or lookup).</li>
</ul>
</p>
</blockquote>
<p>
<br />
</p><p>
<ul>
    <li>インタラクションな操作が問い合わせである(すなわち、検索や読み込みや参照のような安全な操作のことです)</li>
</ul>
</p>
<br />

<blockquote><p>
</p><p>Use POST if:</p>
</blockquote>
<p>
<br />
</p><p>POSTを使う場合：</p>
<br />

<blockquote><p>
</p><p>
<ul>
    <li>The interaction is more like an order, or</li>
    <li>The interaction changes the state of the resource in a way that the user would perceive (e.g., a subscription to a service), or</li>
    <li>The user is held accountable for the results of the interaction.</li>
</ul>
</p>
</blockquote>
<p>
<br />
</p><p>
<ul>
    <li>インタラクションな操作が命令である、または</li>
    <li>操作の影響でリソースの状態を変更することがユーザにわかりやすい(例えば、サービスへの登録です)、または</li>
    <li>ユーザが操作結果の責任を負わせられる。</li>
</ul>
</p>
<br />

<blockquote><p>
</p><p>
If your web application is RESTful, you might be used to additional HTTP verbs, such as PUT or DELETE. Most of today‘s web browsers, however do not support them &#8211; only GET and POST. Rails uses a hidden _method field to handle this barrier.<br />
</p>
</blockquote>
<p>
<br />
</p><p>
もしあなたのWebアプリケーションがRESTfulならば、あなたはPUTやDELETEのような追加のHTTPメソッドに慣れていることでしょう。<br />
しかしながら、今日のWebブラウザのほとんどは、GETとPOSTだけをサポートしてPUTやDELETEをサポートしていません。<br />
Railsはこの障壁に対処するために、hiddenの_methodフィールドを使用します。<br />
</p>
<br />

<blockquote><p>
</p><p>The verify method in a controller can make sure that specific actions may not be used over GET. Here is an example to verify the use of the transfer action over POST. If the action comes in using any other verb, it redirects to the list action.</p>
</blockquote>
<p>
<br />
</p><p>コントローラのverifyメソッドはGETで特定のアクションが使用できないように確認することができます。POST上でtransferアクションの使用を検証する例は次の通りです。もし何か別のメソッドを使用したアクションが来た場合、listアクションにリダイレクトしています。</p>
<br />

<blockquote><p>
<code class="ruby"><br />
verify :method => :post, :only => [:transfer], :redirect_to => {:action => :list}<br />
</code><br />
</p></blockquote>
<p>
<br />
</p>
<blockquote><p>
</p><p>With this precaution, the attack from above will not work, because the browser sends a GET request for images, which will not be accepted by the web application.</p>
</blockquote>
<p>
<br />
</p><p>この予防策によって、ブラウザが送るイメージへのGETリクエストがWebアプリケーションに受理されないため、上記の攻撃(3. Cross-Site Request Forgery (CSRF)で例に挙げられている攻撃)は動作しません。</p>
<br />

<blockquote><p>
</p><p>But this was only the first step, because POST requests can be sent automatically, too. Here is an example for a link which displays www.harmless.com as destination in the browser’s status bar. In fact it dynamically creates a new form that sends a POST request.<br />
</p>
</blockquote>
<p>
<br />
</p><p>
しかし、これは最初のステップに過ぎません。なぜなら、POSTリクエストも自動的に送ることができるからです。ブラウザのステータスバーに目的地としてwww.harmless.comと表示しているリンクの例が次の通りです。実際にはそのリンクはPOSTリクエストを送る新しいフォームを動的に生成します。</p>
<br />

<blockquote><p>
<code class="ruby"><br />
&lt;<span class="tag">a </span><span class="attribute">href</span>=<span class="string">"http://www.harmless.com/"</span> <span class="attribute">onclick</span>=<span class="string">"<br />
  var f = document.createElement('form');<br />
  f.style.display = 'none';<br />
  this.parentNode.appendChild(f);<br />
  f.method = 'POST';<br />
 f.action = 'http://www.example.com/account/destroy';<br />
  f.submit();<br />
  return false;"</span>&gt;To the harmless survey&lt;/<span class="tag">a</span>&gt;<br />
</code><br />
</p></blockquote>
<p>
<br />
</p>
<blockquote><p>
</p><p>Or the attacker places the code into the onmouseover event handler of an image:</p>
</blockquote>
<p>
<br />
</p><p>つまり、攻撃者はイメージのonmouseoverイベントハンドラにコードを設置しています。</p>
<br />

<blockquote><p>
<code class="ruby"><br />
&lt;img src="http://www.harmless.com/img" width="400" height="400" onmouseover="..." /&gt;<br />
</code><br />
</p></blockquote>
<p>
<br />
</p>
<blockquote><p>
</p><p>There are many other possibilities, including Ajax to attack the victim in the background. The solution to this is including a security token in non-GET requests which check on the server-side. In Rails 2 or higher, this is a one-liner in the application controller:<br />
</p>
</blockquote>
<p>
<br />
</p><p>
バックグラウンドで攻撃するためにAjaxを含んでいると、他に多くの可能性があります。この問題の解決方法はGETではないリクエストにサーバ側でチェックするセキュリティトークンを付加することです。Rails2またはそれ以上のバージョンでは、application controllerでワンライナーで書かれています。</p>
<br />

<blockquote><p>
<code class="ruby"><br />
protect_from_forgery :secret => "123456789012345678901234567890..."<br />
</code><br />
</p></blockquote>
<p>
<br />
</p>
<blockquote><p>
</p><p>This will automatically include a security token, calculated from the current session and the server-side secret, in all forms and Ajax requests generated by Rails. You won’t need the secret, if you use CookieStorage as session storage. It will raise an ActionController::InvalidAuthenticityToken error, if the security token doesn’t match what was expected.</p>
</blockquote>
<p>
<br />
</p><p>
これはRailsによって生成される全てのフォームとAjaxリクエストに、現在のセッションとサーバ側の秘密の文字列から作られるセキュリティトークンを自動的に付加します。セッションストレージとしてCookieStorageを使用しているならば、秘密の文字列は必要ありません。セキュリティトークンが期待されるものとマッチしなければ、ActionController::InvalidAuthenticityTokenエラーが発生するでしょう。</p>
<br />

<blockquote><p>
</p><p>Note that cross-site scripting (XSS) vulnerabilities bypass all CSRF protections. XSS gives the attacker access to all elements on a page, so he can read the CSRF security token from a form or directly submit the form. Read more about XSS later.</p>
</blockquote>
<p>
<br />
</p><p>
cross-site scripting(XSS)は全てのCSRF対策を回避することに注意してください。<br />
XSSは攻撃者にページ上の全ての要素へのアクセスを許します。そのため、攻撃者はフォームからCSRFセキュリティトークンを読み込むか、直接フォームを投稿することができます。<br />
XSSについての詳細は後述します。</p>
<br />
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<br />
<p>次回は<a href="http://guides.rubyonrails.org/security.html#redirection-and-files">4 Redirection and Files</a>です。</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2601&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2601/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2601" />
	</item>
		<item>
		<title>Ruby On Rails Security Guideの訳 : 3. Cross-Site Request Forgery (CSRF)</title>
		<link>http://www.flatz.jp/archives/2589</link>
		<comments>http://www.flatz.jp/archives/2589#comments</comments>
		<pubDate>Fri, 05 Feb 2010 05:07:29 +0000</pubDate>
		<dc:creator>kimura</dc:creator>
				<category><![CDATA[FLATzブログ]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[技術情報]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Security Guide]]></category>
		<category><![CDATA[訳]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2589</guid>
		<description><![CDATA[
こんにちは。木村です。

今回は3 Cross-Site Request Forgery (CSRF)です。

原文の単語と全く違う言葉に置きかえている場合が多々あります。原文ページと併せて、ご覧下さい。気になる箇所や [...]]]></description>
			<content:encoded><![CDATA[<p>
</p><p>こんにちは。木村です。</p>
<br />
<p>今回は<a href="http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf">3 Cross-Site Request Forgery (CSRF)</a>です。</p>
<br />
<p>原文の単語と全く違う言葉に置きかえている場合が多々あります。原文ページと併せて、ご覧下さい。気になる箇所や間違っている箇所があれば、どうかご指摘下さい。</p>
<br />
<p>では、以下訳です。</p>
<br />

<blockquote><p>
</p><p><strong>3 Cross-Site Request Forgery (CSRF)</strong></p>
</blockquote>
<p>
<br />
</p><p><strong>3 クロスサイトリクエストフォージェリ (CSRF)</strong></p>
<br />

<blockquote><p>
</p><p>- This attack method works by including malicious code or a link in a page that accesses a web application that the user is believed to have authenticated. If the session for that web application has not timed out, an attacker may execute unauthorized commands.</p>
</blockquote>
<p>
<br />
</p><p>- この攻撃方法は、悪意のあるコードやリンクを含んだページが、ユーザが認証済みのWebアプリケーションにアクセスするによって動作します。もし、Webアプリケーションのセッションがタイムアウトになることがなければ、攻撃者は不正なコマンドを実行する可能性があります。</p>
<br />

<blockquote><p>
</p><p>In the session chapter you have learned that most Rails applications use cookie-based sessions. Either they store the session id in the cookie and have a server-side session hash, or the entire session hash is on the client-side. In either case the browser will automatically send along the cookie on every request to a domain, if it can find a cookie for that domain. The controversial point is, that it will also send the cookie, if the request comes from a site of a different domain. <br />
Let’s start with an example:</p>
</blockquote>
<p>
<br />
</p><p>sessionの章で、ほとんどのRailsアプリケーションはクッキーベースのセッションを使用していることを学びました。クッキーにセッションIDを保存して、サーバサイドにセッション情報をもつか、または全てのセッション情報をクライアントサイドに置く方法です。どちらにせよ、ブラウザはあるドメインのクッキーを見つければ、リクエスト毎にそのドメインにクッキーを送ります。問題となる点は、もしリクエストが違うドメインのサイトから来たとしても、ブラウザがクッキーを送ってしまうことです。ある例から始めましょう。</p>
<br />

<blockquote><p>
</p><p>
<ul>
    <li>Bob browses a message board and views a post from a hacker where there is a crafted HTML image element.<br />The element references a command in Bob’s project management application, rather than an image file.</li>
    <li><img src="http://www.webapp.com/project/1/destroy"/></li>
    <li>Bob’s session at www.webapp.com is still alive, because he didn’t log out a few minutes ago.</li>
<li>By viewing the post, the browser finds an image tag.<br />It tries to load the suspected image from www.webapp.com. As explained before, it will also send along the cookie with the valid session id.</li>
<li>The web application at www.webapp.com verifies the user information in the corresponding session hash and destroys the project with the ID 1. <br /><br />
It then returns a result page which is an unexpected result for the browser, so it will not display the image.</li>
<li>Bob doesn’t notice the attack &#8211; but a few days later he finds out that project number one is gone.</li>
</ul>
</p>
</blockquote>
<p>
<br />
</p><p>
<ul>
<li>ボブは掲示板を開いて、巧妙に作られたHTMLイメージ要素が置かれたハッカーの投稿を見ます。<br /><br />
その要素はイメージファイルではなく、ボブのプロジェクトマネジメントアプリケーションのコマンドを参照しています。</li>
<li><img src="http://www.webapp.com/project/1/destroy"/></li>
<li>ボブは数分前にログアウトしなかったため、www.webapp.comのセッションはまだ有効です。</li>
<li>ハッカーのポストを見ることによって、ブラウザはイメージタグを見つけます。<br /><br />
ブラウザはwww.webapp.comから疑わしいイメージを読み込もうとします。<br /><br />
前述の通り、その前にブラウザは有効なセッションIDを持ったクッキーを送ります。</li>
<li>www.webapp.comのWebアプリケーションはセッションハッシュと一致するユーザ情報を確認し、ID 1のプロジェクトを削除します。<br /><br />
それからWebアプリケーションはブラウザにとって予期しない結果のページを返します。なぜなら、それは画像が表示されないからです。</li>
<li>ボブは攻撃に気づきません。しかし数日後に彼はプロジェクトナンバー1がなくなっていることに気づくでしょう。</li>
</ul>
</p>
<br />

<blockquote><p>
</p><p>It is important to notice that the actual crafted image or link doesn’t necessarily have to be situated in the web application’s domain, it can be anywhere &#8211; in a forum, blog post or email.</p>
</blockquote>
<p>
<br />
</p><p>
実際の巧妙に作られたイメージやリンクに配慮することは重要です。それらは必ずしもWebアプリケーションのドメインに置かれているとは限りません。フォーラムやブログ記事、またはメールなどのどこにでも存在するのです。</p>
<br />

<blockquote><p>
</p><p>CSRF appears very rarely in CVE (Common Vulnerabilities and Exposures) &#8211; less than 0.1% in 2006 &#8211; but it really is a ‘sleeping giant’ [Grossman]. This is in stark contrast to the results in my (and others) security contract work &#8211; CSRF is an important security issue.</p>
</blockquote>
<p>
<br />
</p><p>
CSRFは脆弱性情報データベース(Common Vulnerabilities and Exposures)に現れることはめったにありません。2006年では0.1%未満です。しかし実際には&#8217;眠れる巨人&#8217;なのです[Grossman]。この結果は、私が(また他の人が)請け負っているセキュリティの仕事での結果とは全く対照的です。CSRFは重要なセキュリティ問題なのです。<br />
</p>
<br />
<p>次回は<a href="http://guides.rubyonrails.org/security.html#csrf-countermeasures">3.1 CSRF Countermeasures</a>です。</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2589&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2589/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2589" />
	</item>
		<item>
		<title>Zen Cartで新しいページを作成する</title>
		<link>http://www.flatz.jp/archives/2855</link>
		<comments>http://www.flatz.jp/archives/2855#comments</comments>
		<pubDate>Wed, 20 Jan 2010 00:00:16 +0000</pubDate>
		<dc:creator>taniguchi</dc:creator>
				<category><![CDATA[ZenCart]]></category>
		<category><![CDATA[ひとりごと]]></category>
		<category><![CDATA[やかん部]]></category>
		<category><![CDATA[技術情報]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2855</guid>
		<description><![CDATA[谷口です。

とても今更なタイトルですが、初めてZen Cartに触れた人に新しいページの作成方法を説明するのは、意外と伝えることが多くて面倒だったりします。
最低限必要な操作だけでも出しておけば何かと便利かなと思いまとめてみました。]]></description>
			<content:encoded><![CDATA[<p>
</p><p>谷口です。</p>
<br />
<p>とても今更なタイトルですが、初めてZen Cartに触れた人に新しいページの作成方法を説明するのは、意外と伝えることが多くて面倒だったりします。<br />
最低限必要な操作だけでも出しておけば何かと便利かなと思いまとめてみました。</p>
<br />
<ol>
<li> 新規ページ用のmain_pageパラメータを決め、定数を定義する</li>
<li> ページ表示用のモジュールディレクトリを作成する</li>
<li> モジュールファイル、テンプレートファイル、言語ファイルを作成する</li>
</ol>
<br />
<p>最も単純なページ作成方法は以上です。（定番ページの追加はまさにこれだけ）</p>
<br />
<h4>1. 新規ページ用のmain_pageパラメータを決め、定数を定義する</h4>
<br />
<p>例えばhogeというページを作成することに決めたとします。<br />
定数の定義は、includes/filenames.php に追記してもできるのですが、より良い方法があります。<br />
includes/extra_datafilesディレクトリに設定ファイルを追加する方法です。</p>
<br />
<p>= includes/extra_datafiles/hoge.php</p>
<br />
<pre><code><br />
  define('FILENAME_HOGE', 'hoge');<br />
</code></pre>
<br />
<h4>2. ページ用のモジュールディレクトリを作成する</h4>
<br />
<p>includes/modules/pages/にhogeディレクトリを作成します。</p>
<br />
<pre><code><br />
 $ mkdir includes/modules/pages/hoge<br />
</code></pre>
<br />
<p>上記ディレクトリを作成したら、とりあえずheader_php.phpというファイルを作成し、テンプレートファイルを作成します。</p>
<br />
<pre><code><br />
 $ touch includes/modules/pages/hoge/header_php.php<br />
</code></pre>
<br />
<pre><code><br />
 $ touch includes/templates/TEMPLATE_DIR/templates/tpl_hoge_default.php<br />
</code></pre>
<br />
<p>※TEMPALTE_DIRは使用しているテンプレートのディレクトリに置き換えてください。</p>
<br />
<p>これでindex.php?main_page=hogeにアクセスすればメインコンテンツが何もないページが表示されます。</p>
<br />
<h4>3. モジュールファイル、テンプレートファイル、言語ファイルを作成する</h4>
<br />
<p>先ほど作成した2ファイルを作っていけばページが作成できるのですが、せっかくの多言語化されているのでその流儀にのっとって、言語ファイルで固定の文言を作成します。<br />
日本語の場合、hogeで使う言語ファイルを以下のパスに作成します。</p>
<br />
<p>includes/languages/japanese/hoge.php</p>
<br />
<p>次にincludes/modules/pages/hoge/header_php.phpで言語ファイルを読み込みます。</p>
<br />
<p>= includes/modules/pages/hoge/header_php.php</p>
<br />
<pre><code><br />
　require(DIR_WS_MODULES . zen_get_module_directory('require_languages.php'));<br />
</code></pre>
<br />
<p>あとは、テンプレートで使う固定の文言（見出しなど）をincludes/languages/japanese/hoge.phpに定数定義していけば、<br />
新しいページの作成準備完了です。</p>
<br />
<p>あとは、ページにアクセスしたときの動作をモジュールファイルに書いたり、好きなようにテンプレートファイルにデザインすれば完成です。<br />
ちなみに、テンプレートファイルで使用する変数（商品名など）はモジュールディレクトリにmain_template_vars.phpを作成してそこでセットしていく感じです。<br />
（header_php.phpで書いても良いですけどね･･･）</p>
<br />
<h3>最後に</h3>
<br />
<p>まとめてみて思ったのですが、これスクリプトにできますね･･･。作ったら公開しようかと思います。</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2855&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2855/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2855" />
	</item>
		<item>
		<title>オープンソースカンファレンス2010 Tokyo/Spring</title>
		<link>http://www.flatz.jp/archives/2869</link>
		<comments>http://www.flatz.jp/archives/2869#comments</comments>
		<pubDate>Wed, 20 Jan 2010 00:00:03 +0000</pubDate>
		<dc:creator>taniguchi</dc:creator>
				<category><![CDATA[FLATzブログ]]></category>
		<category><![CDATA[ZenCart]]></category>
		<category><![CDATA[オープンソースカンファレンス]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2869</guid>
		<description><![CDATA[口です。

10月にオープンソースカンファレンスに行った記事を書いたのですが、早いものでもうすぐまた開催されますね。

<a href="http://www.ospn.jp/osc2010-spring/">オープンソースカンファレンス2010 Tokyo/Spring</a>]]></description>
			<content:encoded><![CDATA[<p>
</p><p>谷口です。</p>
<br />
<p>10月にオープンソースカンファレンスに行った<a href="http://www.flatz.jp/archives/2595">記事</a>を書いたのですが、早いものでもうすぐまた開催されますね。</p>
<br />
<p><a href="http://www.ospn.jp/osc2010-spring/">オープンソースカンファレンス2010 Tokyo/Spring</a></p>
<br />

<blockquote><p>
日程：2010年2月26日(金)・27日(土) 10:00-17:00<br />
<br />
会場：明星大学 日野キャンパス 26号館（多摩モノレール 「中央大学・明星大学駅」から大学まで直結。会場まで徒歩5分）<br />
　　　[アクセスマップ] [キャンパス案内]<br />
　　　（ご来場の際は公共交通機関をご利用下さい）<br />
<br />
費用：無料<br />
<br />
内容：オープンソースに関する最新情報の提供<br />
・展示 &#8211; オープンソースコミュニティ、企業・団体による展示<br />
・セミナー &#8211; オープンソースの最新情報を提供<br />
<br />
主催：オープンソースカンファレンス実行委員会<br />
<br />
協賛：明星大学<br />
　　　明星大学　情報学部<br />
</p></blockquote>
<p>
<br />
</p><p><s>おそらく今回もZenCart.JPで参加することになると思いますので、みなさま是非是非お越しください！</s><br />
<font color="red">ZenCart.JPは参加しないことになりました･･･。<br />
Kobeの方は出展するので、関西の方はよろしくお願いします。私は参加できませんが･･･<br />
でも、近いので個人的に行こうと思います！</font></p>
<br />
<p>今回はセミナーにも出たい･･･</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2869&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2869/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2869" />
	</item>
		<item>
		<title>技術系のtweet &#8211; ～2010/01/14</title>
		<link>http://www.flatz.jp/archives/2832</link>
		<comments>http://www.flatz.jp/archives/2832#comments</comments>
		<pubDate>Mon, 18 Jan 2010 01:00:00 +0000</pubDate>
		<dc:creator>nasu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[ひとりごと]]></category>
		<category><![CDATA[やかん部]]></category>
		<category><![CDATA[技術情報]]></category>
		<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2832</guid>
		<description><![CDATA[twitterでの技術系つぶやきまとめ。Excel,perl,UNIX,MySQL,PHP,svn,vimなどその時々で見知ったこと、調べたことをつぶやいています。]]></description>
			<content:encoded><![CDATA[<p>
</p><p>那須です。</p>
<br />
<p>最近、その時々で調べたtipsをtwitterでつぶやいたりしてます。主に自分の備忘メモとして使っています。後日検索することがあるかといえば。。。今のところは特にないのですが、とはいえ埋もれてしまっていざというときに使えないのは残念なので、こちらにまとめておこうと思います。</p>
<br />
<p>私の全てのつぶやきは<a href="http://twitter.com/nasu">こちら</a></p>
<br />
<h3>Excel</h3>
<br />

<blockquote><p>
=COUNT(INDEX(1/(MATCH(A1:A39,A1:A39)=ROW(A1:A39)),0))　a1からa39の中でユニークな値の数を算出。理解できないけど、ひとまず動く #Excel<br />
</p></blockquote>
<p>
<br />
</p><p>1/MATCH() が未だによくわからないなぁ</p>
<br />
<h3>perl</h3>
<br />

<blockquote><p>
$SIG{INT}=&#8221;IGNORE&#8221;;$p=fork;if($p){wait;}else{$SIG{INT}=sub{$a=1};sleep 30;sleep 5;if($a){die}} SIGINTすると子プロセスの最初のsleepがリセットされる #perl<br />
perl -n -l -e &#8216;print +(split(/\t/))[2]&#8216; filename cut使えって話 #unix<br />
perl -n -l -e &#8216;print +(split(/\t/))[2]&#8216; filename タブ区切りの3列目だけ抽出 -n の使い道 #perl<br />
[perl] \b 単語境界　$&#038; マッチ変数　正規表現構文<br />
[perl] perl -i.bak -wnl -e &#8217;s/A/B/g; print&#8217; file 上書き編集<br />
[perl] -l 改行 -n 暗黙ループ -p 読み込みループ perl -wpl -e &#8221; file1 file2 イミフ<br />
</p></blockquote>
<p>
<br />
<h3>UNIX</h3>
<br />
</p>
<blockquote><p>
PAGER JLESSCHARSET=japanese /usr/bin/less -isr 日本語文字化けの時man.confにこれ書く。書けなければ man -C ~/man.conf とかする #unix<br />
1:06 PM Dec 25th, 2009 from web<br />
[bash] command 2> /dev/null STDERRの出力を捨てる。<br />
[unix]grep -L 文字列が含まれないファイル一覧を返す GNU grep<br />
[unix]find . -type f -print | xargs ls -lrdt | tail -l xargsの処理できる引数の数を越えると期待通りにいかない<br />
</p></blockquote>
<p>
<br />
<h3>MySQL</h3>
<br />
</p>
<blockquote><p>
[MySQL] INSERT INTO table () VALUES () ON DUPLICATE KEY UPDATE を使ったときに、UPDATE側が作動すると affected rows が 2になる。これにはめられました。<br />
[MySQL] order by で DESCとASCが混在するとインデックス利きません<br />
[mysql]auto_incrementの解除にはalter table changeを使う<br />
</p></blockquote>
<p>
<br />
</p><p>affected rowsの件は本当にハメられたましたよ。というかこれMySQLのバグじゃないのかな&#8230;replace into が affected rows = 2 になるのは、実質 delete &amp; insert かけるので正しいと思うけど、insert on duplicate はinsert失敗してupdateかかるわけだし、affected rows = 1 が正しい気がする</p>
<br />
<h3>PHP</h3>
<br />

<blockquote><p>
[PHP]foreach内ではbreakが効かないらしい。初めて知った<br />
</p></blockquote>
<p>
<br />
</p><p>よく考えたら、知っていた気もする。</p>
<br />
<h3>SVN</h3>
<br />

<blockquote><p>
[svn] function svnvimdiff() { tmp=[file]; vimdiff $1 `svn cat $1 > $tmp ;ls $tmp;` &#038;&#038; rm -f $tmp; } vimdiffで名前付パイプがうまく機能しないとき用<br />
[svn] vimdiff [file] < (svn cat [file]) svnの差分をvimdiffで見る<br />
[svn] svn diff --diff-cmd /usr/bin/diff -x "-b -E" svnでのdiffコマンドの変更とかに<br />
</p></blockquote>
<p>
<br />
</p><p>svnvimdiff 重宝してます。</p>
<br />
<h3>vim</h3>
<br />

<blockquote><p>
[vim] :s/./&#038;\r/g　行を一文字区切りで改行する。「あ\nい\nう\nえ\nお\n&#8230;」のような列を作るのに便利<br />
[vim]:set noro リードオンリモードの解除。sambaとかにある共有ファイル開くときとかデフォルトで-Rしといて必要なときにこれ使うようにしようかなぁ<br />
[vim]:compiler perl &#8220;-I&#8221;が指定できないのかな…<br />
[vim]:set list 制御文字表示。常時はうざいから確認のときに使う<br />
</p></blockquote>
<p>
</p>
<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2832&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2832/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2832" />
	</item>
		<item>
		<title>Ruby On Rails Security Guideの訳 : 2.Sessions 2.9</title>
		<link>http://www.flatz.jp/archives/2512</link>
		<comments>http://www.flatz.jp/archives/2512#comments</comments>
		<pubDate>Fri, 15 Jan 2010 00:00:23 +0000</pubDate>
		<dc:creator>kimura</dc:creator>
				<category><![CDATA[FLATzブログ]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Security Guide]]></category>
		<category><![CDATA[訳]]></category>

		<guid isPermaLink="false">http://www.flatz.jp/?p=2512</guid>
		<description><![CDATA[
こんにちは。木村です。

今回は2.9 Session Expiryです。

原文の単語と全く違う言葉に置きかえている場合が多々あります。原文ページと併せて、ご覧下さい。気になる箇所や間違っている箇所があれば、どうかご [...]]]></description>
			<content:encoded><![CDATA[<p>
</p><p>こんにちは。木村です。</p>
<br />
<p>今回は<a href="http://guides.rubyonrails.org/security.html#session-expiry">2.9 Session Expiry</a>です。</p>
<br />
<p>原文の単語と全く違う言葉に置きかえている場合が多々あります。原文ページと併せて、ご覧下さい。気になる箇所や間違っている箇所があれば、どうかご指摘下さい。</p>
<br />
<p>では、以下訳です。</p>
<br />

<blockquote><p>
</p><p><strong>2.9 Session Expiry<br />2.9 セッションの有効期限</strong></p>
<p>- Sessions that never expire extend the time-frame for attacks such as cross-site reference forgery (CSRF), session hijacking and session fixation.</p>
<p>- 有効期限がないセッションはCSRFやセッションハイジャック、session fixationのような攻撃にかけられる時間を拡大します。</p>
<p>
One possibility is to set the expiry time-stamp of the cookie with the session id. <br />
However the client can edit cookies that are stored in the web browser so expiring sessions on the server is safer. <br />
Here is an example of how to expire sessions in a database table. <br />
Call Session.sweep(&#8220;20m&#8221;) to expire sessions that were used longer than 20 minutes ago.<br />
</p>
<p>セッションIDと一緒にクッキーの有効期限のタイムスタンプをセッションにセットしておいてもいいと思います。<br />
しかしながら、クライアントはブラウザに保存されたクッキーを編集できるため、サーバ上で有効期限付きセッションを扱う方がより安全です。<br />
データベースのテーブルで有効期限付きのセッションを扱う方法の例は次の通りです。<br />
Call Session.sweep(&#8220;20m&#8221;)で20分以上前から使用されているセッションの有効期限が切れます。</p>
<pre style="line-height:0.8em">
class Session < ActiveRecord::Base<br />
  def self.sweep(time_ago = nil)<br />
    time = case time_ago<br />
    when /^(\d+)m$/ then Time.now - $1.to_i.minute<br />
    when /^(\d+)h$/ then Time.now - $1.to_i.hour<br />
    when /^(\d+)d$/ then Time.now - $1.to_i.day<br />
    else Time.now - 1.hour<br />
    end<br />
    self.delete_all "updated_at < '#{time.to_s(:db)}'"<br />
  end<br />
end <br />
</pre>
<p>
The section about session fixation introduced the problem of maintained sessions. <br />
An attacker maintaining a session every five minutes can keep the session alive forever, although you are expiring sessions. <br />
A simple solution for this would be to add a created_at column to the sessions table. <br />
Now you can delete sessions that were created a long time ago. <br />
Use this line in the sweep method above:<br />
</p>
<p>session fixationの項でセッションが保持され続ける問題を紹介しました。<br />
有効期限付きのセッションにしていても、攻撃者は5分毎にセッションを保持し続けることで、セッションを長い時間有効なままにすることができます。<br />
この問題に対するシンプルな解決方法はセッションのテーブルにcreated_atカラムを追加することでしょう。<br />
これで、ずいぶん前に作られたセッションを削除できるようになります。<br />
次の行をsweepメソッドの上に追加してください。</p>
<pre style="line-height:0.8em">
self.delete_all "updated_at < '#{time.to_s(:db)}' OR<br />
  created_at < '#{2.days.ago.to_s(:db)}'" <br />
</pre>
</blockquote>
<p>
<br />
</p><p>次回は<a href="http://guides.rubyonrails.org/security.html#cross-site-request-forgery-csrf">3 Cross-Site Request Forgery (CSRF)</a>です。</p>

<img src="http://www.flatz.jp/?ak_action=api_record_view&id=2512&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.flatz.jp/archives/2512/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://www.flatz.jp/archives/2512" />
	</item>
	</channel>
</rss>
