2008年11月17日月曜日

CS193P Cocoa Programming - 現在4日目

  • メモリの管理についてお勉強
  • allocで領域確保(オーバーライドしない)
  • initで初期化(オーバーライドして使う)
  • 同一オブジェクトを参照するときはretain(オーバーライドしない)
  • コピーするときはcopy(オーバーライドしない、copyWithZoneをオーバーライドするべき)
  • 解放するときはrelease(オーバーライドしない)
  • 実際にメモリから削除されるのはdealloc(オーバーライドして使う)
  • NSAutoReleasePoolとautoreleaseメソッド・・・事前にautoreleaseしておいたオブジェクトは[NSAutoReleasePool releaseまたはdrain]呼び出し時に一斉に解放される

1日に二日分前進。iPhone発売から既に4ヶ月経過、既に無数の超優良アプリがわんさかと出回っています。果たして私は遅れを取り戻せるでしょうか。


これはNSURLから文字列を取得する方法を模索していたときです。
結局、absoluteStringかrelativeStringが正解ということがわかりました。


クラスの作成とメモリ管理。ようやくCらしくなってきたかな?
Objective-Cではガベージコレクションもできるらしいのですが、iPhone開発ではガベージコレクタをぶん回せるだけのリソースはないため昔ながらのメモリ管理でやる必要があります。



いろんなイニシャライザをためしてみました。
リストにオブジェクトを突っ込んだときは、突っ込んでいるNSArray自身もリリースしないと、個々のオブジェクトがリリースされません。おそらく内部でretainされてるんでしょうね。



introspection(Javaでいうところのrefrection)にチャレンジ。instanceof演算子みたいなのはなくて、すべてNSObjectのメソッドとして提供されています。java.lang.refrectionパッケージみたいな面倒さはないです。あとセレクタはSEL型とかいう専用の型があって便利。いわゆる関数へのポインタとして使えます。Javaの何が不満ってこの関数ポインタがないところですよ。



続けてもう一つの宿題のほう(Assignment2B)に突入。いよいよ実際に動作するiPhoneアプリを作ることになるのですが、その前に一つ宿題にバグ?があったのでご報告。
上の画像のカーソルで選択している部分(PolygonShape.h)、Assignment2Aで作成したときにはCocoa/Cocoa.hをインポートしていますが、2BではCocoaが使えない(iPhoneアプリになるため)ので、Foundation/Foundation.hに書き換える必要がありました。



で、これが完成品です。
SwingやWin32API開発並みの苦行を覚悟していたのですが、あまりに簡単で逆に拍子抜け。はまりそうな点といえば、プロジェクトに新しくクラスをインポートしたり作成した後はInterface Builderからアプリケーションに登録しなければならないというところぐらいでしょうか。あと、awakeFromNibはコントローラに実装しないとだめ(間違えてPolygonShapeに一生懸命実装して、ビルド直前にこの過ちに気づきました)。


今のところは楽勝。問題はOpen GL ESに手を出すあたりからでしょうかね。

2008年11月16日日曜日

User-Agentを偽装して、YahooBB! BBモバイルポイントにタダのりを試みた

  • 実験場所:都内某所のマクドナルド
  • iPhoneからの接続:良好。速度も申し分なし。ただし電波強度がいまいち。
  • MacBookからの接続:失敗。User-Agentを偽装しても、iPhoneエミュレータからアクセスしてもだめ。UAを正しくiPhone2.1に設定していなかったのが原因と思われる。再度調査する
  • 電波の発信場所はおそらくバックオフィス内、バックオフィスに近い場所の方が電波的に有利(場所によっては外にもアンテナがある?)
  • どうでもいいけどマックは煙たくて騒々しい、そのかわり安くて人がたくさんいて面白い
  • スクリーンショットとってくるの忘れたorz

遅ればせながら手持ちのiPhoneで実験してみました。駅構内とかでも使えるのかと思っていたら想像以上にBBモバイルポイントのアクセスポイントが少なく、結局マック以外まともな場所がないということがわかってちょっと残念。

○まずは店内の電波強度を試験してみる
WiFiFoFumというアプリを利用して店内の電波強度を測ってみました。
結果、店のカウンターの手前が最も強力(RSSI = 40程度)で、2階の禁煙席付近はRSSI = 20前後でした。常にWifiアンテナ表示が2本程度という感じです。


○iPhoneからつなげてみる

電波が弱いのでちょっと心配でしたが無事接続できました。速度も相当快適です。YouTubeの動画でも問題なく視聴できるはずです。


○禁断の果実(?)MacBook Airからつなげてみる
User-Agentによって接続デバイスを判定しているという噂があったので、噂を信じてSafariのユーザーエージェントをMobile Safari 1.1.3に変更していざMacBookから接続!

・・・だめでした。XcodeからiPhoneエミュレータを起動して試してもやっぱりだめ。くそう、そんなに甘くなかったか・・・

と思ったら、どうやら私の試した設定が悪かったみたいです!
Windows版SafariのUA追加方法 | iPhone 3G Wiki blog
これはWindowsでの設定方法ですけれども、要するに開発メニューから選択できるUAはiPhone OS 2.1ではなくて1.1.3(昔のiPhone)だったためうまくいかなかったと。
Mac版のSafariでは、以下のファイルの中身を適当に書き換えると、「開発」メニューからiPhone OS 2.1のUAを選択できるようになるみたいです。
/Applications/Safari.app/Contents/Resources/UserAgents.plist
に以下のUser-Agent文字列を見よう見まねで追加する:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F136 Safari/525.20
これでまた来週試して結果をご報告したいと思います。


○結論
もしこれでただ乗りに成功できれば、しばらくはマックが主な勉強場所になりそうです。

2008年11月10日月曜日

知っている人がメディアに露出すると有頂天になる小者=自分


何気なく@ITのフィードを眺めていたら、なんだかどこかで見た名前が・・・って!こないだのPython温泉にいたニコニコ大百科の中の人!!
うらやましいと思う反面、なんだか凄い悔しいです。自分もいつか日の目が当たる人間になれる時が来るんでしょうかね?
とにかく、勉強会にはえり好みせずどんどん参加することにしました。このカレンダーさえあれば勉強会の日程は分かるんだから、参加しなきゃ損ですよね。