<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
   <channel>
      <title>あいまいモード</title>
      <link>http://www.imymode.com/</link>
      <description>インターネット活用のための情報共有サイト。HTML、JavaScript、CGIからブログ、SNSまで、いろんな情報を共有しましょ。</description>
      <language>ja</language>
      <copyright>Copyright 2008</copyright>
      <lastBuildDate>Thu, 17 Apr 2008 09:27:28 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>マイコンピュータをデスクトップに表示するには</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./archives.html">ブログ的ひとりごと</a> &gt; マイコンピュータをデスクトップに</div>
<h2>マイコンピュータのアイコンをデスクトップに表示</h2>
<p>
最近買ったパソコン、OSはいまだにWindowsXPをあえて選択して使っているのですが、マイコンピュータやマイドキュメントが見当たりません。Windows95やWindows98のようにエクスプローラがない今、各ドライブのフォルダにアクセスするのははやりマイコンピュータから、という方が多いのではないかと思うのですが、やはりあった方が便利ですよね。
</p>

<p>
自分も「たしかどこかで設定できたはずなんだけどなぁ、、、」と探し回って、とっても簡単なところに設定があったので、知っている人は簡単！だと思いますが、おぼえがきということでマイコンピュータのデスクトップ表示を説明したいと思います。
</p>
]]></description>
         <link>http://www.imymode.com/blog/desktopicon.html</link>
         <guid>http://www.imymode.com/blog/desktopicon.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">ブログ的ひとりごと</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">WindowsXP</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">デスクトップ</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">マイコンピュータ</category>
        
         <pubDate>Thu, 17 Apr 2008 09:27:28 +0900</pubDate>
      </item>
            <item>
         <title>エクセルに計算ミス！セキュリティパッチにご注意</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./archives.html">ブログ的ひとりごと</a> &gt; エクセルのバグ</div>
<h2>エクセルの計算結果はどこまで信頼できるのか！</h2>
<p>
マイクロソフトの公式サイトに掲載された警告。エクセル２００３のセキュリティアップデートを実行すると計算ミスが起きるかも・・・というもの。正確な計算を期待してエクセルを使っているのに、計算ミスがでたのでは、何のためのエクセルだかわからなくなります。
</p>

<p>
マイクロソフトの公式ページを下記に引用しましたが、「MS08-014」というパッチを適用すると、計算結果がおかしくなるというもの。詳しくは、VBAからReal Time Data（RTD）ソースを参照すると、エクセルに計算ミスが発生。回避するには個別のセルごとに計算すること、ということです。
</p>
<blockquote>After you install security update MS08-014, Excel 2003 calculations return an incorrect result when a Real Time Data source is used in a user-defined Visual Basic for Applications function（<a href="http://support.microsoft.com/kb/950340/en">マイクロソフトの公式情報</a>）</blockquote>

<p>
VBA使わない普通の計算ならそんなに影響もないのかと気楽に構えてますが、どこに見えないバグが潜んでいるかもしれません。実際、エクセルの計算が完璧かというとそうでもないようで、自分がエクセルを使い始めたOffice97の頃は統計関数に計算結果がおかしくなるものがいくつかあると聞いたこともあります。
</p>

<p>
あくまでも補助ツールとして割り切って使わないと痛い目に会うのかもしれませんね。計算が違ったことで被った損害とかはきっと見てもらえなさそうです。
</p>
]]></description>
         <link>http://www.imymode.com/blog/patch.html</link>
         <guid>http://www.imymode.com/blog/patch.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">ブログ的ひとりごと</category>
        
        
         <pubDate>Mon, 17 Mar 2008 19:34:48 +0900</pubDate>
      </item>
            <item>
         <title>１０００円以下で出来る、ホスティング</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./">レンタルサーバー</a> &gt; 1000円以下のレンタルサーバー</div>
<h2>１０００円以下で出来る、ホスティング！</h2>
<p>
広告付きの無料ホームページやプロバイダーのサービススペースを借りてのサイト運営から一歩前進しませんか？ホスティングを利用すれば、自分の思いのままのページを自由につくることが出来ます！ここでは１０００円以下の予算で利用できるホスティングサービスを集めてみました。
</p>

<h3>ロリ・ポップ！レンタルサーバー</h3>
<p>
<a href="http://px.a8.net/svt/ejp?a8mat=I6C9D+E8M8MQ+348+60H7L" target="_blank">
<img border="0" width="100" height="60" alt="Click Here!" src="http://ad.a8.net/svt/bgt?aid=030528913861&wid=001&eno=01&mid=s00000000404001010000&mc=1"></a>
<img border="0" width="1" height="1" src="http://ad.a8.net/0.gif?a8mat=I6C9D+E8M8MQ+348+60H7L" alt="Click Here!"><br />
<strong>月額２５０円</strong>という格安の値段でホスティングができる。基本的にサブドメインで運用だが、女性向けのかわいいアドレスが多く用意されている。また、女性の方、お引っ越しの方半額キャンペーンも実施中。CGI、SSI、PHP、RUBYが利用可能で、便利なCGIが最初から数十個もインストール済みというのも初心者にはうれしい。また、格安ながら、htaccessやSendmail(qmail)も利用できる。
</p>
<p>
<!--　内容ボックス　-->
<table class="hikaku" border="0" cellspacing="1">
<tr class="hikaku_top">
<td>プラン</td><td>初期費用</td><td>月額</td><td>Disk</td><td>メール</td><td>CGI等</td><td>DB</td><td>OS</td><td>その他</td><td>ドメイン</td>
</tr>

<tr class="hikaku_tr">
<td>ロリポップ</td><td>3,000</td><td>250*</td><td>200MB</td><td>1acc</td><td>CGI,SSI,PHP,RUBY</td><td>-</td><td>Linux</td><td>htaccess可</td><td>×</td>
</tr>
</table>
*250円は年払いの場合。また、キャンペーン対象の場合初期費用1,500円引き
</p>

<h3>シーサイド・ネット</h3>
<p>
<IFRAME frameBorder="0" allowTransparency="true" height="45" width="135" marginHeight="0" scrolling="no" src="http://ad.jp.ap.valuecommerce.com/servlet/htmlbanner?sid=2038053&pid=871357288" MarginWidth="0"><script Language="javascript" Src="http://ad.jp.ap.valuecommerce.com/servlet/jsbanner?sid=2038053&pid=871357288"></script><noscript><a Href="http://ck.jp.ap.valuecommerce.com/servlet/referral?sid=2038053&pid=871357288" target="_blank" ><img Src="http://ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=2038053&pid=871357288" height="45" width="135" Border="0"></a></noscript></IFRAME><br />
サブドメイン型と独自ドメイン型とのサービスを用意しているので、予算等に合わせて選択できる。１サーバーあたり１４０名までの定員制をとっている。CGIはsuExec対応、独自ドメインサービスの場合はSSL標準使用可など、セキュリティー面での強化を行っているホスティングサービス。また、料金が税込みなのが嬉しい。
</p>

<p>
<!--　内容ボックス　-->
<table class="hikaku" border="0" cellspacing="1">
<tr class="hikaku_top">
<td>プラン</td><td>初期費用</td><td>月額</td><td>Disk</td><td>メール</td><td>CGI等</td><td>DB</td><td>OS</td><td>その他</td><td>ドメイン</td>
</tr>

<tr class="hikaku_tr">
<td>サブドメイン</td><td>2,000</td><td>750</td><td>150MB</td><td>無制限</td><td>Perl,SSI,PHP</td><td>-</td><td>Linux系</td><td>転送制限4.5GB/週</td><td>×</td>
</tr>

<tr class="hikaku_tr">
<td>独自ドメイン</td><td>0</td><td>1,800</td><td>300MB</td><td>無制限</td><td>Perl,SSI,PHP</td><td>-</td><td>Linux系</td><td>SSL対応</td><td>○</td>
</tr>
</table>
*キャンペーン中で初期費用が無料
</p>]]></description>
         <link>http://www.imymode.com/host/u1000.html</link>
         <guid>http://www.imymode.com/host/u1000.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">レンタルサーバー比較</category>
        
        
         <pubDate>Tue, 12 Feb 2008 23:33:34 +0900</pubDate>
      </item>
            <item>
         <title>無料ウイルス対策ソフトAVGの活用とその実力は？</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./">セキュリティ入門</a> &gt; 無料ウイルス対策AVG</div>
<h2>無料ウイルス対策ソフトの活用とその実力は？</h2>
<p>
最近、いろいろなサービスが無料で提供されています。インターネットが普及しはじめたころは、無料のホームページやインターネットメールサービスなどがその主流でしたが、最近ではずいぶんといろいろなサービスが無料化されていて、本当にビジネスとして成り立つのか？と疑問に思えてくるものもあるくらいです。
</p>

<p>
<img alt="pasocom.gif" src="../images/pasocom.gif" width="57" height="100" align="right" class="sashie" />
そしてついに、無料のウイルス対策も登場してきました。ウイルス対策というと、通常はソフトを購入後、最新のウイルスに対応するための更新料が必要になってくるというのが常識です。逆にこの更新料があるからこそ、ウイルス対策がビジネスモデルとして確立された商売になっているとも言えるのですが、それを無料にしてしまうとはいったいどんなカラクリなのでしょうね？
</p>

<h3>AVG Anti-Virus Free Editionが日本語対応</h3>
<p>
<img alt="avg.jpg" src="images/avg.jpg" width="132" height="61" align="left" class="sashie" />
さて、数々あるウイルス対策ソフトですが、肝心なのは本当にウイルス対策になるのかどうか。いくら無料で保障がなくても、ウイルスを撃退できなければ意味がありません。そういうことからも、ウイルス対策ソフトだけは有料を、と思ってきた方々も多いはずです。
</p>

<p>
そんな中、世界中でおそらく最も多くの人に使われている無料のウイルス対策ソフトがあります。GrisoftのAVGです。このソフト、製品版の機能限定版（といっても、ウイルス対策の部分は製品版と同じ）ということで、機能的には信頼できるのではないかと思いますが、以前は英語版しかなかったので、「英語が苦手・・・」という方には心理的ハードルが高かったのではないかと思います。
</p>

<p>
このAVGも日本語化されて、ずいぶんと身近なソフトになっているのではないかと思います。英語版しかなかった時代には日本語化パッチの当て方や、使い方などを解説したサイトも多くみかけたので、これがある意味、ハードルの高さを端的に示していた気もします。
</p>
]]></description>
         <link>http://www.imymode.com/security/avg.html</link>
         <guid>http://www.imymode.com/security/avg.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">セキュリティ入門</category>
                  <category domain="http://www.sixapart.com/ns/types#category">ネット技術のメモ書き</category>
        
        
         <pubDate>Tue, 05 Feb 2008 14:56:58 +0900</pubDate>
      </item>
            <item>
         <title>GoogleMapをホームページやブログに設置する方法</title>
         <description><![CDATA[<h2>GoogleMapをホームページやブログに設置する方法</h2>

<p>
こんなのいまさら説明もいらない！という方も多いと思いますが、自分のメモ書きもかねて、、、
</p>

<p>
以前はグーグルマップを自分のページに取り込むためには、GoogleMapのAPI Keyを取得して自分でコードを書いてやる必要がありました。今でも複雑なアプリケーションを書くためには必要なのですが、単純に地図だけ表示する場合には、驚くほど簡単にマップを取り込むことが可能になっています。
</p>

<h3>ステップ１：GoogleMapの画面に切り替える</h3>
<p>
まず、通常どおり、Googleマップにアクセスです。左上にある「地図」をクリックして、Googleマップの画面に切り替えます。
<img alt="googletop.jpg" src="http://www.imymode.com/inet/images/googletop.jpg" width="450" height="327" />
</p>

<h3>ステップ２：マップを表示してリンクボタンをクリック</h3>
<p>
ここで、探したいポイントを検索するなり、矢印ボタンを使って表示させるなりして、表示させたいマップを探します。サンプルでは東京駅を表示してみました。
</p>
<p>
ここで、地図右上にある「このページのリンク」というボタンをクリックします。<br />
<img alt="googletop.jpg" src="http://www.imymode.com/inet/images/googlemap01.jpg" width="450"  />
</p>

<h3>ステップ３：ソースコードの取得とサイズの調整</h3>
<p>
すると、「この地図を貼り付けて地図を共有できます」と「HTMLを貼り付けてサイトに地図を埋め込みます」という二つのメニューが出てきます。特にサイズ等に問題がなければそこに書かれたHTMLソースコードをそのままブログやホームページに貼り付けて完了です。<br />
<img alt="googletop.jpg" src="http://www.imymode.com/inet/images/googlemap02.jpg" width="450"  />
</p>

<p>
表示される地図の大きさを調整したい場合には「埋め込み地図のカスタマイズとプレビュー」をクリックします。
</p>

]]></description>
         <link>http://www.imymode.com/inet/googlemap.html</link>
         <guid>http://www.imymode.com/inet/googlemap.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">ネット技術のメモ書き</category>
                  <category domain="http://www.sixapart.com/ns/types#category">Google関連情報</category>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">GoogleMap</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">グーグルマップ</category>
        
         <pubDate>Thu, 31 Jan 2008 15:18:42 +0900</pubDate>
      </item>
            <item>
         <title>Cookieの有効な利用方法と注意点</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./">プログラミング研究</a> &gt; Cookieの活用方法</div>
<a href="web20.html">
<img src="img/back.gif" alt="一つ前にもどる" height="15" width="50" /></a>
<a href="./">
<img src="img/top.gif" alt="目次にもどる" height="15" width="50" /></a>
<a href="web22.html">
<img src="img/next.gif" alt="次のページへ" height="15" width="50" /></a>
<h2>Cookieの有効な利用方法</h2>
<p>
技術的にはCookieをどのように扱うかを知ることができましたが、実際のプログラムの中でどのように使っていくかということが重要です。上手に使えば、かなり効果的なページを作ることもできます。
</p>

<p></p>
<h3>掲示板等フォーム入力時の前回の書き込みの内容の記録</h3>

<p>
普段のインターネットで一番目にするのがこれかもしれません。掲示板などの書き込みを行った場合に、次回その掲示板を訪問したとき自分の名前やメールアドレスが既に記録されていて便利・・・（こわい？）と思ったことはないでしょうか。これもCookieを利用しています。
</p>

<p>
最初の書き込みで再度入力する可能性のある情報をCookieとして保存して、２回目以降に表示します。ぱっと見たときには自分の情報がそのホームページで管理されているような錯覚を覚えますが、実際には自分のブラウザから読み出されているだけなのです。
</p>


<h3>パスワード認証におけるセッションの保持として利用</h3>
<p>
おそらく、最近のウェブアプリケーションで一番よく使われているのがパスワード認証を行った場合のセッション保持としての利用だと思います。<a href="web17.html">セッションの保持</a>でも書きましたが、HTTPというのはステートレスな通信ですので、リクエストをするたびに誰が通信するということを気にしません。よって、それ以外の方法、以前はHIDDEN属性などで先ほどの通信と今の通信が連続しているという状態を教える必要があります。
</p>

<p>
HIDDEN属性なら、画面が変わるたびにHTMLとしてHIDDEN属性に対してパスワードまたはセッションIDのようなものを書き出す必要がありますが、Cookieに埋め込めば利用者が意識することなく、セッションのチェックを行うことが可能になります。
</p>

<p>
どのようにCookieを利用するべきかはアイディア次第という部分も多数あるので、今後気がついた時点でいろいろと実験していきたいと思います。
</p>

]]></description>
         <link>http://www.imymode.com/lab/web21.html</link>
         <guid>http://www.imymode.com/lab/web21.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング研究</category>
        
        
         <pubDate>Fri, 25 Jan 2008 15:49:19 +0900</pubDate>
      </item>
            <item>
         <title>Cookieの利用方法について - 読み込み編</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./">プログラミング研究</a> &gt; Cookieの読み込み</div>
<a href="web19.html">
<img src="img/back.gif" alt="一つ前にもどる" height="15" width="50" /></a>
<a href="./">
<img src="img/top.gif" alt="目次にもどる" height="15" width="50" /></a>
<a href="web21.html">
<img src="img/next.gif" alt="次のページへ" height="15" width="50" /></a>
<h2>Cookieの利用方法について - 読み込み編</h2>
<p>
Cookieの仕様および書き込む方法について見てきましたが、次は書き込まれたCookieを読み出す方法です。
</p>

<p>
これは意外にも簡単で、Cookieを呼び出す専用の環境変数を利用します。
</p>

<p class="scriptdisp">
		　Perlでの呼び出し方法（環境変数を利用）<br>
		<br>
		　$cook = $ENV{'HTTP_COOKIE'};
</p>

<p>
ブラウザは先ほどの「Domain」と「Path」が一致すれば、そのサーバーに対してCookieを送り返します。それがサーバーの環境変数である「 <em>$ENV{'HTTP_COOKIE'}</em> 」に格納されるのです。
</p>

<p>
これを上の例のようにプログラム中で変数に格納して利用します。
</p>

<h3>Cookieを書き込むためのサンプルプログラム</h3>
<p>
では、Cookieがどのようにデータをやり取りしているのかを見るために、下のようなプログラムを作成してみました。
</p>

<p>
<a href="./scripts/cookie.cgi" target="_blank">
&gt;&gt;サンプルプログラムはこちらから（別窓）
</a>
</p>

<p>
このプログラムは適当な内容をCookieとして有効期限を指定して書き込むものです。有効期限内であればブラウザを落としても情報を保持しています。また、<strong>削除したい場合には過去の有効期限を指定するとCookieは消えます</strong>。
</p>

<p>
実際にプログラムの中では下記のようにヘッダーとしてCookieを書き込み、環境変数の<em>$ENV{'HTTP_COOKIE'}</em>で読み込むという形をとります。
</p>

<p class="scriptdisp">
		■書き込み(ヒアドキュメントとして書く場合)
		<br>
		<br>
		01: print &lt;&lt;HTML;<br>
		02: Content-Type: text/html<br>
		03: Set-Cookie: IMYLAB=Cookieの内容; expires=有効期限<br>
		04: <br>
		05: &lt;html&gt;<br>
		06: &lt;head&gt;...<br>
		07: ・・・<br>
		<br>
		*行番号は便宜的につけたものです。
</p>

<p>
Perlをメインに紹介してきましたが、JavaScriptやHTMLでもCookieを書き出すことは可能です。
</p>
<p></p>

]]></description>
         <link>http://www.imymode.com/lab/web20.html</link>
         <guid>http://www.imymode.com/lab/web20.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング研究</category>
        
        
         <pubDate>Fri, 25 Jan 2008 15:39:03 +0900</pubDate>
      </item>
            <item>
         <title>Cookieの利用方法について - 書き込み編</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./">プログラミング研究</a> &gt; Cookieの書き込み</div>
<a href="web18.html">
<img src="img/back.gif" alt="一つ前にもどる" height="15" width="50" /></a>
<a href="./">
<img src="img/top.gif" alt="目次にもどる" height="15" width="50" /></a>
<a href="web20.html">
<img src="img/next.gif" alt="次のページへ" height="15" width="50" /></a>
<h2>Cookieの利用方法について - 書き込み編</h2>
<p>
それでは、実際にPerlでCookieをどのように利用するかを見てみたいと思います。
</p>

<p>
まずCookieの仕様について必要最低限のことを示したいと思います。先ほどの図でもお分かりのとおり、Cookieはサーバー側からデータを送るのが最初です。このデータを、通常はHTTPヘッダーと呼ばれるHTMLのソースなどでは見えない場所に書き込みます。
</p>

<blockquote cite="http://wp.netscape.com/newsref/std/cookie_spec.html">
	Set-Cookie: NAME=VALUE; expires=DATE;
	path=PATH; domain=DOMAIN_NAME; secure
</blockquote>

<p>
実際にPerlなどのサーバーサイドプログラムでは下のように書くことになります。
</p>

<p class="scriptdisp">
		　Perlでの実装方法<br>
		<br>
		　print "Set-Cookie: (<em>～クッキーの中身</em> )\n";<br>
</p>

<p>
では、この中身をいっしょに考えていきたいと思います。
</p>


]]></description>
         <link>http://www.imymode.com/lab/web19.html</link>
         <guid>http://www.imymode.com/lab/web19.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング研究</category>
        
        
         <pubDate>Fri, 25 Jan 2008 15:23:23 +0900</pubDate>
      </item>
            <item>
         <title>Cookieとは - 活用方法の概略</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./">プログラミング研究</a> &gt; Cookieとは</div>
<a href="web17.html">
<img src="img/back.gif" alt="一つ前にもどる" height="15" width="50" /></a>
<a href="./">
<img src="img/top.gif" alt="目次にもどる" height="15" width="50" /></a>
<a href="web19.html">
<img src="img/next.gif" alt="次のページへ" height="15" width="50" /></a>
<h2>Cookieの利用について</h2>
<p>
これまではサーバー側に処理された情報を記録する方法を中心に扱ってきました。たいていそのような処理で問題ないのですが、利用者のパソコン（クライアント）側にデータを記録できるといいなぁ、、、と思ったことはないでしょうか？
</p>

<p>
掲示板などで毎回入力する必要のある決まった項目（名前、メールアドレスなど）といったことから、ログインするまでもないけど利用者が設定した画面構成を再度表示したい場合まで、、、
</p>

<p>
このような場合にCookieという技術を利用することができます。このCookieの歴史について深くはここでは触れませんが、もともとNetscape社がブラウザにデータを記録するために開発した技術で、それが他のブラウザにも採用され、現在では標準的となっている技術の一つです。
</p>

<h3>Cookieの仕様とその仕組み - 図解</h3>
<ul>
<li><a href="http://wp.netscape.com/legal_notices/cookies.html" target="_blank">ネットスケープ社のCookie公式情報（他サイト）</a></li>
<li><a href="http://wp.netscape.com/newsref/std/cookie_spec.html" target="_blank">Cookieに関するスペック（他サイト）</a></li>
<li><a href="./scripts/cookie.cgi" target="_blank">とりあえずサンプルプログラムはこちらから（別窓）</a></li>
</ul>

<p>
下の図でもわかるように、
</p>

<ol>
<li>最初にページを見に行くと（リクエスト）</li>
<li>Webサーバーからページがダウンロードされて各個人のパソコンにホームページが表示されると同時に</li>
<li>Cookieも送信されてパソコンに保存されます。</li>
<li>そのCookieは次回そのページを表示するときに、そのページが置かれたサーバーに戻される仕組みとなります。</li>
</ol>

<p>
<a href="../exp/cookie.html">どの範囲でCookieが読み書きされるかはこちらから</a>
</p>

<p>
<img src="./img/cookie.png" width="465" height="189" alt="Cookieの仕組み" />
</p>
]]></description>
         <link>http://www.imymode.com/lab/web18.html</link>
         <guid>http://www.imymode.com/lab/web18.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング研究</category>
        
        
         <pubDate>Fri, 25 Jan 2008 15:15:42 +0900</pubDate>
      </item>
            <item>
         <title>セッション(接続状態)の保持 - たった一度だけの関係？</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./">プログラミング研究</a> &gt; セッション保持</div>
<a href="web16.html">
<img src="img/back.gif" alt="一つ前にもどる" height="15" width="50" /></a>
<a href="./">
<img src="img/top.gif" alt="目次にもどる" height="15" width="50" /></a>
<a href="web18.html">
<img src="img/next.gif" alt="次のページへ" height="15" width="50" /></a>
<h2>セッション(接続状態)の保持 - たった一度だけの関係？</h2>
<p>
一番最初でも書きましたが、ホームページは要求に対して返信という命令の繰返しで成り立っている仕組みです。つまり、常に通信している状態というのを管理できません。わかりやすく書くと、誰がホームページをクリックしたかという情報はクリックしたそのとき限りしか感知しない、ということです。
</p>

<p>
自分は同じサーバー内のAというページからBというページにリンクにより移動したとします。自分のパソコンやブラウザは自分がそのようにページを移動したことを覚えていますが、要求を受け付けて応答しているサーバーはAのリクエストもBのリクエストも「誰が」という状態を全く管理していないのです。
</p>

<p>
これはHTTPというプロトコルの仕様なのですが、パソコン（クライアント）から要求があって、その応答をサーバーがする過程では、そのとき一度限りの関係でしかないのです。これがどのように問題になるのでしょうか？
</p>

<h4>一番簡単な例でたとえるなら、、、</h4>

<p>
掲示板のプログラムで、初期設定を発言の最新から１０件表示としていたとします。当然、次の１１～２０を見るためには都度１１～２０のデータがほしい、戻る場合も１～１０のデータがほしいという情報を送信する必要があるのです。自分が今１～１０のデータを見ていたとしても、そのことはサーバー側では全く感知しません。
</p>

<p>
もっと重要な例でいうなら、パスワードで制限されたページを考えてみてください。最初にユーザID＆パスワードを入力して認証されれば最初のページが表示されますが、利用者がその保護されたページを移動するためには、都度、その利用者がその人であることを教えてやる必要があるのです。
</p>

<h4>ステートレス型通信の特徴</h4>
<p>
このあたりの、一つのアクションに対する応用の仕方がスタンドアローンでプログラムを書く場合との最大の違いになるのです。（これを<strong>ステートレス型</strong>といいます。ステートレスとは状態がない、、、つまり状態を管理しないということです。）
</p>

<p>
スタンドアローン形のプログラムの例で言うなら、一度なにかの処理をするごとにそのプログラムを終了しているのと同じことです。毎回終了しているので、その続きの処理をさせるのには、毎回そこまでのデータを教える必要がある、ということと同じになります。
</p>

<p> 
</p>

<h3>inputタグのhidden属性で状態を伝える（一例として）</h3>

<p>
一連の処理で画面が次々と変わっていく（遷移していく）場合には、それらが継続していることをサーバーに伝える必要があるということは、先ほどの記述で理解していただけた（？）と思っていはいるのですが、では、サーバー側でその連続性を認識できない（セッションが確立されない）なら、どのようにしてそれおを実現するか、という問題が発生します。
</p>

<p>
その一例としてあげられるのが、INPUTタグのhidden属性を利用する方法です。では、今回もサンプルで考えてみましょう。
</p>

<p>
まず、ユーザー登録（懸賞応募など）のプログラムを考えてみたいと思います。下のような流れで画面は移っていきますよね？
</p>

<p class="scriptdisp">
		　画面遷移<br>
		<br>
		　１・情報入力画面<br>
		　　　↓<br>
		　２・情報確認画面<br>
		　　　↓<br>
		　３・送信終了画面<br>
</p>

<p>
通常このようなデータを受け付ける場合の画面遷移を考えた場合、１番だけの入力画面で終わるケースはまれですし、入力している利用者側にも不安を与えかねません。
</p>

<p>
そこで、２番目のプロセスのように、入力させてその情報を再度確認させる画面を表示し、そこで送信（登録）終了後に、ただしく処理された旨の確認画面を出す、という流れになっています。
</p>

<p>
１で入力された情報を再度確認のために２に表示するのはこれまでのプログラム処理と同じなのですが、その情報を最後にサーバーに書き込むという処理の場合にも、２から３に移動するときに、１で入力された同じ情報を再度、利用者の端末側から送り込む必要があるのです。（１で情報を入力され、２で表示した段階で、サーバーはその情報を全く覚えていません。）
</p>

<p>
よって、プログラム内では、１で入力された内容の必要なものを確認画面のためにHTMLで書き出すと同時に、再度サーバーに送り込むための準備をする必要があるのです。そのために、１で入力された内容を再度INPUTタグにHIDDENとして書き込む必要があるのです。（面倒ですが、ステートレスであることがHTTPというプロトコルの仕様なので、仕方がありません）
</p>

<p>
このような処理は今回に限らず、状態を維持しながらページを表示したい場合には、「自分が今どのような状態なのかのすべて」を「毎回」サーバーに教える必要があります。
</p>

<h5>hidden属性でのセッション保持のサンプル</h5>
<p>
ちなみに、上で解説した入力画面の例を理解してもらうために、サンプルをつくりました。下をクリックすると、別窓が開きます。（今回はhidden属性の使い方になるので、サンプルソースはありません。）
</p>

<ul>
 <li><a href="./scripts/hiddentest.cgi" target="_blank">&gt;&gt; サンプルはこちらをクリック</a></li>
</ul>
]]></description>
         <link>http://www.imymode.com/lab/web17.html</link>
         <guid>http://www.imymode.com/lab/web17.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング研究</category>
        
        
         <pubDate>Fri, 25 Jan 2008 14:33:09 +0900</pubDate>
      </item>
            <item>
         <title>簡易アンケートを作ってみる</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./">プログラミング研究</a> &gt; 簡易アンケート</div>
<a href="web15.html">
<img src="img/back.gif" alt="一つ前にもどる" height="15" width="50" /></a>
<a href="./">
<img src="img/top.gif" alt="目次にもどる" height="15" width="50" /></a>
<a href="web17.html">
<img src="img/next.gif" alt="次のページへ" height="15" width="50" /></a>
<h2>簡易アンケート - 入力内容を保存・表示する</h2>
<p>
前回で解説したようなプログラムならJavaScriptで出来てしまいます。ですから、次はそれだけでは出来ないようなものをサンプルとして取り上げます。「カウンター」の応用編のようですが、アンケート集計です。
</p>

<p>
<center>
<form action="./scripts/quest.cgi" method="post" onSubmit="window.open('','result000','width=150,height=150,scrollbars=no,resizeable=no,toolbar=no,titlebar=no,status=no');" target="result000">

<table bgcolor="#ffcc00" cellpadding="15"><tr><td bgcolor="#ffffff">
<font size="2">
■アンケート調査です。<br>
賛成:<input type="radio" name="ans" value="yes"><br>
反対:<input type="radio" name="ans" value="no"><br>
<input type="submit" value="答える">
</font>
</td></tr>
</table>
</form>
</center>
</p>

<p>
今回も、とりあえずソースを見てみたいと思います。（ただ、ずいぶん長いソースになってきました・・・）
</p>

<p class="scriptdisp">
	01: #!/usr/local/bin/perl<br>
	02: <br>
	03: require 'jcode.pl';<br>
	04: <br>
	05: <font color="#990000"><b>&amp;read_data;</b></font><br>
	06: <br>
	07: # count.datというファイルから現在のカウント数を読み込む<br>
	08: open (IN, "quest.dat");<br>
	09: @count=&lt;IN&gt;;<br>
	00: close(IN);<br>
	11: <br>
	12: # 改行コードを取り除く<br>
	13: chomp @count;<br>
	14: <br>
	15: # 現在のカウント数$countに１を追加<br>
	16: if ($FORM{'ans'} eq "yes"){	$count[0]++;}<br>
	17: elsif (	$FORM{'ans'} eq "no"){$count[1]++;}<br>
	18: <br>
	19: # print以外でもヒアドキュメントは使えるんです。便利！<br>
	20: $newdata = &lt;&lt;"DATA";<br>
	21: $count[0]<br>
	22: $count[1]<br>
	23: DATA<br>
	24: <br>
	25: # １増加したカウントを保存<br>
	26: open (OUT, "&gt;quest.dat");<br>
	27: print OUT $newdata;<br>
	28: close(OUT);<br>
	29: <br>
	30: # ここからHTMLでの表示<br>
	31: print &lt;&lt;"HTML";<br>
	32: Content-Type: text/html<br>
	33: <br>
	34: &lt;html&gt;&lt;head&gt;&lt;title&gt;test&lt;/title&gt;&lt;/head&gt;<br>
	35: &lt;body&gt;<br>
	36: アンケート結果&lt;br&gt;<br>
	37: 賛成 ： $count[0] 人&lt;br&gt;<br>
	38: 反対 ： $count[1] 人&lt;br&gt;<br>
	39: &lt;/body&gt;&lt;/html&gt;<br>
	40: HTML<br>
	41: <br>
<font color="#990000">
	42: # サブルーチン化された読み込み処理<br>
	43: sub read_data(){ <br>
	44: 　　if ($ENV{'REQUEST_METHOD'} eq "POST") {<br>
	45: 　　　　read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});<br>
	46: 　　} else {<br>
	47: 　　　　$buffer = $ENV{'QUERY_STRING'};<br>
	48: 　　}<br>
	49: 　　foreach (split(/&/, $buffer)) {<br>
	50: 　　　　($keyword, $value) = split(/=/);<br>
	51: 　　　　$value =~ tr/+/ /;<br>
	52: 　　　　$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;<br>
	53: <br>
	54: 　　　　# S-JISコード変換<br>
	55: 　　　　&amp;jcode'convert(*value, "sjis", "", "z");<br>
	56: <br>
	57: 　　　　$value =~ s/\r//g;<br>
	58: 　　　　$value =~ s/\n//g;<br>
	59: <br>
	60: 　　　　$FORM{$keyword} = $value;<br>
	61: 　　} <br>
	62: }<br>
</font>
	63: __END__<br>

</p>

]]></description>
         <link>http://www.imymode.com/lab/web16.html</link>
         <guid>http://www.imymode.com/lab/web16.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング研究</category>
        
        
         <pubDate>Fri, 25 Jan 2008 14:12:03 +0900</pubDate>
      </item>
            <item>
         <title>血液型占いをつくってみる</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./">プログラミング研究</a> &gt; 血液型占い</div>
<a href="web14.html">
<img src="img/back.gif" alt="一つ前にもどる" height="15" width="50" /></a>
<a href="./">
<img src="img/top.gif" alt="目次にもどる" height="15" width="50" /></a>
<a href="web16.html">
<img src="img/next.gif" alt="次のページへ" height="15" width="50" /></a>

<h2>血液型占いをつくってみる</h2>
<p>
前回プログラムへのデータの渡し方（入力）について考えましたが、あれだけではいったい何をやっているのか？？？な状態だったと思います。そこで、今度はサンプルとしていくつか簡単なデータをやり取りするプログラムを作ってみたいと思います。
</p>

<h3>選択に応じて内容を変える - アルゴリズム</h3>
<p>
まず、簡単な例からです。
</p>

<p>
利用者の選択に応じて、表示内容を変えるためのプログラムです。具体的には最初でやった「おみくじ」のようなプログラムになります。「おみくじ」の場合は画面を変化させるための振分けをサーバー内の時間によって行っていましたが、これを入力されたデータによって変化させる、という単純なものです。
</p>

<p>
プログラムの簡単な流れとしては下のようになります。
</p>

<p class="scriptdisp">
		　入力（選択）画面（HTML）<br>
		　　↓<br>
		　プルダウンによる選択<br>
		　　↓<br>
		　クエリーを受けて処理<br>
		　　↓<br>
		　プログラム内で分岐<br>
		　　↓<br>
		　表示<br>
</p>

<p>
前回は「おみくじ」だったので、今回は「血液型うらない」にしてみたいと思います。ウェブ上で血液型を聞いて、それに応じた内容を返す、というプログラムです。
</p>

<p>
<center>
<form action="./scripts/fortune2.cgi" method="post" onSubmit="window.open('','result00','width=200,height=150,scrollbars=no,resizeable=no,toolbar=no,titlebar=no,status=no');" target="result00">
<table bgcolor="#ffcc00" cellpadding="15"><tr><td bgcolor="#ffffff">
<font size="2">
■血液型占い（選択してチェックしてみて！）<br>
Ａ型　:<input type="radio" name="bloodtype" value="A"><br>
Ｂ型　:<input type="radio" name="bloodtype" value="B"><br>
Ｏ型　:<input type="radio" name="bloodtype" value="O"><br>
ＡＢ型:<input type="radio" name="bloodtype" value="AB"><br>
<input type="submit" value="チェック">
</font>
</td></tr></table>
</form>
</center>
</p>

<p>
とりあえずソースを見てみましょう。
</p>

<p class="scriptdisp">
		01: #!/usr/local/bin/perl<br>
		02: <br>
		03: require 'jcode.pl';<br>
		04: <br>
		05: if ($ENV{'REQUEST_METHOD'} eq "POST") {<br>
		06: 　　read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});<br>
		07: } else {<br>
		08: 　　$buffer = $ENV{'QUERY_STRING'};<br>
		09: }<br>
		10: <br>
		11: foreach (split(/&/, $buffer)) {<br>
		12: 　　($keyword, $value) = split(/=/);<br>
		13: 　　$value =~ tr/+/ /;<br>
		14: 　　$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;<br>
		15: <br>
		16: 　　# S-JISコード変換<br>
		17: 　　&amp;jcode'convert(*value, "sjis", "", "z");<br>
		18: <br>
		19: 　　$value =~ s/\r//g;<br>
		20: 　　$value =~ s/\n//g;<br>
		21: <br>
		22: 　　$FORM{$keyword} = $value;<br>
		23: } <br>
		24: <br>
		25: if ($FORM{'bloodtype'} eq "A"){<br>
		26: 　　$hyoji = "きまじめ";<br>
		27: }elsif ($FORM{'bloodtype'} eq "B"){<br>
		28: 　　$hyoji = "ほがらか";<br>
		29: }elsif ($FORM{'bloodtype'} eq "O"){<br>
		30: 　　$hyoji = "おおざっぱ";<br>
		31: }elsif ($FORM{'bloodtype'} eq "AB"){<br>
		32: 　　$hyoji = "つかみどころがない";<br>
		33: }else{<br>
		34: 　　$hyoji = "？";<br>
		35: }<br>
		36: # ここからHTMLの表示です。<br>
		37: print <<"HTML";<br>
		38: Content-Type: text/html<br>
		39: <br>
		40: &lt;html&gt;&lt;head&gt;&lt;title&gt;test&lt;/title&gt;&lt;/head&gt;<br>
		41: &lt;body&gt;<br>
		42: $FORM{'bloodtype'}型のあなたの性格&lt;br&gt;<br>
		43: $hyoji<br>
		44: &lt;/body&gt;&lt;/html&gt;<br>
		45: <br>
		46: HTML<br>
		47: <br>
		48: __END__<br>
		＊インデントにスペースを使っています。<br>
		　このままコピーしても動きません。<br>
		*左端の番号は便宜的に付けた行番号です。<br>
</p>

]]></description>
         <link>http://www.imymode.com/lab/web15.html</link>
         <guid>http://www.imymode.com/lab/web15.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング研究</category>
        
        
         <pubDate>Fri, 25 Jan 2008 14:04:34 +0900</pubDate>
      </item>
            <item>
         <title>受け取ったデータの処理</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./">プログラミング研究</a> &gt; 受け取ったデータの処理</div>
<a href="web13.html">
<img src="img/back.gif" alt="一つ前にもどる" height="15" width="50" /></a>
<a href="./">
<img src="img/top.gif" alt="目次にもどる" height="15" width="50" /></a>
<a href="web15.html">
<img src="img/next.gif" alt="次のページへ" height="15" width="50" /></a>

<h2>受け取ったデータ処理のためのプログラム</h2>
<p>
前回で、データの送信がどのように行われるか理解できたと思いますが、送信されたデータをプログラム内で処理できるように整理する必要があります。下のソースは、「項目名１＝値１＆項目名２＝値２＆項目名３＝値３」といったデータを$bufferという変数に取り込むための処理です。
</p>

<h3>POSTとGETの場合わけ - 分岐処理</h3>
<p>
この場合、先ほども書きましたが、POSTで送信された場合とGETで送信された場合で処理が違う(格納される変数が違う)ため、場合分けを行っています。
</p>

<p class="scriptdisp">
			01: if ($ENV{'REQUEST_METHOD'} eq "POST") {<br />
			02: 　　read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});<br />
			03: } else {<br />
			04: 　　$buffer = $ENV{'QUERY_STRING'};<br />
			05: }<br />
			<br />
			<br />
			【簡易解説】<br />
			01: もしも $ENV{'REQUEST_METHOD'} が POST なら<br />
			02: 　　STDINという変数から $ENV{'CONTENT_LENGTH'}の長さだけデータを読み出して<br />
			　　　　$bufferに入れる<br />
			03: それ以外の場合（GET）は下の処理<br />
			04: 　　$ENV{'QUERY_STRING'}からデータを読み出して$bufferに入れる<br />
			05: 以上<br />
</p>

<p>
まず、「<b>$ENV{'REQUEST_METHOD'}</b>」という特別な変数を参照して、要求が「POST」か「GET」かのチェックを行います。この「<b>$ENV{'REQUEST_METHOD'}</b>」は環境変数と言われ、要求等に関する様々な情報を知ることができます。これ以外にも様々なものがありますので、順次紹介したいと思います。
</p>


<h5>POSTで送信された場合</h5>
<p>
POST の場合は、標準入力(STDIN)として入力されるので、上記のように $buffer に対して、<font color="#000099">$ENV{CONTENT_LENGTH}</font> の長さのデータを入力する、というようにして処理します。(上記２行目。$ENV{CONTENT_LENGTH}は入力されたデータの長さをチェックする環境変数です。)
</p>

<h5>GETで送信された場合</h5>
<p>
GETの場合は、URLとして送信されるので、そのデータの長さに限界があります。
また、送信されたデータは標準入力ではなく、<font color="#000099">$ENV{QUERY_STRING}</font> に格納されるので、その中のデータをそのまま $buffer に入力しています。(上記４行目)
</p>

<p>
ちなみに、ここでは$bufferという名前の変数を使いましたが、どんな名前のものでもOKです。これで、プログラム内にデータを取り込むことができました。ただ、この状態では
</p>

<p class="scriptdisp">
			　$buffer = <u><font color="red">「項目名１＝値１＆項目名２＝値２＆項目名３＝値３」</font></u>
			<br />
</p>

<p>
というつながった一つのデータに過ぎませんので、これを扱えるようにバラバラにする必要があります。
</p>

<h3>まとまったデータを分離する処理</h3>
<p>
下記の処理では、$bufferに格納されたデータを「&amp;」を区切り文字として分離する処理です。これを、&amp;で区切れることができなくなるまで繰り返します。「foreach」とはPerlで利用できるそのような繰返し処理です。
</p>

<p class="scriptdisp">
			　foreach (<b>split(/&amp;/, $buffer)</b>) {<br />
			　　　処理（ここはあとで解説）<br />
			　}
</p>


<p>
ですが、&amp;で切り取られたデータはどこにいってしまったのでしょうか？
これは、Perlの書き方の問題なのですが、Perlはソースの表記をかなり省略できます。この場合、上記の太字の部分で切り取られたデータは、「<font color="red">$_</font>」という汎用的な変数に格納されて、変数を使うことを明示しなくても使えるという非常に便利（あいまい）な機能です。この「$_」は明示して使うこともできますし、明示せずに省略して関数を使うことで、自動的に引数として渡すこともできます。
</p>

<p>
ですから、<font color="#000099">foreach(split(/&/,$buffer))</font> は正確に記述すると、
</p>

<p class="scriptdisp">
			　　　foreach $_ (split(/&/,$buffer))
			<br />
</p>

<p>
ということになります。<br />
この切り取られたデータは
</p>

<p class="scriptdisp">
			　$buffer=「項目名１＝値１＆項目名２＝値２＆項目名３＝値３」
			<br />
			<br />
			　　　↓
			<br />
			<br />
			　項目名１＝値１<br />
			　項目名２＝値２<br />
			　項目名３＝値３<br />
			<br />
</p>

<p>
上記のように分解されますが、まだ項目と値が＝でつながっているのでさらにこれらを分離する必要があります。よって、「foreach(){}」の繰り返し処理の中で、この分解されたそれぞれを、さらに「<font color="red">＝</font>」で分離して、
</p>

<p class="scriptdisp">
			　　($keyword, $value) = split(/=/);
			<br />
			<br />
			　　　↓
			<br />
			<br />
			　　$keyword<br />
			　　$value<br />
			<br />

			＊ちなみに、上の式は次の式の省略形です。<br />
			　　($keyword, $value) = split(/=/, $_);
			<br />
</p>

<p>
というように変数にそれぞれ格納します。
<br />
これを、$keywordと$valueという関連づいた変数で扱うことができるように、ハッシュに格納します。（Perlでの常套手段です。）
</p>

<p class="scriptdisp">
			　　　$FORM{$keyword} = $value;<br />
			<br />
			　　　　　↓
			<br />
			<br />
			　　　$FORM{'項目名１'}＝値１<br />
			　　　$FORM{'項目名２'}＝値２<br />
			　　　$FORM{'項目名３'}＝値３<br />
</p>

]]></description>
         <link>http://www.imymode.com/lab/web14.html</link>
         <guid>http://www.imymode.com/lab/web14.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング研究</category>
        
        
         <pubDate>Fri, 25 Jan 2008 11:56:45 +0900</pubDate>
      </item>
            <item>
         <title>プログラムにデータを引き渡す方法</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./">プログラミング研究</a> &gt; データの受け渡し</div>
<a href="web12.html">
<img src="img/back.gif" alt="一つ前にもどる" height="15" width="50" /></a>
<a href="./">
<img src="img/top.gif" alt="目次にもどる" height="15" width="50" /></a>
<a href="web14.html">
<img src="img/next.gif" alt="次のページへ" height="15" width="50" /></a>
<h2>データの受け渡し方（データ入力の方法）</h2>
<p>
これまでは、時間によるメッセージの変化やカウンターといった、わりとサーバー側で一方的に作成される内容のプログラムを見てきました。いわゆる出力というものです。
</p>

<p>
しかし、いろんなプログラムを作っていくときには利用者側でいろいろとコントロールしたいことも多くなってくると思います。掲示板に文字を書き込むこともそうですし、プルダウンメニューとかで指定した条件で検索をしたりです。
</p>

<p>
このように、利用者側からサーバー（プログラム）に対して何か入力をさせるためには、どのようにしたらいいのでしょうか？
</p>

<p>
主な方法としては、二通りあります。
</p>

<h3>GETを使ってデータを送信</h3>
<p>
ひとつは「GET」という方法です。このGETという方法は、ブラウザから普通にHTMLの文書を要求するときと同じ方法になります。同じ？とは、普通URLいわゆるアドレスで「<font color="#0000ff">http://ww......</font>」と呼び出しますよね？この方法です。
</p>

<p>
入力したいプログラムが「<b>test.cgi</b>」だとすると、その後ろに「<b>test.cgi<font color="#ff0000">?</font><font color="#0000ff">happy</font></b>」とすることで、プログラム自体に「<font color="#ff0000">？</font>」以降の文字列を送り込むことができます。
</p>

<p>
あちこちの掲示板やサーチエンジンのリンクボタンのURLを注意してみてください。「<font color="#0000ff">http://www.xxxxxx.com/bbs.cgi?mode=next&amp;num=12....</font>」というのを見たことはないですか？これがまさにそうなんです。
</p>

<p>
すごく単純ですよね。これがWebサーバーの中では、<b>QueryStrings</b> という環境変数に格納されて、プログラムの中で <b>QueryStrings</b>の中身を参照すると、「？」以下の文字を読み出すことができる、という仕組みになっているようです。
</p>

<p>
当然URL形式になるので、ここに日本語を書き込むと、文字化けしたようなデータに変換されて送信されます。サーチエンジンで検索したすぐあとのアドレスバーに「<font color="#ff0000">%82%A0%82%A2%82%DC%82%A2...</font>」とかって表示されていて、「なんだろう？」とか思ったことはないですか。あれが、変換された日本語などの表示なんです。
</p>

<h3>POSTを使ってデータを送信</h3>
<p>
もうひとつ方法があります。
<br />
「POST」と呼ばれる方法です。一番最初の回で<a href="web04.html">ブラウザはHTMLソース以外にヘッダーという情報を受け取っている</a>という話をしたことを覚えているでしょうか？このような情報は受け取るときだけではなく、送信するときも同じように見えない情報としてサーバーに送信されています。この見えない場所にデータを埋め込んで送信する方法です。
</p>

<p>
見えないのに、どうやって送信するかということですが、方法はすごく見慣れた方法で行います。
</p>

<p>
いわゆるフォームというのを使ってします。「&lt;form action=&quot;&quot; method=&quot;&quot;&gt;」というタグですね。ここの「method」のところに「<font color="#0000ff">method=&quot;post&quot;</font>」と送信方法を指定することで、POSTとしてフォームで入力された内容がサーバーに向けて送信されているのです。
</p>

<p class="scriptdisp">
			&lt;form action=&quot;http://.....&quot; method=&quot;<b>post</b>&quot;&gt;<br />
			　&lt;input type=&quot;&quot;&gt;......<br />
			<br />
			　ここのインプットタグの内容がプログラムに入力される<br />
			<br />

			　&lt;/form&gt;<br />
</p>

<p>
じゃあ、「method=""」のところに「GET」って入れたらどうなるの？って思いませんか。
ご推測のとおり、フォームの情報がURLになって送信されるのです。大手のサーチエンジンなどは、ほとんど「検索」ボタンのフォーム部分が「method="get"」となっているので、検索したあとは、アドレスのところに変な文字が表示されるんですよね。
</p>

<p>
ただ、「POST」と「GET」、どちらの方法を使うべきかは、その目的にもよりますが、一般的に「POST」を使ったほうが安全性が高くなるといわれています。その理由は、「GET」で送られた内容はURLとして送信されるので、目に付きやすいし経由するサーバーのログに残る、「POST」は普通なら見えないような形で送信されるしログとしても残らないということらしいです。
</p>

<p>
また、「GET」だと、ブラウザ（クライアント）側に履歴として残ったりすることもありますし、URLでプログラムに引数を渡すことが可能なので、いたずらされやすいという点もあると思います。
ただ、「GET」にも別の利点があり（これは後述します。）、どちらを使うかは場合に応じてということですね。
</p>

]]></description>
         <link>http://www.imymode.com/lab/web13.html</link>
         <guid>http://www.imymode.com/lab/web13.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング研究</category>
        
        
         <pubDate>Fri, 25 Jan 2008 11:32:10 +0900</pubDate>
      </item>
            <item>
         <title>ファイルロックのアルゴリズム</title>
         <description><![CDATA[<div class="pankuzu"><a href="../">トップ</a> &gt; <a href="./">プログラミング研究</a> &gt; 排他のアルゴリズム</div>
<a href="web11.html">
<img src="img/back.gif" alt="一つ前にもどる" height="15" width="50" /></a>
<a href="./">
<img src="img/top.gif" alt="目次にもどる" height="15" width="50" /></a>
<a href="web13.html">
<img src="img/next.gif" alt="次のページへ" height="15" width="50" /></a>
<h2>排他処理のためのプログラム</h2>
<p>
共有するデータをMySQLといったようなDBMSで操作するときは、これらソフトが排他制御を行ってくれるので、割と簡単に排他の処理ができるらしいのですが、プロバイダーや無料のレンタルスペースだと、データベースソフトは使えないので、通常のテキストファイルをデータファイルとして、自分で排他制御する必要があります。（DBMSとの連携はまだ勉強中です・・）
</p>

<h3>ファイルロックのアルゴリズム</h3>
<p>
理屈は簡単です。自分が書き込みをしようと思ってファイルを開くときには、他の誰にもファイルを開かせない、それだけのことです。流れを書くと。
</p>

<p class="scriptdisp">
１．ファイルをロックして排他制御する。（これで、誰もファイルを開くことができない）<br />
２．ファイルを開いてデータを参照<br />
３．必要な処理を行う<br />
４．ファイルに処理後のデータを保存<br />
５．ファイルのロックを解除する。（誰でもアクセス可能な状態にする。）<br />
</p>

<p>
以上です。
</p>

<p>
これは、書き込みを行う場合だけに発生する問題ですので、読み込みしかしないデータには排他の処理は無意味です。
</p>

<p>
そこで、サンプルとして使ってきたカウンターのプログラム（Perl）ではどのような手法で排他を行うかを考えてみたいと思います。
</p>

<p>
Perlには「flock」というファイルの排他制御を行う関数があります。ただ、これはサーバーのOSに依存するので、使えない場合があります。と書かれていることが多いのですが、自分の経験上、使えないというサーバーを使ったことがありません。WindowsNT系でも使えたので、おそらく大丈夫だと思います。（Windows９X系は使えません。！）
</p>

<p>
いろんなCGI用Perlスクリプトを配布しているサイトでは、Symlinkなどを利用してファイルの排他（ロック）を行っているようですが、Symlinkなどは、もともとファイルの排他をするためのものではなく、アルゴリズム的にも不完全だという指摘も聞きます。個人的には、不完全な排他なら、しないほうがいいのでは・・・とも思ってます。
</p>

<h3>flockを使ったファイルロックの方法</h3>
<p>
flockを利用してファイルに排他をかけることを考えると、以下のようなプログラムになりそうです。前回行ったカウンターのプログラムに排他をかける例で示してみます。
</p>

<p class="scriptdisp">
		01: #!/usr/local/bin/perl<br />
		02: <br />
		03: <font color="#009900"># ロック用ファイルを作成</font><br />
		04: open(LOCK, "&gt;lock.temp");<br />
		05: <b>flock(LOCK,2);</b> <font color="#009900"># ロック用ファイルをロックする</font><br />
		06: <br />
		07: <font color="#009900"># count.datというファイルから現在のカウント数を読み込む</font><br />
		08: open (IN, &quot;count.dat&quot;);<br />
		09: $count=&lt;IN&gt;;<br />
		10: close(IN);<br />
		11: <br />
		12: <font color="#009900"># 現在のカウント数$countに１を追加</font><br />
		13: $count=$count+1;<br />
		14: <br />
		15: <font color="#009900"># １増加したカウントを<b>別の一次ファイルに保存</b></font><br />
		16: open (OUT, &quot;&gt;count.temp&quot;);<br />
		17: print OUT $count;<br />
		18: close(OUT);<br />
		19: <br />
		20: <font color="#009900"># 別の一次ファイルから本来のファイルに名前を変更</font><br />
		21: rename("count.temp","count.dat");<br />
		22: <br />
		23: <font color="#009900"># 最初に作ったロック用ファイルを削除</font><br />
		24: unlink("lock.temp");<br />
		25: <br />
		26: <font color="#009900"># ロックしたファイルを解除</font><br />
		27: flock(LOCK,8);<br />
		28: close(LOCK);<br />
		30: <br />
		31: <font color="#009900"># ここからHTMLでの表示</font><br />
		32: print &quot;Content-Type: text/html\n\n&quot;;<br />
		33: print &quot;&lt;html&gt;&lt;head&gt;&lt;title&gt;test&lt;/title&gt;&lt;/head&gt;&quot;;<br />
		34: print &quot;&lt;body&gt;&quot;;<br />
		35: print &quot;あなたは $count 番目の訪問者です。&quot;;<br />
		36: print &quot;&lt;/body&gt;&lt;/html&gt;&quot;;<br />
		37: <br />
		38: __END__<br />
		<br />
		*左端の番号は便宜的に付けた行番号です。
</p>

<p>
どうでしょうか？これで排他がかかりました。
</p>

]]></description>
         <link>http://www.imymode.com/lab/web12.html</link>
         <guid>http://www.imymode.com/lab/web12.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">プログラミング研究</category>
        
        
         <pubDate>Fri, 25 Jan 2008 11:19:51 +0900</pubDate>
      </item>
      
   </channel>
</rss>
