2008年11月30日日曜日

DEMOsa Vol.5に参加してきました

DEMOsaについてはこちら
http://www.mosa.gr.jp/?p=2168

デザイナー系の人が自分のやった新しくて面白いことをライトニングトークみたいに発表する会でした。
スケジュールを見てもわかる通り、iPhoneネタが非常に多かったです。

最初の半分を遅刻して見逃してしまいましたが、以下感想を箇条書き。

■ポメラ
  • ノートPCが持ち込めない場所(会社とか会社とか会社)では大活躍できそうだ。言われてやっとその価値に気づいた。
  • でもポメラからPCにデータが移せない(USBメモリは全面禁止が当たり前なので)ので、結局意味がない気がしてきた。
  • 実際に触らせていただいたが、小さい。初代DSにそっくり。キーボードはいまいち。EeePCのどうしようもないキーボードに比べれば遥かによいが、MacBook Airのキーボードに慣れてしまうとやはりMacBook Airに軍配が上がる。

■Cookie
  • 絵文字だけでコミュニケーションする子供向けSNSのようなもの。
  • 実装はともかくとして、絵文字だけでコミュニケーションという発想は最高。これでイスラエル人ともヘブライ語を覚えずしてコミュニケーションできる訳だ。絶対にこれはiPhoneで実現するべき。

■iKotoの中の人
  • 日本文化に関するアプリばっかり作る理由は、文化を創るか。かっこいい。
  • 漫画とアニメ以外の文化は創らないと伝わらない。

■Afrous
  • ブラウザだけでマッシュアップが作れるというアプリ。らしい。
  • RSSもAPIもないただのWebページのDOMを解析してデータを抜き出して、youtubeやamazonと連携させていた。凄い!
  • たとえば日経新聞のトップページを切り出して強制的にRSS化することもできそうだ。

■RainbowNoteの中の人
  • 1万アプリものアプリケーションがあふれ変えるiTunes Storeの壁は高い、キーになるのはプロモーション
  • Moopf's App Store Review Scrapper itunesレビュー評価を見る
  • Mybefia 競合アプリとの人気の差を見る
  • Mobclix 国別の評価を見る

■BiND
  • 10分でWebページを作成していた。Webページをブロック単位に分割して、ブロックを追加したり編集したり。
  • 本当なら6時間かかる作業を10分でやったんだって!本当かどうかは信じがたいが、確かにページの編集速度は速かったしCSSをいっさい触ってなかった。
  • ロゴ画像の編集は本当に便利そうだった。

■MemoryTreeの中の人(宮田さん)
  • 空間にPostitみたいに画像を貼付ける!セカイカメラみたいだなぁ。もっともセカイカメラと違ってこちらは本当に実現されている(できることが限られているけど)。
  • iPhoneを振ってメモリーを投げ、メモリーを受け取るというアイディアがすばらしい!後から懇親会でお聞きしたところ一人の天才プログラマーとセットで1週間不眠不休でやって作ったそうな。
  • Motion Comics Playerなんて動画を電子書籍としてリリースしているけどほとんど売れてないらしい。それでもそこそこのApp Storeで上位だから電子書籍はよほど売れていないんだろうとのこと。
  • 以下、後から懇親会でお話ししたときのこと・・・
  • 貫禄がある人だった。ちょっと怖い。でもいい人。
  • 1万アプリのうちほとんどは有象無象、いいものを作ってプロモーションをきちんとやればいくらでも上位に入れるよ、とのこと。
  • ケータイなんかに比べてiPhoneを購入する層の嗜好は偏っているとのこと。いわゆる新しいものとかっこいいものが好きな人たち。
  • 実はこの宮田さん、世界で一番最初に着メロを作って大もうけした人なんだとか。なんてこった・・・
  • で、あまりにも着メロが大成功だったのでモバイルからは遠ざかっていたが、iPhoneでモバイルに復帰したそうな。それほどの可能性か!iPhone
■Niconの新製品は化け物か
  • http://www.nikon.co.jp/main/jpn/whatsnew/2008/1007_up_01.htm
  • 第一印象:どう見てもスカウターです
  • 第二印象:やりやがったNicon、やりやがった
  • 実際に体験しましたが、ヘッドフォン部分のフィット具合は凄くいいです。画質も凄い、目の前に画像イメージがわいてくる感じです。サイズは640*480らしいですが実際はもっと小さく見えます。
  • ディスプレイ位置の調整がかなり大変です。あと振動にも弱いです(大きくぶれて見えなくなるので、歩きながらはつらいと思います)。
  • しかしこれにGPSとアプリケーション作成プラットフォームをつけてiPhoneみたいにしたら面白そう
  • そうしたら私は絶対にライトセイバーアプリならぬスカウターアプリを作る。「戦闘力、たったの5か・・・ゴミめ・・・」

■ノルウェーの留学生の方とお話
  • 外人さんは未だにちょっと苦手かも
  • 彼曰く、留学している日本人とそうでない日本人は話す内容が全然違うらしい
  • 留学していない日本人は、日本の否定的なところを言われたときに鵜呑みにしてしまうが、留学している日本人は嫌な顔をする(そうではないという)らしい。う・・・

CS193P Cocoa Programming - 7日目 UINavigationViewControllerを使う

  • UIViewControllerのawakeFromNibは動作しないときがある。UIViewControllerの初期化には 必ずviewDidLoadを使うこと
  • UINavigationViewControllerはxibファイルに含めずに、ソースコード中で初期化したり管理する方がうまくいく
  • UINavigationViewControllerの上に表示されるバーを編集したいとき(ボタンを追加したりするとき)は、UINavigationViewControllerにpushされるUIViewControllerのnavigationItemプロパティを編集する。Interface Builderから操作できるかどうかはわからない
  • UIAlertViewがポップアップ表示、UIActionSheetが下からにょきっと出てくるボタンのリストを表示
  • ボタンにソースコード中からアクションを追加することが可能(UIButton, UIBarButtonなどのドキュメントを参照のこと)


さて、ナビゲーションがついてようやくiPhoneアプリらしくなってきました。
画面はナビゲーション時にUIViewControllerのインスタンスがどのように管理されているかをログに吐いてみたところです。viewDidDisappearの後にdeallocが毎回流されているのがわかります。
要するに、一つのviewを毎回毎回alloc->initしないでインスタンスを再利用してやろうと思うときはUINavigtionViewControllerにpushするだけではなくて、どこか別のところでUIViewControllerのインスタンスを保持しておく必要があるようです。2tchの作者さん曰くalloc->initは相当重い動作らしいので、できるかぎり使い回しができるようにしたいです。



ポップアップも出るようになりました。


※いい加減開発ペースと学習ペースをあげようと思っているので、しばらくの間はブログの更新がこんな感じで適当になりそうです。

2008年11月26日水曜日

CS193P Cocoa Programming - 6日目おまけ、多角形をくるくる回せるようにしてみた

  • CS193P(http://www.stanford.edu/class/cs193p/cgi-bin/index.php)のチュートリアルで作っているHelloPolyプロジェクトを自分なりにアレンジしてみた
  • 自分なりにアレンジしてみた=ニコニコ動画だと駄作フラグ
  • UIViewはhiddenプロパティをYESにした瞬間に消えてしまうので、アニメーションでフェードアウトさせたいときは、まずアニメーションだけ実行>アニメーション終了時のデリゲータ(- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag)で実際にUIViewをhiddenにする
  • タッチ動作を取得するには、UIView(正確にはUIResponder)のtouchBeganメソッドやtouchMovedメソッドをオーバーライドする
  • デフォルトではマルチタッチ不可能(最初の1タッチのみ感知する)、マルチタッチしたければ設定を変えること
  • UITouch.tapCountでタップした数を取得できる。これを使ってダブルタップを検出できるが、連打すると3とか4とか2より大きい数が取得されてしまうので注意
  • CGPointはクラスではなくて構造体、頭にCGがつくCore Graphics系はすべて純粋C言語であるところに注意!
  • CGPointなどを作成するときはCGPointMake()関数を使う
  • CGPointやCGRectなどをObjective-Cのクラスとして扱いたいときはNSValueクラスを使う、たとえば[NSValue valueWithCGPoint:(CGPoint)point]など
  • CGRectGetMidX()関数とか地味に超便利
  • C言語の変数の有効範囲について:http://www.cis1.c.dendai.ac.jp/c_master/C_14.htm
    CGPointMake()で作ったCGPointなどは自動変数なので、別のメソッドに渡すときはポインタ渡しではなくてそのまま値で渡す

ただ単にカリキュラムにそって進めていくだけでは面白くないので、この辺りでちょっとチャレンジングなことをしてみることにしました


まずは新しくサブビューを追加。


ON OFFスイッチでビューを出したり消したり。出したり消したりするときはアニメーションします。


UISliderを使って、線の太さを変えてみましたよ。
UISliderのvalueプロパティはdouble型なので注意です。ずっとNSString型だと思ってました。
それから、タップした向きに多角形を回転できるようにしました。赤線は中心からタップした点への線分です。
タップしてドラッグするとスムー(?)ズに回転しますよ。


破線への切り替えもできるようにしました。
UISegmentedControlを使っています。このUISegmentedControl、取得できる値が選択されているセグメントのインデックス番号(selectedSegmentIndex)だけなのでちょっと厄介です。HTMLのラジオボタンみたいに好きな値をセグメントごとに持たせられればいいのに。


今回作成したアプリのプロジェクトファイルを公開してみました。
面白いことをやっている点は何一つないのですが、まぁ一応。
http://sites.google.com/site/akisutesama/files/HelloPoly-06b.zip?attredirects=0

今後はgithubとかで公開できるようにします。

2008年11月22日土曜日

CS193P - ここまでの進捗をアップしてみた

ここまでのCS193Pの進捗をアップしてみました。

http://sites.google.com/site/akisutesama/files/HelloPoly-06.zip?attredirects=0

Xcode3.1用のプロジェクトファイルと、ソース一式が入っています。
Max OS Xで解凍してXcodeで読み込んでコンパイルできると思います。たいした内容ではありませんが一応。

CS193P Cocoa Programming - 6日目、NSUserDefaultsの使い方

  • アプリケーションが終了した後もデータを保持したい(例:現在開いているページなど)
  • NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  • あとはNSDictionaryとほとんど同じ(格納の仕方も取得の仕方も)
  • BOOLとかintをそのまま格納できるメソッドもあります
  • 格納するタイミングは、値がかわった瞬間かまたはアプリが終了する瞬間
  • 取得するタイミングは、アプリが立ち上がった瞬間かまたはawakeFromNibメソッド
今日はNSUserDefaultsとやらの使い方を学習。
NSUserDefaultsとはアプリケーションが終了した後もデータを保持することができる仕組みのようです。
本格的にデータを保存したいならSQLiteやファイルを使うんでしょうが、ちょっとしたデータ(例えば現在開いているページ)を保持したいときなどにSQLを書くのは煩雑です。そういうときに便利に使える仕組みらしいです。

○値を格納する
タイミングは二つ。値がかわった瞬間か・・・
//ボタン押し下げ時に値を減らす
- (IBAction)decrease {
int currentNum = polygonShape.numberOfSides;
currentNum--;
polygonShape.numberOfSides = currentNum;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:currentNum forKey:@"numberOfSides"];
[self updateInterface];
}
またはアプリケーションが終了するタイミングか。
//@implementation HelloPolyAppDelegate(アプリケーションのデリゲートの中で)
- (void)applicationWillTerminate:(UIApplication *)application {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setInteger:controller.model.intValue forKey:@"numberOfSides"];
}
パフォーマンスに応じてどちらか好きな方を選んでくださいとのことです。

○値を取得する
こちらもタイミングは二つ。アプリケーションが立ち上がったタイミングか・・・
//@implementation HelloPolyAppDelegate(アプリケーションのデリゲートの中で)
- (void)applicationDidFinishLaunching:(UIApplication *)application {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int storedNumberOfSides = [defaults integerForKey:@"numberOfSides"];
controller.model.intValue = storedNumberOfSides;
[window makeKeyAndVisible];
}

または対象のクラスのawakeFromNibメソッドの中か。
//ここではコントローラクラスの中で・・・
- (void)awakeFromNib {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
int storedNumberOfSides = [defaults integerForKey:@"numberOfSides"];
self.model.intValue = storedNumberOfSides;
[self updateInterface];
}

この二つの違いは正直わかってません。複数のNibファイルを利用するときはawakeFromNibでないと駄目らしいですが・・・

CS193P Cocoa Programming - 5日目、いよいよView自作

  • Interface Builderを使ったらとにかくWrite Class Files...を押すのを忘れないように
  • 描画はJavaのSwingなどとほぼ同じ
  • drawRectメソッドをオーバーライドして描画する
ViewとかAnimationとか、いよいよ実践が近くなってきたようです。
だんだんと難易度も上がってきました。



まずは自作Viewを作成。
Interface BuilderからUIViewを引っ張ってきて画面上に配置。
クラス名を適当に(ここではPolygonView)に変更。
ControllerクラスやらModelクラスなど、必要に応じてOutletを追加します。
最後に(一番忘れやすいんだけれども)メニューからFile > Write Class Files... この書き出しを行わないとXcode上に実際のソースが出てきません。

書き出しを行ったらXcodeを開いて、以下の2つの仕事を行います。
・先ほど追加したPolygonViewのスーパークラスを定義する
・ControllerにIBOutlet PolygonView *polygonViewを追加する

新しいオブジェクトはWrite Class Filesで一発だと思うけれども、既存のクラス(例えば前回実装したController)なんかは、書き出ししちゃうと上書きしてしまいそう。怖いので今回はXcodeから書くことにしました。でもこれ非常に非効率的。hファイルだけ上書きしてほしいんですけど・・・



勇気を振り絞って上書きWrite Class Files...にチャレンジしたら、なんだかこんなFileMergeとかいうアプリが立ち上がって、きれいにマージすることができましたとさ。よかったよかった。


では早速Viewに描画処理を追加します。
描画を行うのはUIViewの-(void)drawRect:(CGRect)rectメソッドですので、こいつをオーバーライド。
あとは再描画したいタイミングでUIViewのsetNeedsDisplayをコールすれば適切なタイミングでシステムが再描画してくれるというしくみ。Swingに似てますね。



実際に描画してみました。簡単簡単!!



描画のやり方さえわかってしまえばこっちのものです。
ポリゴンの点の位置を計算するメソッドは例題の中で用意されていたので、それを丸コピーして点の位置に線を引くだけ。線の太さを調節する関数はCGContextSetLineWidthというのが見つかったのでそれを使うだけ。リファレンスが使いやすい!すてき!



カスタムビューの中にUILabelを追加して、ラベルにポリゴンの名称を表示できるようにしてみました。UILabel.textプロパティを書き換えるタイミングはカスタムビューのdrawRectの中で。ほかに良いタイミングが見当たらず。


ひとまずこんなところですかね。次は・・・
  • スライダーで線の太さを変える
  • 線の種類を何らかのスイッチで変える
  • ビューの上でフリックしたらポリゴンがくるくる回るようにする(アニメーション処理の勉強が必要)
これらを試してみたいですね。

iPhone OS 2.2にアップグレードに失敗、ずいぶんと酷い目にあいました

  • iPhone OS 2.2へのアップグレード時に途中でエラーが出て中断、そのままインストールが再開できず
  • ケーブルを接続し直したり再起動したりHomeボタン押しっぱなしでセーフモード起動してもiTunesが認識せず
  • 結局Macbook Airにつないでみたら一発でリカバリモードで認識してくれたので助かった
  • ということでiPhoneで本当に困ったときはMacにつなげ、Windowsは信用ならない
  • いつのまにやらiPhone上のi.softbank.jpメールアドレスの設定が非常に簡単になっている(メアドとパスを入れるだけですべてやってくれる)

iPhone OS 2.2が事前予想通りにリリースされたので、さっそくアップデートを試みました。
が・・・途中で原因不明のエラーが出てアップグレードに失敗してしまいました。
そのままiTunesが何度やってもiPhoneを認識しないと言う事態に陥り、あわや愛しのiPhoneが6万円の格好いい板になりはてるかと気が気ではありませんでした。
結局Macにつないでみると無事認識してくれたので、そのままiTunesから復元を試みて無事復活。やれやれです。
基本設定が全部吹っ飛んでしまいましたが、アプリのデータなどはすべてWebサービス上にあるため全く無傷でした。おかげさまでiPhoneが無事立ち上がってからは1時間もかからずにすべてのデータを復元できました。クラウドコンピューティングの強力さを改めて実感です。


メールアカウントを設定し直す際に気づいたのですが、いつのまにかi.softbank.jpメールアドレスの設定が極めて簡単になっています。
以前は設定時にSSL通信を使わないようにしたり、IMAPとSMTPサーバー名を自分で設定する必要があったのですが、今日試してみたらメールアドレスとパスワードを入れるだけで全部自動でやってくれました。

それからiPhone 2.2といえばなんと言っても顔文字。コレで日本語キーボードがQWERTY、10キー、そして顔文字と3つになってしまいました。どれだけ日本語入力に力を入れてるんだって感じです。


メールの設定が楽になったり、顔文字が使えたりワンセグを見れるようにしたりと精力的に対応してくださって本当に助かるのですが、
それでもやっぱり、アップデートを行っただけで二度と起動しなくなってMacにつながない限り復元できなくなるようでは、とてもじゃないですが普通の人にiPhoneをお勧めは出来ないですね-。
だってこんなのが100万台も日本で売れたら、きっとソフトバンクモバイルのカスタマーサポートの中の人がストレスと過労でみんな死んでしまいますよ?

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温泉にいたニコニコ大百科の中の人!!
うらやましいと思う反面、なんだか凄い悔しいです。自分もいつか日の目が当たる人間になれる時が来るんでしょうかね?
とにかく、勉強会にはえり好みせずどんどん参加することにしました。このカレンダーさえあれば勉強会の日程は分かるんだから、参加しなきゃ損ですよね。

2008年11月9日日曜日

CS193P Cocoa Programming - 1日目の宿題Bをやってみた

  • Objective-Cは、見た目とは裏腹に非常に簡単
  • Xcodeのリファレンスはきわめて優秀
  • Xcodeのコード補完はControl + , またはOption + Escだが使いづらいのでCommand + Spaceに変更する
  • Xcodeのコンソール表示(NSLogの内容を確認)はShift + Command + R
引き続き宿題B。こっちの宿題はiPhoneから完全に離れてObjective-Cの基礎基本について学ぶようになっています。
それにしてもこの宿題、問題の出し方がうまいです。全く調べないで解けるほど優しくないですが、何処を調べればよいかはきちんと示されています。リファレンスの引き方と自分で調べる力が養えるのがうれしいです(あたりまえなんですけど・・・自分の大学では調べてもさっぱりわからないか、調べ方がそもそもわからないか、調べる必要がまったくないか、というような宿題が多かったので)。

閑話休題。Objective-Cは何一つわかりませんが、とにかく見よう見まねでコードを書いてみます。


おおー動いた!最初このコンソールの出し方がわからず困りました。Shift + Control + Rでした。


調子に乗ってさらに数行記述。リファレンスを引いてNSString同士の結合およびフォーマットのやり方を調べてみました。+で結合できないのが少々面倒(確かC++だとできたはず)。


なれてきたらもう簡単。
それにしてもメソッド名がいい感じに長いです。私はこういうやたら説明的で長いメソッド名が大好きです。


NSArrayのループもこの通り。Javaっぽい。
あとNSDictionaryも調べてみましたけど、Javaと同レベル・・・これはいまいち・・・
JavaScriptやPythonみたいなスクリプト言語らしい使い勝手のいいDictと比べる方が悪いですけどね。


Xcodeの設定。これでコード補完をCommand + Spaceに割り振ることができます。



同じ項目がもう一カ所ありましたが、こちらは変えなくても特に問題ないらしいです。メニューから呼び出しているかそれともテキストエディタの中で直接呼び出しているかの違いのようです。

それでは引き続き残りの宿題をやってしまいますか!

CS193P Cocoa Programming - 1日目の宿題Aをやってみた

  • http://www.stanford.edu/class/cs193p/cgi-bin/index.php
  • これはわかりやすい
  • 宿題があるのが実にうれしい
  • Interface Builderで配置したクラスの属性(位置とか表示するイメージとか)を操作するときは、Command + Shift + I またはCommand + 1から4
  • Labelの文字の大きさとフォントは変えられたが色とか太字はなぜかうまくいかず
  • vertical centerな配置やholizonal centerな配置を行うには、メニューのLayout > Align
今日からスタンフォード大学の学生になった気分でさくさくっと勉強。
手始めに1日目の宿題から。・・・こんなに宿題を嬉々としながらこなす私の姿を学生時代の自分に見せてやりたいものだ。
一つ目の宿題は、コーディングはいっさいなく、interface builderからCocoa Touchが用意しているviewやclassを配置して画面をデザインしてビルドして走らせるだけというもの。


こんな感じでinterface builderにパーツを配置して・・・


できた!初日の宿題だけあって実に簡単。

こういったグラフィカルなGUI作成機能は別に目新しいものではない(Microsoft Visual Studio 2005などでもできる)が、これまで使ったことがあるツールよりは使いやすかった気がする。まぁVS2005はマイクロソフト語で書かれているので読めない=論外だし、Eclipse GEFはそもそもSwing自体があまりよいフレームワークでなかったため使いづらかった。
なによりiPhoneの場合はデバイスの画面サイズが決まっているから絶対座標指定がしやすい。

2008年11月8日土曜日

iPhone開発をこれから始めるときに参考にする資料

  • スタンフォード大学の授業が一番わかりやすい
  • iPhone Dev Centerのビデオは全体像をつかむために使える
  • 良い書籍がないか探索中
  • Core Animation, Core Audio, Quartz(Core Graphics), OpenGL ESあたりの使い方に詳しい資料が欲しい
つい最近までAndroidの開発に浮気していましたが、とあることがきっかけで、iPhoneの開発に本格的に戻ってくることにしました。
ところが私自身、Mac OS Xでの開発もやったことがないし、XCodeも使ったことがないので、そういう人向けの初めてのiPhoneアプリ開発用資料を集めてみました。


CS193P - Cocoa Programming | Announcements
スタンフォード大学のCocoa Programmingの授業。英語が読めるなら断然これがオススメですね。タダだし。本当にタダでいいんですかこれ?

iPhone Dev Center
Appleの総本山。ここのビデオをiPhoneに突っ込んで通勤中に見るのがオススメです。詳しいところは全く分かりませんが、全体像をつかむには適しています。


それから書籍。正直iPhone開発向けの本はこれ!と言うものがまだ見つかっておらず、Objective-Cの本のみを調査中。

詳解 Objective-C 2.0詳解 Objective-C 2.0
荻原 剛志

by G-Tools

4000円以上しますが、一番評価が高かったのがこれ。


あとはiPhoneのメディア系(アニメーション、画像描画、オーディオなど)の使い方の詳しい解説資料が欲しいのです。こちらは目下捜索中。使うのはHello Worldレベルから脱却してから。

2008年11月3日月曜日

いつの間にやら本業が翻訳家に・・・?

実は最近、iPhoneアプリの英語から日本語への翻訳活動をやってます。
一つはこちら:http://www.phantomfish.com/byline.html
それともう一つ現在ベータテスト中のアプリを翻訳しています。

多数の同僚や友人に訳のチェックなどを手伝っていただきまして、本当に感謝しております。


それで、今週はせっかくの3連休なので、本を読むなりプログラムの勉強をするなりしたかったのですが、いつの間にやら本業になりかかっている翻訳作業に時間を食われて結局何も出来ず。まぁ今担当しているベータのリリースが終わってしまえば当分は暇なはず・・・