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

<channel>
	<title>オープンソース研究室</title>
	<atom:link href="http://www.kdl.co.jp/open/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kdl.co.jp/open</link>
	<description>Just another サイト Kobe Digital Labo 神戸デジタル・ラボ site</description>
	<lastBuildDate>Thu, 18 Aug 2011 08:17:47 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>pythonでスクレイピング</title>
		<link>http://www.kdl.co.jp/open/2011/04/21/python/</link>
		<comments>http://www.kdl.co.jp/open/2011/04/21/python/#comments</comments>
		<pubDate>Thu, 21 Apr 2011 04:59:43 +0000</pubDate>
		<dc:creator>koyamamoto</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://203.211.225.138/open/2011/04/21/python/</guid>
		<description><![CDATA[rubyでスクレイピングしている記事が目に入ったので 突発的にpythonでスクレイピングする記事を書きたいと思います。 内容も同じことを目指したいと思います。 セットアップ～ブログ記入完了まで1時間30分しかありません &#8230; <a href="http://www.kdl.co.jp/open/2011/04/21/python/">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>rubyでスクレイピングしている記事が目に入ったので</p>
<p>突発的にpythonでスクレイピングする記事を書きたいと思います。</p>
<p>内容も同じことを目指したいと思います。</p>
<p>セットアップ～ブログ記入完了まで1時間30分しかありませんが始めます。</p>
<p>&nbsp;</p>
<p>まずこれを書いているマシンがセットアップしたてのためまっさらな環境です <img src='http://www.kdl.co.jp/open/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>まずpythonのインストールからはじめました。</p>
<p>　<a href="http://www.python.org/download/">http://www.python.org/download/</a></p>
<p>3.0系が出て時間がたちましたが、</p>
<p>GAEなどをはじめとしていまだに2.0系でないと対応できないものも多く</p>
<p>ここでは2.7.1を利用します。</p>
<p>Winではexeからインストールを行い、</p>
<p>環境変数PATHにインストールしたディレクトリを追加しました。</p>
<p>&nbsp;</p>
<p>次にあると便利なeasy_installを入れておきます。</p>
<p>今回ただスクレイピングするだけなら必要ありませんが</p>
<p>せっかくですし便利なので入れておきましょう。</p>
<p>　<a href="http://peak.telecommunity.com/dist/ez_setup.py">http://peak.telecommunity.com/dist/ez_setup.py</a></p>
<p>インストールの仕方はほかのサイトなどで詳しく解説されていますのでそちらも参照お願いします。</p>
<p>上のリンクからpythonファイルをダウンロードし、</p>
<p>　&gt; python ez_setup.py</p>
<p>と実行してやることでインストール完了です。</p>
<p>Winなので&#8221;C:\Python27\Scripts&#8221;のようにSriptsディレクトリをPATHに追加してください。</p>
<p>&nbsp;</p>
<p>easy_installが入ったのでこれを利用してBeautiful Soupをインストールします。</p>
<p>　&gt; easy_install beautifulsoup</p>
<p>これだけで完了です。簡単ですね、素敵ですね。</p>
<p>easy_installを入れた甲斐がありました。</p>
<p>&nbsp;</p>
<p>さてここまで出ようやく準備が整いましたので本題に入ります。</p>
<p>まずBeautiful Soupを使うためにimportします。</p>
<p>　&gt;&gt;&gt; from BeautifulSoup import BeautifulSoup</p>
<p>urllib2も利用しますのでこちらもインポートします。</p>
<p>　&gt;&gt;&gt; import urllib2</p>
<p>&nbsp;</p>
<p>さてそれではスクレイピングをはじめます。</p>
<p>まずスクレイピングするURLの指定とBeautifulSoupへの読み込みを行います。</p>
<p>　&gt;&gt;&gt; url = &#8220;<a href="http://www.kdl.co.jp/">http://www.kdl.co.jp/</a>&#8220;</p>
<p>　&gt;&gt;&gt; srcHtml = urllib2.urlopen(url).read()</p>
<p>　&gt;&gt;&gt; soup = BeautifulSoup(html)</p>
<p>これで下ごしらえは完了です。</p>
<p>変数soupにhtmlソースがいい感じに溶け込みました。</p>
<p>&nbsp;</p>
<p>さてこのスープからタグ&lt;a&gt;を抜き出してみます。</p>
<p>もっとも単純に抜き出す方法は</p>
<p>　&gt;&gt;&gt; soup(&#8220;a&#8221;)</p>
<p>とすることです。</p>
<p>画面上にずらずらと&lt;a&gt;~&lt;/a&gt;の部分が表示されたと思います。</p>
<p>改行くらい・・・という場合は</p>
<p>　&gt;&gt;&gt; for a in soup(&#8220;a&#8221;):<br />　&nbsp;&nbsp; &#8230;&nbsp;&nbsp; print a</p>
<p>のようにpythonの一般的な処理を行います。</p>
<p>タグは必要ないよ、大切なのは中身だよ、という場合には</p>
<p>　&gt;&gt;&gt; for a in soup(&#8220;a&#8221;):<br />　&nbsp;&nbsp; &#8230;&nbsp;&nbsp; print a.contents</p>
<p>を試してみてください。</p>
<p>&nbsp;</p>
<p>さて先ほどの</p>
<p>　&gt;&gt;&gt; soup(&#8220;a&#8221;)</p>
<p>は変数soupを使うと</p>
<p>　&gt;&gt;&gt; soup.findAll(&#8220;a&#8221;)</p>
<p>とも書けます。</p>
<p>findAllは第二引数以下にタグ内の要素を指定できます。</p>
<p>「ヘッダータブのaタグのみ抜き出し」ということは</p>
<p>divタグの要素id=&#8221;globalNav&#8221;がほしいということですので</p>
<p>　&gt;&gt;&gt; soup.findAll(&#8220;div&#8221;, id=&#8221;globalNav&#8221;)</p>
<p>とすることで取得できます。</p>
<p>このままではdivタグ全体が取れてきますので</p>
<p>　&gt;&gt;&gt; for divs in soup.findAll(&#8220;div&#8221;, id=&#8221;globalNav&#8221;):<br />　&nbsp;&nbsp;&#8230;&nbsp;&nbsp;&nbsp; divs.findAll(&#8220;a&#8221;)</p>
<p>とすることで目的の&lt;a&gt;~&lt;/a&gt;のみが取り出せましたね。</p>
<p>&nbsp;</p>
<p>最終的に</p>
<p>&gt;&gt;&gt; for divs in soup.findAll(&#8220;div&#8221;, id=&#8221;globalNav&#8221;):<br />&nbsp;&nbsp; &#8230;&nbsp;&nbsp; for aaa in divs.findAll(&#8220;a&#8221;):<br />&nbsp;&nbsp; &#8230;&nbsp;&nbsp;&nbsp;&nbsp; for a in aaa.contents:<br />&nbsp;&nbsp; &#8230;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print a<br />&nbsp;&nbsp; &#8230;<br />ホーム<br />ソリューション<br />事例紹介<br />会社概要<br />CSRへの取組み<br />採用情報</p>
<p>と中身だけ取り出すことができました。</p>
<p>（最後強引過ぎですかね・・・。先輩のpython使いに指導されそうです。。）</p>
<p>&#8212;&#8211;</p>
<p>from BeautifulSoup import BeautifulSoup</p>
<p>import urllib2</p>
<p>url = &#8220;<a href="http://www.kdl.co.jp/">http://www.kdl.co.jp/</a>&#8220;</p>
<p>srcHtml = urllib2.urlopen(url).read()</p>
<p>soup = BeautifulSoup(html)</p>
<p>for divs in soup.findAll(&#8220;div&#8221;, id=&#8221;globalNav&#8221;):<br />&nbsp;&nbsp;&nbsp; for aaa in divs.findAll(&#8220;a&#8221;):<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for a in aaa.contents:</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print a<br />&#8212;&#8211;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kdl.co.jp/open/2011/04/21/python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDFからテキストを抜き出すには</title>
		<link>http://www.kdl.co.jp/open/2011/04/14/pdf/</link>
		<comments>http://www.kdl.co.jp/open/2011/04/14/pdf/#comments</comments>
		<pubDate>Thu, 14 Apr 2011 04:59:38 +0000</pubDate>
		<dc:creator>S.M.</dc:creator>
				<category><![CDATA[パッケージ]]></category>
		<category><![CDATA[pdftotext]]></category>

		<guid isPermaLink="false">http://203.211.225.138/open/?p=243</guid>
		<description><![CDATA[今回はPDFからテキスト文を抜き出す方法についてです。 PDFからテキストを抜き出すにはpdftotextコマンドを使います。 通常インストールしたCentOSには入っていないので、yumからインストールします。 yum &#8230; <a href="http://www.kdl.co.jp/open/2011/04/14/pdf/">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div>今回はPDFからテキスト文を抜き出す方法についてです。</div>
<div></div>
<div>PDFからテキストを抜き出すにはpdftotextコマンドを使います。</div>
<div>通常インストールしたCentOSには入っていないので、yumからインストールします。</div>
<div></div>
<blockquote class="webkit-indent-blockquote"><div>
<pre>yum install poppler poppler-utils poppler-devel</pre>
</div>
<div>
<pre></pre>
</div>
<div>
<pre>==================================================================================================================================================================================================================</pre>
</div>
<div>
<pre> Package                                           Arch                                     Version                                                  Repository                                              Size</pre>
</div>
<div>
<pre>==================================================================================================================================================================================================================</pre>
</div>
<div>
<pre>Installing:</pre>
</div>
<div>
<pre> poppler                                           i386                                     0.5.4-4.4.el5_5.14                                       rhel-i386-server-5                                     3.0 M</pre>
</div>
<div>
<pre> poppler-devel                                     i386                                     0.5.4-4.4.el5_5.14                                       rhel-i386-server-5                                     592 k</pre>
</div>
<div>
<pre> poppler-utils                                     i386                                     0.5.4-4.4.el5_5.14                                       rhel-i386-server-5                                      73 k</pre>
</div>
<div>
<pre></pre>
</div>
<div>
<pre>Transaction Summary</pre>
</div>
<div>
<pre>==================================================================================================================================================================================================================</pre>
</div>
<div>
<pre>Install       3 Package(s)</pre>
</div>
<div>
<pre>Upgrade       0 Package(s)</pre>
</div>
<div>
<pre></pre>
</div>
<div>
<pre>Total download size: 3.7 M</pre>
</div>
</blockquote>
<div>
<pre></pre>
<pre>無事インストールが完了したらpdftotextコマンドが使えるようになっているはずです。</pre>
<pre></pre>
<pre>ここまで来たらあとは簡単。</pre>
<pre>pdftotextでテキスト化したいPDFを選択するだけです。</pre>
<pre>今回は弊社のプレスリリースから「セ<span class="Apple-style-span" style="font-family: 'Hiragino Kaku Gothic Pro', Osaka, 'ＭＳ Ｐゴシック', sans-serif;font-size: 12px;line-height: 19px">ルフオーダー用タブレットPCアプリを発表しました。」をテキスト化してみましょう。</span></pre>
<pre><span class="Apple-style-span" style="font-family: 'Hiragino Kaku Gothic Pro', Osaka, 'ＭＳ Ｐゴシック', sans-serif;font-size: 12px;line-height: 19px"></span></pre>
</div>
<p><span id="more-243"></span><br />
と、その前にPDFの情報を見てみましょう。
<div>PDFの情報を見るにはpdfinfoコマンドを実行します。</div>
<div></div>
<div><span class="mt-enclosure mt-enclosure-image"><img src="http://www.kdl.co.jp/assets_c/2011/04/pdfinfo-thumb-400x310-385.png" width="400" height="310" alt="pdfinfo.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" /></span></div>
<div>ご覧のとおり、ちゃんと情報が取れているようです。</div>
<div>お次は本題のPDFからテキスト文を抜き出してみます。</div>
<div></div>
<div>使用したPDFは下のもので。</div>
<div></div>
<div><span class="mt-enclosure mt-enclosure-image"><img src="http://www.kdl.co.jp/assets_c/2011/04/WS000002-thumb-400x295-388.jpg" width="400" height="295" alt="WS000002.JPG" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" /></span></div>
<div><span class="mt-enclosure mt-enclosure-image"><img src="http://www.kdl.co.jp/assets_c/2011/04/WS000003-thumb-400x295-391.jpg" width="400" height="295" alt="WS000003.JPG" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" /></span></div>
<div>pdftotextで抜き出した結果はこちら</div>
<div></div>
<blockquote class="webkit-indent-blockquote"><div>pdftotext -enc UTF-8 -layout -nopgbrk -q &#8216;/tmp/press_20110316.pdf&#8217; /tmp/hoge.txt</div>
<div>cat /tmp/hoge.txt</div>
<div></div>
</blockquote>
<div><span class="mt-enclosure mt-enclosure-image"><img src="http://www.kdl.co.jp/assets_c/2011/04/pdftotext-thumb-400x382-394.png" width="400" height="382" alt="pdftotext.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" /></span></div>
<div>一部インデントが崩れていたりしますが、文字化けもなく、</div>
<div>改行もPDFと同じ場所で改行されており、閲覧にも支障なさそうです。</div>
<div></div>
<div>今回、オプションは以下のものを使用しました。</div>
<div></div>
<div>enc：出力テキストのエンコード指定</div>
<div>layout：オリジナルレイアウトに近い状態で出力</div>
<div>nopgbrk：ページの間に改ページを入れない</div>
<div>q：各種メッセージを表示しない</div>
<div></div>
<div>この他にも変換開始/終了ページを指定できるf/lオプションなどいくつかオプションが用意されていますので、用途に合わせて使い分けるとよいでしょう。</div>
<div></div>
<div>wrote by S.M.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kdl.co.jp/open/2011/04/14/pdf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rubyでスクレイピング</title>
		<link>http://www.kdl.co.jp/open/2011/04/13/ruby/</link>
		<comments>http://www.kdl.co.jp/open/2011/04/13/ruby/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 05:55:39 +0000</pubDate>
		<dc:creator>S.M.</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://203.211.225.138/open/2011/04/13/ruby/</guid>
		<description><![CDATA[今回のネタはrubyを使ったスクレイピングについてです。 PHPとかでもできますが、敢えてrubyで挑戦してみました。 ということで、早速スクレイピングしてみたいと思います。 まずは弊社HP（http://www.kdl &#8230; <a href="http://www.kdl.co.jp/open/2011/04/13/ruby/">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>今回のネタはrubyを使ったスクレイピングについてです。
<div>PHPとかでもできますが、敢えてrubyで挑戦してみました。</div>
<div></div>
<div>ということで、早速スクレイピングしてみたいと思います。</div>
<div>まずは弊社HP（http://www.kdl.co.jp/）からaグのみを抜き出してみましょう。</div>
<div></div>
<div>検証した環境は以下の通り。</div>
<div>バージョンがちょっと古いですが、1.8系であれば最新版でも動くかと思います。</div>
<div></div>
<blockquote class="webkit-indent-blockquote"><div>ruby 1.8.5 (2006-08-25) [i386-linux]</div>
<div>ruby-gem 1.3.5</div>
<div>nokogiri 1.4.4</div>
</blockquote>
<div></div>
<div>ソースは以下のとおり。</div>
<div></div>
<div>■ sample.rb</div>
<div></div>
<blockquote class="webkit-indent-blockquote"><div>
<div>$KCODE = &#8220;UTF8&#8243;</div>
</div>
<div>
<div></div>
</div>
<div>
<div>require &#8216;rubygems&#8217;</div>
</div>
<div>
<div>require &#8216;nokogiri&#8217;</div>
</div>
<div>
<div>require &#8216;open-uri&#8217;</div>
</div>
<div>
<div></div>
</div>
<div>
<div>page = open(&#8220;http://www.kdl.co.jp/&#8221;)</div>
</div>
<div>
<div>html = Nokogiri::HTML(page.read, nil, &#8216;UTF-8&#8242;)</div>
</div>
<div>
<div></div>
</div>
<div>
<div>html_a = html.search(&#8216;//a&#8217;)</div>
</div>
<div>
<div>html_a.each_with_index do |a, i|</div>
</div>
<div>
<div>&nbsp;&nbsp;puts a</div>
</div>
<div>
<div>end</div>
</div>
</blockquote>
<div></div>
<div>さてさて、結果は．．．</div>
<div></div>
<p><span id="more-242"></span></p>
<div></div>
<div>
<div><span class="mt-enclosure mt-enclosure-image" style="margin-top: 0px;margin-right: 0px;margin-bottom: 0px;margin-left: 0px;border-top-width: 0px;border-right-width: 0px;border-bottom-width: 0px;border-left-width: 0px;border-style: initial;border-color: initial;padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;font-size: 1em;font-weight: normal"><img src="http://www.kdl.co.jp/assets_c/2011/04/sample-thumb-400x310-379.png" width="400" height="310" alt="sample.png" class="mt-image-center" style="border-top-width: 0px;border-right-width: 0px;border-bottom-width: 0px;border-left-width: 0px;border-style: initial;border-color: initial;border-style: initial;border-color: initial;text-align: center;margin-top: 0px;margin-right: auto;margin-bottom: 20px;margin-left: auto" /></span></div>
<div>ご覧のとおり、&lt;a&gt;~&lt;/a&gt;の部分が抜き出せました。</div>
<div></div>
<div>次はもう少し難しくして、ヘッダータブのaタグのみ抜き出してみたいと思います。</div>
</div>
<div></div>
<div>ヘッダー部分のHTMLソースは以下のようになっているため、&lt;div id=&#8221;globalNav&#8221;&gt;が抜き出せれば何とかなりそうです。</div>
<div></div>
<blockquote class="webkit-indent-blockquote"><div>
<div>&lt;div id=&#8221;globalNav&#8221;&gt;&lt;!&#8211;globalNav start &#8211;&gt;</div>
</div>
<div>
<div>&lt;ul&gt;</div>
</div>
<div>
<div>&lt;li id=&#8221;home&#8221;&gt;&lt;a class=&#8221;active&#8221; href=&#8221;index.html&#8221;&gt;ホーム&lt;/a&gt;&lt;/li&gt;</div>
</div>
<div>
<div>&lt;li id=&#8221;kdlsolution&#8221;&gt;&lt;a href=&#8221;webproduce/index.html&#8221;&gt;ソリューション&lt;/a&gt;&lt;/li&gt;</div>
</div>
<div>
<div>&lt;li id=&#8221;kdlworks&#8221;&gt;&lt;a href=&#8221;works/index.html&#8221;&gt;事例紹介&lt;/a&gt;&lt;/li&gt;</div>
</div>
<div>
<div>&lt;li id=&#8221;company&#8221;&gt;&lt;a href=&#8221;company/index.html&#8221;&gt;会社概要&lt;/a&gt;&lt;/li&gt;</div>
</div>
<div>
<div>&lt;li id=&#8221;csr&#8221;&gt;&lt;a href=&#8221;csr/index.html&#8221;&gt;CSRへの取組み&lt;/a&gt;&lt;/li&gt;</div>
</div>
<div>
<div>&lt;li id=&#8221;recuruit&#8221;&gt;&lt;a href=&#8221;recruit/index.html&#8221;&gt;採用情報&lt;/a&gt;&lt;/li&gt;</div>
</div>
<div>
<div>&lt;/ul&gt;</div>
</div>
<div>
<div>&lt;/div&gt;</div>
</div>
</blockquote>
<p>
<div>ということで、グローバルナビ内のaタグを抜き出すには、html.search(xxx)部分のxpathを変更します。変更したものがこちら↓</div>
<div></div>
<div>■ sample2.rb</div>
<blockquote class="webkit-indent-blockquote"><div></div>
</blockquote>
<blockquote class="webkit-indent-blockquote"><div>
<div>$KCODE = &#8220;UTF8&#8243;</div>
</div>
<div>
<div></div>
</div>
<div>
<div>require &#8216;rubygems&#8217;</div>
</div>
<div>
<div>require &#8216;nokogiri&#8217;</div>
</div>
<div>
<div>require &#8216;open-uri&#8217;</div>
</div>
<div>
<div></div>
</div>
<div>
<div>page = open(&#8220;http://www.kdl.co.jp/&#8221;)</div>
</div>
<div>
<div>html = Nokogiri::HTML(page.read, nil, &#8216;UTF-8&#8242;)</div>
</div>
<div>
<div></div>
</div>
<div>
<div>html_a = html.search(&#8216;//div[@id="globalNav"]//a&#8217;)</div>
</div>
<div>
<div>html_a.each_with_index do |a, i|</div>
</div>
<div>
<div>&nbsp;&nbsp;puts a</div>
</div>
<div>
<div>end</div>
</div>
</blockquote>
<div></div>
<div>さて、結果はどうなったかというと、、、</div>
<div></div>
<div><span class="mt-enclosure mt-enclosure-image"><img src="http://www.kdl.co.jp/assets_c/2011/04/sample2-thumb-400x310-382.png" width="400" height="310" alt="sample2.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" /></span></div>
<div>ご覧のとおり、目的の&lt;a&gt;~&lt;/a&gt;タグだけ取得することができました。</div>
<div></div>
<div>javascriptで表現されたタグをスクレイピングするにはwatirなどを使う必要がありますが、</div>
<div>単純なHTMLであれば、nokogiriで十分対応できますね。</div>
<div></div>
<div>wrote by S.M.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kdl.co.jp/open/2011/04/13/ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>androidアプリを公開してみて</title>
		<link>http://www.kdl.co.jp/open/2011/03/07/android/</link>
		<comments>http://www.kdl.co.jp/open/2011/03/07/android/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 02:42:36 +0000</pubDate>
		<dc:creator>S.M.</dc:creator>
				<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://203.211.225.138/open/2011/03/07/android/</guid>
		<description><![CDATA[今回はandroidの開発を決意～現在に至るまでの軌跡を書いてみたいと思います。 1月8日に神戸で行われた関西アンカンファレンスで発表した元ネタですので、 プレゼン資料と被ってる部分もありますが、ご容赦ください。 という &#8230; <a href="http://www.kdl.co.jp/open/2011/03/07/android/">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div>今回はandroidの開発を決意～現在に至るまでの軌跡を書いてみたいと思います。</div>
<div>1月8日に神戸で行われた関西アンカンファレンスで発表した元ネタですので、</div>
<div>プレゼン資料と被ってる部分もありますが、ご容赦ください。</div>
<div></div>
<div>ということで、これまでのandroidの取り組みを時系列で書いてみると・・・</div>
<div></div>
<div>　<b>■ 2010年5月（GW）</b></div>
<div>　　　会社の同僚数名と萩に開発合宿に行く。</div>
<div>　　当時これと言ってやりたいことがなかったので、</div>
<div>　　これから流行りそうなandroidアプリでも触ってみるかと</div>
<div>　　軽い気持ちでアプリ開発に手を出すことに。</div>
<div></div>
<div>　　　合宿中に自分が歩いた経路を記録するアプリを作るが、</div>
<div>　　既にgoogleがMyTracksという作りたかった機能すべてを盛り込んだアプリを</div>
<div>　　出してて絶望する。</div>
<div></div>
<div>　<b>■ 2010年6月</b></div>
<div>　　　5月に注文したandroid端末（HTC Desire）が一ヶ月経ってようやく届く。</div>
<div>　　6月末から1週間旅に出るつもりだったので、それまでにアプリを作ろうと決意する。</div>
<div></div>
<blockquote class="webkit-indent-blockquote"><div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</div>
</blockquote>
<blockquote class="webkit-indent-blockquote"><div>
<div>毎年夏に有給をとって１週間旅に出るというのをここ数年やっています。</div>
<div>去年は「青森・北海道」、一昨年は「北陸」を1週間かけて回ってきました。</div>
<div>で、移動手段は主に車を使い、１回の旅行で1,000～2,000kmぐらい走るんですが、</div>
<div>土地勘のない場所で&#8221;安い&#8221;ガソリンスタンドを探すは毎回苦労していました。</div>
<div></div>
<div>これまではホテルの無線LANを利用し、gogo.gsというサイトで</div>
<div>周辺の安いスタンドを探すという手段を取っていましたが、</div>
<div>せっかくスマートフォンを手に入れたので、アプリはないかと探してみましたが、</div>
<div>当時androidアプリはなく、「無いのなら自分で作ってやろう」ということで</div>
<div>アプリの作成に取り掛かりました。</div>
<div></div>
<div>～　実際に使ってみて　～</div>
<div></div>
<div>　旅先で何回か使ってみてたところ、投稿が多い地域では結構使えるかも</div>
<div>という印象を持ちました。</div>
<div>ただ、地方に行くほど投稿件数が少なく、検索してもほとんどヒットしないケースも・・・</div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</div>
</div>
</blockquote>
<div></div>
<div>
<div></div>
<div>　<b>■ 2010年7月</b></div>
<div>　　オレオレ機能満載だったアプリを万人向けに改修し、</div>
<div>　7月18日にandroidマーケットにリリース。</div>
<div>　　→リリース後1週間で1,000ダウンロードを記録する。</div>
<div></div>
<div>　　アプリをリリースして1週間ほど経ったある日、</div>
<div>　android情報サイトからレビューの掲載確認メールが突然届く。</div>
<div>　　→レビュー掲載後、2日間で1,000ダウンロードを記録し、</div>
<div>　　　その後もコンスタントにダウンロードされる。</div>
</div>
<p><span id="more-238"></span></p>
<div>　<b>■ 2010年8月</b></div>
<div>　　別のandroid情報サイトからレビュー掲載確認メールが届く。</div>
<div>　　　→ダウンロード数が10,000を超える。</div>
<div></div>
<div>　<b>■ 2010年9月</b></div>
<div>　　仕事が忙しくグロッキー状態。</div>
<div>　　　→もちろんアプリ開発は一切手つかず・・・</div>
<div></div>
<div>　<b>■ 2010年10月</b></div>
<div>　　某キャリアが行っているスマートフォンラウンジから展示許諾確認メールが届く。</div>
<div></div>
<div>　<b>■ 2010年11月</b></div>
<div>　　東京にある某スマートフォンラウンジでアプリが展示される（てたはず）</div>
<div>　　　→<s>東京に行く機会がなかったので見ることは叶わず・・・</s></div>
<div>　　　→1月9日にABC 2011 winterに参加した際に展示POPを見せてもらいました！！</div>
<div></div>
<div>　　某キャリアからアプリ紹介パンフレットへの掲載確認メールが届く。</div>
<div>　　　→その1週間後、別件で請求書に封入するチラシへの掲載確認メールが届く。</div>
<div></div>
<div>　　11月末から九州のショップ、量販店でパンフレットが配られる（てたはず）</div>
<div>　　　→1月にやっと入手。</div>
<div></div>
<div>　<b>■ 2010年12月</b></div>
<div>　　価格投稿できるバージョンをリリース。</div>
<div>　　　→gogo.gs本家サイトで正式に紹介される。</div>
<div></div>
<div>　　某キャリアの請求書のチラシに掲載される（てたはず）</div>
<div>　　　→九州地方限定のため、見ることは叶わず・・・</div>
<div></div>
<div>　　12月発売の雑誌に「AndroidアプリBest100　2010下半期」の一つとして掲載される。</div>
<div></div>
<div>　　　→ダウンロード数が徐々に加速。ついに30,000ダウンロード突破。</div>
<div></div>
<div>　<b>■ 2010年1月</b></div>
<div>　　九州に帰省していた先輩にパンフレットを取ってきてもらう。</div>
<div></div>
<div>　　年末から順調にダウンロード数が伸び続け、58,000ダウンロード突破。←いまここ！</div>
<div></div>
<div></div>
<div><b><i>　～　実際に開発してみて　～～～～～～～～～～～～～～～～～～～～～～</i></b></div>
<div></div>
<div>　　<b>■ android開発は意外に簡単</b></div>
<div>　　　androidでアプリを作る場合、javaという言語でプログラミングすることになります。</div>
<div>　　iPhoneの場合だと、objective-Cという言語を使って開発することになり、</div>
<div>　　一から言語仕様を把握しないといけませんが、javaであれば、</div>
<div>　　仕事で使っているPHPと似ている部分がある（いっしょにするなと言われそうですが・・・）ため、</div>
<div>　　特に違和感なく開発することができました。</div>
<div>　</div>
<div>　　　モバイル特有の制限（メモリ、画面サイズ）はありますが、</div>
<div>　　オブジェクト指向でプログラミングしたことがある人ならば</div>
<div>　　問題ないと思います。</div>
<div>　</div>
<div>　 &nbsp;今ではandroidアプリ開発に関する書籍も充実してきて、</div>
<div>　　アプリ開発の敷居はさらに下がっているように思います。</div>
<div>　</div>
<div>　　<b>■ androidは動作検証が大変</b></div>
<div>　　　androidの場合、各キャリア＆メーカーが独自にカスタマイズした端末を出しており、</div>
<div>　　特定の端末で動かないとの連絡がたまに来ます。</div>
<div>　　日本国内で販売している端末であれば、検証できる場合もありますが、</div>
<div>　　個人輸入した端末で動かないとか言われるともうどうしようもありません。</div>
<div>　　　→このような場合は、動作対象外として説明しています。</div>
<div>　</div>
<div>　　　iPhoneであればある程度機種が限られているので、テストもしやすいんでしょうが、</div>
<div>　　androidは日本のフィーチャーフォンと同じ道をたどる気がしてなりません。</div>
<div>　</div>
<div>　　<b>■ 画面デザインが重要</b></div>
<div>　　　androidの場合、洗練されたUI/デザインのアプリというのがまだまだ少ないです。</div>
<div>　　# 自分のアプリもそうですが・・・</div>
<div>　　アプリを開発している人の多くがエンジニアということもあり、デザインより機能を重視といった感じで、デザイン面ではiPhoneに比べ、今一歩です。</div>
<div>　　　使う側からすれば、より分かりやすく使いやすいUI/デザインの方がいい印象を持ちやすいと</div>
<div>　　思うので、もっとデザインを追求していきたいです。</div>
<div></div>
<div>　　<b>■ アプリ公開すると・・・</b></div>
<div>　　　レビューサイトやキャリア、実際に使用してくれているユーザなどから突然メールが来たりします。</div>
<div>　　　また、androidマーケットには評価/コメントを投稿する機能があり、</div>
<div>　　実際にアプリを使用しているユーザの生の声を聞くことできる貴重な情報源です。</div>
<div>　　　時には厳しいコメントもあったりしますが、多くの方は好意的なコメントを残してくれて</div>
<div>　　開発のモチベーション維持につながりますので、</div>
<div>　　アプリを開発している/しようとしている方は恐れずに公開してみてください。</div>
<div></div>
<div>wrote by S.M.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kdl.co.jp/open/2011/03/07/android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordCamp福岡に参加してみて</title>
		<link>http://www.kdl.co.jp/open/2011/02/25/wordcamp/</link>
		<comments>http://www.kdl.co.jp/open/2011/02/25/wordcamp/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 07:38:27 +0000</pubDate>
		<dc:creator>T.H.</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://203.211.225.138/open/2011/02/25/wordcamp/</guid>
		<description><![CDATA[こんにちは！ 洗濯物を溜めてしまい、私服がなくなり スーツで出社しているT.H.です。 2/19(土)にWordCamp福岡に行って参りました！ 自身でコンタクトフォームのプラグインを公開しているのですが、 そのプラグイ &#8230; <a href="http://www.kdl.co.jp/open/2011/02/25/wordcamp/">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>こんにちは！</p>
<div>洗濯物を溜めてしまい、私服がなくなり</div>
<div>スーツで出社しているT.H.です。</div>
<div>2/19(土)にWordCamp福岡に行って参りました！</div>
<div>自身でコンタクトフォームのプラグインを公開しているのですが、</div>
<div>そのプラグインがきっかけでスピーカーとして参加させて頂けました！</div>
<div>↓いっちょ前に写真も載せていただいています　笑</div>
<div><a href="http://2011.wordcampfukuoka.com/speakers/">http://2011.wordcampfukuoka.com/speakers/</a></div>
<div>当日の朝、新幹線で福岡入り。</div>
<div>で、博多駅で朝定食（魚うまかった！）を食べて、会場の九州産業大学さんへ</div>
<div>会場へ着いて受付。</div>
<div>受付は女子ばかり！かなり華やか！さすが福岡です。</div>
<div>で、早速、はじめのセッション。</div>
<div>マックラケン直子さんのセッション</div>
<div>「パブリッシングツールWordPressのこれから」</div>
<div>WordPress3.0は現在約3000万ダウンロード。</div>
<div>もはや、ブログツールやCMSの枠を超えて、プラットフォームになろうとしてますね。</div>
<div>いくつかセッション回ってとうとう自分の番。ガクガクブルブル。</div>
<div>テーマは「WordPressのプラグインを公開してみて」</div>
<div>というタイトルで最近公開したプラグインの紹介や公開して自分の中で変わったことを</div>
<div>紹介してWordPressでプラグインを公開することの魅力について話しました。</div>
<div>いろんな意見を頂き、プレゼン中、寝癖がたってたわりには上出来だったんじゃないかなと思ってます！</div>
<div>今回はWordPressコミュニティの人達とも仲良くなれたり、セッション持たして</div>
<div>頂いたり、非常に収穫の多いWordCamp福岡でした。</div>
<div>最後にWordPressについて。</div>
<div>以前はブログツールという呼ばれ方をされていましたが、</div>
<div>今や公式サイトの方では「Publishing Tool」という呼ばれ方をされています。</div>
<div>今やは世界の約8.5%のwebサイトが</div>
<div>WordPressで出来ているというデータも存在しています。</div>
<div>おそらく、将来的には多くのコニュニティやプラグイン、テーマに支えられ</div>
<div>webという世界でのひとつのプラットフォームに進化していくことでしょう。</div>
<div>というか自分はプラグイン開発者としてWordPressをプラットフォームと言われるまで進化させたいという夢があります。</div>
<div>誰でも簡単にソフトウェアを進化させる人になれるのはやっぱオープンソースの魅力ですね！</div>
<div>今後も頑張っていきたいと思います！</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kdl.co.jp/open/2011/02/25/wordcamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>pwconvでも復帰できないパスワード変更時エラーに対応する</title>
		<link>http://www.kdl.co.jp/open/2011/01/28/pwconv/</link>
		<comments>http://www.kdl.co.jp/open/2011/01/28/pwconv/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 10:46:23 +0000</pubDate>
		<dc:creator>koyamamoto</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://203.211.225.138/open/2011/01/28/pwconv/</guid>
		<description><![CDATA[Red Hatを使用していてパスワードを変更する必要があったので、いつものように&#160; $ passwdしたところエラーが発生しました。&#160; Changing password for user hogeh &#8230; <a href="http://www.kdl.co.jp/open/2011/01/28/pwconv/">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Red Hatを使用していてパスワードを変更する必要があったので、<br />いつものように<br />&nbsp; $ passwd<br />したところエラーが発生しました。<br />&nbsp; <b>Changing password for user hogehoge.<br />&nbsp; passwd: Authentication token manipulation error</b><br />だそうです・・・。</p>
<p>（※<b>以下は必ずテスト環境かバックアップをとった上でお試しください</b>※）<br />ところでユーザーを作成した場合、<br />ユーザのアカウント（パスワードなど）情報は<br />/etc/passwdへ書きこまれて保存されています。<br />&nbsp; $ cat /etc/passwd<br />していただくと中身が確認できますね。<br />ずらずらっとユーザの情報が表示されると思います。</p>
<p>もしかすると表示された内容を見て<br />「あれ？パスワードはどこ？」という方がいらっしゃるかもしれません。<br />そうです、passwdファイルに書きこまれたパスワードは<br />伏字(x)に置き換えられています。<br />passwdファイルは誰でも見ることができるため、<br />ここにパスワードを暗号化せず保存してしまうとバレバレだからですね。</p>
<p>今度は/etc/shadowを見てみましょう。<br />&nbsp; $ cat /etc/shadow</p>
<p>どうですか？<br />もし一般ユーザなど権限のないユーザの場合<br />「<b>cat: /etc/shadow:</b> <b>Permission denied</b>」と表示されたはずです。<br />試しにrootユーザでもう一度実行すると内容が表示されます。</p>
<p>つまりpasswdファイルは<br />shadowファイルにハッシュ化されて保存されていますので<br />他の人にはバレないような仕組みになっています。<br />passwdファイルからshadowを作るためにはpwconvコマンドを使います。</p>
<p>さて最初の話に戻りますね。<br />まれにですが上のpasswdとshadowがうまく噛み合わず、<br />パスワード変更時にうまく変更できずエラーが発生する場合があります。<br />それが「<b>Authentication token manipulation error</b>」なんです。</p>
<p>検索するとよく出てくる対処法は<br />&nbsp; $ pwconv<br />を再実行してpasswdとshadowをもう一度付きあわせてやる方法です。<br />たいていこれでうまくいくと思います。</p>
<p>しかし今回はこれでもうまくいきませんでした。<br />pwconvすら効かないほどに機嫌が悪かったようです。</p>
<p>いろいろ悩みましたがshadowファイルをpasswdに戻して<br />&nbsp;&nbsp;&nbsp; # passwdファイルにパスワードが書かれた状態に一度戻して<br />もう一回pwconvしてみる作戦を試しました。</p>
<p>まずpwconvの逆のコマンドpwunconvを実行します。<br />権限ユーザの必要がありましたのでrootになりました。<br />&nbsp; $ su<br />&nbsp; # pwunconv<br />確認すると/etc/shadowがなくなり、/etc/passwdに「x」ではなく<br />ハッシュ化されたパスワードが書かれています。<br />さてもう一shadow化するので<br />&nbsp; # pwconv<br />としました。<br />passwdを確認するときちんとパスワードは「x」に置き換えられていて<br />shadowも作成されていました。</p>
<p>ようやくパスワード変更が試せます。<br />&nbsp; $ passwd<br />&nbsp; New password:<br />と新しいパスワードを聞かれたのでうまくいったみたいですね。</p>
<p>passwdとshadowの整合性を取り直してもだめなときは<br />shadowを一度捨ててもう一度つくり直してみてください</p>
<p>パスワード変更時に起きるトラブルへの対策でした。</p>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kdl.co.jp/open/2011/01/28/pwconv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>node.jsをインストールしたときのメモ</title>
		<link>http://www.kdl.co.jp/open/2011/01/18/internet_explore6js/</link>
		<comments>http://www.kdl.co.jp/open/2011/01/18/internet_explore6js/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 04:41:32 +0000</pubDate>
		<dc:creator>T.H.</dc:creator>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://203.211.225.138/open/2011/01/18/internet_explore6js/</guid>
		<description><![CDATA[こんにちは。 年末年始に金を使いすぎ、 最近カレーとカップめんばかり食べているT.H.です。 や、やさいが食べたい。。 さて、本題に入りまして、最近なにかと話題のnode.jsをインストールして試してみました。 node &#8230; <a href="http://www.kdl.co.jp/open/2011/01/18/internet_explore6js/">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>こんにちは。
<div></div>
<div>年末年始に金を使いすぎ、</div>
<div>最近カレーとカップめんばかり食べているT.H.です。</div>
<div></div>
<div>や、やさいが食べたい。。</div>
<div></div>
<div></div>
<div>さて、本題に入りまして、最近なにかと話題のnode.jsをインストールして試してみました。</div>
<div>node.jsとはネットワークサーバが構築できるイベント駆動型のサーバサイドjavascriptです。</div>
<div>google製のV8エンジンを使用して動作します。</div>
<div></div>
<div>特徴として非常に高速に動作してくれます。</div>
<div>apache等の通常のネットワークサーバはスレッドモデルといって、1スレッドが「リクエスト→サーバでの処理→レスポンス」を処理するわけですが、サーバでの処理が非常に重かったりすると、リクエストに大量に待ちが生じてしまったりするわけです。</div>
<div></div>
<div>ところが、イベント駆動型のnode.jsは1つのリクエストを捌くとサーバの処理を待たずして次のリクエストを捌きに行きます。リクエスト、サーバの処理、レスポンスを1つの塊ではなく、別個のイベントとして順次処理していくため非常に高速に動きます。</div>
<div></div>
<div>わかりやすい説明はこちらから</div>
<div><a href="http://www.atmarkit.co.jp/fcoding/articles/websocket/01/websocket01a.html">http://www.atmarkit.co.jp/fcoding/articles/websocket/01/websocket01a.html</a></div>
<div></div>
<div></div>
<div>今回のゴールとしてはnode.jsでhttpリクエストに対して「Hello World」を返すネットワークサーバを立てるところまでやってみたいと思います。</div>
<div></div>
<div></div>
<div><span style="color:red"><b>実行環境</b></span>
<div>CentOS4(5系が身近になかった。。)</div>
<div>node.js-0.2.6</div>
<div>python(2.4以降)</div>
<div>openssl</div>
<div></div>
<div></div>
<div><span style="color:red"><b>node.jsのインストール</b></span></div>
<p>本家サイトよりnode.jsをダウンロードします</p>
<blockquote><p>#&nbsp;wget http://nodejs.org/dist/node-v0.2.6.tar.gz<br /># tar zxvf node-v0.2.6.tar.gz<br /># cd node-v0.2.6<br /># ./configure</p></blockquote>
<p>さっそくconfigureでこける。。pythonのバージョンが2.3.4だかららしい。</p></div>
<div></div>
<div>なのでバージョンを2.7にアップ。</div>
<blockquote><p>
# wget http://www.python.org/ftp/python/2.7/Python-2.7.tgz<br />
# tar zxvf Python-2.7.tgz<br />
# cd Python-2.7/<br />
# ./configure<br />
# make<br />
# /usr/sbin/checkinstall &#8211;fstrans=no<br />
# rpm -Uvh /usr/src/redhat/RPMS/i386/Python-2.7-1.i386.rpm
</p></blockquote>
<div>今度はconfigureは通った<br />
<blockquote># ./configure<br /># make</p></blockquote>
<p>どきどきどき。make通れよ～。</p></div>
<div>
<blockquote>../src/platform_linux.cc:29: error: `PR_SET_NAME&#8217; was not declared in this scope<br />Waf: Leaving directory `/root/node-v0.2.6/build<br /><span style="color:red">Build failed: &nbsp;-&gt; task failed (err #1):<br />&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{task: cxx platform_linux.cc -&gt; platform_linux_4.o}</span></p></blockquote>
<p>&nbsp;あーーーー！！！Cent4は古すぎたか。。ということで/src/platform_linux.cc:29行目を</p></div>
<div>コメントアウトしても問題ないらしいので、コメントアウト。</div>
<div></div>
<div>
<div>
<blockquote>void OS::SetProcessTitle(char *title) {<br />&nbsp;&nbsp;if (process_title) free(process_title);<br />&nbsp;&nbsp;process_title = strdup(title);<br />&#8211; &nbsp;prctl(PR_SET_NAME, process_title)<br />++ // &nbsp;prctl(PR_SET_NAME, process_title);<br />}</p></blockquote>
<p>再度、makeを実行<br />
<blockquote># make<br /># make install</p></blockquote>
<blockquote><p>→　&#8217;install&#8217; finished successfully (1.168s)</p></blockquote>
<p>無事インストール完了。</p></div>
<div></div>
<div><span style="color:red"><b>Hello Worldサーバの構築</b></span></div>
<p><a href="http://nodejs.jp/nodejs.org_ja/">node.js公式サイト</a>のサンプルソースをコピペしてexample.jsという名前で保存します。</p>
<blockquote><p>
var http = require(&#8216;http&#8217;);<br />
http.createServer(function (req, res) {<br />&nbsp;&nbsp;res.writeHead(200, {&#8216;Content-Type&#8217;: &#8216;text/plain&#8217;});<br />&nbsp;&nbsp;res.end(&#8216;Hello World\n&#8217;);<br />
}).listen(8124, &#8220;127.0.0.1&#8243;); //ポート8124のアクセスに対して「Hello World」を返す<br />
console.log(&#8216;Server running at http://127.0.0.1:8124/&#8217;);
</p></blockquote>
<p>先ほどのjsを実行します。</p>
<blockquote><p># /usr/local/bin/node example.js<br />Server running at http://127.0.0.1:8124/</p></blockquote>
<p>そしてブラウザから実際にアクセスしてみると。。
</p></div>
<div><span class="mt-enclosure mt-enclosure-image"><img alt="nodejs.jpg" src="http://www.kdl.co.jp/images/Image2.jpg" width="469" height="200" class="mt-image-none" /></span></div>
<div><span class="mt-enclosure mt-enclosure-image">&nbsp;</span></div>
<div><span class="mt-enclosure mt-enclosure-image">ちゃんとHello Worldが返ってきました。</span></div>
<div><span class="mt-enclosure mt-enclosure-image">他にもnode.js用のフレームワークやMysql用ドライバなんかも出ているようですね。</span></div>
<div><span class="mt-enclosure mt-enclosure-image"><br /></span></div>
<div><span class="mt-enclosure mt-enclosure-image">node.jsのフレームワーク</span><span class="Apple-style-span" style="font-family: 'MS PGothic';font-size: 14px;line-height: 21px">「Express」</span></div>
<div><span class="mt-enclosure mt-enclosure-image"><span class="Apple-style-span" style="font-family: 'MS PGothic';font-size: 14px;line-height: 21px">&nbsp;<a href="http://github.com/visionmedia/express">http://github.com/visionmedia/express</a>&nbsp;</span></form>
</div>
<div><span class="mt-enclosure mt-enclosure-image"><br /></span></div>
<div><span class="mt-enclosure mt-enclosure-image"><span class="Apple-style-span" style="font-family: 'MS PGothic';font-size: 14px;line-height: 21px">MySQLドライバの「node-mysql」&nbsp;</span></form>
</div>
<div><span class="mt-enclosure mt-enclosure-image"><span class="Apple-style-span" style="font-family: 'MS PGothic';font-size: 14px;line-height: 21px"><a href="http://github.com/masuidrive/node-mysql">http://github.com/masuidrive/node-mysql</a>&nbsp;</span></form>
</div>
<div><font face="'MS PGothic'"><span class="Apple-style-span" style="font-size: 14px;line-height: 21px"><br /></span></font></div>
<p>node.jsとMySQLで割と普通のデータベースウェブアプリを作ってみるチュートリアル
<div><a href="http://sakuratan.biz/archives/3101">http://sakuratan.biz/archives/3101</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.kdl.co.jp/open/2011/01/18/internet_explore6js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[android] アプリにGoogleAnalyticsを埋め込むには</title>
		<link>http://www.kdl.co.jp/open/2010/12/24/android_googleanalytics/</link>
		<comments>http://www.kdl.co.jp/open/2010/12/24/android_googleanalytics/#comments</comments>
		<pubDate>Fri, 24 Dec 2010 02:01:18 +0000</pubDate>
		<dc:creator>S.M.</dc:creator>
				<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://203.211.225.138/open/2010/12/24/android_googleanalytics/</guid>
		<description><![CDATA[今回はandroidアプリにGoogleAnalyticsを仕込む方法を紹介します。 GoogleAnalyticsといえば「Webサイトのアクセス解析でしょ」と思われがちですが、 スマートフォンアプリ（iphone,a &#8230; <a href="http://www.kdl.co.jp/open/2010/12/24/android_googleanalytics/">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div>今回はandroidアプリにGoogleAnalyticsを仕込む方法を紹介します。</div>
<div>GoogleAnalyticsといえば「Webサイトのアクセス解析でしょ」と思われがちですが、</div>
<div>スマートフォンアプリ（iphone,android）でも利用が可能です。</div>
<div></div>
<div>① Google Analytics SDK for Androidの用意</div>
<div></div>
<div>以下のページからSDKをダウンロードします。</div>
<div></div>
<div>http://code.google.com/intl/ja/mobile/analytics/download.html</div>
<div></div>
<div># 2010/12/07時点での最新版は0.8</div>
<div></div>
<div>ダウンロードしたら、ファイルを展開してプロジェクトに組み込みます。</div>
<div></div>
<div>eclipseを開いて、プロジェクトを右クリック→「ビルド・パス」→「ビルド・パスの構成」を選択し、</div>
<div>ライブラリタブを選択。「外部 Jar 追加」を選択し、「libGoogleAnalytics.jar」を選択します。</div>
<div></div>
<div>次にAndroidManifest.xmlに以下のパーミッションを追加します。</div>
<div></div>
<blockquote class="webkit-indent-blockquote"><div>&nbsp;&nbsp;&lt;uses-permission android:name=&#8221;android.permission.INTERNET&#8221; /&gt;</div>
<div>&nbsp;&nbsp;&lt;uses-permission android:name=&#8221;android.permission.ACCESS_NETWORK_STATE&#8221; /&gt;</div>
</blockquote>
<div></div>
<div>② Analyticsアカウントの用意</div>
<div>次は、Analyticsのアカウントを用意し、プロファイルを作成します。</div>
<div></div>
<div># 既にプロファイルを用意している場合は③に進んでください。</div>
<div></div>
<div>まず、↓のページにアクセスし、Analyticsの登録を行います。</div>
<div></div>
<div>http://www.google.com/intl/ja/analytics/</div>
<div></div>
<div>アカウントができたら、次はプロファイルを作成します。</div>
<div></div>
<div>「プロファイルを追加」リンクをクリックして、プロファイルの新規作成画面を表示します。</div>
<div>「トラッキングするサイトのURL」に適当なURLを入力し、完了ボタンをクリックします。</div>
<div></div>
<div>すると、サマリーページに先ほど登録したプロファイルが追加されるので、</div>
<div>追加されたプロファイルの「UA-xxxxxxx-x」をメモしておきます。</div>
<div></div>
<div><span class="mt-enclosure mt-enclosure-image"><img src="http://www.kdl.co.jp/assets_c/2010/12/analytics_main-thumb-400x300-351.png" width="400" height="300" alt="analytics_main.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" /></span></div>
<div></div>
<div>③ アプリに組み込む</div>
<div></div>
<div>ここからは実際にアプリに組み込んでいきます。</div>
<div></div>
<div>組み込みを行うにあたって、以下の４つを記述します。</div>
<div></div>
<div>①GoogleAnalyticsTrackerのインスタンスの作成</div>
<div>②トラッキングの開始</div>
<div>③トラッキング（ページ or イベント）</div>
<div>④トラッキングの停止</div>
<div></div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</div>
<blockquote class="webkit-indent-blockquote"><div>import jp.pinetail.android.sample.analytics.R.id;</div>
<div></div>
<div>import com.google.android.apps.analytics.GoogleAnalyticsTracker;</div>
<div></div>
<div>import android.app.Activity;</div>
<div>import android.content.pm.PackageManager;</div>
<div>import android.content.pm.PackageManager.NameNotFoundException;</div>
<div>import android.os.Build;</div>
<div>import android.os.Bundle;</div>
<div>import android.util.Log;</div>
<div>import android.widget.TextView;</div>
<div></div>
<div>public class MainActivity extends Activity {</div>
<div>&nbsp;&nbsp; &nbsp;</div>
<div>&nbsp;&nbsp; &nbsp;GoogleAnalyticsTracker tracker;</div>
<div>&nbsp;&nbsp; &nbsp;</div>
<div>&nbsp;&nbsp; &nbsp;/** Called when the activity is first created. */</div>
<div>&nbsp;&nbsp; &nbsp;@Override</div>
<div>&nbsp;&nbsp; &nbsp;public void onCreate(Bundle savedInstanceState) {</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;super.onCreate(savedInstanceState);</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;setContentView(R.layout.main);</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// ① インスタンスの作成</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;tracker = GoogleAnalyticsTracker.getInstance();</div>
<div></div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// ② トラッキングの開始</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// 20秒間隔でトラッキングデータを送信する</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;tracker.start(&#8220;UA-xxxxxxx-x&#8221;, 20, this);</div>
<div></div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// ③ トラッキング（ページビュー）</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;tracker.trackPageView(&#8220;/MainActivity&#8221;);</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Button btn = (Button) findViewById(R.id.Button01);</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;btn.setOnClickListener(new OnClickListener() {</div>
<div></div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;public void onClick(View arg0) {</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// ③ トラッキング（イベント）</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tracker.trackEvent(&#8220;Category&#8221;, // Category</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#8221;Action&#8221;, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Action</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#8221;Label&#8221;, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // Label</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Value</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;});</div>
<div>&nbsp;&nbsp; &nbsp;}</div>
<div></div>
<div>&nbsp;&nbsp; &nbsp;@Override &nbsp;</div>
<div>&nbsp;&nbsp; &nbsp;protected void onDestroy() {</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;super.onDestroy();</div>
<div></div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// ④ トラッキングの停止</div>
<div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;tracker.stop();</div>
<div>&nbsp;&nbsp; &nbsp;}</div>
<div>}</div>
</blockquote>
<div></div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</div>
<div></div>
<div>トラッキングを埋め込んだら、アプリを操作してAnalyticsに反映されるまでひたすら待ちます。</div>
<div>反映されるまで最大24時間かかるらしいので、気長に待ちます。</div>
<div></div>
<div>で、後日反映された結果を眺めてみました。</div>
<div></div>
<div>・コンテンツ サマリー</div>
<div></div>
<div><span class="mt-enclosure mt-enclosure-image"><img src="http://www.kdl.co.jp/assets_c/2010/12/analytics_content-thumb-400x300-342.png" width="400" height="300" alt="analytics_content.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" /></span></div>
<div></div>
<div>trackPageViewで設定した内容が反映されてます。</div>
<div></div>
<div>・イベント トラッキングの概要</div>
<div></div>
<div><span class="mt-enclosure mt-enclosure-image"><img src="http://www.kdl.co.jp/assets_c/2010/12/analytics_event-thumb-400x335-345.png" width="400" height="335" alt="analytics_event.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" /></span></div>
<div></div>
<div>trackEventで設定した内容が反映されてます。</div>
<div></div>
<div>この他にもOSのバージョン、画面の解像度も調べることができます。</div>
<div></div>
<div># 「ユーザー」 → 「PC環境」 → 「オペレーティング システム」</div>
<div></div>
<div><span class="mt-enclosure mt-enclosure-image"><img src="http://www.kdl.co.jp/assets_c/2010/12/analytics_os-thumb-400x342-348.png" width="400" height="342" alt="analytics_os.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" /></span></div>
<div>海外だと2.2がメインという記事がちらほら書かれてますが、</div>
<div>日本だとやっぱり2.1が多いですね。</div>
<div></div>
<div>あと、残念ながらtrackPageViewでは機種名（xperia、IS03等）は取得できないようです。</div>
<div>機種名を別途とりたい場合はsetCustomVarメソッドを使えばいいようです。</div>
<div></div>
<div>※ setCustomVarは任意のデータを取得できますが、</div>
<div>&nbsp;&nbsp; 個人情報を取得するのはやめましょう！</div>
<div></div>
<div>wrote by S.M.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kdl.co.jp/open/2010/12/24/android_googleanalytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ブログリニューアルのお知らせ</title>
		<link>http://www.kdl.co.jp/open/2010/12/21/post_2/</link>
		<comments>http://www.kdl.co.jp/open/2010/12/21/post_2/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 01:00:00 +0000</pubDate>
		<dc:creator>senryaku</dc:creator>
				<category><![CDATA[ニュース]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[インフラ]]></category>
		<category><![CDATA[スマートフォン]]></category>

		<guid isPermaLink="false">http://203.211.225.138/open/2010/12/21/post_2/</guid>
		<description><![CDATA[いつも「オープンソース研究室」をご愛読いただき、ありがとうございます！ かねてよりご好評をいただいております、「オープンソース研究室」ブログ事務局からのお知らせです。 KDLの精鋭が最先端のオープンソースに関する情報をお &#8230; <a href="http://www.kdl.co.jp/open/2010/12/21/post_2/">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>いつも「オープンソース研究室」をご愛読いただき、ありがとうございます！</p>
<p>かねてよりご好評をいただいております、<br />「オープンソース研究室」ブログ事務局からのお知らせです。</p>
<p>KDLの精鋭が最先端のオープンソースに関する情報をお届けする<br />当ブログですが、12月22日付でリニューアルいたしました！</p>
<p>リニューアルにあたり、執筆メンバーも心機一転。<br />KDLの若きエース達がそれぞれの得意分野を生かし、<br />皆様へオープンソースに関することや、SEの心情なども織り交ぜた<br />さまざまな最新情報をお届けします。</p>
<p>では、以下にメンバーを紹介します！</p>
<p>■■■■■　大柳晋也　■■■■■
<div>今まで書いたのを自己紹介代わりとします。</div>
<div>17 本書いてますねー。</div>
<div>これからも幅広くネタを収集していきたいです。</div>
<div></div>
<div>Cubby を触ってみるための前準備をする(1)　（<a href="/open/2009/12/30/cubby_1/">/open/2009/12/30/cubby_1/</a>）</div>
<div>PHP カンファレンスに行ってきた　（<a href="/open/2009/09/06/php/">/open/2009/09/06/php/</a>）</div>
<div>JavaScript で TDD　（<a href="/open/2009/08/09/javascript_tdd/">/open/2009/08/09/javascript_tdd/</a>）</div>
<div>Lime で TDD　（<a href="/open/2009/07/13/lime_tdd/">/open/2009/07/13/lime_tdd/</a>）</div>
<div>PHP で TDD その3　（<a href="/open/2009/05/31/php_tdd_3/">/open/2009/05/31/php_tdd_3/</a>）</div>
<div>PHP で TDD その2　（<a href="/open/2009/04/18/php_tdd_2/">/open/2009/04/18/php_tdd_2/</a>）</div>
<div>PHP で TDD　（<a href="/open/2009/04/05/php_tdd/">/open/2009/04/05/php_tdd/</a>）</div>
<div>PHP で TDD その3SubSonic を使ってみた　（<a href="/open/2008/11/04/subsonic/">/open/2008/11/04/subsonic/</a>）</div>
<div>SmartSVN を試してみる　（<a href="/open/2008/09/12/smartsvn/">/open/2008/09/12/smartsvn/</a>）</div>
<div>Putty でアンチエイリアスなフォント　（<a href="/open/2008/08/29/putty/">/open/2008/08/29/putty/</a>）</div>
<div>Subversion クライアント QSvn　（<a href="/open/2008/08/08/subversion_qsvn/">/open/2008/08/08/subversion_qsvn/</a>）</div>
<div>俺の Eclipse　（<a href="/open/2008/07/29/_eclipse/">/open/2008/07/29/_eclipse/</a>）</div>
<div>php_ctemplate を使ってみる　（<a href="/open/2008/07/16/php_ctemplate/">/open/2008/07/16/php_ctemplate/</a>）</div>
<div>Google ctemplate を使ってみる　（<a href="/open/2008/07/09/google_ctemplate/">/open/2008/07/09/google_ctemplate/</a>）</div>
<div>MySQL のフロントエンド その2　（<a href="/open/2008/06/28/mysql_2/">/open/2008/06/28/mysql_2/</a>）</div>
<div>MySQL のフロントエンド　（<a href="/open/2008/06/15/mysql/">/open/2008/06/15/mysql/</a>）</div>
<div>Mac 用 Subversion クライアント Versions.app　（<a href="/open/2008/06/08/mac_subversion_versionsapp/">/open/2008/06/08/mac_subversion_versionsapp/</a>）</div>
<div>■■■■■</div>
<div></div>
<div>■■■■■　S.M.　■■■■■</div>
<div>ずっと前から記事を書いてますが、リニューアルということで改めて自己紹介です。
<div></div>
<div>
<div>入社以来「PHP一筋」と言っていいほど仕事ではPHPばかり触ってますが、プライベートではRailsやJavaをちょこちょこいじってます。</div>
<div>最近はandroidにどっぷりハマっててアプリを公開したりしてます。</div>
<div>■■■■■</div>
<div></div>
<p>■■■■■　山本大作　■■■■■</div>
<div>「運用・保守」業務が多く、サーバ管理がメインのインフラ系エンジニアです。</div>
<div></div>
<div>「Windows系サーバ保守」からインフラ系への道に突入しましたが、入社1年目に経験した「Linuxサーバ構築・運用」でLinuxの魅力にどっぷりはまりました。</div>
<div>「効率化」「自動化」というキーワードに興味があります。</div>
<div></div>
<div>日々の業務で習得したノウハウや、「効率化・自動化」の切り口で行ってきたことなどをメインで投稿していきたいと思います。よろしくお願いします！</div>
<div>■■■■■</div>
<div></div>
<div>■■■■■　T.H.　■■■■■</div>
<div>仕事はwebシステムの構築や保守をやっています。</div>
<div></div>
<div>プライベートでWordPressをいじったりしています。最近、WordPressに問い合わせフォームが設置できるプラグインを公開しました。</div>
<div>プラグイン公式サイト→<a href="http://horike.lolipop.jp/iqfm/">http://horike.lolipop.jp/iqfm/</a></div>
<div></div>
<div>また、HTML5関連の技術にも興味を持っています。特にスマートフォン+HTML5の技術でなにかできないかなーと妄想したりしています。</div>
<div></div>
<div>今後ともよろしくお願いします！<br />■■■■■</div>
<div>
<p>■■■■■　山本浩生　■■■■■</p></div>
<div>ブログには以下のようなことを書こうと考えています。
<div>・遭遇したトラブルの解決法</div>
<div>・最新の話題・ニュース</div>
<div></div>
<div>例えば、PCをサーバーや開発環境として使っていて遭遇する問題とその解決方法や、スマートフォンやIT絡みの（個人的に）旬な話題、プログラミング言語Scalaについてなど、テーマは絞らず幅広く（雑多に）取り上げていこうと考えていますのでよろしくお願いします。</div>
<div>■■■■■</div>
<div></div>
</div>
<div>今後益々活発になっていくであろうオープンソース界。<br />さまざまな視点から最新情報をお届けしてまいりますので、<br />今後とも「オープンソース研究室ブログ」をよろしくお願いいたします！</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kdl.co.jp/open/2010/12/21/post_2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>kumofsをインストールしてみた</title>
		<link>http://www.kdl.co.jp/open/2010/05/18/kumofs/</link>
		<comments>http://www.kdl.co.jp/open/2010/05/18/kumofs/#comments</comments>
		<pubDate>Tue, 18 May 2010 06:08:02 +0000</pubDate>
		<dc:creator>S.M.</dc:creator>
				<category><![CDATA[パッケージ]]></category>
		<category><![CDATA[kumofs]]></category>

		<guid isPermaLink="false">http://203.211.225.138/open/2010/05/18/kumofs/</guid>
		<description><![CDATA[今年はじめに公開されたKVSのkumofsを今さらながらインストールしてみました。 「kumofsってなんぞや？」っていう方はこちらへどうぞ。 インストールした環境は以下のとおり。 CentOS5.2 g++4.1 ru &#8230; <a href="http://www.kdl.co.jp/open/2010/05/18/kumofs/">続きを読む <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>今年はじめに公開されたKVSのkumofsを今さらながらインストールしてみました。
<div></div>
<div>「kumofsってなんぞや？」っていう方は<a href="http://d.hatena.ne.jp/viver/20100118/p1" target="_blank">こちら</a>へどうぞ。</div>
<div></div>
<div>インストールした環境は以下のとおり。</div>
<div></div>
<blockquote class="webkit-indent-blockquote"><div>CentOS5.2</div>
<div>g++4.1</div>
<div>ruby1.8.5</div>
</blockquote>
<div></div>
<div>後にこの環境でインストールしたことを後悔することに‥</div>
<div>詳細は後ほど。</div>
<div></div>
<div>では、早速kumofsをインストールしていきます。</div>
<div></div>
<p><span id="more-232"></span></p>
<div>
<div>
<div>kumofsをインストールするには、Tokyo CabinetとMessagePackが必要なので、</div>
<div>それぞれダウンロードしてインストールします。</div>
<div></div>
</div>
<div>■ Tokyo Cabinetのインストール</div>
<div>Tokyo Cabinetをインストールするためには、</div>
<div>bzip2が必要らしいので、先にインストールします。</div>
</div>
<blockquote class="webkit-indent-blockquote"><div>
<div>&nbsp;yum install bzip2-devel</div>
</div>
</blockquote>
<p>
<blockquote class="webkit-indent-blockquote">
<div>
<div>&nbsp;wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.44.tar.gz</div>
</div>
<div>
<div>&nbsp;tar zxvf tokyocabinet-1.4.44.tar.gz</div>
</div>
<div>
<div>&nbsp;cd tokyocabinet-1.4.44</div>
</div>
<div>
<div>&nbsp;./configure</div>
</div>
<div>
<div>&nbsp;make</div>
</div>
<div>
<div>&nbsp;make install</div>
</div>
</blockquote>
<div>
<div></div>
<div>
<div>■ MessagePack for C++ のインストール</div>
</div>
</div>
<blockquote class="webkit-indent-blockquote"><div>
<div>
<div>&nbsp;wget http://downloads.sourceforge.net/project/msgpack/msgpack/cpp/msgpack-0.5.0.tar.gz</div>
</div>
</div>
<div>
<div>
<div>&nbsp;tar zxvf msgpack-0.5.0.tar.gz</div>
</div>
</div>
<div>
<div>
<div>&nbsp;cd msgpack-0.5.0</div>
</div>
</div>
<div>
<div>
<div>&nbsp;./configure</div>
</div>
</div>
</blockquote>
<div>
<div>
<div></div>
<div>以下のエラーが出たので、CFLAGSとCXXFLAGSを指定</div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</div>
<div>configure: error: __sync_* atomic operations are not supported.</div>
<div></div>
<div>Note that gcc &lt; 4.1 is not supported.</div>
<div></div>
<div>If you are using gcc &gt;= 4.1 and the default target CPU architecture is &#8220;i386&#8243;, try to</div>
<div>add CFLAGS=&#8221;&#8211;march=i686&#8243; and CXXFLAGS=&#8221;-march=i686&#8243; options to ./configure as follows:</div>
<div></div>
<div>&nbsp;&nbsp;$ ./configure CFLAGS=&#8221;-march=i686&#8243; CXXFLAGS=&#8221;-march=i686&#8243;</div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</div>
<div></div>
</div>
</div>
<blockquote class="webkit-indent-blockquote"><div>
<div>
<div>&nbsp;./configure CFLAGS=&#8221;-march=i686&#8243; CXXFLAGS=&#8221;-march=i686&#8243;</div>
</div>
</div>
<div>
<div>
<div>&nbsp;make</div>
</div>
</div>
<div>
<div>
<div>&nbsp;make install</div>
</div>
</div>
</blockquote>
<div>
<div>
<div></div>
<div>■ MessagePack for Rubyのインストール</div>
<div>gemでインストールします</div>
</div>
</div>
<blockquote class="webkit-indent-blockquote"><div>
<div>
<div>&nbsp;gem install msgpack</div>
</div>
</div>
</blockquote>
<div>
<div>
<div></div>
<div>ここまで準備が出来たら、kumofsのインストール。</div>
<div></div>
<div>
<div>■kumofsのインストール</div>
</div>
</div>
</div>
<blockquote class="webkit-indent-blockquote"><div>
<div>
<div>
<div>&nbsp;wget http://github.com/downloads/etolabo/kumofs/kumofs-0.4.2.tar.gz</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>&nbsp;tar zxvf kumofs-0.4.2.tar.gz</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>&nbsp;cd kumofs-0.4.2</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>&nbsp;./configure</div>
</div>
</div>
</div>
</blockquote>
<div>
<div>
<div>
<div></div>
<div>ここでまたまたエラー発生。</div>
<div></div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</div>
<div>configure: error: __sync_* atomic operations are not supported.</div>
<div></div>
<div>Note that gcc &lt; 4.1 is not supported.</div>
<div></div>
<div>If you are using gcc &gt;= 4.1 and the default target CPU architecture is &#8220;i386&#8243;, try to</div>
<div>add CFLAGS=&#8221;&#8211;march=i686&#8243; and CXXFLAGS=&#8221;-march=i686&#8243; options to ./configure as follows:</div>
<div></div>
<div>&nbsp;&nbsp;$ ./configure CFLAGS=&#8221;-march=i686&#8243; CXXFLAGS=&#8221;-march=i686&#8243;</div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</div>
<div></div>
<div>MessagePack同様、CFLAGSとCXXFLAGSを指定します。</div>
</div>
</div>
</div>
<blockquote class="webkit-indent-blockquote"><div>
<div>
<div>
<div>&nbsp;./configure CFLAGS=&#8221;-march=i686&#8243; CXXFLAGS=&#8221;-march=i686&#8243;</div>
</div>
</div>
</div>
</blockquote>
<div>
<div>
<div>
<div></div>
<div>すると今度はopensslのエラーが！</div>
<div>ということで、先にopensslをインストールすることに</div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</div>
<div>configure: error: Can&#8217;t find openssl header</div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</div>
<div></div>
<div>■opensslのインストール</div>
</div>
</div>
</div>
<blockquote class="webkit-indent-blockquote"><div>
<div>
<div>
<div>&nbsp;yum install openssl-devel</div>
</div>
</div>
</div>
</blockquote>
<div>
<div>
<div>
<div></div>
<div>
<div>■kumofsのインストール（再開）</div>
<div>opensslがインストールできたので、再度configureを実行します。</div>
<div></div>
</div>
</div>
</div>
</div>
<blockquote class="webkit-indent-blockquote"><div>
<div>
<div>
<div>&nbsp;./configure CFLAGS=&#8221;-march=i686&#8243; CXXFLAGS=&#8221;-march=i686&#8243;</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>&nbsp;make</div>
</div>
</div>
</div>
<div>
<div>
<div>
<div>&nbsp;make install</div>
</div>
</div>
</div>
</blockquote>
<div>
<div>
<div>
<div></div>
<div>無事、インストール完了。</div>
<div></div>
<div>早速managerを起動してみます。</div>
<div></div>
</div>
</div>
</div>
<blockquote class="webkit-indent-blockquote"><div>
<div>
<div>
<div>kumo-manager -v</div>
</div>
</div>
</div>
</blockquote>
<div>
<div>
<div>
<div></div>
<div>するとまたまたエラーが･･･</div>
<div></div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</div>
<div>kumo-manager: error while loading shared libraries: libtokyocabinet.so.9: cannot open shared object file: No such file or directory</div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</div>
<div></div>
<div>パスが通っていないようなので、exportでパスを通します。</div>
<div></div>
</div>
</div>
</div>
<blockquote class="webkit-indent-blockquote"><div>
<div>
<div>
<div>export LD_LIBRARY_PATH=/usr/local/lib</div>
</div>
</div>
</div>
</blockquote>
<div>
<div>
<div></div>
<div>再度、起動。。。</div>
<div></div>
</div>
</div>
<blockquote class="webkit-indent-blockquote"><div>
<div>
<div>kumo-manager -v -l localhost</div>
</div>
</div>
</blockquote>
<div></div>
<p>無事起動できました。
<div></div>
<div><span class="mt-enclosure mt-enclosure-image" style="margin-top: 0px;margin-right: 0px;margin-bottom: 0px;margin-left: 0px;border-top-width: 0px;border-right-width: 0px;border-bottom-width: 0px;border-left-width: 0px;border-style: initial;border-color: initial;padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;font-size: 1em;font-weight: normal"><img alt="kumofs.jpg" src="http://www.kdl.co.jp/assets_c/2010/05/kumofs-thumb-450x131-302.jpg" width="450" height="131" class="mt-image-none" style="border-top-width: 0px;border-right-width: 0px;border-bottom-width: 0px;border-left-width: 0px;border-style: initial;border-color: initial;border-style: initial;border-color: initial" /></span>
<div>
<div>
<div></div>
<div>次にserverを起動。</div>
<div></div>
</div>
</div>
</div>
<blockquote class="webkit-indent-blockquote"><div>
<div>
<div>
<div>kumo-server -v -l localhost:19802 -m localhost -s /var/kumodv.tch</div>
</div>
</div>
</div>
</blockquote>
<div>
<div>
<div>
<div></div>
<div><span class="mt-enclosure mt-enclosure-image"><img alt="kumofs2.jpg" src="http://www.kdl.co.jp/assets_c/2010/05/kumofs2-thumb-450x114-304.jpg" width="450" height="114" class="mt-image-none" /></span></div>
</div>
</div>
</div>
<div></div>
<div>serverも無事起動できたので、</div>
<div>起動したserverをmanagerに登録します。</div>
<div></div>
<blockquote class="webkit-indent-blockquote"><div>kumoctl localhost status</div>
</blockquote>
<div></div>
<div>すると、</div>
<div></div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</div>
<div>ruby: symbol lookup error: /usr/lib/ruby/gems/1.8/gems/msgpack-0.3.9/lib/msgpack.so: undefined symbol: RARRAY_LEN</div>
<div>
<div>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</div>
<div></div>
<div>とエラーが。。。</div>
<div></div>
<div>どうやらruby1.8.5が問題らしい。</div>
<div>ruby1.8.6にアップグレードしたいところですが、インストールしようとしているサーバは</div>
<div>案件でrubyを使用しているため、アップグレードできない・・・</div>
<div></div>
<div>ということで、kumofsのインストールはここで断念しました。</div>
<div>あと少しで動作するところまで来たのに無念です。。。</div>
<div></div>
<div>他のサーバでもう一度試してみるかな～</div>
<div></div>
<div>wrote by S.M.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.kdl.co.jp/open/2010/05/18/kumofs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

