<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>watermint.org</title>
	<atom:link href="http://watermint.org/feed" rel="self" type="application/rss+xml" />
	<link>http://watermint.org</link>
	<description>Takayuki Okazaki&#039;s blog</description>
	<lastBuildDate>Tue, 20 Dec 2011 14:10:12 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://watermint.org/feed" />
		<item>
		<title>Java使いがソーシャルサービス開発の現場で思ったこと</title>
		<link>http://watermint.org/2011/12/20/1528.html</link>
		<comments>http://watermint.org/2011/12/20/1528.html#comments</comments>
		<pubDate>Tue, 20 Dec 2011 14:10:12 +0000</pubDate>
		<dc:creator>Takayuki Okazaki</dc:creator>
				<category><![CDATA[テクノロジー]]></category>

		<guid isPermaLink="false">http://watermint.org/?p=1528</guid>
		<description><![CDATA[寺田さんにつづき、Java Advent Calendar 2011の12月20日分です。明日はzinbeさんです。 さて今回はJava自体の話ではなくて、現在の勤務先でやっているようなソーシャルサービスの開発とJavaの関係について少し考察します。まず自分自身のスキルを簡単に紹介しておくと、Sun Microsystems時代には7年程度Javaに関連する仕事をしていました。その内容は金融業、流通業、製造業など様々な業種のサービスを支えるシステム構築や、トラブル解決のお手伝いという内容でした。その後、ACCESSに移ってすこしJavaから離れてObjective-Cを書いていました。現職ではObjective-Cも時々触りますがPHPがメインです。Objective-Cは実質1年、PHPも同じく1年ぐらいというところでしょうか。本格的にJavaを使うことから離れておよそ3年たちましたが、未だに一番詳しいのはたぶんJavaだと思います。 幸か不幸か、2008年にSunを退社してからしばらくはOracleによるSun買収などもありJava自体のテクノロジー的な進歩が停滞していました。このため、世の中に流通しているJava技術はまだ僕の知っている頃のものとそんなに差分がないと思っています。今年に入ってOracle持ち前の推進力がようやくJavaに対して効果を見せ始め、大きな変化のタイミングに入ってきたなと感じています。 Javaは2000年頃から続くエンタープライズ時代からのしがらみもあり、その殻からしばらく抜け出せず、「クラウド」が当たり前になって、もはや必須になった状況にはうまく対応できずにいました。最近になってようやくJBossがクラウドのソリューションを発表したり、Java EE 7にはクラウドプラットホームを前提とした仕様が入るようになってきました。こういう状況を見ていると、数年以内にJavaで育ったソーシャルサービスが世の中に増えてくることはおそらく間違いないだろうと思っています。それは、SIをしていた会社がB2Cサービスに転身したり、Javaの資産を使ったWebサービスがいよいよ現実的にマススケールに対応できるようになるだろうからです。 一方、現在のソーシャルサービス開発の現場を見渡してみるとJavaはまだまだこの分野に踏み込めていないことがわかります。たとえば、GREEやFacebookはPHP、mixiやmobageはPerl、CookpadはRubyなどいわゆるスクリプト言語が開発現場での主流です。各社の求人も多くはこれらに関連するスキルを持ったエンジニアに対するものが中心であることからもよくわかります。 これにはいくつか要因があると思いますが、今回は2つ紹介しておこうと思います。 ひとつめは、既存資産の問題です。ソーシャルサービスは各社とも個人レベルで小さく始めていたサービスが人気を呼び、拡大していった。という歴史を持っています。このため当然ながら、システムを支える多くの部分は開発当初に選んだ環境、2004〜2006年頃に価格的・技術的にリーズナブルであった選択肢をベースとしています。それが結果的にPHPであったり、PerlやRubyであるわけです。仮に、2011年の今、ソーシャルサービスを開発するのに最も適した言語がJavaであると判断したとしたとしても、わざわざいま開発環境を変え、PHPで書いてあるコードをJavaに移し替えることは労力や期間などを考えれば現実的ではないですし、費用対効果の面からも新しい環境に乗り換えることは十分説明がつかないでしょう。 二つ目は、リリースサイクルの問題です。現在もJavaは多くのエンタープライズシステムで使われています。Javaはエンタープライズシステムのリリースサイクルと相性がよいと思っています。エンタープライズシステムは統計などをみるとおおざっぱには、3〜18ヶ月程度かけて開発され、12〜48ヶ月程度で新しいシステムにバージョンアップしたり、リプレースされているとおもいます。安定性を重視するシステムでは、バグ修正や、バージョンアップは数週間に1度程度であることがほとんどでしょう。一方、ソーシャルサービスはユーザの動向を見ながら、ほぼリアルタイムにシステムを更新することが求められます。Java EEアーキテクチャのように、コンテナ側で多くの状態管理をしてくれることはスケーラビリティーやパフォーマンスの観点から重要なのですが、サービスを止めずにシステムを部分的に置き換えたり、追加や削除するにはあまり向いていません。OSGiやJSR 277、JSR 294のような仕様は部分的にこれらの問題を解決できるかもしれませんが、運用フローまでのノウハウが蓄積されるまでにはまだ2〜3年単位の時間がかかるのではないかとおもいます。 以上、結論としてはややJavaに対してネガティブなものになりましたが、この現状をきちんと認識した上でテクノロジーとしてのJava、それを支えるコミュニティーが問題解決に取り組んでいければ、ソーシャルサービスの中でのプレゼンスをどんどん高めていけるのではないかと思いました。]]></description>
			<content:encoded><![CDATA[<p><a href="http://yoshio3.com/2011/12/19/java-persistence-api-for-begineers/">寺田さん</a>につづき、<a href="http://atnd.org/events/22434">Java Advent Calendar 2011</a>の12月20日分です。明日は<a href="http://twitter.com/zinbe">zinbe</a>さんです。</p>
<p>さて今回はJava自体の話ではなくて、現在の勤務先でやっているようなソーシャルサービスの開発とJavaの関係について少し考察します。まず自分自身のスキルを簡単に紹介しておくと、Sun Microsystems時代には7年程度Javaに関連する仕事をしていました。その内容は金融業、流通業、製造業など様々な業種のサービスを支えるシステム構築や、トラブル解決のお手伝いという内容でした。その後、ACCESSに移ってすこしJavaから離れてObjective-Cを書いていました。現職ではObjective-Cも時々触りますがPHPがメインです。Objective-Cは実質1年、PHPも同じく1年ぐらいというところでしょうか。本格的にJavaを使うことから離れておよそ3年たちましたが、未だに一番詳しいのはたぶんJavaだと思います。<br />
<a href="http://www.flickr.com/photos/okazaki/1648037863/" title="R0023024.JPG by Takayuki Okazaki, on Flickr"><img src="http://farm3.staticflickr.com/2010/1648037863_df4355da07.jpg" width="500" height="375" alt="R0023024.JPG"></a><br />
幸か不幸か、2008年にSunを退社してからしばらくはOracleによるSun買収などもありJava自体のテクノロジー的な進歩が停滞していました。このため、世の中に流通しているJava技術はまだ僕の知っている頃のものとそんなに差分がないと思っています。今年に入ってOracle持ち前の推進力がようやくJavaに対して効果を見せ始め、大きな変化のタイミングに入ってきたなと感じています。</p>
<p>Javaは2000年頃から続くエンタープライズ時代からのしがらみもあり、その殻からしばらく抜け出せず、「クラウド」が当たり前になって、もはや必須になった状況にはうまく対応できずにいました。最近になってようやくJBossがクラウドのソリューションを発表したり、Java EE 7にはクラウドプラットホームを前提とした仕様が入るようになってきました。こういう状況を見ていると、数年以内にJavaで育ったソーシャルサービスが世の中に増えてくることはおそらく間違いないだろうと思っています。それは、SIをしていた会社がB2Cサービスに転身したり、Javaの資産を使ったWebサービスがいよいよ現実的にマススケールに対応できるようになるだろうからです。</p>
<p>一方、現在のソーシャルサービス開発の現場を見渡してみるとJavaはまだまだこの分野に踏み込めていないことがわかります。たとえば、GREEやFacebookはPHP、mixiやmobageはPerl、CookpadはRubyなどいわゆるスクリプト言語が開発現場での主流です。各社の求人も多くはこれらに関連するスキルを持ったエンジニアに対するものが中心であることからもよくわかります。<br />
<a href="http://www.flickr.com/photos/okazaki/1648937734/" title="R0023026.JPG by Takayuki Okazaki, on Flickr"><img src="http://farm3.staticflickr.com/2112/1648937734_3f0a9590d8.jpg" width="500" height="375" alt="R0023026.JPG"></a><br />
これにはいくつか要因があると思いますが、今回は2つ紹介しておこうと思います。</p>
<p>ひとつめは、既存資産の問題です。ソーシャルサービスは各社とも個人レベルで小さく始めていたサービスが人気を呼び、拡大していった。という歴史を持っています。このため当然ながら、システムを支える多くの部分は開発当初に選んだ環境、2004〜2006年頃に価格的・技術的にリーズナブルであった選択肢をベースとしています。それが結果的にPHPであったり、PerlやRubyであるわけです。仮に、2011年の今、ソーシャルサービスを開発するのに最も適した言語がJavaであると判断したとしたとしても、わざわざいま開発環境を変え、PHPで書いてあるコードをJavaに移し替えることは労力や期間などを考えれば現実的ではないですし、費用対効果の面からも新しい環境に乗り換えることは十分説明がつかないでしょう。<br />
<a href="http://www.flickr.com/photos/okazaki/1647884793/" title="R0023007.JPG by Takayuki Okazaki, on Flickr"><img src="http://farm3.staticflickr.com/2330/1647884793_6e422f7d86.jpg" width="500" height="375" alt="R0023007.JPG"></a><br />
二つ目は、リリースサイクルの問題です。現在もJavaは多くのエンタープライズシステムで使われています。Javaはエンタープライズシステムのリリースサイクルと相性がよいと思っています。エンタープライズシステムは統計などをみるとおおざっぱには、3〜18ヶ月程度かけて開発され、12〜48ヶ月程度で新しいシステムにバージョンアップしたり、リプレースされているとおもいます。安定性を重視するシステムでは、バグ修正や、バージョンアップは数週間に1度程度であることがほとんどでしょう。一方、ソーシャルサービスはユーザの動向を見ながら、ほぼリアルタイムにシステムを更新することが求められます。Java EEアーキテクチャのように、コンテナ側で多くの状態管理をしてくれることはスケーラビリティーやパフォーマンスの観点から重要なのですが、サービスを止めずにシステムを部分的に置き換えたり、追加や削除するにはあまり向いていません。OSGiやJSR 277、JSR 294のような仕様は部分的にこれらの問題を解決できるかもしれませんが、運用フローまでのノウハウが蓄積されるまでにはまだ2〜3年単位の時間がかかるのではないかとおもいます。</p>
<p>以上、結論としてはややJavaに対してネガティブなものになりましたが、この現状をきちんと認識した上でテクノロジーとしてのJava、それを支えるコミュニティーが問題解決に取り組んでいければ、ソーシャルサービスの中でのプレゼンスをどんどん高めていけるのではないかと思いました。</p>
]]></content:encoded>
			<wfw:commentRss>http://watermint.org/2011/12/20/1528.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://watermint.org/2011/12/20/1528.html" />
	</item>
		<item>
		<title>お客様の中に名探偵はいらっしゃいませんか？</title>
		<link>http://watermint.org/2011/12/10/1501.html</link>
		<comments>http://watermint.org/2011/12/10/1501.html#comments</comments>
		<pubDate>Sat, 10 Dec 2011 02:44:57 +0000</pubDate>
		<dc:creator>Takayuki Okazaki</dc:creator>
				<category><![CDATA[テクノロジー]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[dtrace]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://watermint.org/?p=1501</guid>
		<description><![CDATA[名探偵コナン並みの推理力をもったプログラマーにデバッグとか手伝ってもらったらどうだろうか。 ? Takayuki Okazaki (@watermint) December6, 2011 なんて思ってたら、 @watermint つまり、「毎週超難解なバグが発生する」ということですね？＞＜ ? パレオはせとあずさ♂?熱烈歓迎DeNA／ (@setoazusa) December6, 2011 ！！！ お客様の中に名探偵の方はいらっしゃいませんか？＞＜ ということで、iOS Advent Calendarのネタです。今回は、iOSデバッグ界隈の中ではマイナーと言われるか、一部のファンに熱狂的な支持！といわれるか絶妙なバランスを保ったDTraceでのデバッグを取り上げます。 DTraceはもともと、Sun Microsystemsによって開発されSolaris 10に搭載されたデバッグフレームワークです。現在は、FreeBSDやMac OS Xなどでも利用することが出来ます。詳しい説明は今回は省きますがTraceと名前がついていることから想像できる通り、プログラムの実行をトレースしてどのコードが、どういう風に実行されたか。といったことを調べることが出来ます。 こんなことはありませんか？ 初期化処理がどうやらうまくいっていないようだが、どこまで実行されたか知りたい。しかし、Xcodeのデバッガでステップ実行・ブレークポイント設定などしながら確認するにはプログラムが大きすぎる。 NSLogを埋め込んでどこまで実行されたか確認したいが、そもそもログを埋め込むのが面倒くさい。または、ソースコードをNSLogだらけにして汚したくない。 個人的にはXcodeのブレークポイント設定はなかなかよく出来ていると思っていて、多くのケースではそれで足りると思っています。 Xcodeでブレークポイントを設定してActionにSoundを設定、ブレークポイントは自動的に続行するように設定しておけばその該当箇所が実行されたかどうか音で聞き分けて調べることが出来ます。初期化関連の問題を探すときなんかは個人的にはよく利用しています。 さて、これでも十分なんですが設定したいブレークポイントが増えてくると音の種類も限定されますしどの音がどのブレークポイントだったかよくわからなくなります。Log Messageなどのアクションを設定してログ出力するのもいいのですが、網羅的にブレークポイント設定は面倒くさすぎます。 こういうときに威力を発揮するのがDTraceです。まずは手っ取り早くつかってみましょう。XcodeについているiOSのサンプルプロジェクトLazyTableImagesを題材にしています。Xcodeであなたのデバッグしたいプロジェクトを開いて、シミュレーター上で実行してください。出ましたか？ 次にターミナルから次のコマンドを実行します。 $ ps ax &#124; grep Simulator &#124; grep -v iPhoneSimulator すると次のようにiOSシミュレーター上で実行されているアプリのプロセスIDが分かります。下の例だと85894ですね。 85894 ?? SX 0:00.33 /Users/watermint/Library/Application Support/iPhone Simulator/4.0.2/Applications/993BF578-B81F-4B4C-97FA-B6B6843DD47E/LazyTable.app/LazyTable 88978 s004 R+ [...]]]></description>
			<content:encoded><![CDATA[<blockquote class="twitter-tweet"><p>名探偵コナン並みの推理力をもったプログラマーにデバッグとか手伝ってもらったらどうだろうか。</p>
<p>? Takayuki Okazaki (@watermint) <a href="https://twitter.com/watermint/status/143981060890427393" data-datetime="2011-12-06T09:12:14+00:00">December6, 2011</a></p></blockquote>
<p><script charset="utf-8" type="text/javascript" src="//platform.twitter.com/widgets.js"></script>なんて思ってたら、 </p>
<blockquote class="twitter-tweet" data-in-reply-to="143981060890427393"><p>
@<a href="https://twitter.com/watermint">watermint</a> つまり、「毎週超難解なバグが発生する」ということですね？＞＜</p>
<p>? パレオはせとあずさ♂?熱烈歓迎DeNA／ (@setoazusa) <a href="https://twitter.com/setoazusa/status/143982323132669952" data-datetime="2011-12-06T09:17:15+00:00">December6, 2011</a>
</p></blockquote>
<p><script charset="utf-8" type="text/javascript" src="//platform.twitter.com/widgets.js"></script><br />
！！！<br />
お客様の中に名探偵の方はいらっしゃいませんか？＞＜</p>
<p>ということで、<a href="http://atnd.org/events/22792">iOS Advent Calendar</a>のネタです。今回は、iOSデバッグ界隈の中ではマイナーと言われるか、一部のファンに熱狂的な支持！といわれるか絶妙なバランスを保ったDTraceでのデバッグを取り上げます。</p>
<p><a href="http://en.wikipedia.org/wiki/DTrace">DTrace</a>はもともと、Sun Microsystemsによって開発されSolaris 10に搭載されたデバッグフレームワークです。現在は、FreeBSDやMac OS Xなどでも利用することが出来ます。詳しい説明は今回は省きますがTraceと名前がついていることから想像できる通り、プログラムの実行をトレースしてどのコードが、どういう風に実行されたか。といったことを調べることが出来ます。</p>
<p>こんなことはありませんか？</p>
<ol>
<li>初期化処理がどうやらうまくいっていないようだが、どこまで実行されたか知りたい。しかし、Xcodeのデバッガでステップ実行・ブレークポイント設定などしながら確認するにはプログラムが大きすぎる。</li>
<li>NSLogを埋め込んでどこまで実行されたか確認したいが、そもそもログを埋め込むのが面倒くさい。または、ソースコードをNSLogだらけにして汚したくない。</li>
</ol>
<p>個人的にはXcodeのブレークポイント設定はなかなかよく出来ていると思っていて、多くのケースではそれで足りると思っています。</p>
<p><a href="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-17.34.33.png"><img src="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-17.34.33-e1323480954619.png" alt="" title="Xcode and Breakpoint" width="498" height="194" class="alignnone size-full wp-image-1512" /></a></p>
<p>Xcodeでブレークポイントを設定してActionにSoundを設定、ブレークポイントは自動的に続行するように設定しておけばその該当箇所が実行されたかどうか音で聞き分けて調べることが出来ます。初期化関連の問題を探すときなんかは個人的にはよく利用しています。</p>
<p>さて、これでも十分なんですが設定したいブレークポイントが増えてくると音の種類も限定されますしどの音がどのブレークポイントだったかよくわからなくなります。Log Messageなどのアクションを設定してログ出力するのもいいのですが、網羅的にブレークポイント設定は面倒くさすぎます。</p>
<p>こういうときに威力を発揮するのがDTraceです。まずは手っ取り早くつかってみましょう。XcodeについているiOSのサンプルプロジェクトLazyTableImagesを題材にしています。Xcodeであなたのデバッグしたいプロジェクトを開いて、シミュレーター上で実行してください。出ましたか？</p>
<p><a href="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-17.50.44.png"><img src="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-17.50.44-e1323481881555.png" alt="" title="LazyTableImage" width="256" height="500" class="aligncenter size-full wp-image-1516" /></a></p>
<p>次にターミナルから次のコマンドを実行します。</p>
<blockquote><p>
$ ps ax | grep Simulator | grep -v iPhoneSimulator
</p></blockquote>
<p>すると次のようにiOSシミュレーター上で実行されているアプリのプロセスIDが分かります。下の例だと85894ですね。</p>
<pre>
85894   ??  SX     0:00.33 /Users/watermint/Library/Application Support/iPhone Simulator/4.0.2/Applications/993BF578-B81F-4B4C-97FA-B6B6843DD47E/LazyTable.app/LazyTable
88978 s004  R+     0:00.00 grep Simulator
</pre>
<p>さてこれが分かったら続いてdtraceを実行します。dtraceは他の人の実行しているプロセスなども丸裸にしてしまうなどでき、セキュリティー上の課題があるため一般ユーザでは実行できません。sudoをつかって実行しましょう。下記の85894の部分は調べたプロセスIDに読み替えてください。</p>
<blockquote><p>
$ sudo dtrace -p 85894 -n &#8216;objc$target:::entry { printf(&#8220;[%s %s]\n&#8221;, probemod, probefunc); }&#8217;
</p></blockquote>
<p>できましたか？できたらアプリを適当にタップするなど動かしてみてください。<br />
<a href="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-18.04.19.png"><img src="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-18.04.19-e1323482692202.png" alt="" title="dtrace実行結果" width="500" height="382" class="alignnone size-full wp-image-1519" /></a><br />
このようにObjective Cで実行された関数がリアルタイムに出力されます。どうでしょうか？これでNSLogを仕込まなくてもトレースがとれるようになりましたね。でもちょっと出力が多すぎるようです。これではデバッグの役に立てるにはややしんどいです。出力を抑制してみましょう。</p>
<p>objc$target:::entryのところを、objc$target:クラス名::entryと書き換えてみましょう。ここではLazyTableImageにあるクラスのIconDownloaderとしましょうか。実際に実行するときにはあなたのプロジェクトにあるクラスをつかってください。</p>
<blockquote><p>
$ sudo dtrace -p 85894 -n &#8216;objc$IconDownloader::entry { printf(&#8220;[%s %s]\n&#8221;, probemod, probefunc); }&#8217;
</p></blockquote>
<p><a href="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-18.10.20.png"><img src="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-18.10.20-e1323483049692.png" alt="" title="出力をIconDownloaderのみにする" width="500" height="382" class="alignnone size-full wp-image-1521" /></a><br />
出力が一気に減って、IconDownloaderだけになりましたね。ご想像の通り、関数名でもフィルタできます。</p>
<blockquote><p>
$ sudo dtrace -p 85894 -n &#8216;objc$target:IconDownloader:-indexPathInTableView:entry { printf(&#8220;[%s %s]\n&#8221;, probemod, probefunc); }&#8217;
</p></blockquote>
<p>便利ですね。これでたとえば、初期化処理のときに通らなければならない関数がちゃんと実行されているかどうか分かるようになりました。クラス名や関数名にはワイルドカードが使えます。たとえば、IconDownloader以外にIconButton、IconButtonLabelなどのクラスがあった場合にはIcon*というようにアスタリスクを指定するとIconで始まるクラス名にマッチします。</p>
<p>さて、デバッグしていて原因箇所がなんとなくわかってきたときに知りたいのはその関数がいつ、どこから呼ばれたか？です。呼び出し元を知りたいですよね。そういうときは、もうちょっと凝ったdtraceの使い方をしてみましょう。</p>
<p>次のようなファイルを用意して、trace.d というファイル名で保存しておきます</p>
<pre>
#pragma D option quiet

self int level;

objc$target:::entry
{
  printf("%*s[tid=%lld][%s %s]\n",
    self->level * 2, " ->",
    (long long)tid, probemod, probefunc);
  self->ts[probefunc] = timestamp;
  self->level++;
}

objc$target:::return
{
  time = timestamp - self->ts[probefunc];
  self->level--;
  printf("%*s[tid=%lld][%s %s] [%dms]\n",
    self->level * 2, " <-", (long long)tid,
    probemod, probefunc, time / 1000);
}
</pre>
<p>ではこれを実行してみましょう。</p>
<blockquote><p>
$ sudo dtrace -p 85894 -s trace.d
</p></blockquote>
<p><a href="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-18.32.05.png"><img src="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-18.32.05-e1323484363305.png" alt="" title="dtraceで呼び出しツリー" width="500" height="382" class="alignnone size-full wp-image-1524" /></a></p>
<p>このように関数呼び出しをツリー状にしてダンプできます。後は必要に応じてクラス名や関数をフィルタしていけば良いでしょう。</p>
<p>さて、すこし駆け足になりましたがXcodeのデバッガをつかう場合と比べてだいぶ便利な機能があることがお分かりいただけたでしょうか？</p>
<p>コマンドラインからの実行に抵抗があるというかたはInstrumentsからもDtraceは実行できます。</p>
<p><a href="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-18.38.14.png"><img src="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-18.38.14-e1323484740809.png" alt="" title="Instruments" width="500" height="353" class="alignnone size-full wp-image-1525" /></a></p>
<p>さて、すこし駆け足になりましたが最後に制約事項を説明しておきます。dtraceはOS側に仕込まれたプローブという検出ポイントに対して働きます。このため、トレースしたい内容のプローブがOS側で実装されていることが必須です。このため、dtraceのプローブを持たないiOSにはdtraceを接続できません。必ずiOSシミュレータ上で実行しているアプリに対してdtraceを実行してください。</p>
<p>iPhoneやiPadなどのiOSが動作している実機に対しては別途従来通りのXcodeやgdbを用いたデバッグが必要です。</p>
<p>Mac OS XのdtraceにはObjective Cのためのプローブがいくつか用意されています。詳しくはman dtraceを参照してください。<br />
<a href="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-18.41.38.png"><img src="http://watermint.org/wp-content/uploads/2011/12/Screen-shot-2011-12-09-at-18.41.38-e1323484944692.png" alt="" title="man dtrace" width="500" height="280" class="alignnone size-full wp-image-1526" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://watermint.org/2011/12/10/1501.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://watermint.org/2011/12/10/1501.html" />
	</item>
		<item>
		<title>recolo</title>
		<link>http://watermint.org/2011/10/30/1497.html</link>
		<comments>http://watermint.org/2011/10/30/1497.html#comments</comments>
		<pubDate>Sat, 29 Oct 2011 18:07:00 +0000</pubDate>
		<dc:creator>Takayuki Okazaki</dc:creator>
				<category><![CDATA[ガジェット]]></category>
		<category><![CDATA[recolo]]></category>
		<category><![CDATA[カメラ]]></category>

		<guid isPermaLink="false">http://watermint.org/?p=1497</guid>
		<description><![CDATA[KING JIMのKING JIMのインターバルレコーダー レコロ を買いました。前からこの手の商品には興味がありましたが、これはなかなか手頃で使いやすいです。]]></description>
			<content:encoded><![CDATA[<p><a title="View 'recolo' on Flickr.com" href="http://www.flickr.com/photos/21684662@N00/6292308046"><img src="http://farm7.static.flickr.com/6032/6292308046_17707a558c.jpg" border="0" alt="recolo" width="500" height="332" /></a></p>
<p>KING JIMの<a href="http://www.amazon.co.jp/gp/product/B005LEFOM4/ref=as_li_tf_tl?ie=UTF8&#038;tag=watermint-22&#038;linkCode=as2&#038;camp=247&#038;creative=1211&#038;creativeASIN=B005LEFOM4">KING JIMのインターバルレコーダー レコロ</a><img src="http://www.assoc-amazon.jp/e/ir?t=watermint-22&#038;l=as2&#038;o=9&#038;a=B005LEFOM4" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /><br />
を買いました。前からこの手の商品には興味がありましたが、これはなかなか手頃で使いやすいです。</p>
<p><iframe width="480" height="360" src="http://www.youtube.com/embed/s7KraiKCYQY" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://watermint.org/2011/10/30/1497.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://watermint.org/2011/10/30/1497.html" />
	</item>
		<item>
		<title>We&#8217;ve just married</title>
		<link>http://watermint.org/2011/10/25/1494.html</link>
		<comments>http://watermint.org/2011/10/25/1494.html#comments</comments>
		<pubDate>Mon, 24 Oct 2011 15:01:29 +0000</pubDate>
		<dc:creator>Takayuki Okazaki</dc:creator>
				<category><![CDATA[その他]]></category>

		<guid isPermaLink="false">http://watermint.org/?p=1494</guid>
		<description><![CDATA[10月23日、日曜日。区役所に書類を提出して無事夫婦になりました。 急に決めたことだったにもかかわらず、たくさんの方から思いがけないお祝いをたくさんいただき、本当にありがとうございました。]]></description>
			<content:encoded><![CDATA[<p>10月23日、日曜日。区役所に書類を提出して無事夫婦になりました。</p>
<p><a title="View '_DSC2834' on Flickr.com" href="http://www.flickr.com/photos/21684662@N00/6276820254"><img src="http://farm7.static.flickr.com/6056/6276820254_70cf43fdae.jpg" border="0" alt="_DSC2834" width="333" height="500" /></a></p>
<p>急に決めたことだったにもかかわらず、たくさんの方から思いがけないお祝いをたくさんいただき、本当にありがとうございました。</p>
]]></content:encoded>
			<wfw:commentRss>http://watermint.org/2011/10/25/1494.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://watermint.org/2011/10/25/1494.html" />
	</item>
		<item>
		<title>Windows 7 Ultimate</title>
		<link>http://watermint.org/2011/05/28/1492.html</link>
		<comments>http://watermint.org/2011/05/28/1492.html#comments</comments>
		<pubDate>Sat, 28 May 2011 05:04:29 +0000</pubDate>
		<dc:creator>Takayuki Okazaki</dc:creator>
				<category><![CDATA[ガジェット]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://watermint.org/?p=1492</guid>
		<description><![CDATA[Windows 7 Ultimateいれました。発売してからかなりたってますがWindows 7初めて使いました。なかなか使いやすいですね。 ParallelsのCoherenceをつかっても便利。]]></description>
			<content:encoded><![CDATA[<p><a title="View 'Parallels DesktopScreenSnapz001' on Flickr.com" href="http://www.flickr.com/photos/21684662@N00/5766700853"><img src="http://farm3.static.flickr.com/2711/5766700853_1b656bf740.jpg" border="0" alt="Parallels DesktopScreenSnapz001" width="500" height="281" /></a></p>
<p>Windows 7 Ultimateいれました。発売してからかなりたってますがWindows 7初めて使いました。なかなか使いやすいですね。</p>
<p><a title="View 'FinderScreenSnapz001' on Flickr.com" href="http://www.flickr.com/photos/21684662@N00/5767243236"><img src="http://farm3.static.flickr.com/2228/5767243236_ce9f0c5329.jpg" border="0" alt="FinderScreenSnapz001" width="500" height="281" /></a></p>
<p>ParallelsのCoherenceをつかっても便利。</p>
]]></content:encoded>
			<wfw:commentRss>http://watermint.org/2011/05/28/1492.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://watermint.org/2011/05/28/1492.html" />
	</item>
		<item>
		<title>Twitter、「＊未承諾RT」表示を義務化へ</title>
		<link>http://watermint.org/2011/04/01/1486.html</link>
		<comments>http://watermint.org/2011/04/01/1486.html#comments</comments>
		<pubDate>Thu, 31 Mar 2011 23:00:29 +0000</pubDate>
		<dc:creator>Takayuki Okazaki</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[aprilfool]]></category>

		<guid isPermaLink="false">http://watermint.org/?p=1486</guid>
		<description><![CDATA[4月1日、San Francisco &#8211; 手軽にコミュニケーションすることができることで人気の米Twitterは、3月11日に発生した東日本大震災におけるデマや悪意のある情報が広まったことに対し、「＊未承諾RT」の表示を義務づける方針を決めた。 米Twitter社上級副社長ササクレ・イターイ氏によれば「まずは震災により被害にあわれた日本の皆様に心からお見舞い申し上げたい。今回の震災では安否確認や避難情報など多くの有用な情報の伝達に弊社のサービスがお役に立てたことをうれしく思っています。一方、デマや悪意のある情報が被災された自治体、警察、自衛隊などの活動に悪影響を与えたことに深い悲しみを感じます」と述べた上で、「こうしたデマや悪意のある情報が一斉に広まった背景には未確認のリツイート（ほかのユーザのツイートを再投稿すること）が原因と考えられる」と原因を分析した。 同氏は「日本では【特定電子メールの送信の適正化等に関する法律】による【未承諾広告＊】との表示義務化が一定の効果を上げていると聞いている。これに倣い弊社でもツイート元に未確認のリツイートについては【＊未承諾RT】と記載することを義務化することにした」と対策を発表した。 一方、流言飛語対策コンサルティング大手の米デマージェンシー社は「一般に、情報源を確認せず情報発信するユーザは利用規約の変更などについても確認していない。今回のような措置は大きな効果を生まないだろう」と疑問を投げかけた。 都内に住み1日3,000ツイートを欠かさないという主婦(32)は「【＊未承諾RT】という文字だけで6文字も使ってしまう。また、未承諾のリツイートを未承諾のままリツイートすると「＊未承諾RT ＊未承諾RT」となり正しくデマが伝えられない」と困惑気味に語った。 この記事はエイプリルフールの記事です。]]></description>
			<content:encoded><![CDATA[<p>4月1日、San Francisco &#8211; 手軽にコミュニケーションすることができることで人気の米Twitterは、3月11日に発生した東日本大震災におけるデマや悪意のある情報が広まったことに対し、「＊未承諾RT」の表示を義務づける方針を決めた。<br />
米Twitter社上級副社長ササクレ・イターイ氏によれば「まずは震災により被害にあわれた日本の皆様に心からお見舞い申し上げたい。今回の震災では安否確認や避難情報など多くの有用な情報の伝達に弊社のサービスがお役に立てたことをうれしく思っています。一方、デマや悪意のある情報が被災された自治体、警察、自衛隊などの活動に悪影響を与えたことに深い悲しみを感じます」と述べた上で、「こうしたデマや悪意のある情報が一斉に広まった背景には未確認のリツイート（ほかのユーザのツイートを再投稿すること）が原因と考えられる」と原因を分析した。<br />
同氏は「日本では【<a href="http://law.e-gov.go.jp/htmldata/H14/H14HO026.html">特定電子メールの送信の適正化等に関する法律</a>】による【未承諾広告＊】との表示義務化が一定の効果を上げていると聞いている。これに倣い弊社でもツイート元に未確認のリツイートについては【＊未承諾RT】と記載することを義務化することにした」と対策を発表した。<br />
一方、流言飛語対策コンサルティング大手の米デマージェンシー社は「一般に、情報源を確認せず情報発信するユーザは利用規約の変更などについても確認していない。今回のような措置は大きな効果を生まないだろう」と疑問を投げかけた。<br />
都内に住み1日3,000ツイートを欠かさないという主婦(32)は「【＊未承諾RT】という文字だけで6文字も使ってしまう。また、未承諾のリツイートを未承諾のままリツイートすると「＊未承諾RT ＊未承諾RT」となり正しくデマが伝えられない」と困惑気味に語った。<br />
この記事はエイプリルフールの記事です。</p>
]]></content:encoded>
			<wfw:commentRss>http://watermint.org/2011/04/01/1486.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://watermint.org/2011/04/01/1486.html" />
	</item>
		<item>
		<title>We&#8217;re OK</title>
		<link>http://watermint.org/2011/03/12/1482.html</link>
		<comments>http://watermint.org/2011/03/12/1482.html#comments</comments>
		<pubDate>Sat, 12 Mar 2011 02:59:03 +0000</pubDate>
		<dc:creator>Takayuki Okazaki</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[earthquake]]></category>

		<guid isPermaLink="false">http://watermint.org/?p=1482</guid>
		<description><![CDATA[I and my family are OK.]]></description>
			<content:encoded><![CDATA[<p>I and my family are OK.</p>
]]></content:encoded>
			<wfw:commentRss>http://watermint.org/2011/03/12/1482.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://watermint.org/2011/03/12/1482.html" />
	</item>
		<item>
		<title>YS-110α</title>
		<link>http://watermint.org/2011/01/26/1480.html</link>
		<comments>http://watermint.org/2011/01/26/1480.html#comments</comments>
		<pubDate>Tue, 25 Jan 2011 15:01:46 +0000</pubDate>
		<dc:creator>Takayuki Okazaki</dc:creator>
				<category><![CDATA[カメラ]]></category>
		<category><![CDATA[ガジェット]]></category>
		<category><![CDATA[diving]]></category>

		<guid isPermaLink="false">http://watermint.org/?p=1480</guid>
		<description><![CDATA[買いました！マイナーチェンジですが、使用感として一番違うところはたぶん光量調節ダイアルの回す方向が逆なこと。TTLを使わずにいままでカンで調光してきたので、慣れるまでちょっと違和感がありそう。]]></description>
			<content:encoded><![CDATA[<p><a title="View '_DSC8127.jpg' on Flickr.com" href="http://www.flickr.com/photos/21684662@N00/5387711084"><img src="http://farm6.static.flickr.com/5219/5387711084_82ce0806d2.jpg" border="0" alt="_DSC8127.jpg" width="500" height="332" /></a></p>
<p>買いました！マイナーチェンジですが、使用感として一番違うところはたぶん光量調節ダイアルの回す方向が逆なこと。TTLを使わずにいままでカンで調光してきたので、慣れるまでちょっと違和感がありそう。</p>
]]></content:encoded>
			<wfw:commentRss>http://watermint.org/2011/01/26/1480.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://watermint.org/2011/01/26/1480.html" />
	</item>
		<item>
		<title>YS-110が・・・</title>
		<link>http://watermint.org/2011/01/18/1478.html</link>
		<comments>http://watermint.org/2011/01/18/1478.html#comments</comments>
		<pubDate>Tue, 18 Jan 2011 14:07:04 +0000</pubDate>
		<dc:creator>Takayuki Okazaki</dc:creator>
				<category><![CDATA[カメラ]]></category>

		<guid isPermaLink="false">http://watermint.org/?p=1478</guid>
		<description><![CDATA[] 約4年間にわたって活躍してくれたストロボ、YS-110。この間みたら無惨な姿に・・・。掃除して電池を入れ替えてもだめ・・・。水中カメラ機材の宿命とはいえ、短命です。DX-D50とNikon D50は元気だしどうしようかな。YS-110を修理か、YS-110αを買うか。]]></description>
			<content:encoded><![CDATA[<p><a title="View '_DSC7968.jpg' on Flickr.com" href="http://www.flickr.com/photos/21684662@N00/5366574879"><img src="http://farm6.static.flickr.com/5049/5366574879_84917d8c81.jpg" border="0" alt="_DSC7968.jpg" width="332" height="500" /></a>]</p>
<p>約4年間にわたって活躍してくれたストロボ、YS-110。この間みたら無惨な姿に・・・。掃除して電池を入れ替えてもだめ・・・。水中カメラ機材の宿命とはいえ、短命です。DX-D50とNikon D50は元気だしどうしようかな。YS-110を修理か、YS-110αを買うか。</p>
]]></content:encoded>
			<wfw:commentRss>http://watermint.org/2011/01/18/1478.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://watermint.org/2011/01/18/1478.html" />
	</item>
		<item>
		<title>グリーで働いています</title>
		<link>http://watermint.org/2011/01/18/1476.html</link>
		<comments>http://watermint.org/2011/01/18/1476.html#comments</comments>
		<pubDate>Mon, 17 Jan 2011 23:38:59 +0000</pubDate>
		<dc:creator>Takayuki Okazaki</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[gree]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://watermint.org/?p=1476</guid>
		<description><![CDATA[あけましておめでとうございます。昨年末にACCESSを退社し、今年からグリーで働き始めました。個人的な経験のなかでも本格的なB2Cビジネスは初めてのことでいろいろ未知の分野があってわくわくしています。今後ともよろしくお願いします。]]></description>
			<content:encoded><![CDATA[<p>あけましておめでとうございます。昨年末にACCESSを退社し、今年からグリーで働き始めました。個人的な経験のなかでも本格的なB2Cビジネスは初めてのことでいろいろ未知の分野があってわくわくしています。今後ともよろしくお願いします。</p>
<p><a title="View 'DSCF4218.jpg' on Flickr.com" href="http://www.flickr.com/photos/21684662@N00/5345826723"><img src="http://farm6.static.flickr.com/5130/5345826723_3199925102.jpg" border="0" alt="DSCF4218.jpg" width="375" height="500" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://watermint.org/2011/01/18/1476.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://watermint.org/2011/01/18/1476.html" />
	</item>
	</channel>
</rss>

