忘備録
はてな技術勉強会再開のお知らせ「iPhoneアプリ開発入門編」「位置情報の取説」 - Hatena Developer Blogに行ってきました。ちなみ、前から二列目?の壁側にいた、髪の長い人でコーラを飲んでた人です。その時取ったノートのまとめ。所々間違えてるかも。
長文書くのは体力的に厳しいしので箇条書きです。
iPhoneアプリ開発入門編
- 次回は「webクライアント(Twitter クライアント)の開発」、その次に「Performance Tuning」の予定
- はてココが初めてのリリース*1
- Programmer - Designer - Web側のAPI技術者の三人体系
- Programmer でも Designer にはできない部分があるから、自分でパーツなどを作った
- Flash でシミュレーションみたいなことが出来れば、 Designer にも楽かも?
開発の実際 (現実)
- UI作成に8割
- designなどUIの基礎が必要
- Programmer + Designer のタッグが必要(Programmerがデザイン/Designerがプログラミングできるのが理想・・・)
- web に比べて
- リッチにできる
- CoreAnimation などなど GPUブイブイ使える
- 反面...
- Design が難しい
- 何だかんだでコードが必要になるから
- Hardware の制限
- 描画タイミングやメモリー制限
- Design が難しい
- リッチにできる
開発の流れ
- Cocoa の流れ MVC モデル
- 表面上綺麗に分かれてるけど、内部はぐちゃぐちゃになってしまう。
- InterfaceBuilder と code でカオス
- UI の変更はしょっちゅう
- 標準外(UIKitなどに無いパーツ)
- 作成はコスト高
- SDKのドキュメントにはないけど、事実上の標準とかある(公式TwitterクライアントのTLにある、上にピョコっと出てくるあれ)
- 何が標準化を見極める必要あり
- 作成はコスト高
- 表面上綺麗に分かれてるけど、内部はぐちゃぐちゃになってしまう。
- マネージメント (まとめ)
- InterfaceBuilder で UI作成
- Xcode でコントローラーとモデル部分を作成
- バイナリーを作成
- UI作成に戻る
- の繰り返し
サンプルプログラム (ここらへん曖昧で参考にならないかと。Ustとか見てくだせぃ)
- ビフォナッチ級数を表示させるアプリ
- Xcode
- プロジェクト作成
- 中のテンプレートがバージョン毎に微妙に変わってる。*2
- UIView
- UIView の、レイヤー的に上に、UIView を貼り付ける感じで、パーツは構築されている
- IB(Outlet|Action)
- eventCallBackで、 addTarget:action: で実装
- iPhone はほとんどUIが中心
IBOutlet で気づいたけど、私も以前は
@interface myViewController : UIViewController { IBOutlet UILabel * resultView; } .. @end
と書いていたけど、最近は
@interface myViewController : UIViewController { UILabel * resultView; } @property (nonatomic, retain) IBOutlet UILabel * resultView; .. @end
とやってる。他のUIViewController からプロパティで取れるから便利という理由で。もしかしたら、
@interface myViewController : UIViewController { UILabel * resultView; } @property (nonatomic, readonly) IBOutlet UILabel * resultView; .. @end
のほうがいいんだろうけど、多分次回の話。
次回(9月下旬?)
- webクライアント/Twitter クライアント作成
- UINavigationController / UITableView の話
- Framework (JSONFramework/ASIHTTPRequest) の使い方とかの話
余談:ASHTTPRequestってなんぞと思い調べたらPrivateFrameworkに入ってる部分なのね。NSURLConnection あたりでもいいように思うんだけどなぁ・・・とよく見たら、ASIHTTPRequestってのもあるのね。これの事かしら。
位置情報の取説
緯度経度とか取得方法
- 緯度経度とか
- 緯度: lat
- 経度: lon/lng
- 高さ?
- 海抜からの高さ?
- 地球を楕円に見立てて、そこからの高さなので、厳密には海抜からの高さじゃない。
- 携帯から
- ガラケーから位置情報を送信
- docomo
- HTTP method: POST?
- <a href='...' lcs>という感じ
- パラメータ let/lon に dms(ddd.mm.ss.sss)
- 途中で位置情報取得を切っても、それなりに制度のいい情報を送る
- au
- <a href="device:location?url=...">
- ddd.mm.ss.sss
- softbank
- <a href='location.geo?...''>
- ?pos=N~...
- 要は統一してくれよ
- はてなでは、差を吸収する関数を作って、そいつでキャリア間の差をなくしている
- docomo
- 簡易位置情報
- GPS 機能がない機種でも位置情報が使える
- アンテナの位置だから、田舎だと誤差がかなりある
- iPhone/Android/PCBrowser
- javascript
- 精度が500m以下になるまで取り出しを繰り返して、精度を上げる。
- javascript
- ExIF
- iPhone では標準でサポート
- ガラケーから位置情報を送信
位置情報の記録
- はてなではMySQLを使用
- PgSQLの方がいい?
- 保存方法:
- Geometory 型
- MyISAMしかサポートしていない
- select X(lat), Y(lat) from ... といった感じにしないといけないみたい
- Decimal 型
- lat/lon をそれぞれ保存
- 文字列
- GeoHash
- lat/lon の数値のビットを先頭から交互に取り出し、一つの32bitの整数にして、base32
- ラスベガスだと、「9qqj7nmxncgyy」な感じらしい。
- 癖がある。
- GAE の制限(比較条件が一度の問い合わせで複数回つかえない)から生まれたもの
- 周囲検索で、 9qqj7nmxn* などといった使い方ができる。
- はてココラリーの難易度に使用
- GeoHex
- geoHashは四角形だったのを、六角形にした
- これ? http://geogames.net/labs/geohex
- GeoHash
- Geometory 型
位置情報の表示
- staticMapAPI
- カラゲーで使用
- API制限(1000回まで)がある
- 最近なくなった気配
- GoogleMapsJavascriptAPIv3
- API Key が不要
- SmartPhoneで使用
- styledMap
- GoogleMap上で表すスタイル