<?xml version="1.0" encoding="utf-8" ?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" 
			xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" 
			xmlns:cc="http://web.resource.org/cc/" xml:lang="ja">
<channel rdf:about="http://zavieru.blog77.fc2.com/?xml">
<title>読断と変見</title>
<link>http://zavieru.blog77.fc2.com/</link>
<description>読んだ本・雑誌・ブログなどに対して、できるだけ自分の考えを自分の言葉で書いていきたいと思います。</description>
<dc:language>ja</dc:language>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-313.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-312.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-311.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-310.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-309.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-308.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-307.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-306.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-305.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-303.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-302.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-301.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-300.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-299.html" />
<rdf:li rdf:resource="http://zavieru.blog77.fc2.com/blog-entry-298.html" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-313.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-313.html</link>
<title>Yahoo! JAPAN - インターネット クリエイティブアワード </title>
<description> Yahoo! JAPAN - インターネット クリエイティブアワード に応募してみた。応募した作品は、速読をするWEBツール↓。速読たいした作品ではないけどなんとなく出品してみたくなった。作成の意図は、読む速度が早くなれば、仕事の書類を読む時間やプライベートでの読書の時間が節約でき、人生を有意義に過ごせるのではと思ったから。実はまだまだ未完成なんだけど、今日までだから時間がなかった。追加したかった機能は・ブログだと、
 </description>
<content:encoded>
<![CDATA[ <a href="http://creative-award.yahoo.co.jp/" target="_blank" title="Yahoo! JAPAN - インターネット クリエイティブアワード ">Yahoo! JAPAN - インターネット クリエイティブアワード </a>に応募してみた。<br /><br />応募した作品は、速読をするWEBツール↓。<br /><a href="http://dev.resco-service.com/sokudoku/sokudoku.html" target="_blank" title="速読"><strong>速読</strong></a><br />たいした作品ではないけどなんとなく出品してみたくなった。<br /><br />作成の意図は、読む速度が早くなれば、仕事の書類を読む時間や<br />プライベートでの読書の時間が節約でき、人生を有意義に過ごせるのでは<br />と思ったから。<br /><br />実はまだまだ未完成なんだけど、今日までだから時間がなかった。<br />追加したかった機能は<br />・ブログだと、広告などの不要な文字も入ってしまうので内容のみを取得して表示。<br />・表示する文字数変更<br />・形態素解析をして区切りのいいところで切る。<br />・表示する行数を変更できる。<br />・英語対応。単語ごとに区切る。<br /><br />苦労したのがie対応。もともとFirefoxで作ってたから大変だった。<br />早くブラウザの標準化して欲しいな。<br />IEがHTML5対応しなかったら、Windows使うのやめようかなと本気でおもった。<br />それくらいIEむかつた。<br />てかブラウザ間の仕様の違いによる経済的損失っていくらあるんだろう。<br />結構あると思うんだが、IEは対応すべきだろJK。<br /><br />でも出品するとなると、モチベーションが上がるからいいかも。<br />今後も敷居が低そうなのが、あったら応募してみようかな。<br /> ]]>
</content:encoded>
<dc:subject>自己サービス</dc:subject>
<dc:date>2009-08-17T15:31:03+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-312.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-312.html</link>
<title>PHPでtwitterに投稿</title>
<description> いまさら感がありますが、TwitterのBotを作ろうと思って、まずは投稿してみた。言語はPHP。とりあえずソース&amp;lt;?php$url = &quot;http://twitter.com/statuses/update.xml?&quot;;$username = &quot;ユーザ&quot;;$password = &quot;パス&quot;;$params = &quot;status=&quot;. rawurlencode(&quot;投稿するメッセージ&quot;);$result = file_get_contents($url.$params , false, stream_context_create(array(	&quot;http&quot; =&gt; array(		&quot;method&quot; =&gt; &quot;POST&quot;,		&quot;header&quot; =&gt; &quot;Authorization: 
 </description>
<content:encoded>
<![CDATA[ いまさら感がありますが、TwitterのBotを作ろうと思って、まずは投稿してみた。言語はPHP。<br /><h3>とりあえずソース</h3><br /><pre>&lt;?php<br />$url = "http://twitter.com/statuses/update.xml?";<br />$username = "ユーザ";<br />$password = "パス";<br />$params = "status=". rawurlencode("投稿するメッセージ");<br /><br />$result = file_get_contents($url.$params , false, stream_context_create(array(<br />	"http" => array(<br />		"method" => "POST",<br />		"header" => "Authorization: Basic ". base64_encode($username. ":". $password)<br />	)<br />)));<br />?&gt;</pre><br />たったこれだけ。<br /><h3>まずTwitterのAPIの説明</h3><br />TwitterAPIの<a href="http://apiwiki.twitter.com/Twitter-API-Documentation#" target="_blank" title="ドキュメント">ドキュメント</a>を開く。<br />この中に「<a href="http://apiwiki.twitter.com/Twitter-REST-API-Method%3A-statuses%C2%A0update" target="_blank" title="statuses update">statuses update</a>」がある。これが投稿に関するAPIなので開いて読む。<br /><br />読むと以下のことがわかった。ような気がする。<br />・URLは「http://twitter.com/statuses/update.[format]。<br />　formatの部分はレスポンスの形式を入力する。<br />・形式はxml, json, rss, atom がある。<br />・HTTPのメソッドはPOST。<br />・認証が必要<br />・負荷制限なし？1時間に150回までしかリクエストしちゃダメってのがないらしい。<br />・POST時のパラメーターは二つで、statusとin_reply_to_status_id。<br />　statusは投稿するメッセージなので必須。<br />　in_reply_to_status_idは別のTwitterユーザに対する返答の場合指定するオプションパラメータ。<br /><br /><h3>ソースの説明</h3><br />たいしたソースではないので説明というほどでもないけど、一応。<br /><br />PHPには<a href="http://jp2.php.net/file_get_contents" target="_blank" title="file_get_contents">file_get_contents</a>という便利な関数がある。<br />この関数にHTTPのURLを指定すると、指定したURLにHTTPリクエストを発行して、<br />HTTPレスポンスを文字列で返してくれる。<br />なので、今回はこの関数を利用してTwitterに接続を試みる。<br /><pre>$result = file_get_contents($url.$params , false, stream_context_create(array(</pre><br />第一引数に$URL＋$paramsを指定している。<br />URLにはAPIにあったURLを指定し（formatはxmlにした）、パラメータにAPIで必須のstatusを指定。<br />第二引数はレスポンスを読み込むときエンコードするかとかバイナリとかなので、<br />とりあえず、falseにする。<br />このAPIでは認証を使用するため独自のコンテキストを作成するので第三引数に<br /><a href="http://php.benscom.com/manual/ja/function.stream-context-create.php" target="_blank" title="stream_context_create">stream_context_create</a>を指定。<br />認証にはいくつか方法があるみたいだけど、今回はBasic認証を使用した。<br /><br />以上説明終わり。<br /><br />＊参考URLっていうかもろぱくリ<br /><a href="http://d.hatena.ne.jp/hirataka522/20080126/1201300282" target="_blank" title="HIRACCHI H.D.：PHPでTwitterに投稿">HIRACCHI H.D.：PHPでTwitterに投稿</a> ]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2009-08-08T18:41:34+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-311.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-311.html</link>
<title>viでホームポジションを死守するためのショートカットメモ</title>
<description> エディタで文章やプログラムを書いているときに一番嫌なのがホームポジションを乱されることだ。個人的にEnterやバックスペースは遠いので極力打ちたくない。。。ってことで、いくつショートカットをメモしておく・Ctrl+m 文字確定、改行、てかほとんどEnter代わり・Ctrl+h 文字削除・Ctrl+c,Ctrl+[ 挿入モード解除。・Ctrl+^ 日本語入力ON/OFF。       ただ日本語入力の切り替えは普通に切り替えキーを押したほうがいいような気が
 </description>
<content:encoded>
<![CDATA[ エディタで文章やプログラムを書いているときに一番嫌なのがホームポジションを<br />乱されることだ。<br />個人的にEnterやバックスペースは遠いので極力打ちたくない。。。<br />ってことで、いくつショートカットをメモしておく<br /><br />・Ctrl+m 文字確定、改行、てかほとんどEnter代わり<br />・Ctrl+h 文字削除<br />・Ctrl+c,Ctrl+[ 挿入モード解除。<br />・Ctrl+^ 日本語入力ON/OFF。<br />       <br />ただ日本語入力の切り替えは普通に切り替えキーを押したほうがいいような気がするので<br />独自で割り当てたほうがいい気がする。<br />_vimrcを開いて適当なところに以下を追加<br /><pre>inoremap &lt;silent&gt; &lt;C-j&gt; &lt;C-^&gt;</pre><br />とりあえずCtrl+jに割り振ってみた。<br />一応Ctrl+jは挿入モードで改行みたいな動作するけど、Ctrl+mがあるからいらいない<br />ということで割り振った。<br /><br />あと挿入モードでノーマル時のhjklで上下左右移動したいけど、<br />割り当てる場合、Ctrl+hは削除でよく使うからな。。。<br />やっぱりある程度独自の設定にしないと気分よく使えないのかも。<br />挿入モードで矢印を割り当てる設定<br /><pre>inoremap &lt;C-j&gt; &lt;DOWN&gt;<br />inoremap &lt;C-k&gt; &lt;UP&gt;<br />inoremap &lt;C-l&gt; &lt;RIGHT&gt;<br />inoremap &lt;C-h&gt; &lt;LEFT&gt;</pre><br /><br />追記：<br />結局vimrcは以下のようにした<br /><pre>"キーマップ<br />"入力モード<br />inoremap &lt;C-a&gt; &lt;Home&gt;<br />inoremap &lt;C-e&gt; &lt;End&gt;<br />inoremap &lt;C-d&gt; &lt;DEL&gt;<br />inoremap &lt;C-b&gt; &lt;BS&gt;<br />inoremap &lt;C-q&gt; &lt;C-^&gt;<br />inoremap &lt;C-h&gt; &lt;Left&gt;<br />inoremap &lt;C-j&gt; &lt;Down&gt;<br />inoremap &lt;C-k&gt; &lt;Up&gt;<br />inoremap &lt;C-l&gt; &lt;Right&gt;<br />"日付挿入<br />inoremap &lt;C-d&gt;d &lt;C-R&gt;=strftime('%Y/%m/%d (%a)')&lt;CR&gt;<br />"括弧入力補助<br />inoremap { {}&lt;LEFT&gt;<br />inoremap [ []&lt;LEFT&gt;<br />inoremap ( ()&lt;LEFT&gt;<br />inoremap " ""&lt;LEFT&gt;<br />inoremap ' ''&lt;LEFT&gt;<br />inoremap &lt; &lt;&gt;&lt;LEFT&gt;<br /><br />"コマンドモード<br />cnoremap &lt;C-a&gt; &lt;Home&gt;<br />cnoremap &lt;C-e&gt; &lt;End&gt;<br />cnoremap &lt;C-d&gt; &lt;DEL&gt;<br />cnoremap &lt;C-b&gt; &lt;BS&gt;<br />cnoremap &lt;C-q&gt; &lt;C-^&gt;<br />cnoremap &lt;C-h&gt; &lt;Left&gt;<br />cnoremap &lt;C-j&gt; &lt;Down&gt;<br />cnoremap &lt;C-k&gt; &lt;Up&gt;<br />cnoremap &lt;C-l&gt; &lt;Right&gt;</pre> ]]>
</content:encoded>
<dc:subject>vi</dc:subject>
<dc:date>2009-08-02T20:03:47+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-310.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-310.html</link>
<title>書評 - 女たちのジハード</title>
<description> 5人のOLの五者五様の物語。一見どこにでもありそうな題材だけど、読み始めたらとまらない、かっぱえびせんタイプだ。みんな仕事や恋愛そして結婚に悩み苦しみ、一喜一憂しながら、小気味よくストーリーが進んでいくのだが、読み終わったあとの爽快感がはんぱない。読む前は女たちのどろどろな世界を想像していたのだけど、読み終わって見ると、腫れ物がおちたようなすっきり感がある。老若男女問わず読んで欲しい。でもどちらかと
 </description>
<content:encoded>
<![CDATA[ <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4087471489/zavieblog7fc2-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51KN48ER8FL._SL160_.jpg" alt="女たちのジハード (集英社文庫)" style="border: none;" align="right"/></a>5人のOLの五者五様の物語。<br />一見どこにでもありそうな題材だけど、<br />読み始めたらとまらない、かっぱえびせんタイプだ。<br />みんな仕事や恋愛そして結婚に悩み苦しみ、一喜一憂しながら、<br />小気味よくストーリーが進んでいくのだが、読み終わったあとの爽快感がはんぱない。<br />読む前は女たちのどろどろな世界を想像していたのだけど、<br />読み終わって見ると、腫れ物がおちたようなすっきり感がある。<br />老若男女問わず読んで欲しい。でもどちらかというと20代から30前半くらいの人が<br />読むといいかも。<br /><br />実は著者の篠田節子さんの本は初めて読んだのだけど、<br />めっちゃ面白かったので、アマゾンで早速別のを注文した。<br />ちなみに弟117回の直木賞受賞作品。<br />ほんとオススメです。 ]]>
</content:encoded>
<dc:subject>書評</dc:subject>
<dc:date>2009-07-29T00:15:37+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-309.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-309.html</link>
<title>右のテーブルの行を左のテーブルにコピーする - javascript</title>
<description> javascriptで右のテーブルの行のデータをコピーして左のテーブルにコピーするのをやってみた。たいして難しいことはしてないけど忘れるのでメモ。とりあえずサンプル。firefox3.X、IE6では動くはず。ちなみに動かすとわかるけど、同じカナのものはひとつしか追加できないよう重複チェックしてる。ソース&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;scrolltest&amp;lt;/title&amp;gt;&amp;lt;style&amp;gt;&amp;lt;/style&amp;gt;&amp;lt;script language=&quot;javascript
 </description>
<content:encoded>
<![CDATA[ javascriptで右のテーブルの行のデータをコピーして左のテーブルにコピーするのを<br />やってみた。たいして難しいことはしてないけど忘れるのでメモ。<br /><br />とりあえず<a href="http://blog-imgs-19.fc2.com/z/a/v/zavieru/moveDataTable.html" target="_blank" title="サンプル">サンプル</a>。<br />firefox3.X、IE6では動くはず。<br />ちなみに動かすとわかるけど、同じカナのものはひとつしか追加できないよう<br />重複チェックしてる。<br /><br />ソース<br /><pre><br />&lt;html&gt;<br />&lt;head&gt;&lt;title&gt;scrolltest&lt;/title&gt;<br />&lt;style&gt;<br />&lt;/style&gt;<br />&lt;script language="javascript"&gt;<br />function addRow() {<br />    var rTable= document.getElementById('rightTable');<br />    var lBody= document.getElementById('leftBody');<br />    var rChecks = document.getElementsByName('example');<br />    var chkCnt = rChecks.length;<br />    for(var i = 0; i &lt; chkCnt; i++){<br />        chk = rChecks[i];<br />        if(chk.checked){<br />            var wamei = rTable.rows[i].cells[1];<br />            if(chkUniqueLeftTable(wamei.innerHTML)){<br />                var lang = rTable.rows[i].cells[2];<br />                var tr = document.createElement('tr');<br />                var delTd = document.createElement('td');<br />                var delBtn = document.createElement('input');<br />                delBtn.type="button";<br />                delBtn.value="削除";<br />                delBtn.onclick=function(){return delRow(this)};<br />                delTd.appendChild(delBtn);<br />                delTd.style.width = 50;<br />                tr.appendChild(delTd);<br />                <br />                var waTd = document.createElement('td');<br />                waTd.style.width = 150;<br />                waTd.innerHTML = wamei.innerHTML;<br />                waTd.name = "wamei";<br />                tr.appendChild(waTd);<br />    <br />                var langTd = document.createElement('td');<br />                langTd.style.width = 100;<br />                langTd.innerHTML = lang.innerHTML;<br />                tr.appendChild(langTd);<br />    <br />                lBody.appendChild(tr);<br /><br />            }<br />        }<br />    }<br />}<br /><br />function delRow(e){<br />    var tr = e.parentNode.parentNode;<br />    var tbod = tr.parentNode;<br />    tbod.deleteRow(tr.sectionRowIndex);<br />}<br /><br />function chkUniqueLeftTable(wamei){<br />    var lTable= document.getElementById('leftTable');<br />    var tcnt = lTable.rows.length;<br />    for(var j = 0; j &lt; tcnt; j++){<br />        var waTd = lTable.rows[j].cells[1];<br />        var wa = waTd.innerHTML;<br />        if(wamei == wa){<br />            return false;<br />        }<br />    }<br />    return true;<br />}<br />&lt;/script&gt; <br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;table&gt;<br />        &lt;tr&gt;<br />            &lt;td&gt;<br />                &lt;table border="1" cellpadding="4" cellspacing="0" style="border-bottom-width:0px"&gt;<br />				&lt;th width="50"&gt;&nbsp;&lt;/th&gt;<br />				&lt;th width="150" align="center"&gt;カナ&lt;/th&gt;<br />				&lt;th width="100" align="center"&gt;英語&lt;/th&gt;<br />                &lt;/table&gt;<br />                &lt;div style="width:350px;height:158px;overflow-x:hidden;overflow-y:scroll;"&gt;<br />                    &lt;table id="leftTable" border="1" cellpadding="4" cellspacing="0"&gt;<br />                        &lt;tbody id="leftBody"&gt;<br />                        &lt;/tbody&gt;<br />                    &lt;/table&gt;<br />                &lt;/div&gt;<br />            &lt;/td&gt;<br />            &lt;td&gt;<br />                &lt;input type="button" value="&lt;&lt;追加" onclick="addRow()"&gt;&lt;br&gt;<br />            &lt;/td&gt;<br />            &lt;td&gt;<br />                &lt;table border="1" cellpadding="4" cellspacing="0" style="border-bottom-width:0px"&gt;<br />				&lt;th width="30"&gt;&nbsp;&lt;/th&gt;<br />				&lt;th width="150" align="center"&gt;カナ&lt;/th&gt;<br />				&lt;th width="100" align="center"&gt;英語&lt;/th&gt;<br />                &lt;/table&gt;<br />                &lt;div style="width:330px;height:158px;overflow-x:hidden;overflow-y:scroll;"&gt;<br />                &lt;table id="rightTable" border="1" cellpadding="4" cellspacing="0"&gt;<br />                    &lt;tbody id="rightBody"&gt;<br />                        &lt;tr&gt;<br />						&lt;td width="30"&gt;&lt;input type="checkbox" name="example" &gt;&lt;/td&gt;<br />						&lt;td width="150"&gt;ゼロ&lt;/td&gt<br />						;&lt;td width="100"&gt;zero&lt;/td&gt;<br />                        &lt;/tr&gt;<br />                        &lt;tr&gt;<br />						&lt;td&gt;&lt;input type="checkbox" name="example" &gt;&lt;/td&gt;<br />						&lt;td&gt;イチ&lt;/td&gt;<br />						&lt;td&gt;one&lt;/td&gt;<br />                        &lt;/tr&gt;<br />                        &lt;tr&gt;<br />						&lt;td&gt;&lt;input type="checkbox" name="example" &gt;&lt;/td&gt;<br />						&lt;td&gt;二&lt;/td&gt;<br />						&lt;td&gt;two&lt;/td&gt;<br />                        &lt;/tr&gt;<br />                        &lt;tr&gt;<br />						&lt;td&gt;&lt;input type="checkbox" name="example" &gt;&lt;/td&gt;<br />						&lt;td&gt;サン&lt;/td&gt;<br />						&lt;td&gt;three&lt;/td&gt;<br />                        &lt;/tr&gt;<br />                        &lt;tr&gt;<br />						&lt;td&gt;&lt;input type="checkbox" name="example" &gt;&lt;/td&gt;<br />						&lt;td&gt;シ&lt;/td&gt;<br />						&lt;td&gt;four&lt;/td&gt;<br />                        &lt;/tr&gt;<br />                        &lt;tr&gt;<br />						&lt;td&gt;&lt;input type="checkbox" name="example" &gt;&lt;/td&gt;<br />						&lt;td&gt;ゴ&lt;/td&gt;<br />						&lt;td&gt;five&lt;/td&gt;<br />                        &lt;/tr&gt;<br />                        &lt;tr&gt;<br />						&lt;td&gt;&lt;input type="checkbox" name="example" &gt;&lt;/td&gt;<br />						&lt;td&gt;ロク&lt;/td&gt;<br />						&lt;td&gt;six&lt;/td&gt;<br />                        &lt;/tr&gt;<br />                        &lt;tr&gt;<br />						&lt;td&gt;&lt;input type="checkbox" name="example" &gt;&lt;/td&gt;<br />						&lt;td&gt;ナナ&lt;/td&gt;<br />						&lt;td&gt;seven&lt;/td&gt;<br />                        &lt;/tr&gt;<br />                        &lt;tr&gt;<br />						&lt;td&gt;&lt;input type="checkbox" name="example" &gt;&lt;/td&gt;<br />						&lt;td&gt;ハチ&lt;/td&gt;<br />						&lt;td&gt;eight&lt;/td&gt;<br />                        &lt;/tr&gt;<br />                        &lt;tr&gt;<br />						&lt;td&gt;&lt;input type="checkbox" name="example" &gt;&lt;/td&gt;<br />						&lt;td&gt;キュウ&lt;/td&gt;<br />						&lt;td&gt;nine&lt;/td&gt;<br />                        &lt;/tr&gt;<br />                    &lt;/tbody&gt;<br />                &lt;/table&gt;<br />                &lt;/div&gt;<br />            &lt;/td&gt;<br />        &lt;/tr&gt;<br />&lt;/table&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></pre><br /> ]]>
</content:encoded>
<dc:subject>javascript</dc:subject>
<dc:date>2009-07-28T23:25:08+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-308.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-308.html</link>
<title>設定メモ - Apache2.2とPerl5.10でCGI - WindowsXP </title>
<description> Apacheインストールhttp://httpd.apache.org/download.cgi上記よりダウンロードして、インストール。基本次へ連打。Perlインストールhttp://strawberryperl.com/上記よりダウンロードしてインストール。基本次へ連打。これでインストールすると、Perlだけでなく、gccの環境やdmakeも入るらしい。CGIの設定はじめ、Apacheのmod_perlを使おうと思っていたのだが、Perl5.10は対応していないようなので、CGIにした。１．一番簡単な方法
 </description>
<content:encoded>
<![CDATA[ <h3>Apacheインストール</h3><br /><a href="http://httpd.apache.org/download.cgi" target="_blank" title="http://httpd.apache.org/download.cgi">http://httpd.apache.org/download.cgi</a><br />上記よりダウンロードして、インストール。基本次へ連打。<br /><br /><h3>Perlインストール</h3><br /><a href="http://strawberryperl.com/" target="_blank" title="http://strawberryperl.com/">http://strawberryperl.com/</a><br />上記よりダウンロードしてインストール。基本次へ連打。<br />これでインストールすると、Perlだけでなく、gccの環境やdmakeも入るらしい。<br /><br /><h3>CGIの設定</h3><br />はじめ、Apacheのmod_perlを使おうと思っていたのだが、Perl5.10は対応していないようなので、<br />CGIにした。<br /><br />１．一番簡単な方法<br />httpd.confを開いて<br /><pre>ScriptAlias /cgi-bin/ "C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/"</pre>とCGIのディレクトリを指定すれば、<br />「C:/Program Files/Apache Software Foundation/Apache2.2/cgi-bin/」に置かれたファイルは、<br />CGIと認識され実行される。<br />ブラウザからは<pre>http://localhost/cgi-bin/ファイル名</pre>で実行できる。<br /><br />２．任意のフォルダでCGIを実行する場合<br />1)UserDirのモジュールを読み込む<br />httpd.confを開いて、<br /><pre>LoadModule userdir_module modules/mod_userdir.so</pre>のコメントをはずす<br /><pre>Include conf/extra/httpd-userdir.conf</pre>のコメントをはずす<br /><br />2)UserDirの設定<br />Apacheホーム/conf/extra/httpd-userdir.confを開いて、<br /><pre>UserDir "C:/src/perl/*/web"<br /><br />&lt;Directory "C:/src/perl/*/web"&gt;<br />    AllowOverride All<br />    Options ExecCGI Indexes FollowSymLinks <br />    Order allow,deny<br />    Allow from all<br />&lt;/Directory&gt;</pre>と設定する。<br />この設定をした後、C:/src/perl/fooとディレクトリを作成して、<br />さらにC:/src/perl/foo/webを作成すれば、<br />ブラウザからhttp://localhost/~fooでアクセスすると、C:/src/perl/foo/web以下が参照される。<br /><br />3)CGIの拡張子の設定<br />どのファイルの場合CGIとして実行するのかの設定を行う<br />httpd.confを開いて、<br /><pre>AddHandler cgi-script .cgi</pre>のコメントをはずす。<br />拡張子を増やしたい場合は以下のように半角スペースを空けて指定する<br /><pre>AddHandler cgi-script .cgi .pl</pre><br /><br />終わり ]]>
</content:encoded>
<dc:subject>apache</dc:subject>
<dc:date>2009-06-14T13:18:39+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-307.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-307.html</link>
<title>書評 - 600万人の女性に支持されるクックパッドというビジネス</title>
<description> 僕は今のインターネットビジネスの一番のポイントは、いかにリアルと結びつけることができるかだと思っている。結局今の人間はリアルでしか生きることはできないので、ネットはリアルを充実させるための手段でしかない。この手段を徹底的に利用し、リアルを充実させようとしているのが、クックパッドである。クックパッドは、ユーザが料理のレシピを載せることができ、そのレシピを検索できるっていう単純サイトだけど、個人的にク
 </description>
<content:encoded>
<![CDATA[ <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4827550719/zavieblog7fc2-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41JCp%2BEGTrL._SL160_.jpg" alt="600万人の女性に支持されるクックパッドというビジネス (角川SSC新書)" style="border: none; " align="right" /></a>僕は今のインターネットビジネスの一番のポイントは、<br />いかにリアルと結びつけることができるかだと思っている。<br />結局今の人間はリアルでしか生きることはできないので、<br />ネットはリアルを充実させるための手段でしかない。<br />この手段を徹底的に利用し、リアルを充実させようとしているのが、<br />クックパッドである。<br /><br />クックパッドは、ユーザが料理のレシピを載せることができ、<br />そのレシピを検索できるっていう単純サイトだけど、<br />個人的にクックパッドほどネットとリアルを結び付けてるサイトはないのではないかと思う。<br /><br />最近読んだビジネス書では一番面白かった。<br />WEBでビジネスをやりたいと思っている人にはオススメの一冊。<br /><br /><a target="_blank" href="http://cookpad.com/"><img src="http://cookpad.com/images/large_logo.gif" alt="cookpad.logo"></a><br /> ]]>
</content:encoded>
<dc:subject>書評</dc:subject>
<dc:date>2009-06-04T01:30:39+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-306.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-306.html</link>
<title>php5.2インストールメモ - windowsXP</title>
<description> ハードディスクを変えてOSを入れ替えたので再度PHPをインストールする。以下設定メモ。PHPをダウンロードhttp://www.php.net/downloads.phpを開くWindows BinariesのPHP 5.2.9-2 zip packageをクリックすると以下が開くjp.php.netをクリックしてダウンロードPHPをインストールダウンロードしたZIPを入れたいディレクトリに解凍しておしまい。ApacheにPHPのモジュールを追加ApacheにPHPを実行させるためにhttpd.confにPHPのモジュー
 </description>
<content:encoded>
<![CDATA[ ハードディスクを変えてOSを入れ替えたので再度PHPをインストールする。<br />以下設定メモ。<br /><br /><h3>PHPをダウンロード</h3><br /><a href="http://www.php.net/downloads.php" target="_blank" title="http://www.php.net/downloads.php">http://www.php.net/downloads.php</a>を開く<br /><a href="http://blog-imgs-26.fc2.com/z/a/v/zavieru/Image4.jpg" target="_blank"><img src="http://blog-imgs-26.fc2.com/z/a/v/zavieru/Image4.jpg" alt="Image5.jpg" border="0" width="550" height="400" /></a><br />Windows BinariesのPHP 5.2.9-2 zip packageをクリックすると以下が開く<br /><a href="http://blog-imgs-26.fc2.com/z/a/v/zavieru/Image4.jpg" target="_blank"><img src="http://blog-imgs-26.fc2.com/z/a/v/zavieru/Image4.jpg" alt="Image4.jpg" border="0" width="550" height="400" /></a><br />jp.php.netをクリックしてダウンロード<br /><br /><h3>PHPをインストール</h3><br />ダウンロードしたZIPを入れたいディレクトリに解凍しておしまい。<br /><br /><h3>ApacheにPHPのモジュールを追加</h3><br />ApacheにPHPを実行させるためにhttpd.confにPHPのモジュールを設定する。<br /><br />１．httpd.confを開く<br />Apacheをインストールしたディレクトリのconfのhttpd.conを開く<br /><br />２．LoadModuleの最後にPHPのモジュールを追加<br /><pre># Dynamic Shared Object (DSO) Support<br />#<br /># To be able to use the functionality of a module which was built as a DSO you<br /># have to place corresponding `LoadModule' lines at this location so the<br /># directives contained in it are actually available _before_ they are used.<br /># Statically compiled modules (those listed by `httpd -l') do not need<br /># to be loaded here.<br />#<br /># Example:<br /># LoadModule foo_module modules/mod_foo.so<br />#<br />LoadModule actions_module modules/mod_actions.so<br />LoadModule alias_module modules/mod_alias.so<br />LoadModule asis_module modules/mod_asis.so<br />LoadModule auth_basic_module modules/mod_auth_basic.so</pre><br />上記のような記述があるので、最後あたりに以下を追加<br /><pre>LoadModule php5_module c:/bin/php/php5apache2_2.dll</pre><br />「c:/bin/php」の部分はPHPをインストールしたディレクトリを指定する。<br />またApacheのバージョンが2.0の場合は「php5apache2.dll」を指定する。<br /><br /><h3>ApacheにPHPファイルを認識させるために拡張子を登録する</h3><br />Apacheにこの拡張子はPHPのファイルですよ、と認識させるために拡張子を登録する<br />１．httpd.confを開く<br /><br />２．AddTypeの最後にPHPの拡張子を追加<br /><pre># AddType allows you to add to or override the MIME configuration<br /># file specified in TypesConfig for specific file types.<br />#<br />#AddType application/x-gzip .tgz<br />#<br /># AddEncoding allows you to have certain browsers uncompress<br /># information on the fly. Note: Not all browsers support this.<br />#<br />#AddEncoding x-compress .Z<br />#AddEncoding x-gzip .gz .tgz<br />#<br /># If the AddEncoding directives above are commented-out, then you<br /># probably should define those extensions to indicate media types:<br />#<br />AddType application/x-compress .Z<br />AddType application/x-gzip .gz .tgz</pre><br />AddTypeで検索すると上記のような部分があるので以下を追加<br /><pre>AddType application/x-httpd-php .php<br />AddType application/x-httpd-php-source .phps</pre><br />２行目のx-httpd-php-sourceの設定はphpのソースとしてブラウザに表示するための設定。<br />上記の場合だと拡張子がphpsのファイルの場合は中身がそのままブラウザに表示される。<br />表示する必要がない場合は設定する必要はない。<br /><br /><h3>PHPの設定ファイル、php.iniを作成</h3><br />PHPをインストールしたホームディレクトリ直下に、「php.ini-dist」というファイルがあるので、<br />これを「php.ini」に名前を変更する。終わり。<br /><br /><h3>PHPのiniファイルをApacheに認識させる</h3><br />PHPの設定ファイルphp.iniファイルをApacheに認識させる設定を行う。<br /><br />httpd.confを開いて、先ほど追加したLoadModuleの後あたりに以下を追加<br /><pre>PHPIniDir "c:/bin/php"</pre><br />c:/bin/phpの部分はPHPをインストールしたディレクトリ<br /><br />とりあえず、ここまでの設定で一応ApacheからPHPを実行することができる<br />以下からは個別設定<br /><br /><h3>php.iniの設定変更</h3><br />１．グローバル変数の自動生成をオフにする<br />register_globalsを探ししてオフになっていなければ<pre>register_globals = Off</pre>にする<br />オンになっているとフォームの値を、$フォーム名で取得できるため楽だけど、セキュリティ的に<br />よくないらしいのでオフにする<br /><br />２．フォームの値の自動変換をオフにする<br />magic_quotes_gpcを探しオンになっていたら、<pre>register_globals = Off</pre>にする<br />オンになっているとフォームから取得したデータに「'」「"」などがあると<br />勝手に「\'」「\"」に変換してしまう<br /><br />３．拡張モジュールの追加<br />文字列を扱う関数のモジュールを使用するため拡張モジュールを追加する<br />まず、拡張するモジュールがおいてあるディレクトリを指定する<pre>extension_dir = "./"</pre>を<pre>extension_dir = "C:/bin/php/ext"</pre>に変更する<br /><pre>:extension=php_mbstring.dll</pre>のコメントアウトをはずすして<pre>extension=php_mbstring.dll</pre>に変更する。<br /><br /><h3>PEARライブラリインストール</h3><br />PHPの定番的なライブラリPEARをインストールする。<br />１．go-pear.batを実行する<br />PHPホーム直下にあるgo-pear.batをEnterで実行する<br /><a href="http://blog-imgs-26.fc2.com/z/a/v/zavieru/pear_install_1.jpg" target="_blank"><img src="http://blog-imgs-26.fc2.com/z/a/v/zavieru/pear_install_1.jpg" alt="pear_install_1.jpg" border="0" width="530" height="400" /></a><br />何も入力せずEnter<br /><a href="http://blog-imgs-26.fc2.com/z/a/v/zavieru/pear_install_2.jpg" target="_blank"><img src="http://blog-imgs-26.fc2.com/z/a/v/zavieru/pear_install_2.jpg" alt="pear_install_2.jpg" border="0" width="530" height="400" /></a><br />何も入力せずEnter<br /><a href="http://blog-imgs-26.fc2.com/z/a/v/zavieru/pear_install_3.jpg" target="_blank"><img src="http://blog-imgs-26.fc2.com/z/a/v/zavieru/pear_install_3.jpg" alt="pear_install_3.jpg" border="0" width="530" height="400" /></a><br />PEARを使用できるように、php.iniを自動で書き換えていいかどうかなので、Yを入力しEnter<br /><a href="http://blog-imgs-26.fc2.com/z/a/v/zavieru/pear_install_4.jpg" target="_blank"><img src="http://blog-imgs-26.fc2.com/z/a/v/zavieru/pear_install_4.jpg" alt="pear_install_4.jpg" border="0" width="530" height="400" /></a><br />何も入力せずEnter<br /><a href="http://blog-imgs-26.fc2.com/z/a/v/zavieru/pear_install_5.jpg" target="_blank"><img src="http://blog-imgs-26.fc2.com/z/a/v/zavieru/pear_install_5.jpg" alt="pear_install_5.jpg" border="0" width="530" height="400" /></a><br />何も入力せずEnter<br /><br />２．PEARを環境変数に登録<br />PHPホーム直下に作成された「PEAR_ENV.reg」をダブルクリックして実行する<br /><br />以上でPHPのインストール完了<br />以下動作確認<br /><h3>ApacheからPHPを実行できるか確認</h3><br />以下のファイルを作成<br /><pre>&lt;html&gt;<br />&lt;head&lt;&gt;title&gt;PHP TEST&lt;/title&lt;&gt;/head&gt;<br />&lt;body&gt;<br />&lt;?php phpinfo(); ?&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</pre><br />ファイル名はphpinfo.phpとかにしてApacheのドキュメントルートに置く<br />で「http://localhost/phpinfo.php」をブラウザから開く。<br />以下が表示されれば成功<br /><a href="http://blog-imgs-26.fc2.com/z/a/v/zavieru/php_comfirm.jpg" target="_blank"><img src="http://blog-imgs-26.fc2.com/z/a/v/zavieru/php_comfirm.jpg" alt="php_comfirm.jpg" border="0" width="550" height="380" /></a><br /><br /><h3>PEARがインストールされているか確認</h3><br />１．PEARの情報を表示するライブラリをインストール<br />デフォルトでphpinfoみたいなものがインストールされていないので別途インストール<br />コマンドプロンプトを起動して、PHPのホームディレクトリにカレントを移動する。<br /><pre>pear install pear_info</pre>と入力してEnter。<br />エラーが出た場合は環境変数の設定がおかしいと思われるのでPEARの環境変数を修正する<br /><br />２．ブラウザからPEAR情報を確認<br />以下のファイルを作成<br /><pre>&lt;?php<br />require_once "PEAR/Info.php";<br /><br />$info =& new PEAR_Info();<br />$info->show();<br />?&gt;</pre><br />ファイル名はpearinfo.phpとかにしてApacheのドキュメントルートに置く<br />で「http://localhost/pearinfo.php」をブラウザから開く。<br />以下が表示されれば成功<br /><a href="http://blog-imgs-26.fc2.com/z/a/v/zavieru/pear_info.jpg" target="_blank"><img src="http://blog-imgs-26.fc2.com/z/a/v/zavieru/pear_info.jpg" alt="pear_info.jpg" border="0" width="550" height="380" /></a><br /><br />以上で動作確認終了 ]]>
</content:encoded>
<dc:subject>php</dc:subject>
<dc:date>2009-05-04T16:42:30+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-305.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-305.html</link>
<title>アルゴリズム - クイックソート - 再帰編</title>
<description> 数字などを並び替えするアルゴリズムにクイックソートがある。とても効率的でソートアルゴリズムの中でもトップクラスに早いらしいけど、完全に理解していなかったので、wikiを見ながら勉強してみた。とりあえず、wiki通りにJAVAで書いてみたpublic class QuickSort {	public static void main(String[] args) {		int[] a = {8,4,3,7,6,5,2,1};		QuickSort q = new QuickSort();		q.sort(a, 0, a.length - 1);		for (int k = 0, le
 </description>
<content:encoded>
<![CDATA[ 数字などを並び替えするアルゴリズムにクイックソートがある。<br />とても効率的でソートアルゴリズムの中でもトップクラスに早いらしいけど、<br />完全に理解していなかったので、<a href="http://ja.wikipedia.org/wiki/%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%BD%E3%83%BC%E3%83%88" target="_blank" title="wiki">wiki</a>を見ながら勉強してみた。<br /><br />とりあえず、wiki通りにJAVAで書いてみた<br /><pre><br />public class QuickSort {<br /><br />	public static void main(String[] args) {<br />		int[] a = {8,4,3,7,6,5,2,1};<br />		QuickSort q = new QuickSort();<br />		q.sort(a, 0, a.length - 1);<br />		for (int k = 0, len = a.length; k < len; k++) {<br />			System.out.print(k == 0 ? a[k] : "," + a[k]);<br />		}<br />	}<br /><br />	public void sort(int a[], int left, int right) {<br />		if (left < right) {<br />			int p = a[(left+right)/2];    //中央を軸とする<br />			int l = left - 1;<br />			int r = right + 1;<br />			int t;<br />			while (true) {<br />				while (a[++l] < p);   //軸より大きい値を左から探す<br />				while (a[--r] > p);   //軸より小さい値を右から探す<br />				if (l >= r)break;<br />				t = a[l];             //左と右の値を入れ替える。<br />				a[l] = a[r];<br />				a[r] = t;<br />			}<br />			sort(a, left, l - 1);<br />			sort(a, r + 1, right);<br />		}<br />	}<br />}<br /></pre><br /><h3>wikiにも説明があるけど、自分なりに説明してみる。</h3><br />①軸を決める<br />配列の中から、一つ適当に軸となる値を選ぶ。<br />プログラムで言うと<br /><pre>int p = a[(left+right)/2];</pre><br />＊軸は配列内の中央に位置しているものがベスト<br /><br />②左から順に軸より大きい値を探す<br />プログラムで言うと<br /><pre>while (a[++l] < p);</pre><br />の箇所whileで左から順に軸より大きい数を探し、あったら、ループ終了。<br /><br />③右から順に軸より小さい値を探す<br />プログラムで言うと<br /><pre>while (a[--r] > p);</pre><br />の箇所whileで右から順に軸より小さい数を探し、あったら、ループ終了。<br /><br />④値入れ替え<br />②で見つけた値と③で見つけた値の位置を入れ替える。<br />プログラムで言うと<br /><pre>t = a[l];      <br />a[l] = a[r];<br />a[r] = t;</pre><br />この入れ替えを繰り返すことで、左側は軸より小さい値となり<br />右側は軸より大きい値となる。<br /><br />ただし、lの値がrの値以上となるとループを抜ける<br />プログラムで言うと<br /><pre>if (l >= r)break;</pre><br /><br />⑤左側の部分を再帰的にソート<br />軸より小さな左側の部分を再帰的にソートする<br />プログラムで言うと<br /><pre>sort(a, left, l - 1);</pre><br /><br />⑥右側の部分を再帰的にソート<br />軸より大きな右側の部分を再帰的にソートする<br />プログラムで言うと<br /><pre>sort(a, r + 1, right);</pre><br /><br /><h3>具体的な流れ</h3><br />初期データ：{8,4,3,7,6,5,2,1}<br />１．軸を決める<br />一番始めの軸は、(0+7)/2=3.5→intなので3<br />で配列は0から始まるので、3の要素は「7」となる。<br />よって軸は「7」となる<br /><pre>8,4,3,<u>7</u>,6,5,2,1</pre><br /><br />２．左から順に軸より大きい値を探す<br /><pre>   <strong>8</strong>,4,3,<u>7</u>,6,5,2,1<br />→ l</pre><br />8が軸の7より大きい<br /><br />３．右から順に軸より小さい値を探す<br /><pre>  8,4,3,<u>7</u>,6,5,2,<strong>1</strong><br />                r ←</pre><br />1が7より小さい<br /><br />４．値入れ替え<br />lの値(0)はrの値(7)より小さいので、<br />２で見つけた8と３で見つけた1を入れ替える<br /><pre><span style="color:#FF0000">1</span>,4,3,<u>7</u>,6,5,2,<span style="color:#FF0000">8</span></pre><br /><br />５．再度左右から値を探し、入れ替え・・・を繰り返す。<br />lの値がrの値より小さいので、再度左から軸より大きい値、<br />右から軸より小さい値を探す。<br /><pre>  1,4,3,<u>7</u>,6,5,2,8<br />→      l<br />              r  ←</pre><br />左から探した大きい値は7(軸と同じ)、<br />右から探した小さい値は2となる。<br /><br />7と2を入れ替える<br /><pre>1,4,3,<span style="color:#FF0000">2</span>,6,5,<span style="color:#FF0000"><u>7</u></span>,8</pre><br /><br />まだlの値がrの値より小さいので、再度左から軸より大きい値、<br />右から軸より小さい値を探す。<br /><pre>  1,4,3,2,6,5,<u>7</u>,8<br />→            l<br />            r    ←</pre><br />左から探した大きい値は7(軸と同じ)、<br />右から探した小さい値は5となる。<br />しかし、lの値がrの値以上となってしまったため、ループは終了。<br /><br />６．左側の部分を再帰的にクイックソート<br />左側の部分は[1,4,3,2,6,5]となる<br />プログラムで言うとleftからl-1ということになる。<br />leftは0でl-1は5となるので、0～5の配列要素が対象となる。<br /><br /><pre>  左側部分  | 右側部分<br />1,4,3,2,6,5 | 7,8</pre><br /><br />で、左側の部分をまた１．に戻って、ソートを行う。<br /><br />７．右側の部分を再帰的にクイックソート<br />右側の部分は[7,8]となる<br />プログラムで言うとr+1からrightということになる。<br />r+1は6でrightは7となるので、7～8の配列要素が対象となる。<br /><br /><pre>  左側部分  | 右側部分<br />1,4,3,2,6,5 | 7,8</pre><br /><br />で、右側の部分をまた１．に戻って、ソートを行う。<br /><br />以上説明終了。<br />てかクイックソートは説明が難しいな・・・<br /> ]]>
</content:encoded>
<dc:subject>アルゴリズム</dc:subject>
<dc:date>2009-03-08T15:59:32+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-303.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-303.html</link>
<title>プログラマーとしての僕をレベルアップさせた一言</title>
<description> 時として、ある一言が人を変えてしまうことがある。少し大げさだけど、プログラマーとしての僕を1段レベルアップさせた言葉がある。あれは確か3年前の夏ころだった。プログラマ2年目であまりプログラムをさせてもらえずテストばかりさせられていた。あるとき凄腕プログラマーの方が作ったプログラムをテストしていた。その方に「僕にはこれを作れる気がしないっすよ」と言ったら、その方がこうおっしゃった。「ようはデータ構造な
 </description>
<content:encoded>
<![CDATA[ 時として、ある一言が人を変えてしまうことがある。<br />少し大げさだけど、プログラマーとしての僕を1段レベルアップさせた言葉がある。<br /><br />あれは確か3年前の夏ころだった。<br />プログラマ2年目であまりプログラムをさせてもらえずテストばかりさせられていた。<br />あるとき凄腕プログラマーの方が作ったプログラムをテストしていた。<br />その方に「僕にはこれを作れる気がしないっすよ」と言ったら、<br />その方がこうおっしゃった。<br /><br /><strong>「ようはデータ構造なんですよ」</strong><br /><br />これを聞いたとき頭を真上から打ち抜かれたような衝撃が走った。<br />たぶん他の人が聞いても「あたりまえじゃね？」程度だと思うが<br />言葉というのは、内容もさることながら、タイミングも重要だ。<br />僕の場合、これしかないというタイミングでこの言葉を言われた。<br /><br />結局プログラムでやることはデータを受け取って（入力）、そのデータを処理して（処理）、<br />処理結果のデータを出力する（出力）、の３つだ。<br />そう全てのプログラムの目的はデータなのだ。<br />あるデータが欲しいから人はせこせこと体を壊してまでプログラムを作る。<br />そしてデータはデータ構造によって、保持、管理される。<br />つまり、「<strong>ようはデータ構造</strong>」なのである。 ]]>
</content:encoded>
<dc:subject>開発</dc:subject>
<dc:date>2009-02-16T00:53:15+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-302.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-302.html</link>
<title>書評 - 人類は「宗教」に勝てるか</title>
<description> 長年宗教に関わってきた著者の、宗教に対する憂えがとても伝わってきたが、個人的には期待はずれの一冊。本書では宗教の実情などを紹介している。確かに著者にしか書けないことが満載で面白かったが、僕が期待していたのは、もっと宗教の核心に迫るようなことだ。例えば「なぜ人は宗教を信仰するのか？」などについて、著者の考えを聞きたかった。というかそこを知らずして「宗教」に勝てないのでは？と思うのだが。本書は僕のよう
 </description>
<content:encoded>
<![CDATA[ <a href="http://www.amazon.co.jp/exec/obidos/ASIN/4140910852/zavieblog7fc2-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41CRqhgqt%2BL._SL160_.jpg" alt="人類は「宗教」に勝てるか―一神教文明の終焉 (NHKブックス)" style="border: none;" align="right"/></a>長年宗教に関わってきた著者の、宗教に対する憂えが<br />とても伝わってきたが、個人的には期待はずれの一冊。<br /><br />本書では宗教の実情などを紹介している。<br />確かに著者にしか書けないことが満載で面白かったが、<br />僕が期待していたのは、もっと宗教の核心に迫るようなことだ。<br />例えば「なぜ人は宗教を信仰するのか？」などについて、<br />著者の考えを聞きたかった。<br />というかそこを知らずして「宗教」に勝てないのでは？と思うのだが。<br /><br />本書は僕のような無宗教の日本人が読むより、<br />宗教を信仰している人にこそ読んで欲しいが、<br />信仰している人は読まないだろうな。。。<br /><br /> ]]>
</content:encoded>
<dc:subject>書評</dc:subject>
<dc:date>2009-02-15T12:20:31+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-301.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-301.html</link>
<title>vi設定メモ</title>
<description> たいした設定してないけど、忘れるのでメモ&quot;背景 カラー設定:colorscheme darkblue&quot; 行番号表示set nu&quot;横スクロールset guioptions+=b&quot;ラップしないset nowrap&quot;バックアップとらないset nobk&quot;クリップボードset clipboard=unnamed
 </description>
<content:encoded>
<![CDATA[ たいした設定してないけど、忘れるのでメモ<br /><pre>"背景 カラー設定:<br />colorscheme darkblue<br />" 行番号表示<br />set nu<br />"横スクロール<br />set guioptions+=b<br />"ラップしない<br />set nowrap<br />"バックアップとらない<br />set nobk<br />"クリップボード<br />set clipboard=unnamed<br /></pre> ]]>
</content:encoded>
<dc:subject>vi</dc:subject>
<dc:date>2009-02-10T12:00:29+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-300.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-300.html</link>
<title>ソフトウェア工学の属人性の排除は間違っているのか？</title>
<description> 従来のソフトウェア工学が決定的に間違っている点 - kwatchの日記従来のソフトウェア工学は、属人性を排除して開発者の能力を均一化しようとしている。この点に置いて、従来のソフトウェア工学は決定的に間違っている。僕の考えの結論を始めに言っておく。ずばり、属人性の排除は間違っていない、である。なんで間違ってない？そもそも、学問というのは、ある目的を達成するために、知識を体系化していって、誰が見ても分かるよう
 </description>
<content:encoded>
<![CDATA[ <a href="http://d.hatena.ne.jp/kwatch/20090204/1233769288" target="_blank" title="従来のソフトウェア工学が決定的に間違っている点 - kwatchの日記">従来のソフトウェア工学が決定的に間違っている点 - kwatchの日記</a><br /><blockquote>従来のソフトウェア工学は、属人性を排除して開発者の能力を均一化しようとしている。この点に置いて、従来のソフトウェア工学は決定的に間違っている。</blockquote><br /><h3>僕の考えの結論を始めに言っておく。</h3><br />ずばり、<strong>属人性の排除は間違っていない</strong>、である。<br /><br /><h3>なんで間違ってない？</h3><br />そもそも、学問というのは、ある目的を達成するために、知識を体系化していって、<br />誰が見ても分かるようにしていく、ものだと僕は考えている。<br />つまり、前提条件からして属人性排除が備わっているのだ。<br />例えば、１＋１は3進以上は２である。これをある人は３である人が１００と言い出したら<br />学問は成り立たない。誰が見ても１＋１は２なのである。<br />ソフトウェア工学も同じである。ソフトウェア工学はソフトウェアを開発するために、<br />開発の手順や、運用の方法、人事の配置・・・などなどを体系化していくものだ。<br />属人性を排除し、体系化することにより、誰が見ても同じという共通認識が持て、<br />開発効率がよくなるのである。<br /><br />ここで一つ言っておきたいことがある。<br /><strong>属人性を排除するからといって、能力は均一化しない</strong><br />これはイコールではない。むしろ、属人性を排除して体系化することにより、<br />お互いの知識を共有することができ、お互いの能力は上がると僕は思っている。<br /><br />確かにプログラマーは作業効率に差がつきやすい職業ではある。<br />でも差がつくところの多くは技術力ではなく、作業の進め方やモチベーション管理であることのほうが<br />多いと思う。確かに高度の技術になればなるほど、技術差と作業効率の関連性は強くなる。<br />しかし、実際高度な技術を用したシステムというのはそれほど多くないと思う。<br /><blockquote>特にソフトウェア開発では高度でない仕事は自動化しやすいので、自動化できないような高度な仕事しか残りにくい。</blockquote>確かに、自動化できることはあるし、これからさらに自動化できることは増えていくだろう。<br />しかし、<strong>人間にとって高度でないからといって、システムで自動化できるわけではない。</strong><br />今のコンピュータで自動化できるのは入力された情報をあらかじめ決められた処理をして、<br />出力するのが限界だ。<br />なので、現段階では高度な技術を持っていない、プログラマーであってもやることはある。<br />ソフトウェア工学では、高度な技術ではないけど、システムで自動化できないところを、<br />体系化して誰がやっても同じようにしていくものではないだろうか。<br /> ]]>
</content:encoded>
<dc:subject>開発</dc:subject>
<dc:date>2009-02-07T10:28:43+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-299.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-299.html</link>
<title>べき乗アルゴリズム - 下位桁編</title>
<description> アルゴリズム - 同じ文字列のn回繰り返しをlog n回で作る方法 - 404 Blog Not Foundfunction (str, n){    var result = '';    for(n *= 1; n &gt; 0; n &gt;&gt;&gt;= 1, str += str) if (n &amp; 1) result += str;    return result;}通常、べき乗の計算はべき乗の数だけ掛け合わせて計算を行う。例えば24の場合、2×2×2×2となり、2を4つ掛け合わせる。この計算の仕方だとべき乗の数が増えれば増えただけ掛け合わせることになる。しかし、冒頭の
 </description>
<content:encoded>
<![CDATA[ <a href="http://blog.livedoor.jp/dankogai/archives/51172176.html" target="_blank" title="アルゴリズム - 同じ文字列のn回繰り返しをlog n回で作る方法 - 404 Blog Not Found">アルゴリズム - 同じ文字列のn回繰り返しをlog n回で作る方法 - 404 Blog Not Found</a><br /><blockquote><pre>function (str, n){<br />    var result = '';<br />    for(n *= 1; n > 0; n >>>= 1, str += str) if (n & 1) result += str;<br />    return result;<br />}</pre></blockquote><br />通常、べき乗の計算はべき乗の数だけ掛け合わせて計算を行う。<br />例えば2<sup>4</sup>の場合、2×2×2×2となり、2を4つ掛け合わせる。<br />この計算の仕方だとべき乗の数が増えれば増えただけ掛け合わせることになる。<br />しかし、冒頭のアルゴリズムを使用するとlog n回で済み、処理が早くなるようだ。<br />でも<a href="http://ja.wikipedia.org/wiki/%E5%86%AA%E4%B9%97#.E4.B8.8B.E4.BD.8D.E6.A1.81.E3.81.8B.E3.82.89.E8.A8.88.E7.AE.97.E3.81.99.E3.82.8B.E6.96.B9.E5.BC.8F" target="_blank" title="wikiのべき乗アルゴリズム">wikiのべき乗アルゴリズム</a>を見てもいまいち、何をやっているのかよくわからない。。。<br />とりあえず、wiki通りにjavaで書いてみた。<br /><pre>public long beki(long p, int n) {<br />	long v = 1;<br />	for(; n > 0; n >>>= 1){<br />		if((n & 1)==1){<br />			v*=p;	<br />		}<br />		p*=p;<br />	}<br />	return v;<br />}</pre><br />一応正常に動作するようだが、まだよくわかっていない、、、がなんとか説明してみることにする。<br /><h3>プログラムはとりあえず置いておいて、べき乗の性質から</h3><br />wikiにもあるがべき乗には、<br />(a<sup>x</sup>)<sup>2</sup> = a<sup>2x</sup><br />という性質がある。この性質が重要。<br />具体的な数字を当てはめると、<br />(2<sup>2</sup>)<sup>2</sup> = 2<sup>2*2</sup><br />となる。つまりこれは(2<sup>2</sup>)<sup>2</sup> = 2<sup>4</sup>ということである。<br />この考えで行くと<br />2<sup>8</sup> は ((2<sup>2</sup>)<sup>2</sup>)<sup>2</sup>となる。<br />実はこの時点で計算が大分減っていることに気づくと思う。<br />普通に計算すると2<sup>8</sup>は2×2×2×2×2×2×2×2と2を7回掛ける必要がある。<br />しかし、((2<sup>2</sup>)<sup>2</sup>)<sup>2</sup>とすると、まず、2<sup>2</sup>の計算をして4になり次に、4×4の計算をして16になり、<br />最後に16×16の計算をして256となり、3回の計算で済む。<br />なんと7回の計算が3回に減るのである。このアルゴリズムではこの特性を大いに利用する。<br /><h3>でこの性質をどうやって利用するの？</h3><br />とりあえず、単純なべき乗の計算の効率化はできた。<br />しかし、この計算を行うには、べき乗の値に4乗が含まれているか？<br />8乗が含まれているか？と分析しなければならない。<br />どういうことかというと、wikiと同じ、a<sup>43</sup>について考えてみる。<br />a<sup>43</sup> = a<sup>32+8+2+1</sup> = a<sup>32</sup>×a<sup>8</sup>×a<sup>2</sup>×a<sup>1</sup><br />と、43乗には32乗、8乗、2乗、1乗が含まれていることになる。<br />これをどうやって知るの？ということである。<br /><h3>ここで２進数登場</h3><br />べき乗を分析するのには2進数を使う。<br />wikiにもあるけど、とりあえず、1，2，4，8，16，32を2進数にしてみる。<br />10進→2進<br />1&#160;&#160;&#160;&#160;→1<br />2&#160;&#160;&#160;&#160;→10<br />4&#160;&#160;&#160;&#160;→100<br />8&#160;&#160;&#160;&#160;→1000<br />16&#160;&#160;&#160;→10000<br />32&#160;&#160;&#160;→100000<br />で、43を2進数にしてみる<br />43 → 101011<br />43の2進数の値をよく見ると、1，2，8，32が含まれていることが分かる。<br />まず、101011の一桁目が1、を表す、で二桁目が2を表す、で三桁目が4を表すが0であるので、<br />43には4は含まれていないことになる。で同様に、四桁目が8で、5桁目が16で0なので含まれず、<br />最後の五桁目が32にとなる。<br />そうつまり、2進数にすると、何が含まれているのかが分かるのである。<br />何が含まれているのかが分かれば効率的な計算方法を利用することができる。<br /><h3>でようやくここからプログラムの説明に戻る</h3><br /><pre>public long beki(long p, int n) {<br />	long v = 1;<br />	for(; n > 0; n >>>= 1){<br />		if((n & 1)==1){<br />			v*=p;	<br />		}<br />		p*=p;<br />	}<br />	return v;<br />}</pre>まず、for文の説明から。<br /><pre>for(; n > 0; n >>>= 1){</pre>これはべき乗nを右にシフトしていってnが0以下になるまで回り続けろということである。<br />例えば、べき乗が43の場合、2進数は101011となる。<br />この101011を右に1シフトすると、10101となる。さらにシフトすると、1010となり、次に101、10、1、そして最後に0となりfor文は終了する。<br />なぜ、このようなfor文にするかというと、先ほどのべき乗の分析が関係してくる。<br />べき乗の分析は2進数にして、ある桁が1かどうかで含まれているかどうかを判断している。<br />なのでfor文で一つずつ右にシフトし、一桁目が1かどうか、次のifで判断しているのである。<br />で1の場合は、べき乗の元の値を結果値に掛ける。<pre>v*=p;</pre>ただし、元の値pは元の値のままでなく、for文が回る度にべき乗となる。<pre>p*=p</pre>例えば、元の値が2で1回まわったら2×2で4になり、2回まわったら4×4で16になる。<br />何でこんなことをしているかというと、べき乗の性質と効率的計算を思い出して欲しい。<br />(a<sup>x</sup>)<sup>2</sup> = a<sup>2x</sup><br />である。<br />つまり、べき乗を2進数にして一桁目から分析していって、1だったら、その桁にふさわしい値を<br />結果に掛けていってるのである。<br />例えば元の値が2で3桁目が1の場合、3桁目にはfor文は2回まわっているので、<br />2×2で4、4×4で16となり、結果値に16を掛けるのである。<br /><br />以上、最後らへんはちょっと無理やりだったけど、眠いのでこれで終了。<br />てか、たったこれだけのプログラムを理解してまとめるのに半日もかかっちまったぜ。。。ふっ。 ]]>
</content:encoded>
<dc:subject>アルゴリズム</dc:subject>
<dc:date>2009-02-02T02:53:12+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
<item rdf:about="http://zavieru.blog77.fc2.com/blog-entry-298.html">
<link>http://zavieru.blog77.fc2.com/blog-entry-298.html</link>
<title>javascriptってこんな書き方できるんだ。すげぇ。</title>
<description> IT戦士：for 文と無名関数のイディオムfor (var i = 0, len = list.length; i &lt; len; i++) (function(node, i) {    var text = node.textContent;     node.onclick = function() { alert(text) };})(list[i], i)はじめ見たとき何だコレって思った。この記事ではパフォーマンスがどうとかいう話をしているけど、こんな書き方できるってことにビックリした。で自分なりにこれどういう意味なのか説明してみる。まずFor文for (var i 
 </description>
<content:encoded>
<![CDATA[ <a href="http://d.hatena.ne.jp/amachang/20090119/1232331329" target="_blank" title="IT戦士：for 文と無名関数のイディオム">IT戦士：for 文と無名関数のイディオム</a><br /><blockquote><pre>for (var i = 0, len = list.length; i < len; i++) (function(node, i) {<br />    var text = node.textContent; <br />    node.onclick = function() { alert(text) };<br />})(list[i], i)</pre></blockquote>はじめ見たとき何だコレって思った。<br />この記事ではパフォーマンスがどうとかいう話をしているけど、<br />こんな書き方できるってことにビックリした。<br /><br />で自分なりにこれどういう意味なのか説明してみる。<br /><h3>まずFor文</h3><br /><pre>for (var i = 0, len = list.length; i < len; i++)</pre>当たり前だけど、ここまでがFor文でiをlist内の要素の数だけ回す。<br /><h3>で、回しながらどんな処理するの？</h3><br />それは無名関数でこの部分<br /><pre>(function(node, i) {<br />    var text = node.textContent; <br />    node.onclick = function() { alert(text) };<br />})(list[i], i)</pre><br />最後についてる<br /><pre>(list[i], i)</pre>は無名関数に渡す引数<br /><br />以上短いながら説明終わり。<br />javascriptっておもしろい。とても柔軟な言語なんだな。 ]]>
</content:encoded>
<dc:subject>javascript</dc:subject>
<dc:date>2009-01-20T00:18:31+09:00</dc:date>
<dc:creator>島田圭二</dc:creator>
<dc:publisher>FC2-BLOG</dc:publisher>
</item>
</rdf:RDF>