<?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>candycane development blog &#187; candycane</title>
	<atom:link href="http://blog.candycane.jp/archives/tag/candycane/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.candycane.jp</link>
	<description></description>
	<lastBuildDate>Wed, 01 Feb 2012 04:16:55 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>ダッシュボードからプラグインのインストールが可能に &#8211; CandyCane v0.8.5リリース</title>
		<link>http://blog.candycane.jp/archives/1188</link>
		<comments>http://blog.candycane.jp/archives/1188#comments</comments>
		<pubDate>Tue, 03 Jan 2012 09:53:37 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[candycane]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=1188</guid>
		<description><![CDATA[CandyCaneダウンロード(ページ下部にZipとtar.gzの圧縮ファイルへのリンクがあります) RedmineをPHPに移植したタスク管理システム、CandyCaneのバージョンが0.8.5になりました。一部で話題になったにゃーんダウンチャートを生んだプラグイン機構を改良し、プラグインのインストールとアンインストールがダッシュボードから出来るようになりました。またプラグインのひな形を生成するシェルコマンドも同梱され、プラグインの開発をすぐに始める事ができます。 今回は作例としてチケットに「イイね」の機能を付けるLike Itプラグインを作成してみました。CakePHPベースでの開発はやはり効率がよくかなり少ないコードの分量で機能を実装する事ができたと思います。このプラグインのデモ動画はこちらです。 プラグインのカタログはgist上で管理しています。みなさんが作成したプラグインもgithubで公開されていればカタログに追加する事でダッシュボードからの配布が可能になります。ガントチャートのような独立性の高い機能については是非ともプラグインとして実装された事例が出てくればと思います。また僕自身が公開しているプラグインもそうですが、ネタっぽいものでも作ってみると勉強になるのでCakePHPの学習題材としても良いのではと思います。 開発にかかった時間は25時間。また今回から@okonomiさんが送ってくださったプルリクエストも含まれています。 Bug #207: Supporting plugin architecture. Part3 Bug #208: Kindly notice mod_rewrite availability. Bug #209: list is broken on render if it has more than 3items. Bug #211: Plugin generation by console. Bug #214: 「トラッカー」画面でワークフロー未設定のエラーメッセージが表示されない Enhancement #185: &#8220;Like&#8221; feature for issue. Enhancement #210: Get plugin catalog from remote. まだバグつぶしや実現できていない構想もありますが、プラグイン機構で自由に機能を追加しやすい土壌が整ってきました。機能だけでなくデザインなどについても自由に組み替えて利用できるようなシステムにしていければよいなと思います。インストールも簡単ですので、お時間のある方はインストールの上でいじってみたり、プラグインを作ってみて貰えれば大変嬉しいです。 最近の反響 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.candycane.jp/wp-content/uploads/2012/01/plugin.png"><img src="http://blog.candycane.jp/wp-content/uploads/2012/01/plugin-300x121.png" alt="" title="plugin" width="300" height="121" class="aligncenter size-medium wp-image-1190" /></a></p>
<p><a href="https://github.com/yandod/candycane/downloads" target="_blank">CandyCaneダウンロード<br/>(ページ下部にZipとtar.gzの圧縮ファイルへのリンクがあります)</a></p>
<p>RedmineをPHPに移植したタスク管理システム、CandyCaneのバージョンが0.8.5になりました。一部で話題になった<a href="http://blog.candycane.jp/archives/1103" title="にゃーんダウンチャートが使えます – CandyCane v0.8.4" target="_blank">にゃーんダウンチャート</a>を生んだプラグイン機構を改良し、<strong>プラグインのインストールとアンインストールがダッシュボードから出来るようになりました。</strong>またプラグインのひな形を生成するシェルコマンドも同梱され、プラグインの開発をすぐに始める事ができます。</p>
<p>今回は作例としてチケットに「イイね」の機能を付ける<a href="https://github.com/yandod/cc_like_it" target="_blank">Like Itプラグイン</a>を作成してみました。CakePHPベースでの開発はやはり効率がよくかなり少ないコードの分量で機能を実装する事ができたと思います。このプラグインのデモ動画はこちらです。</p>
<p><iframe width="600" height="450" src="http://www.youtube.com/embed/wsnByUby4HA?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>プラグインのカタログは<a href="https://gist.github.com/1550522" target="_blank">gist上で管理しています</a>。<strong>みなさんが作成したプラグインもgithubで公開されていればカタログに追加する事でダッシュボードからの配布が可能になります。</strong>ガントチャートのような独立性の高い機能については是非ともプラグインとして実装された事例が出てくればと思います。また僕自身が公開しているプラグインもそうですが、ネタっぽいものでも作ってみると勉強になるのでCakePHPの学習題材としても良いのではと思います。</p>
<p>開発にかかった時間は25時間。また今回から<a href="http://twitter.com/#!/okonomi" target="_blank">@okonomi</a>さんが送ってくださったプルリクエストも含まれています。</p>
<ul>
<li><a href="http://my.candycane.jp/issues/show/207" class=" issue closed">Bug #207</a>: Supporting plugin architecture. Part3</li>
<li><a href="http://my.candycane.jp/issues/show/208" class=" issue closed">Bug #208</a>: Kindly notice mod_rewrite availability.</li>
<li><a href="http://my.candycane.jp/issues/show/209" class=" issue closed">Bug #209</a>: list is broken on render if it has more than 3items.</li>
<li><a href="http://my.candycane.jp/issues/show/211" class=" issue closed">Bug #211</a>: Plugin generation by console.</li>
<li><a href="http://my.candycane.jp/issues/show/214" class=" issue closed">Bug #214</a>: 「トラッカー」画面でワークフロー未設定のエラーメッセージが表示されない</li>
<li><a href="http://my.candycane.jp/issues/show/185" class=" issue closed">Enhancement  #185</a>: &#8220;Like&#8221; feature for issue.</li>
<li><a href="http://my.candycane.jp/issues/show/210" class=" issue closed">Enhancement  #210</a>: Get plugin catalog from remote.</li>
</ul>
<p>まだバグつぶしや実現できていない構想もありますが、プラグイン機構で自由に機能を追加しやすい土壌が整ってきました。機能だけでなくデザインなどについても自由に組み替えて利用できるようなシステムにしていければよいなと思います。インストールも簡単ですので、お時間のある方はインストールの上でいじってみたり、プラグインを作ってみて貰えれば大変嬉しいです。</p>
<h3>最近の反響</h3>
<p><!-- tweet id : 153844502568767488 --><br />
<style type='text/css'>#bbpBox_153844502568767488 a { text-decoration:none; color:#0084B4; }#bbpBox_153844502568767488 a:hover { text-decoration:underline; }</style>
<div id='bbpBox_153844502568767488' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'>
<div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>CandyCane&#12398;&#12486;&#12540;&#12510;&#12434;&#12459;&#12473;&#12479;&#12510;&#12452;&#12474;&#12375;&#12383;&#12425;&#12289;&#12377;&#12372;&#12367;&#20351;&#12356;&#12420;&#12377;&#12381;&#12358;&#12394;&#35211;&#12383;&#30446;&#12391;&#23566;&#20837;&#12418;&#31777;&#21336;&#12394;BTS&#12364;&#12391;&#12365;&#12390;&#12289;OSS&#20351;&#12387;&#12383;&#38283;&#30330;&#12467;&#12531;&#12469;&#12523;&#12387;&#12390;&#12356;&#12358;&#12420;&#12426;&#12363;&#12383;&#12418;&#12354;&#12427;&#12394;&#8230; &#38283;&#30330;&#29694;&#22580;&#12414;&#12384;&#12411;&#12392;&#12435;&#12393;&#35506;&#38988;&#31649;&#29702;&#12364;&#12450;&#12524;&#12394;&#12398;&#12364;&#35506;&#38988;&#12384;&#12363;&#12425;</span>
<div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://blog.candycane.jp/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on 2012年1月2日 11:26 PM' href='http://twitter.com/#!/tanakahisateru/status/153844502568767488' target='_blank'>2012年1月2日 11:26 PM</a> via <a href="http://www.echofon.com/" rel="nofollow" target="blank">Echofon</a><a href='https://twitter.com/intent/tweet?in_reply_to=153844502568767488' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=153844502568767488' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=153844502568767488' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div>
<div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=tanakahisateru'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a0.twimg.com/profile_images/1295928622/tanakahisateru_normal.jpg' /></a></div>
<div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=tanakahisateru'>@tanakahisateru</a>
<div style='margin:0; padding-top:2px'>Hisateru Tanaka</div>
</div>
<div style='clear:both'></div>
</div>
</div>
<p><!-- end of tweet --></p>
<p><!-- tweet id : 153455446647250944 --><br />
<style type='text/css'>#bbpBox_153455446647250944 a { text-decoration:none; color:#0084B4; }#bbpBox_153455446647250944 a:hover { text-decoration:underline; }</style>
<div id='bbpBox_153455446647250944' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'>
<div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>candycane&#35430;&#12375;&#12390;&#12415;&#12383;&#12369;&#12393;&#12475;&#12483;&#12488;&#12450;&#12483;&#12503;&#12364;&#31777;&#21336;&#12391;&#33391;&#12356;&#12290;&#23433;&#23450;&#29256;&#12364;&#20986;&#12383;&#12425;Redmine&#12363;&#12425;&#20055;&#12426;&#25563;&#12360;&#12383;&#12356;&#12394;&#12540;&#12290; <a href="http://t.co/QQfckHJy" rel="nofollow">http://t.co/QQfckHJy</a></span>
<div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://blog.candycane.jp/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on 2012年1月1日 9:40 PM' href='http://twitter.com/#!/okonomi/status/153455446647250944' target='_blank'>2012年1月1日 9:40 PM</a> via <a href="http://sites.google.com/site/yorufukurou/" rel="nofollow" target="blank">YoruFukurou</a><a href='https://twitter.com/intent/tweet?in_reply_to=153455446647250944' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=153455446647250944' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=153455446647250944' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div>
<div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=okonomi'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/1144221998/icon_twitter_normal.jpg' /></a></div>
<div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=okonomi'>@okonomi</a>
<div style='margin:0; padding-top:2px'>&#12458;&#12467;&#12494;&#12511;</div>
</div>
<div style='clear:both'></div>
</div>
</div>
<p><!-- end of tweet --></p>
<p><!-- tweet id : 151106830058266624 --><br />
<style type='text/css'>#bbpBox_151106830058266624 a { text-decoration:none; color:#0084B4; }#bbpBox_151106830058266624 a:hover { text-decoration:underline; }</style>
<div id='bbpBox_151106830058266624' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#C0DEED; background-image:url(http://a0.twimg.com/images/themes/theme1/bg.png); background-repeat:no-repeat'>
<div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>CandyCane&#12434;&#35211;&#12390;&#12427;&#12290;Redmine&#12398;PHP&#29256;&#12391;&#12377;&#12363;&#12353;&#12290;&#23433;&#34276;&#12373;&#12435;&#12364;&#12476;&#12525;&#12363;&#12425;&#38283;&#30330;&#12375;&#22987;&#12417;&#12383;&#12392;&#12289;&#12373;&#12387;&#12365;&#30693;&#12387;&#12390;&#12499;&#12483;&#12463;&#12522;&#12290;&#20932;&#12356;&#12391;&#12377;&#12394;&#12353;&#12290; <a href="http://t.co/CrN15k3W" rel="nofollow">http://t.co/CrN15k3W</a></span>
<div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://blog.candycane.jp/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on 2011年12月26日 10:07 AM' href='http://twitter.com/#!/khoshino/status/151106830058266624' target='_blank'>2011年12月26日 10:07 AM</a> via web<a href='https://twitter.com/intent/tweet?in_reply_to=151106830058266624' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=151106830058266624' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=151106830058266624' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div>
<div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=khoshino'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a2.twimg.com/profile_images/1296040127/ccccc_normal.jpg' /></a></div>
<div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=khoshino'>@khoshino</a>
<div style='margin:0; padding-top:2px'>&#26143;&#37326;&#37030;&#25935;</div>
</div>
<div style='clear:both'></div>
</div>
</div>
<p><!-- end of tweet --></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/1188/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>2011年を振り返る(206投稿,176コミット,8プレゼンテーション)</title>
		<link>http://blog.candycane.jp/archives/1158</link>
		<comments>http://blog.candycane.jp/archives/1158#comments</comments>
		<pubDate>Sat, 31 Dec 2011 05:24:44 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[candycane]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=1158</guid>
		<description><![CDATA[激動の2011年が終っていきます。Nyan CatをBGMに今年の活動を振り返ってみようと思います。 ブログ記事 今年は新たに英語の情報を紹介するA-Listersというブログを立ち上げ、このブログと英語版のブログと併せてかなりたくさんのブログ記事を書いた一年になりました。それぞれのブログに投稿した記事数をせっかくなので数えてみます。 A-Listers 119 candycane development 47 CandyCane yet another Redmine on CakePHP 5 個人の英語ブログ 35 合計で206本。こんなに書いたのは初めてです。ただ夏頃に体調を崩したのでここまで書くと健康を害するようなのであまりお勧めできません。 オープンソース活動 今年はCandyCaneに大きな手応えを感じる事が出来た一年でした。さまざまな国からプルリクエストや感想などが届きはじめ、業務で利用しているという話も多く聞きます。思い描いていた機能を実現するまで後少しなのでこのまま頑張って行きたいですね。また、「CandyCaneで起業すればいいじゃん」というアドバイスも国内外から受けています。これについても思案中です。 githubでのコミット数はcandycaneとにゃーんダウンチャートのリポジトリの合計で176コミットでした。どうしても私生活が忙しい時などは引っ張られてしまいますね。 candycane$ git shortlog -sn 43690c..06ed 118 Yusuke Ando 88 Graham Weldon 46 yandod 13 ha1t 3 elboletaire 3 Steve Grosbois 3 Michito Suzuki 2 Òscar Casajuana 1 hiromi2424 1 tomo &#160; cc_nyancat$ git [...]]]></description>
			<content:encoded><![CDATA[<p><iframe width="600" height="450" src="http://www.youtube.com/embed/AaEmCFiNqP0?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>激動の2011年が終っていきます。Nyan CatをBGMに今年の活動を振り返ってみようと思います。</p>
<h3>ブログ記事</h3>
<p><a href="http://blog.candycane.jp/wp-content/uploads/2011/12/alisters.png"><img src="http://blog.candycane.jp/wp-content/uploads/2011/12/alisters-300x129.png" alt="" title="alisters" width="300" height="129" class="aligncenter size-medium wp-image-1162" /></a></p>
<p>今年は新たに英語の情報を紹介するA-Listersというブログを立ち上げ、このブログと英語版のブログと併せてかなりたくさんのブログ記事を書いた一年になりました。それぞれのブログに投稿した記事数をせっかくなので数えてみます。</p>
<ul>
<li><a href="http://tech.a-listers.jp/" target="_blank">A-Listers</a> 119</li>
<li><a href="http://blog.candycane.jp/" target="_blank">candycane development</a> 47</li>
<li><a href="http://en.blog.candycane.jp/" target="_blank">CandyCane yet another Redmine on CakePHP</a> 5</li>
<li>個人の英語ブログ 35</li>
</ul>
<p>合計で206本。こんなに書いたのは初めてです。ただ夏頃に体調を崩したのでここまで書くと健康を害するようなのであまりお勧めできません。</p>
<h3>オープンソース活動</h3>
<p>今年はCandyCaneに大きな手応えを感じる事が出来た一年でした。さまざまな国からプルリクエストや感想などが届きはじめ、業務で利用しているという話も多く聞きます。思い描いていた機能を実現するまで後少しなのでこのまま頑張って行きたいですね。また、<strong>「CandyCaneで起業すればいいじゃん」</strong>というアドバイスも国内外から受けています。これについても思案中です。<br />
githubでのコミット数は<a href="https://github.com/yandod/candycane" target="_blank">candycane</a>と<a href="https://github.com/yandod/cc_nyancat" target="_blank">にゃーんダウンチャート</a>のリポジトリの合計で176コミットでした。どうしても私生活が忙しい時などは引っ張られてしまいますね。</p>

<div class="wp_syntax"><div class="code"><pre class="txt" style="font-family:monospace;">candycane$ git shortlog -sn 43690c..06ed
   118  Yusuke Ando
    88  Graham Weldon
    46  yandod
    13  ha1t
     3  elboletaire
     3  Steve Grosbois
     3  Michito Suzuki
     2  Òscar Casajuana
     1  hiromi2424
     1  tomo
&nbsp;
cc_nyancat$ git shortlog -sn
    13  Yusuke Ando</pre></div></div>

<h3>プレゼンテーション</h3>
<p><a href="http://files.myopera.com/sizuhiko/blog/images/cakefest/100_1080.jpg"><img alt="" src="http://files.myopera.com/sizuhiko/blog/images/cakefest/100_1080.jpg" class="alignnone" width="320" height="240" /></a><br />
プレゼンテーションの活動についてはCandyCaneの発表を中心に8回行いました。特に今年はイギリスで行われたCakeFestでの発表に採択されたおかげで初めて海外のイベントで発表する機会を得たのが良かったです。英語的には反省点はいくらでもありますが、発表した事によって世界中からフィードバックを得る事が出来たので成功したと思っています。とはいえもっとスムースに話せるようになりたいので英語の練習はまだまだ欠かせないです。<br />
発表の後に得たフィードバックについては何本か記事を書いて多くの方に読んでもらえました。<br />
<a href="http://blog.candycane.jp/archives/773" title="CakeFest 2011に参加しました。" target="_blank">CakeFest 2011に参加しました。</a><br />
<a href="http://blog.candycane.jp/archives/776" title="CandyCaneの発表で感じた発信と恩返しの大切さ" target="_blank">CandyCaneの発表で感じた発信と恩返しの大切さ</a><br />
<a href="http://blog.candycane.jp/archives/863" title="プログラマがコードを書き、公開する事の価値" target="_blank">プログラマがコードを書き、公開する事の価値</a></p>
<h3>とにかくアウトプットが大事</h3>
<p>日本では震災の影響や海外進出が身近になったことでいろいろと日本のスタイルに対して物を言う空気が出来て来たように思います。自分自身も思う所はありますが、そういった事に対して議論をしているだけで労力を使うよりは自分が理想だと思う事を実行に移して、アウトプットを出して行く方が良いのではと思っています。<br />
来年も引き続きアウトプットを意識して自分が良いと思った事を実行に移す一年にできればよいなと思います。</p>
<p>各地、各方面でお会いした皆様やオンラインでやりとりした皆様には大変お世話になりました。来年も宜しくお願い致します。</p>
<p>昨年の振り返り記事<br />
<a href="http://blog.candycane.jp/archives/478" title="2010年を振り返る" target="_blank">2010年を振り返る</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/1158/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>にゃーんダウンチャートが使えます &#8211; CandyCane v0.8.4</title>
		<link>http://blog.candycane.jp/archives/1103</link>
		<comments>http://blog.candycane.jp/archives/1103#comments</comments>
		<pubDate>Sat, 17 Dec 2011 14:37:39 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[candycane]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=1103</guid>
		<description><![CDATA[RedmineをPHPに移植したCandyCaneのv0.8.4をリリースしました。 このリリースによりさまざまなプラグインを開発できるようになりました。完全なプロダクトを作るというのはかなり難しい目標です。そこでプラグインシステムを用意して必要な人が自分の好きな機能を追加できるというのが望ましいと考えていました。CandyCaneのプラグインはCakePHPの流儀で作成する事ができ、これによりプラグインを作ってみる方が増えてくればよいなと思っています。ではプラグインの概要を見てみましょう。 CandyCaneのプラグインの基礎 CandyCaneのプラグインはCakePHPのプラグインです。. CakePHPのMVCをベースにしたコードを書く事でCandyCaneにプラグインとして追加できます。また追加のコードからCandyCaneのモデルやヘルパー、コンポーネントなどを呼び出す事が出来ます。例えばチケットのデータやプロジェクトのデータをモデルから取得できます。作成したページがCandyCaneとやり取りをする為のAPIも用意されています。これらのAPIはプラグインの内部のinit.phpから呼び出します。 画面上部のメニューへのページ追加 アプリケーション全体のレベルのページを追加したい場合は画面左上のメニューにリンクを追加する事になるでしょう。リンクを追加するにはMenuContainerオブジェクトをプラグインの中のinit.phpから使います。 $menuContainer = ClassRegistry::getObject&#40;'MenuContainer'&#41;; $menuContainer-&#62;addTopMenu&#40; array&#40; 'url' =&#62; '/cc_nyancat/nyan/index', 'class' =&#62; 'nyan-cat', 'caption' =&#62; 'Nyan Cat', 'logged' =&#62; false, 'admin' =&#62; false &#41; &#41;; プロジェクトタブへのページ追加 CandyCaneの多くのページはプロジェクト以下の要素として動作します。このようなページを作成する場合はページをプロジェクトタブに追加することになります。その場合はMenuContainerクラスを使います。また現在のプロジェクトをURLから推定する為のルーティングの設定が必要です。 $menuContainer-&#62;addProjectMenu&#40; 'nyancat', array&#40; 'plugin' =&#62; 'cc_nyancat', 'controller' =&#62; 'cc_nyancat_chart', 'action' =&#62; 'index', 'class' =&#62; '', 'caption' =&#62; 'Nyan Down Chart', 'params' =&#62; 'project_id', [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://candycanebts.files.wordpress.com/2011/12/candycane1.png"><img class="alignnone size-full wp-image-94" title="candycane1" src="http://candycanebts.files.wordpress.com/2011/12/candycane1.png" alt="" width="450" height="146" /></a></p>
<p><a href="https://github.com/yandod/candycane" target="_blank">RedmineをPHPに移植したCandyCane</a>の<a href="https://github.com/yandod/candycane/tags" target="_blank">v0.8.4をリリースしました。</a> このリリースによりさまざまなプラグインを開発できるようになりました。完全なプロダクトを作るというのはかなり難しい目標です。そこでプラグインシステムを用意して必要な人が自分の好きな機能を追加できるというのが望ましいと考えていました。CandyCaneのプラグインはCakePHPの流儀で作成する事ができ、これによりプラグインを作ってみる方が増えてくればよいなと思っています。ではプラグインの概要を見てみましょう。</p>
<h2>CandyCaneのプラグインの基礎</h2>
<p>CandyCaneのプラグインはCakePHPのプラグインです。. CakePHPのMVCをベースにしたコードを書く事でCandyCaneにプラグインとして追加できます。また追加のコードからCandyCaneのモデルやヘルパー、コンポーネントなどを呼び出す事が出来ます。例えばチケットのデータやプロジェクトのデータをモデルから取得できます。作成したページがCandyCaneとやり取りをする為のAPIも用意されています。これらのAPIはプラグインの内部の<a href="https://github.com/yandod/cc_nyancat/blob/master/init.php" target="_blank">init.php</a>から呼び出します。</p>
<h2>画面上部のメニューへのページ追加</h2>
<p><a href="http://candycanebts.files.wordpress.com/2011/12/plugin1.png"><img class="alignnone size-full wp-image-99" title="plugin1" src="http://candycanebts.files.wordpress.com/2011/12/plugin1.png" alt="" width="450" height="262" /></a></p>
<p>アプリケーション全体のレベルのページを追加したい場合は画面左上のメニューにリンクを追加する事になるでしょう。リンクを追加するにはMenuContainerオブジェクトをプラグインの中のinit.phpから使います。</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$menuContainer</span> <span style="color: #339933;">=</span> ClassRegistry<span style="color: #339933;">::</span><span style="color: #004000;">getObject</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'MenuContainer'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$menuContainer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addTopMenu</span><span style="color: #009900;">&#40;</span>
	<span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'url'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/cc_nyancat/nyan/index'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'class'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'nyan-cat'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'caption'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Nyan Cat'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'logged'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'admin'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span>
	<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h2>プロジェクトタブへのページ追加</h2>
<p><a href="http://candycanebts.files.wordpress.com/2011/12/plugin2.png"><img class="alignnone size-full wp-image-102" title="plugin2" src="http://candycanebts.files.wordpress.com/2011/12/plugin2.png" alt="" width="450" height="116" /></a></p>
<p>CandyCaneの多くのページはプロジェクト以下の要素として動作します。このようなページを作成する場合はページをプロジェクトタブに追加することになります。その場合はMenuContainerクラスを使います。また現在のプロジェクトをURLから推定する為のルーティングの設定が必要です。</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$menuContainer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addProjectMenu</span><span style="color: #009900;">&#40;</span>
  <span style="color: #0000ff;">'nyancat'</span><span style="color: #339933;">,</span>
  <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
          <span style="color: #0000ff;">'plugin'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'cc_nyancat'</span><span style="color: #339933;">,</span>
          <span style="color: #0000ff;">'controller'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'cc_nyancat_chart'</span><span style="color: #339933;">,</span>
          <span style="color: #0000ff;">'action'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'index'</span><span style="color: #339933;">,</span>
          <span style="color: #0000ff;">'class'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span>
          <span style="color: #0000ff;">'caption'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Nyan Down Chart'</span><span style="color: #339933;">,</span>
          <span style="color: #0000ff;">'params'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'project_id'</span><span style="color: #339933;">,</span>
          <span style="color: #0000ff;">'_allowed'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #666666; font-style: italic;">// for bypassing permmission system.</span>
  <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// make sure put new route setting which includes project_id</span>
App<span style="color: #339933;">::</span><span style="color: #004000;">import</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Core'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'Router'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
Router<span style="color: #339933;">::</span><span style="color: #004000;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/projects/:project_id/nyanchart/:action'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
  <span style="color: #0000ff;">'plugin'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'cc_nyancat'</span><span style="color: #339933;">,</span>
  <span style="color: #0000ff;">'controller'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'cc_nyancat_chart'</span>
<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h2>ページ内の特定の場所へのHTML挿入</h2>
<p><a href="http://candycanebts.files.wordpress.com/2011/12/plugin3.png"><img class="alignnone size-full wp-image-104" title="plugin3" src="http://candycanebts.files.wordpress.com/2011/12/plugin3.png" alt="" width="450" height="282" /></a></p>
<p>CandyCaneの既存のページに変更を加えたい場合、テンプレートの構造を元に変更を加えられます。HookContainerクラスのオブジェクトを使って任意のテンプレートをフックできます。テンプレートが分離されているポイントに対しては好きなテンプレートを追加できます。例えばこの場合はNyan Catがissues/relationsテンプレートの後に表示されます。</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$hookContainer</span> <span style="color: #339933;">=</span> ClassRegistry<span style="color: #339933;">::</span><span style="color: #004000;">getObject</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'HookContainer'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$hookContainer</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">registerElementHook</span><span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'issues/relations'</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// target element name.</span>
	<span style="color: #0000ff;">'../../plugins/cc_nyancat/views/elements/nyancat'</span><span style="color: #339933;">,</span> <span style="color: #666666; font-style: italic;">// additional template you want to inject.</span>
	<span style="color: #009900; font-weight: bold;">false</span> <span style="color: #666666; font-style: italic;">// it should be true when you want to inject before the target template.</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h2>プラグインのインストール</h2>
<p><iframe width="600" height="450" src="http://www.youtube.com/embed/OuoBuQeSFdo?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>プラグインのインストールには手動の作業が必要ですが、近いうちに自動化する予定です。とはいえ手順はapp/pluginsの下にプラグインを展開するだけです。CandyCaneのプラグインは&#8221;cc_&#8221;で始まるディレクトリで作成され、CandyCaneは&#8221;app/plugins/cc_*&#8221;配下のinit.phpを探してプラグインをロードしています。</p>
<p><strong>注)</strong><br />
<a href="http://blog.candycane.jp/archives/1188" title="ダッシュボードからプラグインのインストールが可能に – CandyCane v0.8.5リリース" target="_blank">プラグインのインストールはすでに自動化されました！</a></p>
<p>実際の例を見るには<a href="https://github.com/yandod/cc_nyancat" target="_blank">cc_nyancat plugin</a> のgithub上のコードを動かしてみてください。みなさんが実際にプラグインを作成して面白い使い方ができるようになることを楽しみしています。</p>
<h3>おまけ：各界の反応</h3>
<p><!-- tweet id : 147181570883715073 --><br />
<style type='text/css'>#bbpBox_147181570883715073 a { text-decoration:none; color:#0084B4; }#bbpBox_147181570883715073 a:hover { text-decoration:underline; }</style>
<div id='bbpBox_147181570883715073' class='bbpBox' style='padding:20px; margin:5px 0; background-color:#022330; background-image:url(http://a0.twimg.com/images/themes/theme15/bg.png); background-repeat:no-repeat'>
<div style='background:#fff; padding:10px; margin:0; min-height:48px; color:#333333; -moz-border-radius:5px; -webkit-border-radius:5px;'><span style='width:100%; font-size:18px; line-height:22px;'>PHP&#12377;&#12372;&#12356; / &#8220;&#12450;&#12472;&#12515;&#12452;&#12523;&#38283;&#30330;&#12398;&#12496;&#12540;&#12531;&#12480;&#12454;&#12531;&#12481;&#12515;&#12540;&#12488;&#12399;&#12418;&#12358;&#21476;&#12356;&#65311;&#65281;2012&#24180;&#12363;&#12425;&#12399;&#12300;&#12395;&#12419;&#12540;&#12435;&#12480;&#12454;&#12531;&#12481;&#12515;&#12540;&#12488;&#12301;&#12408; | &#19990;&#30028;&#8221; <a href="http://t.co/KjqtPSlQ" rel="nofollow">http://t.co/KjqtPSlQ</a></span>
<div class='bbp-actions' style='font-size:12px; width:100%; padding:5px 0; margin:0 0 10px 0; border-bottom:1px solid #e6e6e6;'><img align='middle' src='http://blog.candycane.jp/wp-content/plugins/twitter-blackbird-pie//images/bird.png' /><a title='tweeted on 2011年12月15日 2:09 PM' href='http://twitter.com/#!/kakutani/status/147181570883715073' target='_blank'>2011年12月15日 2:09 PM</a> via <a href="http://www.hatena.ne.jp/guide/twitter" rel="nofollow" target="blank">Hatena</a><a href='https://twitter.com/intent/tweet?in_reply_to=147181570883715073' class='bbp-action bbp-reply-action' title='Reply'><span><em style='margin-left: 1em;'></em><strong>Reply</strong></span></a><a href='https://twitter.com/intent/retweet?tweet_id=147181570883715073' class='bbp-action bbp-retweet-action' title='Retweet'><span><em style='margin-left: 1em;'></em><strong>Retweet</strong></span></a><a href='https://twitter.com/intent/favorite?tweet_id=147181570883715073' class='bbp-action bbp-favorite-action' title='Favorite'><span><em style='margin-left: 1em;'></em><strong>Favorite</strong></span></a></div>
<div style='float:left; padding:0; margin:0'><a href='http://twitter.com/intent/user?screen_name=kakutani'><img style='width:48px; height:48px; padding-right:7px; border:none; background:none; margin:0' src='http://a3.twimg.com/profile_images/332765353/portlait-20090726-tad_normal.png' /></a></div>
<div style='float:left; padding:0; margin:0'><a style='font-weight:bold' href='http://twitter.com/intent/user?screen_name=kakutani'>@kakutani</a>
<div style='margin:0; padding-top:2px'>Kakutani Shintaro</div>
</div>
<div style='clear:both'></div>
</div>
</div>
<p><!-- end of tweet --></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/1103/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>candycane v0.8.3 をリリースしました</title>
		<link>http://blog.candycane.jp/archives/1083</link>
		<comments>http://blog.candycane.jp/archives/1083#comments</comments>
		<pubDate>Thu, 01 Dec 2011 09:43:12 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[candycane]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=1083</guid>
		<description><![CDATA[Version 0.8.3 ダウンロード RedmineをPHPに移植したチケット管理システム、CandyCaneのv0.8.3をリリースしました。今回のリリースではphpmatsuriでの成果とバグフィックスを含んでおり、これによりプラグインを用いてCandyCaneを拡張できるようになりました。 サンプルとしてNyan Catを表示するcc_nyancatプラグインを開発しました。このプラグインを導入するデモ動画があります。こちらの動画ではプラグインがサブディレクトリに配置するだけで有効になる様子をご覧になれます。 延べ作業時間は10時間、6のバグ修正と2つの機能追加です。 Bug #65: チケットの移動時に関連削除処理でエラーがでる Bug #67: チケットを移動させると起票者が変わる Bug #75: ログインしていないのにニュースが編集できてしまう Bug #158: News module was spamed. Enhancement #159: Sending email on updating news. Bug #178: Users can&#8217;t Update issues Enhancement #186: Supporting plugin architecture. Part1 Bug #190: Fix denial of permissions for users with permissions moving issues イベントの開催などが一段落したので今後は開発に多くの時間を割けるようになりそうです。githubでのプルリクエストや実際に使ってみたなどのご報告も歓迎です。宜しくお願い致します。]]></description>
			<content:encoded><![CDATA[<p><a href="https://github.com/yandod/candycane/tags" target="_blank">Version 0.8.3 ダウンロード</a></p>
<p>RedmineをPHPに移植したチケット管理システム、CandyCaneのv0.8.3をリリースしました。今回のリリースではphpmatsuriでの成果とバグフィックスを含んでおり、これによりプラグインを用いてCandyCaneを拡張できるようになりました。</p>
<p>サンプルとしてNyan Catを表示する<a href="https://github.com/yandod/cc_nyancat" target="_blank">cc_nyancatプラグイン</a>を開発しました。このプラグインを導入するデモ動画があります。こちらの動画ではプラグインがサブディレクトリに配置するだけで有効になる様子をご覧になれます。<br />
<iframe width="480" height="360" src="http://www.youtube.com/embed/OuoBuQeSFdo" frameborder="0" allowfullscreen></iframe></p>
<p>延べ作業時間は10時間、6のバグ修正と2つの機能追加です。</p>
<ul>
<li><a href="http://my.candycane.jp/issues/show/65" class=" issue closed">Bug #65</a>: チケットの移動時に関連削除処理でエラーがでる</li>
<li><a href="http://my.candycane.jp/issues/show/67" class=" issue closed">Bug #67</a>: チケットを移動させると起票者が変わる</li>
<li><a href="http://my.candycane.jp/issues/show/75" class=" issue closed">Bug #75</a>: ログインしていないのにニュースが編集できてしまう</li>
<li><a href="http://my.candycane.jp/issues/show/158" class=" issue closed">Bug #158</a>: News module was spamed.</li>
<li><a href="http://my.candycane.jp/issues/show/159" class=" issue closed">Enhancement  #159</a>: Sending email on updating news.</li>
<li><a href="http://my.candycane.jp/issues/show/178" class=" issue closed">Bug #178</a>: Users can&#8217;t Update issues</li>
<li><a href="http://my.candycane.jp/issues/show/186" class=" issue closed">Enhancement  #186</a>: Supporting plugin architecture. Part1</li>
<li><a href="http://my.candycane.jp/issues/show/190" class=" issue closed">Bug #190</a>: Fix denial of permissions for users with permissions moving issues</li>
</ul>
<p>イベントの開催などが一段落したので今後は開発に多くの時間を割けるようになりそうです。githubでのプルリクエストや実際に使ってみたなどのご報告も歓迎です。宜しくお願い致します。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/1083/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPMatsuriの楽しさは参加者自身です</title>
		<link>http://blog.candycane.jp/archives/879</link>
		<comments>http://blog.candycane.jp/archives/879#comments</comments>
		<pubDate>Wed, 19 Oct 2011 14:29:01 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[candycane]]></category>
		<category><![CDATA[Lithium]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[イベント]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=879</guid>
		<description><![CDATA[参加者の写真やブログも公開されてきてまだまだ熱気が醒めやらない感じですが今年のPHP Matsuriが無事に終りました。あまりにも多くの事が頭を巡っているのですが、特に大きいものをいくつかまとめて書こうと思います。 Epic Sax Guy 参加された方で来日したGarrettの人柄とEpic Sax Guyが印象に残っていない人は皆無なのではないでしょうか。強烈に明るくオープンでひょうきんな彼のキャラクターはハッカソンの空気を支配していましたね。前回はLithiumの機能についての評判を多く耳にしましたが、今回は逆にLithiumをGarrettの人柄の話題が食っていた気がします。最新のフレームワークの機能やツールは確かに魅力的ですがそれ以上に魅力的なのはその人自身なのではと彼に会ってから感じています。そして毎日数時間はEpic Sax Guyを聞いてしまうわけです。 言葉では伝わらない体験 今年は昨年よりもさらに増えて総勢で90名を越える規模でのハッカソンになりました。初めての参加者の方も居ましたが多くの方から聞いたのが「どういうイベントなのかよくわからなかった」というものです。2年連続の参加となるSioさんも誤解していたようにハッカソンとはどういう雰囲気なのかを言葉で伝えるのは難しい所があります。 朝のあいさつでも話しましたがPHPMatsuriはヤフーが開催しているOpen Hack Day(現在は Hack Uに改名された模様)をコピーしたイベントです。画像やビデオ、文章などのさまざまな手段では伝わらない楽しさを伝える為に自分たちで開催してしまおうと思ったのがきっかけです。 実際にスタッフの１人である@shin1x1さんも「2日目のデモ発表の時間になってみてこういうイベントだったのかとわかった」と言っていました。参加者のレポートから漂う謎の熱気を理解したい方は実際に参加する事が唯一の方法なのだと思います。 参加者の力 豪華ゲストによる講演や忍者軍団、スイーツ、ワークショップと企画が目白押しですが、PHPMatsuriの本当の目玉コンテンツは参加者の皆さん自身です。参加した方それぞれが感じた楽しさは参加者が実際に開発した発表した体験そのものが中心になっていると思います。参加したけれど発表をしなかった方が「次回は発表する」と強く思う人が多いのも周囲を見ていてそれを感じているからではないでしょうか。 今年も@sizuhikoさんをはじめとしたスタッフの献身的な努力で無事にイベントを終える事ができました。まだ余韻に浸っている段階ですが今後も参加者自身の活動が中心となるハッカソン形式のイベントをさらに幅を広げて行って行きたいと思います。 参加者の皆さん、スタッフの皆さんお疲れさまでした！ ※写真は@koyhogeさんと@suzukiさんのFlickrから引用しています。素晴らしい写真をありがとうございます！]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/zatsu/6260016899/sizes/l/in/photostream/" title="Untitled by zatsu, on Flickr"><img src="http://farm7.static.flickr.com/6051/6260016899_9f10852909.jpg" width="500" height="333" alt=""></a></p>
<p><a href="http://2011.phpmatsuri.net/page/blog-and-picture-of-participants">参加者の写真やブログ</a>も公開されてきてまだまだ熱気が醒めやらない感じですが今年のPHP Matsuriが無事に終りました。あまりにも多くの事が頭を巡っているのですが、特に大きいものをいくつかまとめて書こうと思います。</p>
<h3>Epic Sax Guy</h3>
<p><a href="http://www.flickr.com/photos/koyhoge/6247892041/" title="DSC05794 by koyhoge, on Flickr"><img src="http://farm7.static.flickr.com/6235/6247892041_47ae89eff9.jpg" width="500" height="333" alt="DSC05794"></a><br />
参加された方で来日した<a href="http://twitter.com/#!/gwoo">Garrett</a>の人柄と<a href="http://www.youtube.com/watch?v=KHy7DGLTt8g">Epic Sax Guy</a>が印象に残っていない人は皆無なのではないでしょうか。強烈に明るくオープンでひょうきんな彼のキャラクターはハッカソンの空気を支配していましたね。前回はLithiumの機能についての評判を多く耳にしましたが、今回は逆にLithiumをGarrettの人柄の話題が食っていた気がします。最新のフレームワークの機能やツールは確かに魅力的ですがそれ以上に魅力的なのはその人自身なのではと彼に会ってから感じています。そして毎日数時間はEpic Sax Guyを聞いてしまうわけです。</p>
<h3>言葉では伝わらない体験</h3>
<p><a href="http://www.flickr.com/photos/koyhoge/6247047576/" title="DSC05647 by koyhoge, on Flickr"><img src="http://farm7.static.flickr.com/6034/6247047576_4ea6bbf91d.jpg" width="500" height="333" alt="DSC05647"></a><br />
今年は昨年よりもさらに増えて総勢で90名を越える規模でのハッカソンになりました。初めての参加者の方も居ましたが多くの方から聞いたのが<strong>「どういうイベントなのかよくわからなかった」</strong>というものです。2年連続の参加となるSioさんも<a href="http://tyouji.sakura.ne.jp/WordPress/?p=3709" target="_blank">誤解していた</a>ようにハッカソンとはどういう雰囲気なのかを言葉で伝えるのは難しい所があります。<br />
朝のあいさつでも話しましたがPHPMatsuriはヤフーが開催している<a href="http://www.flickr.com/photos/yodelanecdotal/sets/72157622549624826/">Open Hack Day</a>(現在は Hack Uに改名された模様)をコピーしたイベントです。画像やビデオ、文章などのさまざまな手段では伝わらない楽しさを伝える為に自分たちで開催してしまおうと思ったのがきっかけです。<br />
実際にスタッフの１人である<a href="http://twitter.com/#!/shin1x1">@shin1x1</a>さんも<strong>「2日目のデモ発表の時間になってみてこういうイベントだったのかとわかった」</strong>と言っていました。参加者のレポートから漂う謎の熱気を理解したい方は実際に参加する事が唯一の方法なのだと思います。</p>
<h3>参加者の力</h3>
<p><a href="http://www.flickr.com/photos/koyhoge/6245018507/" title="もくもくと作業するみなさん。 #phpmatsuri by koyhoge, on Flickr"><img src="http://farm7.static.flickr.com/6238/6245018507_d93935237f.jpg" width="500" height="375" alt="もくもくと作業するみなさん。 #phpmatsuri"></a><br />
豪華ゲストによる講演や忍者軍団、スイーツ、ワークショップと企画が目白押しですが、<strong>PHPMatsuriの本当の目玉コンテンツは参加者の皆さん自身です</strong>。参加した方それぞれが感じた楽しさは参加者が実際に開発した発表した体験そのものが中心になっていると思います。参加したけれど発表をしなかった方が「次回は発表する」と強く思う人が多いのも周囲を見ていてそれを感じているからではないでしょうか。</p>
<p>今年も<a href="http://twitter.com/#!/sizuhiko">@sizuhiko</a>さんをはじめとしたスタッフの献身的な努力で無事にイベントを終える事ができました。まだ余韻に浸っている段階ですが今後も参加者自身の活動が中心となるハッカソン形式のイベントをさらに幅を広げて行って行きたいと思います。</p>
<p>参加者の皆さん、スタッフの皆さんお疲れさまでした！</p>
<p>※写真は@koyhogeさんと@suzukiさんのFlickrから引用しています。素晴らしい写真をありがとうございます！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/879/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>プログラマがコードを書き、公開する事の価値</title>
		<link>http://blog.candycane.jp/archives/863</link>
		<comments>http://blog.candycane.jp/archives/863#comments</comments>
		<pubDate>Sun, 25 Sep 2011 15:09:33 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[candycane]]></category>
		<category><![CDATA[イベント]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=863</guid>
		<description><![CDATA[年に一度のPHPの祭典、PHPMatsuriが10月15日から大阪で開催されます。PHPMatsuriはゲストによる講演と開発スペースでの開発大会（ハッカソン）を同時に行うというイベント形式でいわゆるカンファレンス、セミナーとは少し違っています。今回はイベントの開催に向けたリレーブログの先陣を切る形でハッカソンに参加すると事の価値を考えてみようと思います。 プログラミングはコードを書く事抜きには理解できない プログラミングの世界では次から次へと新しいフレームワークやライブラリ、ツールなどが登場します。興味を持った技術についてWEBページや書籍を読んだりする事は新しい知識を入手する最初の方法です。しかし、本で読んだだけのプログラミング言語やフレームワークを「理解した」と言えるでしょうか？ポール・グラハムのエッセー「ハッカーと画家」にこんな一節があります。 作家や画家や建築家が、創りながら作品を理解してゆくのと同じで、 プログラマはプログラムを書きながら理解してゆくべきなんだ。 多くの場合は実際に書いてみると、自分が理解していなかった点がありうまくいかなかったり、手を動かしてみて初めて理解できたと実感した経験は誰でもあるのではないでしょうか。実際にプログラムを書くという行為は絶対に必要な要素と言って良いでしょう。ハッカソンにはその為の時間と場所があります。 コードを公開する事による効果は予測を越える 実際にコードを書く際にGoogleなどで色々検索するというのは普遍的なアプローチです。ちょっとしたオプション指定やエラーメッセージ、gitのコマンドの使い方などで毎回検索しているものが誰にでもありますよね。しかしそういった内容を自分自身が公開した回数は検索する回数よりもずっと少なかったり、あるいは0だったりしませんか？ コードを公開するというのは心理的に抵抗があるものです。汚いとか拙いという批判を受けたら困るとか、そもそも自分の書いた断片にそこまでの価値は無いだろう、もうすこし出来上がってからでいいだろうなんていう理由がすぐに出てきます。しかし実際の所コードを公開する際には規模や完成度は必須条件ではないはずです。僕自身もRedmineをPHPに移植したCandyCaneを公開する事でヨーロッパや南米といった予想もつかなかった所からの反応を得る事ができました。また逆に同じくRedmineを移植しようとして最初の画面だけで放置していたフランスの方を発見して協力して貰う事もできました。もし彼が作りかけのコードを公開してくれていなかったら、僕は彼を捜す事はできなかったですし、フランス語の翻訳が行われるのももっとずっと後になっていたと思います。 どんな小さな断片であってもコードを公開した効果はどこかで現れます。そしてそれはバタフライ効果のように自分の想像以上の形で返って来る事があります。 非日常に参加する事で自分のセンスを呼び起こす プログラムを書いてみようと思ってもなかなか実行できないのが世の常です。またそもそも毎日業務で書いているとそれ以外の事をする余力が生まれてこないのも仕方ない事と言って良いでしょう。ですがハッカソンは非日常の世界です。(なのでジェダイの騎士も登場します) その雰囲気は高校の文化祭の前夜のような不思議な連帯感と何があっても許されるような雰囲気、自分でも想像もしないような根気が生まれて来るそんな空間です。 また海外からのゲストと直接やりとりする事ができるというのも特別な出来事です。時間はたっぷりとありますし、動かそうとしているコードという題材もあってコミュニケーションは取りやすいです。海外ゲストでなくても気になっているプログラマーや技術があれば近くに陣取るだけで色々なインスピレーションが得られるでしょう。 PHPMatsuriの参加チケットはイベントの1週間前か、予定数に達した時点で販売を閉め切ります。特にこれまでハッカソンに参加した事が無い方にこの時間を経験してもらいたい！と思って準備を進めています。すでに予定数の3割くらいの参加者がチケットを購入していますので、ぜひとも参加を検討してみてください。お祭りの会場で待っています！ では明日のリレーブログ担当の@hidenorigotoさんにバトンをお渡しします。]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.candycane.jp/wp-content/uploads/2011/09/apollo8_earth_sm.jpg" alt="" title="apollo8_earth_sm" width="400" height="308" class="aligncenter size-full wp-image-864" /></p>
<p>年に一度のPHPの祭典、<a href="http://2011.phpmatsuri.net/" target="_blank">PHPMatsuriが10月15日から大阪で開催されます</a>。PHPMatsuriはゲストによる講演と開発スペースでの開発大会（ハッカソン）を同時に行うというイベント形式でいわゆるカンファレンス、セミナーとは少し違っています。今回は<strong><a href="http://2011.phpmatsuri.net/page/blog-for-phpmatsuri" target="_blank">イベントの開催に向けたリレーブログ</a></strong>の先陣を切る形でハッカソンに参加すると事の価値を考えてみようと思います。</p>
<h2>プログラミングはコードを書く事抜きには理解できない</h2>
<p>プログラミングの世界では次から次へと新しいフレームワークやライブラリ、ツールなどが登場します。興味を持った技術についてWEBページや書籍を読んだりする事は新しい知識を入手する最初の方法です。しかし、本で読んだだけのプログラミング言語やフレームワークを「理解した」と言えるでしょうか？ポール・グラハムのエッセー「<a href="http://practical-scheme.net/trans/hp-j.html">ハッカーと画家</a>」にこんな一節があります。</p>
<blockquote><p>作家や画家や建築家が、創りながら作品を理解してゆくのと同じで、 プログラマはプログラムを書きながら理解してゆくべきなんだ。</p></blockquote>
<p>多くの場合は実際に書いてみると、自分が理解していなかった点がありうまくいかなかったり、手を動かしてみて初めて理解できたと実感した経験は誰でもあるのではないでしょうか。実際にプログラムを書くという行為は絶対に必要な要素と言って良いでしょう。ハッカソンにはその為の時間と場所があります。</p>
<h2>コードを公開する事による効果は予測を越える</h2>
<p><a href="http://blog.candycane.jp/wp-content/uploads/2011/09/3973289221.png"><img src="http://blog.candycane.jp/wp-content/uploads/2011/09/3973289221.png" alt="" title="397328922" width="408" height="307" class="aligncenter size-full wp-image-869" /></a><br />
実際にコードを書く際にGoogleなどで色々検索するというのは普遍的なアプローチです。ちょっとしたオプション指定やエラーメッセージ、gitのコマンドの使い方などで毎回検索しているものが誰にでもありますよね。しかしそういった内容を自分自身が公開した回数は検索する回数よりもずっと少なかったり、あるいは0だったりしませんか？<br />
コードを公開するというのは心理的に抵抗があるものです。汚いとか拙いという批判を受けたら困るとか、そもそも自分の書いた断片にそこまでの価値は無いだろう、もうすこし出来上がってからでいいだろうなんていう理由がすぐに出てきます。しかし実際の所コードを公開する際には規模や完成度は必須条件ではないはずです。僕自身も<a href="https://github.com/yandod/candycane" target="_blank">RedmineをPHPに移植したCandyCane</a>を公開する事でヨーロッパや南米といった予想もつかなかった所からの反応を得る事ができました。また逆に同じくRedmineを移植しようとして<a href="https://github.com/kwiky/redmine-php" target="_blank">最初の画面だけで放置していたフランスの方</a>を発見して協力して貰う事もできました。もし彼が作りかけのコードを公開してくれていなかったら、僕は彼を捜す事はできなかったですし、<a href="https://github.com/yandod/candycane/commit/95af70b3ddedb42863c17d4d46beda5b96ac34e9" target="_blank">フランス語の翻訳が行われる</a>のももっとずっと後になっていたと思います。<br />
どんな小さな断片であってもコードを公開した効果はどこかで現れます。そしてそれは<a href="http://ja.wikipedia.org/wiki/%E3%83%90%E3%82%BF%E3%83%95%E3%83%A9%E3%82%A4%E5%8A%B9%E6%9E%9C" target="_blank">バタフライ効果</a>のように自分の想像以上の形で返って来る事があります。</p>
<h2>非日常に参加する事で自分のセンスを呼び起こす</h2>
<p><a href="http://blog.candycane.jp/wp-content/uploads/2011/09/5058830692_a2f61e0295_z.jpg"><img src="http://blog.candycane.jp/wp-content/uploads/2011/09/5058830692_a2f61e0295_z-300x199.jpg" alt="" title="5058830692_a2f61e0295_z" width="300" height="199" class="aligncenter size-medium wp-image-868" /></a><br />
プログラムを書いてみようと思ってもなかなか実行できないのが世の常です。またそもそも毎日業務で書いているとそれ以外の事をする余力が生まれてこないのも仕方ない事と言って良いでしょう。ですがハッカソンは非日常の世界です。(なので<a href="http://www.youtube.com/watch?v=kW-6_ygOS1Q" target="_blank">ジェダイの騎士も登場</a>します)<br />
その雰囲気は高校の文化祭の前夜のような不思議な連帯感と何があっても許されるような雰囲気、自分でも想像もしないような根気が生まれて来るそんな空間です。<br />
また海外からのゲストと直接やりとりする事ができるというのも特別な出来事です。時間はたっぷりとありますし、動かそうとしているコードという題材もあってコミュニケーションは取りやすいです。海外ゲストでなくても気になっているプログラマーや技術があれば近くに陣取るだけで色々なインスピレーションが得られるでしょう。</p>
<p>PHPMatsuriの参加チケットはイベントの1週間前か、予定数に達した時点で販売を閉め切ります。特にこれまでハッカソンに参加した事が無い方にこの時間を経験してもらいたい！と思って準備を進めています。すでに<a href="http://2011.phpmatsuri.net/phpmatsuri/twitter/lists" target="_blank">予定数の3割くらいの参加者</a>がチケットを購入していますので、ぜひとも参加を検討してみてください。お祭りの会場で待っています！</p>
<p>では明日のリレーブログ担当の<a href="http://twitter.com/#!/hidenorigoto" target="_blank">@hidenorigoto</a>さんにバトンをお渡しします。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/863/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CandyCane v0.8.1 をリリースしました</title>
		<link>http://blog.candycane.jp/archives/849</link>
		<comments>http://blog.candycane.jp/archives/849#comments</comments>
		<pubDate>Sun, 18 Sep 2011 22:19:10 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[candycane]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=849</guid>
		<description><![CDATA[v0.8.1ダウンロードページ CakePHPで作られた第3のRedmine、CandyCaneのバージョンをv0.8.1のバージョンを打ちました。 ご存知の方もいると思いますが、github上でウォッチされたPHPのプロジェクトのランキングで4位にCandyCaneが入りました！(※ただし、１日限り)。前回のエントリで一連の流れについて書きましたが、CakeFestでの発表で認知度が高まった事が数字に現れたようです。またCakePHPのコアデベロッパのグラハムが開発に協力してくれているのでかなり開発速度が上がっています。 今回は世界中でインストールしてみた人が増えた事から得られたフィードバックを中心に修正しています。やはりインストーラーでWordPressのようにインストールできる点についてはうまくいっているようです。 また既存のRedmineのスキーマを流用する場合はRedmineのV0.8以降に行われたスキーマ変更に追従していない部分があることが分かっています。この部分のキャッチアップについてはスキーマを更新するMigrateをインストーラーに統合してからの対応になるでしょう。 延べ作業時間は16時間、11のバグ修正と1つの機能追加です。また次回のリリースからはPHP5向けにコードを記述していきます。困る人も殆どいないと思いますが、PHP4向けの修正が継続できるようにブランチだけは作っています。 Bug #97: チケットの複数編集時に選択内容が保持されない Bug #103: チケットの状態を終了にした際に進捗率が100％になっていない Bug #114: 最近のプロジェクトにアーカイブされたプロジェクトが表示されている Bug #138: 複数のチケットを編集した際に履歴が1つしか作られていない Bug #153: 送信元メールアドレスとフッタの設定が機能していない Bug #154: 活動のアイテムの並び順が日付の降順になっていない Bug #160: 非公開プロジェクトのwikiがメンバー外から見える Bug #164: Search hits against wiki of pravate project for unlogged in user. Bug #166: (user/edit) don&#8217;t load user&#8217;s language Enhancement #167: (user/edit) Option without password Bug #168: [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.candycane.jp/wp-content/uploads/2011/09/397328922.png"><img src="http://blog.candycane.jp/wp-content/uploads/2011/09/397328922.png" alt="" title="397328922" width="408" height="307" class="aligncenter size-full wp-image-852" /></a></p>
<p><a href="https://github.com/yandod/candycane/archives/v0.8.1">v0.8.1ダウンロードページ</a><br />
<a href="https://github.com/yandod/candycane">CakePHPで作られた第3のRedmine、CandyCane</a>のバージョンをv0.8.1のバージョンを打ちました。</p>
<p>ご存知の方もいると思いますが、<strong>github上でウォッチされたPHPのプロジェクトのランキングで4位にCandyCaneが入りました！</strong>(※ただし、１日限り)。<a href="http://blog.candycane.jp/archives/796" title="日本のCakePHP使いが死力を尽くしたCandyCaneにブレイクの兆し">前回のエントリ</a>で一連の流れについて書きましたが、CakeFestでの発表で認知度が高まった事が数字に現れたようです。またCakePHPのコアデベロッパのグラハムが開発に協力してくれているのでかなり開発速度が上がっています。</p>
<p>今回は世界中でインストールしてみた人が増えた事から得られたフィードバックを中心に修正しています。やはりインストーラーでWordPressのようにインストールできる点についてはうまくいっているようです。<br />
また既存のRedmineのスキーマを流用する場合は<strong>RedmineのV0.8以降に行われたスキーマ変更に追従していない部分</strong>があることが分かっています。この部分のキャッチアップについてはスキーマを更新するMigrateをインストーラーに統合してからの対応になるでしょう。</p>
<p>延べ作業時間は16時間、11のバグ修正と1つの機能追加です。また次回のリリースからはPHP5向けにコードを記述していきます。困る人も殆どいないと思いますが、PHP4向けの修正が継続できるようにブランチだけは作っています。</p>
<ul>
<li><a href="http://my.candycane.jp/issues/show/97" class=" issue closed">Bug #97</a>: チケットの複数編集時に選択内容が保持されない</li>
<li><a href="http://my.candycane.jp/issues/show/103" class=" issue closed">Bug #103</a>: チケットの状態を終了にした際に進捗率が100％になっていない</li>
<li><a href="http://my.candycane.jp/issues/show/114" class=" issue closed">Bug #114</a>: 最近のプロジェクトにアーカイブされたプロジェクトが表示されている</li>
<li><a href="http://my.candycane.jp/issues/show/138" class=" issue closed">Bug #138</a>: 複数のチケットを編集した際に履歴が1つしか作られていない</li>
<li><a href="http://my.candycane.jp/issues/show/153" class=" issue closed">Bug #153</a>: 送信元メールアドレスとフッタの設定が機能していない</li>
<li><a href="http://my.candycane.jp/issues/show/154" class=" issue closed">Bug #154</a>: 活動のアイテムの並び順が日付の降順になっていない</li>
<li><a href="http://my.candycane.jp/issues/show/160" class=" issue closed">Bug #160</a>: 非公開プロジェクトのwikiがメンバー外から見える</li>
<li><a href="http://my.candycane.jp/issues/show/164" class=" issue closed">Bug #164</a>: Search hits against wiki of pravate project for unlogged in user.</li>
<li><a href="http://my.candycane.jp/issues/show/166" class=" issue closed">Bug #166</a>: (user/edit)  don&#8217;t load user&#8217;s language</li>
<li><a href="http://my.candycane.jp/issues/show/167" class=" issue closed">Enhancement  #167</a>: (user/edit) Option without password</li>
<li><a href="http://my.candycane.jp/issues/show/168" class=" issue closed">Bug #168</a>: Issue priority changes when adding update/comment to issue</li>
<li><a href="http://my.candycane.jp/issues/show/170" class=" issue closed">Bug #170</a>: Emain wont be sent on bulk edit of issue.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/849/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>日本のCakePHP使いが死力を尽くしたCandyCaneにブレイクの兆し</title>
		<link>http://blog.candycane.jp/archives/796</link>
		<comments>http://blog.candycane.jp/archives/796#comments</comments>
		<pubDate>Tue, 13 Sep 2011 04:34:38 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[candycane]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=796</guid>
		<description><![CDATA[前回のエントリを書いてからまだ一週間も経っていませんが、CakePHP版RedmineのCandyCaneへの反響に驚いています。CakeFestでの発表の後に下記の反応を貰った事は前回触れましたが、その後も色々な反応がありました。 CakePHPのコアメンバーの１人である@predominantさんからの反応や、会場に来ていた@theMojoWillさん、配信を見ていた@sumardiさんからの反応は発表のあとすぐに届きました。 Really enjoying @yando&#8216;s talk at #CakeFest on CandyCane. http://t.co/vT775reless than a minute ago via Twitter for Mac Favorite Retweet ReplyGraham Weldonpredominant @yando have a few more candycane questions for u after a beer or two tonight! #CakeFestless than a minute ago via Twitter for iPhone Favorite Retweet ReplyWill WilsontheMojoWill @yando cool. thanks. watched [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.candycane.jp/wp-content/uploads/2011/09/candycane4.png"><img src="http://blog.candycane.jp/wp-content/uploads/2011/09/candycane4.png" alt="" title="candycane4" width="278" height="162" class="aligncenter size-full wp-image-838" /></a></p>
<p><a href="http://blog.candycane.jp/archives/776" title="CandyCaneの発表で感じた発信と恩返しの大切さ">前回のエントリ</a>を書いてからまだ一週間も経っていませんが、<a href="https://github.com/yandod/candycane">CakePHP版RedmineのCandyCane</a>への反響に驚いています。<a href="http://blog.candycane.jp/archives/773" title="CakeFest 2011に参加しました。">CakeFestでの発表</a>の後に下記の反応を貰った事は前回触れましたが、その後も色々な反応がありました。<br />
CakePHPのコアメンバーの１人である@predominantさんからの反応や、会場に来ていた@theMojoWillさん、配信を見ていた@sumardiさんからの反応は発表のあとすぐに届きました。</p>
<style type='text/css'>.bbpBox109940221977702400 {background:url(http://a2.twimg.com/profile_background_images/65287766/GrahamTwitterBackground.png) #1a1420;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style>
<div class='bbpBox109940221977702400'>
<p class='bbpTweet'>Really enjoying @<a class="tweet-url username" href="http://twitter.com/yando" rel="nofollow">yando</a>&#8216;s talk at <a href="http://twitter.com/search?q=%23CakeFest" title="#CakeFest" class="tweet-url hashtag" rel="nofollow">#CakeFest</a> on CandyCane. <a href="http://t.co/vT775re" rel="nofollow">http://t.co/vT775re</a><span class='timestamp'><a title='Sat Sep 03 10:46:06 +0000 2011' href='http://twitter.com/#!/predominant/status/109940221977702400'>less than a minute ago</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow">Twitter for Mac</a> <a href='http://twitter.com/intent/favorite?tweet_id=109940221977702400'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/favorite.png' /> Favorite</a> <a href='http://twitter.com/intent/retweet?tweet_id=109940221977702400'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/retweet.png' /> Retweet</a> <a href='http://twitter.com/intent/tweet?in_reply_to=109940221977702400'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/reply.png' /> Reply</a></span><span class='metadata'><span class='author'><a href='http://twitter.com/predominant'><img src='http://a3.twimg.com/profile_images/1130623398/Slavitica_Avatar__No_Text__normal.png' /></a><strong><a href='http://twitter.com/predominant'>Graham Weldon</a></strong><br/>predominant</span></span></p>
</div>
<style type='text/css'>.bbpBox109944537836830721 {background:url(http://a3.twimg.com/profile_background_images/136225507/twitterbg.jpg) #ffffff;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style>
<div class='bbpBox109944537836830721'>
<p class='bbpTweet'>@<a class="tweet-url username" href="http://twitter.com/yando" rel="nofollow">yando</a> have a few more candycane questions for u after a beer or two tonight! <a href="http://twitter.com/search?q=%23CakeFest" title="#CakeFest" class="tweet-url hashtag" rel="nofollow">#CakeFest</a><span class='timestamp'><a title='Sat Sep 03 11:03:15 +0000 2011' href='http://twitter.com/#!/theMojoWill/status/109944537836830721'>less than a minute ago</a> via <a href="http://twitter.com/#!/download/iphone" rel="nofollow">Twitter for iPhone</a> <a href='http://twitter.com/intent/favorite?tweet_id=109944537836830721'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/favorite.png' /> Favorite</a> <a href='http://twitter.com/intent/retweet?tweet_id=109944537836830721'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/retweet.png' /> Retweet</a> <a href='http://twitter.com/intent/tweet?in_reply_to=109944537836830721'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/reply.png' /> Reply</a></span><span class='metadata'><span class='author'><a href='http://twitter.com/theMojoWill'><img src='http://a2.twimg.com/profile_images/1526675317/image_normal.jpg' /></a><strong><a href='http://twitter.com/theMojoWill'>Will Wilson</a></strong><br/>theMojoWill</span></span></p>
</div>
<style type='text/css'>.bbpBox109988572299403264 {background:url(http://a0.twimg.com/images/themes/theme1/bg.png) #C0DEED;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style>
<div class='bbpBox109988572299403264'>
<p class='bbpTweet'>@<a class="tweet-url username" href="http://twitter.com/yando" rel="nofollow">yando</a> cool. thanks. watched ur presentation from Kuala Lumpur. great.<span class='timestamp'><a title='Sat Sep 03 13:58:13 +0000 2011' href='http://twitter.com/#!/sumardi/status/109988572299403264'>less than a minute ago</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow">Twitter for Mac</a> <a href='http://twitter.com/intent/favorite?tweet_id=109988572299403264'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/favorite.png' /> Favorite</a> <a href='http://twitter.com/intent/retweet?tweet_id=109988572299403264'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/retweet.png' /> Retweet</a> <a href='http://twitter.com/intent/tweet?in_reply_to=109988572299403264'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/reply.png' /> Reply</a></span><span class='metadata'><span class='author'><a href='http://twitter.com/sumardi'><img src='http://a1.twimg.com/profile_images/1338320519/290762341_normal.png' /></a><strong><a href='http://twitter.com/sumardi'>SuMrDi</a></strong><br/>sumardi</span></span></p>
</div>
<p><!-- end of tweet --></p>
<p>その後、数日たってNYにお住まいでCakeFestにもいつも来ている@savantさんが他にもRedmineを移植しようとしているフランスのユーザーがが居るのを発見したと教えてくれました。この@kwikyさんは勇敢にもフルスクラッチでRedmineを移植しようとしており、最初の画面が表示された所までで協力者を探しているようでした。<br />
<!-- http://twitter.com/#!/savant/status/111882323758288896 --><br />
<style type='text/css'>.bbpBox111882323758288896 {background:url(http://a3.twimg.com/profile_background_images/316982999/background.png) #242424;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style>
<div class='bbpBox111882323758288896'>
<p class='bbpTweet'>@<a class="tweet-url username" href="http://twitter.com/yando" rel="nofollow">yando</a> Just saw this: <a href="http://t.co/TRkDOWi" rel="nofollow">http://t.co/TRkDOWi</a><span class='timestamp'><a title='Thu Sep 08 19:23:19 +0000 2011' href='http://twitter.com/#!/savant/status/111882323758288896'>less than a minute ago</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow">Twitter for Mac</a> <a href='http://twitter.com/intent/favorite?tweet_id=111882323758288896'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/favorite.png' /> Favorite</a> <a href='http://twitter.com/intent/retweet?tweet_id=111882323758288896'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/retweet.png' /> Retweet</a> <a href='http://twitter.com/intent/tweet?in_reply_to=111882323758288896'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/reply.png' /> Reply</a></span><span class='metadata'><span class='author'><a href='http://twitter.com/savant'><img src='http://a0.twimg.com/profile_images/1362739988/IMG_20110520_2150310-2_normal.jpg' /></a><strong><a href='http://twitter.com/savant'>Jose Diaz-Gonzalez</a></strong><br/>savant</span></span></p>
</div>
<p><!-- end of tweet --></p>
<p>このまま2つのPHP版Redmineが開発されていくのはあまりにも悲しいという事でさらに@phpMagpieさんが会話に参加。この方もイギリスの方でCakeFestの参加者です。<br />
<!-- http://twitter.com/#!/phpMagpie/status/111892146847629312 --><br />
<style type='text/css'>.bbpBox111892146847629312 {background:url(http://a0.twimg.com/images/themes/theme1/bg.png) #C0DEED;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style>
<div class='bbpBox111892146847629312'>
<p class='bbpTweet'>@<a class="tweet-url username" href="http://twitter.com/yando" rel="nofollow">yando</a> would be much better for the guy to help out with CandyCane rather than going it alone &#8230; I&#8217;m sure he will when he realises <img src='http://blog.candycane.jp/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <span class='timestamp'><a title='Thu Sep 08 20:02:21 +0000 2011' href='http://twitter.com/#!/phpMagpie/status/111892146847629312'>less than a minute ago</a> via <a href="http://www.hootsuite.com" rel="nofollow">HootSuite</a> <a href='http://twitter.com/intent/favorite?tweet_id=111892146847629312'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/favorite.png' /> Favorite</a> <a href='http://twitter.com/intent/retweet?tweet_id=111892146847629312'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/retweet.png' /> Retweet</a> <a href='http://twitter.com/intent/tweet?in_reply_to=111892146847629312'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/reply.png' /> Reply</a></span><span class='metadata'><span class='author'><a href='http://twitter.com/phpMagpie'><img src='http://a1.twimg.com/profile_images/1529499264/paul_normal.jpg' /></a><strong><a href='http://twitter.com/phpMagpie'>Paul Gardner</a></strong><br/>phpMagpie</span></span></p>
</div>
<p><!-- end of tweet --></p>
<p>メッセージをkwikyさんに送ったところ、自分のプロジェクトを速攻で閉鎖し、すぐにCandyCaneに<a href="https://github.com/yandod/candycane/pull/8">フランス語のロケールとフッターのコードの修正</a>やスキーマのミスの修正を送って来てくれました。<br />
<a href="http://blog.candycane.jp/wp-content/uploads/2011/09/candycane2.png"><img src="http://blog.candycane.jp/wp-content/uploads/2011/09/candycane2-300x87.png" alt="" title="candycane2" width="300" height="87" class="aligncenter size-medium wp-image-820" /></a></p>
<p>会話に参加していた@phpMagpieさんもCandyCaneをインストールしてCSSのリンク切れを教えてくれました。<br />
<!-- http://twitter.com/#!/phpMagpie/status/113196489555181568 --><br />
<style type='text/css'>.bbpBox113196489555181568 {background:url(http://a0.twimg.com/images/themes/theme1/bg.png) #C0DEED;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style>
<div class='bbpBox113196489555181568'>
<p class='bbpTweet'>@<a class="tweet-url username" href="http://twitter.com/yando" rel="nofollow">yando</a> I&#8217;m installing candycane, seems there are missing css files at first install page? admin.css 960.css reset.css<span class='timestamp'><a title='Mon Sep 12 10:25:20 +0000 2011' href='http://twitter.com/#!/phpMagpie/status/113196489555181568'>less than a minute ago</a> via <a href="http://www.hootsuite.com" rel="nofollow">HootSuite</a> <a href='http://twitter.com/intent/favorite?tweet_id=113196489555181568'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/favorite.png' /> Favorite</a> <a href='http://twitter.com/intent/retweet?tweet_id=113196489555181568'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/retweet.png' /> Retweet</a> <a href='http://twitter.com/intent/tweet?in_reply_to=113196489555181568'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/reply.png' /> Reply</a></span><span class='metadata'><span class='author'><a href='http://twitter.com/phpMagpie'><img src='http://a1.twimg.com/profile_images/1529499264/paul_normal.jpg' /></a><strong><a href='http://twitter.com/phpMagpie'>Paul Gardner</a></strong><br/>phpMagpie</span></span></p>
</div>
<p> <!-- end of tweet --></p>
<p>このあたりの状況を見ていた@itemanさんが「ブレイク」という言葉で祝福してくれました。ちなみに何ヶ月か前に徹夜のネットラジオでCandyCaneの今後の展開について語ったりもしたので、状況を分かって頂けたのかもしれません。<br />
<!-- http://twitter.com/#!/iteman/status/113291089548558336 --><br />
<style type='text/css'>.bbpBox113291089548558336 {background:url(http://a1.twimg.com/images/themes/theme8/bg.gif) #8B542B;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style>
<div class='bbpBox113291089548558336'>
<p class='bbpTweet'>candycaneブレイクしていますね。おめでとうございます。<span class='timestamp'><a title='Mon Sep 12 16:41:15 +0000 2011' href='http://twitter.com/#!/iteman/status/113291089548558336'>less than a minute ago</a> via <a href="http://www.hootsuite.com" rel="nofollow">HootSuite</a> <a href='http://twitter.com/intent/favorite?tweet_id=113291089548558336'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/favorite.png' /> Favorite</a> <a href='http://twitter.com/intent/retweet?tweet_id=113291089548558336'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/retweet.png' /> Retweet</a> <a href='http://twitter.com/intent/tweet?in_reply_to=113291089548558336'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/reply.png' /> Reply</a></span><span class='metadata'><span class='author'><a href='http://twitter.com/iteman'><img src='http://a2.twimg.com/profile_images/756483666/kubodog2-512-512_normal.jpg' /></a><strong><a href='http://twitter.com/iteman'>iteman</a></strong><br/>iteman</span></span></p>
</div>
<p> <!-- end of tweet --></p>
<p>時を同じくしてバグ管理のプロジェクトにも<a href="http://my.candycane.jp/issues/show/165">インストール時に不具合に遭遇したという報告</a>や、いくつかの挙動の報告をIgorさんがしてくれています。またインストール方法について案内した後にすばらしい一言をくれました。<br />
<strong>&#8220;good job about porting Redmine to PHP. I was really looking for something like this.&#8221;<br />
(Redmineの移植すごいですね。こういうのを探していたんです)</strong></p>
<p><a href="http://blog.candycane.jp/wp-content/uploads/2011/09/candycane3.png"><img src="http://blog.candycane.jp/wp-content/uploads/2011/09/candycane3-300x222.png" alt="" title="candycane3" width="300" height="222" class="aligncenter size-medium wp-image-827" /></a></p>
<p>そしてその後、CakeDCでのCandyCane導入を考えているといっていた@predominantさんが本気を出して怒濤のリファクタリングを開始。<a href="https://github.com/predominant/candycane/commits/master">一晩に33ものコミット</a>を行って不具合の修正などをしてくれています。結果的にネットワークチャートがすごいことに。<br />
<a href="http://blog.candycane.jp/wp-content/uploads/2011/09/candycane1.png"><img src="http://blog.candycane.jp/wp-content/uploads/2011/09/candycane1-300x119.png" alt="" title="candycane1" width="300" height="119" class="aligncenter size-medium wp-image-829" /></a></p>
<p>また気づいていないうちにドイツの@meinnerdさんがRedmineを移植した上に結構できてるみたいで、こいつらおかしい！というお褒めの言葉をくれていました。<br />
<!-- http://twitter.com/#!/meineerde/status/113355427986673664 --><br />
<style type='text/css'>.bbpBox113355427986673664 {background:url(http://a1.twimg.com/images/themes/theme9/bg.gif) #1A1B1F;padding:20px;} p.bbpTweet{background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:18px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px} p.bbpTweet span.metadata{display:block;width:100%;clear:both;margin-top:8px;padding-top:12px;height:40px;border-top:1px solid #fff;border-top:1px solid #e6e6e6} p.bbpTweet span.metadata span.author{line-height:19px} p.bbpTweet span.metadata span.author img{float:left;margin:0 7px 0 0px;width:38px;height:38px} p.bbpTweet a:hover{text-decoration:underline}p.bbpTweet span.timestamp{font-size:12px;display:block}</style>
<div class='bbpBox113355427986673664'>
<p class='bbpTweet'>I think I&#8217;m losing it. Somebody actually ported Redmine to PHP. And even included all of the warts. This is insane! <a href="http://t.co/4XGJnPr" rel="nofollow">http://t.co/4XGJnPr</a><span class='timestamp'><a title='Mon Sep 12 20:56:54 +0000 2011' href='http://twitter.com/#!/meineerde/status/113355427986673664'>less than a minute ago</a> via <a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12" rel="nofollow">Twitter for Mac</a> <a href='http://twitter.com/intent/favorite?tweet_id=113355427986673664'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/favorite.png' /> Favorite</a> <a href='http://twitter.com/intent/retweet?tweet_id=113355427986673664'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/retweet.png' /> Retweet</a> <a href='http://twitter.com/intent/tweet?in_reply_to=113355427986673664'><img src='http://si0.twimg.com/images/dev/cms/intents/icons/reply.png' /> Reply</a></span><span class='metadata'><span class='author'><a href='http://twitter.com/meineerde'><img src='http://a1.twimg.com/profile_images/429255848/210300298_e9bfa8d551_normal.jpg' /></a><strong><a href='http://twitter.com/meineerde'>Holger Just</a></strong><br/>meineerde</span></span></p>
</div>
<p> <!-- end of tweet --></p>
<p>地道にインストーラーの国際化などをしておいたおかげか、ひとまず各所でインストールしてみる事は成功しているようです。最新のRedmineから移行するとスキーマーの違いでエラーになる部分があることも分かってきましたが、この辺りの対応はバグが落ち着いて来た所ですることになるでしょう。<br />
また日本からも<strong><a href="https://github.com/yandod/candycane/pull/7#commitcomment-460756">リアル案件でCandyCaneを使っている</a></strong>！という熱い情報がすでに寄せられています。</p>
<p>元々CandyCaneは当時東京に居たCakePHPユーザーが中心になって行った開発合宿の成果物ということで多くの人の手が入っているのですが、ここに来てコントリビューターのリストが一気に国際色を帯びました。日本でも有数のCakePHP使いの皆さんが死力を振り絞って作ったコードがこういう形で陽の目を見るのはとてもうれしいです。またその事を忘れない為にもフッターにはコントリビューター一覧へのリンクを付ける事にしました。</p>
<p><a href="http://blog.candycane.jp/wp-content/uploads/2011/09/candycane5.png"><img src="http://blog.candycane.jp/wp-content/uploads/2011/09/candycane5.png" alt="" title="candycane5" width="249" height="61" class="aligncenter size-full wp-image-846" /></a></p>
<p>思えば２泊３日で睡眠時間が１日数時間という地獄のような合宿があってこそ。gitもそこで覚えた人もいたし。</p>
<p><a href="http://www.flickr.com/photos/zatsu/3438252712/" title="DSC06895 by zatsu, on Flickr"><img src="http://farm4.static.flickr.com/3415/3438252712_e50f69f118.jpg" width="500" height="333" alt="DSC06895"></a></p>
<p><a href="http://www.flickr.com/photos/zatsu/3438241230/" title="DSC06861 by zatsu, on Flickr"><img src="http://farm4.static.flickr.com/3361/3438241230_2604b17a04.jpg" width="500" height="333" alt="DSC06861"></a></p>
<p>すでに立ち上げからは2年が経過し、こんなに多くの人の手が入ったコードを扱っている事には我ながら驚いています。またフィードバックを受けながらソフトウェアが進化するというオープンソースの基本原理を実際に体験する事が出来てなんとも不思議な気持ちです。<br />
日本に居なかったので日本の勉強会での発表やハッカソンなどは全くできていなかったのですが、協力して頂いた皆さんのコードや声を無駄にしないように気長に続けて行ければと思います。</p>
<p>さしあたってはバグの修正とプラグイン開発の土台作りまではこのまま走って行ければと思います。アジャイルの対応やSCMなどの連携はプラグインとして実装できるようにしておいて、各地のCake使いが作れるのが理想かなと思っていますので。</p>
<p>今後も宜しくお願いします。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/796/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CandyCaneの発表で感じた発信と恩返しの大切さ</title>
		<link>http://blog.candycane.jp/archives/776</link>
		<comments>http://blog.candycane.jp/archives/776#comments</comments>
		<pubDate>Tue, 06 Sep 2011 02:42:11 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[candycane]]></category>
		<category><![CDATA[イベント]]></category>
		<category><![CDATA[スライド]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=776</guid>
		<description><![CDATA[前回のポストで書いたようにイギリスのマンチェスターで開催されたCakePHPの公式イベント、CakeFestに参加してきました。今回はスピーカーとしてこれまで開発を続けて来たCakePHP版Redmine、CandyCaneについての発表を行い感じた事をまとめます。 発表までの経緯と内容 CandyCaneはRedmineをCakePHPに移植すればもっと使いやすい課題管理システムになるのではというアイデアからスタートしたオープンソースプロジェクトです。2009年の4月に行った開発合宿での成果を元に地道に開発を続け、現在は140ほどのページが動作しバグの管理ができる状態になっています。日本のCakePHPでは少しは知られているソフトウェアですが、日本のCakePHP以外のコミュニティや海外のコミュニティではあまり知られていない状態でした。 昨年のCakeFestにも応募したのですが、再挑戦した今年に公式カンファレンスでの機会を得る事ができました。 今回の発表では特に日本で人気が高いと思われるRedmineの紹介とCandyCaneの開発の経緯と実際にインストールして使用するデモという構成でした。 20110903 candycane View more presentations from yandod 自分の考えを発信する事の大切さ (会場内のバーでの交流の様子) 拙い英語による発表でしたが、発表後にはさまざまな反応を会場にいた人やオンラインで見ていた人達から貰う事ができました。またRedmineを実際に使っている人が参加者の3割くらいに達していたことも驚きでした。(すでにTracからは離れた人が予想よりも多かった)実際にもらった反応は下記のような感じです。 来場者のイングランドのWill Wilsonさん 「Redmineからの移行はどうすればいいのか？」という質問を貰い、その後レストランで話した所「Redmineいいなと思ったけれど、PHPで運用したい」というまさにCandyCaneを開発する前に僕が思った事と同じ反応。またプロジェクト作成からメンバーの追加などのステップが分かりにくい点を改善したい等、発表で重視して説明した内容について熱く語ってくれました。 CakePHPのコア開発者の１人でもあるGraham Weldonさん 「今後の開発予定は？」という質問と10月に大阪で行われるハッカソンでは「CandyCaneのCake2移行をやるよ」「CakeDCの内部で使っているRedmineをCandyCaneに変えたい」というこれもまた熱い反応を貰いました。 オンラインで発表を見ていたマレーシアの@sumarudiさん 最初は来場者の誰かなのかと思っていましたが、オンラインで見ていたという事でした。是非使ってみたいという反応を貰いました。 貰った反応はどれも自分がこれまでに感じた内容そのものだったり、「使ってみたい」という前向きな反応で本当に嬉しく感じました。日々の生活の中で感じた事や自分の為に手を動かした内容を発表したからこそこういった反応を得る事が出来たのだと思います。また特に反応をしなかった人からも「CandyCaneをやっている日本のyando」というキャラ認識を受け、コミュニケーションがしやすくなりました。ブログだったりプレゼンテーションだったり、プログラムだったり文章だったりと手段はさまざまですが自分自身が何かを発信したからこそこういった貴重な体験をする事が出来たのだと思います。日々の生活の中で継続的にアウトプットを行う事は簡単ではないですが、自分がどんな人間なのか、どんな事を考えているのかを発信する事の大切さをあらためて実感しました。 またインターネットというツールを使う事でプログラムそのものや英語のコンテンツは世界中に伝わります。今回もマレーシアやイングランドの人から反応が貰えるとは全く予想していませんでしたし、バングラディシュのFahadさんと2年越しくらいで初対面をした際にも「初めて会ったのに、そんな気がしない」なんて話していました。インターネットはやはりすごい。 恩返しの大切さ (CakeFestのパーティの様子) 読み手やオープンソースの利用者として見た場合、自分が見たものや使ったものへ反響を返すという事も大きな意味があると思います。facebookが広まった事でついつい「イイネ」をクリックしたりリツイートする事で賛同の意思を伝える事が増えてきました。たしかにそういった反響もうれしいですが、それ以上に文章や直接の言葉で貰う反応はうれしいものです。そういった反響をくれた人の事は強く記憶に残りますし、がんばってアウトプットを続けようという大きなモチベーションになります。またオープンソースソフトウェアであれば実際にバグを修正したり、ドキュメントや記事を書くなどの方法もあります。 CakePHPも海兵隊から除隊された後にOSCommerceのカスタマイズなどをしていたphpnutがポーランド人のマイケルの作った&#8221;Cake&#8221;に対してすごくいいねと反応を返し、面倒なプロジェクト運営やサーバー管理は全部、俺がやるから一緒にやろうと誘ったのがきっかけだったそうです。自分が良いなと思ったものに対してポジティブなフィードバックをしたり、ちょっとした協力をする事で何か大きな事が生まれていくと思うと、そういった日々の恩返しも大切だと感じました。 自分自身から発信する事の大切さ、恩返しの大切さはオープンソースを知っている者としてはけして目新しい事ではなく、元々分かっていた事でした。不思議ですがその知っていた事をとても新鮮かつ染み入るように実感する事が出来ました。今後も開発をがんばろうというやる気が湧きましたし、日頃目にしているサービスや記事、ソフトウェアに対してきちんと恩返しをしていこうと思います。 長文になりましたが、読んで頂いてありがとうございました。]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.candycane.jp/archives/773" title="CakeFest 2011に参加しました。">前回のポスト</a>で書いたようにイギリスのマンチェスターで開催されたCakePHPの公式イベント、<a href="http://cakefest.org/">CakeFest</a>に参加してきました。今回はスピーカーとしてこれまで開発を続けて来た<a href="https://github.com/yandod/candycane">CakePHP版Redmine、CandyCane</a>についての発表を行い感じた事をまとめます。</p>
<h3>発表までの経緯と内容</h3>
<p>CandyCaneは<strong>RedmineをCakePHPに移植すればもっと使いやすい課題管理システムになるのでは</strong>という<a href="http://www.slideshare.net/yandod/candycane-v2?type=presentation">アイデアからスタートした</a>オープンソースプロジェクトです。<a href="http://www.flickr.com/photos/zatsu/sets/72157616617847267/">2009年の4月に行った開発合宿</a>での成果を元に地道に開発を続け、現在は140ほどのページが動作しバグの管理ができる状態になっています。<a href="http://www.akiyan.com/blog/archives/2009/04/redmine-to-cakephp-candycane-devcamp-report.html">日本のCakePHPでは少しは知られているソフトウェア</a>ですが、日本のCakePHP以外のコミュニティや海外のコミュニティではあまり知られていない状態でした。<br />
昨年のCakeFestにも応募したのですが、再挑戦した今年に公式カンファレンスでの機会を得る事ができました。</p>
<p>今回の発表では特に日本で人気が高いと思われるRedmineの紹介とCandyCaneの開発の経緯と実際にインストールして使用するデモという構成でした。</p>
<p><strong style="display: block; margin: 12px 0 4px;"><a title="20110903 candycane" href="http://www.slideshare.net/yandod/20110903-candycane" target="_blank">20110903 candycane</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9120858" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/yandod" target="_blank">yandod</a></div>
<h3>自分の考えを発信する事の大切さ</h3>
<p><a href="http://blog.candycane.jp/wp-content/uploads/2011/09/IMG_0206.jpg"><img src="http://blog.candycane.jp/wp-content/uploads/2011/09/IMG_0206-300x225.jpg" alt="" title="IMG_0206" width="300" height="225" class="aligncenter size-medium wp-image-788" /></a><br />
(会場内のバーでの交流の様子)<br />
拙い英語による発表でしたが、発表後にはさまざまな反応を会場にいた人やオンラインで見ていた人達から貰う事ができました。<strong>またRedmineを実際に使っている人が参加者の3割くらいに達していたことも驚きでした。</strong>(すでにTracからは離れた人が予想よりも多かった)実際にもらった反応は下記のような感じです。</p>
<p><strong>来場者のイングランドの<a href="https://twitter.com/#!/theMojoWill/status/109944537836830721">Will Wilsonさん</a></strong><br />
<strong>「Redmineからの移行はどうすればいいのか？」</strong>という質問を貰い、その後レストランで話した所「Redmineいいなと思ったけれど、PHPで運用したい」というまさにCandyCaneを開発する前に<strong>僕が思った事と同じ反応</strong>。またプロジェクト作成からメンバーの追加などのステップが分かりにくい点を改善したい等、発表で重視して説明した内容について熱く語ってくれました。</p>
<p><strong>CakePHPのコア開発者の１人でもある<a href="https://twitter.com/#!/predominant/status/109940221977702400">Graham Weldonさん</a></strong><br />
「今後の開発予定は？」という質問と10月に大阪で行われるハッカソンでは<strong>「CandyCaneのCake2移行をやるよ」「CakeDCの内部で使っているRedmineをCandyCaneに変えたい」</strong>というこれもまた熱い反応を貰いました。</p>
<p><strong>オンラインで発表を見ていたマレーシアの<a href="http://twitter.com/#!/sumardi">@sumarudi</a>さん</strong><br />
最初は来場者の誰かなのかと思っていましたが、オンラインで見ていたという事でした。<a href="http://twitter.com/#!/sumardi/status/109988572299403264">是非使ってみたい</a>という反応を貰いました。</p>
<p>貰った反応はどれも自分がこれまでに感じた内容そのものだったり、「使ってみたい」という前向きな反応で本当に嬉しく感じました。日々の生活の中で感じた事や自分の為に手を動かした内容を発表したからこそこういった反応を得る事が出来たのだと思います。また特に反応をしなかった人からも<strong>「CandyCaneをやっている日本のyando」というキャラ認識</strong>を受け、コミュニケーションがしやすくなりました。ブログだったりプレゼンテーションだったり、プログラムだったり文章だったりと手段はさまざまですが自分自身が何かを発信したからこそこういった貴重な体験をする事が出来たのだと思います。日々の生活の中で継続的にアウトプットを行う事は簡単ではないですが、自分がどんな人間なのか、どんな事を考えているのかを<strong>発信する事の大切さをあらためて実感しました。</strong><br />
またインターネットというツールを使う事でプログラムそのものや英語のコンテンツは世界中に伝わります。今回もマレーシアやイングランドの人から反応が貰えるとは全く予想していませんでしたし、バングラディシュのFahadさんと2年越しくらいで初対面をした際にも「初めて会ったのに、そんな気がしない」なんて話していました。インターネットはやはりすごい。</p>
<h3>恩返しの大切さ</h3>
<p><iframe width="600" height="338" src="http://www.youtube.com/embed/vdTvlHA7YWY?fs=1&#038;feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>(CakeFestのパーティの様子)<br />
読み手やオープンソースの利用者として見た場合、自分が見たものや使ったものへ反響を返すという事も大きな意味があると思います。facebookが広まった事でついつい「イイネ」をクリックしたりリツイートする事で賛同の意思を伝える事が増えてきました。たしかにそういった反響もうれしいですが、それ以上に文章や直接の言葉で貰う反応はうれしいものです。そういった<strong>反響をくれた人の事は強く記憶に残ります</strong>し、がんばってアウトプットを続けようという大きなモチベーションになります。またオープンソースソフトウェアであれば実際にバグを修正したり、ドキュメントや記事を書くなどの方法もあります。<br />
CakePHPも海兵隊から除隊された後にOSCommerceのカスタマイズなどをしていたphpnutがポーランド人のマイケルの作った&#8221;Cake&#8221;に対してすごくいいねと反応を返し、<strong>面倒なプロジェクト運営やサーバー管理は全部、俺がやるから一緒にやろう</strong>と誘ったのがきっかけだったそうです。自分が良いなと思ったものに対してポジティブなフィードバックをしたり、<strong>ちょっとした協力をする事で何か大きな事が生まれていく</strong>と思うと、そういった日々の恩返しも大切だと感じました。</p>
<p>自分自身から発信する事の大切さ、恩返しの大切さはオープンソースを知っている者としてはけして目新しい事ではなく、元々分かっていた事でした。不思議ですがその知っていた事をとても新鮮かつ染み入るように実感する事が出来ました。今後も開発をがんばろうというやる気が湧きましたし、日頃目にしているサービスや記事、ソフトウェアに対してきちんと恩返しをしていこうと思います。</p>
<p>長文になりましたが、読んで頂いてありがとうございました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/776/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>検索機能を実装しました &#8211; candycane v0.8.0</title>
		<link>http://blog.candycane.jp/archives/733</link>
		<comments>http://blog.candycane.jp/archives/733#comments</comments>
		<pubDate>Mon, 04 Jul 2011 22:36:02 +0000</pubDate>
		<dc:creator>yandod</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[candycane]]></category>

		<guid isPermaLink="false">http://blog.candycane.jp/?p=733</guid>
		<description><![CDATA[v0.8.0ダウンロードページ CakePHPで作られた第3のRedmine、candycaneのバージョンをv0.8.0に更新しました。今回はインストーラーの国際化やチケットの関連付け機能の有効化、検索機能の最初の実装といった機能を盛り込みより実用性が向上しています。機能の実装に伴って判明した問題点などもありますが、まずは日常の利用をカバーする事を優先しています。特にインストーラーについては3分程度でインストール可能で、気に入らなければフォルダごと捨てられます。この点についてはRedmineと比較してもかなりスムーズな所かなと思っています。 なお先日のCakePHP2.0勉強会で発表した際にカウントしてみたところ現状で130を超えるアクションが実装されている事がわかりました。マニュアルの執筆をするのであれば当然この130のアクションに対してスクリーンショットの撮影や執筆が発生するとわかってしまい、戦慄しています。 Candycane110625 View more presentations from yandod 延べ作業時間は52.50時間、4のバグ修正と5つの機能追加というのが作業の概要です。なんというか、１週間は僕はcandycaneの為に働いているようですね。正直に申しましてこれだけの作業時間を確保するのは健康に支障があるレベルですので、細かなバグ修正から機能の実装まで参加してもらえる方をお待ちしております。。。。 また検索の実装にはSearch Pluginを使っており、k1Lowさんの記事が大変参考になりました。ありとあらゆる検索機能を実装する方にこのプラグインをお勧めしますよ。 機能 #107: パスワードリマインダーが動かない 機能 #119: インストーラーが翻訳されていない 機能 #124: CI環境の構築 バグ #139: 優先度による色分けができてない 機能 #140: チケットの関連付けができない 機能 #146: チケット検索ができない バグ #148: Xampp上でインストール実行後のWelcome画面がErrrorとなり表示されない。 バグ #149: 添付ファイルが添付できない？ バグ #150: 言語リストに余分なdefault.potが表示される 前回のリリースノート]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.candycane.jp/wp-content/uploads/2011/07/candy.png"><img src="http://blog.candycane.jp/wp-content/uploads/2011/07/candy-300x150.png" alt="" title="candy" width="300" height="150" class="aligncenter size-medium wp-image-736" /></a></p>
<p><a href="https://github.com/yandod/candycane/archives/v0.8.0">v0.8.0ダウンロードページ</a><br />
CakePHPで作られた第3のRedmine、candycaneのバージョンをv0.8.0に更新しました。今回はインストーラーの国際化やチケットの関連付け機能の有効化、検索機能の最初の実装といった機能を盛り込みより実用性が向上しています。機能の実装に伴って判明した問題点などもありますが、まずは日常の利用をカバーする事を優先しています。特にインストーラーについては<strong>3分程度でインストール可能で、気に入らなければフォルダごと捨てられます。</strong>この点についてはRedmineと比較してもかなりスムーズな所かなと思っています。</p>
<p>なお先日のCakePHP2.0勉強会で発表した際にカウントしてみたところ<strong>現状で130を超えるアクションが実装されている</strong>事がわかりました。マニュアルの執筆をするのであれば当然この130のアクションに対してスクリーンショットの撮影や執筆が発生するとわかってしまい、戦慄しています。</p>
<p><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/yandod/candycane110625" title="Candycane110625" target="_blank">Candycane110625</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/8418508" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<p style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/yandod" target="_blank">yandod</a> </p>
<p><a href="http://my.candycane.jp/versions/show/14">延べ作業時間は52.50時間、4のバグ修正と5つの機能追加</a>というのが作業の概要です。なんというか、１週間は僕はcandycaneの為に働いているようですね。正直に申しましてこれだけの作業時間を確保するのは健康に支障があるレベルですので、細かなバグ修正から機能の実装まで参加してもらえる方をお待ちしております。。。。</p>
<p>また検索の実装には<a href="https://github.com/CakeDC/Search">Search Plugin</a>を使っており、<a href="http://blog.fusic.co.jp/archives/156">k1Lowさんの記事</a>が大変参考になりました。ありとあらゆる検索機能を実装する方にこのプラグインをお勧めしますよ。</p>
<ul>
<li><a href="http://my.candycane.jp/issues/show/107" class=" issue closed">機能 #107</a>: パスワードリマインダーが動かない</li>
<li><a href="http://my.candycane.jp/issues/show/119" class=" issue closed">機能 #119</a>: インストーラーが翻訳されていない</li>
<li><a href="http://my.candycane.jp/issues/show/124" class=" issue closed">機能 #124</a>: CI環境の構築</li>
<li><a href="http://my.candycane.jp/issues/show/139" class=" issue closed">バグ #139</a>: 優先度による色分けができてない</li>
<li><a href="http://my.candycane.jp/issues/show/140" class=" issue closed">機能 #140</a>: チケットの関連付けができない</li>
<li><a href="http://my.candycane.jp/issues/show/146" class=" issue closed">機能 #146</a>: チケット検索ができない</li>
<li><a href="http://my.candycane.jp/issues/show/148" class=" issue closed">バグ #148</a>: Xampp上でインストール実行後のWelcome画面がErrrorとなり表示されない。</li>
<li><a href="http://my.candycane.jp/issues/show/149" class=" issue closed">バグ #149</a>: 添付ファイルが添付できない？</li>
<li><a href="http://my.candycane.jp/issues/show/150" class=" issue closed">バグ #150</a>: 言語リストに余分なdefault.potが表示される</li>
</ul>
<p><a href="http://blog.candycane.jp/archives/704">前回のリリースノート</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.candycane.jp/archives/733/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

