好評販売中!!
2010-01-31 (Sun)
■ 横浜で iPhone アプリ開発の勉強会第三回をやりました 
前回の勉強会 から二ヶ月たちました昨日30日。第三回目となる勉強会をやりました。
今回は iPad 登場と重なりましたがほとんどスルーしつつ、 @shoessoft さんの OpenCV でのアプリ開発方法の解説を聞き、@tmokita さんにコーディングガイドを読んでもらい、@cocopon さんのゴールドラッシュに歓喜し、@GLTime さんに裏技を教えてもらい、@cqa02303 さんに API Diff をフガフガ。という感じ。多分、資料とかはそれぞれの人がどこかに上げてくれると思います。
実は先日、西東京の方であった新年会に参加した時に、4時間とか長くね?って話になったんですよ。確かにね〜、そこはかとないダラダラ感があるよなーとは思ってて、様子を見て短くする事も検討していたんですが、いやはや。むしろ時間が足りなかったんじゃね?って結果になってました。
横浜 iPhone 開発勉強会は、グーグルグループ(yidev) で、開催情報をやりとりしています。興味のある方は、登録してみてください。
参加者のみなさま、どうもありがとうございました。楽しかったですし勉強になりました。次回は3月を予定していますので、ご近所の方はこの機会にぜひお集まりくださいー。
■ 第三回勉強会の Twitter ログ 
ハッシュタグ #yidev でつぶやいたログです。
@cocopon: さて、そろそろ出発。本日参加される皆様、よろしくお願いします! #yidev
@AppleWalker: 横浜勉強会に向かい中なう。 #yidev
@mikoshi: もうそろ横浜 RT @AppleWalker 横浜勉強会に向かい中なう。 #yidev
@takayama: 設営中 #yidev
@AppleWalker: ご苦労さまです! RT @takayama: 設営中 #yidev
@mikoshi: 今日からお邪魔させていただきます!! RT @AppleWalker ご苦労さまです! RT @takayama: 設営中 #yidev
@moga1: ダダ漏れ期待(嘘です RT @AppleWalker ご苦労さまです! RT @takayama: 設営中 #yidev
@takayama: @mikoshi よろしくー #yidev
@takayama: 名刺持ってくるの忘れちゃったから、今日初めて会う人ごめんなさい #yidev
@takayama: ところで、電源ってさ。いつも延長アダプタ借りてたんだっけ? #yidev
@takayama: 名刺交換タイムになってます #yidev
@takayama: OpenCV の話が始まりました #yidev
@takayama: OpenCV は BSD ライセンス #yidev
@takayama: C/C++ だけど、Cで平気。ほとんどCでいけると #yidev
@takayama: じっとじゃなくてギットだよ #yidev
@takayama: git インストール中 #yidev
@takayama: http://bit.ly/9FwIMi を参考に #yidev
@takayama: みんなgit使おうぜいぜい #yidev
@takayama: http://bit.ly/bcZznL このファイルをゲット #yidev
@takayama: はなし聞くのに精いっぱいw #yidev
@syuhari: 遅刻してゴメンなさい #yidev
@takayama: 眼鏡っこカメラばれたwwww #yidev
@takayama: @syuhari どんまい #yidev
@tmokita: めがねカメラ! #yidev
@takayama: opencvEdgeDetect について #yidev
@tmokita: とりあえず使えるのはFrontFace #yidev
@takayama: 横顔とかは無理? #yidev
@takayama: cvFloodFil / 色の塗りつぶし #yidev
@takayama: cvFloodFill か #yidev
@tmokita: おれの記憶間違いでなければノボルさん到着 #yidev
@takayama: cvInpaint / 不要オブジェクトの除去? photoshop の指先ツールのようなもの #yidev
@takayama: これだけでもすごいから便利。だれか作って<cvInpaint #yidev
@takayama: cvInpaint は処理が重いという欠点があります #yidev
@takayama: cvFindContours / 輪郭抽出 #yidev
@takayama: 写真には不向き cvFindContours #yidev
@takayama: cvThreshold / 2値化 / #yidev
@takayama: 大津の手法てのを使うと楽 #yidev
@takayama: OpenCV でエラーが出る時は、ROI が原因の事が多いかな #yidev
@takayama: cvCvtColor #yidev
@takayama: 高速化の手法 ! #yidev
@takayama: 対象エリアを限定 / 例えば、下の方を無視したり #yidev
@takayama: CvHarrClassifierCascade の読み込みが重いかもしれないから、リリースしないで保持しておくとか #yidev
@takayama: cvInpaint 試してみよう! #yidev
@hkato193: #yidev の内容を興味津々で読んでいます。皆さん頑張ってください。
@noborunrun: どうもです RT @tmokita おれの記憶間違いでなければノボルさん到着 #yidev
@takayama: いとうさんの開発中のアプリにみんな大喚起 #yidev
@ntaku: OpenCV楽しそう。今度何かつくろ #yidev
@takayama: 休憩 #yidev
@ytsuboi: #yidev 行きたかったけど、終わりが既に入っていた予定とバッティングにつき参加できず。 @takayama さんの実況中継がありがたいです。
@takayama: http://bit.ly/aLYpPW 読み始めます #yidev
@hkato193: #yidev 気になる話題が始まったみたい。 RT takayama: http://bit.ly/aLYpPW を読み始めます
@takayama: @tmokita さんのコーディングガイドラインのお話です #yidev
@GLTime: .@hkato193 原文です http://bit.ly/bQsxuX #yidev
@takayama: あいまいにしないで、一貫性をもって、余計な説明はつけない #yidev
@hkato193: ありがとうございます! @GLTime: .@hkato193 原文です http://bit.ly/bQsxuX #yidev
@hkato193: #yidev で、 @tmokita さんが「キャメルケースを「キャメルトライ、、、ではなくキャメルケースで〜」」というボケをするかどうかがリモートで耳ダンボしている身にとっては気になる話題。
@takayama: Prefix は2,3文字でクラスメソッドやインスタンスメソッドにはつけない #yidev
@takayama: キャメルケースにして、Prefix をつけるつけるよ #yidev
@cocopon: キャメルケースネタは華麗にスルー #yidev
@takayama: プロトコルには、動詞じゃなくて、動名詞を使う #yidev
@hkato193: これはいい情報。 RT @takayama: プロトコルには、動詞じゃなくて、動名詞を使う #yidev
@takayama: @ytsuboi 残念すね〜。途中退出とか、気にせずオッケーなグダグダな感じなので、次回予定があいましたらぜひ。この辺りの事、どっかに書いておかないと。 #yidev
@takayama: 引数の名前を省略しちゃダメよ #yidev
@takayama: 引数の名前?の方と、変数名が一緒@shoessoft まいいんじゃない?@takayama #yidev
@setoh2000: ふむふむ RT @hkato193: これはいい情報。 RT @takayama: プロトコルには、動詞じゃなくて、動名詞を使う #yidev
@takayama: アクセサメソッド 、セッターは setHoge 、ゲッターは hoge #yidev
@takayama: is, can, should を使う、do, does を使わない #yidev
@takayama: ゲッタなんですけど、複数の要素を reference で返す時は get を使うと #yidev
@takayama: デリゲートメソッドは、did, will で通知する。確認的なものは should #yidev
@takayama: invoke って何? #yidev
@takayama: むずかしくてわからんww #yidev
@takayama: メソッドの引数は、小文字で始まるキャメルケース #yidev
@takayama: 1,2文字とか短いのもだみよ #yidev
@takayama: プライベートメソッドの頭に _ を付けちゃダメよ、会社名とかプロジェクト名とか適当につけて #yidev
@hkato193: @takayama プライベートメンバー変数ではなくて、プライベートメソッドですか? #yidev
@noborunrun: @takayamaさんが何かやるらしいです。 RT @takayama: @noborunrun え、一発ギャグ? #yidev
@takayama: @hkato193 変数の話はこれからなのです〜 #yidev
@noborunrun: @cqa02303 とりあえず、こっちに期待 RT @noborunrun: @takayamaさんが何かやるらしいです。 RT @takayama: @noborunrun え、一発ギャグ? #yidev
@GLTime: RT @noborunrun: @takayamaさんが何かやるらしいです。 RT @takayama: @noborunrun え、一発ギャグ? #yidev
@takayama: 定数の注意点 __ はコンパイラが使ってるから、かぶらないように気をつけてね #yidev
@hkato193: 近いうちに #yidev に出られるような都合を付けようっと。楽しそう。
@takayama: 例外ってのは正常系では出ないはずだから、デバッグで潰せ #yidev
@takayama: 一所懸命カキコミしてる成果が!!! ふふ RT @hkato193: 近いうちに #yidev に出られるような都合を付けようっと。楽しそう。
@cqa02303: Appleさんは「例外をgoto文代わりにする人キモイ」って言ってますね RT @takayama: 例外ってのは正常系では出ないはずだから、デバッグで潰せ #yidev
@hkato193: #yidev 例外を自分のソースに使うな、ということですか?
@takayama: 実を言うと、変数の部分はサックリしていたのでつぶやき損ねたw #yidev
@moga1: 大抵の規約に、例外ハンドリングで実装すな!ってありますよね。確かに楽だけど… RT @cqa02303 Appleさんは「例外をgoto文代わりにする人キモイ」って言ってますね RT @takayama: 例外ってのは正常系では出ないはずだから、デバッグで潰せ #yidev
@takayama: 例外について #yidev
@takayama: java とはちょっと違う(らしい) #yidev
@GLTime: Lingo出身なので難しいですw #yidev
@takayama: @GLTime 自分も例外畑じゃないから。NSError でいいや。みたいな。 #yidev
@noborunrun: 同じく。たいてい、チェックではじいてその先は知らないwRT @takayama: @GLTime 自分も例外畑じゃないから #yidev
@takayama: nil にメッセージを送ってもいいよ。nil が返る #yidev
@takayama: autorelease は使わない方がパフォーマンスが良い #yidev
@takayama: 休憩 #yidev
@takayama: 次は @cocopon さんです〜 #yidev
@takayama: Lite版からFull版へのリンクについて #yidev
@takayama: iShoot はライト版を出したら 2週間で2500万円、ゴールドラッシュ! #yidev
@hkato193: #yidev 一瞬の使用でもautoreleaseではなくてretain&releaseをすべきとAppleさんも言ってました。
@takayama: 無料版から有料版へリンクしないともったいないよ #yidev
@takayama: lite版を先に出すと良いよ。市場の確認、不具合を把握 #yidev
@takayama: 問題点もあり / 主に審査のタイミングがわかんないからね #yidev
@hkato193: 値段を95%オフ!と言ってセールス文句にできるものね。どれが標準価格かわからないから。 #yidev
@takayama: 次サーバに有料版へのリンクを置いといて、フル版の登場と同時にリンクを更新する #yidev
@takayama: 利点: HTML差し替えだけでオッケーで簡単。GoogleAnalyticsと組み合わせると便利。 #yidev
@tokorom: @takayama 勉強会楽しそうですね!今こっそりyidevのグーグルグループに参加登録依頼を投げさせていただきました m(_ _)m #yidev
@takayama: ココポンさんの秘蔵グラフが!!Appbank掲載効果もすぐわかる #yidev
@noborunrun: WebViewのアドレスで.htmlの後に#appとかつければ判明できそうだけどだめかな #yidev
@hkato193: すごいなあ、 @cocopon さん。学生とは思えない。 RT @takayama: ココポンさんの秘蔵グラフが!!Appbank掲載効果もすぐわかる #yidev
@AppleWalker: @tokorom おお〜参加されるのですね。楽しみです! #yidev
@hkato193: メモメモ。 RT @noborunrun: WebViewのアドレスで.htmlの後に#appとかつければ判明できそうだけどだめかな #yidev
@takayama: safari の css は結構すごい。UIKit と似た感覚でアニメーションできたり #yidev
@takayama: transform とか transition とか #yidev
@ruckygames: 気になる。 RT @takayama: ココポンさんの秘蔵グラフが!!Appbank掲載効果もすぐわかる #yidev
@shoessoft: 「iPhone SDK開発のレシピ」高山さんの本。出版社秀和システム。2月に発売されるでしょう! #yidev
@hkato193: おぉ! RT @shoessoft: 「iPhone SDK開発のレシピ」高山さんの本。出版社秀和システム。2月に発売されるでしょう! #yidev
@IORI_2010: RT @hkato193: おぉ! RT @shoessoft: 「iPhone SDK開発のレシピ」高山さんの本。出版社秀和システム。2月に発売されるでしょう! #yidev
@fladdict: いいなぁ、たのしそうだなぁ。 #yidev
@ntaku: Build and Analyzeで組み込みclangを実行できる #yidev
@setoh2000: 気になる。 RT @ruckygames: 気になる。 RT @takayama: ココポンさんの秘蔵グラフが!!Appbank掲載効果もすぐわかる #yidev
@IORI_2010: 秀和システムさんちの本は昔から解りやすくて大好き! RT @hkato193 おぉ! RT @shoessoft: 「iPhone SDK開発のレシピ」高山さんの本。出版社秀和システム。2月に発売されるでしょう! #yidev
@ntaku: 単体で実行するよりいい! #yidev
@takayama: @takayama の静的解析のネタ発表終わり #yidev
@takayama: @syuhari さんの UIRecorder のはなし始まり #yidev
@hkato193: レコーダーと聞いて今作っているチューナーに活用できるかと思ったら、テスト用のそれなんだ。 RT @takayama: @syuhari さんの UIRecorder のはなし始まり #yidev
@hkato193: UIRecorderのデモビデオ http://vimeo.com/6934052 #yidev
@takayama: Instruments でマウスの動きを記録して再生するような感じ #yidev
@GLTime: RT @hkato193: UIRecorderのデモビデオ http://bit.ly/bpe3Ko #yidev
@takayama: 次は @GLTime さんです。カメラかな #yidev
@takayama: デスクトップがカオス #yidev
@takayama: キリトリカメラの事例紹介 #yidev
@takayama: 3.1での追加APIについて #yidev
@takayama: takePicture は、ピッカーが表示されてても動かない場合がある。最悪例外 #yidev
@takayama: 撮影できる状態かどうかを判定させる方法がない #yidev
@takayama: cameraOverlayView は CALayer をどうのこうの http://bit.ly/bH0m2N #yidev
@takayama: showsCameraControls のジレンマ #yidev
@takayama: 最初は YES にしておいて、撮影直前に NO にする #yidev
@takayama: カメラのボタン類は、Viewに重ねておく #yidev
@hkato193: メモメモ。撮影直前にNO。 RT @takayama: 最初は YES にしておいて、撮影直前に NO にする #yidev
@tokorom: 保守性を考えるとautoreleaseは活用すべきなので、ここらへんは是非検証しておきたいなー QT @takayama: autorelease は使わない方がパフォーマンスが良い #yidev
@noborunrun: RT @cqa02303: 高山:「高山さんってすごいですね」 /なんという自画自賛 #yidev
@NoMoTo: #yidev を、あとでチェックする。
@takayama: 3.2のAPIDiff 見てる #yidev
@takayama: @GLTime さんが iPad 持ってきた ?!!! #yidev
@takayama: さて、終了して二次会に移動しましょうか #yidev
@syuhari: 後から来て先に帰ってすいません!本よろしくです! #yidev
@takayama: 二次会 #yidev http://movapic.com/pic/201001302009364b6413707fef4
@whitedev: #yidev は二次会ですね〜ワタシこれからシゴト。盛り返さねば。
@whitedev: #yidev の実況中継たのしかた。ワクワクしちゃう
@takayama: 3次回 #yidev http://movapic.com/pic/201001302149264b642ad678169
@ytka: たくさん刺激をもらい、勉強なりました!またよろしくお願いします。 #yidev
@ntaku: おつかれさまでした。次回は何か発表したいなあ #yidev
@takayama: 解散。お疲れさまでした。 #yidev http://twitpic.com/10i06j
@AppleWalker: そして、また終電にまにあわず川崎から歩いて帰る。今日も楽しかった。みなさん、ありがとう! #yidev
@AppleWalker: 絶対買います! RT @shoessoft: 「iPhone SDK開発のレシピ」高山さんの本。出版社秀和システム。2月に発売されるでしょう! #yidev
@mikoshi: 買うね! 間違いなく買うね!! サインもらっとこ。 RT @AppleWalker 絶対買います! RT @shoessoft: 「iPhone SDK開発のレシピ」高山さんの本。出版社秀和システム。2月に発売されるでしょう! #yidev
@pj_berri: HPで内容とか見れたりしますか? RT @AppleWalker: 絶対買います! RT @shoessoft: 「iPhone SDK開発のレシピ」高山さんの本。出版社秀和システム。2月に発売されるでしょう! #yidev
@gnue: RT @AppleWalker: 絶対買います! RT @shoessoft: 「iPhone SDK開発のレシピ」高山さんの本。出版社秀和システム。2月に発売されるでしょう! #yidev
@tmokita: 補足しますと「良い場合もある」ですね。ループのなかでオブジェクト作るのは考えようとか。RT @tokorom 保守性を考えるとautoreleaseは活用すべきなので(略) QT @takayama: autorelease は使わない方がパフォーマンスが良い #yidev
@cqa02303: 時間がなくてIconCamの構造について喋れなかった件について #yidev
@tmokita: すみません。長くしゃべってすみません。 RT @cqa02303 時間がなくてIconCamの構造について喋れなかった件について #yidev
@myb: @cqa02303 それはまた次回に! #yidev
@AppleWalker: 是非、次回聞きたい! RT @cqa02303: 時間がなくてIconCamの構造について喋れなかった件について #yidev
@myb: #yidev のみなさんお疲れさまでした!本日は大変勉強になりました!
@AppleWalker: tomokitaさんの話しも為になった! RT @tmokita: すみません。長くしゃべってすみません。 RT @cqa02303 時間がなくてIconCamの構造について喋れなかった件について #yidev
@cqa02303: 同意 RT @AppleWalker: tomokitaさんの話しも為になった! RT @tmokita: すみません。長くしゃべってすみません。 RT @cqa02303 時間がなくてIconCamの構造について喋れなかった件について #yidev
@tmokita: え、そんなこと言われると調子乗っちゃいますよ。えへへへ。 RT @cqa02303 同意 RT @AppleWalker: tomokitaさんの話しも為になった! RT @tmokita: すみません。長くしゃべってすみません。 RT @cqa02303 時間が #yidev
@tokorom: たしかにループ内の一時変数でautoreleaseはNGですよね^^ QT @tmokita: 補足しますと「良い場合もある」ですね。ループのなかでオブジェクト作るのは考えようとか。RT @tokorom (略) QT @takayama: (略) #yidev
@tmokita: ですです RT @tokorom たしかにループ内の一時変数でautoreleaseはNGですよね^^ QT @tmokita: 補足しますと「良い場合もある」ですね。ループのなかで(略) RT @tokorom (略) QT @takayama: (略) #yidev
@gnue: RT @tmokita: ですです RT @tokorom たしかにループ内の一時変数でautoreleaseはNGですよね^^ QT @tmokita: 補足しますと「良い場合もある」ですね。ループのなかで(略) RT @tokorom (略) QT @takayama: (略) #yidev
今回、オフィシャルの検索フォームから検索したログを整形したんですが、この手のログを保存するのに便利なサービスとかあるんでしょうか…。ハッシュタグクラウド てのがそうかなって思ったんですが、こんな感じで なんだか抜けが多くて。使い方が間違ってるのかなぁ。
2010-01-29 (Fri)
■ CGFontGetGlyphsForUnichars 
2ヶ月前に CGFontGetGlyphsForUnichars がリジェクト されまして、その後執行猶予がついたりなんなりとあったんですが、結局審査は通らなくなったので自作…する技術はないので野良スクリプトを見付けて誤魔化していました。が、まだ不完全な部分があるので完成したらここで紹介しようと思って早一ヶ月。一向に改革が進まない中の iPad 登場。夢で見たのですが、どうもこのフォントハックは陳腐化しそうで、これ以上取り組む事もなさそうなので、自分が持ってる情報を放出しておきます。もっと早くしたかったのですが、なかなかタイミングなくて。
まず、以下の github のページにある CMGlyphDrawing を使えば、CGFontGetGlyphsForUnichars の代わりに CMFontGetGlyphsForUnichars というのが使えるようになります。全く同じ引数なので、単純に置き換え化。
- http://thoughts.codemelody.com/2009/07/a-replacement-for-cgfontgetglyphsforunichars/
- http://github.com/jamesjhu/CMGlyphDrawing
ただし、遅いんだこれがまた。だいたい CGFontGetGlyphsForUnichars の3倍くらいの処理時間がかかる様子。
そして、このプログラムについては、問題がいっぱいあるよと次の人が文句言ってる(っぽいようだが、良くわかんない)
で、当の人が改革したのがこれ。
正直に言うと、このファイルをうまくプロジェクトに組み込めなかったので、切り貼りして上の CMGlyphDrawing にコピった。ライセンスが不明過ぎてどうすればいいのかわからん。処理速度は結構早くなった。(けどまだ CGFontGetGlyphsForUnichars の方が早い)
2010-01-06 (Wed)
2009-12-25 (Fri)
■ UIImage に影を付ける 
UIImage に影を付けるやつを書きました。ヘンテコなインターフェイスかもしんないですけど、withShadow:YESで影付きになります。
@interface UIImage (shadow) + (UIImage *) imageWithContentsOfFile:(NSString *)path withShadow:(BOOL)shadow; @end @implementation UIImage (shadow) + (UIImage *) imageWithContentsOfFile:(NSString *)path withShadow:(BOOL)shadow { UIImage *image = [UIImage imageWithContentsOfFile:path]; if(!shadow) return image; UIGraphicsBeginImageContext(CGSizeMake(image.size.width + 12, image.size.height + 12)); CGContextSetShadow(UIGraphicsGetCurrentContext(), CGSizeMake(6.0f, -6.0f), 6.0f); [image drawAtPoint:CGPointZero]; UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); return result; } @end

