<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>sue445&apos;s Blog</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/" />
    <link rel="self" type="application/atom+xml" href="http://blog.sue445.net/atom.xml" />
    <id>tag:blog.sue445.net,2010-08-15://2</id>
    <updated>2012-03-18T10:23:52Z</updated>
    <subtitle>日記です</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 5.13-ja</generator>

<entry>
    <title>GithubのリポジトリでJavaDocを公開する</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2012/03/18-1922.html" />
    <id>tag:blog.sue445.net,2012://2.187</id>

    <published>2012-03-18T10:22:10Z</published>
    <updated>2012-03-18T10:23:52Z</updated>

    <summary>先日Githubに自分用のライブラリを公開しました。Githubに「gh-pag...</summary>
    <author>
        <name>sue445</name>
        
    </author>
    
        <category term="Git" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[先日Githubに自分用のライブラリを公開しました。<div>Githubに「gh-pages」というブランチを作ってpushすると静的なサイトを公開することができるため、それを応用してJavaDocも一緒に公開してみました。</div><div><br /></div><div><div>リポジトリ：<a href="https://github.com/sue445/kulib">https://github.com/sue445/kulib</a></div><div>JavaDoc：<a href="http://sue445.github.com/kulib/site/apidocs/index.html">http://sue445.github.com/kulib/site/apidocs/index.html</a></div><div><br /></div><div>gh-pagesをpushした場合「http://[ユーザー名].github.com/[リポジトリ名]/?」というURLで参照できます。</div><div><div><br /></div></div><div>参考にしたサイト</div><div><ul><li><a href="http://pages.github.com/">GitHub Pages - Home</a></li><li><a href="http://stackoverflow.com/questions/3939595/making-javadocs-available-with-github-sonatype-maven-repo">java - Making JavaDocs available with GitHub, Sonatype Maven repo - Stack Overflow</a></li></ul></div><div><br /></div><div>以下の手順ではMavenで生成したJavaDocをコマンドベースでGithubにpushすることを想定しているのでそれ以外の場合は適宜読み替えてください</div><div><br /></div><div>手順メモ</div></div><div><ol><ol><li>[master] pom.xmlに下記を追加<pre name="code" class="xml">&lt;project&gt;
  &lt;reporting&gt;
    &lt;outputDirectory&gt;site&lt;/outputDirectory&gt;
    &lt;plugins&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
        &lt;artifactId&gt;maven-javadoc-plugin&lt;/artifactId&gt;
        &lt;configuration&gt;
          &lt;source&gt;1.6&lt;/source&gt;
          &lt;encoding&gt;UTF-8&lt;/encoding&gt;
          &lt;docencoding&gt;UTF-8&lt;/docencoding&gt;
          &lt;charset&gt;UTF-8&lt;/charset&gt;
          &lt;links&gt;
            &lt;link&gt;http://docs.oracle.com/javase/6/docs/api/&lt;/link&gt;
          &lt;/links&gt;
        &lt;/configuration&gt;
      &lt;/plugin&gt;
    &lt;/plugins&gt;
  &lt;/reporting&gt;
&lt;/project&gt;</pre>&lt;outputDirectory&gt;で出力先の設定。JavaDoc以外にもFindBugsやカバレッジのレポートもできるため詳しくはggrks（ググレカス）</li><li>[master] .gitignoreに&lt;outputDirectory&gt;で追加した出力先を追加する<pre>echo site/ &gt;&gt; .gitignore</pre>
</li><li>[master] ここらでいったんコミット<pre>git add .
git commit
</pre></li><li>[master] 下記コマンドを実行<br /><pre>git symbolic-ref HEAD refs/heads/gh-pages
rm .git/index
git clean -fdx</pre>よく分かってないですが、これをやることでどこのブランチからも切り離されたgh-pagesが作られるらしい</li><li>[gh-pages] index.htmlを追加<pre>echo "My GitHub Page" &gt; index.html</pre></li><li>[gh-pages] .gitignoreで適宜ファイルを除外したりする。<br />（site/とindex.html以外は除外していいかと）<br /></li><li>[gh-pages]
&nbsp;ここらでいったんコミット<pre style="border-style: initial; border-color: initial; font-size: 13px; ">git add .
git commit</pre></li><li>[master] masterをcheckoutしてmvn siteする</li><li>[gh-pages] gh-pagesをcheckoutしてsite/を追加</li><li>[gh-pages]&nbsp;git push origin gh-pagesするとページが作られる。ファイル数にもよるけど多い時は10分くらいかかる</li></ol></ol><div><br /></div></div><div>2回目以降はmasterでmvn siteする前にgh-pagesでrm -rf site/してコミットしておく（既存ファイルがあるとエラーになってcheckoutできないため）</div>]]>
        
    </content>
</entry>

<entry>
    <title>appengine ja night #19に参加しました #ajn19</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2012/02/24-2354.html" />
    <id>tag:blog.sue445.net,2012://2.186</id>

    <published>2012-02-24T14:54:02Z</published>
    <updated>2012-03-12T14:05:43Z</updated>

    <summary><![CDATA[凛子かわいいよ凛子（挨拶）@shin1ogawaさんのご好意により&nbsp;a...]]></summary>
    <author>
        <name>sue445</name>
        
    </author>
    
    <category term="gaeja" label="gaeja" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[<div>凛子かわいいよ凛子（挨拶）</div><div><br /></div>@shin1ogawaさんのご好意により&nbsp;<a href="http://atnd.org/events/25386">appengine ja night #19</a>で&nbsp;LTをさせてもらいました。<div><br /></div><div><br /></div><div>自分の発表資料</div><div><br /></div><div><div style="width:425px" id="__ss_11731319"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/sue445/azusaarappengine-11731319" title="AZusaar!でのappengine活用事例 #ajn19" target="_blank">AZusaar!でのappengine活用事例 #ajn19</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/11731319" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/thecroaker/death-by-powerpoint" target="_blank">PowerPoint</a> from <a href="http://www.slideshare.net/sue445" target="_blank">sue445</a> </div><br /></div><div style="width:425px" id="__ss_11731319"><br /></div><div style="width:425px" id="__ss_11731319">喋り忘れたこととか</div><div style="width:425px" id="__ss_11731319"><ul><li>AZusaar!のAPIを使っていいか？という質問に関して補足<ul><li>外部公開してるAPI系はquutaにかからないようにがっつりチューニングしてるので他アプリから多少呼ばれても問題はないはず</li><li>jsonpだとFrontend Cache Controlが効かなくなるのでできればjson推奨
</li><li>APIのリクエストとレスポンスは基本的にATND準拠ですが、AZusaar!で使ってない部分に関しては基本全部削っています</li><li>jsに書かれていなければ実装されてないという認識でOKですｗ</li><li>jsと実際のレスポンスから仕様と空気を読んで自己責任でご利用ください</li><li>更に需要がありそうならどっかで仕様をまとめます</li>
</ul>
</li><li>尺の関係で自分が賞をとったAPIの説明ははしょりましたが、ジオどすAPIの説明は<a href="https://docs.google.com/present/edit?id=0AdwFkmMPUpKFZHB3ZjNuN182MmZndnB0ZGM0">ここ</a>に置いていきます。（社内向けなんで内容はそんなに深くないですがｗ）</li><li>一番アクセスがあった（と思われる）自分がLTしてた時間帯も1インスタンスで捌きれていたみたいです</li><li>課金は$2.1/weekのみですが、Billing Onしたら$50貰えるキャンペーンの分がまだ半分くらい残っていますｗ</li><li>テスト周りについて
</li><ul>
<li>Java: JUnit+QuickJUnitでがっつりTDDやってました。プロダクト1700行に対してテストケースは250個くらい（djUnit換算なので実際はもっと行数あるかも）。カバレッジはline, branchともに85%くらい</li>
<li>JavaScript: QUnitを使用。プロダクトコード1200行に対してテストケースは50個くらい。ロジックに関するテストはやってますがDOM生成周りはテストをサボってますorz</li><li>クロスブラウザ周りのテストは手元にある環境は全部試してます。WinだとIE9, FireFox, Chrome, Safari。MacもIEない以外は一緒。あとはAndroid(IS03)とiPad</li><li>スマホUIの確認には<a href="http://www.springbox.com/mobilizer/">Mobilizer</a>が重宝しました。機能的にはXCodeのシミュレータには劣るけどAdobe AIRなのでWinでも動くのは嬉しい</li></ul></ul><div><br /></div><div>追記：主催の@kazunori_279さんのブログに他の方の資料やust録画がまとまっています</div><div><a href="http://d.hatena.ne.jp/kazunori_279/20120226/1330269178">http://d.hatena.ne.jp/kazunori_279/20120226/1330269178</a>
</div></div>
 </div>]]>
        
    </content>
</entry>

<entry>
    <title>2011年に読んだ技術書まとめ</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2012/01/15-2315.html" />
    <id>tag:blog.sue445.net,2012://2.185</id>

    <published>2012-01-15T14:15:38Z</published>
    <updated>2012-01-15T14:17:12Z</updated>

    <summary>去年の目標で「1年間に技術書を30冊読む」というのを掲げていた気がするのでまとめ...</summary>
    <author>
        <name>sue445</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[去年の目標で「1年間に技術書を30冊読む」というのを掲げていた気がするのでまとめてみました（日付は<a href="http://booklog.jp/users/sue445">ブクログ</a>に書いていた読了日ですが間違ってるかも）
<div><br /></div><div><ol><li>1/10?: クリーンコード</li><li>1/10?: プログラマが知るべき97のこと</li><li>1/24: アジャイルプラクティス</li><li>2/12: 達人プログラマー</li><li>2/16: オープンソース徹底活用 Slim3によるウェブWebアプリケーション開発</li><li>2/18: Javaルールブック</li><li>2/28: プログラミング Google App Engine</li><li>3/7: WEB+DB PRESS vol.61</li><li>3/14:&nbsp;ソフトウェアアーキテクトが知るべき97のこと</li><li>4/2:&nbsp;アーキテクトの審美眼</li><li>4/15: 初めてのJavaScript</li><li>5/1: jQuery クックブック</li><li>5/10:&nbsp;作ればわかる！Google App Engine for Javaプログラミング</li><li>5/14:&nbsp;Java: The Good Parts</li><li>5/31:&nbsp;レガシーコード改善ガイド</li><li>6/9:&nbsp;エンジニアのための時間管理術</li><li>7/4:&nbsp;Java並行処理プログラミング</li><li>7/16: ビューティフルコード</li><li>7/22: Twitter API ポケットリファレンス</li><li>7/26: WEB+DB PRESS vol.63</li><li>8/2:&nbsp;テスト駆動開発入門</li><li>8/9:&nbsp;リファクタリング・ウェットウェア</li><li>8/18:&nbsp;アジャイルサムライ</li><li>8/22:&nbsp;Maven (開発者ノートシリーズ)</li><li>9/8: 実用Git</li><li>10/8:&nbsp;Being Geek</li><li>11/16:&nbsp;プログラミング言語Java&nbsp;</li><li>11/18:&nbsp;Jenkins実践入門</li><li>12/1:&nbsp;ソフトウェアテスト技法ドリル</li><li>12/18:&nbsp;入門Git</li><li>12/24:&nbsp;アジャイルソフトウェア開発の奥義</li></ol><div>ギリギリ目標達成ってとこですね。</div><div><br /></div><div>今年は１年間で40冊目標でいきたいと思います</div></div>]]>
        
    </content>
</entry>

<entry>
    <title>年初の目標を振り返ってみる</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2011/12/25-0300.html" />
    <id>tag:blog.sue445.net,2011://2.184</id>

    <published>2011-12-24T18:00:47Z</published>
    <updated>2011-12-24T18:02:14Z</updated>

    <summary><![CDATA[年初の今年の目標を見つけたので振り返ってみるテスト&gt;入院しない：元気があれ...]]></summary>
    <author>
        <name>sue445</name>
        
    </author>
    
        <category term="HP" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ネタ" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[年初の<a href="http://blog.sue445.net/archives/2011/01/08-1601.html">今年の目標</a>を見つけたので振り返ってみるテスト<div><br /></div><div><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">&gt;入院しない：元気があれば何でもできる！</span></div><div style="text-align: left;"><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; ">→</span><font color="#36414d" face="Verdana, Arial, sans-serif"><span style="line-height: 19px;">入院しなかった！</span></font></div><div><div style="text-align: left;"><font color="#36414d" face="Verdana, Arial, sans-serif"><span style="line-height: 19px;"><br /></span></font></div><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">&gt;体重50kg超え：何年間連続同じ目標だｗ</span></div><div><div style="text-align: left;"><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; ">→</span><font color="#36414d" face="Verdana, Arial, sans-serif"><span style="line-height: 19px;">×：現在体重47kgくらい。あとちょっとが超えられない俺ナッシュ</span></font></div><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; "><br /></span></div><div><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">&gt;Google App Engineで何か作る：ネタはあるので</span></div><div><div style="text-align: left;"><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; ">→</span><font color="#36414d" face="Verdana, Arial, sans-serif"><span style="line-height: 19px;">○：今年は<a href="http://jubeatplusplus.appspot.com/">jubeat++</a>や<a href="http://azusaar.appspot.com/">AZusaar!</a>がメインでした。</span></font></div><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; "><br /></span></div><div><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">&gt;AndroidアプリかiPadアプリを作る：同上</span></div><div><div style="text-align: left;"><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; ">→</span><font color="#36414d" face="Verdana, Arial, sans-serif"><span style="line-height: 19px;">×：Titaniumの本を買って環境構築するところまではやったんですがorz</span></font></div><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; "><br /></span></div><div><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">&gt;社会人3年目ということで会社に引きこもらずにどんどん外に出る</span></div><div><div style="text-align: left;"><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; ">→</span><font color="#36414d" face="Verdana, Arial, sans-serif"><span style="line-height: 19px;">○：社内と社外合わせると今年1年間で合計30個くらい参加していました（うち、自分がなんらかの形で発表したものは5個くらい）。去年の自分に比べたらアグレッシブに行動できた方じゃないかと思います</span></font></div><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; "><br /></span></div><div><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">&gt;OCJ-D(旧SJC-D)をとる：問題集はおろか公式にもろくな情報がねえｗ</span></div><div style="text-align: left;"><font color="#36414d" face="Verdana, Arial, sans-serif"><span style="line-height: 19px;">→×：いつも心の片隅で考えてはいたんですが、いつか調べた時にswingでコード提出というのが気になって結局やらずじまい。試験範囲もぼんやりとしすぎてるためぶっちゃけSJC-WCだけでよくね？という結論に。</span></font></div><div><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; "><br /></span></div>]]>
        
    </content>
</entry>

<entry>
    <title>RPGツクールXP セーブデータ改変ツール Professionalをフリーウェアにしました</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2011/12/25-0240.html" />
    <id>tag:blog.sue445.net,2011://2.183</id>

    <published>2011-12-24T17:40:51Z</published>
    <updated>2011-12-24T17:40:27Z</updated>

    <summary><![CDATA[RPGツクールXP セーブデータ改変ツール Professional&nbsp;...]]></summary>
    <author>
        <name>sue445</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[<div><a href="http://www.sue445.net/downloads/rpgxpsav.html">RPGツクールXP セーブデータ改変ツール Professional</a>&nbsp;を今まで1000円のシェアウェアで公開していましたが、いろいろ思うところがあったのでフリーウェアにしました。</div><div><br /></div><div>理由のいくつか</div><div><br /></div><div><ul><li>初版から5年も経つから</li><li>しかも最後のアップデートから丸2年放置</li><li>Windowsアプリ開発に対する熱意が前に比べてだいぶ落ちた<br />（ここ1?2年くらいはwebアプリしか作ってないです・・・）</li><li>ろくにサポートしてない状態で有償として提供しておくことの罪悪感</li><li>数年前にPCを買い換えた時にアクティベーションの関係でRPGツクールXPが起動しなくなったｗ<br />（購入直後にユーザ登録してれば大丈夫だったんですがねぇ）</li><li>盆正月の帰省時に一時的にシェアウェアを無効化するのが地味に面倒</li><li><strike>メールが来たらライセンスキーを返信するお仕事はもういやだお・・・</strike></li></ul></div><div><br /></div><div>まぁこんなところですかね。</div><div><br /></div><div>サポートに関しては今まで通り（半分放置気味）で。</div><div><br /></div><div><br /></div><div>返金に関しては今のところ考えていません。直近1ヶ月以内に購入された方に関してはどうしてもという場合には返金を考えてはないですが、VectorやAnyWare+の手数料を差し引いた分からさらにこちらからの振込手数料を差し引いたら雀の涙程度の金額が残りそうにないことを考えると乗り気じゃないです。</div><div><br /></div><div>参考：</div><div><ul><li>Vectorシェアレジの場合：1000円 - 150円(手数料15%) = 850円</li><li>AnyWare+の場合：1000円 - 200円(手数料20%) = 800円</li></ul><div>他行宛の銀行振込だと手数料が200円前後かかるので返金しようとしたらそこからさらに差し引かれます。</div></div><div>500?600円ぽっちですがどうしても返金してほしい（かつ、僕に銀行口座を教えてもいい）場合メールで個別対応します。</div><div><br /></div><div><a href="http://www.sue445.net/cgi-bin/s_mail/index.html">メールフォーム</a>に下記を記入して送信してください（〆切は2012年1月末日）</div><div><br /></div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div>【購入時期】　</div><div>（基本的に2011年11~12月中に購入された方が対象）</div><div>【ユーザー名】</div><div>【メールアドレス】</div><div>【ユーザーID】</div><div>【銀行口座】</div><div>（三井住友銀行なら手数料かからないのでベスト）</div></blockquote><div><br /></div><div><br /></div><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>AZusaar!がMashupAwardを受賞しました</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2011/12/15-2210.html" />
    <id>tag:blog.sue445.net,2011://2.182</id>

    <published>2011-12-15T13:10:06Z</published>
    <updated>2012-01-07T09:04:56Z</updated>

    <summary>12/11(日)にMashup Awards 7の授賞式に参加し、AZusaar...</summary>
    <author>
        <name>sue445</name>
        
    </author>
    
        <category term="appengine" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ネタ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="gaeja" label="gaeja" scheme="http://www.sixapart.com/ns/types#tag" /><category term="ma7" label="MA7" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[12/11(日)に<a href="http://ma7.mashupaward.jp/">Mashup Awards 7</a>の授賞式に参加し、<a href="http://azusaar.appspot.com/">AZusaar!</a>&nbsp;がジオどす賞を受賞しました。<div><br /></div><div>ジオどすAPIを使ってる作品が全部で4作品だけしかなかったため、最初受賞の連絡がきた時はうすうすこの賞かなぁとは思ってましたｗ</div><div><div><br /></div><div><a href="http://ma7.mashupaward.jp/results">選考理由</a>の</div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><br /></div></blockquote><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><span style="font-family: 'ＭＳ Ｐゴシック', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ Pro W3', Osaka; font-size: 12px; line-height: 18px; text-align: left; ">ジオどすの「ジオコーダ前処理API」は、京都の住所用と思われがちですが、その他の住所でも「ビル名等を判断して削除」する機能があります。</span></div><div><span style="font-family: 'ＭＳ Ｐゴシック', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ Pro W3', Osaka; font-size: 12px; line-height: 18px; text-align: left; ">ATND、こくちーずなど、「セミナー」という性質上、ビル名・部屋名は必須情報であり、それが地図の自動表示を邪魔していることが非常に多くあります。</span></div><div><span style="font-family: 'ＭＳ Ｐゴシック', 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ Pro W3', Osaka; font-size: 12px; line-height: 18px; text-align: left; ">この作品では、対象サイトの地図が住所検索に失敗してアフリカ沖を指している（緯度経度が0度）イベントに対しても、きちんと近隣のホテル検索が機能していました。これはイベントの住所をジオどすの「前処理API」を通した上でジオコーディングしていて、まさに本APIが本領発揮できる場所で使って頂いたことを高く評価いたしました。</span></div></blockquote><div><br /></div><div>を読んでちょっと感動。<a href="http://geodosu.com/">ジオどすAPI</a>は結構便利なのでジオエンコーディング（住所から緯度経度を算出）をするのなら使って損はないと思います。</div></div><div><br /></div><div>授賞式の様子。</div><div><a href="http://www.ustream.tv/recorded/19071855">Ustream.tv: ユーザー MashupAwards: Mashup Awards 7 授賞式, Recorded on 11/12/11. Web</a></div><div><br /></div><div>僕は1:36:00付近に映ってます。受賞台の上であずにゃんペロペロしたのは当日の思いつきです。iPadって便利ですねぇｗ</div><div><br /></div><div>貰った物</div><div><br /></div><div>賞状</div><div><a href="http://blog.sue445.net/archives/2011/12/15/MA7_1.png"><img alt="MA7_1.png" src="http://blog.sue445.net/archives/assets_c/2011/12/MA7_1-thumb-200x266-17.png" width="200" height="266" class="mt-image-none" /></a></div><div><br /></div><div>副賞の舞妓さん無料体験券</div><div><a href="http://blog.sue445.net/archives/2011/12/15/MA7_2.png"><img alt="MA7_2.png" src="http://blog.sue445.net/archives/assets_c/2011/12/MA7_2-thumb-200x150-19.png" width="200" height="150" class="mt-image-none" /></a></div><div><br /></div><div>今流行りの男の娘ですねｗ　京都に行くとしたら3月か5月の連休かなぁ・・・</div><div><br /></div><div>その他、Tシャツや各種ノベリティを貰いました。</div><div><br /></div><div><br /></div><div>今回の賞は自分だけの力だけで獲れたというわけではなく、<span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">かわいいあずにゃんを描いてくれた</span><a href="http://nominomi323.blog.fc2.com/" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; color: rgb(0, 102, 153); text-decoration: none; line-height: 19px; text-align: left; ">のみあっきゅさん</a><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">（</span><a href="https://twitter.com/#!/akkyu323" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; color: rgb(0, 102, 153); text-decoration: none; line-height: 19px; text-align: left; ">@akkyu323</a><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">）とデザイン修正をしてくださった</span><a href="http://hossy.info/" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; color: rgb(0, 102, 153); text-decoration: none; line-height: 19px; text-align: left; ">ほっしーさん</a><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">（</span><a href="https://twitter.com/#!/hossie" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; color: rgb(0, 102, 153); text-decoration: none; line-height: 19px; text-align: left; ">@hossie</a><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">）、各種APIを提供してくださった企業様、</span><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">普段参加しているGoogle App Engineの勉強会（appengine ja night）のナレッジ</span><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; text-align: left; ">のおかげだと思います。</span></div><div style="text-align: left;"><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; "><br /></span></div><div style="text-align: left;"><span style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; ">本当にありがとうございます！</span></div><div><br /></div><div>来年こそは100万円を獲りたいところ。（それ以前にネタを思いつくかどうか怪しいですがｗ）</div><div><br /></div><div>【2012/1/7追記】</div><div>授賞式の写真がupされました</div><div><a href="http://mashupawards.tumblr.com/post/15436635038/12-11-ma7-4-3">http://mashupawards.tumblr.com/post/15436635038/12-11-ma7-4-3</a>
</div>]]>
        
    </content>
</entry>

<entry>
    <title>実録！TDD風景 #TddAdventJp</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2011/12/06-0000.html" />
    <id>tag:blog.sue445.net,2011://2.181</id>

    <published>2011-12-05T15:00:00Z</published>
    <updated>2011-12-07T15:03:55Z</updated>

    <summary><![CDATA[TDD Advent Calendar jp: 2011&nbsp;の6日目で ...]]></summary>
    <author>
        <name>sue445</name>
        
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ネタ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="tddadventjp" label="TddAdventJp" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[<a href="http://atnd.org/events/22027">TDD Advent Calendar jp: 2011</a>&nbsp;の6日目で <a href="http://d.hatena.ne.jp/shuji_w6e/20111204/1323011355">@shuji_w6e さんのエントリ</a>の次です。<div><br /></div><div>他の人のエントリと比べると内容がかなりぶっとんでいるのであしからず（笑）<br /><div><br /><div><div>TDDを学ぶ上で何が一番いいなぁと考えたのですが、実際にコーディングしている風景を見るのがいいかと思い動画を撮ってみました。既出かどうかはシラネ</div><div><br /></div><div><iframe width="560" height="315" src="http://www.youtube.com/embed/tG33PAHqN0I" frameborder="0" allowfullscreen=""></iframe></div><div><br /></div><div>今回はTDDBC横浜のお題でTDDしてみました（言語はJava）</div><div><a href="http://www.slideshare.net/setoazusa/tddbc">http://www.slideshare.net/setoazusa/tddbc</a></div><div><br /></div><div><b>コード</b></div><div><div><div><a href="https://github.com/sue445/tdd-advent-caledar-2011">https://github.com/sue445/tdd-advent-caledar-2011</a></div></div></div><div><br /></div><div>本来なら課題4までやっていたのですが動画が途中で壊れていたので課題2まで収録しています。（githubには課題4まで収録）</div><div><br /></div><div><div></div></div><div>不自然に間が空いているのは途中何度もサブPCでググったりしてるからです。一発撮り無編集なのであしからず。</div><div>実際のコーディング風景からTDDのリズムを感じ取ってもらえれば幸いです。</div><div><br /></div><div>Quick JUnitではなくS2JUnit4 Pluginを使っていますが、使い方はだいたい一緒です。仕事がSeasar2中心なのでその流れでWinにはS2JUnit Pluginを入れています。（MacにはQuick JUnitだけどｗ）</div><div><br /></div><div>キー入力表示には拙作の「見えるキーボード」を利用しています。</div><div><a href="http://www.vector.co.jp/soft/win95/edu/se458963.html">http://www.vector.co.jp/soft/win95/edu/se458963.html</a></div><div><br /></div><div><br /></div><div>よく使うEclipseのショートカット（Macの人はCtrlをCommandに読み替えてください）</div><div><br /></div><div><ul><li><b>Ctrl + Space</b>: コード補完<ul><li>「tes」まで入れるとテストメソッドのテンプレートが作れる</li><li>カーソル位置がそのままだとJUnit3用のテストメソッド（testXxxxメソッド）</li><li>カーソルを1つ上に移動させるとJUnit4用のテストメソッド（@Testメソッド）</li></ul></li><li><b>Ctrl + 1</b>: クイックフィックス。その場に応じた補完ができる<ul><li>エラーや警告があればそれを解決</li><li>テストファーストで先にテストケースだけ作り、必要なメソッドがない状態でコンパイルエラーにしておいた状態からメソッドを作るのは日常茶飯事</li><li>メソッドの戻り値をローカル変数やフィールド変数に代入</li><li>とにかくいろいろできるすぎるのでとりあえず困ったらCtrl + 1しておくと吉</li></ul></li><li><b>Ctrl + Shift + O</b>: インポートの編成。足りないimport文や余分なimport文の整理ができる</li><li><b>Alt + Shift + R</b>: クラス名、メソッド名、変数名などの変更。<ul><li>直接参照している箇所はもとより、Javadocの中も全部まとめて変更できるので超便利</li><li>ただしリフレクションで参照してるのは無理なので、リファクタリングのことを考えるとリフレクションは極力使わない方がいい</li></ul></li><li><b>Alt + Shift + L</b>: 選択範囲をローカル変数に抽出</li><li><b>Alt + Shift + M</b>: 選択範囲をメソッド抽出</li><li><b>Alt + Shift + I</b>: インライン展開。ローカル変数抽出やメソッド抽出の逆</li></ul></div><div>右クリック→リファクタリングは便利なコマンドが揃ってるので、一度全部使ってみてどんなことができるか確認してみるといいです。</div><div><br /></div><div><br /></div><div>以下はQuick JUnit or S2JUnit plugin専用（JavaでEclipseでTDDやる上ではどちらかは必須）</div><div><br /></div><div><ul><li><b>Ctrl + 0</b>: テスト実行（テストメソッド内であればそのメソッドだけ、それ以外ならテストクラス全体）</li><li><b>Ctrl + 9</b>: テスティングペアの移動。なければ新規作成ダイアログ</li></ul></div><div><br /></div><div>その他や詳しいショートカットはこちらが参考になります</div><div><a href="https://sites.google.com/site/shin1ogawa/eclipse">https://sites.google.com/site/shin1ogawa/eclipse</a></div><div><br /></div><div><br /></div><hr><div>自分がTDDをやり始めて1年くらい経つのでついでに雑感など。</div><div><br /></div><div>そもそも自分の場合、初めからTDDをやろうとしてたわけじゃないです。</div><div>前のPJとかその前のPJとかでテストコードをほとんど書いてなくて苦労してた苦い経験があり、丁度新しいPJということで今度は何が何でもがっつりテストコードを書こうと勝手に決心したのが始まりです。</div><div><br /></div><div>その頃はTDDという言葉は知っていても具体的にどんなことかは知らず、ただ闇雲にテストを書きやすい開発スタイルを追求していったら自然とTDDのRed→Green→Refactoringの黄金の回転らしきものが見についていました。</div><div><br /></div><div>※たぶん同時期にリファクタリングやクリーンコードも読んでいたと思いますが、「テストコードのリファクタリング」という言葉を知らない時期に書いたテストコードはいい加減リファクタリングしたいです。（この間リファクタリングして1クラス4000行から3000行くらいには減ったけどｗ）</div><div><br /></div><div>そして実際にTDD BootCampに参加し和田さんの講演を聞いたり実際にペアプロをやったりして、自分の開発スタイルがTDDであることを再認識し自信をもつ頃が出来ました。</div><div><br /></div><div>5年後とか10年後とか先のことは分かりませんが、とりあえず現時点で自分に一番相性のいい開発スタイルはTDDなので飽きるまではこのスタイルで行くと思います。</div><div><br /></div><div><br /></div><div>まぁ、何が言いたいかと言うと</div></div></div><div><br /></div><div><font class="Apple-style-span" style="font-size: 1.953125em; ">べ、べつに好きでTDDをやっているんじゃないんだからね！///</font></div><div><br /></div><div>ということです（ぇー</div><div><br /></div><div>次は <a href="http://d.hatena.ne.jp/t-wada/20111207/coverage_is_your_friend">@t_wada さんのエントリ</a>です</div></div><div><br /></div><div><br /></div>


<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=sue445net-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=4894712288" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;bc1=000000&amp;IS2=1&amp;bg1=FFFFFF&amp;fc1=000000&amp;lc1=0000FF&amp;t=sue445net-22&amp;o=9&amp;p=8&amp;l=as4&amp;m=amazon&amp;f=ifr&amp;ref=ss_til&amp;asins=4048676881" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
]]>
        
    </content>
</entry>

<entry>
    <title>Memcacheに1MB以上のオブジェクトを格納する</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2011/11/30-2300.html" />
    <id>tag:blog.sue445.net,2011://2.180</id>

    <published>2011-11-30T14:00:53Z</published>
    <updated>2011-11-30T14:00:32Z</updated>

    <summary><![CDATA[AZusaar!&nbsp;ではDatastoreからとってきた検索結果を100...]]></summary>
    <author>
        <name>sue445</name>
        
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="appengine" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="gaeja" label="gaeja" scheme="http://www.sixapart.com/ns/types#tag" /><category term="slim3" label="slim3" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[<a href="http://azusaar.appspot.com/">AZusaar!</a>&nbsp;ではDatastoreからとってきた検索結果を100件ずつMemcacheに入れているのですが、最近ちょっとDatastore Reads Oppsが増えてきました。<div><br /></div><div><a href="http://blog.sue445.net/archives/2011/11/30/Image1.png"><img alt="チューニング前" src="http://blog.sue445.net/archives/2011/11/30/Image1.png" class="mt-image-none" /></a></div><div><br /></div><div>これが一番多かった時ですが、$0.11/日課金されてます。普通だとFrontEnd InstanceやDatastore Writesで課金がかかると思うんですがうちの場合これらは余裕ですｗ</div><div><br /></div><div>これくらいなら微々たるものなのですがなんとかチューニングできないかと課金対策してみました。</div><div><br /></div><div>とりあえず検索結果を100件ずつではなく全件Memcacheに入れるようにしたところ、下記のようなエラーが発生。</div><div><br /></div><div><pre class="ae-logs-expanded ae-pre-wrap" style="white-space: pre-wrap; word-wrap: break-word; padding-top: 0.3em; padding-bottom: 0.5em; padding-left: 1.5em; margin-bottom: 0px; font-family: 'Courier New'; color: rgb(0, 0, 0); line-height: 19px; text-align: left; background-color: rgb(233, 233, 233); ">Uncaught exception from servlet
com.google.appengine.api.memcache.MemcacheServiceException: Memcache put: Error setting single item (dev20111122.354967843445918452_KokucheeseSearchService__ALL_201111)
	at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl$7.transform(AsyncMemcacheServiceImpl.java:427)
	at com.google.appengine.api.memcache.AsyncMemcacheServiceImpl$7.transform(AsyncMemcacheServiceImpl.java:419)
	at com.google.appengine.api.memcache.MemcacheServiceApiHelper$RpcResponseHandler.convertResponse(MemcacheServiceApiHelper.java:59)
	at com.google.appengine.api.memcache.MemcacheServiceApiHelper$1.wrap(MemcacheServiceApiHelper.java:98)
	at com.google.appengine.api.memcache.MemcacheServiceApiHelper$1.wrap(MemcacheServiceApiHelper.java:92)
	at com.google.appengine.api.utils.FutureWrapper.wrapAndCache(FutureWrapper.java:57)
	at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:98)
	at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:90)
	at com.google.appengine.api.memcache.MemcacheServiceImpl.quietGet(MemcacheServiceImpl.java:27)
	at com.google.appengine.api.memcache.MemcacheServiceImpl.put(MemcacheServiceImpl.java:79)
	at org.slim3.memcache.MemcacheDelegate.put(MemcacheDelegate.java:551)
	at org.slim3.memcache.Memcache.put(Memcache.java:361)</pre></div><div><br /></div><div>エラーメッセージからは分かりづらいですが、Memcacheに入れようとしたデータが1MB超えているためのエラーのようです。（実際計算したら1.3MBくらいでした）<br /></div><div><br /></div><div>シリアライズした状態のバイナリは実は全然圧縮されていないため、gzip圧縮かけてMemcacheに入れるためユーティリティを作りました。</div><div><br /></div><div><a href="https://github.com/sue445/diary/tree/master/20111130">https://github.com/sue445/diary/tree/master/20111130</a></div><div>(appengine 1.6.0, slim3 1.0.15で確認済)</div><div><br /></div><div>使い方はテストコードを見ればだいたい分かると思いますが、Slim3のMemcacheとだいたい同じです。</div><div>注意点としてはrootPackage配下に置いておかないとhotReloading時にエラーになること。</div><div><br /></div><div>気になるProduction Server上でのパフォーマンスはこんな感じです。</div><div><br /></div><div><b>put時 (1.3MB -&gt; 286KB)</b></div><div><div>serialize:53ms</div><div>compress:121ms</div></div><div><br /></div><div><b>get時&nbsp;(286KB -&gt;&nbsp;1.3MB)</b></div><div><div>uncompressed:55ms</div><div>deserialize:19ms</div></div><div><br /></div><div>※データの大部分がStringなので結構圧縮率が高いです</div><div><br /></div><div>圧縮や再シリアライズによる多少のオーバーヘッドはありますがこれくらいなら許容範囲かと。</div><div>体感的にもそんなに変わってないです。</div><div>他のライブラリに依存していないのでspin upによるコストもありません。</div><div><br /></div><div>普通だと圧縮してまでMemcacheに入れるということはあまりないと思いますが、もしどうしても1つのデータとしてMemcacheに入れたい場合はこういう方法もあるといういい例ですね。</div><div><br /></div><div>このチューニングを施した後は見事Datastore Readsを$0に抑えることができました。わーい！</div><div><img alt="チューニング後" src="http://blog.sue445.net/archives/2011/11/30/Image3.png" width="575" height="620" class="mt-image-none" /></div><div><br /></div><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>AZusaar!でMA7の授賞式に参加することになりました</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2011/11/24-2013.html" />
    <id>tag:blog.sue445.net,2011://2.179</id>

    <published>2011-11-24T11:13:28Z</published>
    <updated>2011-11-24T11:13:35Z</updated>

    <summary>前回のブログで書いていたAZusaar!ですが、Mashup Awards 7の...</summary>
    <author>
        <name>sue445</name>
        
    </author>
    
        <category term="appengine" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ネタ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="azusaar" label="AZusaar" scheme="http://www.sixapart.com/ns/types#tag" /><category term="ma7" label="MA7" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[前回のブログで書いていた<a href="http://blog.sue445.net/archives/2011/10/22-0025.html">AZusaar!</a>ですが、<a href="http://ma7.mashupaward.jp/">Mashup Awards 7</a>の一次審査は落ちたもののどこかの賞にひっかかったらしく授賞式に出席することになりました。具体的な賞に関しては12/11の授賞式当日までのお楽しみらしいです。<div><br /></div><div>プログラムに関しては全部自分でやりましたが、やはりかわいいあずにゃんを描いてくれた<a href="http://nominomi323.blog.fc2.com/">のみあっきゅさん</a>（<a href="https://twitter.com/#!/akkyu323">@akkyu323</a>）とデザイン修正をしてくださった<a href="http://hossy.info/">ほっしーさん</a>（<a href="https://twitter.com/#!/hossie">@hossie</a>）のおかげです。超感謝！</div><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>総合イベント検索サービス「AZusaar」をMashup Awards 7に応募しました</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2011/10/22-0025.html" />
    <id>tag:blog.sue445.net,2011://2.178</id>

    <published>2011-10-21T15:25:25Z</published>
    <updated>2011-10-21T15:26:17Z</updated>

    <summary>「総合イベント検索サービス」ってのは今考えました＜挨拶AZusaar!http:...</summary>
    <author>
        <name>sue445</name>
        
    </author>
    
        <category term="appengine" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ネタ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="gaeja" label="gaeja" scheme="http://www.sixapart.com/ns/types#tag" /><category term="heroku" label="heroku" scheme="http://www.sixapart.com/ns/types#tag" /><category term="ma7azusaar" label="MA7 AZusaar" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[<div>「総合イベント検索サービス」ってのは今考えました＜挨拶</div><div><br /></div><div><ul><li>AZusaar!<br /><a href="http://azusaar.appspot.com/">http://azusaar.appspot.com/</a></li><li>AZusaar! | Mashup Awards 7 (#MA7)<br /><a href="http://ma7.mashupaward.jp/works/119?locale=ja">http://ma7.mashupaward.jp/works/119?locale=ja</a></li></ul></div><div><br /></div><div>というわけでMashup Awardsに応募してみました。</div><div><br /></div><div><br /></div><div>エンジニア界隈で比較的メジャー（？）な<a href="http://atnd.org/">ATND</a>, <a href="http://www.zusaar.com/">Zusaar</a>, <a href="http://kokucheese.com">こくちーず</a>, <a href="http://partake.in/">PARTAKE</a>を一度に検索できるようにしました。遠征クラスタのために会場近くのホテルも検索できます。</div><div><br /></div><div>名前の由来は「ATND + Zusaar = AZusaar → あずにゃんペロペロ〜（＾ω＾）」です。</div><div>このネタのためだけにフォロワーの人にペロペロできるあずにゃんの絵を描いてもらいましたｗ</div><div><br /></div><div><br /></div><div>今回自分なりの新しい試みとしてフルAjaxでやってます。</div><div>サーバサイドではjsonを返すだけのシンプルな設計にして、画面は全部JavaScriptで動的に生成。フロントエンドのコード比率はJava : JavaScript = 1 : 9 といったところでしょうか。cronはJavaで泥臭くやっていますがｗ</div><div><br /></div><div>以前<a href="http://blog.sue445.net/archives/2011/09/26-2223.html">TDD BootCamp 札幌2.1</a>の講演した時に「spin upと戦うためにはAjaxを使うしかない」と言いましたが、その集大成がこれですね。自分で言うのもなんですがappengineの長所を最大限生かしてると思いますｗ</div><div><br /></div><div>あと、今回はGoogle App Engineの他に一部Herokuも併用しています。本当ならappengineで全部やってしまいたかったのですが、一部APIをappengineのProductionサーバからを叩くとエラーになるため仕方なくAPI用のHerokuでサーバを立てました。（LocalサーバやProductionサーバのktrwjrなら問題ないんですが、URLから叩くとタイムアウトエラーに・・・）</div><div><br /></div><div>大賞100万円と贅沢は言わないので、せめてどっかの賞にひっかかってくれるといいんですががが</div>]]>
        
    </content>
</entry>

<entry>
    <title>indexの更新遅延を考慮した実装を行う</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2011/10/01-2200.html" />
    <id>tag:blog.sue445.net,2011://2.177</id>

    <published>2011-10-01T13:00:10Z</published>
    <updated>2011-10-01T13:00:58Z</updated>

    <summary>実はバリデータ関係でちょっと問題があったりしますhttp://kanon.dea...</summary>
    <author>
        <name>sue445</name>
        
    </author>
    
        <category term="TDD" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="appengine" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="gaeja" label="gaeja" scheme="http://www.sixapart.com/ns/types#tag" /><category term="slim3" label="slim3" scheme="http://www.sixapart.com/ns/types#tag" /><category term="tddbc" label="tddbc" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[<blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><span class="Apple-style-span" style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; ">実はバリデータ関係でちょっと問題があったりします</div></span><span class="Apple-style-span" style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; "><a href="http://kanon.deathmarch.jp/trac/TDDBC/browser/Java_B/src/main/java/tddbc/sapporo/validator/TitleDuplicateValidator.java" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; color: rgb(0, 102, 153); text-decoration: none; ">http://kanon.deathmarch.jp/trac/TDDBC/browser/Java_B/src/main/java/tddbc/sapporo/validator/TitleDuplicateValidator.java</a></div></span><span class="Apple-style-span" style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; ">これは会議室の名前の重複をチェックするバリデータですが、appengine固有の問題により正常に動きません。</div></span><span class="Apple-style-span" style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; ">ユニットテストでも問題ないため最悪本番稼動した後に発覚する一番質の悪いバグですね。これに関してはまた別の機会に書きます。</div></span><span class="Apple-style-span" style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; ">（これはappengineで何らかのサービスを運営してしてないと気づかないかなぁと）</div></span></blockquote><span class="Apple-style-span" style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; "><br /></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; "><a href="http://blog.sue445.net/archives/2011/09/26-2223.html">前回のブログ</a>でこんなことを書いてましたが解答編です。タイトルにもあるように、インデックスの更新遅延が原因でバリデータは正常に動きません。（appengineじゃなかったらこういう問題はおきないんですがねｗ）</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; "><br /></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; ">Entity自体はすぐにDatastoreに反映されるのですが、indexの更新には若干ラグがあります。厳密に調べたことはありませんがひどい時で1?2時間くらいindexが更新されなかったことがあります。</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; ">検索系は多少古い検索結果が返ってくることを許容することでいけますが、データの整合性に関してはそうもいきません。</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; "><br /></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; ">例えば今回の場合だと登録するタイミングによっては同一名の会議室が存在する可能性があります。</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; "><br /></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; ">よってindexやqureyを利用しない重複チェックを使用することになります。解決方法としては2つあります</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; "><br /></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; "><b>1. keyに会議室の名前を入れる</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; "><br /></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; ">keyはuniqueなのでこれがベストですね</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; "><br /></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; "><b>2.&nbsp;Datastore.putUniqueValueを利用する</b></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; "><br /></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana, Arial, sans-serif; ">keyを利用するのがベストなんですが、運用中で容易にkeyを変えられないという場合があります。また、key以外の要素でもuniqueな要素を持たせたいというのはあると思います。</div></span><span class="Apple-style-span" style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; ">そういう場合はSlim3の</span><span class="Apple-style-span" style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; ">Datastore.putUniqueValueを利用するのがいいです</span><div><span class="Apple-style-span" style="color: rgb(54, 65, 77); font-family: Verdana, Arial, sans-serif; line-height: 19px; "><a href="http://slim3.googlecode.com/svn/trunk/slim3/javadoc/org/slim3/datastore/Datastore.html#putUniqueValue(java.lang.String, java.lang.String)">http://slim3.googlecode.com/svn/trunk/slim3/javadoc/org/slim3/datastore/Datastore.html#putUniqueValue(java.lang.String, java.lang.String)</a></span></div><div><br /></div><div>これはソースを見ててたまたま見つけたやつなんですが、uniqueな名前を管理するためのEntityを1つ作ってしまうというやり方です。valueをDatastoreのkeyにしているので原理的には1と全く同じです。</div><div><br /></div><div>サンプルコード</div><div><br /></div>
<pre name="code" class="java">import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;

import org.junit.Test;
import org.slim3.datastore.Datastore;
import org.slim3.tester.AppEngineTestCase;

public class PutUniqueValueTest extends AppEngineTestCase{

    private static final String UNIQUE_INDEX_NAME = "ConferenceRoomName";

    @Test
    public void test() throws Exception {
        boolean actual1 = Datastore.putUniqueValue(UNIQUE_INDEX_NAME, "会議室A");
        assertThat(actual1, is(true));

        // 重複登録しようとするとfalseが返却される
        boolean actual2 = Datastore.putUniqueValue(UNIQUE_INDEX_NAME, "会議室A");
        assertThat(actual2, is(false));

        assertThat(tester.count(UNIQUE_INDEX_NAME), is(1));
    }

}
</pre>]]>
        
    </content>
</entry>

<entry>
    <title>TDD Boot Camp 札幌 2.1に参加してきました</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2011/09/26-2223.html" />
    <id>tag:blog.sue445.net,2011://2.176</id>

    <published>2011-09-26T13:23:32Z</published>
    <updated>2011-09-26T13:23:55Z</updated>

    <summary>ブログを書くまでがTDDBCです（挨拶）TDD Boot Camp 札幌 2.1...</summary>
    <author>
        <name>sue445</name>
        
    </author>
    
        <category term="TDD" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="tddbcslim3gaeja" label="tddbc slim3 gaeja" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[ブログを書くまでがTDDBCです（挨拶）<div><br /></div><div><a href="http://atnd.org/events/19892">TDD Boot Camp 札幌 2.1</a>に参加してきました</div><div><br /></div><div>福岡、東京1.5に続いて3回目の参加。</div><div>丁度この時期はまだ暑いだろうから避暑も兼ねていたのですが、東京も以外に涼しかったらしいorz</div><div>（ちなみに札幌はストーブをつけるレベルの寒さでしたが）</div><div><br /></div><div>詳しいまとめサイト</div><div><ul><li><a href="http://d.hatena.ne.jp/shuji_w6e/20110926/1317006697">TDDBC 札幌 2.1 開催しました - やさしいデスマーチ&nbsp;</a></li><li><a href="http://togetter.com/li/192148">TDD BootCamp 札幌 2.1 #TDDBC - Togetter&nbsp;</a></li></ul></div><div><br /></div><div><br /></div><div>思い出しレベルで記載</div><div><br /></div><div><b>9/23(金)</b></div><div>夕方くらいの飛行機で札幌入り。</div><div>札幌駅に降りた辺りで自分だけ半袖だったので奇異の目で見られました（吐血）</div><div><a href="http://twitter.com/#!/shuji_w6e">@shuji_w6eさん</a>が開催してた<a href="http://atnd.org/events/19895">Jenkins勉強会</a>に懇親会から参加。</div><div>飛行機のチケットとるときのこれの開催を知ってればJenkins勉強会にも参加してたのにorz</div><div><br /></div><div><b>9/24(土)</b></div><div>TDDBC本番。JavaのTAとして参加。</div><div>4人チームでしたが、自分は基本的にコーディングをせずアドバイスやリファクタリングに徹してました。</div><div>（事前に予習をしてて完成形が分かっていたため）</div><div><br /></div><div>ちなみにこれが自分たちのチームの成果物です</div><div><a href="http://kanon.deathmarch.jp/trac/TDDBC/browser/Java_B">http://kanon.deathmarch.jp/trac/TDDBC/browser/Java_B</a></div><div><br /></div><div>実はバリデータ関係でちょっと問題があったりします</div><div><a href="http://kanon.deathmarch.jp/trac/TDDBC/browser/Java_B/src/main/java/tddbc/sapporo/validator/TitleDuplicateValidator.java">http://kanon.deathmarch.jp/trac/TDDBC/browser/Java_B/src/main/java/tddbc/sapporo/validator/TitleDuplicateValidator.java</a></div><div>これは会議室の名前の重複をチェックするバリデータですが、appengine固有の問題により正常に動きません。</div><div>ユニットテストでも問題ないため最悪本番稼動した後に発覚する一番質の悪いバグですね。これに関してはまた別の機会に書きます。</div><div>（これはappengineで何らかのサービスを運営してしてないと気づかないかなぁと）</div><div><br /></div><div>ついでにLTもさせてもらいました。</div><div><br /></div><div>僕が作っているjubeat++を元にappengineやslim3などの紹介をしています。</div><div>TDDBCなのにテスト成分がほとんどないことに終わった後に気づいた。（先週社内勉強会で発表した時の資料をベースにしてるしｗ）</div><div><a href="http://jubeatplusplus.appspot.com/">http://jubeatplusplus.appspot.com/</a></div><div><br /></div><div><b>資料</b></div><div style="width:425px" id="__ss_9378944"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/sue445/tddbc-sapporo" title="appengine活用事例資料@TDDBC札幌2.1" target="_blank">appengine活用事例資料@TDDBC札幌2.1</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9378944" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <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/sue445" target="_blank">sue445</a> </div> </div><div><br /></div><div><div>録画もあります</div><div><a href="http://www.ustream.tv/recorded/17463733">http://www.ustream.tv/recorded/17463733</a>　（34:00くらいから）</div></div><div><br /></div><div>余談ですが、僕が初めて参加した勉強会（appengine ja night #8）で@shuji_w6eさんがScenic3とPirkaEngineの紹介をしていました。そして今度は僕が@shuji_w6eさんが主催する勉強会でScenic3とPirkaEngineの活用事例を紹介するというのは個人的に非常に感慨深いものがありました（笑）</div><div><br /></div><div><b>9/25(日)</b></div><div>@shuji_w6eさんに連れられて札幌観光をしていました。味噌ラーメンとスープカレーおいしゅうございました</div>

<div><a href="http://twitpic.com/6q8qve"><img src="http://twitpic.com/show/thumb/6q8qve" /></a>&nbsp;<a href="http://twitpic.com/6qey55"><img src="http://twitpic.com/show/thumb/6qey55" /></a></div>

<div><br /></div><div><b>9/26(月)</b></div><div>有給をとってお昼くらいの飛行機に乗って東京の家に帰宅。</div><div>帰りの飛行機は爆睡でしたｗ</div><div><br /></div><div><br /></div><div>Javaに関してはある程度こなれた感があるため、次にTDDBCに参加する時はJavaScriptで参加したいなぁ・・・</div>]]>
        
    </content>
</entry>

<entry>
    <title>appengineの料金体系変更に伴うjubeat++の運用に関して</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2011/09/17-1857.html" />
    <id>tag:blog.sue445.net,2011://2.175</id>

    <published>2011-09-17T09:57:45Z</published>
    <updated>2011-09-17T10:20:42Z</updated>

    <summary>特に変更はありません(　´∀｀)以降分かる人ネタ旧料金体系新料金体系新料金体系で...</summary>
    <author>
        <name>sue445</name>
        
    </author>
    
        <category term="TDD" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="appengine" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="gaejajubeatplusplus" label="gaeja jubeatplusplus" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[<font class="Apple-style-span" style="font-size: 1.953125em; ">特に変更はありません(　´∀｀)</font><div><br /></div><div>以降分かる人ネタ</div><div><br /></div><div>旧料金体系</div><div><a href="http://blog.sue445.net/archives/2011/09/17/Image1.png"><img alt="旧料金体系" src="http://blog.sue445.net/archives/assets_c/2011/09/Image1-thumb-200x93-10.png" width="200" height="93" class="mt-image-none" /></a></div><div><br /></div><div>新料金体系</div><div><a href="http://blog.sue445.net/archives/2011/09/17/Image3.png"><img alt="新料金体系" src="http://blog.sue445.net/archives/assets_c/2011/09/Image3-thumb-200x157-12.png" width="200" height="157" class="mt-image-none" /></a></div><div><br /></div><div><br /></div><div>新料金体系でも無料枠内に収まっているので余裕で今まで通りです。</div><div>PVはだいたい30~40/日くらいなので今まで通りなら問題ないかと。</div><div><br /></div><div><br /></div><div>ちなみにこの辺に書かれていたチューニングポイントに関しては元から行っていたため、新料金体系のためだけのコード変更は特に行っていません</div><div><ul><li><a href="http://blog.shehas.net/2011/09/02/app-engine">App Engine アプリケーションのリソースを管理する方法 - Kay's daddy</a></li><li><a href="http://blog.shehas.net/2011/09/07/taskqueue-instance">App Engine のリソース管理 - TaskQueue の設定 - Kay's daddy</a></li></ul></div><div><br /></div><div>せいぜいバラバラに動いていた複数のcronを同じ時間に動かすことで1つのインスタンスを効率良く使ったり、TaskQueueの同時実行数を1にしたくらいですかね。</div><div><br /></div><div><br /></div><div>ちなみにjubeat++のアーキテクチャについては<a href="http://atnd.org/events/19892">TDDBC 札幌2.1</a>でも話させて貰う予定です（宣伝）</div><div><br /></div><div><font class="Apple-style-span" style="font-size: 1.953125em; ">「僕と契約して札幌に行こうよ！」</font></div>]]>
        
    </content>
</entry>

<entry>
    <title>Slim3用のテストユーティリティ「S3 Tiger」を作りました</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2011/08/31-2251.html" />
    <id>tag:blog.sue445.net,2011://2.174</id>

    <published>2011-08-31T13:51:11Z</published>
    <updated>2011-08-31T13:51:46Z</updated>

    <summary>需要があるかどうか分かりませんが作ってみました。俺得万歳 before publ...</summary>
    <author>
        <name>sue445</name>
        
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="appengine" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="slim3gaeja" label="slim3 gaeja" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[需要があるかどうか分かりませんが作ってみました。俺得万歳<br /><br />

<b>before</b>
<pre name="code" class="java">public class SomeTest{
	@Test
	public void ignoreOnlyProduction(){
		if(AppEngineUtil.isProduction()){
			return;
		}
		// 本番サーバだけでは動かしたくないテスト
	}

	@Test
	public void ignoreOnlyDevelopment(){
		if(AppEngineUtil.isDevelopment()){
			return;
		}
		// 開発サーバだけでは動かしたくないテスト
	}
}
</pre>

<b>after</b>
<pre name="code" class="java">import net.sue445.s3tiger.Slim3;<br /><br />@RunWith(Slim3.class)<br />public class SomeTest{<br />	@IgnoreProduction<br />	@Test<br />	public void ignoreOnlyProduction(){<br />		// 本番サーバだけでは動かしたくないテスト<br />	}<br /><br />	@IgnoreDevelopment<br />	@Test<br />	public void ignoreOnlyDevelopment(){<br />		// 開発サーバだけでは動かしたくないテスト<br />	}<br />}<br /></pre>Productionサーバだけでは動かしたくないテストやDevelopmentサーバだけでは動かしたくないテストなどをアノテーションで制御することができます。<br /><br />他にも以下のアノテーションが使えます<br /><pre>@IgnoreServer<br />@IgnoreNotServer<br /></pre><br />詳しくはgithubの方を見てください<br /><a href="https://github.com/sue445/s3tiger">https://github.com/sue445/s3tiger</a><br />]]>
        
    </content>
</entry>

<entry>
    <title>TDD Boot Camp 東京1.5に参加してきました #tddbc</title>
    <link rel="alternate" type="text/html" href="http://blog.sue445.net/archives/2011/07/12-2133.html" />
    <id>tag:blog.sue445.net,2011://2.173</id>

    <published>2011-07-12T12:33:20Z</published>
    <updated>2011-07-12T12:54:57Z</updated>

    <summary>http://atnd.org/events/163113月の福岡に続いて2回目...</summary>
    <author>
        <name>sue445</name>
        
    </author>
    
        <category term="TDD" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="tddbc" label="tddbc" scheme="http://www.sixapart.com/ns/types#tag" />
    <content type="html" xml:lang="ja" xml:base="http://blog.sue445.net/">
        <![CDATA[<a href="http://atnd.org/events/16311">http://atnd.org/events/16311</a><br /><br />3月の福岡に続いて2回目の参加。<br />一応経験者ということで今回はJavaのサポートメンバーに立候補しました。<br /><br /><b>周りが優秀すぎて特にサポートすることもなかったですがね！ｗ<br /></b><br />自分のペアプロの相手は<a href="http://twitter.com/daicham">daichamさん</a>でした。前回はこっちが主体的になりすぎで今回は逆にサポートに徹しすぎてあまりバランスがとれてなかったです。ペアプロって難しいですね(´･ω･`)<br /><br /><br />詳しいことはこの辺にまとまっています<br /><ul><li><a href="http://togetter.com/li/159430">Togetter - 「TDD Boot Camp in Tokyo #tddbc」</a><br /></li><li><a href="http://hiroki.jp/2011/07/10/2044/">TDDBC in Tokyo 1.5 主催レポート #tddbc | Act as Professional - プロとしての行為</a></li><li><a href="http://www.facebook.com/media/set/?set=a.1639360203369.68055.1817723189&amp;l=1d36c5f704">TDDBC in Tokyo 1.5</a> （Facebookのアルバム）</li><li><a href="http://www.ustream.tv/channel/tddbctokyo/videos">USTREAM：tddbctokyo：録画ビデオ、1 / - 過去のライブ配信</a><br /></li></ul>ustで最後の質問コーナーで僕が出演しています。（声だけですが）<br /><b>見るなよ！絶対に見るなよ！（上島風）</b><br /><br />今はQUnitを勉強中なので次回参加するとしたらJavaScriptで参加したいところ]]>
        
    </content>
</entry>

</feed>

