at_yasu's blog

ロード的なことを

忘備録

はてな技術勉強会再開のお知らせ「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 の制限
        • 描画タイミングやメモリー制限
開発の流れ
  • 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 クライアント作成

余談: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~...
      • 要は統一してくれよ
        • はてなでは、差を吸収する関数を作って、そいつでキャリア間の差をなくしている
    • 簡易位置情報
      • GPS 機能がない機種でも位置情報が使える
      • アンテナの位置だから、田舎だと誤差がかなりある
    • iPhone/Android/PCBrowser
      • javascript
        • 精度が500m以下になるまで取り出しを繰り返して、精度を上げる。
    • ExIF
      • iPhone では標準でサポート
位置情報の記録
  • はてなではMySQLを使用
    • PgSQLの方がいい?
    • 保存方法:
      • Geometory 型
        • MyISAMしかサポートしていない
        • select X(lat), Y(lat) from ... といった感じにしないといけないみたい
      • Decimal 型
        • lat/lon をそれぞれ保存
      • 文字列
        • GeoHash
          • lat/lon の数値のビットを先頭から交互に取り出し、一つの32bitの整数にして、base32
          • ラスベガスだと、「9qqj7nmxncgyy」な感じらしい。
          • 癖がある。
          • GAE の制限(比較条件が一度の問い合わせで複数回つかえない)から生まれたもの
          • 周囲検索で、 9qqj7nmxn* などといった使い方ができる。
          • はてココラリーの難易度に使用
        • GeoHex
位置情報の表示
  • staticMapAPI
    • カラゲーで使用
    • API制限(1000回まで)がある
      • 最近なくなった気配
  • GoogleMapsJavascriptAPIv3
    • API Key が不要
    • SmartPhoneで使用
  • styledMap
    • GoogleMap上で表すスタイル

*1:ninjinkunにとっての初めて?

*2:先頭のコメント部分はさりげなく変わってないんだよね