<?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"
	>

<channel>
	<title>KLab若手エンジニアの これなぁに？</title>
	<atom:link href="http://lab.klab.org/young/feed/" rel="self" type="application/rss+xml" />
	<link>http://lab.klab.org/young</link>
	<description>- KLab株式会社 若手エンジニアブログ -</description>
	<pubDate>Fri, 19 Mar 2010 04:22:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<item>
		<title>Java Native Access (JNA) で遊んでみる</title>
		<link>http://lab.klab.org/young/2010/03/java-native-access-jna-%e3%81%a7%e9%81%8a%e3%82%93%e3%81%a7%e3%81%bf%e3%82%8b/</link>
		<comments>http://lab.klab.org/young/2010/03/java-native-access-jna-%e3%81%a7%e9%81%8a%e3%82%93%e3%81%a7%e3%81%bf%e3%82%8b/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 04:22:16 +0000</pubDate>
		<dc:creator>sano-n</dc:creator>
		
		<category><![CDATA[Java]]></category>

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

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

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

		<category><![CDATA[ゆっくり]]></category>

		<category><![CDATA[形態素解析]]></category>

		<guid isPermaLink="false">https://labmgr.sdc.klab.org/young/?p=1003</guid>
		<description><![CDATA[umjammer です、
社内の Tech ML に同僚が Java Native Access 面白そうだよと投稿したのを見て、私も Java Native Interface (JNI) はよく触る方なので興味をそそられました。試してみようと今までに JNI で書いた物を JNA に適用することにしました。
題材としては、日本語をしゃべってくれる AquesTalk を JNI でラップしたライブラリを以前作ったことがあったので、それを使用します。
AquesTalk は C のライブラリでヘッダーファイルは以下のように定義されています。
C Header
http://vavi-sound.googlecode.com/svn/trunk/vavi-speech/etc/include/AquesTalkDa.h
それを JNA の方法にのっとって Java のクラスに変換します。
JNA
http://vavi-sound.googlecode.com/svn/trunk/vavi-speech/src/main/java/vavi/speech/aquestalk/jna/AquesTalkDa.java
以前書いた JNI だとこんな感じでした。
JNI
http://code.google.com/p/vavi-sound/source/browse/trunk/vavi-speech/src/main/jni/AquesTalkWrapper.c
AquesTalk のライブラリが簡単なメソッドの構造なので JNA に適用するのは簡単でした。
JNI と違い C のコードを一切書かなくて済むので楽ですね。
できたところで日本語をしゃべらせようとしましたが、AquesTalk は単語辞書を持っていませんので、漢字を読むことができません。ついでなので形態素解析を使用して漢字も読めるようにしてみました。さらについでに Java Speech API 1.0 にも対応させてみました。形態素解析は sen を使用しました。
JSPAI + 形態素解析
http://code.google.com/p/vavi-sound/source/browse/trunk/vavi-speech/src/main/java/vavi/speech/aquestalk/jsapi/AquesTalkSynthesizer.java
今までのコードは]]></description>
			<content:encoded><![CDATA[<p>umjammer です、</p>
<p>社内の Tech ML に同僚が <a href="https://jna.dev.java.net/">Java Native Access</a> 面白そうだよと投稿したのを見て、私も Java Native Interface (JNI) はよく触る方なので興味をそそられました。試してみようと今までに JNI で書いた物を JNA に適用することにしました。</p>
<p>題材としては、日本語をしゃべってくれる <a href="http://www.a-quest.com/products/aquestalk.html">AquesTalk</a> を JNI でラップしたライブラリを以前作ったことがあったので、それを使用します。</p>
<p>AquesTalk は C のライブラリでヘッダーファイルは以下のように定義されています。</p>
<p>C Header<br />
<a href="http://vavi-sound.googlecode.com/svn/trunk/vavi-speech/etc/include/AquesTalkDa.h">http://vavi-sound.googlecode.com/svn/trunk/vavi-speech/etc/include/AquesTalkDa.h</a></p>
<p>それを <a href="https://jna.dev.java.net/#mapping">JNA の方法</a>にのっとって Java のクラスに変換します。</p>
<p>JNA<br />
<a href="http://vavi-sound.googlecode.com/svn/trunk/vavi-speech/src/main/java/vavi/speech/aquestalk/jna/AquesTalkDa.java">http://vavi-sound.googlecode.com/svn/trunk/vavi-speech/src/main/java/vavi/speech/aquestalk/jna/AquesTalkDa.java</a></p>
<p>以前書いた JNI だとこんな感じでした。</p>
<p>JNI<br />
<a href="http://code.google.com/p/vavi-sound/source/browse/trunk/vavi-speech/src/main/jni/AquesTalkWrapper.c">http://code.google.com/p/vavi-sound/source/browse/trunk/vavi-speech/src/main/jni/AquesTalkWrapper.c</a></p>
<p>AquesTalk のライブラリが簡単なメソッドの構造なので JNA に適用するのは簡単でした。<br />
JNI と違い C のコードを一切書かなくて済むので楽ですね。</p>
<p>できたところで日本語をしゃべらせようとしましたが、AquesTalk は単語辞書を持っていませんので、漢字を読むことができません。ついでなので形態素解析を使用して漢字も読めるようにしてみました。さらについでに <a href="http://java.sun.com/products/java-media/speech/">Java Speech API</a> 1.0 にも対応させてみました。形態素解析は <a href="https://sen.dev.java.net/">sen</a> を使用しました。</p>
<p>JSPAI + 形態素解析<br />
<a href="http://code.google.com/p/vavi-sound/source/browse/trunk/vavi-speech/src/main/java/vavi/speech/aquestalk/jsapi/AquesTalkSynthesizer.java">http://code.google.com/p/vavi-sound/source/browse/trunk/vavi-speech/src/main/java/vavi/speech/aquestalk/jsapi/AquesTalkSynthesizer.java</a></p>
<p>今までのコードは<a href="<a href="http://code.google.com/p/vavi-sound/source/browse/trunk/vavi-speech/">こちら</a></p>
<p>JNA 化している最中に気づいたのですが AquesTalk って<a href="http://cncc.hp.infoseek.co.jp/">あれ</a>の中の人だったんですね。</p>
<pre class="prettyprint"><code>
    synthesizer.speakPlainText("ゆっくりしていってね", null);
    synthesizer.speakPlainText("漢字も読めるよ", null);

</code></pre>
<p>AquesTalk は Windows 用を使用したのですが、実は開発は Mac で行っています。<a href="http://www.winehq.org/">wine</a> で AquesTalk 動かせちゃいます。</p>
<p>最後に、</p>
<p>調べていくうちに <a href="http://code.google.com/p/jnaerator/">JNAerator</a> なるものを見つけました。C のヘッダーファイルを食わせて JNA に変換してくれるものみたいです。複雑な C のコードもこれだと楽ができるかもしれません。</p>
<p><a href="http://www.a-quest.com/products/aquestalk2.html">AquesTalk2</a> なるものもリリースされています。Mac や iPhone のライブラリまであります。音声も自分で作れるみたいです。いろいろ楽しいことになりそうです。</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.klab.org/young/2010/03/java-native-access-jna-%e3%81%a7%e9%81%8a%e3%82%93%e3%81%a7%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ワークスアプリケーションズ様、KLab合同勉強会</title>
		<link>http://lab.klab.org/young/2010/03/worksap_klab_workshop/</link>
		<comments>http://lab.klab.org/young/2010/03/worksap_klab_workshop/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 05:58:25 +0000</pubDate>
		<dc:creator>nakamura-t</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[交流会・勉強会]]></category>

		<guid isPermaLink="false">https://labmgr.sdc.klab.org/young/?p=967</guid>
		<description><![CDATA[どうも初めまして、
3月に入社したてピチピチのnakamura-tです。
みなさま今後とも宜しくお願いします。
さて今回は、日本の大手企業向けERPパッケージ「COMPANY」の開発元である
ワークスアプリケーションズ様と合同勉強会をさせていただきましたので、その様子のレポートさせて頂きます。
まずは弊社の鈴木による発表です。
KLabセッション(その1) ：Tokyo Tyrant + Lua Extensionで作るクエリキャッシュサーバ

Tokyo Tyrant + Lua Extensionで作るクエリキャッシュサーバ
View more presentations from KLab株式会社.

Tokyo Tyrant（Tokyo Cabinet）の説明と、実験的にLuaで作ったクエリキャッシュサーバのパフォーマンス結果とその考察でした。
パフォーマンスが上がらない原因の一つにLuaの文字列処理系が遅いのかもとのことでした。
僕は以前、iPhoneアプリ開発をしてたのですが一番のネックはファイルアクセスだったので、ファイルシステムにアクセスしてもこの速さでinsert処理が出来るって事は個人的に驚きました。
Tokyo Tyrantは知らなかったのですがBarkleyDBとかSQLiteに比べ比較的パフォーマンスが良いらしく、mixiさんでログイン履歴の保存に使われてるそうです、時には10000QPSを1台のサーバでこなしてるとか。
あと日本からの技術発信というのも嬉しいものです、僕もいつかはと思わされました。
続きまして弊社、竹井による発表です。
KLabセッション(その2)：Android時代のミニ四駆考

Android時代のミニ四駆
View more presentations from Hideyuki Takei.

うおおおおーーーーっい！！
これですよ！これ！！
子供の頃に学研の未来予想図ってのがありましたよね、空飛ぶ車に動く道路、ロボットの友達などなど。
毎日RSSで最新技術の記事は読めど実際に日常で見かける事はないですよね。
どこいったんすか？未来。
なんて事を日々思ってたんですが、。
素直に感動です。
ないなら作ろうよって事なんですよね。
考えさせられる良い刺激でした、ありがとうございます。
最後の電子書籍が読めるミニ四駆とはミニ四駆を転がすことによってPC画面上のスクロールバーがスクロールするというナイスなデモでした。
最後にワークスアプリケーションズ 川中様による発表です。
ワークスアプリケーションズ様セッション：クラウドと並列プログラミング

発表資料はこちら！
昨今のトレンドになってるクラウドコンピューティングについて。MVCにおいてViewのスケールアップは比較的に簡単、Modelも散々語られてきた。
そろそろControllerもスケールの対象にしよう。
しかし、複数のコンピュータでの並列計算となるとプログラミング的にもデバック作業などにおいても色々面倒な処理が必要になる。
ところが最近のプログラミング言語(Google GO, Scala)などではシングルスレッド感覚でマルチスレッドプログラムを書く仕組みが言語仕様として組み込まれていますよという話でした。
デスクトップの世界では随分と前から、CPUは単純にクロックを上げるより複数のコアを搭載するようにシフトしていると思います、でもデスクトップアプリのマルチコア対応があまり積極的ではない様に感じていたのですが、こういう原因も背景にあったのかもしれません。今後はいろんな分野で飛躍的にパフォーマンスのあがる可能性を感じました。
蛇足ですが、僕はobjective-cな人でした。
でMacのcocoaフレームワークにはマルチスレッド処理の為のNSOperationというものがあります。
それは、NSOperationサブクラスを作ってmainメソッドを定義して行いたい処理を記述、そのインスタンスをNSOperationQueueインスタンスに追加するだけで後は勝手にバックグラウンド処理してくれ、スレッドセーフとかロックとかややこしいのは比較的考えなくても良いというものでした。
しかも、Mac OS X. 10.6 Snow LeopardからはNSOperationQueueが内部的にはGrand Central Dispatchで実装されてるようです。
なるほどApple、エレガントです。
勉強会終了後は懇親会に移り、
技術の話や趣味な話を語り合う楽しい夜になりました。
お越しいただいたワークスアプリケーションズの皆様、本当にありがとうございました。
]]></description>
			<content:encoded><![CDATA[<p>どうも初めまして、<br />
3月に入社したてピチピチのnakamura-tです。<br />
みなさま今後とも宜しくお願いします。</p>
<p>さて今回は、日本の大手企業向けERPパッケージ「COMPANY」の開発元である<br />
<a href="http://www.worksap.co.jp/">ワークスアプリケーションズ</a>様と合同勉強会をさせていただきましたので、その様子のレポートさせて頂きます。</p>
<p>まずは弊社の鈴木による発表です。<br />
<strong>KLabセッション(その1) ：Tokyo Tyrant + Lua Extensionで作るクエリキャッシュサーバ</strong></p>
<p><img src="http://lab.klab.org/young/wp-content/uploads/images/post/20100312_1.jpg" alt="発表している写真" /></p>
<div id="__ss_3434406" style="width: 425px;"><strong><a title="Tokyo Tyrant + Lua Extensionで作るクエリキャッシュサーバ" href="http://www.slideshare.net/klab/tt-20100312">Tokyo Tyrant + Lua Extensionで作るクエリキャッシュサーバ</a></strong><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tt20100312-100315061204-phpapp01&amp;stripped_title=tt-20100312" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=tt20100312-100315061204-phpapp01&amp;stripped_title=tt-20100312" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/klab">KLab株式会社</a>.</div>
</div>
<p>Tokyo Tyrant（Tokyo Cabinet）の説明と、実験的にLuaで作ったクエリキャッシュサーバのパフォーマンス結果とその考察でした。<br />
パフォーマンスが上がらない原因の一つにLuaの文字列処理系が遅いのかもとのことでした。<br />
僕は以前、iPhoneアプリ開発をしてたのですが一番のネックはファイルアクセスだったので、ファイルシステムにアクセスしてもこの速さでinsert処理が出来るって事は個人的に驚きました。</p>
<p>Tokyo Tyrantは知らなかったのですがBarkleyDBとかSQLiteに比べ比較的パフォーマンスが良いらしく、mixiさんでログイン履歴の保存に使われてるそうです、時には10000QPSを1台のサーバでこなしてるとか。<br />
あと日本からの技術発信というのも嬉しいものです、僕もいつかはと思わされました。</p>
<p>続きまして弊社、竹井による発表です。<br />
<strong>KLabセッション(その2)：Android時代のミニ四駆考</strong></p>
<p><img src="http://lab.klab.org/young/wp-content/uploads/images/post/20100312_2.jpg" alt="発表している写真" /></p>
<div id="__ss_3407333" style="width: 425px;"><strong><a title="Android時代のミニ四駆" href="http://www.slideshare.net/takehide22/android-3407333">Android時代のミニ四駆</a></strong><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mini4wdandroid-100312042607-phpapp02&amp;stripped_title=android-3407333" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mini4wdandroid-100312042607-phpapp02&amp;stripped_title=android-3407333" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/takehide22">Hideyuki Takei</a>.</div>
</div>
<p>うおおおおーーーーっい！！<br />
これですよ！これ！！<br />
子供の頃に学研の未来予想図ってのがありましたよね、空飛ぶ車に動く道路、ロボットの友達などなど。<br />
毎日RSSで最新技術の記事は読めど実際に日常で見かける事はないですよね。<br />
どこいったんすか？未来。<br />
なんて事を日々思ってたんですが、。</p>
<p>素直に感動です。<br />
ないなら作ろうよって事なんですよね。<br />
考えさせられる良い刺激でした、ありがとうございます。</p>
<p>最後の電子書籍が読めるミニ四駆とはミニ四駆を転がすことによってPC画面上のスクロールバーがスクロールするというナイスなデモでした。</p>
<p>最後にワークスアプリケーションズ 川中様による発表です。<br />
<strong>ワークスアプリケーションズ様セッション：クラウドと並列プログラミング</strong></p>
<p><img src="http://lab.klab.org/young/wp-content/uploads/images/post/20100312_0.jpg" alt="発表している写真" /></p>
<p><strong>発表資料は</strong><a href="http://mayah.jp/resources/2010/CloudLang.pdf"><strong>こちら！</strong></a></p>
<p>昨今のトレンドになってるクラウドコンピューティングについて。MVCにおいてViewのスケールアップは比較的に簡単、Modelも散々語られてきた。<br />
そろそろControllerもスケールの対象にしよう。<br />
しかし、複数のコンピュータでの並列計算となるとプログラミング的にもデバック作業などにおいても色々面倒な処理が必要になる。<br />
ところが最近のプログラミング言語(Google GO, Scala)などではシングルスレッド感覚でマルチスレッドプログラムを書く仕組みが言語仕様として組み込まれていますよという話でした。</p>
<p>デスクトップの世界では随分と前から、CPUは単純にクロックを上げるより複数のコアを搭載するようにシフトしていると思います、でもデスクトップアプリのマルチコア対応があまり積極的ではない様に感じていたのですが、こういう原因も背景にあったのかもしれません。今後はいろんな分野で飛躍的にパフォーマンスのあがる可能性を感じました。</p>
<p>蛇足ですが、僕はobjective-cな人でした。<br />
でMacのcocoaフレームワークにはマルチスレッド処理の為のNSOperationというものがあります。<br />
それは、NSOperationサブクラスを作ってmainメソッドを定義して行いたい処理を記述、そのインスタンスをNSOperationQueueインスタンスに追加するだけで後は勝手にバックグラウンド処理してくれ、スレッドセーフとかロックとかややこしいのは比較的考えなくても良いというものでした。<br />
しかも、Mac OS X. 10.6 Snow LeopardからはNSOperationQueueが内部的にはGrand Central Dispatchで実装されてるようです。<br />
なるほどApple、エレガントです。</p>
<p>勉強会終了後は懇親会に移り、</p>
<p>技術の話や趣味な話を語り合う楽しい夜になりました。</p>
<p>お越しいただいたワークスアプリケーションズの皆様、本当にありがとうございました。</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.klab.org/young/2010/03/worksap_klab_workshop/feed/</wfw:commentRss>
		</item>
		<item>
		<title>制約があるユニットテスト方法その2</title>
		<link>http://lab.klab.org/young/2010/03/%e5%88%b6%e7%b4%84%e3%81%8c%e3%81%82%e3%82%8b%e3%83%a6%e3%83%8b%e3%83%83%e3%83%88%e3%83%86%e3%82%b9%e3%83%88%e6%96%b9%e6%b3%95%e3%81%9d%e3%81%ae2/</link>
		<comments>http://lab.klab.org/young/2010/03/%e5%88%b6%e7%b4%84%e3%81%8c%e3%81%82%e3%82%8b%e3%83%a6%e3%83%8b%e3%83%83%e3%83%88%e3%83%86%e3%82%b9%e3%83%88%e6%96%b9%e6%b3%95%e3%81%9d%e3%81%ae2/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 11:03:18 +0000</pubDate>
		<dc:creator>sano-n</dc:creator>
		
		<category><![CDATA[Java]]></category>

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

		<guid isPermaLink="false">https://labmgr.sdc.klab.org/young/?p=560</guid>
		<description><![CDATA[umjammer です、
携帯のサイト向けコードでは、時刻を扱うのにデバッグしやすいように仮想カレンダーが仕込まれておりメソッドの引数にも時刻が設定できたりします。この場合は問題ありません。
一方管理ツールでは現在の時刻を元に処理を行う場面が多く、コードの引数には時刻が存在せず今の時刻を前提にした処理が多く存在します。
今の時刻を前提にされると、テストに用いるデータも現在の時刻を前提にしないといけません。テストする時刻に合わせて毎回データを作るなんてやってられません。
# テスト駆動開発支持者からは時刻の引数をテストのために作っとけよと言われそうですが、
# 実際著名なライブラリでテストのために余計な引数を設けてるライブラリなんか
# 見たことありませんよね？この辺は別の議論になるので割愛します。
で、どうするか？
今回はスクラッチされたコードではなく、時刻というオリジナルクラスの値を変更するので Java Instrumentation という、クラスのローディング時にバイトコードを書き換えられるという機能を用いて、オリジナルクラスである java.util.Calendar クラスが返す値を常に一定にするように書き換えてやりました。
バイトコードの書き換えは javassist を今回は使ってます。
こんな感じです、

public class TestInstrumentation {

    /** */
    private static ClassPool classPool;

    /**
     * @param agentArgs year,month,day
     */
    public static void premain(String agentArgs,
    [...]]]></description>
			<content:encoded><![CDATA[<p>umjammer です、</p>
<p>携帯のサイト向けコードでは、時刻を扱うのにデバッグしやすいように仮想カレンダーが仕込まれておりメソッドの引数にも時刻が設定できたりします。この場合は問題ありません。</p>
<p>一方管理ツールでは現在の時刻を元に処理を行う場面が多く、コードの引数には時刻が存在せず今の時刻を前提にした処理が多く存在します。</p>
<p>今の時刻を前提にされると、テストに用いるデータも現在の時刻を前提にしないといけません。テストする時刻に合わせて毎回データを作るなんてやってられません。</p>
<p># テスト駆動開発支持者からは時刻の引数をテストのために作っとけよと言われそうですが、<br />
# 実際著名なライブラリでテストのために余計な引数を設けてるライブラリなんか<br />
# 見たことありませんよね？この辺は別の議論になるので割愛します。</p>
<p>で、どうするか？</p>
<p>今回はスクラッチされたコードではなく、時刻というオリジナルクラスの値を変更するので Java Instrumentation という、クラスのローディング時にバイトコードを書き換えられるという機能を用いて、オリジナルクラスである java.util.Calendar クラスが返す値を常に一定にするように書き換えてやりました。</p>
<p>バイトコードの書き換えは <a href="http://www.jboss.org/javassist">javassist</a> を今回は使ってます。</p>
<p>こんな感じです、</p>
<pre class="prettyprint"><code>
public class TestInstrumentation {

    /** */
    private static ClassPool classPool;

    /**
     * @param agentArgs year,month,day
     */
    public static void premain(String agentArgs,
                               Instrumentation instrumentation) {
        classPool = ClassPool.getDefault();
        String[] args = agentArgs.split(",");
        final int year = Integer.parseInt(args[0]);
        final int month = Integer.parseInt(args[1]) - 1;
        final int day = Integer.parseInt(args[2]);

        instrumentation.addTransformer(new ClassFileTransformer() {
            /** */
            public byte[] transform(ClassLoader loader,
                                    String className,
                                    Class classBeingRedefined,
                                    ProtectionDomain protectionDomain,
                                    byte[] classfileBuffer)
                throws IllegalClassFormatException {

                if (className.equals("java/util/Calendar")) {
                    try {
                        ByteArrayInputStream stream =
                            new ByteArrayInputStream(classfileBuffer);
                        CtClass ctClass = classPool.makeClass(stream);

                        CtMethod ctMethod = ctClass.getDeclaredMethod(
                            "getInstance",
                            new CtClass[] { classPool.get("java.util.Locale") });
                        ctMethod.insertAfter(
                            "$_.set(" + year + ", " + month + ", " + day +
                            ", 12, 0, 0);" +
                            "System.err.println(\"javassist: fix calendar: " +
                            year + "-" + (month + 1) + "-" + day + " " +
                            "12:00:00" + "\");" +
                            "return $_;");

                        return ctClass.toBytecode();
                    } catch (Exception e) {
                        throw (IllegalClassFormatException)
                            new IllegalClassFormatException().initCause(e);
                    }
                } else {
                    return null;
                }
            }
        });
    }
}
</code></pre>
<p>テストするときは、これを使って時刻を固定するとテストデータもその時刻の物だけで済むようになります。</p>
<p>JVM 起動時には上記プログラムを jar にして VM オプションとして</p>
<pre class="prettyprint"><code>
  -javaagent:foo.jar=2008,5,14

</code></pre>
<p>などと、指定してやります。</p>
<p><a href="http://lab.klab.org/young/2010/03/%e5%88%b6%e7%b4%84%e3%81%8c%e3%81%82%e3%82%8b%e3%83%a6%e3%83%8b%e3%83%83%e3%83%88%e3%83%86%e3%82%b9%e3%83%88%e6%96%b9%e6%b3%95%e3%81%9d%e3%81%ae1/">その1</a>の Aspect 使うのとどう違うの？と言われると、こちらの方が万能なので Aspect の方はこの方法で代替できます。ただこちらは VM の引数を増やしたり、jar を作っておかないといけないとか面倒なのと、いろいろな方法を紹介したかったので分けています。</p>
<p>また、この方法もバイトコードが書き換え可能な言語なら適用できますので、お試しください。</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.klab.org/young/2010/03/%e5%88%b6%e7%b4%84%e3%81%8c%e3%81%82%e3%82%8b%e3%83%a6%e3%83%8b%e3%83%83%e3%83%88%e3%83%86%e3%82%b9%e3%83%88%e6%96%b9%e6%b3%95%e3%81%9d%e3%81%ae2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>制約があるユニットテスト方法その1</title>
		<link>http://lab.klab.org/young/2010/03/%e5%88%b6%e7%b4%84%e3%81%8c%e3%81%82%e3%82%8b%e3%83%a6%e3%83%8b%e3%83%83%e3%83%88%e3%83%86%e3%82%b9%e3%83%88%e6%96%b9%e6%b3%95%e3%81%9d%e3%81%ae1/</link>
		<comments>http://lab.klab.org/young/2010/03/%e5%88%b6%e7%b4%84%e3%81%8c%e3%81%82%e3%82%8b%e3%83%a6%e3%83%8b%e3%83%83%e3%83%88%e3%83%86%e3%82%b9%e3%83%88%e6%96%b9%e6%b3%95%e3%81%9d%e3%81%ae1/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 09:52:45 +0000</pubDate>
		<dc:creator>sano-n</dc:creator>
		
		<category><![CDATA[Java]]></category>

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

		<guid isPermaLink="false">https://labmgr.sdc.klab.org/young/?p=556</guid>
		<description><![CDATA[umjammer です、
ユニットテストを行うに際して、本番で使うデータが存在するディレクトリとは違うテスト用のデータが入っているディレクトリを使用したい、といった場面でどうするか？という方法です。
本来なら、そんなのちゃんと設計して設定ファイルで変更できるようにしておけよ、と言われる場面ですが多人数が関わる大規模プロジェクトになるとそうは言ってられない事態に出くわすことが多々あります。他のメンバーが作ったクラスのユニットテストを後から作る場面も出てくる訳です。
で、どうするか？
今回はアスペクト指向プログラミングの実装である AspectJ を用いて実行時にメソッドが返す値を
書き換えてやりました。
実際のコードはこんな感じになります。
SpringAOP を使用した例 spring-beans.xml

  &#60;aop:config&#62;
    &#60;aop:aspect id=&#34;testFooAspect&#34;
                ref=&#34;testFooAroundAdvice&#34;&#62;
      &#60;aop:around pointcut-ref=&#34;aroundBar&#34;
                  method=&#34;aroundBar&#34; /&#62;
 [...]]]></description>
			<content:encoded><![CDATA[<p>umjammer です、</p>
<p>ユニットテストを行うに際して、本番で使うデータが存在するディレクトリとは違うテスト用のデータが入っているディレクトリを使用したい、といった場面でどうするか？という方法です。</p>
<p>本来なら、そんなのちゃんと設計して設定ファイルで変更できるようにしておけよ、と言われる場面ですが多人数が関わる大規模プロジェクトになるとそうは言ってられない事態に出くわすことが多々あります。他のメンバーが作ったクラスのユニットテストを後から作る場面も出てくる訳です。</p>
<p>で、どうするか？</p>
<p>今回はアスペクト指向プログラミングの実装である <a href="http://www.eclipse.org/aspectj/">AspectJ</a> を用いて実行時にメソッドが返す値を<br />
書き換えてやりました。</p>
<p>実際のコードはこんな感じになります。</p>
<p>SpringAOP を使用した例 spring-beans.xml</p>
<pre  class="prettyprint"><code>
  &lt;aop:config&gt;
    &lt;aop:aspect id=&quot;testFooAspect&quot;
                ref=&quot;testFooAroundAdvice&quot;&gt;
      &lt;aop:around pointcut-ref=&quot;aroundBar&quot;
                  method=&quot;aroundBar&quot; /&gt;
      &lt;aop:pointcut id=&quot;aroundBar&quot;
                    expression=&quot;execution(* org.klab.foo.Foo.bar(..))&quot; /&gt;
    &lt;/aop:aspect&gt;
  &lt;/aop:config&gt;

  &lt;!-- AroundAdvice クラスに書き換えたい値を DI --&gt;
  &lt;bean id=&quot;testFooAroundAdvice&quot;
        class=&quot;org.klab.foo.AroundAdvice&quot;&gt;
    &lt;property name=&quot;wantToReplace&quot;
              value=&quot;replace_value&quot; /&gt;
  &lt;/bean&gt;
</code></pre>
<p>AOP 本体のクラス</p>
<pre  class="prettyprint"><code>
package org.klab.foo;

public class AroundAdvice {

    private String wantToReplace; // DI される書き換えたい値

    public void setWantToReplace(String wantToReplace) { // DI 用
        this.wantToReplace = wantToReplace;
    }

    public Object aroundBar(ProceedingJoinPoint pjp) throws Throwable {

        Foo foo = Foo.class.cast(pjp.getArgs()[0]);

        // wantToReplace を foo 内で書き換える        

        Object result = pjp.proceed(new Object[] { foo });

        return result;
    }
}
</code></pre>
<p>Java に限らず実行時にコードを書き換えられる言語だと可能な技なので、試してみはいかがでしょうか？</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.klab.org/young/2010/03/%e5%88%b6%e7%b4%84%e3%81%8c%e3%81%82%e3%82%8b%e3%83%a6%e3%83%8b%e3%83%83%e3%83%88%e3%83%86%e3%82%b9%e3%83%88%e6%96%b9%e6%b3%95%e3%81%9d%e3%81%ae1/feed/</wfw:commentRss>
		</item>
		<item>
		<title>IBM基礎研究所様、KLab合同勉強会レポート</title>
		<link>http://lab.klab.org/young/2010/03/klab_workshop_20100305/</link>
		<comments>http://lab.klab.org/young/2010/03/klab_workshop_20100305/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 10:02:46 +0000</pubDate>
		<dc:creator>suzuki-s</dc:creator>
		
		<category><![CDATA[交流会・勉強会]]></category>

		<guid isPermaLink="false">https://labmgr.sdc.klab.org/young/?p=937</guid>
		<description><![CDATA[IBM様の社名を伏せなければいけないと勘違いしておりましたので一部内容を修正させて頂きました。 Fri Mar 12 17:25:37 JST 2010
稲田の発表のスライドをアップロードしました。 Wed Mar 17 14:27:00 JST 2010
はじめまして。suzuki-sと申します。
今年の1月にKLabに中途入社いたしまして、初めての投稿です。
これをきっかけにどんどん投稿していきたいと思いますので、今後ともよろしくお願いいたします。
さて、近頃KLabは勉強会ラッシュでして、先日のサイバーエージェント様に引き続き、
3月5日(金)、IBM基礎研究所の方々と勉強会をさせていただきました。
その様子をレポートさせていただきます。

まず、弊社からは稲田、小浦が発表をさせていただきました。
稲田：Bazaarについて

稲田からは自らがコミッタも務めているBazaar(bzr)に関する発表をさせていただきました。
分散バージョン管理についての説明から、bzrの優れている点、git, mercurialの優れている点の説明がありました。
Bazaar
View more presentations from KLab株式会社.

残念ながら、基礎研究所の方々はgit, mercurialユーザの方のみでしたが、この機会にbzrも試していただけると稲田も喜ぶと思います。
KLabにはsvnやgitも混在していますが、稲田の働きかけによりだんだんbzrに移行しつつあるようです。
今後も精力的に活動してまいりますので、皆さま是非ともbzrをよろしくお願いいたします。
ちなみにWindows向けGUIのTortoize BZRの開発者募集中だそうです。
小浦：Apache 2.3探訪 mod_auth_form + mod_session

小浦からは、Apacheの新バージョンである2.3についての発表をさせていただきました。
新機能のひとつに、ユーザ認証をApache内部で実現するmod_auth_formがあります。
これについて、Apacheモジュールの動作原理から始まって、認証機能の実現方法、mod_sessionとの連携について発表しました。
Apache2.3 探訪
View more presentations from KLab株式会社.

さらに詳細な内容については、弊社ブログ「DSAS開発者の部屋」でも紹介しております。
興味のある方は是非以下もご覧ください。
Apache 2.3/2.4系に実装中の新機能をちょっと先取りして見てみよう
Apache 2.3/2.4系に実装中の新機能をちょっと先取りして見てみよう その2
Apache 2.3/2.4系の新機能を見てみよう その3 ～MPMの動的ロード～
Apache 2.3/2.4系の新機能を見てみよう 番外編 ～イベントフックの実装～
最後に
懇親会では、ちょうど仕事で確率分布の話題があったので、発表者の方に質問をさせていただきました。
これもすごく参考になりました。ありがとうございました。
研究所の方々、といえば少しかたいイメージを持たれるかも知れませんが、皆さん気さくな方々で、話も弾みました。
技術的なお話だけでなく、IBM基礎研究所様ならではの仕事に対する考え方も伺うことができましたし、とても楽しかったです。
レポートは以上になります。
KLabでは今後もこのような勉強会を実施していきたいと考えております。
興味を持たれた方は、是非お気軽にお問い合わせください。
＞IBM基礎研究所のみなさま
遠方よりお越しいただき、ありがとうございました。
普段なかなか聞くことのできない内容で大変新鮮でしたし、参考になりました。
弊社発表もみなさまにとって何か参考になるものでしたら幸いです。
よろしければ今度はこちらからお邪魔させていただきたいと思います！
またの機会がありましたら、是非よろしくお願いいたします。
]]></description>
			<content:encoded><![CDATA[<p><strong style="color:blue">IBM様の社名を伏せなければいけないと勘違いしておりましたので一部内容を修正させて頂きました。 Fri Mar 12 17:25:37 JST 2010</strong><br />
<strong style="color:blue">稲田の発表のスライドをアップロードしました。 Wed Mar 17 14:27:00 JST 2010</strong></p>
<p>はじめまして。suzuki-sと申します。<br />
今年の1月にKLabに中途入社いたしまして、初めての投稿です。<br />
これをきっかけにどんどん投稿していきたいと思いますので、今後ともよろしくお願いいたします。</p>
<p>さて、近頃KLabは勉強会ラッシュでして、<a href="http://lab.klab.org/young/2010/03/ca_klab_workshop/">先日のサイバーエージェント様</a>に引き続き、<br />
3月5日(金)、IBM基礎研究所の方々と勉強会をさせていただきました。<br />
その様子をレポートさせていただきます。</p>
<p><span id="more-937"></span><br />
まず、弊社からは稲田、小浦が発表をさせていただきました。</p>
<h2>稲田：Bazaarについて</h2>
<p><img src="/young/wp-content/uploads/images/post/klab_workshop_20100305/001.jpg" width="415" height="277" alt="稲田の発表の様子"/><br />
稲田からは自らがコミッタも務めている<a href="http://bazaar.canonical.com/en/">Bazaar(bzr)</a>に関する発表をさせていただきました。<br />
分散バージョン管理についての説明から、bzrの優れている点、git, mercurialの優れている点の説明がありました。</p>
<div style="width:425px" id="__ss_3452668"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/klab/bazaar-3452668" title="Bazaar">Bazaar</a></strong><object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bazaar-100317002322-phpapp02&#038;stripped_title=bazaar-3452668" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bazaar-100317002322-phpapp02&#038;stripped_title=bazaar-3452668" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/klab">KLab株式会社</a>.</div>
</div>
<p>残念ながら、基礎研究所の方々はgit, mercurialユーザの方のみでしたが、この機会にbzrも試していただけると稲田も喜ぶと思います。<br />
KLabにはsvnやgitも混在していますが、稲田の働きかけによりだんだんbzrに移行しつつあるようです。<br />
今後も精力的に活動してまいりますので、皆さま是非ともbzrをよろしくお願いいたします。<br />
ちなみにWindows向けGUIのTortoize BZRの開発者募集中だそうです。</p>
<h2>小浦：Apache 2.3探訪 mod_auth_form + mod_session</h2>
<p><img src="/young/wp-content/uploads/images/post/klab_workshop_20100305/002.jpg" width="415" height="277" alt="小浦の発表の様子"/><br />
小浦からは、Apacheの新バージョンである2.3についての発表をさせていただきました。<br />
新機能のひとつに、ユーザ認証をApache内部で実現するmod_auth_formがあります。<br />
これについて、Apacheモジュールの動作原理から始まって、認証機能の実現方法、mod_sessionとの連携について発表しました。</p>
<div style="width:425px" id="__ss_3384359"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/klab/20100305-100308030838-phpapp02" title="Apache2.3 探訪">Apache2.3 探訪</a></strong><object width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20100305-100308030838-phpapp02-100310043941-phpapp01&#038;stripped_title=20100305-100308030838-phpapp02" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=20100305-100308030838-phpapp02-100310043941-phpapp01&#038;stripped_title=20100305-100308030838-phpapp02" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/klab">KLab株式会社</a>.</div>
</div>
<p>さらに詳細な内容については、弊社ブログ<a href="http://dsas.blog.klab.org/">「DSAS開発者の部屋」</a>でも紹介しております。<br />
興味のある方は是非以下もご覧ください。<br />
<a href="http://dsas.blog.klab.org/archives/51651491.html">Apache 2.3/2.4系に実装中の新機能をちょっと先取りして見てみよう</a><br />
<a href="http://dsas.blog.klab.org/archives/51659859.html">Apache 2.3/2.4系に実装中の新機能をちょっと先取りして見てみよう その2</a><br />
<a href="http://dsas.blog.klab.org/archives/51674138.html">Apache 2.3/2.4系の新機能を見てみよう その3 ～MPMの動的ロード～</a><br />
<a href="http://dsas.blog.klab.org/archives/51674293.html">Apache 2.3/2.4系の新機能を見てみよう 番外編 ～イベントフックの実装～</a></p>
<h2>最後に</h2>
<p>懇親会では、ちょうど仕事で確率分布の話題があったので、発表者の方に質問をさせていただきました。<br />
これもすごく参考になりました。ありがとうございました。<br />
研究所の方々、といえば少しかたいイメージを持たれるかも知れませんが、皆さん気さくな方々で、話も弾みました。<br />
技術的なお話だけでなく、IBM基礎研究所様ならではの仕事に対する考え方も伺うことができましたし、とても楽しかったです。</p>
<p>レポートは以上になります。</p>
<p>KLabでは今後もこのような勉強会を実施していきたいと考えております。<br />
興味を持たれた方は、是非お気軽にお問い合わせください。</p>
<p>＞IBM基礎研究所のみなさま<br />
遠方よりお越しいただき、ありがとうございました。<br />
普段なかなか聞くことのできない内容で大変新鮮でしたし、参考になりました。<br />
弊社発表もみなさまにとって何か参考になるものでしたら幸いです。<br />
よろしければ今度はこちらからお邪魔させていただきたいと思います！<br />
またの機会がありましたら、是非よろしくお願いいたします。</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.klab.org/young/2010/03/klab_workshop_20100305/feed/</wfw:commentRss>
		</item>
		<item>
		<title>サイバーエージェント様・KLab合同勉強会レポート</title>
		<link>http://lab.klab.org/young/2010/03/ca_klab_workshop/</link>
		<comments>http://lab.klab.org/young/2010/03/ca_klab_workshop/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 11:49:05 +0000</pubDate>
		<dc:creator>honda-h</dc:creator>
		
		<category><![CDATA[交流会・勉強会]]></category>

		<guid isPermaLink="false">https://labmgr.sdc.klab.org/young/?p=920</guid>
		<description><![CDATA[どうも、honda-hです！
先日、「アメーバブログ」や「Amebaなう」などの面白いサービスを次々にリリースされているサイバーエージェント様と合同で勉強会をさせていただきました。
その様子をレポートさせて頂きます。
非常に有り難いことに予想を上回る参加人数となり、３０人分用意していた席がほぼ埋まってしまいました。


KLabセッション その１ 「ベイジアンフィルターによるユーザー投稿フィルタリングエンジン Ishigroid」
まずは弊社の高田による発表。

ユーザ投稿系のサービスの運営で問題となるのが、誹謗中傷、出会い目的、卑猥な書き込みといった投稿に対する対策です。
多くの場合、サイト運営者が人力で書き込みのチェックを行いますが、ほぼ24時間張り付かないといけなかったりしてすごく大変・・・。
Isigroidはベイジアンフィルタを用いて書き込みを自動的にチェックすることで、検閲のコストを下げようというものです。
テストの結果では全体の成功率（実際の検閲結果と一致した割合）が約86%で、ヤバイものにNG判定をした割合（positive(ng)）が90%と、そこそこ使えそうな感じになっています。
発表資料はこちら↓
ベイジアンフィルターによるユーザー投稿フィルタリングエンジンIshigroid
View more presentations from KLab株式会社.

KLabセッション その2 「LL言語でもHudsonを使おう!」
続いて、弊社佐々木による発表。

継続的インテグレーションツール(CI)のHudson、それ自体はJavaで実装されていますが、「LL言語でもHudsonでCIできるよ！」というお話。
PHPのプロジェクトを例に、ソースがコミットされると自動的にプロファイリングしてくれるという、なんともクールな環境の構築例の紹介です。
そしてwebgrindというツールを使えばプロファイリング結果を可視化してくれるそうです。非常にカッコいい！
そしてKLab社内ではおさかな君ネタがすっかり定着しました（笑）

発表資料はこちら↓
LL言語でもHudsonを使おう!
View more presentations from KLab株式会社.

サイバーエージェント様セッション その1 「CGMサイトにおける絵文字の使用傾向」
続いてサイバーエージェントの大平さんによる発表。

WebDB Furumでバイドゥさんが発表された携帯向けページでの絵文字の使用傾向と、大平さんが調査された「Amebaなう」での絵文字の使用傾向の比較結果を紹介していただきました。
携帯向けページはサイトナビゲーションの目的で絵文字が使われていることが多い（ナビゲーションキーを示す番号のマークなど）のに対して、Amebaなうでは感情表現などの目的で使われることが多いという違いが興味深いです。サービスを考える上で非常にとても参考になりそうです。
同じユーザ投稿でも、ブログ、メールなど他のチャネルではどんな風に使われているか、個人的には気になるところです。
サイバーエージェント様セッション その2 「BaysieanSetsを用いた連想検索とアイテム推薦」
次は服部さんによる発表。

「レコメンドには膨大な計算量が必要」というのが私の認識でしたが、BaysianSetsを使うことで非常に高速に（リアルタイムに！）結果を得ることができるそうです。
そして、Wikipediaのデータを元にした連想検索のデモは非常にカッコよかったです！Google Sugest的なことができますね！
サイバーエージェント様セッション その3  「拡張現実感 Pigg」
最後は、福田さんによる発表。

現場系アイドルオタの福田さんとしては現場に行って体験するARにかなり思い入れがあるようで、その熱い思いがビンビン伝わってきました。
そしてAmeba Piggのアバターを使ったARのデモでは、オリンピックにちなんだトリプルアクセルで勉強会のフィナーレを飾りました！
最後に
サイバーエージェントのお三方とも、とてもプレゼンが上手くて刺激をいただきました！
技術的に面白いだけでなく、合間合間にユーモアを挟みつつ聴衆を惹きつける力は本当にすごいですね！
また、みなさん技術が大好きという感じで、とても楽しそうに話をされていたのが印象的でした。
とても熱い技術者魂をお持ちで、これまた大いに刺激を受けました！
サイバーエージェントのみなさま、今回はありがとうございました。
またぜひ一緒に勉強会やりましょう！
P.S.
今回発表してくださったサイバーエージェントの大平さんが、レポートを書いてくださっています。
勉強会の翌日にレポートをアップするスピード感は見習いたいです！
当日の雰囲気が良く伝わってきます。ぜひこちらもご覧ください！
KLab×サイバーエージェント 合同勉強会｜社内NEET宣言
]]></description>
			<content:encoded><![CDATA[<p>どうも、honda-hです！</p>
<p>先日、「アメーバブログ」や「Amebaなう」などの面白いサービスを次々にリリースされているサイバーエージェント様と合同で勉強会をさせていただきました。</p>
<p>その様子をレポートさせて頂きます。</p>
<p>非常に有り難いことに予想を上回る参加人数となり、３０人分用意していた席がほぼ埋まってしまいました。</p>
<p><img class="alignnone" title="勉強会の様子" src="/young/wp-content/uploads/images/post/ca_klab_workshop/caklabworkshop02.jpg" alt="" width="400" height="267" /></p>
<p><span id="more-920"></span></p>
<h2>KLabセッション その１ 「ベイジアンフィルターによるユーザー投稿フィルタリングエンジン Ishigroid」</h2>
<p>まずは弊社の高田による発表。</p>
<p><img class="alignnone" title="高田による発表の様子" src="/young/wp-content/uploads/images/post/ca_klab_workshop/caklabworkshop03.jpg" alt="" width="400" height="267" /></p>
<p>ユーザ投稿系のサービスの運営で問題となるのが、誹謗中傷、出会い目的、卑猥な書き込みといった投稿に対する対策です。<br />
多くの場合、サイト運営者が人力で書き込みのチェックを行いますが、ほぼ24時間張り付かないといけなかったりしてすごく大変・・・。</p>
<p>Isigroidはベイジアンフィルタを用いて書き込みを自動的にチェックすることで、検閲のコストを下げようというものです。</p>
<p>テストの結果では全体の成功率（実際の検閲結果と一致した割合）が約86%で、ヤバイものにNG判定をした割合（positive(ng)）が90%と、そこそこ使えそうな感じになっています。</p>
<p>発表資料はこちら↓</p>
<div id="__ss_3362523" style="width: 425px;"><strong><a title="ベイジアンフィルターによるユーザー投稿フィルタリングエンジンIshigroid" href="http://www.slideshare.net/klab/ishigroid">ベイジアンフィルターによるユーザー投稿フィルタリングエンジンIshigroid</a></strong><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=ca-baze2-100308004356-phpapp01&amp;stripped_title=ishigroid" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=ca-baze2-100308004356-phpapp01&amp;stripped_title=ishigroid" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/klab">KLab株式会社</a>.</div>
</div>
<h2>KLabセッション その2 「LL言語でもHudsonを使おう!」</h2>
<p>続いて、弊社佐々木による発表。</p>
<p><img class="alignnone" title="佐々木の発表の様子" src="/young/wp-content/uploads/images/post/ca_klab_workshop/caklabworkshop05.jpg" alt="" width="400" height="267" /></p>
<p>継続的インテグレーションツール(CI)のHudson、それ自体はJavaで実装されていますが、「LL言語でもHudsonでCIできるよ！」というお話。</p>
<p>PHPのプロジェクトを例に、ソースがコミットされると自動的にプロファイリングしてくれるという、なんともクールな環境の構築例の紹介です。</p>
<p>そしてwebgrindというツールを使えばプロファイリング結果を可視化してくれるそうです。非常にカッコいい！</p>
<p>そしてKLab社内ではおさかな君ネタがすっかり定着しました（笑）</p>
<p><img class="alignnone" title="おさかな君" src="/young/wp-content/uploads/images/post/ca_klab_workshop/caklabworkshop06.jpg" alt="" width="400" height="267" /></p>
<p>発表資料はこちら↓</p>
<div id="__ss_3362460" style="width: 425px;"><strong><a title="LL言語でもHudsonを使おう!" href="http://www.slideshare.net/klab/llhudson">LL言語でもHudsonを使おう!</a></strong><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=hudson-cyberagent-100308002117-phpapp01&amp;stripped_title=llhudson" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=hudson-cyberagent-100308002117-phpapp01&amp;stripped_title=llhudson" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/klab">KLab株式会社</a>.</div>
</div>
<h2>サイバーエージェント様セッション その1 「CGMサイトにおける絵文字の使用傾向」</h2>
<p>続いてサイバーエージェントの大平さんによる発表。</p>
<p><img class="alignnone" title="大平さんによる発表の様子" src="/young/wp-content/uploads/images/post/ca_klab_workshop/caklabworkshop07.jpg" alt="" width="400" height="267" /></p>
<p>WebDB Furumでバイドゥさんが発表された携帯向けページでの絵文字の使用傾向と、大平さんが調査された「Amebaなう」での絵文字の使用傾向の比較結果を紹介していただきました。</p>
<p>携帯向けページはサイトナビゲーションの目的で絵文字が使われていることが多い（ナビゲーションキーを示す番号のマークなど）のに対して、Amebaなうでは感情表現などの目的で使われることが多いという違いが興味深いです。サービスを考える上で非常にとても参考になりそうです。</p>
<p>同じユーザ投稿でも、ブログ、メールなど他のチャネルではどんな風に使われているか、個人的には気になるところです。</p>
<h2>サイバーエージェント様セッション その2 「BaysieanSetsを用いた連想検索とアイテム推薦」</h2>
<p>次は服部さんによる発表。</p>
<p><img class="alignnone" title="服部さんによる発表の様子" src="/young/wp-content/uploads/images/post/ca_klab_workshop/caklabworkshop08.jpg" alt="" width="400" height="267" /></p>
<p>「レコメンドには膨大な計算量が必要」というのが私の認識でしたが、BaysianSetsを使うことで非常に高速に（リアルタイムに！）結果を得ることができるそうです。</p>
<p>そして、Wikipediaのデータを元にした連想検索のデモは非常にカッコよかったです！Google Sugest的なことができますね！</p>
<h2>サイバーエージェント様セッション その3  「拡張現実感 Pigg」</h2>
<p>最後は、福田さんによる発表。</p>
<p><img class="alignnone" title="福田さんによる発表の様子" src="/young/wp-content/uploads/images/post/ca_klab_workshop/caklabworkshop09.jpg" alt="" width="400" height="267" /></p>
<p>現場系アイドルオタの福田さんとしては現場に行って体験するARにかなり思い入れがあるようで、その熱い思いがビンビン伝わってきました。</p>
<p>そしてAmeba Piggのアバターを使ったARのデモでは、オリンピックにちなんだトリプルアクセルで勉強会のフィナーレを飾りました！</p>
<h2>最後に</h2>
<p>サイバーエージェントのお三方とも、とてもプレゼンが上手くて刺激をいただきました！<br />
技術的に面白いだけでなく、合間合間にユーモアを挟みつつ聴衆を惹きつける力は本当にすごいですね！</p>
<p>また、みなさん技術が大好きという感じで、とても楽しそうに話をされていたのが印象的でした。<br />
とても熱い技術者魂をお持ちで、これまた大いに刺激を受けました！</p>
<p>サイバーエージェントのみなさま、今回はありがとうございました。<br />
またぜひ一緒に勉強会やりましょう！</p>
<h3>P.S.</h3>
<p>今回発表してくださったサイバーエージェントの大平さんが、レポートを書いてくださっています。</p>
<p>勉強会の翌日にレポートをアップするスピード感は見習いたいです！</p>
<p>当日の雰囲気が良く伝わってきます。ぜひこちらもご覧ください！</p>
<p><a href="http://ameblo.jp/just-do-neet/entry-10468130084.html">KLab×サイバーエージェント 合同勉強会｜社内NEET宣言</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lab.klab.org/young/2010/03/ca_klab_workshop/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Kindle Development Kit (KDK) アプリ一番乗りを目指す！</title>
		<link>http://lab.klab.org/young/2010/03/kindle-development-kit-kdk-%e3%82%a2%e3%83%97%e3%83%aa%e4%b8%80%e7%95%aa%e4%b9%97%e3%82%8a%e3%82%92%e7%9b%ae%e6%8c%87%e3%81%99%ef%bc%81/</link>
		<comments>http://lab.klab.org/young/2010/03/kindle-development-kit-kdk-%e3%82%a2%e3%83%97%e3%83%aa%e4%b8%80%e7%95%aa%e4%b9%97%e3%82%8a%e3%82%92%e7%9b%ae%e6%8c%87%e3%81%99%ef%bc%81/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 12:54:08 +0000</pubDate>
		<dc:creator>sano-n</dc:creator>
		
		<category><![CDATA[Java]]></category>

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

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

		<category><![CDATA[Kindle Development Kit]]></category>

		<guid isPermaLink="false">https://labmgr.sdc.klab.org/young/?p=908</guid>
		<description><![CDATA[umjammer です。
Kindle Development Kit (KDK) が発表されてしばらく立ちます。
私も Java 使いとしては黙ってられなかったのですぐさまベータプログラムにエントリーしたのですが、3月に入ってもいっこうに知らせがありません。
審査があるみたいなので皆にいくとは思わないのですが、twitter で検索しても嘘くさい何件か以外は見当たりません。まだでてないんですよね？
もう待っていられないので先に作っちゃいます。
ちなみに KDK は Javadoc がすでに公開されています。
世の中にはいろんなものが落ちていまして codavaj という Javadoc リバースエンジニアリングツールが存在します。codavaj ? Javadoc の逆かい！素敵なネーミングセンスです。
codavaj は Javadoc を読み込んで Java プログラムのスケルトンへ変換することが可能です。
KDK が手に入らないのなら自前で実装します！

$ codavaj.sh wget http://kdk-javadocs.s3.amazonaws.com/index.html docs
$ codavaj.sh codavaj docs src http://java.sun.com/javame/reference/apis/jsr217/


とすれば、src にコードが生成されます。
今回は KComponent ぐらいしか使わないのでその辺りと、KindletContext を適当に実装しました。
KDK の超適当実装
さて KDK はできました。次は Kindlet でアプリ作成です。
KDK は Personal Basis Profile ベースなので Kindlet 対応すれば他は殆ど Applet と同等なので

public class KindleTestApp [...]]]></description>
			<content:encoded><![CDATA[<p>umjammer です。</p>
<p><a href="https://kindlepublishing.amazon.com/kdk">Kindle Development Kit (KDK)</a> が発表されてしばらく立ちます。<br />
私も Java 使いとしては黙ってられなかったのですぐさまベータプログラムにエントリーしたのですが、3月に入ってもいっこうに知らせがありません。</p>
<p>審査があるみたいなので皆にいくとは思わないのですが、twitter で検索しても嘘くさい何件か以外は見当たりません。まだでてないんですよね？</p>
<p>もう待っていられないので先に作っちゃいます。</p>
<p>ちなみに KDK は <a href="http://kdk-javadocs.s3.amazonaws.com/index.html">Javadoc</a> がすでに公開されています。<br />
世の中にはいろんなものが落ちていまして <a href="http://codavaj.sourceforge.net/">codavaj</a> という Javadoc リバースエンジニアリングツールが存在します。codavaj ? Javadoc の逆かい！素敵なネーミングセンスです。</p>
<p>codavaj は Javadoc を読み込んで Java プログラムのスケルトンへ変換することが可能です。<br />
KDK が手に入らないのなら自前で実装します！</p>
<pre class="prettyprint"><code>
$ codavaj.sh wget http://kdk-javadocs.s3.amazonaws.com/index.html docs
$ codavaj.sh codavaj docs src http://java.sun.com/javame/reference/apis/jsr217/

</code></pre>
<p>とすれば、src にコードが生成されます。</p>
<p>今回は KComponent ぐらいしか使わないのでその辺りと、KindletContext を適当に実装しました。</p>
<p>KDK の<a href="http://code.google.com/p/kdk-emulator/">超適当実装</a></p>
<p>さて KDK はできました。次は Kindlet でアプリ作成です。<br />
KDK は Personal Basis Profile ベースなので Kindlet 対応すれば他は殆ど Applet と同等なので</p>
<pre class="prettyprint"><code>
public class KindleTestApp implements Kindlet {

    private MyView view;

    private KindletContext context;

    /** */
    public void create(KindletContext context) {
        try {
            view = new MyView();
            this.context = context;
            this.context.getRootContainer().add(view); // ここ勝手に想像w
        } catch (Exception e) {
e.printStackTrace(System.err);
        }
    }

    /** */
    public void start() {
        new Thread(view).start();
    }

    /* */
    public void stop() {
    }

    /* */
    public void destroy() {
    }

    /** */
    private class MyView extends KComponent implements Runnable {
      :
</code></pre>
<p>こんな感じでしょうか？</p>
<p>あとは<a href="http://code.google.com/p/kdk-emulator/source/browse/#svn/trunk/vavi-apps-kdkemulator/src/main/java/vavi/apps/kindlet">ビューア</a>を適当にこしらえて</p>
<p><a href="http://www.flickr.com/photos/52807817@N00/4439590647/" title="Kindle Emulator by umjammer, on Flickr"><img src="http://farm3.static.flickr.com/2730/4439590647_5349b26e0a.jpg" width="204" height="250" alt="Kindle Emulator" /></a></p>
<p>一番乗り？？？ <del datetime="2010-03-17T06:46:21+00:00">実機は白黒だよなぁ&#8230;</del><br />
スキンを作って白黒にしてみました。</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.klab.org/young/2010/03/kindle-development-kit-kdk-%e3%82%a2%e3%83%97%e3%83%aa%e4%b8%80%e7%95%aa%e4%b9%97%e3%82%8a%e3%82%92%e7%9b%ae%e6%8c%87%e3%81%99%ef%bc%81/feed/</wfw:commentRss>
		</item>
		<item>
		<title>クックパッド様と合同勉強会を開催しました！</title>
		<link>http://lab.klab.org/young/2009/12/cookpad/</link>
		<comments>http://lab.klab.org/young/2009/12/cookpad/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 11:47:16 +0000</pubDate>
		<dc:creator>kumanaka-a</dc:creator>
		
		<category><![CDATA[Ruby]]></category>

		<category><![CDATA[交流会・勉強会]]></category>

		<guid isPermaLink="false">https://labmgr.sdc.klab.org/young/?p=902</guid>
		<description><![CDATA[12/16（水）に、先日の交流会でお世話になりましたクックパッド様を弊社にお招きして勉強会を開催いたしました！

今回は、クックパッド様から2テーマ、KLabから2テーマの発表がありました。
まずは、KLabから nagai-k が『OpenSocialアプリ入門』というテーマで発表しました。

ソーシャルアプリではどんな風なやりとりが行われているのか、APIの使い方など、ソーシャルアプリの基本となる部分について、分かりやすく解説していただきました！ソーシャルアプリといえば、今もっとも熱い分野のうちのひとつです！弊社でも開発に力を入れており、クックパッド様からも弊社側からも多くの質問が上がり、まさにホットな話題を提供してくださいました！
発表資料はこちら！
次に、同じくKLabから sasaki-k が『全文検索エンジンSolr試食』というテーマで発表しました。

全文検索エンジンSolr（ソーラ）のしくみ、実際に使ってみての気づきなどを発表してくださいました！（魚）料理の試食になぞらえての発表で、笑いを誘いつつ大いに盛り上がりました！Solrはまだ知名度の低い技術ですが、今回の勉強会で注目してもらえたのではないか、とsasaki-kも手ごたえのあった様子（後日談）。これからの動向に期待大です！！
発表資料はこちら！
続きまして、クックパッド様の発表に移りました。
まずは、最高技術責任者（！）の橋本様から、『クックパッドのRailsリニューアル』というテーマで発表いただきました。

なんと、Railsがまだベータ版だった2005年から、そのすばらしさに自信を持っていらっしゃったそうです！また、クックパッドサイトのリニューアルは2008年に行われたそうなのですが、その前に「たべみる」というサイトを、なんと開発開始からわずか1ヶ月でオープンさせることができたそうです！そのスピード感…尊敬します！！
次に、開発の森田様から、『Railsでのテスト駆動開発』というテーマで発表いただきました。

クックパッドサイトの開発中に、どのようなやり方でテストを行っているのか、実例も交えながらお話していただきました！かなり内部的なことも係ってきてしまうので、詳しくお伝えできないのが残念ですが、実際のテスト時の動作画面も見せていただくことができました！こういった勉強会の場でなければ見られない、貴重な体験をさせていただき、本当にありがとうございました！！
ここで、勉強会は一旦終了し、懇親会に移りました。
懇親会では、お酒も入りｗ、クックパッド様と弊社の技術者が語らう、熱い夜となりました！！
お越しいただいたクックパッドの皆様、本当にありがとうございました！
]]></description>
			<content:encoded><![CDATA[<p>12/16（水）に、<a href="http://lab.klab.org/young/2009/11/クックパッド様と技術者交流会を行いました/" target="_blank">先日の交流会</a>でお世話になりましたクックパッド様を弊社にお招きして勉強会を開催いたしました！</p>
<p><img title="cookpad001" src="http://lab.klab.org/young/wp-content/uploads/images/post/cookpad20091216/cookpad001.jpg" alt="勉強会の様子" width="450" height="300" /></p>
<p>今回は、クックパッド様から2テーマ、KLabから2テーマの発表がありました。</p>
<p>まずは、KLabから nagai-k が『OpenSocialアプリ入門』というテーマで発表しました。</p>
<p><img title="cookpad002" src="http://lab.klab.org/young/wp-content/uploads/images/post/cookpad20091216/cookpad002.jpg" alt="発表中のnagai-k" width="450" height="300" /></p>
<p>ソーシャルアプリではどんな風なやりとりが行われているのか、APIの使い方など、ソーシャルアプリの基本となる部分について、分かりやすく解説していただきました！ソーシャルアプリといえば、今もっとも熱い分野のうちのひとつです！弊社でも開発に力を入れており、クックパッド様からも弊社側からも多くの質問が上がり、まさにホットな話題を提供してくださいました！<br />
発表資料は<a href="http://lab.klab.org/young/wp-content/uploads/data/cookpad20091216/study_opensocial.pdf">こちら</a>！</p>
<p>次に、同じくKLabから sasaki-k が『全文検索エンジンSolr試食』というテーマで発表しました。</p>
<p><img title="cookpad003" src="http://lab.klab.org/young/wp-content/uploads/images/post/cookpad20091216/cookpad004.jpg" alt="発表中のsasaki-k" width="450" height="300" /></p>
<p>全文検索エンジンSolr（ソーラ）のしくみ、実際に使ってみての気づきなどを発表してくださいました！（魚）料理の試食になぞらえての発表で、笑いを誘いつつ大いに盛り上がりました！Solrはまだ知名度の低い技術ですが、今回の勉強会で注目してもらえたのではないか、とsasaki-kも手ごたえのあった様子（後日談）。これからの動向に期待大です！！<br />
発表資料は<a href="http://lab.klab.org/young/wp-content/uploads/data/cookpad20091216/try-solr.pdf">こちら</a>！</p>
<p>続きまして、クックパッド様の発表に移りました。</p>
<p>まずは、最高技術責任者（！）の橋本様から、『クックパッドのRailsリニューアル』というテーマで発表いただきました。</p>
<p><img title="cookpad004" src="http://lab.klab.org/young/wp-content/uploads/images/post/cookpad20091216/cookpad005.jpg" alt="発表中の橋本様" width="450" height="300" /></p>
<p>なんと、Railsがまだベータ版だった2005年から、そのすばらしさに自信を持っていらっしゃったそうです！また、<a href="http://cookpad.com/">クックパッドサイト</a>のリニューアルは2008年に行われたそうなのですが、その前に「<a href="http://tabemiru.com/">たべみる</a>」というサイトを、なんと開発開始からわずか1ヶ月でオープンさせることができたそうです！そのスピード感…尊敬します！！</p>
<p>次に、開発の森田様から、『Railsでのテスト駆動開発』というテーマで発表いただきました。</p>
<p><img title="cookpad005" src="http://lab.klab.org/young/wp-content/uploads/images/post/cookpad20091216/cookpad006.jpg" alt="発表中の森田様" width="450" height="300" /></p>
<p><a href="http://cookpad.com/">クックパッドサイト</a>の開発中に、どのようなやり方でテストを行っているのか、実例も交えながらお話していただきました！かなり内部的なことも係ってきてしまうので、詳しくお伝えできないのが残念ですが、実際のテスト時の動作画面も見せていただくことができました！こういった勉強会の場でなければ見られない、貴重な体験をさせていただき、本当にありがとうございました！！</p>
<p>ここで、勉強会は一旦終了し、懇親会に移りました。<br />
懇親会では、お酒も入りｗ、クックパッド様と弊社の技術者が語らう、熱い夜となりました！！</p>
<p>お越しいただいたクックパッドの皆様、本当にありがとうございました！</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.klab.org/young/2009/12/cookpad/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mac 用の Google Japanese Input のアイコン</title>
		<link>http://lab.klab.org/young/2009/12/mac-%e7%94%a8%e3%81%ae-google-japanese-input-%e3%81%ae%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3/</link>
		<comments>http://lab.klab.org/young/2009/12/mac-%e7%94%a8%e3%81%ae-google-japanese-input-%e3%81%ae%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 12:46:51 +0000</pubDate>
		<dc:creator>sano-n</dc:creator>
		
		<category><![CDATA[Mac]]></category>

		<category><![CDATA[Google Japanese Input]]></category>

		<category><![CDATA[Google 日本語入力]]></category>

		<guid isPermaLink="false">https://labmgr.sdc.klab.org/young/?p=891</guid>
		<description><![CDATA[umjammer です。
ネタがホットなうちに、
Google Japanese Input が出ました。変換効率が各地で話題になってますね。
Mac な私も早速導入してみたのですがメニューバー上に表示される変換モードの
アイコンがいまいちキレくありません。ことえりのアイコンと比較してみたところ
サイズが微妙に違うみたいでリサイズされて少しボケた感じになっています。
私は目が結構いい方で、気になって仕方が無いのでことえりのアイコンの色を
変更したアイコンを作成してみました。満足のいく仕上がりになりましたので
公開します。
ライセンスが微妙なので個人利用にとどめてくださいね。

直接入力アイコン
ひらがなアイコン

あと私は「ひらがな」と「直接入力」しか使わないのでとりあえず二つです。
作り方は
/System/Library/Input Methods/Kotoeri.app/Contents/Resources
にあることえりのアイコンを
Gimp の場合

 画像/モード で RGB に変換
 色/着色 で 色相 228 彩度 68 輝度 34 に変換 (本家と同じ色にするためにはもう少しがんばれます)
 PNG としてセーブ

このように変換して、
 /Library/Input Methods/GoogleJapaneseInput.app/Contents/Resources
にある等価なアイコンに上書きすればOKです。
見た目にこだわる人はお試しください！
PS
この Blog も Google Japanese Input で書いてみました。悪いけどことえりさんサヨウナラ。
]]></description>
			<content:encoded><![CDATA[<p>umjammer です。</p>
<p>ネタがホットなうちに、</p>
<p><a href="http://www.google.com/intl/ja/ime/">Google Japanese Input</a> が出ました。変換効率が各地で話題になってますね。<br />
Mac な私も早速導入してみたのですがメニューバー上に表示される変換モードの<br />
アイコンがいまいちキレくありません。ことえりのアイコンと比較してみたところ<br />
サイズが微妙に違うみたいでリサイズされて少しボケた感じになっています。</p>
<p>私は目が結構いい方で、気になって仕方が無いのでことえりのアイコンの色を<br />
変更したアイコンを作成してみました。満足のいく仕上がりになりましたので<br />
公開します。</p>
<p>ライセンスが微妙なので個人利用にとどめてくださいね。</p>
<ul>
<li><a href="http://www.mediafire.com/i/?mlmd1jhegzm">直接入力アイコン</a></li>
<li><a href="http://www.mediafire.com/i/?y5my4xywz4h">ひらがなアイコン</a></li>
</ul>
<p>あと私は「ひらがな」と「直接入力」しか使わないのでとりあえず二つです。</p>
<p>作り方は<br />
<code>/System/Library/Input Methods/Kotoeri.app/Contents/Resources</code><br />
にあることえりのアイコンを</p>
<p><a href="http://www.gimp.org/">Gimp</a> の場合</p>
<ol>
<li> 画像/モード で RGB に変換</li>
<li> 色/着色 で 色相 228 彩度 68 輝度 34 に変換<br/> (本家と同じ色にするためにはもう少しがんばれます)</li>
<li> PNG としてセーブ</li>
</ol>
<p>このように変換して、<br />
<code> /Library/Input Methods/GoogleJapaneseInput.app/Contents/Resources</code><br />
にある等価なアイコンに上書きすればOKです。</p>
<p>見た目にこだわる人はお試しください！</p>
<p>PS</p>
<p>この Blog も Google Japanese Input で書いてみました。悪いけどことえりさんサヨウナラ。</p>
]]></content:encoded>
			<wfw:commentRss>http://lab.klab.org/young/2009/12/mac-%e7%94%a8%e3%81%ae-google-japanese-input-%e3%81%ae%e3%82%a2%e3%82%a4%e3%82%b3%e3%83%b3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>アシアルKLab合同勉強会で発表しました: MessagePackのPHP Extensionについて</title>
		<link>http://lab.klab.org/young/2009/11/%e3%82%a2%e3%82%b7%e3%82%a2%e3%83%abklab%e5%90%88%e5%90%8c%e5%8b%89%e5%bc%b7%e4%bc%9a%e3%81%a7%e7%99%ba%e8%a1%a8%e3%81%97%e3%81%be%e3%81%97%e3%81%9f-messagepack%e3%81%aephp-extension%e3%81%ab/</link>
		<comments>http://lab.klab.org/young/2009/11/%e3%82%a2%e3%82%b7%e3%82%a2%e3%83%abklab%e5%90%88%e5%90%8c%e5%8b%89%e5%bc%b7%e4%bc%9a%e3%81%a7%e7%99%ba%e8%a1%a8%e3%81%97%e3%81%be%e3%81%97%e3%81%9f-messagepack%e3%81%aephp-extension%e3%81%ab/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 06:21:35 +0000</pubDate>
		<dc:creator>takei-h</dc:creator>
		
		<category><![CDATA[php]]></category>

		<category><![CDATA[交流会・勉強会]]></category>

		<guid isPermaLink="false">https://labmgr.sdc.klab.org/young/?p=870</guid>
		<description><![CDATA[こんにちは。takei-hです。
ちょっと時間が経ってしまったのですが、アシアル株式会社、KLab株式会社の合同勉強会でMessagePackとPHP Extensionについて発表しましたので、資料を公開します。
Php Meets Messagepack
View more documents from Hideyuki Takei.


また、PHP Extensionもだいたい形になったので、公開します。
MessagePack PHP Extensionのダウンロード

ソースを解凍した後、インストールは以下のコマンドで。

$ ./configure
$ make
$ sudo make install

そして、php.iniに以下の行を追加します。

extension=msgpack.so

これで準備完了です。
主に、ruby版のライブラリを参考にしています。使い勝手はPHPのjsonと同じような感じで、msgpack_pack()とmsgpack_unpack()です。
使い方はこんな感じ↓



また、ruby版と同様、ストリーミングデシリアライゼーションも可能です。



まだ完全なテストやベンチマークはとっていないのでこれからやろう。。。と思っていたら、本日、MessagePackのPHP Extensionを公開された方がいたようです！（うぅ）
MessagePackのPHP Extensionを作りました
トロトロしている間に。。でもせっかくなので私も公開させてもらいます笑。優位点としては、array型もpack,unpackできることでしょうか！
世の中の流れは速い！これからはアウトプットを、MessagePackみたいに高速化していきたいですね！！
== 追記(2009.11.30 17:34) ==
GitHubに公開しました。ご指導ご鞭撻のほどよろしくお願いします！
http://github.com/hideyuki/messagepack-php-ext
]]></description>
			<content:encoded><![CDATA[<p>こんにちは。takei-hです。</p>
<p>ちょっと時間が経ってしまったのですが、<a href='http://www.asial.co.jp/'>アシアル株式会社</a>、<a href="http://www.klab.jp">KLab株式会社</a>の合同勉強会でMessagePackとPHP Extensionについて発表しましたので、資料を公開します。</p>
<div style="width:425px;text-align:left" id="__ss_2526583"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/takehide22/php-meets-messagepack" title="Php Meets Messagepack">Php Meets Messagepack</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=phpmeetsmessagepack-091118043628-phpapp02&#038;stripped_title=php-meets-messagepack" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=phpmeetsmessagepack-091118043628-phpapp02&#038;stripped_title=php-meets-messagepack" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/takehide22">Hideyuki Takei</a>.</div>
</div>
<p><br/><br />
また、PHP Extensionもだいたい形になったので、公開します。</p>
<p><a href="http://lab.klab.org/young/wp-content/uploads/data/msgpack_php/php_msgpack.tar.gz">MessagePack PHP Extensionのダウンロード</a></p>
<p><span id="more-870"></span></p>
<p>ソースを解凍した後、インストールは以下のコマンドで。</p>
<pre class="prettyprint">
$ ./configure
$ make
$ sudo make install
</pre>
<p>そして、php.iniに以下の行を追加します。</p>
<pre class="prettyprint">
extension=msgpack.so
</pre>
<p>これで準備完了です。</p>
<p>主に、ruby版のライブラリを参考にしています。使い勝手はPHPのjsonと同じような感じで、msgpack_pack()とmsgpack_unpack()です。</p>
<p>使い方はこんな感じ↓</p>
<pre class="prettyprint">
<?php
 $data = array(array(null=>1), array("takei"=>"hide"), 3);
 var_dump($data);

 // serialize
 $msg = msgpack_pack($data);

 // hexadecimal
 $str = unpack('H*', $msg);
 var_dump("0x".$str[1]);

 // deserialize
 $ret = msgpack_unpack($msg);
 var_dump($ret);
?>
</pre>
<p>また、ruby版と同様、ストリーミングデシリアライゼーションも可能です。</p>
<pre class="prettyprint">
<?php

 // serialized data
 $msgs = array(pack("C*", 0x93, 0x01, 0x02, 0x03, 0x92), pack("C*", 0x03, 0x09, 0x04));

 // streaming deserialize
 $unpacker = new MessagePack();
 $unpacker->initialize();
 $buffer = "";
 $nread = 0;

 foreach($msgs as $msg){
    $buffer = $buffer . $msg;

    while(true){
        $nread = $unpacker->execute($buffer, $nread);

        if($unpacker->finished()){
            $msg = $unpacker->data();
            var_dump($msg);

            $unpacker->initialize();
            $buffer = substr($buffer, $nread);
            $nread = 0;

            if(!empty($buffer)){
                continue;
            }
        }
        break;
    }
 }
?>
</pre>
<p>まだ完全なテストやベンチマークはとっていないのでこれからやろう。。。と思っていたら、本日、MessagePackのPHP Extensionを公開された方がいたようです！（うぅ）</p>
<p><a href="http://taksatou.blogspot.com/2009/11/messagepackphp-extension.html">MessagePackのPHP Extensionを作りました</a></p>
<p>トロトロしている間に。。でもせっかくなので私も公開させてもらいます笑。優位点としては、array型もpack,unpackできることでしょうか！</p>
<p>世の中の流れは速い！これからはアウトプットを、MessagePackみたいに高速化していきたいですね！！</p>
<p>== 追記(2009.11.30 17:34) ==<br />
GitHubに公開しました。ご指導ご鞭撻のほどよろしくお願いします！<br />
<a href="http://github.com/hideyuki/messagepack-php-ext">http://github.com/hideyuki/messagepack-php-ext</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lab.klab.org/young/2009/11/%e3%82%a2%e3%82%b7%e3%82%a2%e3%83%abklab%e5%90%88%e5%90%8c%e5%8b%89%e5%bc%b7%e4%bc%9a%e3%81%a7%e7%99%ba%e8%a1%a8%e3%81%97%e3%81%be%e3%81%97%e3%81%9f-messagepack%e3%81%aephp-extension%e3%81%ab/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
