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

<channel>
	<title>ディノオープンラボラトリ</title>
	<atom:link href="http://openlab.dino.co.jp/feed" rel="self" type="application/rss+xml" />
	<link>http://openlab.dino.co.jp</link>
	<description>株式会社ディノ社員による技術メモ</description>
	<pubDate>Tue, 18 May 2010 06:03:31 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://openlab.dino.co.jp/feed" />
		<item>
		<title>autotest で Symfony + Lime を自動テストする</title>
		<link>http://openlab.dino.co.jp/2010/05/13/144546693.html</link>
		<comments>http://openlab.dino.co.jp/2010/05/13/144546693.html#comments</comments>
		<pubDate>Thu, 13 May 2010 05:45:46 +0000</pubDate>
		<dc:creator>sou</dc:creator>
		
		<category><![CDATA[Mac OS X]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[開発環境]]></category>

		<guid isPermaLink="false">http://openlab.dino.co.jp/?p=693</guid>
		<description><![CDATA[

ruby 界隈でよく使われている自動テストツール autotest の Symfony + Lime 用スタイルを書いて公開しました。
  プロジェクトのローカルルールに合わせてあるのですが、軽く手を入れれば他のプロ [...]]]></description>
			<content:encoded><![CDATA[<p>
<img src="http://openlab.dino.co.jp/wp-content/uploads/2010/05/screen-shot-2010-05-12-at-140931-300x111.png" alt="screen-shot-2010-05-12-at-140931" width="300" height="111" class="size-medium wp-image-695" /><br />
ruby 界隈でよく使われている自動テストツール autotest の Symfony + Lime 用スタイルを書いて公開しました。<br />
  プロジェクトのローカルルールに合わせてあるのですが、軽く手を入れれば他のプロジェクトでも、また Symfony や PHP 以外でも使えると思います。
</p>
<ul>
<li>TDD で書いていないと不安が高じて動悸と息切れが始まる</li>
<li>red-green-refactoring を唱えなさいとじっちゃに言われた</li>
<li>growl の red を見ないとコードが先に進まない</li>
</ul>
<p>よくある話だと思います。<br />
  まずテストが無いと何も始まらない！書いたテストはがんがん自動実行して使い倒したい！<br />
となるとやはり、自動テストの出番ですね。
</p>
<p><span id="more-693"></span></p>
<h3>インストール手順</h3>
<p>
  autotest コマンドをインストールします。rspec + autotest + インストール辺りでぐぐってください。<br />
  mac の人は autotest-fsevent を一緒にぶち込んでおくと良いのですが、<a href="http://github.com/svoop/autotest-fsevent" title="svoop's autotest-fsevent at master - GitHub">fsevent</a>の README により軽量な autotest コマンドのインストールガイドがあったのでそちらを参考にするのが良いかも知れません。<br />
  （RSpec2 beta + Rails 3 beta で偶然か動作しなかったため、私は ZenTest を継続利用中です）
</p>
<p>
  続いて <a href="http://github.com/sousk/autotest-any" title="sousk's autotest-any at master - GitHub">autotest-any</a>をローカルに落とします。<br />
  gem 化してません。サボってます。
</p>
<p>
  Symfony プロジェクトのルートディレクトリに移動し、autotest 用のディレクトリ autotest と設定ファイル .autotest を作成します。<br />
  ファイル群は autotest-ary/example 以下にあります。<br />
  ここで作成、配置するファイルはプロジェクトに応じて随時カスタマイズします。
</p>
<pre>
autotest
|-- dinolimetest_php.rb
`-- discover.rb
.autotest
</pre>
<p>
  .autotest を適宜書き換えてください。
</p>
<h3>挙動とカスタマイズ</h3>
<p>
  autotest はファイルとテストを対で覚えており、ファイルが更新されるとそれに該当するテストをテストコマンドに渡し、自動実行を行います。<br />
  $target_patterns はその監視対象とするファイルを指定するための正規表現集合です。<br />
  $exception_patterns はその通り、テスト実行や監視から外したいファイルを指定するための正規表現集合です。
</p>
<p>
  監視対象ファイルとテストファイルを結びつけているのは次の部分です。
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">at.<span style="color:#9900CC;">add_mapping</span><span style="color:#006600; font-weight:bold;">&#40;</span>$target_patterns<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>filename, _<span style="color:#006600; font-weight:bold;">|</span>
  testfiles = <span style="color:#006600; font-weight:bold;">&#91;</span>
    at.<span style="color:#9900CC;">find_local_unit_test</span><span style="color:#006600; font-weight:bold;">&#40;</span>filename<span style="color:#006600; font-weight:bold;">&#41;</span>,
    at.<span style="color:#9900CC;">find_local_functional_test</span><span style="color:#006600; font-weight:bold;">&#40;</span>filename<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#006600; font-weight:bold;">&#93;</span>;
&nbsp;
  <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;src: #{filename}  -&amp;gt;  test: #{testfiles.join(', ')}&quot;</span>
  testfiles
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>
  filename は監視対象となるファイルのパスです。　<br />
  find_local_*_test(filename) により対となるテストファイルのパスを決定しています。　<br />
  弊社の、某プロジェクトのメンバーには便利なメソッドだと思います。<br />
  メソッドの中身は簡単な正規表現なので、ここでさくさくっと書いてしまうのも良いと思います。
</p>
<h3>red-green できゃっきゃうふふする</h3>
<p>
  あとは symfony のプロジェクトルートで autotest を実行するだけです。
</p>
<pre>
/Users/sou_sk/work/project/working% autotest
loading autotest/dinolimetest_php
style: DinolimetestPhp
src: lib/model/JobQueue/JqProcPeer.php  -&gt;  test: test/unit/lib/model/JobQueue/JqProcPeerUnitTest.php, test/functional/lib/model/JobQueue/JqProcPeerFunctionalTest.php
src: lib/model/JobQueue/JqJob.php  -&gt;  test: test/unit/lib/model/JobQueue/JqJobUnitTest.php, test/functional/lib/model/JobQueue/JqJobFunctionalTest.php
src: lib/proc/ProcTest.class.php  -&gt;  test: test/unit/lib/proc/ProcTestUnitTest.php, test/functional/lib/proc/ProcTestFunctionalTest.php
src: lib/model/JobQueue/JqJobPeer.php  -&gt;  test: test/unit/lib/model/JobQueue/JqJobPeerUnitTest.php, test/functional/lib/model/JobQueue/JqJobPeerFunctionalTest.php
src: lib/model/JobQueue/JqProc.php  -&gt;  test: test/unit/lib/model/JobQueue/JqProcUnitTest.php, test/functional/lib/model/JobQueue/JqProcFunctionalTest.php
src: lib/proc/ProcBase.class.php  -&gt;  test: test/unit/lib/proc/ProcBaseUnitTest.php, test/functional/lib/proc/ProcBaseFunctionalTest.php
src: lib/model/JobQueue/JqTask.php  -&gt;  test: test/unit/lib/model/JobQueue/JqTaskUnitTest.php, test/functional/lib/model/JobQueue/JqTaskFunctionalTest.php
src: lib/model/JobQueue/JqTaskPeer.php  -&gt;  test: test/unit/lib/model/JobQueue/JqTaskPeerUnitTest.php, test/functional/lib/model/JobQueue/JqTaskPeerFunctionalTest.php
src: lib/proc/ProcHaveALunch.class.php  -&gt;  test: test/unit/lib/proc/ProcHaveALunchUnitTest.php, test/functional/lib/proc/ProcHaveALunchFunctionalTest.php
php test/unit/lib/model/JobQueue/JqJobPeerUnitTest.php &amp;&amp; echo "----------------------" &amp;&amp; php test/functional/lib/proc/ProcHaveALunchFunctionalTest.php &amp;&amp; echo "----------------------" &amp;&amp; php test/functional/lib/model/JobQueue/JqProcPeerFunctionalTest.php &amp;&amp; echo "----------------------" &amp;&amp; php test/unit/lib/model/JobQueue/JqProcPeerUnitTest.php
</pre>
<p>
  といった形でテストが走ってくれれば成功です。<br />
  src: .. -&gt; test: .. はデバッグ用に表示しており、全ての監視対象ファイルとテストファイルを列挙しています。<br />
  最終ラインに表示されているのは実行コマンドで、ここに現れない場合はテストファイルが存在しない（パスが違う）可能性が濃厚です。<br />
  また autotest コマンドがぱたっと終了してしまう場合は、add_mapping のブロック内で何らかのエラーが発生している可能性を疑ってみてください。
</p>
<p>
  スクリーンが二面あるともっと幸せになれます。<br />
  ちなみに私は Dell の縦回転するディスプレイを用意して自動テストのログをだらだらと表示し、もう片面をテキストエディタで埋めてコーディングに没頭するのが好きです。ヘンな脳内麻薬が出てきますよ。お勧めです！<br />
  TextMate のようなショートカットからコマンドを実行出来るエディタ + AppleScript を使うとブラウザのリフレッシュまでコマンド一発、スクリーン固定で出来るのでもっとお勧めです。
</p>
<p>
  余談ついでに、autotest のような監視＆実行を行うツールとしては他に<br />
  <a href="http://github.com/mynyml/watchr" title="mynyml's watchr at master - GitHub">wathcr</a>や<br />
  弊社高原の <a href="http://openlab.dino.co.jp/2007/08/28/1018094.html" title="ゆとり時代のプログラミング環境(watchdir編)   &#8212; ディノオープンラボラトリ">watchdir</a>があります。<br />
  autotest でうまくいかない！ もっと他の方法がいい！という人はこちらもお試しください。</p>
<p>  autotest-any を作った後に watchr に気付きました、、、今から作るなら watchr かも知れません。</p>
<p>追記:<br />
<a href="http://gist.github.com/404686">TextMate の LimeTest 実行コマンド</a>を書きました。<br />
需要ある方はご利用ください。
</p>
<p>
株式会社ディノではテストフェチな開発者を絶賛募集中しています。</p>
]]></content:encoded>
			<wfw:commentRss>http://openlab.dino.co.jp/2010/05/13/144546693.html/feed</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://openlab.dino.co.jp/2010/05/13/144546693.html" />
	</item>
		<item>
		<title>Subversionのブランチ操作をgit並に簡単にする</title>
		<link>http://openlab.dino.co.jp/2010/04/07/225425663.html</link>
		<comments>http://openlab.dino.co.jp/2010/04/07/225425663.html#comments</comments>
		<pubDate>Wed, 07 Apr 2010 13:54:25 +0000</pubDate>
		<dc:creator>tumf</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://openlab.dino.co.jp/?p=663</guid>
		<description><![CDATA[svnとgit両方使うようになりました。するとgitの便利さに感嘆する一方、svnのブランチ操作の面倒臭さが際立ってきました。特に、ブランチ操作ではgitは素晴らしく例えば以下のような例をご覧いただくとその差は一目瞭然か [...]]]></description>
			<content:encoded><![CDATA[<p>svnとgit両方使うようになりました。するとgitの便利さに感嘆する一方、svnのブランチ操作の面倒臭さが際立ってきました。特に、ブランチ操作ではgitは素晴らしく例えば以下のような例をご覧いただくとその差は一目瞭然かと思います。</p>
<p>ブランチ一覧を得る</p>
<pre>
git branch
</pre>
<pre>
svn list http://example.com/svn/branches
</pre>
<p>ブランチを作る</p>
<pre>
git branch mybranch
</pre>
<pre>
svn cp http://example.com/svn/trunk http://example.com/svn/branches/mybranch -m 'create mybranch from trunk'
</pre>
<p>以上のように、svnはブランチをブランチとして扱っていないためとても面倒なコマンドを打たなくてはなりません。これではとてもsvnのブランチなんて使ってられないのでとっととgitに移動したいところです。しかしながら、諸処の都合によりまだ、しばらくは両方使い続けなくてはならないため、svnのブランチ操作を簡単にする、svnbrというRubyスクリプトを書きました。</p>
<p><span id="more-663"></span></p>
<p>ソース: <a href="http://github.com/tumf/svn-utils/blob/master/svnbr" target="_blank">http://github.com/tumf/svn-utils/blob/master/svnbr</a></p>
<p>このスクリプトが利用出来るのは、/branches以下にブランチを作って/tags以下にタグを作る人向けです。殆どの人がこの構成を使っているはずですが、svnはこれ以外のパスにも自由にブランチやタグを作れますので（というより、タグとブランチの区別がない）ご注意ください。</p>
<p>使い方をざっと説明します。svnbrはすべてワーキングディレクトリの上で実行します。まず、何もつけずに実行するとブランチの一覧を表示します。</p>
<pre>
$ svnbr
mybranch-1.2
mybranch-2.x
*trunk
</pre>
<p>頭に*がついているブランチが現在のワーキングディレクトリのブランチです。svnbrでは、例外的に/trunkもブランチと同じ扱いをします。</p>
<p>次に、他のブランチにswitchしてみます。</p>
<pre>
$ svnbr sw mybranch-1.2
</pre>
<p>これは以下のコマンドを実行するのと同義です。</p>
<pre>
svn sw http://example.com/svn/branches/mybranch-1.2
</pre>
<p>もしsw先のブランチがなかったときはsvnのswと異なった挙動をします。</p>
<pre>
$ svnbr sw mybranch-1.3
</pre>
<p>これは以下のsvnコマンドと同義です。</p>
<pre>
svn cp http://example.com/svn/branches/mybranch-1.2 http://example.com/svn/branches/mybranch-1.3 ¥
-m 'make mybranch-1.3 branch from mybranch-1.2'
svn sw  http://example.com/svn/branches/mybranch-1.3
</pre>
<p>上記のように、現在のワーキングディレクトリのブランチをコピーしてsw先のブランチ作成し、swします。</p>
<p>以下のようにして、タグからブランチを作ることもできます。</p>
<pre>
$ svnbr sw mybranch-1.2 --from-tag=VERSION-1.2.3
</pre>
<p>mybranch-1.2をtrunkへマージするときも、svnコマンドと同様にできます。</p>
<pre>
$ svnbr sw trunk
$ svnbr merge mybranch-1.2 -c 4,5
</pre>
<p>いらなくなったブランチを消すには</p>
<pre>
$ svnbr rm mybranch-1.2
</pre>
<p>他にも、logを見る時には以下のようにします。</p>
<pre>
$ svnbr log mybranch-1.2
</pre>
<p>これは、以下のように&#8211;stop-on-copyをつけて実行します。</p>
<pre>
svn --stop-on-copy http://example.com/svn/branches/mybranch-1.2
</pre>
<p>ブランチのリネーム</p>
<pre>
$ svnbr mv mybranch-1.2 mybranch-1.3
</pre>
<p>これは、以下のように実行します。</p>
<pre>
svn mv http://example.com/svn/branches/mybranch-1.2 http://example.com/svn/branches/mybranch-1.3　¥
-m 'move branch mybranch-1.2 to mybranch-1.3'
</pre>
<p>以上のように、ざっくり作ったスクリプトなんで不具合等ありましたら申し訳ありません。<br />
githubにおいてあるので、是非forkして改良してくださいね。</p>
]]></content:encoded>
			<wfw:commentRss>http://openlab.dino.co.jp/2010/04/07/225425663.html/feed</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://openlab.dino.co.jp/2010/04/07/225425663.html" />
	</item>
		<item>
		<title>rsyncの-Cオプションの指示を上書きする</title>
		<link>http://openlab.dino.co.jp/2010/03/31/213840657.html</link>
		<comments>http://openlab.dino.co.jp/2010/03/31/213840657.html#comments</comments>
		<pubDate>Wed, 31 Mar 2010 12:38:40 +0000</pubDate>
		<dc:creator>hnw</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://openlab.dino.co.jp/?p=657</guid>
		<description><![CDATA[rsyncの-Cまたは--cvs-excludeオプションって便利ですよね。これは、下記のファイル・ディレクトリを転送対象から外す設定です。

                     RCS  SCCS  CVS  C [...]]]></description>
			<content:encoded><![CDATA[<p>rsyncの<code>-C</code>または<code>--cvs-exclude</code>オプションって便利ですよね。これは、下記のファイル・ディレクトリを転送対象から外す設定です。</p>
<blockquote><p>
                     RCS  SCCS  CVS  CVS.adm   RCSLOG   cvslog.*   tags   TAGS<br />
                     .make.state  .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak<br />
                     *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so  *.exe<br />
                     *.Z *.elc *.ln core .svn/ .git/ .bzr/
</p></blockquote>
<p>転送すると問題になりがちなファイルを転送対象から外せるので、普段はとても便利です（よく見るとEmacsユーザーにしか影響の無いファイル*.elcも混ざってますね）。でも、「上記のうち*.soだけは転送したい」なんて時はどうすればいいんでしょうか。</p>
<p>解決方法は色々あると思いますが、私はrsyncのオプションに「<code>--include-from=rsync_include.txt</code>」を追加し、rsync_include.txtを下記の内容で作成しました。</p>
<blockquote><p>*.so</p></blockquote>
<p>これで-Cにより他のファイルを転送しないままで*.soだけ転送するようにできます。バイナリ配布されている共有ライブラリをデプロイしたい状況で上記のように対処したので、小ネタとして記録しておきます。</p>
]]></content:encoded>
			<wfw:commentRss>http://openlab.dino.co.jp/2010/03/31/213840657.html/feed</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://openlab.dino.co.jp/2010/03/31/213840657.html" />
	</item>
		<item>
		<title>jquery.mockAjax でサーバ待ちしないさくさく開発を</title>
		<link>http://openlab.dino.co.jp/2010/02/10/150946638.html</link>
		<comments>http://openlab.dino.co.jp/2010/02/10/150946638.html#comments</comments>
		<pubDate>Wed, 10 Feb 2010 06:09:46 +0000</pubDate>
		<dc:creator>sou</dc:creator>
		
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://openlab.dino.co.jp/?p=638</guid>
		<description><![CDATA[
ディノ日本酒調達部員の sou です。こんにちは。 今日はAjax開発に便利なjQueryプラグインを紹介します。


ディノも昨年から JavaScript 案件が増えており、本格的な JavaScript アプリケ [...]]]></description>
			<content:encoded><![CDATA[<p>
ディノ日本酒調達部員の sou です。こんにちは。 今日はAjax開発に便利なjQueryプラグインを紹介します。
</p>
<p>
ディノも昨年から JavaScript 案件が増えており、本格的な JavaScript アプリケーションも実装するようになってきました。ただ、サーバサイドのみの開発に比べるとXMLHttpRequest経由でサーバサイドとのつなぎ込みが発生するので、問題の切り分けや実装スケジュール調整など難しい点もあるのではないでしょうか。
</p>
<p>
そんな時には <a href="http://github.com/sousk/jquery.mockAjax">jquery.mockAjax プラグイン</a>が便利です。
</p>
<p><span id="more-638"></span></p>
<h3>
  概要<br />
</h3>
<p>
これを使うと $.ajax のリクエスト先を条件に従い振り分ける事が出来、スクリプトや HTML の書き換え無しにサーバ側への通信をカットし、<br />
ローカルファイルで用意した JSON や HTML フラグメントを代わりに持ってくる事が出来ます。
</p>
<p>
小さい＆単純なコードですが、これでサーバ側の実装に依存せずクライアント開発をさくさく進める事が出来ます。
</p>
<p>
また、クライアントとサーバ側の開発担当を分けるような場面でも、クライアント側が期待するレスポンスを具体的な JSON  として示すことが出来るので話が早く進んだり、<br />
開発中のサーバに接続出来ない環境でのデモを見せる際など、方々に活躍、、していた気がします！
</p>
<h3>
  使い方<br />
</h3>
<p>
  使い方は簡単、
</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$.<span style="color: #660066;">mockAjax</span><span style="color: #009900;">&#40;</span>
  <span style="color: #009900;">&#123;</span>
    cond<span style="color: #339933;">:</span> <span style="color: #009966; font-style: italic;">/\/search\?.*q=no_result/</span><span style="color: #339933;">,</span>
    method<span style="color: #339933;">:</span> <span style="color: #3366CC;">'get'</span><span style="color: #339933;">,</span>
    url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'/pseudo_data/search_response_no_result.json'</span>
  <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
  <span style="color: #009900;">&#123;</span>
    cond<span style="color: #339933;">:</span> <span style="color: #3366CC;">'/map/search?q'</span><span style="color: #339933;">,</span>
    method<span style="color: #339933;">:</span> <span style="color: #3366CC;">'get'</span><span style="color: #339933;">,</span>
    url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'/pseudo_data/search_response.json'</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>
  のように引数の JSON で設定を与えます。 <br />
  リクエスト先 URL が cond の正規表現と method にマッチした場合、url に置き換えられます。 <br />
  検索語句によってレスポンスを変えたい！と言った場合にも、上記のようにして対応しています。
</p>
<p>
  興味を持たれた方は是非一度お試しください。 「他にこんなやり方もあるぜ！」といったツッコミ、情報もお待ちしております。
</p>
<p>
株式会社ディノではエンジニアを絶賛募集中です。</p>
]]></content:encoded>
			<wfw:commentRss>http://openlab.dino.co.jp/2010/02/10/150946638.html/feed</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://openlab.dino.co.jp/2010/02/10/150946638.html" />
	</item>
		<item>
		<title>Go For C++ Programmers #Conceptual Differences の勝手に和訳</title>
		<link>http://openlab.dino.co.jp/2009/11/11/231252628.html</link>
		<comments>http://openlab.dino.co.jp/2009/11/11/231252628.html#comments</comments>
		<pubDate>Wed, 11 Nov 2009 14:12:52 +0000</pubDate>
		<dc:creator>tumf</dc:creator>
		
		<category><![CDATA[C++]]></category>

		<category><![CDATA[lang]]></category>

		<guid isPermaLink="false">http://openlab.dino.co.jp/?p=628</guid>
		<description><![CDATA[たかはらです。
Googleが新しいプログラム言語を発表しました。早速プログラムされている方(1 2)とか尊敬します。最近はご無沙汰ですが、C++最強説を今だに唱え続ける自分としてはGo For C++ Programm [...]]]></description>
			<content:encoded><![CDATA[<p>たかはらです。</p>
<p>Googleが新しいプログラム言語を発表しました。早速プログラムされている方(<a href="http://d.hatena.ne.jp/amachang/20091111/1257928890" target="_blank">1</a> <a href="http://d.hatena.ne.jp/moriyoshi/20091111/1257929640" target="_blank">2</a>)とか尊敬します。最近はご無沙汰ですが、C++最強説を今だに唱え続ける自分としては<a href="http://golang.org/doc/go_for_cpp_programmers.html" target="_blank">Go For C++ Programmers</a>のようなドキュメントをみるとうれしくなってしまいまして、<a href="http://golang.org/doc/go_for_cpp_programmers.html" target="_blank">Go For C++ Programmers</a>の最初の&#8221;Conceptual Differences&#8221;部分を勝手に和訳しました。権利的に問題があれば削除します。</p>
<p>適当に訳したので致命的な誤訳はありそうです。コメント欄で指摘頂けるとありがたいです。</p>
<p>以下、訳となります。</p>
<p><span id="more-628"></span>GoはC++のような汎用システム用のプログラム言語を目指しています。C++プログラマ向けにいくつかの注意点があります。このドキュメントでは、GoとC++の違いについて説明する事であまり違わない事が判るよ。</p>
<p>Goのもっと一般的な紹介は、&#8221;Go tutorial&#8221;や&#8221;Effective Go&#8221;を見てくださいね。</p>
<p>Goの細かい仕様を知りたいなら、&#8221;Go spec&#8221;をみてね。</p>
<p><strong>GoとC++の概念的な違い:</strong></p>
<ul>
<li>Goにはコンストラクタやデストラクタをもったクラスはないよ。クラスメソッド・階層的なクラスの継承・仮想関数の替わりにGoにはこの後に詳しく説明するインターフェイスがあるよ。インターフェイスはC++でいうとテンプレートみたいなものだ。</li>
<li>Goはガベージコレクションを使うよ。メモリーを明確にリリースする事は必要ないよ。ガベージコレクションは最近のプロセッサーではますます効果的になっているよ。</li>
<li>GOはポインターを持ってるけど、加減算はできないよ。文字列の各バイトを順に調べるのにポインタの値を使う事はできないよ。</li>
<li>Goの配列は<em>ファーストクラスの値</em>です。配列が関数のパラメータとしてつかわれると、関数は配列のポインター(参照)ではなくコピーを受け取るよ。しかしながら、実用的な関数では、よくパラメータにスライスが使われるよ。スライスは配列の元になるポインタをもっているよ。スライスについてはあとで説明するね。</li>
<li>文字列が言語の機能にあるよ。文字列は生成されてから変更されないよ。</li>
<li>ハッシュテーブルも言語の機能にあるよ。これらはマップと呼ばれているよ。</li>
<li>チャンネルというスレッド間通信も言語の機能にあるよ。これについてはあとで説明するね。</li>
<li>いくつかの型(map, channel, etc.)は値渡しではなく参照で渡されるよ。つまり、マップは関数に渡される時にコピーされないし、関数の中で変更されると、呼び出し側も変わるよ。C++でいうと参照型ですね。</li>
<li>Goはヘッダファイルを使わないよ。かわりに、それぞれのソースファイルは定義されたパッケージの一部になるよ。パッケージが大文字から始まる名前のオブジェクト(型,定数,変数,関数)として定義されると、そのオブジェクトはそのパッケージをインポートした他のファイルからも見えるようになるよ。</li>
<li>Go は 暗黙の型変換はしないよ。異なる型の変換にはキャストが必要ですよ（Goではコンバージョンとよびます）</li>
<li>Go は関数のオーバーロードやユーザが定義できる演算子はないよ。</li>
<li>Go にはconst や volatile制約はないよ。</li>
<li>C++ではNULLや0だったけど、Go無効なポインタにはnilを使うよ。</li>
</ul>
<p>以上：</p>
<p>あれ、C++ と <a href="http://www.boost.org/" target="_blank">Boost</a> の組み合わせってやっぱ最強ですか。</p>
<hr />追記1: 2009-11-12 20:27 tokuhiromさんのご指摘によりfirst class value を修正しました。多謝。</p>
<p>追記2: <a href="http://d.hatena.ne.jp/propella/20091111/p1" target="_blank">#interfaceの和訳</a>を発見しました！。つづきはこちらで<br />
ならって本稿のタイトルも修正しました。</p>
]]></content:encoded>
			<wfw:commentRss>http://openlab.dino.co.jp/2009/11/11/231252628.html/feed</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://openlab.dino.co.jp/2009/11/11/231252628.html" />
	</item>
		<item>
		<title>株式会社ディノの中途採用について</title>
		<link>http://openlab.dino.co.jp/2009/07/17/230007579.html</link>
		<comments>http://openlab.dino.co.jp/2009/07/17/230007579.html#comments</comments>
		<pubDate>Fri, 17 Jul 2009 14:00:07 +0000</pubDate>
		<dc:creator>hnw</dc:creator>
		
		<category><![CDATA[お知らせ]]></category>

		<guid isPermaLink="false">http://openlab.dino.co.jp/?p=579</guid>
		<description><![CDATA[
株式会社ディノでは技術者の中途採用を随時行っています。いま現在も一緒に仕事する仲間を募集しています。本記事では、採用の方針や採用フローのご紹介をさせて頂きます。

募集するエンジニアについて

ディノではプログラミング [...]]]></description>
			<content:encoded><![CDATA[<p>
株式会社ディノでは技術者の中途採用を随時行っています。いま現在も一緒に仕事する仲間を募集しています。本記事では、採用の方針や採用フローのご紹介をさせて頂きます。
</p>
<h3>募集するエンジニアについて</h3>
<p>
ディノではプログラミング・データベース・サーバ管理などの分野について一家言あるようなエンジニアを募集しています。ディノは社長が技術者ということもあり、技術指向の強いメンバーが集まっている会社だと思います。これは本ブログの内容からも見て取れるのではないでしょうか。
</p>
<p>
弊社ではプログラミング言語としてPHPを採用していますが、プログラミング言語の知識はそれほど重視していません。Webで複数人での開発を経験されている方なら、言語の知識は大して重要ではないと考えています。また、多少経験が足りなくても熱意のある方なら大歓迎です。入社後にはsymfonyを利用してWeb+DBシステム構築のプロジェクトに参加して頂くことになります。
</p>
<p>
サーバ・ネットワークまわりに特化したエンジニアも募集しています。サーバ周りでは仮想化技術に特に注力していますので、面白そうな会社だと思った方はぜひ一度面接にいらしてください。
</p>
<p><span id="more-579"></span></p>
<h3>面接の流れと内容</h3>
<p>
<a href="http://www.dino.co.jp/recruit/">採用情報</a>からエントリーしてください。担当者が面接の日時を調整いたします。
</p>
<p>
1次面接では、技術面に関してお伺いします。技術力だけで仕事をするわけではありませんが、仕事上の重要な基礎力の一つとして、現時点で獲得している知識、技術的な興味、今後伸ばして行きたい方向などをお聞きします。
</p>
<p>
過去の案件での具体的な苦労話や、案件からは少し離れた知識、最近試した面白い技術、などについて、ざっくばらんに話して頂きたいです。アピールできるような材料やエピソードを用意してきて頂けると面接がスムーズに進むと思います。
</p>
<p>
2次面接は開発部トップの役員が担当します。希望するポジションについてのすり合わせを行わせて頂きます。社内のどのチームでどう働いてもらえそうか、具体的なイメージを持てるレベルでお話させて頂きます。また、これまでの経験や実績についての話を1次面接より具体的にお聞きし、希望する条件についてもお話いただきます。
</p>
<p>
最終面接は社長の高原が担当します。お互いに長く働けそうかを確認しあった上で、最終的な条件の確認を行います。これから働いてもらう人のためにも、入社前に自分の目と肌で会社の雰囲気と社長の人となりを判断してもらいたい、というのが高原の考えです。
</p>
<p>
もし興味を持った方がいらっしゃれば是非ご応募ください。社員一同、未来の同僚を心待ちにしております。</p>
]]></content:encoded>
			<wfw:commentRss>http://openlab.dino.co.jp/2009/07/17/230007579.html/feed</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://openlab.dino.co.jp/2009/07/17/230007579.html" />
	</item>
		<item>
		<title>PHPで最小の整数を得る方法</title>
		<link>http://openlab.dino.co.jp/2009/07/14/204659612.html</link>
		<comments>http://openlab.dino.co.jp/2009/07/14/204659612.html#comments</comments>
		<pubDate>Tue, 14 Jul 2009 11:46:59 +0000</pubDate>
		<dc:creator>hnw</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://openlab.dino.co.jp/?p=612</guid>
		<description><![CDATA[
PHP 4.4.0以降およびPHP 5.0.5以降では、最大の整数が定数PHP_INT_MAXとして定義されています。


$ php -r 'var_dump(PHP_INT_MAX);'
int(214748364 [...]]]></description>
			<content:encoded><![CDATA[<p>
PHP 4.4.0以降およびPHP 5.0.5以降では、最大の整数が定数PHP_INT_MAXとして定義されています。
</p>
<pre>
$ php -r 'var_dump(PHP_INT_MAX);'
int(2147483647)
</pre>
<p>
64bit環境では次のような結果になります。
</p>
<pre>
$ php -r 'var_dump(PHP_INT_MAX);'
int(9223372036854775807)
</pre>
<p>
ところで、最小の整数が必要な場合はどうすればいいのでしょうか。実は最小の整数は定数定義されていないのですが、次のようにすれば取得できます。
</p>
<p><span id="more-612"></span></p>
<pre>
$ php -r 'var_dump(~PHP_INT_MAX);'
int(-2147483648)
</pre>
<p>
64ビット環境でも同様です。
</p>
<pre>
$ php -r 'var_dump(~PHP_INT_MAX);'
int(-9223372036854775808)
</pre>
<p>
ここで利用した~というのはビット反転した値を返す単項演算子です。<a href="http://ja.wikipedia.org/wiki/2%E3%81%AE%E8%A3%9C%E6%95%B0">2の補数表現</a>を思い出してください。
</p>
<ul>
<li>最大の整数の2進表現：0111&#8230;111</li>
<li>最小の整数の2進表現：1000&#8230;000</li>
</ul>
<p>
上記のように、最大の整数をビット反転させれば最小の整数になることがわかります。短く書けてカッコいいと感じたので紹介しました。
</p>
<p>
Web業界にいるとビット演算と縁遠くなってしまう気がしますけど、エンジニアの基礎体力の一つだと思うので、読めばわかる程度には慣れておいた方がいいと思います。
</p>
<p>
もちろん、仕事で書くなら次のように書いた方が親切かもしれません。
</p>
<pre>
$ php -r 'var_dump(-PHP_INT_MAX-1);'
int(-2147483648)
</pre>
<p>
PHP_INT_MINをdefineすれば更に親切ですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://openlab.dino.co.jp/2009/07/14/204659612.html/feed</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://openlab.dino.co.jp/2009/07/14/204659612.html" />
	</item>
		<item>
		<title>Firebugの「要素を調査」ボタンを出すと便利！</title>
		<link>http://openlab.dino.co.jp/2009/07/13/225705586.html</link>
		<comments>http://openlab.dino.co.jp/2009/07/13/225705586.html#comments</comments>
		<pubDate>Mon, 13 Jul 2009 13:57:05 +0000</pubDate>
		<dc:creator>hnw</dc:creator>
		
		<category><![CDATA[Firefox]]></category>

		<guid isPermaLink="false">http://openlab.dino.co.jp/?p=586</guid>
		<description><![CDATA[Firefoxのアドオンの中でもFirebugは便利ですよね。無いと死ぬって人も多いかと思います。ところで、このFirebugの機能の中でも「要素を調査」ボタンが便利すぎるのでご紹介します。
ここで言っている「要素を調査 [...]]]></description>
			<content:encoded><![CDATA[<p>Firefoxのアドオンの中でも<a href="https://addons.mozilla.org/ja/firefox/user/95117">Firebug</a>は便利ですよね。無いと死ぬって人も多いかと思います。ところで、このFirebugの機能の中でも「要素を調査」ボタンが便利すぎるのでご紹介します。</p>
<p>ここで言っている「要素を調査」ボタンというのは、下記のキャプチャ画像にある、ナビゲーションツールバーの眼鏡のアイコンのことです。</p>
<p><img src="http://openlab.dino.co.jp/wp-content/uploads/2009/06/firebug.png" alt="「要素を調査」ボタン" title="「要素を調査」ボタン" width="468" height="83" class="size-full wp-image-587" /></p>
<p>この眼鏡ボタンを押すとFirebugの「要素を調査」の機能が働きます。要するに、Firebugの「調査」ボタンと同じです。Firebugをインストールしたままの状態だと、ステータスバーのFirebugのアイコンを押してから「調査」を押して、と2回クリックするところが、1回クリックするだけで実行できるというのが違いです。こうして説明すると小さな差ですけど、このおかげで私の「調査」をする頻度が格段に上がった気がします。JavaScriptやCSSを触る人は「調査」する機会が多いと思いますので、この差は大きいのではないでしょうか。</p>
<p><span id="more-586"></span></p>
<p>このボタンの増やし方は簡単です。ナビゲーションツールバー上で右クリックして、「カスタマイズ」を選択すると、ナビゲーションツールバーのボタンを増減できます。ここで眼鏡ボタンをナビゲーションツールバーまでドラッグすれば完了です。インストールしているアドオンによっては他にもボタンが増やせるものがあります。</p>
<p>私の場合は<a href="https://addons.mozilla.org/ja/firefox/addon/59">User Agent Switcher</a>のボタンも出しています。これもナビゲーションバーにあると非常に便利です。User Agent Switcherに関して言うと、標準以外のUser Agnetにしているとアイコンの色が変わる（下図参照）のも気に入っています。</p>
<p><img src="http://openlab.dino.co.jp/wp-content/uploads/2009/06/ua-switcher.png" alt="User Agent Switcher" title="User Agent Switcher" width="253" height="258" class="size-full wp-image-590" /></p>
]]></content:encoded>
			<wfw:commentRss>http://openlab.dino.co.jp/2009/07/13/225705586.html/feed</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://openlab.dino.co.jp/2009/07/13/225705586.html" />
	</item>
		<item>
		<title>講習会「正規表現入門 (3)実習＆ツール紹介」を開催しました</title>
		<link>http://openlab.dino.co.jp/2009/06/30/181402503.html</link>
		<comments>http://openlab.dino.co.jp/2009/06/30/181402503.html#comments</comments>
		<pubDate>Tue, 30 Jun 2009 09:14:02 +0000</pubDate>
		<dc:creator>hnw</dc:creator>
		
		<category><![CDATA[workshop]]></category>

		<guid isPermaLink="false">http://openlab.dino.co.jp/?p=503</guid>
		<description><![CDATA[「正規表現入門 (3)実習＆ツール紹介」というタイトルで、経験2〜3年目の人をターゲットに社内勉強会を開催しました。正規表現に対して苦手意識を持っている人は多いようなので、実習を交えた形のプレゼンを試してみました。実験的 [...]]]></description>
			<content:encoded><![CDATA[<p>「正規表現入門 (3)実習＆ツール紹介」というタイトルで、経験2〜3年目の人をターゲットに社内勉強会を開催しました。正規表現に対して苦手意識を持っている人は多いようなので、実習を交えた形のプレゼンを試してみました。実験的な試みでしたが、おおむね好評だったようです。
</p>
<h3>まとめ</h3>
<ul>
<li>次の機能が使いこなせれば正規表現は怖くない！（たぶん）
<ul>
<li>グルーピング</li>
<li>繰り返し</li>
<li>後方参照</li>
</ul>
</li>
<li>正規表現作成のコツ
<ul>
<li>構造を日本語で説明できれば、正規表現が書けたも同然
<ul>
<li>例：「ドットの後に英数字2文字以上」の1回以上繰り返し</li>
</ul>
</li>
<li>「ナントカのN回繰り返し」の組み合わせを作っていく</li>
</ul>
</li>
<li>Perlは便利！</li>
</ul>
<p><span id="more-503"></span></p>
<h3>ムービー</h3>
<div align="center">
<object id="zp" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="384"><param name="movie" value="http://zoome.jp/follow-up/zpdia/p/106/16" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed type="application/x-shockwave-flash" src="http://zoome.jp/follow-up/zpdia/p/106/16" width="480" height="384" allowFullScreen="true" allowScriptAccess="always" /></object>
</div>
<h3>発表資料</h3>
<ul>
<li>
    <a href='http://openlab.dino.co.jp/wp-content/uploads/2009/04/followup-20090423.pdf' title='followup-20090423.pdf'>スライド(PDF)</a>
  </li>
</ul>
<h3>スライド中の問題</h3>
<p>
実習形式で、スライドの途中で正規表現を答える問題を出題していますが、この問題部分だけ取り出して紹介します。
</p>
<p>
これに答えられる人は出席の必要はないですよ、と事前に社内のMLに流しておいたところ、これを見て出席しなかった人もいたようです。こんな風に事前にレベルを伝えられれば、勉強会の運営もスムーズに行きそうな気がします。
</p>
<ul>
<li>Q1: 部分文字列の2回以上の繰り返しになっている文字列にマッチする正規表現は？
<ul>
<li>○：abcabcabc（３回繰り返し）</li>
<li>○：hogehoge（２回繰り返し）</li>
<li>×：hogefugahogeやhogege</li>
</ul>
</li>
<li>Q2: 3桁ごとにカンマ区切りされた数字文字列にマッチする正規表現は？
<ul>
<li>○：100や3,000,000</li>
<li>×：1,00や1000</li>
</ul>
</li>
</ul>
<h3>参考URL</h3>
<p>
スライド中で紹介している正規表現関連のツールです。
</p>
<ul>
<li><a href="http://betterthangrep.com/">ack</a>Perlで書かれたgrepモドキです</li>
<li><a href="http://hnw.jp/tools/rename.pl.txt">rename.pl</a>（赤ラクダ本に載っていたものを筆者が改造したものです。オリジナルはもっとシンプルでした）</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://openlab.dino.co.jp/2009/06/30/181402503.html/feed</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://openlab.dino.co.jp/2009/06/30/181402503.html" />
	</item>
		<item>
		<title>続・$HOME/.ssh/configを活用していますか？</title>
		<link>http://openlab.dino.co.jp/2009/05/28/235026555.html</link>
		<comments>http://openlab.dino.co.jp/2009/05/28/235026555.html#comments</comments>
		<pubDate>Thu, 28 May 2009 14:50:26 +0000</pubDate>
		<dc:creator>hnw</dc:creator>
		
		<category><![CDATA[Linux]]></category>

		<category><![CDATA[UNIX]]></category>

		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://openlab.dino.co.jp/?p=555</guid>
		<description><![CDATA[
以前の記事「$HOME/.ssh/configを活用していますか？」では、設定ファイルを少し頑張って書けば普段のSSHライフが随分変わりますよ、と紹介しました。今日はその続編です。前回よりマニアックな設定を紹介します。 [...]]]></description>
			<content:encoded><![CDATA[<p>
以前の記事「<a href="http://openlab.dino.co.jp/2007/10/03/17550797.html">$HOME/.ssh/configを活用していますか？</a>」では、設定ファイルを少し頑張って書けば普段のSSHライフが随分変わりますよ、と紹介しました。今日はその続編です。前回よりマニアックな設定を紹介します。
</p>
<ul>
<li><a href="#proxycommand">2段以上先のサーバにログインする</a></li>
<li><a href="#dynamicforward">Dynamic Forward機能を使う</a></li>
<li><a href="#wildcard">共通設定をまとめて書く</a></li>
</ul>
<p><span id="more-555"></span></p>
<h3 id="proxycommand">2段以上先のサーバにログインする</h3>
<p>
目的のサーバにログインするために、踏み台的なサーバを経由しないと入れない環境があります。例えば、dmzというサーバ経由でないとdb1 （＝192.168.0.201）というホストにログインできない環境があるとします。このような場合に、ProxyCommandパラメータが利用できます。
</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">Host db1
  HostName 192.168.0.201
  ProxyCommand ssh dmz nc %h %p</pre></div></div>

<p>
上の設定で「ssh db1」とすると、sshでdmzに接続し、dmzから192.168.0.201へログインします。これを利用するには踏み台サーバにncコマンドが必要ですが、大抵の環境にインストールされているのではないでしょうか。
</p>
<h3 id="dynamicforward">Dynamic Forward機能を使う</h3>
<p>
最近のOpenSSHには、SOCKS Proxy機能が付いています。これは、自分専用のProxyサーバをログイン先に立てるような機能です。もうすこし正確に言うと、ローカルサーバの特定ポートがSOCKSプロトコルを受け付け、ポートフォワーディング機能によりリモートサーバから通信を行うものです。
</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">Host dmz
  HostName dmz.example.com
  DynamicForward <span style="">1080</span></pre></div></div>

<p>
こうすることで、「ssh dmz」してからローカルサーバの1080番ポートとSOCKSプロトコルで話せば、dmzサーバを経由して通信を行うことができます。
</p>
<p>
SOCKSという名前を初めて聞く人もいるかもしれません。これは汎用のproxyプロトコルで、実は多くのソフトウェアが対応しています。例えばFirefoxなども対応していますので、直接アクセスできないURLにWebブラウザでアクセスしたい場合に利用できます。データセンター内のネットワーク機器のWebインターフェースや、アプリケーション開発中のWebサーバなど、これが無いと苦労する状況も多いのではないでしょうか。
</p>
<h3 id="wildcard">共通設定をまとめて書く</h3>
<p>
複数のホストに同内容の設定をしたい場合、ホスト名としてワイルドカードが指定できます。例えば、次のように全サーバ共通の設定を記述できます。
</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">Host *
  ForwardAgent yes
  ServerAliveInterval <span style="">200</span>
  ForwardX11 no</pre></div></div>

<p>
ただし、$HOME/.ssh/configファイル内で最初に出現した設定が有効になることに注意が必要です。「man ssh_config」すると以下のように書いてあります。
</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">Since the first obtained value for each parameter is used,
more host-specific declarations should be given near
the beginning of the file, and general defaults at the end.</pre></div></div>

<p>
ですから、全サーバ用の設定「Host *」は$HOME/.ssh/configの最後に書く必要があります。うっかりファイル先頭に書いてしまった場合、それ以降にホストごとの設定を書いても無効になってしまいます。
</p>
<p>
また、既に紹介したProxyCommandもワイルドカードを利用すればまとめて書くことができます。
</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">Host db1
  HostName 192.168.0.201
Host db2
  HostName 192.168.0.202
Host db?
  ProxyCommand ssh dmz nc %h %p</pre></div></div>

<p>
もしくは次のような設定も考えられます。
</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">Host dmz dmz-proxy
  HostName dmz.example.com
Host dmz2 dmz2-proxy
  HostName dmz2.example.com
Host *-proxy
  DynamicForward <span style="">1080</span></pre></div></div>

<p>
これだと、「ssh dmz」した場合は普通にログインし、「ssh dmz-proxy」したときだけSOCKS Proxyが有効になります。このようにワイルドカードを使うことで、共通の設定を一括でシンプルに記述できて便利です。
</p>
<h3>参考リンク</h3>
<ul>
<li>
    <a href="http://dsas.blog.klab.org/archives/50765770.html">DSAS開発者の部屋:OpenSSH クライアントの proxy &#8212; 踏み台サーバを経由しての ssh</a>
    </li>
<li>
    <a href="http://www.typemiss.net/blog/kounoike/20061019-100">SSH のダイナミック転送ってすごいんですよ | Typemiss.net</a>
    </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://openlab.dino.co.jp/2009/05/28/235026555.html/feed</wfw:commentRss>
		<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://openlab.dino.co.jp/2009/05/28/235026555.html" />
	</item>
	</channel>
</rss>
