<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>管理人@Yoski</title>
<link>http://blog.myrss.jp/</link>
<description>サイドフィードの管理人（a++/Yoski）のブログです。最近は開発系のメモ帳です。</description>
<language>ja</language>
<copyright>Copyright 2010</copyright>
<lastBuildDate>Fri, 20 Aug 2010 14:54:56 +0900</lastBuildDate>
<generator>http://www.movabletype.org/?v=3.33-ja</generator>
<docs>http://blogs.law.harvard.edu/tech/rss</docs> 

<item>
<title>3時間でiPhoneアプリをiPad対応にした</title>
<description><![CDATA[<p>ま、実際には5時間かかったんですけどね。最初だったから。ちなみに審査は実質5日くらい。</p>

<p><a href="http://blog.myrss.jp/IMG_0010%201.PNG"><img alt="IMG_0010%201.PNG" src="http://blog.myrss.jp/IMG_0010%201-thumb.PNG" width="420" height="560" /></a></p>

<p>これは<a href="http://twitcasting.tv/">ツイキャス・ビュワー</a>の iPad アプリ。というかユニバーサル・バイナリなのでiPhoneと共通です。</p>

<p>夕方5時からiPad化初めて、10時には完成、2時間で試験パターンまわして深夜0時に申請、という流れです。</p>

<p>自分メモですけど、何かの参考に。<br />
（ちなみに内容的には最低限のiPad対応、かと思いますー）</p>

<p><br />
【準備】</p>

<p>実はこれがすごく大事。iPhone アプリを作るときに以下のことに注意して作ります。</p>

<p>- 画面は左右ぐるぐる回転できるようにしておく<br />
- ぐるぐる回転したときに、frame = CGRect なんて使わなくていいように Interface Builder のアラインパラメータを綺麗に設計する<br />
- なので、画面構成要素は極力コードで動的にじゃなくてXIBで作成する。NavigationControllerくらいは動的作成でも影響ないけど。<br />
- 基本、ステータスバーは表示した方がいい。(iOS4になってからゲーム以外でステータスバー隠すのはNGだと思ってるんだけど）<br />
- 設定メニューなど、一貫したグループのXIBファイルは分けておく（超重要）。</p>

<p><br />
で、iPad化します。手順は簡単で、</p>

<p>1. Targets から Project を選択して 「Upgrade Current Target for iPad」を選択<br />
2. Universal アプリを選択して OK</p>

<p>すると、Resources-iPad ってのができるので、中身を確認します。<br />
Main XIB ができてるはず。ただし画面サイズはiPhone サイズ。</p>

<p>で、上記の iPhone 注意点を守ってつくっていれば、これで iPad アプリ、ほぼ完成しているはずです。</p>

<p>なにしろ iPhone 用の XIB がそのまま iPad でも使えるので。<br />
しかもちゃんと設計していれば画面サイズが変更されてても大丈夫。IB万歳！</p>

<p>ただ、やはり個別にちゃんと設計したいよね、ということもあるかと思います、ていうかそうすべきなので IB の File メニューから</p>

<p>- Create iPad Version</p>

<p>を選択します。すると新しい  XIB が一つもらえて情報全部コピーされているはずです。<br />
こいつを適当な名前つけて保存して、Info.plist の Main nib file base name (iPad) に新しい XIB のファイル名を指定すればOKです。</p>

<p><br />
あとは Project > Edit Project で Targeted Device Family を iPhone/iPad に変更してください。</p>

<p>コレで完成です。</p>

<p>いや、もっとなんかあるっしょ・・・ということで、詳しくは<a href="http://developer.apple.com/jp/iphone/library/documentation/iPadHIG.pdf"> iPad Human Interface Guideline (日本語) </a>を読んでいただくとして、一番大きいのは</p>

<p>- ナビゲーションで全画面移動じゃなくて PopOver に変更したい！</p>

<p>というものかと思います。上の画面の右側に PopOver してるやつね。</p>

<p>これはドキュメント読んでもらってもいいんですが、めちゃ簡単に使えます。<br />
今まで NavigationController に push してたところを</p>

<blockquote>
		UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController: 表示したいController];<br>
		[nav setToolbarHidden: NO];<br>
		[nav setNavigationBarHidden: NO];<br>
		// これに初期コントローラーを登録してPopup表示<br>
		self.mPopoverController = [[UIPopoverController alloc]initWithContentViewController: nav];<br>
		[self.mPopoverController presentPopoverFromBarButtonItem:起動元のButtonItem<br>
                                   permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];<br>
		[nav release];<br>
</blockquote>

<p><br />
って変更すればOKです。<br />
なお、mPopoverController を self. で保持している理由ですが、（これは保持してなくてもいいんですが）ユーザーアクションじゃなくてプログラム的にPopOverを消去したいときにポインタ持ってないとPopOver消せないので保持しています。</p>

<p><br />
ツイキャスビュワーの場合、設定メニューとかが PopOver になってるんですが、これ、猛烈に便利な点は横320pxデフォルトなんで、iPhoneのXIBリソースがそのまま使えます。</p>

<p>ツイキャスビュワーだと設定メニューは XIB分けてるので、それをそのまま流用すればおｋ。つまり、XIBもコードも一切いじることなく、テストもほぼ不要で PopOver の設定メニューが完成します。</p>

<p><br />
あ、あとちょっとはまりそうなところというかポイントだけ。</p>

<p>【iPad化にあたり】</p>

<p>- ステータスバーを隠すとか、ナビゲーションバーを隠すというギミックは極力使わない。<br />
  (ステータスバーは、画面の回転とアラートの向きがずれる可能性があるし、ナビゲーションバーは再表示したときにうまく機能しないことがある）<br />
- ヒューマンインターフェースGuidelineは、ガイドラインなので、あまり真剣に悩まない。ボタン類とか、画面上部推奨されてるけど明らかに下にあるほうが（親指操作できるし）便利っしょ。<br />
- PopOver使うと、下の画面がみえた状態になるので更新タイミング注意。つまりiPhoneだとViewが消えたり現れたりする時点で画面更新しておけばよかったけど、PopOver使ってる場合、たとえばPopOver内でログアウトしたら元のビューの表示もその時点で「ログアウト状態」に変更する必要がある、など。</p>

<p><br />
あ、あと最後に用意する画像。ちょい増えましたのでね。</p>

<p>【アイコン画像】</p>

<p>29x29 (設定メニュー: オプション)<br />
58x58 (iPhone4 設定メニュー: オプション)<br />
57x57 (iPhone)<br />
50x50 , 72x72 (iPad)<br />
114x114 (iPhone4 - ファイル名に @2xつける)<br />
512x512 (AppStore)</p>

<p>【起動画面】<br />
Default.png = 320x480<br />
Default@2x.png = 640x960<br />
Default-Portrait.png = 768 x 1004<br />
Default-Landscape.png = 1024 x 748 (※微妙に20px少ないのがポイントです）</p>

<p><br />
と、これだけ用意しておけばおｋ。</p>

<p>あとは Info.plist の Supported interface orientations (iPad) をちょろりといじればいい感じかと。詳しくは <a href="http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BuildTimeConfiguration/BuildTimeConfiguration.html">iOS Application Programming Guide: Build-Time Configuration Details</a>にて。</p>

<p><br />
以上、ご参考までに。</p>

<p>あ、よろしければ以前の記事もあわせてどーぞ。<br />
<a href="http://blog.myrss.jp/archives/2010/04/iphone_ipad.html">iPhone アプリを iPad 対応にする方法（プログラミング編） : 管理人@Yoski</a></p>

<p><br />
※ユニバーサルアプリにしたら、審査の開始も承認も早かったような気がします！</p>]]></description>
<link>http://blog.myrss.jp/archives/2010/08/3iphoneipad.html</link>
<guid>http://blog.myrss.jp/archives/2010/08/3iphoneipad.html</guid>
<category>メモ</category>
<pubDate>Fri, 20 Aug 2010 14:54:56 +0900</pubDate>
</item>
<item>
<title>フレッシュリーダー終了のお知らせ</title>
<description><![CDATA[<p>お知らせが遅くなってしまったのですが、<a href="http://www.freshreader.com/">フレッシュリーダー</a>の開発を終了することにさせていただきました。</p>

<p>- <a href="http://press.sidefeed.com/archives/2010/07/post_40.html">一部製品・サービス終了のお知らせ - サイドフィード</a></p>

<p>フレッシュリーダーについては、来年9月末まではサポートを継続しますので、今お使いいただいている方はあと１年間は普通に使っていただけます。<br />
その後は自己責任でお使いいただければと思います（クローラーオプションもその段階で停止します）。</p>

<p>※その他製品・サービスも終了するのですが、フレッシュリーダーの影響が一番大きいかと思いますので代表して。</p>

<p><br />
終了の経緯なのですが、（細かい理由はいくつもありますが）とりまとめていうと<strong>事業集中</strong>です。</p>

<p>これまで名無しベンチャーがコストをかけずに目立つために様々なサービスを連発してきましたが、そのフェーズも終わり、現状すべてのサービスのクオリティを保つことが難しくなってきました。</p>

<p>フレッシュリーダーについても、みなさまからいただく要望も多くある中、バージョンアップも満足に行えず心苦しい状態が続いていました。</p>

<p><br />
いろいろな選択肢がある中、中途半端に続けるより方針を明確にすることが重要ということで、このタイミングで製品・サービスの終了を案内させていただく次第です。</p>

<p><br />
ということで、これまで支援いただいたユーザーのみなさま、ありがとうございました＆終了にともないご迷惑おかけして申し訳ありません。</p>

<p><br />
なんか一時代の終了ということで寂しい限りですが、個人的には次のステップに上がるための手段ととらえています。これから第二幕頑張っていきたいと思いますので引き続きどうぞよろしくお願いいたします。</p>

<p><br />
---- </p>

<p>ちなみに起業したときのテーマは「ブログ・RSS・SEO」だったのですが、今のテーマは「モバイル・ソーシャル・リアルタイム」です。いやぁ、、、まだ終了すべきサービスが残っていますね・・・（続く</p>]]></description>
<link>http://blog.myrss.jp/archives/2010/08/post_168.html</link>
<guid>http://blog.myrss.jp/archives/2010/08/post_168.html</guid>
<category>お知らせ</category>
<pubDate>Thu, 05 Aug 2010 21:49:53 +0900</pubDate>
</item>
<item>
<title>iOS4のバックグラウンド処理とiPadの微妙な関係</title>
<description><![CDATA[<p>iOS4 からマルチタスクがサポートされ、これにより現在申請中のツイキャス最新版では、「バックグラウンドでライブ配信」ができるようになります。</p>

<p><a href="http://blog.myrss.jp/IMG_0015.PNG"><img alt="IMG_0015.PNG" src="http://blog.myrss.jp/IMG_0015-thumb.PNG" width="320" height="480" /></a><br />
こんな感じでライブ配信中もブラウザ見たりできますよ、と。</p>

<p><br />
iOS4なにそれ？美味しいの？って思ってたんですが、バックグラウンドで配信できる便利さは凄いです。<br />
初めて iOS4 バンザイ！って思いましたｗ</p>

<p><br />
で、これを実現するためのメモを残しておきます。ま、大したことないんですけどね。（ていうかちゃんと審査通るかどうかが心配・・・）</p>

<p>あ、ちなみに、iOS4 だとアプリが終了せずにタスクトレイに残るからバッテリーの減りとか大丈夫？という話しもあるんですが、</p>

<p>- ステータスバーが赤くなる（上の画像のような）ケース以外では CPU は使われないから大丈夫<br />
- ただ、メモリは使われる。これは古いものから順に押し出される</p>

<p>ということで、あまり心配する必要はありません。<br />
ただ、アプリが終了せず継続されるということで</p>

<p>- メモリリークしてるようなアプリは大丈夫？</p>

<p>という疑問が残ります。で、メモリリークしてるアプリについては、起動するたびに使うメモリが増えてしまうので最終的には「残念」な結果になります。</p>

<p>メモリリークしてるから使ってはいけないアプリ、的なリストがあればいいんですけどね・・・現時点では開発者を信じるしかありません。</p>

<p><br />
■バックグラウンドでプロセスを残すには</p>

<p>いくつか方法があるのですが、一番多いパターンは「音楽を再生または録音」しているケースです。</p>

<p>この場合は</p>

<p>- Info.plist のマルチタスク記述に App Plays Audio をセットするだけ</p>

<p>で対応が完了します。驚くほど簡単で便利。</p>

<p>で、これによりアプリが切り替わっても（音楽の再生または録音中なら）バックグラウンドで処理を続けます。ただ、カメラなどは落とされるので、ツイキャスでもバックグラウンドで処理している場合は「音声のみ」の配信になります（映像はストップ）。</p>

<p><br />
■音楽はどうやって再生すればいいのか</p>

<p>で、問題はどうやって音楽を再生すればいいのか、です。</p>

<p>WWDCの資料とかでは AVFoundation → AVSession を使うことが推奨されていますが、<strong>これを使ってしまうと iPad で動きません</strong> (OSが古いから)</p>

<p>で、レガシーな AudioQueue または OpenAL を使うことになります。<br />
ポイントは、AudioQueue や OpenAL を使っても「バックグラウンド動作は有効」になるという点ですね。なーんだ、AVSession 使わなくてもよかったんだ、と。<br />
（デバイスの処理をみてるんですかね）</p>

<p><br />
■iPad の微妙な関係</p>

<p>さて、そこでずぼらな私は「iPad は iPhone シミュレーションモードで動けばいいや」と思うわけです。</p>

<p>そこで、iOS4 でアプリを開発し、Deployment  OS を 3.2 と指定します。<br />
これにより iPad では動くけど iOS4 以前の iPhone じゃ動かないからめでたしめでたし！</p>

<p>・・・・と思ったのですが、残念ながら、この設定では Apple がアプリを受け付けてくれません。<br />
iPhone 用のアプリなら、3.1 か 4.0 を Deployment Target に指定しろ、というわけです。<br />
でも 4.0 を指定してしまったら iPad では動きません。</p>

<p>むむむ、、、、ということで仕方なく 3.1 を指定し、OS のバージョンによって処理を振り分けるコードを追加することになります。<br />
まぁ、冷静に考えてみれば iPad の iPhone モードだと OS は 3.1.3 なわけで、3.2 で提出できたとしても iPad では動かないんですけどね(実は純粋な 3.1.3 じゃないんだけど)。</p>

<p>まぁ、iPad で動かしたいなら、ちゃんとユニバーサルバイナリにしなさい、ってことなんでしょうかね。</p>

<p></p>

<p>と、そんな感じで iOS4 結構便利。</p>

<p><br />
ツイキャスも、七夕の日に申請したので、うまくいけば１週間ほどで公開されると思います。</p>

<p>そしたら試してみていただければ、と思います＞iOS4なみなさま。</p>

<p><br />
<a href="http://itunes.apple.com/jp/app/twitcasting-live/id352756035?mt=8">ツイキャス(ライブ)</a></p>

<p><a href="http://itunes.apple.com/jp/app/twitcasting-viewer/id365235835?mt=8">ツイキャス(ビューワー)</a> (こっちはまだマルチタスク対応してません)</p>

<p></p>

<p>※バックグラウンドで動作している最中に、他のアプリが音楽の再生や録音を開始するとバックグラウンドで動いているアプリは停止してしまいます。これは iOS4 の仕様ですので、どうしようもありません。なお、ツイキャスではこの状態でも 約20 秒以内にアプリに戻ればライブ配信を継続することができるようになっています。</p>]]></description>
<link>http://blog.myrss.jp/archives/2010/07/ios4ipad.html</link>
<guid>http://blog.myrss.jp/archives/2010/07/ios4ipad.html</guid>
<category>iPhone</category>
<pubDate>Thu, 08 Jul 2010 20:04:10 +0900</pubDate>
</item>
<item>
<title>Windows から Mac に乗り換えたときのメモ</title>
<description><![CDATA[<p>先月、ついに Windows から Mac に乗り換えたので、その時のメモ。<br />
もはや既出感満点で意味はないと思うのだけど・・・万一、またやらなければいけないときのために・・・完全に自分メモです。</p>

<p><br />
■もともとの環境</p>

<p>- Windows マシンに VMWare Server いれて CentOS <br />
- Mac は iPhone アプリ開発用。</p>

<p>これらを統合してひとつの Mac にしたい！</p>

<p><br />
■手順</p>

<p>- Macの移行は TimeMachine 使ってたので驚くほど簡単。まずこちらから。<br />
- BOOTCAMP で Windows 用パーティション作成する。<br />
- BOOTCAMP に Windows 入れる<br />
- Mac パーティション分割して CentOS 用のパーティション作る<br />
- CentOS コピーして完了(VMWare Image)</p>

<p>■ポイント箇条書き</p>

<p>- BOOTCAMP いれることで、Windowsのライセンス問題はクリア<br />
- OEM版だと、結局 Microsoft に電話することになるんだけどパッケージ版なら電話不要<br />
- で、Mac で Windows 使うために VMWare じゃなくてフリーの VirtualBox を選択。快適。<br />
- VirtualBox でも BOOTCAMP のWindowsイメージをそのまま Mac 環境で起動させることができる<br />
- ただし、起動時には BOOTCAMP ドライブの eject と chmod 666 /dev/disk0s4 (かな、環境により異なる) が必要になる<br />
- CentOS は、さらに Mac 用のパーティションを分割して、そこに作成。これにより Windows を BOOTCAMP で起動したときにも CentOS 動かせるようになる(Macの領域は Winから参照できない)<br />
- CentOS の領域は FAT で作成し、Windows 側で NTFS に変換するのが便利<br />
- Snow Leopard から NTFS 読み書きできるようになった<br />
- なお、３番目のパーティションは先につくってしまうと BOOTCAMP いれられなくなるので注意。<br />
- ちなみに VirtualBox では VMWare のディスクイメージをそのまま起動できるので、VMWare のファイルコピーするだけでOK<br />
- Windowsはシステム移行ツールでさくさくって移行、ってのは期待薄。結局うまく移行できずに手動で全部手動セットアップ<br />
- Windows のフォントはそのまま Mac に移行できるからドロー系ツールの移行もオッケー</p>

<p> <br />
■その他、Tips</p>

<p>- キーボードのバインディングは KeyRemap4Macbook 最強。<br />
- Mac には DEL と BS のキーがない（deleteのみ) なので、DVD の Eject ボタンを DEL に割り当てる。<br />
- Windows 側は AppleKbWin いれておけばキーバインディングなんとかなる。<br />
- Windows と Mac で日本語変換統一したかったので、両方でつかえる Google IME いれる</p>

<p><br />
■移行してから思ったこと</p>

<p>- Windows も使えるからいいや、って思ったけど、移行したら「いかに これを Windows じゃなくて Mac で処理するか」ってことに思考が傾く。<br />
- メーラーとか、最初は Windows で使ってたけど、不便だからすぐに Mac のメーラーに移行した。<br />
- Virtual Box や VMWare で動かす Windows、単発アプリなら使えるけど、ウィンドウが増えてきたらもう全然重くてダメ。<br />
- いざというときは BOOTCAMP で Windows 起動すればいいや、って思ってたけど、そんな面倒なこと絶対しない。<br />
- Mac はテキスト編集系のいいアプリが「無料」でころがってなくて苦労<br />
- Windows ７ 意外によくできてるよね？<br />
- でも、Mac のこのスリープから最速で復帰するあたりが最高すぎてWindowsには戻れない</p>

<p></p>

<p>という感じでしょうか。って全然自分メモで何の役にもたたないと思いますが、一応残しておきます。</p>

<p>あ、ちなみに Mac は Mac Book Pro 15" SSD 256GB モデルです。<br />
SSD じゃなかったら Windows 起動すらしなかったかも。</p>]]></description>
<link>http://blog.myrss.jp/archives/2010/07/windows_mac.html</link>
<guid>http://blog.myrss.jp/archives/2010/07/windows_mac.html</guid>
<category>メモ</category>
<pubDate>Thu, 08 Jul 2010 15:38:17 +0900</pubDate>
</item>
<item>
<title>[iPhone][AVFoundation] AVCaptureOutput のメモ</title>
<description><![CDATA[<p><br />
自分専用メモなんで、意味不明かと思いますが是非スルーの方向で。</p>

<p>iOS4 からカメラのフレームバッファをキャプチャすることができるようになったんですが、その取扱がちーと面倒。</p>

<p>で、たまったバッドノウハウ忘れないようにメモ。</p>

<p>- kCVPixelBufferPixelFormatTypeKey</p>

<p>これは基本 kCVPixelFormatType_32BGRA が扱いやすい。iPhone 3G でもOK。あと使うのは YUV ですかね。420v ならモノクロ・フレームバッファも取りやすい。</p>

<p><br />
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection</p>

<p>指定したフレームレートベースでこのdelegateメソッドが呼ばれる。すげー便利。<br />
比較的安定して呼び出し時間を守ってくれるので、あとはパフォーマンスとの戦い。</p>

<p>これは GCD のキューから呼び出される形となるので UIKit と連携するケースなどは別途 MainThread に情報を渡してやる必要がある。<br />
つまり中間バッファが必要。</p>

<p>が、iPhone 4 だと 1280x720 の BGRA とかまでサポートしてるので、ピクセルバッファだけで 3MB を超えてしまう。</p>

<p>で、さて、このピクセルバッファを非同期で処理するためにどっかに格納しようかと思うんだが・・・ここでいろいろ問題発生。</p>

<p><br />
ピクセルバッファは CVPixelBufferRetain で Retain できるので、とりあえず Retain しとけばいいや、と思いきや iPhone 3G さんがそれを許してくれない。<br />
具体的には、Video の PreviewLayer のフレームレートが極端に落ちるなどの影響がでて結構耐えられない状況になる。</p>

<p>あ、ちなみに Retain する前に  CVPixelBufferLockBaseAddress でロックも必要です。</p>

<p><br />
じゃぁ、というわけで ピックセルバッファをコピーすることになるんだけど、late copy するために vm_copy かけときゃいいや、と思いきや iPhone 3G さんがそれを許してくれない。<br />
具体的には iPhone 3G さんだけ vm_copy 動かない。</p>

<p>まじで！？memcpy すんの？iPhone 3G 捨てるか？という選択に迫られるわけです・・・。</p>

<p>ただ、どの処理にせよ、iPhone 3G のサポートしている 400x304 というピクセルバッファを処理するのに 0.05秒はかかる。10fps 出すにはすべての処理を 0.1 秒以内に収めないといけないので、バッファをごにょごにょ処理するのは避けたいところ・・・</p>

<p><br />
しかも、iPhone 3G だけは BGRA のアルファチャンネルをサポートしてないらしく、カラースキームにアルファチャンネルを指定すると BitmapContext で CGImage に戻せないという問題もあり、うーむ、なんだかなぁ、と。</p>

<p><br />
と、そんなわけで、超ローテクな方法でしか対応はできないので、できるだけこの dispatch_queue の中で処理を完結させるように書かないとね、という結論でした。</p>

<p><br />
あぁ、完全に意味不明だけど、書いとかないと自分で同じ間違い繰り返しそうだったのでメモのこしときます。。。</p>

<p><br />
あ、その他メモ：</p>

<p>- Front カメラと Rear カメラは同時には起動できない<br />
- フレームバッファをキャプチャしながら同時にムービーを録画、もできない<br />
- その回避策として AVWriter があったんだけど iOS4 beta3 で削除されちゃったからもう無理<br />
- H.264エンコーダー、ハードウェアで対応してるはずなんだけど API は公開されてないから使えない<br />
- 別プロセスで音楽を流すのはできるんだけど、マイクを拾い出した瞬間、音楽配信してたプロセスは強制終了される。</p>

<p><br />
それと、超マニアメモ：CVPixelBufferRef に入っている情報。結構いろんな情報が取れる(iPhone4)</p>

<p>&lt;&nbsp;CVPixelBufferRef&nbsp;0x1e3d60&nbsp;width=480&nbsp;height=360&nbsp;bytesPerRow=1920&nbsp;pixelFormat=BGRA&nbsp;attributes=&lt;CFBasicHash&nbsp;0x1b1180&nbsp;[0x3e143d5c]&gt;{type&nbsp;=&nbsp;immutable&nbsp;dict,&nbsp;count&nbsp;=&nbsp;1,<br />
entries&nbsp;=&gt;<br />
	1&nbsp;:&nbsp;&lt;CFString&nbsp;0x3e53cce4&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;PixelFormatDescription&quot;}&nbsp;=&nbsp;&lt;CFBasicHash&nbsp;0x1b42e0&nbsp;[0x3e143d5c]&gt;{type&nbsp;=&nbsp;immutable&nbsp;dict,&nbsp;count&nbsp;=&nbsp;7,<br />
entries&nbsp;=&gt;<br />
	0&nbsp;:&nbsp;&lt;CFString&nbsp;0x3e53cc54&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;CGBitmapContextCompatibility&quot;}&nbsp;=&nbsp;&lt;CFBoolean&nbsp;0x3e144788&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;true}<br />
	1&nbsp;:&nbsp;&lt;CFString&nbsp;0x3e53ceb4&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;FillExtendedPixelsCallback&quot;}&nbsp;=&nbsp;&lt;CFData&nbsp;0x1b7a90&nbsp;[0x3e143d5c]&gt;{length&nbsp;=&nbsp;12,&nbsp;capacity&nbsp;=&nbsp;12,&nbsp;bytes&nbsp;=&nbsp;0x000000004594413300000000}<br />
	8&nbsp;:&nbsp;&lt;CFString&nbsp;0x3e53ce34&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;BlackBlock&quot;}&nbsp;=&nbsp;&lt;CFData&nbsp;0x1a96f0&nbsp;[0x3e143d5c]&gt;{length&nbsp;=&nbsp;4,&nbsp;capacity&nbsp;=&nbsp;4,&nbsp;bytes&nbsp;=&nbsp;0x000000ff}<br />
	9&nbsp;:&nbsp;&lt;CFString&nbsp;0x3e53ce94&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;CGBitmapInfo&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1bace0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+8196,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt32Type}<br />
	10&nbsp;:&nbsp;&lt;CFString&nbsp;0x3e53cc64&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;CGImageCompatibility&quot;}&nbsp;=&nbsp;&lt;CFBoolean&nbsp;0x3e144788&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;true}<br />
	11&nbsp;:&nbsp;&lt;CFString&nbsp;0x3e53cda4&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;PixelFormat&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x197650&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+1111970369,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt32Type}<br />
	12&nbsp;:&nbsp;&lt;CFString&nbsp;0x3e53ce24&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;BitsPerBlock&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1ab9b0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+32,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt32Type}<br />
}</p>

<p>}<br />
&nbsp;propagatedAttachments=&lt;CFBasicHash&nbsp;0x1e3e80&nbsp;[0x3e143d5c]&gt;{type&nbsp;=&nbsp;mutable&nbsp;dict,&nbsp;count&nbsp;=&nbsp;4,<br />
entries&nbsp;=&gt;<br />
	1&nbsp;:&nbsp;&lt;CFString&nbsp;0x1da590&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;MetadataDictionary&quot;}&nbsp;=&nbsp;&lt;CFBasicHash&nbsp;0x1e3890&nbsp;[0x3e143d5c]&gt;{type&nbsp;=&nbsp;immutable&nbsp;dict,&nbsp;count&nbsp;=&nbsp;29,<br />
entries&nbsp;=&gt;<br />
	0&nbsp;:&nbsp;&lt;CFString&nbsp;0x1da5d0&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;ExposureTime&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e33e0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+0.08316987826086956470,&nbsp;type&nbsp;=&nbsp;kCFNumberFloat64Type}<br />
	1&nbsp;:&nbsp;&lt;CFString&nbsp;0x1da5f0&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;ISOSpeedRating&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e33f0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+419,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	3&nbsp;:&nbsp;&lt;CFString&nbsp;0x1da610&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;Fnumber&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e3400&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+2.79999999999999982236,&nbsp;type&nbsp;=&nbsp;kCFNumberFloat64Type}<br />
	4&nbsp;:&nbsp;&lt;CFString&nbsp;0x1da630&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;sensorDGain&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e3410&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+256,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	5&nbsp;:&nbsp;&lt;CFString&nbsp;0x1da650&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;AGC&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e3420&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+1464,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	6&nbsp;:&nbsp;&lt;CFString&nbsp;0x1da660&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;AEAverage&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e3430&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+169,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	7&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3110&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;AFStable&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x10cce0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+1,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt32Type}<br />
	8&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3130&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;TemporalMotion&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e3880&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+237247,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	9&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3150&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;ShutterSpeedValue&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e3450&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+3.58779506948601589755,&nbsp;type&nbsp;=&nbsp;kCFNumberFloat64Type}<br />
	10&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3170&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;FullyExposed&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x10cce0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+1,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt32Type}<br />
	11&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3190&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;ExposureBias&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e3460&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+0.0,&nbsp;type&nbsp;=&nbsp;kCFNumberFloat64Type}<br />
	12&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e31b0&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;AWBRGain&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e3470&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+133,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	13&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e31d0&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;OverflowOccurred&quot;}&nbsp;=&nbsp;&lt;CFBoolean&nbsp;0x3e144790&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;false}<br />
	14&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e31f0&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;FocalLength&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e3480&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+3.85000000000000008882,&nbsp;type&nbsp;=&nbsp;kCFNumberFloat64Type}<br />
	15&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3210&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;AWBGGain&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e3490&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+64,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	16&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3230&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;ApertureValue&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e34a0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+3.00000000000000000000,&nbsp;type&nbsp;=&nbsp;kCFNumberFloat64Type}<br />
	17&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3250&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;SensorID&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e34b0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+13904,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	18&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3270&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;SNR&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e34c0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+35.13407451801569436611,&nbsp;type&nbsp;=&nbsp;kCFNumberFloat64Type}<br />
	19&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3280&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;OneFrameAEMode&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x10cce0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+1,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt32Type}<br />
	20&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e32a0&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;CurrentFocusPosition&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e34d0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+186,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	22&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e32c0&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;AEStable&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x10cce0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+1,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt32Type}<br />
	27&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e32e0&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;ispDGain&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e34e0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+256,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	28&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3300&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;AWBBGain&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e34f0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+198,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	30&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3320&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;FocusScoresArray&quot;}&nbsp;=&nbsp;&lt;CFArray&nbsp;0x1e3550&nbsp;[0x3e143d5c]&gt;{type&nbsp;=&nbsp;immutable,&nbsp;count&nbsp;=&nbsp;5,&nbsp;values&nbsp;=&nbsp;(<br />
	0&nbsp;:&nbsp;&lt;CFNumber&nbsp;0x1e3500&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+4835,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	1&nbsp;:&nbsp;&lt;CFNumber&nbsp;0x1e3510&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+5044,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	2&nbsp;:&nbsp;&lt;CFNumber&nbsp;0x1e3520&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+5486,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	3&nbsp;:&nbsp;&lt;CFNumber&nbsp;0x1e3530&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+5670,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	4&nbsp;:&nbsp;&lt;CFNumber&nbsp;0x1e3540&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+189347,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
)}<br />
	33&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3340&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;AFStatus&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x10ccf0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+2,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt32Type}<br />
	34&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3360&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;AELimitsReached&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x10e3a0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+0,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt32Type}<br />
	37&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3380&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;FocusPeakSumArray&quot;}&nbsp;=&nbsp;&lt;CFArray&nbsp;0x1e35d0&nbsp;[0x3e143d5c]&gt;{type&nbsp;=&nbsp;immutable,&nbsp;count&nbsp;=&nbsp;5,&nbsp;values&nbsp;=&nbsp;(<br />
	0&nbsp;:&nbsp;&lt;CFNumber&nbsp;0x1e3580&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+8103,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	1&nbsp;:&nbsp;&lt;CFNumber&nbsp;0x1e3590&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+8217,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	2&nbsp;:&nbsp;&lt;CFNumber&nbsp;0x1e35a0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+8342,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	3&nbsp;:&nbsp;&lt;CFNumber&nbsp;0x1e35b0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+8461,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
	4&nbsp;:&nbsp;&lt;CFNumber&nbsp;0x1e35c0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+24617,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt64Type}<br />
)}<br />
	38&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e33a0&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;BrightnessValue&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x1e3600&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;-0.40476958246484440185,&nbsp;type&nbsp;=&nbsp;kCFNumberFloat64Type}<br />
	39&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e33c0&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;AWBStable&quot;}&nbsp;=&nbsp;&lt;CFNumber&nbsp;0x10cce0&nbsp;[0x3e143d5c]&gt;{value&nbsp;=&nbsp;+1,&nbsp;type&nbsp;=&nbsp;kCFNumberSInt32Type}<br />
}</p>

<p>	4&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e37f0&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;CVImageBufferChromaSubsampling&quot;}&nbsp;=&nbsp;&lt;CFString&nbsp;0x1e3a20&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;4:2:0&quot;}<br />
	5&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3820&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;CVImageBufferChromaLocationTopField&quot;}&nbsp;=&nbsp;&lt;CFString&nbsp;0x1e3a30&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;Center&quot;}<br />
	6&nbsp;:&nbsp;&lt;CFString&nbsp;0x1e3850&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;CVImageBufferChromaLocationBottomField&quot;}&nbsp;=&nbsp;&lt;CFString&nbsp;0x1e3a30&nbsp;[0x3e143d5c]&gt;{contents&nbsp;=&nbsp;&quot;Center&quot;}<br />
}<br />
&nbsp;nonPropagatedAttachments=&lt;CFBasicHash&nbsp;0x1d1f70&nbsp;[0x3e143d5c]&gt;{type&nbsp;=&nbsp;mutable&nbsp;dict,&nbsp;count&nbsp;=&nbsp;0,<br />
entries&nbsp;=&gt;<br />
}<br />
&nbsp;iosurface=0x0&gt;</p>]]></description>
<link>http://blog.myrss.jp/archives/2010/07/iphoneavfoundat.html</link>
<guid>http://blog.myrss.jp/archives/2010/07/iphoneavfoundat.html</guid>
<category>メモ</category>
<pubDate>Sat, 03 Jul 2010 20:46:53 +0900</pubDate>
</item>
<item>
<title>WWDC 2010 に参加してきた率直な感想</title>
<description><![CDATA[<p>さて、今月初めのAppleのイベント、WWDCに参加してきたので、そのメモを残しておきます。内容についての記述はほとんどありませんｗ</p>

<p><a href="http://picasaweb.google.com/lh/photo/ERPY-poifrcFj1BfZP63TAkArISTn4ETWomp_7nblVI?feat=embedwebsite"><img src="http://lh5.ggpht.com/_eaI5_l5CKho/TB8CttEzuDI/AAAAAAAAEcg/GIfQCKUFuPY/s400/P1130313.JPG" /></a></p>

<p>で、そもそもWWDCに参加する目的なんですが、「一度行ってみるか！」というくらいな感じでした。<br />
もちろん、アプリの審査に不明瞭なことが多すぎるので実際に聞いてみて感じを得ようとか、あわよくばAppleの中の人と仲良くなっていろんな問題を先回りして質問できるパイプを作りたい、という目的もあったのですが、、、そもそもメインの渡米目的別のところ（カリフォルニアの運転免許証を更新したいとかｗ）にあったので、WWDCはついでといえばついででした（日程がドンピシャじゃなかれば行ってなかったかと）。</p>

<p>何しろ初日の Steve Jobs のプレゼンの日も、会場入りする人の列が終わる（最後尾が入るまで待って）から入館した上に、自分が Steve Jobs のいない控え室に通されたことも気づかずに（あふれた人たちは控え室でライブ放送を見る仕様・・・）「Jobsマダー？」とかふざけたことを思っていたくらいですから・・・</p>

<p><br />
で、いきなりまとめですが、私の感想としては</p>

<p> - WWDC は想像以上に内容が盛りだくさんで有意義ではあった<br />
 - でももう当面参加することはないと思う</p>

<p>という感じですかね。</p>

<p>内容については、なにしろ iPhone 4 と iOS4 が発表され、OSもハードも新しくなり、しかもそのリリースが3週間後とかまったくもってついて行けない状態からのスタートでしたので、WWDCに出ることで他のデベロッパーに比べて２週間ほど早くいろんな情報を収集できるのは、早く新しいバージョンのアプリをリリースできるという意味においては有利だと思います。</p>

<p>ですが、そもそも実機がないと試せないことも多く、結局 iOS4 対応を iPhone 4 が出るまで見送るという判断をしたので(*注1) 私にとってはそれほど有利になるものではありませんでした。</p>

<p>サブ目的の、Appleエンジニアに実際の問題を相談するというものですが、これは WWDC のセッションと並行して「ラボ」というものが用意されており、このラボに参加することで個別の問題をエンジニアと相談することができるようになっています。</p>

<p>で、私も何時間かエンジニアに相談事リストをぶつけていろいろ聞いたのですが・・・これがまた微妙といえば微妙で、</p>

<p>- エンジニアはたくさんいるけど、正確なアドバイスをくれるのは「エバンジェリスト」と呼ばれるコアな人のみ<br />
- コアな人なかなかつかまらない上に、本当に具体的な問題をピンポイントで聞かないといけない<br />
- で、多くのエバンジェリストな人はDeveloper Forumでも答えてくれたりするので、そちらで用が足りることも多い。<br />
- ていうか、エバンジェリストじゃない人と話すなら Developer Forum で聞いたほうが正確な答えがもらえるぜ</p>

<p>というのが私の感想。まぁ、3G回線特有の問題とか、ライブストリーミング特有の問題とか、実際に「実験」してみないとわからないことが多いので、質問が厳しいといえば厳しいのですが・・・。</p>

<p><br />
そして、セッション。</p>

<p>実際、セッションは大量にあり、面白いものからそうでないものもいろいろありますが（プレゼン自体は全体的にかなりレベル高いです、てかなんでみんなこんなにプレゼンうまいの？）、多くは実際のコードを用いて説明してくれます。</p>

<p>巨大スクリーンに映してくれるのですが、会場もドでかいため、コードが見えないことも多く・・</p>

<p>しかも２週間後には WWDC の全セッションは<strong> iPhone デベロッパー全員に Podcast で配信される</strong>というなんてこったい（知らなかったぜ）！みたいなものもあり、正直現地のセッションにでなくても Podcast 見ている方が情報も正確だし必要なとこ以外はスキップできるから良くね？と思いました。（なお、新しい開発環境 XCode4 についてはWWDC出席者にしか情報配布されてません。が、これはまぁ、未完成過ぎるのでどうでも・・・）</p>

<p><br />
ということで、生Jobsを見るために WWDC に参加する！というのもアリかとは思いますが、私にとっては「来年はもういいかな」いうのが私の率直な感想だったりします。</p>

<p>まとめると：</p>

<p>- セッション -> Podcast で十分<br />
- ラボ -> Developer Forum で十分<br />
- Jobs -> 元気そうでよかった</p>

<p>・・・われながらひどいまとめだｗ</p>

<p>＃もちろん、人それぞれ目的があると思うので、個人的な感想ですけどね。。。</p>

<p><br />
あ、それから感じたこと、もうすこしだけ箇条書きで。</p>

<p>- WWDCに参加しているというのに iPhone 4を見ることも許されなかった。これはたまらんｗ<br />
- エンジニア向けのセッションが多いわりには年齢層が高めなのがとても気になった。<br />
- まぁ、これだけのものなら15万円するわなぁ、とも思うけど、だんだんApple信者としてのお布施みたいに感じてきたｗ<br />
- Google なら値段 1/10 でおみやげとして全員に iPhone 4 くれるのにｗ</p>

<p>と、そんなところです。</p>

<p>ま、何かの参考になれば。というか iPhone 4 いつ手にはいるんだろう・・・iPhone 4 ゲットしないとまったく開発できないんだけど・・・。ぐおー</p>

<p><br />
----<br />
(注1)<br />
NDAに抵触しないと思うので書いておくと、iPhoneアプリ、同じソースコードでも 新しい iOS4 のコンパイラでコンパイルすると、旧バージョンとの互換性をなくし、新しいバージョンのアプリとして動作します。<br />
つまり、グラフィック系(CoreGraphics や OpenGL)を使っているアプリは適切にコードを書きなおさないとiPhone 4の高精細ディスプレイで正しく表示されなく可能性がでてきます。</p>

<p>iPhone 4の高精細ディスプレイでも正しく表示されることを保証する方法は現時点では３つ。</p>

<p> 1. iOS4でコンパイルしない（下位互換性が保たれ iOS4 や iPhone 4でも正しく表示される）<br />
 2. iOS4でコンパイルして iPhone 4 の実機でテストする（現時点では無理）<br />
 3. 男は度胸（女性でも可）でシミュレーターを信じる（ただしカメラや公認非公開APIを使っていると動作しないから死亡）</p>

<p>ということで、私は iPhone 4 の実機を手にするまで iOS4 版はリリースしないという結論に達しました。iPhone 3GS で動いても iPhone 4 で動かない可能性は大いにあるので。</p>

<p>はやく iPhone4 が欲しい・・・・！</p>

<p><br />
<a href="http://picasaweb.google.com/lh/photo/Af2DQbI5IMsXgAc-pBjozwkArISTn4ETWomp_7nblVI?feat=embedwebsite"><img src="http://lh5.ggpht.com/_eaI5_l5CKho/TB8GMbxM3aI/AAAAAAAAEc0/YW2UMMLdUCc/s400/IMG_0295.jpg" /></a><br />
</p>]]></description>
<link>http://blog.myrss.jp/archives/2010/06/wwdc_2010.html</link>
<guid>http://blog.myrss.jp/archives/2010/06/wwdc_2010.html</guid>
<category>メモ</category>
<pubDate>Mon, 21 Jun 2010 14:56:07 +0900</pubDate>
</item>
<item>
<title>隣席の女性が泥酔して(私が)プレミアシートにアップグレードされた話</title>
<description><![CDATA[<p>ちょｗ、Vaio ⇒ Mac 移行のために整理してたら変なメモでてきたｗ</p>

<p>大した話しじゃないんですが、なんとなく晒しときます。<br />
（一年程前のメモです）</p>

<p><br />
---</p>

<p>サンフランシスコからの帰りの飛行機、最近の傾向らしいのですがビジネスシートはガラガラ、エコノミーシートは満席という状態で、私はエコノミー三人がけの窓側。(いつも窓側がお気に入り)</p>

<p>で、隣席（つまり3人がけの真ん中）にアメリカ人の女性（メガネっ娘風）がやってきたのですが、着席するなりケータイで話しだして（もちろん厳禁）アテンダントに注意されてもなかなか電話を切らないという状態からスタート。</p>

<p>これはちょっと楽しめるかもと思いながら、離陸時は（いつもそうなんすが）私はそのまま寝てしまい、小一時間で起きてみると隣席はすでにワインをぐいぐいやってました。<br />
ちなみにこの時点でまだ機内サービスは始まってませんｗ。</p>

<p>食事までの間、Mac でなにやら作業しはじめたのですが、チラりと目に入ったデスクトップのカオス状態がwktk感を高めてくれます。</p>

<p>そしてドリンクサービスのカートが通るたびにワインのボトルをゲットして、かなりいい感じにできあがってきたようで・・・。<br />
＃ボトル4,5本くらいですかね。ごくごくいってました。</p>

<p><br />
で、寝始めた頃には靴履いたままの足を（私の）前席のシートの上に乗っけるという荒業まで繰り出す状態にw。</p>

<p>個人的にはこのありえない状況を何故か微妙に楽しんでいたのですが、しばらくするとアテンダントが注意しに飛んできました。が、例のごとく聞く耳持たず・・・。</p>

<p>というか、本当に聞こえてないみたいで、「行儀悪いって言ってるよ！」と教えてあげるとすんなり小さく丸まって寝だしました。</p>

<p><br />
が、その後ふらりと立ち上がりどこかに行くこと15分くらい。<br />
・・・アテンダントが「この人、勝手にビジネスクラスで寝てたんですよ！！！」とメガネっ娘を連行してきましたｗ</p>

<p><br />
この時点でさすがにアテンダントが集まりだし、なんやら賑やかになってきました</p>

<p>座席や床もワインでどほどぼに濡れている状態であることが判明し（道理でワイン臭かったわけだw）、隣の人（通路側の人）からも素行の悪さに対する苦情が出ていたようで・・・（足上げ攻撃はもちろん、荷物の領域侵犯とかフリーダムな状況でしたから）。</p>

<p><br />
で結局アテンダントから私たち（私と通路側の方）にプレミアムシートへのアップグレードの申し出がありました。</p>

<p>私はなんか状況を楽しんでいたのと、あと3時間だけだったので、もうこのままでいいかな、と思っていたのですが強く薦められたので申し出を受けることに。</p>

<p>ただ、なんか興味でてきたので、そのときにメガネっ娘にいろいろと聞いてみました。<br />
（あまりの開放的さ加減に、一人で日本に行くなんてありえんと思ったので…）</p>

<p>曰く、日本はストップオーバーで、最終目的地はインドネシアだとのこと。なんでもインドネシアでサーフィンの大会があるらしく、彼氏がその一選手（国際的に有名な人らしい・・知ってる？って聞かれたけど全然わからない…）なのだとか。<br />
なんか話を聞いて破天荒さに妙に納得。</p>

<p><br />
ということで、この状況を説明しながら（なんか私が説明するのおかしくないか？）前方のシートに移動しました。</p>

<p>で、そこからの航空会社の対応がなんとも丁寧で、何人ものアテンダントがお詫びにこられ（ワインをだしすぎてしまったことがまずかったと）、クリーニング代請求の用紙まで用意されて・・・。</p>

<p><br />
実際、私自身はそれほど不快な感じではなかったのと、なんかこのプレミアムシート快適！という感じだったので少々恐縮しつつクリーニングとかは辞退しつつ・・・残りの3時間を快適に過ごして帰りました。</p>

<p><br />
という、まぁ、飛行機いろいろありますわなー、というメモ。サーフィン大会は無事うまくいったのだろうか。そしてワインで濡れた床とかシートとか、あのあとどうしたんだろう・・・</p>

<p><br />
てなことで今週もまたサンフランから帰国するんですが、、、今回もこんな退屈しのぎのイベントがあるといいんですけどねー・・・・などと思いつつ。</p>

<p><br />
/メモ/</p>]]></description>
<link>http://blog.myrss.jp/archives/2010/06/post_167.html</link>
<guid>http://blog.myrss.jp/archives/2010/06/post_167.html</guid>
<category>メモ</category>
<pubDate>Thu, 17 Jun 2010 05:17:31 +0900</pubDate>
</item>
<item>
<title>シンガポールについてのメモ</title>
<description><![CDATA[<p>すっかり自分の中で過去の出来事になってしまったんですが、公開しないと葬り去りそうなんで、メモ公開しときます。<br />
みんなが注目している（？）シンガポールについて。</p>

<p></p>

<p>■先に感想を</p>

<p>結論書くと、よくわかってないんですけどね。この国のこと。<br />
シンガポールにいってデモしてきた目的は、アジアの世紀(？)を見据えて起業家環境を実感しようと思ったからです。<br />
人とか環境とか。将来住むかもしれないしｗ<br />
まぁ、TechCrunch Japan の中の人に紹介してもらわなければ行ってなかったですけど...。</p>

<p>ということで、だらだらとメモ残しておきます。編集ほとんどしてません。（その上、起業に関する情報一切なしｗ）<br />
ま、ひとつの側面として興味ある人向けに。<br />
あ、主観的な情報もはいってる上に裏付けの調査もしてませんので、一部間違いとかあると思います。<br />
そのあたり流し読みで是非。</p>

<p><br />
■シンガポールの教育について</p>

<p>移民や期間ビザの人が多いんですが、シンガポール人について。興味があったので。<br />
- シンガポールには大学が３つ。<br />
- トップはシンガポール国立大学(NUS)。世界ランク18位。<br />
- 中学を出たら高校（というか大学プリスクール）みたいなところに行く。<br />
- 高校では１年目と３年目に試験があって、この成績によりどこの大学に行けるかが決まる。<br />
- 晴れて行ける大学が決まると、男子には２年間の兵役が待っている。<br />
- 成績優秀でもこの兵役から逃れることはできないので、大学生になった時点で男女には２歳の年齢差ができる。<br />
- 一応兵役中も週に２日は家に帰れるが、カメラ類の持ち込みは禁止されているなど生活にはいろいろ制約がある。<br />
- ちなみ高校まで授業料は $25SGD = 1500円ちょい/月。兵役は給料もでる。大学も安い。<br />
- なお、シンガポール人は英語と中国語の両方を学ぶので中国語話せる。図書館も半分近くは中国語の書籍だった。</p>

<p><br />
■シンガポール政府について</p>

<p>- 政府は国民の選挙によって政党が選ばれ、政党が首相を選ぶ。<br />
- 首相のパワー強大<br />
- 実は特定の政党が強すぎて実質的には選挙になっていない。<br />
- 公務員はとても給料がいい。首相だと数億円。<br />
- 軍隊（主に空軍）も給料が高い。<br />
- だからみんな政府で働きたいと考えているが雇用人数が少ないので競争も激しい。<br />
- この公務員争奪競争は例の大学入学時のグレードとかで決まる（成績至上主義？熾烈だ・・）<br />
- Taxが低い(消費税7%?)ので公務員の給料が高すぎ！って日本みたいに不満に思っている人は少ないらしい<br />
- でも政府により管理されていることに不満をもっている人も話した中にはちょろちょろいたからよくわからん<br />
- ちなみに給料高いといっても初任給で 5000SGD くらい = 35万円弱</p>

<p><br />
■所有権について</p>

<p>- 土地と車は高い。<br />
- 買える土地は場所が制限されている。300平米で５億円とか結構高い。<br />
- アパートは97%が政府所有になっていて、それを買うことができる。（この辺仕組み不明すぎて間違ってるかも）<br />
- 100平米のアパートで3000万円くらい。<br />
- 居住区は決められていて、中心街から離れたところにベッドタウンがあり、みんなそこから通う。<br />
- 車は高い。カローラクラスでも３００万円くらい。あ、５００万円だったけな？まぁ、そのくらい誤差ってことで。<br />
- 品質高いのは日本車と韓国車。高級車といえばBMW。</p>

<p><br />
■生活について</p>

<p>- 国土が狭い上に都市機能が完全に整備されているので遊ぶ場所があまりない。<br />
- 学生はみんな家でパソコンしてるかテレビ見てるよ、とのことでそりゃ君だけだろうかと思ったけど本当にそうでもない感じ。<br />
- ちなみにパソコン=Facebook。Facebook最強。<br />
- 大人の楽しみは食事とショッピング（ステレオタイプ過ぎると思うが・・・）<br />
- ということなんだけど、確かに食事するところとショッピングするところは異常に充実している。<br />
- 熱い、とにかく暑い。３月とか涼しいよっていってたけど、よく聞くと雨が降るからとか、それありえん。<br />
- 暑すぎて自転車に乗ってる人いない。全くいない。<br />
- 食事安すぎ。うますぎ。タクシー安すぎ。<br />
- あちこち工事大杉。どこもかしこも工事。<br />
- そして工事している人をみると、みんな共通の人種だとわかる。シンガポール人ではない。そう、ここは・・・<br />
- 関係ないけどチューインガムの販売が法律で禁止されてる</p>

<p>■その他、雑多なメモ</p>

<p>- インターネット遅い。マジで遅い。ホテルだけかと思ったけど、biopolis という政府の最新鋭設備でも遅かった。<br />
- 3Gでのデータ通信は日本より快適に感じた。<br />
- シンガポールドルは現地で換金鉄則。日本円の現金最強。<br />
- クレジットカードとかより現金の方がはるかにレートがいい<br />
- ちなみに成田で 71円のシンガポールドル、現地で 65円で買えた。クレカの請求レートは70円。<br />
- Pocket WiFi もっていって M1 の定額SIM（3日で1000円ちょと）買えばネットワークには苦労しない。<br />
- シンガポールは SIM フリーなのでケータイ/スマートフォン買うといいと思うけど買うのはいろいろ難しい。<br />
- 店をまわって金額きいて、仕様も3重くらい確認して、それでも最終支払額が違ったり仕様が違ったりする上に店員がしつこいw<br />
- 政府の最新鋭研究施設、biopolis は確かに立派な施設だった。<br />
- 優秀な研究者を熱烈呼び寄せて、研究成果には熾烈なノルマを課すって噂だけど本当かいな<br />
- インドネシア人はどうして全力で握手してくるのか・・・</p>

<p></p>

<p>という感じです。メモの内容が偏ってる上に主観情報まざりすぎちょるｗ</p>

<p><br />
が、何かの参考になれば！</p>

<p><br />
<a href="http://picasaweb.google.com/lh/photo/3Eq1iKD182vdn4gAvCdm_wkArISTn4ETWomp_7nblVI?feat=embedwebsite"><img src="http://lh4.ggpht.com/_eaI5_l5CKho/TB8DbNXknoI/AAAAAAAAEcw/tvGVEhsqsSU/s400/P1130259.JPG" /></a></p>]]></description>
<link>http://blog.myrss.jp/archives/2010/06/post_166.html</link>
<guid>http://blog.myrss.jp/archives/2010/06/post_166.html</guid>
<category>メモ</category>
<pubDate>Wed, 09 Jun 2010 02:57:39 +0900</pubDate>
</item>
<item>
<title>if (a &gt; b) と if (a - b &gt; 0) は違うんです・・・</title>
<description><![CDATA[<p>あぁ、やっちまったぜ。</p>

<p>ということでたまにはプログラミング系。といっても、ツイキャスのバグを晒してるんですけどね・・・</p>

<p>えっと、</p>

<blockquote>ア. if (a > b) 
</blockquote>
と

<blockquote>イ. if (a - b > 0) 
</blockquote>

<p>は違うんですよね、、、やっちまいました。</p>

<p>これは a と b が 符号なし整数 (uint) の場合に問題がでます。<br />
符号なし整数の場合、引き算でも負数にはならないので イ のケースは<strong> a == b の場合以外常に真</strong>となります。</p>

<p>まぁ、符号なし整数を不用意に減算しちゃいけない、ってことですかね・・・</p>

<p></p>

<p><br />
で、この問題がツイキャスに潜んでいて、ある特定条件で電波状態が急に悪くなり映像を5秒間送信できなくなるとこの条件式にひっかかり電波オチすることがあります。</p>

<p>電波状態は基地局のスイッチオーバーなどでも急に変動することがあるので、、す、すいません。。。</p>

<p><br />
この問題、次のバージョンで改修されます。</p>

<p>といっても、次のバージョン、もう一週間前に申請だして、まだ審査すら開始されないんですけどね・・・</p>

<p></p>

<p>最近 Apple の審査、時間かかってるという噂なんですが、これ間にあうんかいな Twitter の認証方式切り替えまでに・・・・</p>

<p><br />
ということで、なんか最近ツイキャス切れる！という方、すいません、バージョンアップまでいましばらくお待ちください。。。</p>

<p><strong>※なお、突然切れるのではなく、配信開始直後から赤い時計が点滅しまくる場合、どうも電波のつかみが弱いことが原因のようです。iPhone を再起動することで改善することがあります。</strong></p>]]></description>
<link>http://blog.myrss.jp/archives/2010/05/if_a_b_if_a_b_0.html</link>
<guid>http://blog.myrss.jp/archives/2010/05/if_a_b_if_a_b_0.html</guid>
<category>メモ</category>
<pubDate>Fri, 28 May 2010 10:14:25 +0900</pubDate>
</item>
<item>
<title>ツイキャス・ビューワーが承認されるまでの 42 日間</title>
<description><![CDATA[<p><a href="http://itunes.apple.com/jp/app/twitcasting-viewer/id365235835?mt=8"><img alt="Default.png" src="http://blog.myrss.jp/Default-thumb.png" width="160" height="240" align="right" hspace="8" vspace="8" /></a></p>

<p></p>

<p>さて、本日「TwitCasting Viewer」という、ツイキャスのライブ配信を iPhone で閲覧できるアプリが公開されました。</p>

<p>この承認に 42 日間（途中 Reject 3回）かかったので、その記録を残しておきますね。参考までに。</p>

<p>あ、ちなみツイキャス・ビュワー、入れておくといいことありますよ。入れておくだけでいいです。立ち上げる必要ないです。いつか役に立ちます、きっとw。</p>

<p><br />
●序章： ストリーミングプロトコルの指定について</p>

<p><a href="http://blog.myrss.jp/archives/2010/04/_apple.html">以前のエントリにも書いた通り</a>、Apple の規約変更により「3G回線で映像を配信する場合、HTTP Live Streaming というプロトコルを利用する」ことが必須になりました。</p>

<p>これはすなわち、iPhone 上では Quick Time を利用しないと映像を表示できない、ということです。</p>

<p>で、アプリを投げ込んだのが 3/30、その2日後に審査が開始され 4/6 に「HTTP Live Streaming を使用していない」ことが理由で却下されました（１回目）。</p>

<p><br />
●質問を投げてみる</p>

<p>まぁ、仕方ない、HTTP Live Streaming 使うと遅延は発生するんだけど、Apple は神だから仕方ない、ということで 3G 回線のときには HTTP Live Streaming を使うように変更しました。</p>

<p>で、一言で変更といっても実はそんなに簡単ではなく、 Apple は「64kbps で音声のみ配信するというモードを必ず用意すること」を義務付けています。</p>

<p>つまり、ひとりの映像配信に対して、異なる bps のエンコーディングを並列で行う必要があり、デベロッパ側にはかなりの負担となります。<br />
指定されている H.264 というコーデックも、CPU パワーを食うものなので、ライブ配信するサービスは、結構みんな対応に苦慮しているんじゃないかな・・・。</p>

<p><br />
で、一週間程度で対応を完了し、アプリを再申請すると同時にメールで質問をなげてみました。</p>

<p>内容は</p>

<p>- ブロードキャストじゃなくて 1 to 1 での映像配信にも HTTP Live Streaming を使わなくてはならないのか<br />
- 現在 App Store に並んでいる、HTTP Live Streaming に対応していないアプリはどうなるのか</p>

<p>で、Apple 返ってきた答えは</p>

<p>- 「<strong>他に質問は？</strong>」</p>

<p>でした。いや、<strong>これ全文ですから、マジで</strong>。もう目が点になりましたよ・・・。で気を取り直して アプリを投げ込んだのが 4/15 です。</p>

<p><br />
●２度目のリジェクト</p>

<p>で、今度は 4/19 に再度リジェクトがきました。</p>

<p>このときは担当の人から電話がかかってきました。実に丁寧ですね、と思う反面、文章に残るとまずいのか？とか変なことを勘ぐりつつ・・・</p>

<p>実はテスト用に iPhone 一台ずーっと映像配信していて、その HTTP Live Streaming の URL をサンプル URL として渡していたのですが、丁度日本時間の昼間だったので「アメリカ夜だから働いてないだろ」と思って電源切ってたんですね。</p>

<p>そしたら「サンプル URL にアクセスできないんだけど」ということで電話がかかってきた、というわけです。</p>

<p>このとき、丁度いい機会だから「ちょっと質問していいか？」と尋ねたところ、いいよ、ということなのでいろいろ電話で聞きました。<br />
この辺の話しは <a href="http://twitter.com/yoski">Twitter</a> 上にも流した気がするんですが、再度書いておきますね。</p>

<p><br />
Yoski: 「HTTP Live Streaming はすべての映像配信で対応しないといけないのか」<br />
Apple: 「そのとおり」<br />
Yoski: 「ブロードキャストならわかるが、<strong>1対1の映像配信アプリでも HTTP Live Streaming が必要なのか</strong>」<br />
Apple: 「3G で配信する限り、答えは YES となる。WiFi なら問題ない」<br />
Yoski: 「HTTP Live Streaming だと遅延が発生するのでライブアプリには致命的なのだが」<br />
Apple: 「状況はよくわかる。ただ、こちらからはそれなら WiFi で対応してくれとしか言えない」<br />
Yoski: 「現在 AppStore に並んでいるアプリで HTTP Live Streaming を使っていないものも大量にあるが」<br />
Apple: 「大量に存在している点は把握している。それらは<strong>アップデートが来たタイミングで順次審査していくことになるだろう</strong>」</p>

<p>担当者の方はよい感じの人でしたけどね。</p>

<p>ということで、3G 上の映像配信アプリには厳しい状況が来るようです。Knocking Live Video とか Live Link 3G とかどうすんだ、一体。余計なお世話だけど。</p>

<p><br />
●再度 Apple とやりとり</p>

<p>さて、その後、Apple の人からまた連絡があり、どうも HTTP Live Streaming の Validator でエラーがでるから直してくれ、とのこと。</p>

<p>64kbps の 音声ストリームは mpegts というフォーマットを利用せず、 AAC フォーマットで配信していたのですが、コレに対して Validator から PRIV ID3 Tag がないという警告がでているとのこと。</p>

<p>もはやお互い意味不明なのですが、とにかく Apple のデベロッパサイドで「 Validator で警告がでるものは通さない」ということらしく、しぶしぶ ID3 タグをつけて対応。</p>

<p>「Mac OS X で利用できる HTTP Live Streaming Validator を必ず使うように」と言われ、その後もこれを使って検証。ただ、ちょっと嫌な予感が・・・</p>

<p><br />
●3回目のリジェクト</p>

<p>その後、連休明けの 5/6 に入り、再度リジェクトが入ってきました。</p>

<p>曰く、「Validator でやっぱり警告がでている」と。</p>

<p>実は HTTP Live Streaming のプレイリストは .m3u8 という拡張子を使うことが「通例」らしく、ファイル名がこの拡張子になっていないと Validator で「警告」がでるのです。</p>

<p>もちろん、技術者ならファイルの拡張子なんて飾りであって、Content-Type をちゃんと返していれば問題ない（というかそれが本筋）であることは●×△▼！！なのですが、<strong>そんな理論は通じません</strong>。（こちらは <a href="http://tools.ietf.org/html/draft-pantos-http-live-streaming-01">IETFの仕様書</a>みながら作業してるんですけどねー・・・）</p>

<p>仕方なく、プレイリストの拡張子を .php から .m3u8 に変更しました。</p>

<p><br />
●その後、ちょっと放置プレイ</p>

<p>連絡があったときに「言いたいことはわかった。１時間で拡張子変更するからすぐにチェックしてくれ」「了解。明日にはデベロッパ側でチェックする」といわれたものの、当然放置プレイなわけで、しびれをきらしてメールで連絡したら</p>

<p>「今レビューしてるよ！」</p>

<p>という連絡とともに、さくさくっと「Rejected」のステータスが「Ready for Sale」に変わりました。いやー、つついてみるもんですね・・・</p>

<p></p>

<p>●ということで、無事審査通過</p>

<p>めでたしめでたし、、、なんとか、42日間の苦闘が終了しました。ふー。</p>

<p><br />
で、今回、もう一つ懸念していたことがあり、それは「<strong>ツイキャス・ビュワーが R18指定を受けるかどうか</strong>」でした。</p>

<p>外部コンテンツを表示する多くのアプリは R18指定を受けます。Pixiv とかニコニコ動画とか、そうですよね。</p>

<p>USTREAM Viewer が事前に申請したアプリしか閲覧できないのは、この R18 指定を回避するため、という噂もあります。</p>

<p><br />
で、ツイキャスビュワーをインストールするとわかるのですが、このアプリ、ビューワーといいながら「お薦めライブ」などの表示は一切ありません。</p>

<p>そのかわり、お気に入りの人を登録しておいて、その人がライブを開始すると「<strong>プッシュ通知で</strong>」お知らせが来るようになっています。</p>

<p><br />
審査にあったっても、「予期せぬコンテンツがユーザーに表示されることを防ぐため、ライブを閲覧するにはまず自分でユーザーをピックアップする必要がある」と伝えています。</p>

<p>で、この仕様が認められて（？）、晴れて R-18 指定をまぬがれたことは、結構大きな成果かな、と思っています。（自主申告で R-12 指定にしました）</p>

<p><br />
ちなみに R-18 指定を受けると、18才未満のダウンロードが「禁止」されます。R-12 指定は 12才以上であることが「望ましい」ということになります。</p>

<p>現状、R-18 フィルタをかけている人は少ないかもしれませんが、iPad の展開などもあり、今後教育機関での展開など、いろいろな要素を考えると、どうしてもこの「R-18」指定は避けたかったのです。</p>

<p></p>

<p>ということで、以上がツイキャス・ビューワーが承認されるまでのプロセスでした。</p>

<p><br />
ふー、ってか、ツイキャスビューワーの説明、全然してないやｗ</p>

<p><br />
よろしければ、ツイキャス・ビューワー、いれてみてください。もう次のバージョンできてるので、矢継ぎ早に申請しますけどねｗ。</p>

<p><br />
- <a href="http://itunes.apple.com/jp/app/twitcasting-viewer/id365235835?mt=8">ツイキャス・ビュワー</a> (利用に Twitter アカウント<strong>必要ありません</strong>）</p>

<p>- <a href="http://twitcasting.tv/">ツイットキャスティング</a></p>]]></description>
<link>http://blog.myrss.jp/archives/2010/05/_42.html</link>
<guid>http://blog.myrss.jp/archives/2010/05/_42.html</guid>
<category>iPhone</category>
<pubDate>Tue, 11 May 2010 17:18:48 +0900</pubDate>
</item>
<item>
<title>iPhone アプリを iPad 対応にする方法（プログラミング編）</title>
<description><![CDATA[<p>スクリーンショットとりながら丁寧に説明する気はないのだけど、メモ残しとかないと自分でも忘れそうなので・・・</p>

<p>iPad の登場で、iPhone/iPad 両方に共通のバイナリというものが SDK 3.2 で作成できるようになりました。<br />
もちろん、iPhone は iPhone OS 3.1系、iPad は 3.2 系なので、API の変更を吸収する必要はあるのですが、それを差し引いてもシングルバイナリで提供できるというのはメリットが多いわけで・・・</p>

<p>で、その方法。主に Interface Builder を使ってる人向け。</p>

<p>詳しくは <a href="http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/StartingYourProject/StartingYourProject.html">Starting Your Project</a> を読んでください。MPMoviePlayer を使っている自分にとっては「どうすんだよ、これ・・・」って感じではあるのですが・・・ま、それはさておき。</p>

<p><br />
<strong>※次の手順 1-3 については、XCode の 「Upgrade Current Target for iPad」コマンドを使うことが推奨されています。</strong>ので、1～3 については基本「Upgrade Current Target for iPad 」コマンドをつかってください。XCode 右ペインの Groups &amp; Files メニューから Target を選択して右クリックすればメニューが表示されるはずです。</p>

<p><br />
1. iPad用の XIB(NIB) を作成する<br />
　これは、File > New File > Empty XIB で、よーくみると iPad が選択できるので、それを選択して作成します。</p>

<p>2. iPhone用のリソースをがーっとコピー<br />
  で、作成した XIB に元の iPhone のリソースをがーっとコピペ。<br />
  File's Owner のクラス設定だけは忘れずに。</p>

<p>3. Info.plist に iPad 用のリソースを指定<br />
　Add Row で Main nib file base name (iPad) という行を追加。その値を先ほど作った XIB にする。</p>

<p>4. iPhone / iPad ユニバーサルプロジェクトであることを記述<br />
 　Project > Edit Project で Targeted Device Family を iPhone/iPad に変更。これで iPhone/iPad に対応したユニバーサルプロジェクトが完成。<br />
　なお、iPhone の場合のOSバージョンは、その下にある iPhone OS Deployment Target で指定されている。iPhone OS 3.1 でOKでしょう。</p>

<p><br />
以上で、iPad ユニバーサルアプリ完成。簡単ですね。<br />
なお、XIB がメインのもの以外にもある場合は、それらの XIB も変換が必要ですのでご注意ください。（そのためにも 1～3の手順は知っておいて損はないかと）。</p>

<p><br />
あとは iPad で画面がでかくなったのでリソースをちょろちょろ編集していきます。てか、iPad 画面でか！</p>

<p><br />
※ 「Upgrade Current Target for iPad」コマンドを使用したときは 4. の処理が行われないようですが、これはちゃんと設定しておいたほうがいいと思います。</p>

<p></p>

<p><br />
で、あと気を付けるとこは・・・</p>

<p>5. Weak Link<br />
　ランタイムでライブラリエラーがでるときは、たぶんリンクが Weak Link になっていないせい。<br />
　そんなときは Project > Edit Active Target > General で、Linked Library の値を Weak にします。<br />
　たぶん、UIKitFramework でしょう。これ Weak にすればたいていいけるんじゃないですかね・・・</p>

<p>6. Default.png<br />
　Default.png は iPad では<a href="http://developer.apple.com/iphone/library/documentation/General/Conceptual/iPadProgrammingGuide/CoreApplication/CoreApplication.html#//apple_ref/doc/uid/TP40009370-CH6-SW6"> Default-Portrait.png と Default-Landscape.png を用意します</a>。</p>

<p>7. Interface Orientation<br />
　3.2 からインターフェースの向きも Info.plist で設定するようになっていますので、Supported Interface Orientations (iPad) と Supported Interface Orientation (なにもなしは iPhone) を設定しておきます。<br />
　iPad の場合、Portrait にしても上下どちらでもいけるようにすべきかと。</p>

<p>8. UIDevice の名前<br />
　よく使われる、 sysctlbyname("hw.machine", name, &size, NULL, 0); の値は「iPad1,1」です。<br />
  （sys/utsname.h の uname も同じ）<br />
  また、[UIDevice currentDevice].model は 「iPad」です。</p>

<p>9. iPhone/iPad の判定<br />
　そもそも iPhone/iPad の判定、なんか簡単にできるっしょ！って思って調べてみたのですが、なんか微妙・・・<br />
　プリプロセッサレベルでは<br />
  #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200<br />
  で iPad の判定ができます。<strong>（追記: iOS4 が出たので、この判定方法は使えなくなりました）</strong>でも、プリプロセッサレベルで振り分けたらシングルバイナリにならんですよね・・・<br />
　ランタイムでの判定は、一応<a href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIKitFunctionReference/Reference/reference.html#//apple_ref/c/macro/UI_USER_INTERFACE_IDIOM">マクロで定義してねってのが推奨されている</a>ので、これを使うとよいかと思います。</p>

<p><br />
10. Icon.png<br />
　iPad でアイコンも綺麗になっています。これまでの 57x57 ではなく、 もうすこし大きいもので「72 x 72」になっています。<br />
　まぁ、大きいものを Icon.png としておいておけば iPhone では縮小表示されますが、綺麗にするなら Info.plist に <a href="http://developer.apple.com/iphone/library/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/TP40009249-SW10">CFBundleIconFiles を Array 型で定義して</a>、その中に アイコンファイルを指定していきます。最適な大きさものが適切に選択されます。</p>

<p><br />
と、こんなところでしょうか。</p>

<p>iPad アプリも早速 $0.99 の最低ラインに値下がりしていて、これで　iAd がでれば、無料アプリが氾濫するんじゃないですかね。。</p>

<p>その前に既存の iPhone アプリを是非 iPad 対応にしておきましょう。</p>

<p><br />
※間違いや抜けてるところあれば教えてください。</p>]]></description>
<link>http://blog.myrss.jp/archives/2010/04/iphone_ipad.html</link>
<guid>http://blog.myrss.jp/archives/2010/04/iphone_ipad.html</guid>
<category>メモ</category>
<pubDate>Mon, 19 Apr 2010 15:57:08 +0900</pubDate>
</item>
<item>
<title>ツイット・キャスティングのすべてのライブが iPhone/iPad で閲覧できるようになりました</title>
<description><![CDATA[<p>お知らせという名の愚痴エントリですが・・・ま、愚痴はさておき。</p>

<p><br />
<a href="http://twitcasting.tv/">ツイットキャスティング</a>で配信するライブ、これまでは iPhone だと「音がでない！」という状態だったのですが、ようやく音声がでるようになりました。</p>

<p><img alt="tc-live-iphone-3.png" src="http://blog.myrss.jp/tc-live-iphone-3.png" width="332" height="545" /></p>

<p>iPhone から見るとうにょうにょ動いている画面の真ん中に「△」の印がでていますので、これをクリックすると Quick Time が立ち上がり、ライブを閲覧できるようになります。</p>

<p>残念ながら全画面表示で Quick Time が立ち上がるのでコメントとかは見れませんが、通常のツイッタークライアント (Echofonとか) からでもライブが閲覧できるので、便利といえば便利かと思います。</p>

<p><br />
また、こっそり iPad にも対応していて</p>

<p><a href="http://blog.myrss.jp/tc-live-iphone-1.png"><img alt="tc-live-iphone-1.png" src="http://blog.myrss.jp/tc-live-iphone-1-thumb.png" width="400" height="512" /></a></p>

<p>iPad で△をおすと、（ここがiPadのすごいところなんですが） Quick Time がインラインで立ち上がり、そのページにとどまったままでライブが再生されます。</p>

<p><a href="http://blog.myrss.jp/tc-live-iphone-2.png"><img alt="tc-live-iphone-2.png" src="http://blog.myrss.jp/tc-live-iphone-2-thumb.png" width="400" height="509" /></a></p>

<p>インライン再生便利！</p>

<p><br />
ということで、iPhone / iPad でもすべてのライブで音声でます。ふー。。</p>

<p>ちなみに<a href="http://blog.myrss.jp/archives/2010/04/_apple.html">先週リジェクトされた閲覧アプリ</a>についても、失意の谷底から這い上がり、ようやく昨日提出しました。うまくいけば来週公開されると思います。</p>

<p>閲覧アプリを使うとコメントを読み書きできるのはもちろん、ライブのプッシュ通知の機能が搭載されています。</p>

<p>～～～</p>

<p>さて、で、iPhone からライブ閲覧には、かの<s>悪名高い</s> HTTP Live Streaming という技術を用いています。</p>

<p>自動的に最適な帯域を選択してネットワークの状態に応じて柔軟に配信できるからデベロッパーは何も考えなくても高クオリティな配信が可能、というのがウリなわけですが、まぁ、全自動でまともに動くなんて期待しては・・・</p>

<p>が、完全に独自のプロトコルというわけではなく、デジタル放送とかにも使われていたりするわけで、それほど否定するものでもありませんね。</p>

<p><br />
で、現在は私の至らぬところからいろんな制約があり、まず 10 秒ほどの遅延があり、映像も少しクオリティが落ち、音質もちょっと微妙なところがあり、でも使用帯域だけは増える、という、もう個人的にもまったく納得いかない状況になっています。</p>

<p>が、<s>これを使わない限り・・・</s> Apple 先生が忠誠を見せろというとなので頑張って対応させています。これからも改善していかないとですね。</p>

<p><br />
（配信サーバーを MacOSX にすればいろいろ解決するようなのですが・・・いやぁ必要なツールはオープンソースで配布して欲しいです・・・ MacOSX のバイナリ配布のみって<s>ひどすぎる</s>それもありかなと思います（棒読み）。）<br />
ま、この続きは閲覧アプリが公開されたときに。。</p>

<p><br />
ということで、iPhone でも閲覧できるようになりました。よ、と。</p>

<p><br />
この3週間、審査のせいで足踏みしてしまいましたが、ようやく次のステップに進めそうでほっとしています。</p>

<p><br />
ということで、引き続き TwitCasting よろしくお願いします＝ー</p>

<p><br />
- <a href="http://TwitCasting.tv/">TwitCasting</a></p>]]></description>
<link>http://blog.myrss.jp/archives/2010/04/_iphoneipad.html</link>
<guid>http://blog.myrss.jp/archives/2010/04/_iphoneipad.html</guid>
<category>お知らせ</category>
<pubDate>Fri, 16 Apr 2010 16:39:29 +0900</pubDate>
</item>
<item>
<title>大人な事情により Apple の審査通りませんでした（ツイキャス・ビュワー）</title>
<description><![CDATA[<p><img alt="IMG_0183.PNG" src="http://blog.myrss.jp/IMG_0183-thumb.PNG" width="160" height="240" align="right" vspace=8 hspace=8 /></p>

<p><br />
さて、<a href="http://mobileinjapan.com/2010/03/31/tokyo20-next-mobile-app-star-resume/">先日 Tokyo2.0 で発表した</a>新アプリ、「TwitCasting Viewer（ツイットキャスティング・ビュワー）なのですが、本日 Apple より正式に「<strong>却下！リジェクト！</strong>」の連絡が来ました。</p>

<p>リジェクトの理由がシステムの根底に関わる問題のため、ビュワーの提供はまた少し先になります。申し訳ありません。</p>

<p>Apple 側から公開されている（NDAに抵触しない）範囲内でリジェクトの理由を書いておきますので、なにかの参考にしていただければ、と。</p>

<p><br />
さて、ツイットキャスティング・ビューワーでは</p>

<p>　- <strong>PUSH </strong>によるライブ開始の通知<br />
　- <strong>独自プロトコル</strong>による 64kbps ～ 1Mbps 帯域での柔軟な環境での視聴</p>

<p>を可能にしています。</p>

<p>問題は、この「独自プロトコル」で、Apple 側は今年2月に</p>

<p>　- 10分を超える音声・動画、もしくは (NDA)分間で (NDA)バイトを超える音声・動画を 3G ネットワークで配信する場合、<strong>Apple の指定するプロトコルを使用しなければならない</strong><br />
　- その場合、最低 64kbps でも視聴できるように<strong>複数の帯域をサポートしなければならない</strong></p>

<p>という<a href="https://developer.apple.com/iphone/news/appstoretips/">制約を追加しました</a>。</p>

<p><br />
指定されたプロトコルは <strong>HTTP Live Streaming</strong> というものです。</p>

<p>これは<strong>事実上 Quick Time での視聴となる</strong>ため、もろもろ理由はつけているものの、思惑としては今後広まってくるであろう動画コンテンツが Quick Time 上を必ず流れるように管理統制したいのではないか、という裏なども考えずには・・・いや、神ですからね。考えてはいけませんな・・・</p>

<p><br />
ともかく、<strong style="font-size:150%">HTTP Live Streaming に対応しないと iPhone / iPad で動画を閲覧することはできなくなった</strong>、ということです。</p>

<p>で、HTTP Live Streaming の何が問題かというと、このプロトコルは構造上、遅延が数十秒発生するため、<strong>双方向コミュニケーションをベースとしたライブの配信には不向き</strong>なんです。（逆に大きな動画コンテンツを、帯域の不安定なネットワークで閲覧するのには向いています）。</p>

<p>また、iPhone / iPad では Quick Time は全画面表示となるため、USTREAM の iPhone Safari 対応版で見たように、Safari から閲覧したときに、<strong>コメントの読み書きが一切できない</strong>、という問題があります。（アプリ内閲覧ならちょっと工夫することで可能）</p>

<p></p>

<p>ということで、さて、どうしたものか・・・</p>

<p>実は USTREAM が HTTP Live Streaming に対応していなかったため、まだ猶予期間かな、と思っていたのですが、ツイキャス・ビューワー審査中、狙ったように今週頭にUST Viewer HTTP Live Streaming 対応版を出してきました。</p>

<p>これで ツイキャス・ビューワーが却下される<strong>大義名分もきっちりできてしまっていた</strong>わけです。うーむ。</p>

<p><br />
ただ、HTTP Live Streaming に対応していないアプリもまだたくさんあるので、少し状況を Apple に確認してから、今後の方針を考えたいと思います。</p>

<p>ま、HTTP Live Streaming も、うまくやれば実用的な範囲に遅延を抑えることができるかもしれませんしね。</p>

<p><br />
ということで、最後に 幻のツイキャス・ビュワーを紹介しておきます。</p>

<p>3G での視聴を諦めて、WiFi でしか使えないようにすれば審査通るとは思うのですが、<strong>それじゃ意味ないですよね・・・？</strong></p>

<p>Skype も 3G 対応版が出ると噂されてから早２ヶ月、<strong>結局審査通らないようですしね</strong>。。。ま、頑張るしかないか。<br />
この３月の死ぬような苦労は一体なんだったんだ・・・なんだったんだ・・・</p>

<p><br />
■ツイキャス・ビュワー</p>

<p><br />
オススメコンテンツなどはありません。まずお気に入りのユーザーを登録します。すると・・・<br />
<a href="http://blog.myrss.jp/IMG_0182.PNG"><img alt="IMG_0182.PNG" src="http://blog.myrss.jp/IMG_0182-thumb.PNG" width="160" height="240" /></a></p>

<p><br />
ライブが開始されたときに PUSH で通知がきます。もちろんアプリ終了しててもOKです。<br />
<a href="http://blog.myrss.jp/IMG_0183.PNG"><img alt="IMG_0183.PNG" src="http://blog.myrss.jp/IMG_0183-thumb.PNG" width="160" height="240" /></a></p>

<p>映像+音声が、ほぼ遅延なく閲覧できて<br />
<a href="http://blog.myrss.jp/IMG_0181.PNG"><img alt="IMG_0181.PNG" src="http://blog.myrss.jp/IMG_0181-thumb.PNG" width="160" height="240" /></a></p>

<p>もちろんコメントのやりとりもOK<br />
<a href="http://blog.myrss.jp/IMG_0184.PNG"><img alt="IMG_0184.PNG" src="http://blog.myrss.jp/IMG_0184-thumb.PNG" width="160" height="240" /></a></p>

<p>横画面にも対応しています<br />
<a href="http://blog.myrss.jp/IMG_0180.PNG"><img alt="IMG_0180.PNG" src="http://blog.myrss.jp/IMG_0180-thumb.PNG" width="160" height="240" /></a></p>

<p><br />
実はPC版より全然音質いいです。</p>

<p><br />
せっかく作ったから WiFi のみ版として公開しようかと思いつつ、でもそれじゃ期待ハズレなのは間違いないしな、と思いつつ・・・。</p>

<p><br />
ということで、もうちょっとお時間ください＞iPhone からの視聴ー</p>]]></description>
<link>http://blog.myrss.jp/archives/2010/04/_apple.html</link>
<guid>http://blog.myrss.jp/archives/2010/04/_apple.html</guid>
<category>iPhone</category>
<pubDate>Tue, 06 Apr 2010 15:05:04 +0900</pubDate>
</item>
<item>
<title>Tokyo Tyrant 雑多なメモ (Tokyo Cabinet も可)</title>
<description><![CDATA[<p>合宿で Tokyo Tyrant 部分、いろいろチューニングしたのでメモ。細かいのでその手の方以外はスルーの方向で。</p>

<p>対象は便利すぎる Tokyo Tyrant Table。</p>

<p><br />
・インデックス</p>

<p>　addCond()->addCond()->addCond()</p>

<p>で絞り込んでいくとき、hint() で調べると最後に追加した Query から順に Index を使っていることがわかる。(<b>5/3追記</b>)⇒最後ではなく、2番目、一番目、と使う様子。<br></p>

<p>なので最初は大雑把な絞り込み（カテゴリとか）を行い、最後に詳細な絞り込み（ユーザーID）なんかをかけた方がパフォーマンスがあがる様子（手元のベンチマークでは上がった）。</p>

<p><br />
・数値インデックスに対する NUMGT や NUMGE</p>

<p>日付のタイムスタンプなどで、過去三日以内、というときに</p>

<p>  addCond(日付のとこ, 数値が～より大きい, 3日前）</p>

<p>みたいな感じにすると思うけど、この Query かけた時点で候補がたくさん残っているとかなり遅い。<br />
なぜか数値インデックスのこれだけ妙に遅い。ノーパソのVMWare上だけど10万件ソート1秒近くとか。できれば避けたい。（うーん、なんか間違ったのかなぁ・・そうかもしれない）</p>

<p><br />
・プライマリーキーはフィールド指定して検索・ソートできる</p>

<p>特定の id の情報をとってくるのは</p>

<p>  ->get(id)</p>

<p>とかしてると思うが、これ、実は</p>

<p>  query->addCond("", 数値が～に等しい, 検索したいID)</p>

<p>とかでも引っ張ってこれる。空文字はプライマリーキーを表す。<br />
なので、ソートして検索したい場合、最後に追加したものが最新のデータ、という構成であれば、created みたいな日付フィールドつくってインデックスはってソートして、なんてしなくても</p>

<p>  query->setOrder("", 数値が大きい順)</p>

<p>などとすればソートできる。これは数値インデックス別途張るよりもちょっと早い。(<b>5/3追記: 速度は変わらないかひょっとすると遅くなっているかも。</b>)</p>

<p><br />
・最近の1万件を検索対象、とかを高速にする方法</p>

<p>追記式のデータの場合、直近の１万件を検索対象にしたい、みたいなケースがある。<br />
この場合、まず</p>

<p>  $total = database->num()</p>

<p>で全体の合計数をひぱってきて</p>

<p>   query->addCond("", 数値が～より大きい, $total - 1万)</p>

<p>みたいにすると猛烈に高速に直近のデータだけ取り出せる。(5/3追記：これ、たぶん嘘）</p>

<p>なお、 num() で帰ってくる値と、主キー（数値型でオートインクリメントな場合）との値は少し異なる。<br />
そのため、どうしても正確にやりたい場合は、最後の ID をどこかに保存しておくか、ちょっと微妙だけど、どうしてもというときには</p>

<p>  database->getUid()</p>

<p>で数値をとってくることもできる、けど主キーがインクリメントされちゃうのでオススメはできない。って誰かいい方法教えて＞最後の数値主キーを高速に取得する方法）</p>

<p><br />
・ソートしないときの検索結果の順序</p>

<p>検索結果に setOrder かけない場合、取り出されるレコードの順序は基本的には不定っぽい。<br />
が、一応、なんか古いものから順に出てくる傾向にはある。<br />
検索対象のレコード数がでかい場合、setOrder かけると遅くなるので、古い順でも、ちょっとくらい不定でもいいや、というときは setOrder をかけずに使いたいところ。</p>

<p><br />
・インデックスの罠</p>

<p>候補が少ないインデックス(たとえば type というフィールドに 0, 1, 2, 3 の４つくらいしかステータスがなくて、一つに数万とかデータ入れちゃってる場合）、このフィールを使った検索で、ある日突然異常にCPUパワーを食うようになるかもです。いや、なるともう、猛烈に食います。<br />
なので、このようなインデックスを使う場合（でかつ、その指定された条件では大量の結果がマッチすることがわかっている場合）は RDBQC_NOIDX かけてインデックスを使わないように設定しないと大やけどします。hint() を見て、RDBQC_NOIDX いれてなくてもインデックス使ってないや、と思っても実際には計算に利用していて、それがまた猛烈にCPUパワーを食います。です。</p>

<p><br />
まぁしかし、便利ですね。テーブル型の key-value ストア。ということでメモ（主に自分用）でした。</p>

<p></p>

<p><br />
</p>]]></description>
<link>http://blog.myrss.jp/archives/2010/04/tokyo_tyrant_to.html</link>
<guid>http://blog.myrss.jp/archives/2010/04/tokyo_tyrant_to.html</guid>
<category>メモ</category>
<pubDate>Fri, 02 Apr 2010 11:19:12 +0900</pubDate>
</item>
<item>
<title>Joker Racer サービスの一時休止についての説明</title>
<description><![CDATA[<p><img src="http://www.jokerracer.com/img/jokerracerlogo.jpg" align="right" hspace=8 vspace=8></p>

<p><br />
<a href="http://www.jokerracer.com/">Joker Racer</a> サービスについて、現在運用しているラジコンの運用を一旦停止することになりましたので、その経緯を書いておこうと思います。</p>

<p>なにしろ <a href="http://agilemedia.jp/wish2009/">AMN WISH 2009</a> で大賞までいただいたサービスですので、いろいろと包み隠さず正直に。</p>

<p><br />
さて、昨年の夏以来、専用のコースも用意して運用を開始した Joker Racer ですが、その後もいろんな方面に展開すべくさまざまな活動を行っていました。<br />
年末には <a href="http://techcrunch.com/2009/11/08/techcrunch-japan-tokyocamp-29-asian-companies-show-their-wares/">TechCrunch などのイベント</a>にも出るなどしたこともあり、実際海外などからもいろいろと引き合いをいただいていました。</p>

<p>が、諸般の事情によりハードウェア担当のエンジニアが事業に関わっていくことが難しくなったこと等で、年明けあたりから新規の開発ができず、国内・海外からのお話しも断腸の思いですべてお断りせざるを得ないという状況になりました。</p>

<p><br />
サービスとしても、24 時間動かせるタンクを惰性で提供しているだけの状態では再開を待望されているユーザーさまにも申し訳ない、ということで協議した結果、今回運用を一旦とめさせていただくという結論に達しました。</p>

<p><br />
このような形で一旦トーンダウンせざるを得ないということは、ここまで応援して頂いた皆さまに申し訳ない思いでいっぱいです。。<br />
ですが、きちんと決断していく方が最終的には良い形で恩返しができると思っていますので、ただ前向きに進むのみ、と個人的には考えています。</p>

<p><br />
=+=+=</p>

<p><br />
さて今後ですが、Joker Racer はハード側とソフト側（=つまり私）との2人3脚＆小資本の共同出資でやってきましたので、そちらを一旦今後の方向性に即した形にしてからまた新たなスタートを切りたいと考えています。</p>

<p><br />
Joker Racer 自体は、ラジコンをネットで操作する、という具体的なイメージをベースに、ネットからの遠隔操作プラットフォームを提供することを最大の目標にしています。</p>

<p><br />
ということで、もしハードウエアの開発に携わっている、またはこのような活動にご興味があるハードな方はご連絡いただけると嬉しいです（給料とかでるわけではないですが）。</p>

<p></p>

<p>なお、年明けからサイドフィードとして開始している新サービス「<a href="http://twitcasting.tv/">モイ！TwitCasting</a>」には Joker Racer の技術を応用しています。<br />
根底のコンセプトには共通のものがありますので、こちらもあわせて猛烈に力を入れていこうと思っています。</p>

<p><br />
ということで、これからもどうぞよろしくお願いいたします。</p>]]></description>
<link>http://blog.myrss.jp/archives/2010/03/joker_racer_3.html</link>
<guid>http://blog.myrss.jp/archives/2010/03/joker_racer_3.html</guid>
<category>お知らせ</category>
<pubDate>Thu, 25 Mar 2010 11:45:46 +0900</pubDate>
</item>


</channel>
</rss>