静電容量分布を測るのに便利なmtouch、製品ラインナップ一新しすぎですorz

お手軽静電容量の評価

iPhoneを始めとするスマートフォンが身の回りにわんさと溢れかえり、タッチパネルが当たり前となっていますが、いまどきなタッチパネルが採用している方式は、ほぼ静電容量方式です。iPhoneサイズで5点、iPadサイズで10か11点検出がデフォルトとなっています。

液晶とタッチパネルが一緒だったのが、今はインセルタイプという、液晶と一体化したものまで登場していて、お金が動いている市場があれば、なんでも作ってきちゃうものだなと思うこのごろです。

ガジェット開発のために面分布を知りたい

さて、そんなiPhoneのタッチパネルと連携するガジェットを開発していると、“いまの静電容量の面分布はどれくらいだ?”と客観的に知りたくなるわけです。iOS SDKで取れるタッチ情報は、タッチした/していないの0/1情報だけです。そんな0/1情報だけでは、この作りがいいのか、わるいのか、どっちの方向に進めばいいのか、まったく判断のあてになりません。

できればiPhoneのパネルを使って、パネル評価に使ってそうな測定装置を買ってきて、実機相当の測定がそのままできればいいのですが、まずiPhoneのタッチパネルのコネクタピン配置なんて、ググっても出てこず、見つけるのが一苦労しそうです (コネクタは見つけたので、今度やってみようと思いますが) そして静電容量の測定装置も、お手軽価格とはいえず…

静電容量方式のタッチパネルの開発キットのゲット、結構大変

そうなれば、静電容量方式のタッチパネルの開発キットをゲットして、その生データ引っこ抜けばいいじゃんと思って探すのですが、一般に販売してくれるところがないのです、これが。Cypress、 ATMEL、Texus Instruments、いろんな会社がタッチパネルのコントローラを販売しています。TI社なんて、代々iPhone採用されるくらいですiPhone 3GS Uses TI Touch Screen Chip

それで、開発キットをくださいません?と問い合わせをすると、年間んー万個売るのが最低条件ね♡、と素敵な返答が返って来ました。そりゃそうですよね、囲い込みたい技術情報を、小口一般を相手に公開するわけがないですよねorz

そんななかで、唯一、一般に開発キットを販売していたのが、Microchip社です。mtouchというブランドで。素敵>ω<

10月にPIC16F707の開発キットmTouch Projected Capacitive Development Kitをゲットしてて、これが3.5インチのタッチパネル+センサーで、デモソフトが自己容量と相互容量の生データ表示と、まさにこれが欲しかったのよの、素敵すぎる仕様です。

PCからはUSBシリアルで見えてるから、あとはシリアルからデータをひっこぬいて表示する独自アプリを作れば、なんでもできると思っていました、10月までは。

ラインナップ一新してますがなorz

それが12月になってみたら、mtouchのラインナップ一新してて、ソフトまで統合されてて、素敵な状況にorz 10点タッチ検出&3Dジェスチャー検出の素敵な石が開発されてて、2013年2月から開発デモキットが出荷される状態みたいです。なんて、はざまにはまったのでしょうかorz

いや、開発キットだから、なくなれば自分で作れっていうものなので、これくらいの変化は仕方ないんでしょうけどね…

オーバレイのタッチパネルなら3Mのが便利

余談ですが、タッチパネルを簡単に使いたいなら、3MのMicro Touch Systemがおすすめ。 3Mは抵抗方式のもだしているけれど、それではない方式のもの。Digikeyで購入できるのが、素敵です。

http://www.digikey.com/scripts/dksearch/dksus.dll?FV=fff40008%2Cfff802ca%2Cfffc0013&k=3m+touch&vendor=0&mnonly=0&newproducts=0&ptm=0&fid=0&quantity=0&PV-5=22891&PV-5=22892

原理は、容量検出のはずだけど、説明を読んでても、実物を見ても、よくわからない。 サイズは、7インチから32インチまで、タッチは20~60点の同時検出。 コントローラはシリアルとUSB接続があって、どっちも信はシリアルなデータ垂れ流し状態。

タッチ情報を、ドライバ経由でWindowsに持って行く事もできるし、3Mが出している開発キットを使ってタッチ点やジェスチャのデータをWindowsを介さず直接とりだすこともできる。(C++のサンプルとlibがある)。なかなか便利。

CoreBluetoothとPassookのイントロ

CoreBluetoothの概要

iPhone4S以降のApple社のデバイスにはBluetooth4が搭載されている。 Bluetooth4は、従来の常時接続かつ高い通信速度を目指してきたBluetoothに、低頻度で少量のデータの送受信ができればよく超低消費電力が求められる用途に向けたLow energyが追加されたもの。 Low energyは、データ送受信頻度によるが、目安として、リチウムボタン電池CR20321つで1〜2年間の通信ができる。

Bluetooth4 = Bluetooth3 + Low energy

白板

/post/2012-12-13-ios-intro-corebluetooth-and-passbook/IMG_1275.jpg
/post/2012-12-13-ios-intro-corebluetooth-and-passbook/IMG_1274.jpg

MFiの開発の敷居の低さ

Bluetooth3までの開発(ヘッドセットやワイヤレススピーカー)にはMade for iPhoneプログラムへの参加が必要。Appleと弁護士を立ててNDAを締結するため、敷居は高い。これはiOS6になっても、同じ。クラシックBluetoothの開発には、それをはじめるために、MFiが必要。 Bluetooth low energyの開発はMFiが不要。CoreBluetoothは一般開発者ライセンスで利用できる。

ハードの開発

Bluetooth low energyの機器開発は、組み込み機器開発してきた会社にとっては、費用も技術も、かなり容易。Wahoo fitnessの心拍や体重計、Pebbleを始めとするスマフォ連携の腕時計。加速度を利用したスマフォ連携の活動量計などが続々出てきている。 Amazonでkey fobが3000円程度で購入できる。

他のモバイルの状況

WindowsPhone8はBluetooth4がハードウェア認定条件。デフォルト対応しているはず。

Wii Uなど、最近出てきているゲーム機器もBluetooth4対応。今後出てくるWii対応のワイヤレスな周辺装置は、電池の持ちが気になるものは、low energyを採用する、かも。それならiPhoneから使える可能性がある(ペアリングや暗号化周りの実装で、iOSでは使えないかも)。

Androidは鬼門。Bluetooth 2/3/4が機種により混在。さらにOSのバージョンが4系になりBT4と混同しやすい。ユーザが混乱する、最悪の環境。

スイッチとLEDで遊べる

ワイヤレスで常時接続するものは、意外と、簡単なものでも、さーびすとの掛け算でので、いくらでも化けるし遊べる。 Keyfob相当の、1つのスイッチと1つのLEDでも、LEDをモータにすればラジコンになるなど、ハードウェアだけを見ずに、全体を見てやると、切り口がたくさんある。

CoreBluetooth

デバイスの発見と接続の管理は、OSは一切関与しない。アプリに全てが任されている。OSの関与するのは、ハードウェアがペアリングする設計であるときのみ、設定のBluetoothの、接続するデバイスリストに、機種名が表示される。

CeltralとPeripheral

Bluetooth low energyのネットワークでは、デバイスは、Central(セントラル)とペリフェラル(Peripheral)の2つに分けられる。1つのセントラルに複数のペリフェラルが接続する、ピコネット。

iOS5まではiPhoneはセントラルのみになれる。心拍やリモコンなど、市販されているセンサーなどを搭載したデバイスは、ペリフェラル。それらデバイスと接続できる。

iOS6からは、iPhoneがセントラルにもペリフェラルにもなれる。これはBluetooth low energyのプロトコル・スタックの変更、ソフトウェアの変更で、実現されている。

加速度やジャイロなど、センサー+Bluetooth low energyで開発するときに、iOS5まではハードウェアを設計しなければならなかったが、iPhoneでペリフェラル相当の機能を実装して、それで開発を進め、並行してサイズや機能を最適化したペリフェラルを、組み込み機器開発の手法ですすめることができる。あるいは、プロトタイピング。

すれ違い通信とか、ありえない発想にも

Bluetooth low energyの機能は、アドバタイズメントと接続通信の2つ。アドバタイズメントは、ペリフェラルが存在することを周囲のペリフェラルに通知する仕組み。うまく使えば、ブロードキャストに使える。(パケットの長さ制約で、送信できるデータは20バイト位だけど) 接続した状態であれば、適切な頻度、適切なデータレート(50kpbs程度まで)で通信もできる。すれちがい通信みたいな応用も、できるだろう。

Passbookのイントロ

白板

/post/2012-12-13-ios-intro-corebluetooth-and-passbook/IMG_1277.jpg

Passbookは自社サーバとユーザの接続

Passbookの仕組み自体はとても単純。Appleから受けた証明書を使い、ユーザにJSON形式のデータでパスを渡せる仕組み。 パスの形式は、チケットなど、5つの形式が決められている。パスの取得は、メール、アプリ、ウェブの3経路。 このパスは、自社サーバから動的に更新できる。

パスに時間や場所の条件設定をしておいて、ローカルで、ユーザにノーティフィケーションの通知が可能。

サービス、商売?

どの視点で、また目的で見るかを考えみます。人目を引くイベントを作るための道具として使うのか。また継続してチケットを売る商売をしたいのか、iOS関連の開発事業をしたいのか。

  • 仕組み自体を見るなら、サーバの設定と運用、あるいはチケット管理代理業務がありそう。
  • チケット販売をやるなら、既存業界があるから、そちらとの競争、iOS開発じゃなくて、その業界の新規参入会社になりそう。

iOSでコーディングするときに読んだ本のリスト

iOS開発で読んできた文書や本

“iOSの新しい機能を素早く効率的に吸収する手段はなんですか?“への返答

iOS講座で、“iOSの新しい機能を素早く効率的に吸収する手段はなんですか?“と聞かれたので、返答を考えてみました。いまは講師がいるけれども、一人で周りに知っている人もいない場合に、どうすればよいのか、手段についての質問だったと思います。

2つの”素早く”があります。周りから見て素早いこと、自分にとって素早いことです。

前者の周りからの素早いは、新しい機能を習得していること、になります。情報の吸収能力は、個人レベルではさほど桁違いの違いはありません。そのため、情報に最も早く触れることが必要になります。

それには、iOSでは、この回答は明確です。WWDCにリアルで参加すること、です。そのために必要な条件や能力は:

  • WWDCのチケットの即時チェックと購入準備
    • WWDC2012のチケットは2時間程度で完売しています。購入ページの開設を即時チェック、渡航や宿泊費なども考えると40万円程度の与信があるクレジットカードを用意しておきます。
  • 英語のプレゼンを聞いて情報を集める程度の語学力
    • せっかく開発者がいるので、質問できればなおいいのでしょうが… ()恐れずとりあえず話しかけてみればいいです。)

次はWWDCの1か月後くらいに公開される動画をチェックすることです。

次に、自分にとって素早いこと、はiOS以前の能力の問題です。英語の文書を素早く読み解く読解能力。説明するまでもなく、常識として、プログラムなどの基礎知識を習得していることは、言うまでもありません。

これは王道はありません。できないなら、いまのうちに、この仕事をすることを諦めてください。諦めたくないならば、読むべき量を見積り、それを短時間で読めるように、自分で自分を訓練しつづけてください。

iOS開発でこれは読んどけ文書(コード書く人向け)

日本語ドキュメント - Apple Developer

  • Objective-Cプログラミングの概念

  • Objective-C プログラミング言語

  • Blocksプログラミングトピックス

  • キー値監視プログラミングガイド

  • キー値コーディングプログラミングガイド

たまたま使うことになったフレームワークを学ばないといけないときに、たまたま、日本語ドキュメントがあったなら、それを読むのがいいです。Appleの日本語ドキュメントは、ステップバイステップでコードを書くときも、またフレームワークの全体の知識を得る入り口としても、とても質の高いものです。読まない選択肢は、ありません。

iOS開発で買って読んだ本(コード書く人向け)

自分が読んだ本を列挙しておきます。

2009年当時、Viewのタッチイベントの扱いなど、実際にアプリを作ろうとすると分からなかった情報が書かれていたので、助かりました。現在はAppleの日本語ドキュメントがあるので、買うほどではないと思います。前半のタッチイベントの扱い部分は、読んでおくといいです。

Xcode4.2はGitを使うソース管理機能が統合されました。私はソースコードのリビジョン管理は、コマンドラインでやっています。なんとなくです。 Gitの使い方は、この本で学びました。サブモジュールの使い方など、Gitのドキュメントでは自分が理解できない部分が解説されていて、助かりました。

音周りの開発をするときの、バイブルです。

iOSの新しい機能を解説している、よい本です。 WWDCのサンプルコード+解説を日本語に焼き直したもの、と思えばいいです。

ただし、この中のARCなどの解説は、とても深くわかりやすい解説で、WWDCよりこちらを見るほうが、よいと思います。この部分は達人出版会から出版されています。エキスパートObjective-Cプログラミング ― iOS/OS Xのメモリ管理とマルチスレッド

iOSの開発情報の、収集と更新および追従

今回の講義の内容

11月の6回の講座で、iOSの教科書)を使い、Xcodeの使い方、Objective-Cの文法とメモリ管理、Model-View-Controllerモデル、シングルトンを学び、カウンタアプリを作り、それに機能を追加していきました。

アプリ開発は、この作業の繰り返しです。あとは、フレームワークごとの知識を身につけていきます。フレームワークは、アプリ開発に必要となる機能、カメラや加速度センサーなど、の利用に必要なライブラリとヘッダファイルをアーカイブしたものです。

今回は、Xcodeでフレームワークの概要およびコーディングのための必要な情報の入手方法を紹介します。つぎに、Appleが公開しているiOSのCoreImageの動画を見ます。動画は、要所要所で日本語で解説を、またはまりやすい点を述べます。

ホワイトボード

/post/2012-12-12-how-to-collect-ios-dev-info/20121212_img_1268.jpg

フレームワークの情報の入手

フレームワークは、リンクするライブラリファイルとヘッダファイルを1つにアーカイブしたもので、カメラやグラフィック描画、あるいはソーシャルネットワーク利用など、アプリ開発に必要な機能を1つのかたまりにして、提供しています。

iOSアプリ開発である機能が必要になれば、その機能を提供するフレームワークを使います。そのフレームワークについての情報は、Appleが公開する1次資料、そして書籍やブログなどの、2次、3次資料から得られます。

自分が必要な情報は何か?

情報を入手するときは、どの立場にあるかで、求めるものが違います。独断で区分してみると:

  • 開発者(ネイティブ・アプリ、ウェブ・サイト、ウェブ・アプリ)
    • 機能するコードを書くことが必要です。WWDCの動画、およびプログラミング・ガイドの熟読と、実際のコードを書くために、サンプルコードの読み込みとクラスの詳細説明の理解が必要です。
  • 開発指揮
    • 開発者に適切に仕事を振り分けて、その実装内容を指示するために、そのフレームワークで何ができるか、どの程度の処理能力が実現できるかを把握している必要があります。
  • 企画立案
    • iOSでその機能が実現可能か、またアルゴリズムの実装難易度や要求速度を満たせるかを判断できるほうが、あとで実装できないなどのトラブルを回避できるでしょう。そのためには、その機能が不可能なものか、頑張ればできるのか、あるいはAppleのサンプルコードを使える容易なものかの、自分たちにとっての開発難易度を推測するための知識が必要です。

Apple社の出している1次資料だけでも膨大です。全てに目を通すのは、一人では、無理でしょう。役割や利用目的に合わせた、必要な分の情報を得ましょう。

iOSは毎年機能が更新されて、去年までの知識を更新しないといけないことも、よくあります。“What’s new~“のような更新情報は、目を通しておきます。

英語は必要です

Appleの1次情報は英語です。もしも1次資料を読めなければ、日本語に翻訳された情報、または解説記事などの2次資料を待つほか、ありません。

1次資料からそれら2次資料が作られるまで、半年単位の時間がかかります。そのiOSが公開前ならば、Appleと開発者間に秘密保持契約(NDA)があるので、一般に公開されることはありません。英語ができない=新機能を半年から1年知ることはできない、です。

プレゼンテーションの動画と資料から、内容を理解することが必要です。ここで、動画の英語を一句一文字すべて聞き取れる必要はありません。また、動画を止めては辞書を引いてもいいですし、なにかの自動字幕生成や翻訳ソフト、あるいは翻訳者を雇ってもよいでしょう。英語が得意な開発者を中心にして勉強会を開催するのも、よい方法です。

内容を理解する、ことができればよいのです。適切な手段を工夫してください。

概要から詳細に進みましょう

iOSの機能や開発方法を俯瞰できる資料は、WWDCの動画です。プログラミングの詳細情報は、フレームワークそれぞれのプログラミング・ガイドとクラス詳細の文書です。まず、全体を俯瞰して、そして開発者でコーディングが必要ならば、次に、文書を読み進めましょう。

WWDCの動画

iOS開発者プログラムに参加していれば、WWDCの動画をDevelopment Videos APple Developerから入手できます。次の3つのコースがあります:

  • WWDC2010
  • WWDC2011
  • WWDC2012
  • iOS Videos

2010年から2012年まで3年間のすべてのWWDCの動画が公開されています。iOSは変化しつづけています。そのために、あるフレームワークの現在を知るのに、どの年のプレゼンテーションを見ればよいか、初めてでは分かりにくいです。そのときは、iOS Videosを見てください。現在のiOSアプリ開発に使える動画が、掲載されています。フレームワークごとの“最新”情報は、それぞれの年のWWDCの動画から、探してください。

WWDCの動画入手は、Development Videos APple Developerのそれぞれの年から、“iTunesで開く"のリンクを開けば、iTunesからダウンロードできます。オンラインでも見られますが、ネットワークが切断する、あるいは閉じると、動画を見ていた位置が失われて最初から再生されるので、不便です。ダウンロードするのが、おすすめです。

iTunesでダウンロードしたすべての動画を保存するには、端末の容量が不足するときは、見たいコンテンツを選択して同期します。

WWDC2012のサンプルコードは、ページ左カラムのリンクから入手できます。WWDC2011のサンプルコードは、項目を開くと、動画やプレゼンテーション資料とともに、サンプルコードへのリンクがあります。WWDC2010のサンプルコードは、このページから入手はできません。WWDC2011以前のサンプルコードは、Xcodeのドキュメントで表示されるサンプルに、登録されている、っぽい、です。

動画のジャンル

ジャンルは、以下4つです。見たままです。

Essentialは、基本的な事柄についてのプレゼンテーションがまとまっています。少なくともタイトルをチェックして、必要だと思ったものはチェックします。

開発ツールはXcodeの効率的な使い方や、Instrumentsの新機能など、開発ツール紹介です。開発者のうち誰が一人が見て、まとめ情報を共有すれば、よいでしょう。

Core OSは、低レベルなライブラリの説明です。ネットワークや音や動画像処理などが紹介されています。

Internet&Webは、ウェブアプリやウェブサイトについて、またHTTP Streamingの動画配信などが紹介されています。

  • Essential
  • Developer Tools
  • Core OS
  • Internet&Web

CoreImage

iOS Dev Videoを見てみる。動画: Using Core Image on iOS

CoreImageは、画処理のフィルタを提供するライブラリである。iPhotoができることを提供していると思えばよい。カメラからの動画のリアルタイム処理、ファイルやUIの画像の処理に使える。

ドキュメント:

[Core Image Filter Reference]: http://developer.apple.com/library/ios/#documentation/GraphicsImaging/Reference/QuartzCoreFramework/Classes/CIFilter_Class/Reference/Reference.html)

Octpressインストールメモ

Macbook Air 11(2012 mid)にOctpressを導入したときの、メモ。

octpressを使うと:

  • Markdown記法(Markdown syntax guide)で書いたテキストを、ローカルで静的にHTMLに変換できる。
  • ソースと静的に生成されたウェブページはGitで管理できる。
    • ローカルで編集して好きなタイミングでリリースできる。
  • テーマやプラグインがあり、見た目のいいブログサイトを手間なく構築できる。カスタマイズもできる。

みたい。

プログラミング関連の記事を書くときに必要なソースコードのハイライト表示等が設定なしで使えるのが便利そう。 オフラインで書いて、そして静的に生成されたページは、ローカルのウェブサーバでプレビュでき、Gitで管理できるから、オンラインエディタを使う時のネットワークの切断を気にしなくてもいいのは、ストレスがなさそう。

環境構築

octpressインストールガイドの手順に従えばできる。octpressはruby 1.9.3以降を必要とするが、Macのは1.8系。そのためRubyの環境構築が必要になる。

octpress SetupでrbenvもしくはRVMを使う方法が紹介されているが、私は使い方がわからなかった。Homebrewで環境構築をした。

GitはXcodeのCommandline toolをインストールしていたので、すでにインストール済。 まずhomebrewをインストールして:

	$ ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"

rubyをインストール。

	$ brew doctor
	$ brew install ruby

~/.bash_profile にパスを設定して、1.9.3のRubyを先に見つけるようにする。

	export PATH=/usr/local/bin:$PATH

コンソールを新しく開いて、先ほどの環境を反映させて、rubyのバージョンを確認する。

	$ ruby --version
	ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin12.2.1]

	git clone git://github.com/imathis/octopress.git octopress
	cd octopress  

先ほどインストールしたruby関連コマンドを実行:

	/usr/local/Cellar/ruby/1.9.3-p327/bin/gem install bundler
	/usr/local/Cellar/ruby/1.9.3-p327/bin/bundle install

octpressがプレビューに使うコマンドを、実行パスにシンボリックリンクで置く。

	cd /usr/local/bin	
	ln -s ../Cellar/ruby/1.9.3-p327/bin/jekyll  ./
	ln -s ../Cellar/ruby/1.9.3-p327/bin/compass ./
	ln -s ../Cellar/ruby/1.9.3-p327/bin/rackup  ./

	cd path/to/octpress
	rake install

設定

Rakefileと_config.ymlの設定項目を書く。ブログのタイトルや、メールアドレス、Githubのアカウントなど。ここに設定しておけば、その関連情報を適当に表示してくれる。