強火で進め このページをアンテナに追加 RSSフィード

整理された情報は こちら へどうぞ。

2011年11月24日

[]「南東京iPhone開発者勉強会 12回目」に参加して来ました(その2)

めぐめぐ5様:「iPhoneAndroidで同じアプリを作ってみた」

【スライド資料】

  • Androidは解像度が端末ごとに異なるのでどこが伸びたり余白が出たりするかを考えて制作する必要が有る
  • アスペクト比も違ったりする
  • お客さんもiPhoneユーザだったりするのでAndroid固有の特徴を理解してない
  • わからないならエンジニアに聞こう
  • 解像度ごとにフォルダを分ける→新しい解像度が増えた時に新たにフォルダを追加するなどメンテナンスは必要
QA
  • 今はAndroid開発の方が需要が有るのですか→野良アプリがリリース可能という部分に需要有り
  • (質問メモれず)→タブの位置がAndroidは上だがiPhoneと合わせてくれと言われる為、画面の下に自前でタブを準備した。スクロールも問題に。Androidは縦か横だけで斜めのスクロールが出来ない。こちらも自前で準備
  • UIで差分が有って大変という話ですが他の部分でも大変な所は有りますか?→自分は関わっていなかったがメールでテキスト入力する時にフォーカスの当て方に違いが有るのが大変だったみたい。

ふじかあ様:「storyboardについて(たぶん)」

発表の前半部分のスライド(PDF)

発表の後半部分のスライド(PDF)

  • 適切なsegueが無い場合の例外の対処は@try〜@catch
  • 「ちらみせ」、FacebookのUIを再現してみたアプリ
iOS4プログラミングブック

iOS4プログラミングブック

親方こと(加藤さん(飛び入り))「辞書アプリを作ってみた」

2011/11/23南東京勉強会

https://docs.google.com/present/view?id=0AY7sy2IGk_PHZGZrZjVkNmpfNDhmanRqc3RnOQ&pli=1

cocos2d for iPhoneレッスンノート

cocos2d for iPhoneレッスンノート

きしかわ様:(きしかわさんのたーん)

  • 新しい開発者が参加して来た為か、最近出たアプリでパスワードを生で置いているアプリなどを見かけます
  • iTunesで同期した時などにファイルを見るとパスワードなどがバレてしまう
  • KeyChainのラッパー作りました
  • KeyChainのデータはAppleIDが同じ場合には共有する事も可能
  • Titanium向けのKeyChainのラッパーも作りました
  • UINavigationBarのClassの差し替えはIBで簡単に変更出来る
  • 【高速化のポイント】セルを細かく指定する
  • 基本はスクロール方向へスナップするけど、流石に移動距離が大き過ぎる場合には近くにスナップする
QA
  • (QAのタイミングで@takiuchiさんからのコメント)最適化PNGを使えばdrawInRect:をするのが一番速いはず。しかし、内部にCALayerを持つのでメモリの面では不利。

【関連リンク】

http://sonson-code.googlecode.com/svn/trunk/iPhone2.0/OptimizedPNG/

iPhone Development: iPhone "Optimized" PNGs

http://iphonedevelopment.blogspot.com/2008/10/iphone-optimized-pngs.html

  • マップの動作が気持ちいいですが何か工夫してますか?→ドラッグした時にちょっと時間を開けてから通信をしてピンを落としている。
そのまま使える iPhoneアプリプログラム

そのまま使える iPhoneアプリプログラム

akisutesama様(飛び入り)

A-Liaison BLOG: 静的ライブラリ中のシグネチャが衝突してビルドできないときに再ビルドしないでシグネチャを書き換える

http://akisute.com/2011/11/blog-post.html

QA
  • ローカルシンボルとは?→ローカルシンボル化すると同一の.aファイル内でないとアクセス出来なくなる。
  • 話は変わるけどEvernote Clealy、おすすめ。

http://www.itmedia.co.jp/news/articles/1111/17/news063.html

[]「南東京iPhone開発者勉強会 12回目」に参加して来ました(その1)

南東京iPhone開発者勉強会 12回目 : ATND

http://atnd.org/events/21872

2011/11/23 #stidev 南東京iPhone開発者勉強会 #12 - Togetter

http://togetter.com/li/218176

@hkato193 さんよりジンギスカンキャラメルという嬉しい(?)、おすそ分け貰いました。みんな食べると良いと思うよ。意外とすでに食べた事が多い(自分もですが)みたいで会場では「これが食べれる場合は体調が良いと自分の体調チェックに最適」とのステキな言葉などが交わされてました。なお、「いや、これ旨いでしょ。コーヒーキャラメルみたいなもんでしょ」などの言葉も上がっていた事を付け加えておきます。

f:id:nakamura001:20111123231838j:image

たなか様:「ARアプリ開発」

3Dで表現したい

  • デバイスの向きに追従したい
  • 一緒に記念撮影ができるようにしたい
  • 合成した写真をプレビュー画面で確認したい
  • 太陽の位置や夜間の使用を考慮したい
実現方法
  • 加速度の値からデバイスの角度を計算する
  • 現在位置と対象の緯度経度から角度を計算
  • 計算結果を3Dモデルに反映
必要なFramework
  • カメラ - AVFoundation
  • 3D描画 - OpenGLES
  • 現在地と方角の取得 - CoreLocation
  • デバイスの向きを取得 - CoreMotion
  • シャッター部分の後ろに3Dモデルを隠して欲しいなどの要望が有った為、ピッカーではなくAVFoundationを使用
  • AVFoundation
    • Appleのサンプル「AVCam」を参考に作成
  • OpenGL
    • Appleのサンプル「GLGravity」を参考に作成
    • AVCaptureVideoPreviewLayerにOpenGLのViewを追加
  • CMLocationManager
    • 地磁気と加速度からデバイスの向きを考慮した方角を算出

【参考にした資料】

Implementing a Tilt-Compensated eCompass using Accelerometer and Magnetometer Sensors

http://www.freescale.com/files/sensors/doc/app_note/AN4248.pdf


f:id:nakamura001:20111124205156j:image


【対策】

地磁気と加速度からデバイスの向きを考慮した方角を算出

  • 数学は苦手だが、こちらのPDFを参考にした
  • 標準コンパス特有の問題あり
  • そのままの値を使うと3Dモデル(ビルボード)がグラグラ揺れる
  • ローパスフィルターの適用
  • しかし、今度はデバイスの急激な角度変化時の追従性に難あり。。。
  • デバイスが縦か横かで90°差が有る
  • 加速度で判定したが値が変わるタイミングが異なる
  • デバイスを上にかざす様にした移動した時に方位の情報が180°異なるタイミングが発生する
  • どうしよう→ジャイロを使おう

https://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/MotionEvents/MotionEvents.html

  • CMMotionManager
    • CMRotationRateの値を使用
  • 角速度と加速度からiPhoneの角度を算出

【MITで公開されているPDF】

The Balance Filter(Complementary Filter)

http://web.mit.edu/scolton/www/filter.pdf

バッテリー問題

Energy Diagnosticsで60秒間計測

【テスト環境】iPhone 4 iOS 4.3.3

f:id:nakamura001:20111124210312j:image

f:id:nakamura001:20111124210352j:image

  • しかし、お客様の都合にてお蔵入りに
  • 折角なので技術を応用して作成

f:id:nakamura001:20111124210439j:image

UFO Camera 3D

http://itunes.apple.com/jp/app/ufo-camera-3d/id450479915?mt=8


島村様:IOSからのシリアル通信機器制御「iPad POS システム」

f:id:nakamura001:20111124210741p:image

  • iPadとレシートプリンタを繋ぎたい
  • 当然、メーカー(AppleEPSON)からは何の情報も無い
  • でも、ネットで検索すると、繋がっているような情報が?
  • 国内/海外で実装している事例が見つかる。サーバを置いてやっている所が有った。
  • レシートプリンタは定価18万、販売価格7〜8万くらい
  • EPSON TM-T70を使う事に決定

業務用小型プリンター TMシリーズ|TM-T70|エプソン

http://www.epson.jp/products/tm/tmt70/

  • でインターフェイスは?

f:id:nakamura001:20111124211235j:image

    • GKSessionでBluetooth、NetWork接続
    • NSStream経由でNetWork接続
  • GKSessionは同一アプリ内からしか通信出来ない
  • 選択肢はNSStreamだけに
  • NSStreamは、ストリームを表すオブジェクトのための抽象クラスである。
  • NSStreamオブジェクトは、様々なメディアのデータを読んだり、書いたりするために、デバイスに依存しない簡潔な方法を提供する。
  • メモリー・ファイル・ネットワーク(ソケットを通じて)に配置されたデータのストリームオブジェクトを作ることが出来る
  • つまり、データの読み書きをデバイスに依存しない形で記述可能

NSStream Class Reference

http://developer.apple.com/library/IOs/#documentation/Cocoa/Reference/Foundation/Classes/NSStream_Class/Reference/Reference.html

  • でTM-T70側は、どれ?

f:id:nakamura001:20111124211742j:image


  • 会場に質問「RS-232Cご存知の方」→「半分くらいですね」

15年位前までは、パソコン間の通信やパソコンと周辺機器間の通信の主流のシリアル通信でした。

  • 今でも、
    • 安価で簡単なハード構造
    • ドライバを必要としない単純なインターフェイス

が理由で低速デバイスに利用されています。

  • イーサネットがパソコン間の通信の主流になると、今までRS-232Cで通信してきた機器をそのまま、イーサネットに繋ぐプロトコルコンバータの需要が増えてきました。
  • 券売機などで使われている
  • プロトコルコンバータ

RS-232C機器のシリアル通信をインターネット上のソケット通信に変換するコンバータ

f:id:nakamura001:20111124212207j:image

  • 9100ポートを使用(プリンタに使用されているポート)
  • UART(シリアル通信関連のチップの名称)

RS-232Cの他の規格

  • RS-422→長距離
  • RS-485→複数の端末にデータを流せる

【設定画面】

f:id:nakamura001:20111124212407j:image

f:id:nakamura001:20111124212417j:image

f:id:nakamura001:20111124212425j:image

f:id:nakamura001:20111124212435j:image

【POS構成】

f:id:nakamura001:20111124212624j:image

f:id:nakamura001:20111124212632j:image

  • こちらの構成の場合はカスタムディスプレイからプリンタへは印刷のデータのみ送られる
プログラムの主要部分
  • 宣言
@interface SocketForDevice : NSObject <NSStreamDelegate>

@property (nonatomic, retain) NSInputStream *inputStream;
@property (nonatomic, retain) NSOutputStream *outStream;
  • 初期化
CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;

CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)_ipAdress, _portNo, &readStream, &writeStream);

_inputStream = (NSInputStream *)readStream;
_outputStream = (NSOutStream *)writeStream;
[_inputStream setDelegate:self];
[_outputStream setDelegate:self];
[_inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[_outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[_inputStream open];
[_outputStream open];
  • コマンド出力
char s[3];

s[0] = 0x1b;
s[1] = 0x61;
s[2] = 0x00;

[_outputStream write:(uint8_t*)s maxLength:sizeof(s)];
  • 文字列出力
NSData *data = [[NSData alloc] initWithData:[sendMsg dataUsingEncoding:NSShiftJISStringEncoding]];
[_outputStream write:[data bytes] maxLength:[data length]];
[data release];
  • 今日持って来たレシートプリンターにはSJISの漢字ROMを搭載されているので文字はSJISで送る
  • 0x00は制御コードとして使われるので文字列を送る時は注意が必要

f:id:nakamura001:20111124213617j:image

f:id:nakamura001:20111124213629p:image:w500

  • ディスプレイは1万円くらいで買えた
  • HDMI入力が可能
  • 安かったけど残念ながら製造中止

※【筆者注】おそらくこちらのディスプレイ

ONKYO製品情報:LPF10M01シリーズ - 周辺機器 | オンキヨー株式会社

http://www.jp.onkyo.com/pc/options/lpf10m01/index.htm

【西川和久の不定期コラム】 HDMI入力のあるデジタルフォトフレーム! オンキヨー「LPF10M01」

http://pc.watch.impress.co.jp/docs/column/nishikawa/20100728_383713.html

  • iPhone/iPadにはExternal Displayという第二画面として表示可能な方法が有る
  • 画面の左側はUIWebView
  • アニメーション部分はHypeにて作成

※【筆者注】Mac Storeで購入出来ます。

  • PopOverの三角は位置の指定を0にすると消すことができる。審査に通らないかも?
  • iOS 5からApple TV経由でも可能なはずだけど実際は出来なかった

f:id:nakamura001:20111124215318j:image

f:id:nakamura001:20111124215332j:image

f:id:nakamura001:20111124215345j:image:w500

スタッフにはSteve Jobsの名前がw


f:id:nakamura001:20111124215435j:image

f:id:nakamura001:20111124215448j:image

f:id:nakamura001:20111124215458j:image

  • iOS 5から文字コピーのポップアップが表示される様になってしまった。

f:id:nakamura001:20111124215508p:image

f:id:nakamura001:20111124215526j:image

f:id:nakamura001:20111124215542j:image

レシートにコメントを入れる機能も有ります


f:id:nakamura001:20111124215616j:image

f:id:nakamura001:20111124215624j:image

f:id:nakamura001:20111124215634j:image

f:id:nakamura001:20111124215643j:image

f:id:nakamura001:20111124215652j:image

  • レジ固有の機能のボタンも有り
    • 釣銭準備金 - お釣りとして最初からレジに入れているお金
    • 回収 - お金が溢れそうな時にレジからお金を取り出す事
    • 雑収入 - 「お釣りはいない」などと言われた時などに使用
  • 日報もレシートプリンタから出力可能
  • EPSONと秘密保持契約をするとプリンタへのアクセス方法を開示してくれる