<?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>SNS開発者の雑記帳</title>
	<atom:link href="http://www.synapz.jp/mrsy/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.synapz.jp/mrsy</link>
	<description></description>
	<lastBuildDate>Fri, 05 Mar 2010 02:11:21 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Railsアプリのパフォーマンスモニタ ｢New Relic｣を入れてみた</title>
		<link>http://www.synapz.jp/mrsy/2009/10/rails-new-relic/</link>
		<comments>http://www.synapz.jp/mrsy/2009/10/rails-new-relic/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 00:13:04 +0000</pubDate>
		<dc:creator>mrsy</dc:creator>
				<category><![CDATA[開発環境]]></category>
		<category><![CDATA[New Relic]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[パフォーマンス]]></category>

		<guid isPermaLink="false">http://www.synapz.jp/mrsy/2009/10/13/post59/</guid>
		<description><![CDATA[
弊社サバゲ〜るの開発では以前､開発環境にFiveRuns TuneUpをインストールしてみたことがあり､これは便利だ是非活用しようと思ったまま､なかなか手つかずの状態になっていました｡


FiveRuns TuneUpとは､Railsアプリケーションのパフォーマンスチューニングに役立つ情報を､グラフィカルに表示してくれるプラグインです｡


今回､久々にブログ更新しようと思って真っ先に思いついたのがそのFiveRuns TuneUpネタでした｡活用方法を調べようと思い､FiveRunsの本家サイトを見たら､




･Workthinkなる会社に買収されたよ､今ははそっちで新しい製品を作っているよ
･｢DASH｣というサービスは終了するのでデータをエキスポートしてね


と掲示されているページだけがあり､TuneUpプラグインはどうなるのかとか､それまで提供していたサービスについては言及されていません｡｡


TuneUpはあきらめ､類似サービスを調べたところ､masuidriveさんも利用しているという､New Relicが良さげということが分かりました｡
New Relicも TuneUp と同様に Railsアプリケーションにプラグインをインストールし､そのプラグインがNew Relic側にデータを送信し､蓄積するという仕組みです｡


料金体系は以下の通りです｡今回はお試しということでLiteアカウントを選択してみます｡





Free subscribeをクリックし､必要情報を入力し､Submitします｡
しばらくすると入力したメアドにメールが届くので､URLをクリックしアクティベーションを行います｡





アクティベーション後､Home(Myページ)にプラグインのインストール方法が載っています｡ページ上部に小さくRPM Version2が出てるよと表示されているので､せっかくなのでそれにしてみます｡





掲載されているとおりに手元の開発環境をセットアップします｡


1. Railsアプリケーションにプラグイン(Agent)を入れる
[masayuki@dev_svgr_jp /var/local/projects/svgr.jp]$ script/plugin install http://newrelic.rubyforge.org/svn/newrelic_rpm --force
+ ./CHANGELOG
+ ./LICENSE
+ ./README.md
+ ./Rakefile
+ ./bin/mongrel_rpm
+ ./bin/newrelic_cmd
+ ./cert/cacert.pem
+ ./init.rb
+ ./install.rb
+ ./lib/new_relic/agent/agent.rb
+ ./lib/new_relic/agent/chained_call.rb
-- 略 --


このプラグインが定期的に性能データをNew Relic側に送信するようです｡


2. config/newrelic.yml を作成する
HOMEからnewrelic.ymlをダウンロードし､configディレクトリに置きます｡デフォルトではproduction / staging環境のみ有効になっているので､developmentでも有効になるよう､172行目を trueにします｡


3. Railsアプリを再起動する
さて､サクッとインストールできたようなので､データが蓄積されるまで開発環境をいじっておきます｡
10分ほどいじった後､New Relicを見てみます｡


おお! どうやらデータが取得できているようです｡




My Applicationをクリックすると､概要が表示されます｡



この画面で確認できるのは､以下の通り

平均レスポンスタイム(Ruby / DB)
Apdexスコア

Apdex(Application Performance Index)とは､アプリケーションの性能を定義する標準的な指標とのこと｡

詳しくは､こちらを参照｡
スループット(request per minute ?)
ホスト毎のCPU使用率､メモリ使用量
直近のイベントノート(コメント)､デプロイ履歴など



なお､Overview以外の下記のタブは､Bronzeアカウント以上でないと見ることができません｡

Web Transaction
Database
Transaction Traces
Errors



取得したデータには､ノート(コメント)が書け､それを共有することができます｡



まとめ
FiveRuns TuneUpでは､RailsアプリのMVC毎に何ms時間が掛かっているか棒グラフで表示する非常にシンプルな機能だったのですが､New Relicは(というよりFreeアカウントでは)そこまでは提供されないようです｡ Ruby全体のレスポンス､ホスト毎のCPU使用率､メモリ使用量やApdexスコアにより､FiveRunsより大きな粒度でアプリケーションの性能を確認できます｡


注意すべき点としては､動作環境がproductionかつ1分おきにデータを取得するので､Amazon EC2など従量課金の場合でトラフィックが多いアプリケーションの場合はデータ転送量に注意が必要です｡


Railsアプリは遅いと諦める前に､どこがボトルネックなのかを見える化し､チューニングを施す｡これらを簡単に行えるツールは今後も需要があるのではないでしょうか｡
]]></description>
			<content:encoded><![CDATA[<p>
弊社<a href="http://svgr.jp">サバゲ〜る</a>の開発では以前､開発環境に<a href="http://www.fiveruns.com/">FiveRuns TuneUp</a>をインストールしてみたことがあり､これは便利だ是非活用しようと思ったまま､なかなか手つかずの状態になっていました｡<br />
<br />
<br />
<a href="http://www.fiveruns.com/">FiveRuns TuneUp</a>とは､Railsアプリケーションのパフォーマンスチューニングに役立つ情報を､グラフィカルに表示してくれるプラグインです｡<br />
<br />
<br />
今回､久々にブログ更新しようと思って真っ先に思いついたのがそのFiveRuns TuneUpネタでした｡活用方法を調べようと思い､<a href="http://www.fiveruns.com/">FiveRunsの本家サイト</a>を見たら､<br />
<br />
<img src="/blog/mrsy/2009/10/13/d20e34ade5bd968cdb7e286272267952-thumb-500x303.png" width="500" height="303" alt="d20e34ade5bd968cdb7e286272267952.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
<br />
･<a href="http://www.workthink.net/">Workthink</a>なる会社に買収されたよ､今ははそっちで新しい製品を作っているよ<br />
･｢DASH｣というサービスは終了するのでデータをエキスポートしてね<br />
<br />
<br />
と掲示されているページだけがあり､TuneUpプラグインはどうなるのかとか､それまで提供していたサービスについては言及されていません｡｡<br />
<br />
<br />
TuneUpはあきらめ､類似サービスを調べたところ､<a href="http://blog.masuidrive.jp/index.php/2008/07/19/new-relic/">masuidriveさんも利用している</a>という､<a href="http://www.newrelic.com/">New Relic</a>が良さげということが分かりました｡<br />
<a href="http://www.newrelic.com/">New Relic</a>も TuneUp と同様に Railsアプリケーションにプラグインをインストールし､そのプラグインが<a href="http://www.newrelic.com/">New Relic</a>側にデータを送信し､蓄積するという仕組みです｡<br />
<br />
<br />
料金体系は以下の通りです｡今回はお試しということでLiteアカウントを選択してみます｡<br />
<br />
<br />
<img src="http://www.synapz.jp/blog/mrsy/2009/10/13/17e53e03470d2d3a3e37154801deb04c-thumb-500x641.png" width="500" height="641" alt="17e53e03470d2d3a3e37154801deb04c.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
<br />
Free subscribeをクリックし､必要情報を入力し､Submitします｡<br />
しばらくすると入力したメアドにメールが届くので､URLをクリックしアクティベーションを行います｡<br />
<br />
<br />
<img alt="アクティベーション後" src="http://www.synapz.jp/blog/mrsy/2009/10/13/03.png" width="224" height="216" class="mt-image-center">
<br />
<br />
アクティベーション後､Home(Myページ)にプラグインのインストール方法が載っています｡ページ上部に小さくRPM Version2が出てるよと表示されているので､せっかくなのでそれにしてみます｡<br />
<br />
<br />
<img src="http://www.synapz.jp/blog/mrsy/2009/10/13/01.png" width="500" height="313" alt="データ取得前HOME.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
<br />
掲載されているとおりに手元の開発環境をセットアップします｡<br />
<br />
<br />
<strong><big>1. Railsアプリケーションにプラグイン(Agent)を入れる</big></strong><br />
<pre><code>[masayuki@dev_svgr_jp /var/local/projects/svgr.jp]$ script/plugin install http://newrelic.rubyforge.org/svn/newrelic_rpm --force
+ ./CHANGELOG
+ ./LICENSE
+ ./README.md
+ ./Rakefile
+ ./bin/mongrel_rpm
+ ./bin/newrelic_cmd
+ ./cert/cacert.pem
+ ./init.rb
+ ./install.rb
+ ./lib/new_relic/agent/agent.rb
+ ./lib/new_relic/agent/chained_call.rb
-- 略 --
</code></pre>
<br />
このプラグインが定期的に性能データをNew Relic側に送信するようです｡<br />
<br />
<br />
<strong><big>2. config/newrelic.yml を作成する</big></strong><br />
HOMEからnewrelic.ymlをダウンロードし､configディレクトリに置きます｡デフォルトではproduction / staging環境のみ有効になっているので､developmentでも有効になるよう､172行目を trueにします｡<br />
<br />
<br />
<strong><big>3. Railsアプリを再起動する</big></strong><br />
さて､サクッとインストールできたようなので､データが蓄積されるまで開発環境をいじっておきます｡<br />
10分ほどいじった後､New Relicを見てみます｡<br />
<br />
<br />
おお! どうやらデータが取得できているようです｡<br />
<br />
<img src="http://www.synapz.jp/blog/mrsy/2009/10/13/02.png" width="500" height="132" alt="データ取得完了HOME" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
<br />
My Applicationをクリックすると､概要が表示されます｡<br />
<img src="http://www.synapz.jp/blog/mrsy/2009/10/13/MyApplication-thumb-500x255.png" width="500" height="255" alt="MyApplication.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
<br />
この画面で確認できるのは､以下の通り<br />
<ul>
<li>平均レスポンスタイム(Ruby / DB)</li>
<li>Apdexスコア<br />
<br />
Apdex(Application Performance Index)とは､アプリケーションの性能を定義する標準的な指標とのこと｡<br />
<br />
詳しくは､<a href="http://apdex.org/overview.html">こちら</a>を参照｡</li>
<li>スループット(request per minute ?)</li>
<li>ホスト毎のCPU使用率､メモリ使用量</li>
<li>直近のイベントノート(コメント)､デプロイ履歴など</li>
</ul>
<br />
<br />
なお､Overview以外の下記のタブは､Bronzeアカウント以上でないと見ることができません｡<br />
<ul>
<li>Web Transaction</li>
<li>Database</li>
<li>Transaction Traces</li>
<li>Errors</li>
</ul>
<br />
<br />
取得したデータには､ノート(コメント)が書け､それを共有することができます｡<br />
<img src="http://www.synapz.jp/blog/mrsy/2009/10/13/note-thumb-500x174.png" width="500" height="174" alt="note.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
<br />
<h2>まとめ</h2>
FiveRuns TuneUpでは､RailsアプリのMVC毎に何ms時間が掛かっているか棒グラフで表示する非常にシンプルな機能だったのですが､New Relicは(というよりFreeアカウントでは)そこまでは提供されないようです｡ Ruby全体のレスポンス､ホスト毎のCPU使用率､メモリ使用量やApdexスコアにより､FiveRunsより大きな粒度でアプリケーションの性能を確認できます｡<br />
<br />
<br />
注意すべき点としては､動作環境がproductionかつ1分おきにデータを取得するので､Amazon EC2など従量課金の場合でトラフィックが多いアプリケーションの場合はデータ転送量に注意が必要です｡<br />
<br />
<br />
Railsアプリは遅いと諦める前に､どこがボトルネックなのかを見える化し､チューニングを施す｡これらを簡単に行えるツールは今後も需要があるのではないでしょうか｡</p>
]]></content:encoded>
			<wfw:commentRss>http://www.synapz.jp/mrsy/2009/10/rails-new-relic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebDAV経由でsvnリポジトリにコミットできなくてハマった</title>
		<link>http://www.synapz.jp/mrsy/2009/05/webdavsvn/</link>
		<comments>http://www.synapz.jp/mrsy/2009/05/webdavsvn/#comments</comments>
		<pubDate>Wed, 27 May 2009 11:22:27 +0000</pubDate>
		<dc:creator>mrsy</dc:creator>
				<category><![CDATA[TIPS]]></category>
		<category><![CDATA[Subversion]]></category>

		<guid isPermaLink="false">http://www.synapz.jp/mrsy/2009/05/27/post58/</guid>
		<description><![CDATA[
サーバ側でリポジトリを作成し、作業ディレクトリにチェックアウトまではできるが、作業ディレクトリからコミットできない現象に遭遇しました。


その時のクライアント側のログ：
$ svn add hoge.txt

A hoge.txt

$ svn commit hoge.txt

Log message unchanged or not specified

a)bort, c)ontinue, e)dit

c

svn: Commit failed (details follow):

svn: Can't open activity db: No such file or directory

ファイルが見つからないってどういうこと?



サーバ側のログ (Apacheのerror_log):
[Wed May 27 14:28:14 2009] [error] [client 202.218.216.13] Could not create activity /repos/tmprepo/!svn/act/c41a20c5-6b08-4c73-9da5-e41a2da69086. [500, #0]
[Wed May 27 14:28:14 2009] [error] [client 202.218.216.13] could not open dbm files. [...]]]></description>
			<content:encoded><![CDATA[<p>
サーバ側でリポジトリを作成し、作業ディレクトリにチェックアウトまではできるが、作業ディレクトリからコミットできない現象に遭遇しました。<br />
<br />
<br />
その時のクライアント側のログ：<br />
<pre><code>$ svn add hoge.txt

A hoge.txt

$ svn commit hoge.txt

Log message unchanged or not specified

a)bort, c)ontinue, e)dit

c

svn: Commit failed (details follow):

svn: Can't open activity db: No such file or directory
</code></pre>
ファイルが見つからないってどういうこと?<br />
<br />
<br />
<br />
サーバ側のログ (Apacheのerror_log):<br />
<pre><code>[Wed May 27 14:28:14 2009] [error] [client 202.218.216.13] Could not create activity /repos/tmprepo/!svn/act/c41a20c5-6b08-4c73-9da5-e41a2da69086. [500, #0]
[Wed May 27 14:28:14 2009] [error] [client 202.218.216.13] could not open dbm files. [500, #2]
[Wed May 27 14:28:14 2009] [error] [client 202.218.216.13] Can't open activity db: No such file or directory [500, #2]
</code></pre>
どうやらsvnの管理情報が書けないエラーのようです。<br />
<br />
<br />
「Could not create activity」でググってみると、<br />
どうやらリポジトリ直下にdavディレクトリを作成しなければならないらしい。<br />
<br />
mkdir /path/to/repo/dav<br />
<br />
<br />
しかし、別件で作成したリポジトリはそんなことしなくても良かったのになと思ったので、もしかしたらsubversionのバージョンによってリポジトリの構造が違うのかもと思ったら、やっぱりそうらしいです。<br />
</p>
<blockquote><p>
After some time searching around for others that had encountered this error, I was able to determine that the problem was that version 1.5 of the svnadmin create command doesn’t create a “dav” directory in the repository, unlike earlier versions.<br />
<br />
<cite>via: <a href="http://www.johngirvin.com/blog/archives/subversion-cant-open-activity-db.html" target="_blank">subversion ‘can’t open activity db’| johngirvin.com</a></cite><br />
</p></blockquote>
<p>
<br />
1.5から dav/ディレクトリは作られなくなったので手動で作成しろと。。<br />
<br />
また同じようにハマりそうなのでエントリ書きました。<br />
<br />
でも、もうちょっと気が利いたエラーメッセージにして欲しかったな。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.synapz.jp/mrsy/2009/05/webdavsvn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GANREF開発者の7つ道具（ソフトウェア＆利用サービス編）</title>
		<link>http://www.synapz.jp/mrsy/2009/05/ganref-7software/</link>
		<comments>http://www.synapz.jp/mrsy/2009/05/ganref-7software/#comments</comments>
		<pubDate>Mon, 18 May 2009 07:25:18 +0000</pubDate>
		<dc:creator>mrsy</dc:creator>
				<category><![CDATA[開発環境]]></category>
		<category><![CDATA[GANREF]]></category>

		<guid isPermaLink="false">http://www.synapz.jp/mrsy/2009/05/18/post57/</guid>
		<description><![CDATA[
前回に引き続き、GANREF開発時に使用していた道具をご紹介します。
今回は、ソフトウェア＆利用サービス編です。



1. Textmate
弊社サバゲ〜るの開発では、Aptana(+Radrails)を使っていましたが、Eclipseベースでできているため若干動作が重めでした。何かないかな〜と模索していたところ、同じMac使いのあくしゅ三上さんにTextmateを紹介していただきました。

プラグインを入れることで日本語表示も可能ですが、文字幅が小さいため慣れるのにしばらくかかりました。

日本語化プラグインは、以下を参照してください。
TextMate stuff &#8211; hetima.com


全体的に動作が軽く、ソースハイライトもほとんどの言語に対応しています。特筆すべき点はやはりスニペットでしょうか。たとえばPHPの関数を書くとき、1文字ずつ function &#8230; () と書くのではなく、func[tabキー]押下でスニペットが挿入されます。スニペットはカスタマイズできるため、採用しているフレームワークでよく使う構文やエラーチェック処理を登録しておけばかなりキーストロークを省略することが可能です。


以下に強力なスニペットのサンプルをスクリーンキャストで紹介します。カーソルが飛んでいるのは[tabキー]を押しています。CakePHPのAppModel::findメソッドが簡単に呼び出せます(find[tabキー])。


スニペットの別の利点としては、コーディング規約に沿ったスニペットを開発メンバで共有することで、ある程度各人の癖を排除したきれいなコードがかけるようになります（今回はそこまでできませんでしたが）。


その他Textmateのプラグインは、以下を入れています。

Subversionクライアント &#8211; SVNMate
CakePHP用バンドル
grep



2. Subversion
 Macでは、VersionsというSubversionクライアントで差分確認を行っていました。タイムライン機能でだれがどのソースを修正したのか分かりやすく表示してくれます。

リポジトリはEC2上に置き、開発メンバのみがアクセスできるようにしました。

今回のような大規模案件では管理するファイルの量も膨大で、プロジェクト終盤はソース更新にも少し時間がかかりました。最近はGitに興味津々です。


3. Skype
開発メンバが近くにいるとはいえ、会話では伝えにくい情報はグループチャット機能を使って共有しました。また、お客さまにも使っていただき、わざわざメールを書くまでもない情報共有はこれで行いました。ログもきっちり残りますし安心です。

時々オモローネタを流し、息抜きしていました。


4. Google Sites
議事録、ファイル共有はGoogle Sitesを用いました。ページを更新するとその履歴も閲覧できます。また、簡易的なバグトラッキングツールとしても利用していました。
GoogleSitesを使ってみる &#8211; シナプスエンジニア雑記帳


5. Evernote
設計メモ、ToDoはEvernoteに残していました。ファイルが散財せず、メモを横断的に検索できます。iPhoneアプリもあるので電車の中でも思いついたときにすぐにメモれます。

ただ、テキスト編集機能が若干弱く、段落やリストが使いづらいです。


6. Remember The Milk
個人的なToDo管理はこれで行っていました。Evernoteと同様にiPhoneアプリもありますし、出社前に今日すべきことを確認できます。機能が単純だからこそ思いついた時にサクっと使えるのがいいです。僕はキーボードショートカットを表示させるGreasemonkeyを入れています。
Remember the Milk のショートカットキーを表示する Greasemonkey スクリプト


7. JUDE
ER図、フローチャート、CRUDの作成で主に使いました。GANREFのような大規模サービスになるとDBテーブル数が膨大になりますが、比較的重く感じることはありませんでした。

SQLのエクスポート機能がありますが、MySQL向け設定が無いのが残念です。
JUDE Professional


以上、前エントリと併せて僕らが利用してきたハード/ソフトの紹介をしてきました。道具を効果的に使い、開発効率を上げたいと日々思っています。


ご参考になりましたら幸いです。
]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://www.synapz.jp/blog/mrsy/2009/04/ganref7.html">前回</a>に引き続き、<a href="http://ganref.jp">GANREF</a>開発時に使用していた道具をご紹介します。<br />
今回は、ソフトウェア＆利用サービス編です。<br />
<br />
<br />
<span id="more-57"></span><br />
<strong><big>1. Textmate</big></strong><br />
弊社<a href="http://svgr.jp">サバゲ〜る</a>の開発では、Aptana(+Radrails)を使っていましたが、Eclipseベースでできているため若干動作が重めでした。何かないかな〜と模索していたところ、同じMac使いの<a href="http://d.hatena.ne.jp/saicologic/">あくしゅ三上さん</a>に<a href="http://macromates.com/">Textmate</a>を紹介していただきました。<br />
<br />
プラグインを入れることで日本語表示も可能ですが、文字幅が小さいため慣れるのにしばらくかかりました。<br />
<br />
日本語化プラグインは、以下を参照してください。<br />
<a href="http://hetima.com/textmate/index.html">TextMate stuff &#8211; hetima.com</a><br />
<br />
<br />
全体的に動作が軽く、ソースハイライトもほとんどの言語に対応しています。特筆すべき点はやはりスニペットでしょうか。たとえばPHPの関数を書くとき、1文字ずつ function &#8230; () と書くのではなく、func[tabキー]押下でスニペットが挿入されます。スニペットはカスタマイズできるため、採用しているフレームワークでよく使う構文やエラーチェック処理を登録しておけばかなりキーストロークを省略することが可能です。<br />
<br />
<br />
以下に強力なスニペットのサンプルをスクリーンキャストで紹介します。カーソルが飛んでいるのは[tabキー]を押しています。CakePHPのAppModel::findメソッドが簡単に呼び出せます(find[tabキー])。<br />
<br />
<br />
スニペットの別の利点としては、コーディング規約に沿ったスニペットを開発メンバで共有することで、ある程度各人の癖を排除したきれいなコードがかけるようになります（今回はそこまでできませんでしたが）。<br />
<br />
<br />
その他Textmateのプラグインは、以下を入れています。<br />
<ul>
<li>Subversionクライアント &#8211; <a href="http://ciaranwal.sh/2007/11/29/svnmate-update">SVNMate</a></li>
<li><a href="http://www.toadz.dk/install-cakephp-textmate-bundle-in-e-texteditor/">CakePHP用バンドル</a></li>
<li><a href="http://henrik.nyh.se/2007/06/grep-in-project-command-for-textmate">grep</a></li>
</ul>
<br />
<br />
<big><strong>2. Subversion</strong></big><br />
 Macでは、<a href="http://versionsapp.com/">Versions</a>というSubversionクライアントで差分確認を行っていました。タイムライン機能でだれがどのソースを修正したのか分かりやすく表示してくれます。<br />
<br />
リポジトリはEC2上に置き、開発メンバのみがアクセスできるようにしました。<br />
<br />
今回のような大規模案件では管理するファイルの量も膨大で、プロジェクト終盤はソース更新にも少し時間がかかりました。最近はGitに興味津々です。<br />
<br />
<br />
<big><strong>3. Skype</strong></big><br />
開発メンバが近くにいるとはいえ、会話では伝えにくい情報はグループチャット機能を使って共有しました。また、お客さまにも使っていただき、わざわざメールを書くまでもない情報共有はこれで行いました。ログもきっちり残りますし安心です。<br />
<br />
時々オモローネタを流し、息抜きしていました。<br />
<br />
<br />
<big><strong>4. Google Sites</strong></big><br />
議事録、ファイル共有はGoogle Sitesを用いました。ページを更新するとその履歴も閲覧できます。また、簡易的なバグトラッキングツールとしても利用していました。<br />
<a href="http://www.synapz.jp/blog/mrsy/2008/03/google-sites.html">GoogleSitesを使ってみる &#8211; シナプスエンジニア雑記帳</a><br />
<br />
<br />
<big><strong>5. Evernote</strong></big><br />
設計メモ、ToDoは<a href="http://evernote.com/">Evernote</a>に残していました。ファイルが散財せず、メモを横断的に検索できます。iPhoneアプリもあるので電車の中でも思いついたときにすぐにメモれます。<br />
<br />
ただ、テキスト編集機能が若干弱く、段落やリストが使いづらいです。<br />
<br />
<br />
<big><strong>6. <a href="http://www.rememberthemilk.com/">Remember The Milk</a></strong></big><br />
個人的なToDo管理はこれで行っていました。Evernoteと同様にiPhoneアプリもありますし、出社前に今日すべきことを確認できます。機能が単純だからこそ思いついた時にサクっと使えるのがいいです。僕はキーボードショートカットを表示させるGreasemonkeyを入れています。<br />
<a href="http://espion.just-size.jp/archives/06/212212049.html">Remember the Milk のショートカットキーを表示する Greasemonkey スクリプト</a><br />
<br />
<br />
<big><strong>7. JUDE</strong></big><br />
ER図、フローチャート、CRUDの作成で主に使いました。<a href="http://ganref.jp">GANREF</a>のような大規模サービスになるとDBテーブル数が膨大になりますが、比較的重く感じることはありませんでした。<br />
<br />
SQLのエクスポート機能がありますが、MySQL向け設定が無いのが残念です。<br />
<a href="http://jude.change-vision.com/jude-web/product/professional.html">JUDE Professional</a><br />
<br />
<br />
以上、<a href="http://www.synapz.jp/blog/mrsy/2009/04/ganref7.html">前エントリ</a>と併せて僕らが利用してきたハード/ソフトの紹介をしてきました。道具を効果的に使い、開発効率を上げたいと日々思っています。<br />
<br />
<br />
ご参考になりましたら幸いです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.synapz.jp/mrsy/2009/05/ganref-7software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GANREF開発者の7つ道具（ハードウェア/周辺環境編）</title>
		<link>http://www.synapz.jp/mrsy/2009/04/ganref7/</link>
		<comments>http://www.synapz.jp/mrsy/2009/04/ganref7/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 07:24:54 +0000</pubDate>
		<dc:creator>mrsy</dc:creator>
				<category><![CDATA[開発環境]]></category>
		<category><![CDATA[GANREF]]></category>

		<guid isPermaLink="false">http://www.synapz.jp/mrsy/2009/04/22/post54/</guid>
		<description><![CDATA[
前回のエントリからだいぶ時間が経ってしまいました。
ずっとブログを書かないでいると、いろいろ考えすぎて余計書けなくなってしまうものですね。


さて、ブログ休止期間中に開発をさせていただいたGANREF(ガンレフ)もリリースでき、
今ようやく一段落した感じです。
株式会社あくしゅさんと開発したGANREF。
メンバーのスキルの高さもさることながら、それぞれの開発スタイルがとても刺激になりました。


今回から2エントリは、GANREFプロジェクトの総括の意味で、開発メンバが利用していた環境やツール、その活用方法をご紹介したいと思います。今回はハードウェア/周辺環境編です。


1. PC
僕はMacbook Pro 15inch ＋ Dell 24インチディスプレイで作業しています。メモリを3Gに増設し、最近128GBのSSDにしました（SSDによるパフォーマンス改善については別エントリで書く予定です）。

XAMPP for Macを入れてLAMP環境をさくっと構築。VMWareを起動してIE6のチェックをするときにはさすがに重いですが、そのほか開発作業については全く不自由してません。


2. キーボード＆マウス
あくしゅのお二方に影響され、HHK Professional 2を使用しています。最初はオモチャみたいで馬鹿にしていましたが、今はこれがないとコードが書けませんw。カーソルキー操作に癖がありますが、時間が解決してくれます。

それまではMicrosoftのどでかいキーボードとロジクールのワイヤレスマウスを使用していました。たまにマウスが認識されないときがあり、そのたびイラっとして集中力が切れることがありました。その後有線マウスに交換しました。




3. 椅子
開発が始まって1ヶ月経過した頃から、メンバー全員に首と背中が痛む症状に見舞われました。原因はおそらく椅子のせいだと思われたので、自宅で使用していたアーロンチェアをプロジェクトルームに搬入しました。あくしゅのお二人もアーロンチェアを購入されていました。

1日の大部分を座って過ごすプログラマは、体型にあった椅子を選ぶべきです。無理な姿勢で長時間過ごすと必ず体を痛めます。


4. ホワイトボード
設計について議論しているとき、言葉のやりとりだけでは伝わらないときがあります。幸いプロジェクトルームの片側一面はホワイトボードになっており、ディレクトリ構成やデータモデルのつながりなどを共有するときはポンチ絵を書いていました。




5. ラジオ
黙々とコードを書いてばかりだと気が滅入るので、半袖野郎さんの提案によりFMラジオを流していました。それにより13時の時報を合図に昼飯に出かける良いリズムが生まれました。


6. プロジェクトルーム
常駐先では開発関係者のみ利用できるプロジェクトルームをご用意頂きました。とても静かで集中できる環境でした。


7. うまい飯
常駐先にはおいしいランチのお店が結構ありました。以下にいくつか紹介します。

あて 〜煮込 肴〜 
東風汁麺屋本店



&#8211;
以上、無理矢理7個に収めた感がありますが紹介させていただきました。
仕事に集中できる環境は大事ですね。
みなさまのご参考になればと思います。


次回はGANREF開発者の7つ道具 ソフトウェア/サービス編をお届けします。
お楽しみに。
]]></description>
			<content:encoded><![CDATA[<p>
前回のエントリからだいぶ時間が経ってしまいました。<br />
ずっとブログを書かないでいると、いろいろ考えすぎて余計書けなくなってしまうものですね。<br />
<br />
<br />
さて、ブログ休止期間中に開発をさせていただいた<a href="http://ganref.jp">GANREF(ガンレフ)</a>もリリースでき、<br />
今ようやく一段落した感じです。<br />
<a href="http://axsh.jp/information/">株式会社あくしゅ</a>さんと開発したGANREF。<br />
メンバーのスキルの高さもさることながら、それぞれの開発スタイルがとても刺激になりました。<br />
<br />
<br />
今回から2エントリは、GANREFプロジェクトの総括の意味で、開発メンバが利用していた環境やツール、その活用方法をご紹介したいと思います。今回はハードウェア/周辺環境編です。<br />
<br />
<br />
<strong><big>1. PC</big></strong><br />
僕はMacbook Pro 15inch ＋ Dell 24インチディスプレイで作業しています。メモリを3Gに増設し、最近128GBのSSDにしました（SSDによるパフォーマンス改善については別エントリで書く予定です）。<br />
<br />
<a href="http://www.apachefriends.org/jp/xampp-macosx.html">XAMPP for Mac</a>を入れてLAMP環境をさくっと構築。VMWareを起動してIE6のチェックをするときにはさすがに重いですが、そのほか開発作業については全く不自由してません。<br />
<br />
<br />
<strong><big>2. キーボード＆マウス</big></strong><br />
あくしゅのお二方に影響され、<a href="http://www.pfu.fujitsu.com/hhkeyboard/hhkbpro2/">HHK Professional 2</a>を使用しています。最初はオモチャみたいで馬鹿にしていましたが、今はこれがないとコードが書けませんw。カーソルキー操作に癖がありますが、時間が解決してくれます。<br />
<br />
それまではMicrosoftのどでかいキーボードとロジクールのワイヤレスマウスを使用していました。たまにマウスが認識されないときがあり、そのたびイラっとして集中力が切れることがありました。その後有線マウスに交換しました。<br />
<br />
<img src="http://www.synapz.jp/blog/mrsy/2009/04/22/keyboard-thumb-500x375.jpg" width="500" height="375" alt="keyboard.jpg" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
<br />
<strong><big>3. 椅子</big></strong><br />
開発が始まって1ヶ月経過した頃から、メンバー全員に首と背中が痛む症状に見舞われました。原因はおそらく椅子のせいだと思われたので、自宅で使用していたアーロンチェアをプロジェクトルームに搬入しました。あくしゅのお二人もアーロンチェアを購入されていました。<br />
<br />
1日の大部分を座って過ごすプログラマは、体型にあった椅子を選ぶべきです。無理な姿勢で長時間過ごすと必ず体を痛めます。<br />
<br />
<br />
<strong><big>4. ホワイトボード</big></strong><br />
設計について議論しているとき、言葉のやりとりだけでは伝わらないときがあります。幸いプロジェクトルームの片側一面はホワイトボードになっており、ディレクトリ構成やデータモデルのつながりなどを共有するときはポンチ絵を書いていました。<br />
<br />
<img src="http://www.synapz.jp/blog/mrsy/2009/04/22/whiteboard-thumb-500x375.jpg" width="500" height="375" alt="whiteboard.jpg" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
<br />
<strong><big>5. ラジオ</big></strong><br />
黙々とコードを書いてばかりだと気が滅入るので、半袖野郎さんの提案によりFMラジオを流していました。それにより13時の時報を合図に昼飯に出かける良いリズムが生まれました。<br />
<br />
<br />
<strong><big>6. プロジェクトルーム</big></strong><br />
常駐先では開発関係者のみ利用できるプロジェクトルームをご用意頂きました。とても静かで集中できる環境でした。<br />
<br />
<br />
<strong><big>7. うまい飯</big></strong><br />
常駐先にはおいしいランチのお店が結構ありました。以下にいくつか紹介します。<br />
<ul>
<li><a href="http://r.gnavi.co.jp/a827302/">あて 〜煮込 肴〜</a> </li>
<li><a href="http://r.tabelog.com/tokyo/A1309/A130904/13000295/">東風汁麺屋本店</a></li>
</ul>
<br />
<br />
&#8211;<br />
以上、無理矢理7個に収めた感がありますが紹介させていただきました。<br />
仕事に集中できる環境は大事ですね。<br />
みなさまのご参考になればと思います。<br />
<br />
<br />
次回はGANREF開発者の7つ道具 ソフトウェア/サービス編をお届けします。<br />
お楽しみに。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.synapz.jp/mrsy/2009/04/ganref7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Developer Day 2008 に参加</title>
		<link>http://www.synapz.jp/mrsy/2008/06/google-developer-day-2008/</link>
		<comments>http://www.synapz.jp/mrsy/2008/06/google-developer-day-2008/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 06:31:27 +0000</pubDate>
		<dc:creator>mrsy</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[App Engine]]></category>
		<category><![CDATA[Gainer]]></category>
		<category><![CDATA[Gears]]></category>
		<category><![CDATA[Google]]></category>

		<guid isPermaLink="false">http://www.synapz.jp/mrsy/2008/06/12/post53/</guid>
		<description><![CDATA[


6/10にパシフィコ横浜で開催されたGoogle Developer Day 2008に参加してきました。
詳細なレポートは以下のサイトに詳しく掲載されています。

Google Developer Day 2008 レポート（前編）- WebOS Goodies
Google Developer Day 2008 Japan 基調講演 &#8211; 天使やカイザーと呼ばれて
Google Developer Day 2008 Japan [OpenSocial] &#8211; 天使やカイザーと呼ばれて


本エントリは、僕が参加したセッションについてのメモ書きと妄想です。


■ 基調講演
Androidの実機デモを見ることができた。
iPhoneさながらのマルチタッチUI。
アイコンやボタンはGNOMEっぽい。Webページのスクロール、拡大機能もiPhoneとほぼ同機能。しかしiPhoneのそれより動きが滑らかではなかったように思う。Google Mapのストリートビューはすばらしかった。Androidの加速度センサに反応して360度見回すことができる。バーチャルリアリティ！

ブラウザ上でGoogle Earth が見れるデモ。残念ながらWindows IE, Firefoxのみ対応。トラックを動かす簡単なデモには笑った。エベレストの上も走れるw

次にgainerに加速度センサーをつけ、Flashアプリでフライトシミュレータ。残念ながらデモが動作せず。


以下、妄想:
Android + Google Earth API + Gearsで、カーナビの機能を充足できるのではないか。Androidでデータ通信して地図情報を取得、Gearsで目的地までのルートをキャッシュする。圏外の場所でも車搭載の加速度センサとGearsによってキャッシュしてある地図データがあればルート表示は可能。
建造物の3DモデルはGoogle Skeckupでどんどん追加されているわけだし、常に地図は更新され続ける。
地図CD-ROMの買い替えやHDDの取り替えも不要だ。でもたまにAdSenseが表示されたりして。


■ Google App Engine
ゲストブックのようなものをゼロから作り上げるデモを行っていた。
TextMateでPythonコードをすんごいスピードで書いていく。
コーディング-&#62;localhostで確認-&#62;コーディングのサイクルが早く、あっという間に完成した。

興味深かったのはDatastoreAPIを用いたデータ永続化の方法。
SQLに良く似たGQLにてデータを操作する。しかしながらテーブルのJOINは未サポートとのこと。

Pythonのソースコードは思っていたより見やすい。
インデントによってブレース記号({})が省略できるためだろうか、無駄がない感じ。

localhostで確認した後、専用アップローダを用いて
Googleにアップロードする。コマンドラインでもできる。

さらに自動的にバージョン管理までやってくれる！
Subversionのように構成管理（タグ、ブランチ）もやってくれるかは不明だが、便利な機能だ。

さらにさらに、アプリケーション管理画面ではCPUの負荷状況、
データ転送量、メール送信数などなど、至れり尽くせり。

これが500万PV/月まで無料で使えるとなれば、
スタートアップ企業や週末プログラマの皆さんは飛びつくだろう。

課題はPythonしかサポートしていないこと。
Rubyのサポートは会場からも強い要望が出ていた。
中にはC#をサポートしてくれよ！と懇願していた方も。
個人的にはPHPをサポートしてくれたら爆発的に利用者が増えると思うが。

招待制から一般開放されたようなので、今後いじくり回したい。


■ OpenSocial
APIのバージョンが0.8に上がった。主な変更はRESTful APIのサポート。
これによってJavascript以外からも叩け、サーバ間でのデータ送受信が可能になった。

OpenSocialの主要な構成要素である、
HTML + Javascript + REST + OAuth がすべて出そろったわけだ。

コンテナ(SNSなどのソーシャルデータを提供する側)からどの情報を取得できるか(プロフィール情報、友達情報、アクティビティ情報)については、コンテナ側に任されている。

正直言って自分の中ではまだOpenSocialがブレイクするかどうか分からない。
というのは、海外のようにSNS内にアプリケーションが作れるという文化がまだ根付いていないためだ。
この業界以外の人に説明しても理解に苦しむのではないか。

Facebookも日本語化され、MySpaceもOpenSocial対応したおかげで徐々に普及していくのかな。
OpenPNEがOpenSocial対応になるらしいので起爆剤になるかも。

個人的にはOAuthの知識がないので、調査していきたい。


■ Mashup から Mapplets へ
Google Mapに様々な情報を追加していくことができるデモ。
例えばある地域を表示させる。その地図上に不動産情報を表示、過去の犯罪が起きた地域を表示、交通機関マップを表示・・のように。

そのようにGoogle Map上に付加機能を追加していくのがMappletsと呼ぶらしい。
MappletsはGadgetのようにHTML [...]]]></description>
			<content:encoded><![CDATA[<p>
<img alt="gdd.png" src="http://www.synapz.jp/blog/mrsy/2008/06/12/5.png" width="144" height="103" class="mt-image-left">
<br />
6/10にパシフィコ横浜で開催されたGoogle Developer Day 2008に参加してきました。<br />
詳細なレポートは以下のサイトに詳しく掲載されています。<br />
<ul>
<li><a href="http://webos-goodies.jp/archives/51345850.html" target="_blank">Google Developer Day 2008 レポート（前編）- WebOS Goodies</a></li>
<li><a href="http://www.eisbahn.jp/yoichiro/2008/06/google_developer_day_2008_japa_3.html" target="_blank">Google Developer Day 2008 Japan 基調講演 &#8211; 天使やカイザーと呼ばれて</a></li>
<li><a href="http://www.eisbahn.jp/yoichiro/2008/06/google_developer_day_2008_japa_4.html">Google Developer Day 2008 Japan [OpenSocial] &#8211; 天使やカイザーと呼ばれて</a></li>
</ul>
<br />
本エントリは、僕が参加したセッションについてのメモ書きと妄想です。<br />
<br />
<br />
<strong><big>■ 基調講演</big></strong><br />
Androidの実機デモを見ることができた。<br />
<a href="http://www.apple.com/jp/iphone/" target="_blank">iPhone</a>さながらのマルチタッチUI。<br />
アイコンやボタンは<a href="http://www.gnome.org/" target="_blank">GNOME</a>っぽい。Webページのスクロール、拡大機能もiPhoneとほぼ同機能。しかしiPhoneのそれより動きが滑らかではなかったように思う。Google Mapのストリートビューはすばらしかった。Androidの加速度センサに反応して360度見回すことができる。バーチャルリアリティ！<br />
<br />
ブラウザ上でGoogle Earth が見れるデモ。残念ながらWindows IE, Firefoxのみ対応。<a href="http://www.google.com/earth/plugin/examples/milktruck/" target="_blank">トラックを動かす簡単なデモ</a>には笑った。エベレストの上も走れるw<br />
<br />
次に<a href="http://www.saturn.dti.ne.jp/~npaka/flash/gainer/index.html" target="_blank">gainer</a>に加速度センサーをつけ、Flashアプリでフライトシミュレータ。残念ながらデモが動作せず。<br />
<br />
<br />
以下、妄想:<br />
Android + Google Earth API + Gearsで、カーナビの機能を充足できるのではないか。Androidでデータ通信して地図情報を取得、Gearsで目的地までのルートをキャッシュする。圏外の場所でも車搭載の加速度センサとGearsによってキャッシュしてある地図データがあればルート表示は可能。<br />
建造物の3DモデルはGoogle Skeckupでどんどん追加されているわけだし、常に地図は更新され続ける。<br />
地図CD-ROMの買い替えやHDDの取り替えも不要だ。でもたまにAdSenseが表示されたりして。<br />
<br />
<br />
<strong><big>■ Google App Engine</big></strong><br />
ゲストブックのようなものをゼロから作り上げるデモを行っていた。<br />
TextMateでPythonコードをすんごいスピードで書いていく。<br />
コーディング-&gt;localhostで確認-&gt;コーディングのサイクルが早く、あっという間に完成した。<br />
<br />
興味深かったのは<a href="http://code.google.com/appengine/docs/datastore/overview.html" target="_blank">DatastoreAPI</a>を用いたデータ永続化の方法。<br />
SQLに良く似たGQLにてデータを操作する。しかしながらテーブルのJOINは未サポートとのこと。<br />
<br />
Pythonのソースコードは思っていたより見やすい。<br />
インデントによってブレース記号({})が省略できるためだろうか、無駄がない感じ。<br />
<br />
localhostで確認した後、専用アップローダを用いて<br />
Googleにアップロードする。コマンドラインでもできる。<br />
<br />
さらに自動的にバージョン管理までやってくれる！<br />
Subversionのように構成管理（タグ、ブランチ）もやってくれるかは不明だが、便利な機能だ。<br />
<br />
さらにさらに、アプリケーション管理画面ではCPUの負荷状況、<br />
データ転送量、メール送信数などなど、至れり尽くせり。<br />
<br />
これが500万PV/月まで無料で使えるとなれば、<br />
スタートアップ企業や週末プログラマの皆さんは飛びつくだろう。<br />
<br />
課題はPythonしかサポートしていないこと。<br />
Rubyのサポートは会場からも強い要望が出ていた。<br />
中にはC#をサポートしてくれよ！と懇願していた方も。<br />
個人的にはPHPをサポートしてくれたら爆発的に利用者が増えると思うが。<br />
<br />
招待制から一般開放されたようなので、今後いじくり回したい。<br />
<br />
<br />
<strong><big>■ OpenSocial</big></strong><br />
APIのバージョンが0.8に上がった。主な変更はRESTful APIのサポート。<br />
これによってJavascript以外からも叩け、サーバ間でのデータ送受信が可能になった。<br />
<br />
OpenSocialの主要な構成要素である、<br />
HTML + Javascript + REST + OAuth がすべて出そろったわけだ。<br />
<br />
コンテナ(SNSなどのソーシャルデータを提供する側)からどの情報を取得できるか(プロフィール情報、友達情報、アクティビティ情報)については、コンテナ側に任されている。<br />
<br />
正直言って自分の中ではまだOpenSocialがブレイクするかどうか分からない。<br />
というのは、海外のようにSNS内にアプリケーションが作れるという文化がまだ根付いていないためだ。<br />
この業界以外の人に説明しても理解に苦しむのではないか。<br />
<br />
Facebookも日本語化され、MySpaceもOpenSocial対応したおかげで徐々に普及していくのかな。<br />
OpenPNEがOpenSocial対応になるらしいので起爆剤になるかも。<br />
<br />
個人的には<a href="http://oauth.net/" target="_blank">OAuth</a>の知識がないので、調査していきたい。<br />
<br />
<br />
<strong><big>■ Mashup から Mapplets へ</big></strong><br />
Google Mapに様々な情報を追加していくことができるデモ。<br />
例えばある地域を表示させる。その地図上に不動産情報を表示、過去の犯罪が起きた地域を表示、交通機関マップを表示・・のように。<br />
<br />
そのようにGoogle Map上に付加機能を追加していくのがMappletsと呼ぶらしい。<br />
MappletsはGadgetのようにHTML + Javascriptで自分で作れる。<br />
<br />
<img src="http://www.synapz.jp/blog/mrsy/2008/06/12/4-thumb-500x225.png" width="500" height="225" alt="mapplet.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
<a href="http://maps.google.co.jp/ig/directory?synd=mpl&amp;pid=mpl&amp;features=sharedmap,geofeed&amp;backlink=http:%2F%2Fmaps.google.co.jp%2Fmaps%2Fmm%3Fie%3DUTF8%26hl%3Dja%26ll%3D35.689517,139.785946%26spn%3D0.307284,0.55481%26z%3D11&amp;hl=ja&amp;gl=jp">こちら</a>には多くのMappletsが登録されている。<br />
<br />
ただ、すべての処理をJavascriptで行っているので、クライアントPCの負荷が気になった。<br />
<br />
<br />
<strong><big>■ Google Gears から Gears へ</big></strong><br />
LocalServer, Database, Workerpoolの説明。<br />
WorkerpoolはJavascriptのインタプリタを複数立ち上げることで、疑似スレッド処理が行えるとのこと。デモではHTML描画を行うWorkerと、複雑な素数演算を行うWorkerを同時に動かしても、描画はカクカクしないねというデモが行われた。<br />
<br />
どちらかというと今まではオフラインでもウェブアプリが使えるよ的な謳い文句であったが、今後はクライアント側リソースを最大限に利用しようという方向のようだ。（MySpaceのメール検索のように）<br />
<br />
マイはてブのインクリメンタル検索を行うデモを披露していた。<br />
ブックマーク情報をすべてローカルのDatabaseに蓄えておくことで、ものすごいスピードでインクリメンタル検索を行っていた。すごい。<br />
<br />
その他、デモをしていた若手エンジニアが発するGeekオーラが可愛かったw（すいません）<br />
<br />
<br />
<strong><big>■ Google Web Toolkit と AJAX</big></strong><br />
略してGWT。グウィットと発音していた。<br />
簡潔に言うとJavaで書いた処理をJavascriptソースに変換するコンパイラ。<br />
JavascriptでできることはすべてJavaでかけるとのこと。<br />
また、吐き出されるJavascriptはブラウザ毎に最適化されたコードになりパフォーマンスの向上も図れる。<br />
<br />
EclipseでJavascriptの動作をJavaで書き、<br />
ブレークポイントの設定、ステップ実行が行えるというデモが行われた。<br />
<br />
ただ、Eclipseがベースの<a href="http://www.aptana.com/" target="_blank">Aptana</a>では、Javascriptのデバッグは普通にできる。Firebugでもできる。そういった意味であまりメリットは感じれなかった。<br />
<br />
しかし、Servlet, JSPで開発するプロジェクトでは環境がEclipseで統一できるので、活躍できるのではないか。<br />
<br />
<br />
以上、昼飯もとれないぐらい盛りだくさんの内容でした。<br />
実はセッションと並行してHackathon(Googleエンジニアと密に接しながらコーディングできる)も行きたかったのですが、残念ながら抽選漏れ。次回は是非参加したいです。<br />
Googleのパワーを存分に感じれた1日でした。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.synapz.jp/mrsy/2008/06/google-developer-day-2008/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>プロジェクト管理ツール Redmine</title>
		<link>http://www.synapz.jp/mrsy/2008/05/redmine/</link>
		<comments>http://www.synapz.jp/mrsy/2008/05/redmine/#comments</comments>
		<pubDate>Mon, 12 May 2008 12:10:47 +0000</pubDate>
		<dc:creator>mrsy</dc:creator>
				<category><![CDATA[TIPS]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Redmine]]></category>

		<guid isPermaLink="false">http://www.synapz.jp/mrsy/2008/05/12/post52/</guid>
		<description><![CDATA[
フリーで使えるBTS(バグトラッキングツール)を導入しようと思い情報収集していたところ、
Tracより良さげなRedmineにたどり着きました。
Tracと比較してのメリットは、こちらに詳しく掲載されています。
ということで、今回はRedmineインストールの顛末記です。

Tracと比較して個人的にメリットを感じたのは、

複数プロジェクトを管理できる
デフォルトで日本語対応している
ガントチャートが使える
RailsアプリでPassenger(mod_rails)に対応(v0.7より)

の4つです。Tracはプロジェクト毎に公開ディレクトリを作成してApacheのhttpd.confを書き換えたりしなければならないのに対し、Redmineは一度設置すればあとは画面上でプロジェクトを作成できます。

また、プロジェクト毎に担当者を設定できるので、社外開発者に解放しても心配ありません。

最後のPassenger対応については、mongrelサーバで動かすよりも実際簡単でした。インストール方法も公式ページに詳細が掲載されています。


■メール通知をGmailのsmtpサーバを利用するようにカスタマイズ
Gmailのsmtpを利用するには、RailsにTLSプラグインを入れなければなりません。
# gem install tlsmail

そして、Redmineの config/environment.rbの最後に以下の2行を追加します。
require "tlsmail"
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)

これで送信することができました。


■Subversionリポジトリと連携
Redmineが動作しているサーバに、Subversionリポジトリがあるので連携させようと思ったのですが、ここでハマりました。どのように設定しても、「リポジトリに、エントリ/リビジョンが存在しません。」というエラーが表示されます。


同一サーバ上にリポジトリが存在するので、URLは「file:///リポジトリへのパス」と指定すればいいはずなのですが、一向にうまくいきません。。その他スキーム（http://, svn://）も試したのですがダメでした。

エラーログは下記の通り。
You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]


エラーが出ている箇所のソースは以下の22行目です。
$REDMINE_HOME/lib/redmine/scm/adapters/subversion_adapter.rb


# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
require 'redmine/scm/adapters/abstract_adapter'
require 'rexml/document'
module Redmine
module Scm
module Adapters
class SubversionAdapter &#60; AbstractAdapter
# SVN executable name
SVN_BIN = &#34;svn&#34;
# Get info [...]]]></description>
			<content:encoded><![CDATA[<p>
フリーで使えるBTS(バグトラッキングツール)を導入しようと思い情報収集していたところ、<br />
<a href="http://trac.edgewall.org/" target="_blank">Trac</a>より良さげな<a href="http://redmine.jp/" target="_blank">Redmine</a>にたどり着きました。<br />
Tracと比較してのメリットは、<a href="http://d.hatena.ne.jp/zenpou/20080414/1208189475" target="_blank">こちら</a>に詳しく掲載されています。<br />
ということで、今回はRedmineインストールの顛末記です。<br />
<br />
Tracと比較して個人的にメリットを感じたのは、<br />
<ul>
<li>複数プロジェクトを管理できる</li>
<li>デフォルトで日本語対応している</li>
<li>ガントチャートが使える</li>
<li>RailsアプリでPassenger(mod_rails)に対応(v0.7より)</li>
</ul>
の4つです。Tracはプロジェクト毎に公開ディレクトリを作成してApacheのhttpd.confを書き換えたりしなければならないのに対し、Redmineは一度設置すればあとは画面上でプロジェクトを作成できます。<br />
<br />
また、プロジェクト毎に担当者を設定できるので、社外開発者に解放しても心配ありません。<br />
<br />
最後のPassenger対応については、mongrelサーバで動かすよりも実際簡単でした。インストール方法も<a href="http://redmine.jp/redmine_today/2008/04/13/20080413-apache-passenger/" target="_blank">公式ページに詳細が掲載されています。</a><br />
<br />
<br />
<strong><big>■メール通知をGmailのsmtpサーバを利用するようにカスタマイズ</big></strong><br />
Gmailのsmtpを利用するには、RailsにTLSプラグインを入れなければなりません。<br />
<pre><code># gem install tlsmail</code></pre>
<br />
そして、Redmineの config/environment.rbの最後に以下の2行を追加します。<br />
<pre><code>require "tlsmail"
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
</code></pre>
これで送信することができました。<br />
<br />
<br />
<strong><big>■Subversionリポジトリと連携</big></strong><br />
Redmineが動作しているサーバに、Subversionリポジトリがあるので連携させようと思ったのですが、ここでハマりました。どのように設定しても、「<strong>リポジトリに、エントリ/リビジョンが存在しません。</strong>」というエラーが表示されます。<br />
<br />
<br />
同一サーバ上にリポジトリが存在するので、URLは「file:///リポジトリへのパス」と指定すればいいはずなのですが、一向にうまくいきません。。その他スキーム（http://, svn://）も試したのですがダメでした。<br />
<br />
エラーログは下記の通り。<br />
<pre><code>You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
</code></pre>
<br />
エラーが出ている箇所のソースは以下の22行目です。<br />
<strong>$REDMINE_HOME/lib/redmine/scm/adapters/subversion_adapter.rb</strong><br />
<br />
<br />
<pre><code># Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
require 'redmine/scm/adapters/abstract_adapter'
require 'rexml/document'
module Redmine
module Scm
module Adapters
class SubversionAdapter &lt; AbstractAdapter
# SVN executable name
SVN_BIN = &quot;svn&quot;
# Get info about the svn repository
def info
cmd = &quot;#{SVN_BIN} info --xml #{target(&#39;&#39;)}&quot;
cmd &lt; doc.elements["info/entry/repository/root"].text,
:lastrev =&gt; Revision.new({
:identifier =&gt; doc.elements["info/entry/commit"].attributes['revision'],
:time =&gt; Time.parse(doc.elements["info/entry/commit/date"].text).localtime,
:author =&gt; (doc.elements["info/entry/commit/author"] ? doc.elements["info/entry/commit/author"].text : "")
})
})
rescue =&gt; e
logger.error(e)
end
</code></pre>
<br />
16行目の、#{SVN_BIN} info &#8211;xml #{target(&#8221;)}　こいつを手動で叩くと（もちろんApache実行ユーザで）、きちんとXMLで結果が返ってきているのは確認しています。<br />
<br />
Redmineを使ってドキュメント〜ソースまで一気通貫で管理できる！と<br />
意気込んでいたのですが、諦めようかな。。<br />
どなたかヒントをお持ちでしたらご教授いただけますか？<br />
<br />
<br />
<br />
<strong><big>2008/05/15 追記</big></strong><br />
解決しました。svnの設定情報が/root配下のものを読み込んでおり、Redmineの実行ユーザがapache<br />
なのでPermissionエラーとなっていたようです。<br />
<br />
&#8211;config-dir オプションを利用して、apacheユーザーのホームディレクトリの設定情報を読み込むように変更します。<br />
<strong>$REDMINE_HOME/lib/redmine/scm/adapters/subversion_adapter.rb</strong><br />
<br />
<pre><code>require 'redmine/scm/adapters/abstract_adapter'
require 'rexml/document'
module Redmine
module Scm
module Adapters
class SubversionAdapter &lt; AbstractAdapter
# SVN executable name
#        SVN_BIN = &quot;svn&quot;
SVN_BIN = &quot;svn --config-dir /home/apache &quot; # こうする
# Get info about the svn repository
def info
</code></pre>
<br />
11行目のように書き換える。<br />
あー、すっきりした！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.synapz.jp/mrsy/2008/05/redmine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails 環境調査</title>
		<link>http://www.synapz.jp/mrsy/2008/04/rails/</link>
		<comments>http://www.synapz.jp/mrsy/2008/04/rails/#comments</comments>
		<pubDate>Fri, 18 Apr 2008 05:19:31 +0000</pubDate>
		<dc:creator>mrsy</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.synapz.jp/mrsy/2008/04/18/post51/</guid>
		<description><![CDATA[
最近Ruby on Railsの面白さにハマり、いろいろネットで情報を収集しています。
皆さん様々な環境やサーバソフトウェアの組み合わせで試みているようですね。
今回はRailsアプリケーションを動かす環境について、自分なりのまとめです。

httpサーバ

lighttpd

その名の通り、「軽い」httpサーバ。また、安全で柔軟性もあるとされる。
Apacheとのベンチマーク比較でも、同等かわずかに上回るパフォーマンスとのこと。



Mongrel

Rails アプリケーションサーバ。Java世界で言うところの、Jakarta Tomcat。
RubyとCの拡張ライブラリで書かれている。
Apacheをリバースプロキシとして動作させ、Railsアプリはmongrel_cluster(負荷分散や複数のRailsアプリを動作させるためのMongrelプロセス複数起動)という役割で利用されることが多い。



WEBrick

Rubyに標準添付されているhttpサーバソフトウェア。
公式ページにはhttpサーバ構築のためのライブラリと記されている。主に開発用に使用する。



WEBrick is a Ruby library program to build HTTP servers. 
via: RAA &#8211; webrick


実際にWEBrickでhttpプロキシサーバを作るチュートリアルがこちらに載っている。


httpサーバと組み合わせるモジュール

FastCGI

CGIはクライアントからhttpリクエストがある都度プロセスを立ち上げ、レスポンスを返した後にそのプロセスを落とす。このオーバーヘッドを無くそうとしたものがFastCGI。FastCGIによって起動されたCGIプログラムはHTTPDプロセスとは別に起動するが、CGIの処理が終了してもプロセスは残る。そのプロセスを使い回すことでパフォーマンスの向上が図れる。
こちらにより詳細な解説があります。



Passenger(mod_ruby)

RailsアプリケーションをApache上で動作させるためのモジュール。PHPでいうところの、mod_php。これがあればMongrelやWEBrickは不要。パフォーマンスにおいてもMongrelより（ちょっと）早いらしい。


画像は公式サイトより。
インストール方法など詳細な解説はこちら。


まとめ
最近リリースされたPassengerが一番手軽そうですが、信頼性についてはまだまだ未知数です。
]]></description>
			<content:encoded><![CDATA[<p>
最近Ruby on Railsの面白さにハマり、いろいろネットで情報を収集しています。<br />
皆さん様々な環境やサーバソフトウェアの組み合わせで試みているようですね。<br />
今回はRailsアプリケーションを動かす環境について、自分なりのまとめです。<br />
<br />
<h2>httpサーバ</h2>
<ul>
<li><strong>lighttpd</strong></li>
</ul>
その名の通り、「軽い」httpサーバ。また、安全で柔軟性もあるとされる。<br />
Apacheとのベンチマーク比較でも、同等かわずかに上回るパフォーマンスとのこと。<br />
<br />
<br />
<ul>
<li><strong>Mongrel</strong></li>
</ul>
Rails アプリケーションサーバ。Java世界で言うところの、Jakarta Tomcat。<br />
RubyとCの拡張ライブラリで書かれている。<br />
Apacheをリバースプロキシとして動作させ、Railsアプリはmongrel_cluster(負荷分散や複数のRailsアプリを動作させるためのMongrelプロセス複数起動)という役割で利用されることが多い。<br />
<br />
<br />
<ul>
<li><strong>WEBrick</strong></li>
</ul>
Rubyに標準添付されているhttpサーバソフトウェア。<br />
公式ページにはhttpサーバ構築のためのライブラリと記されている。主に開発用に使用する。<br />
<br />
</p>
<blockquote><p>
WEBrick is a Ruby library program to build HTTP servers. </p>
<cite>via: <a href="http://raa.ruby-lang.org/project/webrick" target="_blank">RAA &#8211; webrick</a></cite><br />
</p></blockquote>
<p>
実際にWEBrickでhttpプロキシサーバを作るチュートリアルが<a href="http://jp.rubyist.net/magazine/?0002-WEBrickProxy#fm01">こちら</a>に載っている。<br />
<br />
<br />
<h2>httpサーバと組み合わせるモジュール</h2>
<ul>
<li><strong>FastCGI</strong></li>
</ul>
CGIはクライアントからhttpリクエストがある都度プロセスを立ち上げ、レスポンスを返した後にそのプロセスを落とす。このオーバーヘッドを無くそうとしたものがFastCGI。FastCGIによって起動されたCGIプログラムはHTTPDプロセスとは別に起動するが、CGIの処理が終了してもプロセスは残る。そのプロセスを使い回すことでパフォーマンスの向上が図れる。<br />
<a href="http://webos-goodies.jp/archives/50816782.html">こちら</a>により詳細な解説があります。<br />
<br />
<br />
<ul>
<li><strong>Passenger(mod_ruby)</strong></li>
</ul>
RailsアプリケーションをApache上で動作させるためのモジュール。PHPでいうところの、mod_php。これがあればMongrelやWEBrickは不要。パフォーマンスにおいてもMongrelより（ちょっと）早いらしい。<br />
<br />
<img alt="passenger_mongrel_thin_benchmark.png" src="http://www.synapz.jp/blog/mrsy/2008/04/18/passenger_mongrel_thin_benchmark.png" width="470" height="292" class="mt-image-center">
画像は<a href="http://www.modrails.com/documentation.html">公式サイト</a>より。<br />
インストール方法など詳細な解説は<a href="http://rails20.jp/2008/04/passenger/">こちら</a>。<br />
<br />
<br />
<h2>まとめ</h2>
最近リリースされたPassengerが一番手軽そうですが、信頼性についてはまだまだ未知数です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.synapz.jp/mrsy/2008/04/rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shindig (PHP版)を動かしてみる</title>
		<link>http://www.synapz.jp/mrsy/2008/04/shindig-php/</link>
		<comments>http://www.synapz.jp/mrsy/2008/04/shindig-php/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 05:05:25 +0000</pubDate>
		<dc:creator>mrsy</dc:creator>
				<category><![CDATA[OpenSocial]]></category>

		<guid isPermaLink="false">http://www.synapz.jp/mrsy/2008/04/04/post50/</guid>
		<description><![CDATA[
Shindigとは、OpenSocialとGoogleGadgetの仕様に準拠したオープンソースのサーバソフトウェアです。Apache Software Foundation内で開発が進められています。



Gadget Container JavaScript &#8212; core JavaScript foundation for general gadget functionality. This JavaScript manages security, communication, UI layout, and feature extensions, such as the OpenSocial API.
Gadget Server &#8212; an open source version of Google&#8217;s gmodules.com, which is used to render the gadget XML into JavaScript and HTML for the container to expose via [...]]]></description>
			<content:encoded><![CDATA[<p>
Shindigとは、OpenSocialとGoogleGadgetの仕様に準拠したオープンソースのサーバソフトウェアです。Apache Software Foundation内で開発が進められています。<br />
</p>
<blockquote><p>
<ul>
<li><strong>Gadget Container JavaScript</strong> &#8212; core JavaScript foundation for general gadget functionality. This JavaScript manages security, communication, UI layout, and feature extensions, such as the OpenSocial API.</li>
<li><strong>Gadget Server</strong> &#8212; an open source version of Google&#8217;s gmodules.com, which is used to render the gadget XML into JavaScript and HTML for the container to expose via the container JavaScript.</li>
<li><strong>OpenSocial Container JavaScript</strong> &#8212; JavaScript environment that sits on top of the Gadget Container JavaScript and provides OpenSocial specific functionality (profiles, friends, activities, datastore).</li>
<li><strong>OpenSocial Gateway Server (does not yet exist in the repository)</strong> &#8212; an implementation of the server interface to container-specific information, including the OpenSocial REST APIs, with clear extension points so others can connect it to their own backends.</li>
</ul>
<cite>via: <a href="http://incubator.apache.org/shindig/" target="_blank">What is Shindig?</a></cite><br />
</p></blockquote>
<p>
Shindigを動作させる事によって、自分のWebアプリケーション上でGadgetをホスティングでき、さらにOpenSocialアプリケーション機能を提供できます。<br />
今回はShindigのダウンロードからPHP上で動作させるまでをやってみました。<br />
<br />
<br />
<big><strong>ソースをダウンロード</strong></big><br />
<pre><code>$&gt; mkdir -p ~/src/shindig
$&gt; cd ~/src/shindig
$&gt; svn co http://svn.apache.org/repos/asf/incubator/shindig/trunk/ .
</code></pre>
しばらくするとダウンロードが完了します。最新のリビジョンは 644261 でした。<br />
<br />
<br />
<big><strong>Webサーバに配置</strong></big><br />
<pre><code>$&gt; cd /Applications/xampp/xamppfiles/htdocs
$&gt; ln -s ~/src/shindig/php/gadgets .
</code></pre>
<br />
<br />
<big><strong>サンプルGadgetを動かす</strong></big><br />
Webサーバを起動し、http://localhost/gadgets/ifr?url=http://www.labpixies.com/campaigns/todo/todo.xml にアクセスすると、、<br />
<img alt="1.png" src="http://www.synapz.jp/blog/mrsy/2008/04/04/1.png" width="394" height="372" class="mt-image-center">
ガジェットコンテナは動いているようです。<br />
<br />
iGoogleのようにガジェットを表示させるサンプルです。<br />
<img src="http://www.synapz.jp/blog/mrsy/2008/04/04/3-thumb-500x247.png" width="500" height="247" alt="pic2.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
<br />
<big><strong>OpenSocial Gadgetを動かす</strong></big><br />
<br />
http://localhost/gadgets/files/samplecontainer/samplecontainer.html<br />
<br />
こちらのサンプルはOpenSocialがジェットのデモです。起動時にエラーダイアログが表示され、動いてくれませんでした。ソースを見る限り、ViewerとOwnerが &#8220;Hello&#8221; と言い合う（？）もののようです。<br />
<br />
<img src="http://www.synapz.jp/blog/mrsy/2008/04/04/6-thumb-500x385.png" width="500" height="385" alt="pic6.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
<br />
<big><strong>まとめ</strong></big><br />
Java版しか動かないと思っていましたが、PHP版も開発が進んでいるようです。早くすべての機能を試したいですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.synapz.jp/mrsy/2008/04/shindig-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rubyでデザインパターン -Command-</title>
		<link>http://www.synapz.jp/mrsy/2008/04/ruby-command/</link>
		<comments>http://www.synapz.jp/mrsy/2008/04/ruby-command/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 09:44:09 +0000</pubDate>
		<dc:creator>mrsy</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[デザインパターン]]></category>

		<guid isPermaLink="false">http://www.synapz.jp/mrsy/2008/04/01/post49/</guid>
		<description><![CDATA[
最近Rubyを勉強してます（遅いって？）。Rubyのソースを見る度に、なぜか受け付け難い雰囲気を感じていたのですが、最近会う人会う人がRuby(on Rails)で開発しているよ的な発言をされているので、やむにやまれず触発された感じです。

言語学習はやっぱりコード書かなきゃと思いましたので、ここに晒す次第です。あまりデザインパターンに意味はありません。

クラス図



CommandExecutor.rb
class CommandExecutor
def initialize
@commands = Array.new
end
def setCommand cmd
@commands &#60;&#60; cmd
end
def execute
@commands.each do &#124;cmd&#124;
cmd.execute
end
end
end



AbstractCommand.rb
class AbstractCommand
def initialize
@option     = '';
@command    = '';
end
def execute
%x{@command};
end
def setOption opt
@option = opt
end
end



CurrentDirCommand.rb
require 'AbstractCommand.rb'
class CurrentDirCommand &#60; AbstractCommand
def initialize
@command = &#39;pwd&#39;;
end
def execute
STDOUT &#60;&#60; %x{#{@command}}
end
end



ListCommand.rb
require 'AbstractCommand.rb'
class ListCommand &#60; AbstractCommand
def initialize
@command = &#39;ls&#39;;
end
def execute
if @option.nil? then
cmd = @command
else
cmd = @command [...]]]></description>
			<content:encoded><![CDATA[<p>
最近Rubyを勉強してます（遅いって？）。Rubyのソースを見る度に、なぜか受け付け難い雰囲気を感じていたのですが、最近会う人会う人がRuby(on Rails)で開発しているよ的な発言をされているので、やむにやまれず触発された感じです。<br />
<br />
言語学習はやっぱりコード書かなきゃと思いましたので、ここに晒す次第です。あまりデザインパターンに意味はありません。<br />
<br />
<strong><big>クラス図</big></strong><br /><br />
<img src="http://www.synapz.jp/blog/mrsy/2008/04/01/class-thumb-500x202.png" width="500" height="202" alt="class.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
<br />
<strong><big>CommandExecutor.rb</big></strong><br />
<pre><code>class CommandExecutor
def initialize
@commands = Array.new
end
def setCommand cmd
@commands &lt;&lt; cmd
end
def execute
@commands.each do |cmd|
cmd.execute
end
end
end
</code></pre>
<br />
<br />
<strong><big>AbstractCommand.rb</big></strong><br />
<pre><code>class AbstractCommand
def initialize
@option     = '';
@command    = '';
end
def execute
%x{@command};
end
def setOption opt
@option = opt
end
end
</code></pre>
<br />
<br />
<strong><big>CurrentDirCommand.rb</big></strong><br />
<pre><code>require 'AbstractCommand.rb'
class CurrentDirCommand &lt; AbstractCommand
def initialize
@command = &#39;pwd&#39;;
end
def execute
STDOUT &lt;&lt; %x{#{@command}}
end
end
</code></pre>
<br />
<br />
<strong><big>ListCommand.rb</big></strong><br />
<pre><code>require 'AbstractCommand.rb'
class ListCommand &lt; AbstractCommand
def initialize
@command = &#39;ls&#39;;
end
def execute
if @option.nil? then
cmd = @command
else
cmd = @command + @option
end
result = %x{#{cmd}}.split(/\n/)
STDOUT &lt;&lt; result.join(&quot;\n&quot;) + &quot;\n&quot;
end
end
</code></pre>
<br />
<br />
<strong><big>MakeDirCommand.rb</big></strong><br />
<pre><code>require 'AbstractCommand.rb'
class MakeDirCommand &lt; AbstractCommand
def initialize
@command = &#39;mkdir&#39;;
end
def execute
if @option.nil? then
cmd = @command
else
cmd = @command + @option
end
STDOUT &lt;&lt; %x{#{cmd}}
end
end
</code></pre>
<br />
<br />
<strong><big>main.rb</big></strong><br />
<pre><code>#!/usr/bin/ruby
require 'CommandExecutor'
require 'ListCommand'
require 'CurrentDirCommand'
require 'MakeDirCommand'
# コマンド実行オブジェクトを new
executor = CommandExecutor.new
# pwd コマンド追加
pwd = CurrentDirCommand.new
executor.setCommand pwd
# lsコマンド追加
ls = ListCommand.new
ls.setOption ' -lk'
executor.setCommand ls
# mkdir コマンド追加
mkdir = MakeDirCommand.new
mkdir.setOption ' tmp'
executor.setCommand mkdir
# 全部実行
executor.execute
exit
</code></pre>
<br />
<a href="http://www.ruby-lang.org/ja/man/html/_A5AFA5E9A5B9A1BFA5E1A5BDA5C3A5C9A4CEC4EAB5C1.html#a.b8.c6.a4.d3.bd.d0.a4.b7.c0.a9.b8.c2">呼び出し制限</a>がJavaとは異なっていて、いまいち理解できてません。<br />
<br />
でも細かいとこですが、括弧やセミコロン省略できるだけでも、よりプログラムの本質に集中できるというかタイピング数が少なくなるせいか、生産性は高いかもしれません。<br />
<br />
どなたかこのソースに突っ込んでください。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.synapz.jp/mrsy/2008/04/ruby-command/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google技術者交流会(OpenSocial)にて</title>
		<link>http://www.synapz.jp/mrsy/2008/03/googleopensocial/</link>
		<comments>http://www.synapz.jp/mrsy/2008/03/googleopensocial/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 04:55:47 +0000</pubDate>
		<dc:creator>mrsy</dc:creator>
				<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[RESTFul]]></category>
		<category><![CDATA[Shindig]]></category>

		<guid isPermaLink="false">http://www.synapz.jp/mrsy/2008/03/18/post48/</guid>
		<description><![CDATA[
3月14日、Google技術者交流会に参加してきました。
本場USのGoogleエンジニアによるOpenSocialについての概要プレゼンと、著名な方々によるパネルディスカッションの２部構成でした。

OpenSocialの概要については、公開されているドキュメントやorkut上で動くアプリを見ていたので何となく把握できていたのですが、「なぜGadgetなのか？」、「他のSNSからどのように情報（パーソナルプロフィール、友達関係、行動履歴）を取得するの？」について、自分の頭の中で整理ができました。


なぜGadgetなのか？
チュートリアル等で紹介されているサンプルはすべてGoogle Gadgetで作成されていたので、どうせiGoogleやorkutでしか動かないじゃん、という思いがありました。今回のプレゼンの中で紹介されていた、「Shindig」なるオープンソースのサーバソフトの紹介があり、その疑念は払拭されました。

Shindigとは、Apache incubatorプロジェクト内で開発が進められている、OpenSocial コンテナサーバなるものらしいです。主な機能は下記の通り。

Gadgetサーバ
Javascriptコンテナを提供
RESTful APIを提供


例えばあるSNS内でこのサーバを動作させておく事でOpenSocialアプリを動かす事ができ、他のSNSやサービスへはRESTful APIでデータをフィードする事ができます。

現時点ではまだ安定動作するバージョンがついたものは存在しませんが、Subversionリポジトリからソースコードを入手できるので、時間があれば構築してみたいと思います。


他のSNSからどのように情報を取得するのか？
RESTful APIによって、情報を取得できるようにするらしいです。現在はまだ仕様策定中で、サンプル等は見つけられませんでした。また、REST APIはセキュリティを担保するため、OAuthによるユーザー認証(Authentication)と認可(Authorization)をするとのことです。

質疑応答の際、「Gadget用のJavascript APIの公開よりもREST APIの方を先に決めるべきでしょ」的な突っ込みをされている方がいらっしゃいました。確かにそうですよね。チュートリアルだけやっていると、OpenSocial イコール Gadgetのイメージしか無く、orkutのサンプルアプリにしても、orkut内の友達情報をとってくるものしか見た事が有りませんでした。

今後RESTful APIのサンプルが出次第、SNS横断的なアプリが出回る事でしょう。


まとめ
Shindig, OAuth, Gadgetがどのように結びついているのかをちょっと図にまとめてみました。



パネリストの田中洋一郎さんが披露した、コミュスケのOpenSocialアプリ版は、僕が見た中で一番アプリっぽかったです。さらにorkutだけではなくhi5(orkutと同様OpenSocialコンテナ)にもプログラム修正なしで動いているとの事！ Write Once, Run Anywareですね。

オープンソースSNSエンジンであるOpenPNEは、コンテナ機能を実装し始めているようです。

また、今回の交流会にはカテゴリ特化型の小規模なSNS運営者の方も多く参加していたそうです。そういった人たちがOpenSocialを実装する事によってSNSの大変動が起きるかもしれませんね。
]]></description>
			<content:encoded><![CDATA[<p>
3月14日、Google技術者交流会に参加してきました。<br />
本場USのGoogleエンジニアによるOpenSocialについての概要プレゼンと、著名な方々によるパネルディスカッションの２部構成でした。<br />
<br />
OpenSocialの概要については、公開されているドキュメントやorkut上で動くアプリを見ていたので何となく把握できていたのですが、「なぜGadgetなのか？」、「他のSNSからどのように情報（パーソナルプロフィール、友達関係、行動履歴）を取得するの？」について、自分の頭の中で整理ができました。<br />
<br />
<br />
<h2>なぜGadgetなのか？</h2>
チュートリアル等で紹介されているサンプルはすべてGoogle Gadgetで作成されていたので、どうせiGoogleやorkutでしか動かないじゃん、という思いがありました。今回のプレゼンの中で紹介されていた、「Shindig」なるオープンソースのサーバソフトの紹介があり、その疑念は払拭されました。<br />
<br />
<a href="http://incubator.apache.org/shindig/">Shindig</a>とは、<a href="http://incubator.apache.org/">Apache incubator</a>プロジェクト内で開発が進められている、OpenSocial コンテナサーバなるものらしいです。主な機能は下記の通り。<br />
<ul>
<li>Gadgetサーバ</li>
<li>Javascriptコンテナを提供</li>
<li>RESTful APIを提供</li>
</ul>
<br />
例えばあるSNS内でこのサーバを動作させておく事でOpenSocialアプリを動かす事ができ、他のSNSやサービスへはRESTful APIでデータをフィードする事ができます。<br />
<br />
現時点ではまだ安定動作するバージョンがついたものは存在しませんが、Subversionリポジトリからソースコードを入手できるので、時間があれば構築してみたいと思います。<br />
<br />
<br />
<h2>他のSNSからどのように情報を取得するのか？</h2>
RESTful APIによって、情報を取得できるようにするらしいです。現在はまだ仕様策定中で、サンプル等は見つけられませんでした。また、REST APIはセキュリティを担保するため、OAuthによるユーザー認証(Authentication)と認可(Authorization)をするとのことです。<br />
<br />
質疑応答の際、「Gadget用のJavascript APIの公開よりもREST APIの方を先に決めるべきでしょ」的な突っ込みをされている方がいらっしゃいました。確かにそうですよね。チュートリアルだけやっていると、OpenSocial イコール Gadgetのイメージしか無く、orkutのサンプルアプリにしても、orkut内の友達情報をとってくるものしか見た事が有りませんでした。<br />
<br />
今後RESTful APIのサンプルが出次第、SNS横断的なアプリが出回る事でしょう。<br />
<br />
<br />
<h2>まとめ</h2>
Shindig, OAuth, Gadgetがどのように結びついているのかをちょっと図にまとめてみました。<br />
<br />
<img src="http://www.synapz.jp/blog/mrsy/2008/03/18/pic1-thumb-500x256.png" width="500" height="256" alt="pic1.png" class="mt-image-center" style="text-align: center;margin: 0 auto 20px" />
<br />
パネリストの田中洋一郎さんが披露した、<a href="http://www.eisbahn.jp/yoichiro/2008/03/_open_social_edition.html">コミュスケのOpenSocialアプリ版</a>は、僕が見た中で一番アプリっぽかったです。さらにorkutだけではなくhi5(orkutと同様OpenSocialコンテナ)にもプログラム修正なしで動いているとの事！ Write Once, Run Anywareですね。<br />
<br />
オープンソースSNSエンジンであるOpenPNEは、<a href="http://trac.openpne.jp/ticket/1656">コンテナ機能を実装し始めている</a>ようです。<br />
<br />
また、今回の交流会にはカテゴリ特化型の小規模なSNS運営者の方も多く参加していたそうです。そういった人たちがOpenSocialを実装する事によってSNSの大変動が起きるかもしれませんね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.synapz.jp/mrsy/2008/03/googleopensocial/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
