強火で進め

このブログではプログラム関連の記事を中心に書いてます。

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

南東京iPhone開発者勉強会 12回目 : ATND
http://atnd.org/events/21872

2011/11/23 #stidev 南東京iPhone開発者勉強会 #12 - Togetter
http://togetter.com/li/218176

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

ジンギスカンキャラメル

ジンギスカンキャラメル

たなか様:「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



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

  • 数学は苦手だが、こちらの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


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

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

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


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

業務用小型プリンター TMシリーズ|TM-T70|エプソン
http://www.epson.jp/products/tm/tmt70/

    • 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側は、どれ?

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

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

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

  • 券売機などで使われている

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

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

RS-232Cの他の規格

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

【設定画面】



【POS構成】


  • こちらの構成の場合はカスタムディスプレイからプリンタへは印刷のデータのみ送られる
プログラムの主要部分
  • 宣言
@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は制御コードとして使われるので文字列を送る時は注意が必要


  • ディスプレイは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経由でも可能なはずだけど実際は出来なかった




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




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





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






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