Hatena::ブログ(Diary)

Over&Out その後 このページをアンテナに追加 RSSフィード Twitter

2014-04-30

Xcodeの「全機能」を網羅した全752ページの超大作『Xcode 5 徹底解説』書評

先日 yidev 恵比寿勉強会 に行った際、隣の席にいらっしゃった @es_kumagai さんより、すごいプレゼントをいただきました。



この本を手に取ってまず驚くのが、その 752ページ(!!!!) という超特大ボリュームです。世の中に「徹底解説」を謳う解説本は数あれど、 本当に「全機能」を網羅している本 は初めてみたかもしれません。


f:id:shu223:20140430102540j:image

(iPhone5sとの比較。分厚さが伝わりますでしょうか)


対象読者:入門者から上級者まで!

目次を見てみると、「Xcode とは」「Xcode をインストールする」から始まるので、Xcodeを未ダウンロードな入門者 から読めますし、「xcodebuild コマンドを使ってビルドする」「ユニットテストを実現する XCTest」「Xcode サーバーと Bot でテストを自動化する」といった 中級者向け の内容もがっつり解説されています。


また、Xcode を使いこなしている上級者といえど、なかなかこの 752 ページの内容を全て把握してる人はいないんじゃないかなと。そういう意味では、それこそ入門者から上級者まで、iOSアプリ開発に携わる人全員に何かしらのお役立ち情報があるのでは、と思います。


Xcode5徹底解説 for iOS/OSX
熊谷 友宏
秀和システム
売り上げランキング: 31,269


全ページを通して読んでみた感想としては、全項目の冒頭に「◯◯とは」「この機能はどんなときに役立つのか」という説明があるので、 目次だけではなく、各項の冒頭だけでも一通り目を通す という読み方をするといいんじゃないかなと思いました。


勉強になった項目

以下には、自分が全項目に目を通してみて勉強になった項目を書いていきます。


※重要な機能でも、自分が知ってたものについては書いてないので、書籍の魅力を要約するものではありません。


7.2.3 スコープ内の変数名をまとめて編集する

コード内の変数名にカーソルを合わせて、▼ マークをクリックして出てくるメニューから [Edit All in Scope] を選択すると、同じスコープ内のその変数が全て選択された状態になり、同時編集できる、というもの。


Refactor メニューでも同様のことができるけど、知りませんでした。


7.2.8 カーソル位置のスコープを自動でハイライトする

これは地味ながらも個人的に「おお!」と思った機能。


[Editor] > [Code Folding] > [Focus Follows Selection] を選択すると、カーソルがあるスコープだけがハイライトされる というもの。


規模の大きいコードを書いていると、意識があっちこっちにいってしまいがちなので、これは助かるかも。


8.6.4 レイアウトをプレビュー画面で確認する

アシスタントエディタのプレビュー機能で、iOS6 / iOS7, 3.5 inch / 4.0 inch でのストーリーボードの見え方をビルドなしで確認することができます。


8.7.4 アウトレットコレクション

@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *buttons;

みたいにやると、複数のコントロールをアウトレットとして連結できる。


8.8.3 コントロールの表示テキストを言語環境に応じて変化させる

Object IDを使ったローカライズ方法。


9.4.5 Build Phases 設定

Run Script フェイズの

  • Run script only when Installing オプションにチェックを入れると Build Settings の Deployment Postprocessing がONのときだけスクリプトが実行される
  • Input Files / Output Files オプションがそれぞれどの環境変数に渡されるか

9.4.6 Build Rules 設定

ここいじったことないなぁ。。


10.4 スキームの設定項目

"Parallelized Build", "Find Implicit Dependencies" といった Build Option の効果や、Arguments タブ、Options タブの各設定項目について説明があります。


f:id:shu223:20140430105529j:image

(↑このへんの話です)


10.5 スキームにカスタム実行スクリプトを登録する

各アクションを実行する前後で、任意のスクリプトを実行できる(Pre-actions / Post-actions)とのこと。たとえば アクションの前後にメールを送信 したり。(奥が深い。。)


13.3.4 OpenGL ES フレームキャプチャによる一時停止

アプリの実行を一時停止して、OpenGL ES の描画状況を確認することができる機能。


13.4 ブレークポイントの設置と扱い方

すごく昔の記事 にちょろっと書いたことがありますが、Xcode のブレークポイントって奥が深いんですよね。。本項では、[Edit Breakpoint] から設定できる項目ひとつひとつについて解説されています。


13.4.6 ブレークポイントに停止条件を設定する

「3回このブレークポイントを通過したら停止させる」みたいなことができます。


13.4.7 ブレークポイントでログメッセージを出力する

ブレークポイント通過時に、コンソールにログメッセージを出力できます。このメソッドを通ったかどうかみたいな確認のときには、ソースにNSLogとかを直接書くよりも、こっちの方法を使った方がソースを汚さずに済むので良さそうです。


13.4.8 ブレークポイントで変数に値を設定する

ソースをいじることなく、一時的に変数の値を差し替えられます。UIImage とかでも差し替え可能。


13.4.9 特殊なブレークポイント

ソースコード内に置く通常のブレークポイントだけではなく、

  • 例外が発生したときに処理を行うブレークポイント
  • 指定したシンボルが実行されるタイミングで処理を行うブレークポイント
  • OpenGL ESエラーブレークポイント
  • テスト失敗時ブレークポイント

といったものも作成できます。


シンボルブレークポイントはソースコードが公開されていない外部ライブラリ内のメソッド実行時に止めたいときとかにも使えるので、便利そうです。


13.4.10 ブレークポイントを他の制作者と共有する

[Share Breakpoint] でワークスペース内の "Shared Data" に保存されるようになるとのこと。


13.5 ブレークポイントで停止した状況を把握する

以前書いた Quick Look や [Print Description] についても触れられています。


13.5.2 の、スタックトレースの表示の精度を調整できるスライダー、知らなかった。。


13.6 ステップ実行で原因箇所を特定する

Step Over / Step Into / Step Out の違いの解説から、それぞれを使いこなしてどのようにデバッグしていくか、という具体的な方法が解説されています。


13.6.4 の、デバッグエリアの変数ビューの右クリックメニューから [Edit Value] で変数の値を書き換えられるのは知りませんでした。ステップ実行していて見つけたクサイ部分を詳しく検証する際に使えそうです。


13.6.8 の後半にある、「ステップ実行時に、自分のスレッドだけ動かして、他スレッドは中断させる」方法も初めて知りました。なんと control + shift で GUI からもこの操作を行えるとのこと。。


Chapter15 ユニットテストを作成してソースコードを検証する

XCTestフレームワークを用いてユニットテストを実行する方法が解説されています。最近は iOS アプリのテストに特化した技術書 も出ていますが、後述の Chapter 16 と合わせると約50ページと、テスト部分だけ見ても相当なボリュームがあります。


標準フレームワーク/環境を使用した基本的なテスト手法だけでも知りたい、という場合にも本書は買いだと思います。


Chapter16 XcodeサーバーとBotでテストを自動化する

OS X Server をインストールして Xcodeサーバーを稼働させる方法から、それと連携して

  • テスト
  • ソースの静的解析 (static analyzerの実行)
  • ビルド (archive)

を自動実行する Bot を作成して運用する方法 がステップバイステップで詳しく書かれています。


まとめ

というわけで、Xcode 5 を本当に徹底解説した書籍『Xcode 5 徹底解説』オススメです!


Xcode5徹底解説 for iOS/OSX
熊谷 友宏
秀和システム
売り上げランキング: 31,269


関連記事

iOS7の新機能を軸とした解説本。こちらも書評を詳しく書いたのでぜひご覧ください。


拙著の紹介。こちらは中級者向けのレシピが100個載っています。ライブラリを使うレシピでもそのソースコードにも触れており、ある程度アプリ開発に慣れてきた方々には何かと参考になる項目があると思うので、ぜひ目次だけでも目を通していただけると嬉しいです。


2014-04-26

iOSエンジニア in ハードウェア・プロジェクト

本日開催された「yidev 恵比寿勉強会」にて、 ハードまわり(メカや電子回路)の知識やスキルを持たない iOS エンジニアが、ハードウェア関連プロジェクトにどのような立ち位置で関わるのか、という内容の発表をしました。



一般論ではなく、あくまで僕が入ったプロジェクトはこうでした、という個人的経験談でしかないのですが、ガジェット開発に興味はあるけど電子回路とかわからない、という僕と同じような方々の参考になれば幸いです。



・・・というテーマのつもりだったのですが二日酔いの状態で資料をつくり、発表したので、何が言いたいのかよくわからない散漫な感じになってしまいました。。


結論としては、最後の「まとめ」スライド *1 に書いたように、


ハードの知識がない iOS エンジニアでも、ハード関連プロジェクトに楽しく関われます!

  • Core Bluetooth / BLE まわりの知識は大事
  • BLEモジュールのファームまわりもできると捗る

という感じです。



以下に参考記事/関連記事をズラズラと載せておきます。


iBeacon 関連記事


BLE, CoreBluetooth 関連記事


konashi 関連記事


*1:発表時にはこれがなく、アップする際に追加しました

2014-04-24

おもしろく働くための「わらしべ長者方式」

昨日書いた記事 『独立して最初の3ヵ月間にやったお仕事のまとめ』 で、


  • 目の前のおもしろい仕事にがっちり食いつく
  • がんばっていい仕事をする
  • 得られたスキルや実績をブログ等でアピールする
  • よりおもしろい仕事のお話をいただく

というサイクルをしっかり回していく「わらしべ長者方式」こそが、(企業からすると吹けば飛ぶようなフリーランスという立場である)自分がこうしておもしろい仕事に恵まれている理由であり、生命線である、ということを最後の方にちょろっと書きました。


で、書いたあと思ったのですが、上記サイクルは当たり前のことすぎて、本当の「わらしべ長者方式」のポイントはそこじゃなかったなと。


自分で再認識するためにも、これこそが「わらしべ長者方式」でおもしろい仕事のサイクルを回して行く重要ポイントだ!と思う点を書いておきます。


間違った交換をしないこと

これです、これに尽きます。


どういうことかというと、実際のわらしべ長者というお話では、


藁しべ→アブが結び付けられた藁しべ→蜜柑→反物→馬→屋敷


と交換が進んでいきますが、たとえば 「反物 → 馬」と交換できるところを、「反物 → 魚」みたいな交換をしてはいけない、ということです。


そもそも藁しべから来てるので、魚でもいずれリカバリは可能かもしれませんが、 この流れの速い業界において、交換価値の後退 は命取りになります。腐ってしまいます。


また「魚 → 網 → 船」みたいに、それはそれで価値が上がるかもしれないけど、 自分が欲しかったものとは違う ものにたどり着いてしまうというリスクもあります。


やはり、

  • 「より価値の高いもの」
  • 「自分が欲しいものにつながりそうなもの」

と交換するのが得策ではないかなと。


仕事の話に戻すと

で、上記はたとえでしかないわけですが、現実の仕事の話でいうと、たとえば、現状の僕にとってのゲームの案件。


しっかりフィーは出るし、僕はゲームをプレイするのもつくるのも好きなのですが、

  • もう十分に ゲームアプリ実装の実績はつくった し、ちょっと今はゲームつくるのはお腹いっぱいになっている
  • ゲームは実装要件を満たしたあとでもおもしろくするまでの試行錯誤が結構あって、工数が結構かかる
  • いまの興味は iOS + 外部デバイス連携で、この分野における自分の実績や知見はゲームと比べるとまだ足りない

となると、ゲーム案件に1ヵ月、2ヵ月携わるのは僕にとっては「間違った交換」だなと。


逆に、「報酬ゼロでもおいしい」と思う案件もあったりします。


そういう感じで、仕事をするときには、 わらしべ長者的にこれは正しい交換か ということを考えるようにしています。


おわりに

個人エンジニアごときがえらそうなことを言ってすみません!いつもお仕事ありがとうございます!



関連記事


2014-04-22

独立して最初の3ヵ月間にやったお仕事のまとめ

フリーランスのiOSエンジニアになって早3ヵ月経ちました。個人になると自らアピールしていかないと世の中的には何もしてないことになってしまうので、この3ヶ月間(2月〜4月)にやったお仕事について書いておこうと思います。


(※まだ4月の途中なので、追記する可能性大です)


実店舗へのiBeacon導入

火鍋専門店『小肥羊』をチェーン展開している ウェブクルー 社よりお話をいただき、実店舗へ iBeacon を導入するサービス検討/検証 のお手伝いをさせていただきました。



iBeacon+実店舗の初仕事がリリースされました(&独立のご報告) - Over&Out その後



具体的には、本番アプリ開発の前段階として、下記のような機能を持つ実証実験用アプリ(非公開)を開発し、

  • 店に近づくと通知が来て地図が出て道案内してくれる
  • 入店するとメニュー等のUIが有効になる
  • 入店後しばらくするとおすすめメニューを通知
  • 退店するとありがとうございました通知&クーポン付与

このプロジェクトの関係者一同のiPhoneに入れ、お店に iBeacon モジュールを配置し、

→ みんなで実際に店に行ってサービスを体験(火鍋を食べてビールも飲む)

→ 実運用するアプリ/サービスの仕様策定・設計を行うための知見を得る

というお仕事でした。


関連記事:


PV撮影アプリ

Perfumeの演出サポート等々で有名な、Rhizomatiks(ライゾマティクス)とのお仕事。


f:id:shu223:20140422080501j:image:w242


詳細は書けないのですが、さすがライゾマさん、という技術アイデアで勉強になりました。


あと、一緒にライゾマオフィスで作業してたのですが、朝の4時に完成、そのまま始発で現場へ、という感じも ワークスタイルとしてすごく好み なのでぜひ今後ともお仕事をご一緒したいと思いました。


新しいウェアラブルデバイスの開発

僕が新卒で入った会社がNTTデータで、そこの研究開発部門で4年間、音声認識まわりの研究開発職についてたのですが、そのときの知見を活かせて、かつ 最近の一番の興味分野 である「iOSアプリ x 外部デバイス using BLE」という、完全なる俺得案件でした。


さらには、技術的な着眼点もおもしろく、そのプロダクトによって解決される問題も素敵で、座組も最高、という。


ただ諸事情あって、要素技術のフィージビリティがとれ、これからハードと合わせたプロトタイプ開発、というところで止まっています。どうにか再開して形にしたいところ。


とあるユーティリティ系アプリ

2月中盤 〜 4月序盤まで、ほぼこの案件にかかりっきりでした(他の案件は、土日とか、深夜とか)。事情により実績として公開はできないのですが、iOSエンジニアとしてものすごく学びの多い案件でした。


なによりも一番大きいのが、ひさびさにがっつりUIをカスタマイズする(UIKitの標準コンポーネントをあまり使えない)アプリだったこと。


ここ4年ほどほぼ専業でひたすらやってきたので、iOSアプリなら結構何でもうまくつくる自信はあったのですが、よく考えてみると2012年はほぼゲームアプリ(主に cocos2d 製)ばかりつくっていたし、2013年はほぼ書籍執筆とAppSociallySDK開発だけだったので、UIをがっつりつくりこむような「いかにもiOSアプリ」を「本格的に」つくる仕事は数年ぶりだなぁと。


UIまわりの実装力というか具現化力は、iOSアプリエンジニアとして期待されることが多いところなので、独立してすぐのこのタイミングでキャッチアップできて良かったです。


あと、この案件では iOS 7 の新機能を積極的に使用できたのも良かった。


具体的に、使用した/試した iOS 7 の API とその用途としては、

  • カスタム画面遷移/インタラクティブ画面遷移
    • 「縦に引っ張って移動」など。
  • UIImage の renderType
    • 素材は一つだけ用意して、これで各色使い回し。
self.imageView.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
  • スクリーンキャプチャ
    • 投稿、画面遷移アニメーション等。
[view drawViewHierarchyInRect:rect afterScreenUpdates:YES];
  • UICollectionView + UIDynamics
    • スクロール時に、引っ張る指の位置に応じて各セルがほんの少し抵抗を受けるようなインタラクションに使用(Message App の UICollectionView版)。
  • UICollectionViewController の layout-to-layout アニメーション
    • 試してはみたものの、色々合ってボツに。

などなど。


AnimatedTransitionGallery

これは仕事ではなく OSS ですが、上記ユーティリティアプリ案件でカスタム画面遷移を初めて使ったのがきっかけで、その「まとめアプリ」である『AnimatedTransitionGallery』をつくって公開しました。



iOSのカスタム画面遷移64種類を試せるサンプルコードを公開しました - Over&Out その後


僕自身が実際にアプリ開発をする中で「こんなのあったらいいのに」と思いつくったものなので、日本だけでなく海外からも評判が良く、おかげさまで GitHub の Trending repositories で 1位 (today, this week両方)にもなりました。


WHILL

昨年、AppSocially メンバーとして 500 startups の batch 6 に参加 した際に同期だった WHILL。


次世代車椅子を開発しているスタートアップで、Mountain Viewに行って初めてその存在を知ったときは、「マジで??これ自分たちでつくってるの!?スゲーーーーー!!!!」と驚き、リスペクトしまくりなプロダクト&チームでした。


そんな WHILL と BLE で連携する iOS アプリ を開発するお仕事。


(初WHILL @町田にあるWHILL工房)


といってもBLE基盤がまだできてないので、本格始動は5月から。


3月、4月はまだ2日ほどご一緒しただけで、

  • 投資家向けデモ用アプリ1本
    • バックエンドをParseで構築
  • WHILLと連携するアプリのプロトタイプ2本
    • BLE接続なしの、UI/UXイメージを共有するためのプロトタイプアプリ

といった実装を行いました。


ちなみに先日書いた『BLE112開発キットの開発環境をMac上に構築する』という記事は、WHILL側の基盤完成に先立ち iOS 側のプロトタイピング を開始するためにやった作業のメモです。



AppSociallyサポート

昨年お世話になった シリコンバレーのスタートアップ、AppSocially。自分はその iOS SDK を開発したので、何か問い合わせ等があった場合に技術的な部分で回答する等のサポートを引き続き行っています。


gihyo.jp連載原稿執筆

連載『iOSアプリと連携させて使えるデバイスたち』の原稿執筆。



年初の目標 で書籍化を目指し数値目標を立てたものの、結局提出できたのは1回分のみ(現在 gihyo さんで html 作成中)。


途中まで書いて頓挫しているのがプラス2回分ほどあります。。


IRKitを使った何か

「こういうことは可能か」というアイデアの打診があり、フィージビリティ調査を行いました。


IRKit
IRKit
posted with amazlet at 14.01.14
maaash.jp


実際に現場に行く必要があったので、こういうもの をつくったり。


で、結果的には、対象機器の仕様として、そのアイデアそのままでの実現は無理ということがわかり、別の方法を探りましょう、という結論になりました。


関連記事:


所感

どうにかこうにか、食いっぱぐれることなく、しかも楽しいお仕事ばかりいただいて最初の3ヶ月を過ごすことができました。


「5年後、10年後を見据えましょう」と、ものの本にはよく書いてありますが、独立した当初は「この仕事が終わったあと、自分は何をやってるのだろうか。。」と、5年後・10年後どころか、半年先も見えてない状況に、不安を覚えたことがないわけでもなかったです。


が、とりあえずこの3ヶ月間だけでいうと、上述したように僕にとって楽しくて勉強になるお仕事ばかりでしたし、ありがたいことに、もうしばらく先も楽しすぎるお話をいろいろといただいています。


ビギナーズラックかもしれませんし、先のことはわかりませんが、この三ヵ月で思ったのは、

  • 目の前のおもしろい仕事にがっちり食いつく
  • がんばっていい仕事をする
  • 得られたスキルや実績をブログ等でアピールする
  • よりおもしろい仕事のお話をいただく

というサイクルをしっかり回していくわらしべ長者方式がやっぱり自分にあったやり方であり、生命線だなと。


そんなわけで引き続きがんばってまいります!


2014-04-21

【改訂版】BLE112 / 113 の開発環境を Mac に構築する

iOSデバイス同士とか、既製プロダクトと BLE で通信する場合は Core Bluetooth フレームワークが扱えれば問題ないのですが、新規でウェアラブルデバイスや、iOSと連携する何らかのガジェットとかを開発しようとすると、プロジェクト内の立場上は「iOS エンジニア」だとしても、ある程度 BLE モジュール側のことも知っていないと、ハード屋さんとの意思疎通がなかなか難しい場合があります。(相手がCore Bluetooth等、iOS側に精通していれば話は別ですが。。)


メジャーな BLE モジュールである Bluegiga の BLE112、BLE113 は、「開発キット」 (Development Kit) というものが販売されています。



これらは、ディスプレイ・USBインターフェース・バッテリーボックス・デバッガ・確認用のセンサ等々、BLEモジュールの開発・検証に必要な諸々がボードにビルトインされており、細々と部品を集めて回路を組んだりしなくても、買ってすぐに BLE モジュールのファームウェア開発を始められるようになっています。


ここでは、このDevelopment Kitを使ってBLEファームウェアを開発するのに必要な環境を Mac 上に構築する手順をまとめておきます。


工場出荷時点の Development Kit

BLE112 / BLE113 Development Kit は、購入して電源を入れるだけで、下記のように ディスプレイに温度が表示されます。


f:id:shu223:20140419213520j:image:w400

(工場出荷状態の BLE112 Development Kit)


アドバタイジングも開始されているので、BLExplr や自前 Core Bluetooth 実装等で確認することもできます。


Windows の仮想環境を用意する

関連ツールの何もかもが Windows 版しか用意されてないので、とにかく Windows 環境が必要になります。


ここでは 無料 の仮想化ソフト VirtualBox を用いて、Windows の仮想環境を Mac OSX 上に構築します。


基本的に下記ページの手順通りでうまくいったのですが、


一点だけ違ったのは、 初回起動時に Virtual Disk Image を求められる ことでした(ちなみに私が使用したVirtualBoxのバージョンは 4.3.10 です)。


インストールメディア(Windowsのインストールディスク)の Virtual Disk Image は下記のように作成します。

  1. OSのインストールメディアをドライブに入れる
  2. Disk Utility を起動して [New Image] (→ .dmg ファイルが生成される)
  3. 2で作成した .dmg ファイルを `~/Library/VirtualBox` に置いておく。

あとはダイアログで上記 .dmg ファイルを選択すれば、インストールが始まります。


BGScriptの開発環境を用意する

BGScript 専用のIDE、みたいなのはないので、既存の Windows 用テキストエディタ "notepad++" をカスタマイズして使用します。


notepad++をインストール

ググれば本家ダウンロードサイトも出てきますし、Bluegiga の Documentation and Software のページ からもダウンロードできます。


途中でPlugin フォルダを有効にするかどうかのチェックボックスがあるので、有効にしておきます。


シンタックスハイライトやコード補完が効くようにする

notepad++で、BGScript 編集時にシンタックスハイライトやコード補完が効くようにします。


Bluegiga の Documentation and Software のページ から

[PC Tools] > [BGScript Syntax Highlighting for Notepad++]

をダウンロードし、下記手順を踏みます。

  1. Notepad++ を起動
  2. Notepad++のメニューから [Language] > [Defined your language...] を選択
  3. [Import...] をクリックし、 "userDefineLang_BGScript.xml" ファイルを選択
  4. "BGScript.xml" ファイルを '<NPP-Install-Dir>\plugins\APIs' にコピーする
  5. notepad++ を再起動

Bluetooth Smart Software and SDK をインストール

Bluegiga の Documentation and Software のページ から

[Software Releases] > [Bluetooth Smart Software and SDK v.1.2.2] 

を選び、インストールします。


USBドングルを認識させる

Development Kit に付属している BLE112 USB ドングルを Mac に接続します。


VirtualBoxのWindows環境をシャットダウンさせた状態で、 [Settings] > [Ports] の USB タブを選択し、USB Device Filters に Bluegiga Low Energy Dongle を追加します。


※これをやらないと、仮想環境側にドングルを認識させようとしたときに "USB device in use by someone else" とエラーが出ます(参考記事:linux - Virtualbox: "USB device in use by someone else" error, how to make (mac) host let go? - Stack Overflow


いったんUSBドングルを抜いて、仮想環境を起動し、USBドングルを挿し直すと、ドライバのインストールが開始されます。


デバイスドライバのインストールに成功したら、ドングルは抜いてもOK。


CC Debugger を Windows 側に認識させる

CC Debugger は、BLE112 / 113 (で使用している TI のチップ)のデバッグを行ったり、プログラムを書き込んだりするためのデバイスです。


BLE113 の開発キットでは、CC Debugger は、Development Kit にビルトイン されています。


BLE112 開発キットの場合は、下記のように接続します。


f:id:shu223:20140419214117j:image:w500

(CCデバッガをBLE112開発キットに接続した状態)


そしてボードと Mac を接続し、VirtualBox メニューから

[Devices] > [USB Devices] > [Texas Instruments CC Debugger [xxxx]]  

を選択します。


Windows(仮想マシン)側でデバイスドライバのインストールが開始され、完了すると、デバイスマネージャーで Cebel controlled devices が確認できるようになります。


動作確認

ライセンスキーを控えておく

僕のように、手順を無視して TI の Flash Programmer から書き込んだりすると、License Keyが消えBluegigaにRequestを送って返信を待つ という面倒なことになるので、念のため License Key を控えておきます。


Bluegiga BLE SW Update Tool の "Info" をクリックすると、License Key が表示されます。


f:id:shu223:20140422065155j:image:w482


ビルド&プログラム書き込み

C:\Bluegiga\ble-1.2.2-100\example フォルダか、Bluegiga の Documentation and Software のページ からダウンロードできる Examples から、適当なプロジェクトを選び、BGScriptのプロジェクトファイル(拡張子 .bgproj)を Bluegiga BLE SW Update Tool で開きます。


諸々問題なければ Update ボタンをクリックすればビルド&プログラム書き込みが行われます。


2014-04-19

BLE112 / 113 の開発環境を Mac に構築する

【2014.4.21追記】

本記事は、(記事内にもある通り)不要な手順や推奨できない手順が混じっているので、改めて下記URLに書き直しました。


【改訂版】BLE112 / 113 の開発環境を Mac に構築する


以下は、記録として残しておきますが、正しい手順としては上の記事をご参照ください。



iOSデバイス同士とか、既製プロダクトと BLE で通信する場合は Core Bluetooth フレームワークが扱えれば問題ないのですが、新規でウェアラブルデバイスや、iOSと連携する何らかのガジェットとかを開発しようとすると、プロジェクト内の立場上は「iOS エンジニア」だとしても、ある程度 BLE モジュール側のことも知っていないと、ハード屋さんとの意思疎通がなかなか難しい場合があります。(相手がCore Bluetooth等、iOS側に精通していれば話は別ですが。。)


そんなわけで、Bluegiga の BLE113 の「開発キット」 (Developer Kit) を注文してみました。



・・・のですが、その翌日(これを書いてる今日)に仕事で BLE112 の開発キットを借りることができたので、さっそくそっちで開発環境構築〜動作確認までを試してみたので、その手順をまとめておきます。


BLE113 の開発キットはまだ到着してないのですが、112と基本的にやることは同じだと思います。


工場出荷時点の BLE112 Development Kit

BLE112 Development Kit は、購入して電源を入れるだけで、下記のように ディスプレイに温度が表示されます。


f:id:shu223:20140419213520j:image:w400


アドバタイジングも開始されているので、BLExplr や自前 Core Bluetooth 実装等でも確認することもできます。


Windows の仮想環境を用意する

関連ツールの何もかもが Windows 版しか用意されてないので、とにかく Windows 環境が必要になります。


VirtualBox で Windows 環境をつくる

無料 の仮想化ソフト VirtualBox を用いて、Windows の仮想環境を Mac OSX 上に構築します。


基本的に下記ページの手順通りでうまくいったのですが、


一点だけ違ったのは、 初回起動時に Virtual Disk Image を求められる ことでした(ちなみに私が使用したVirtualBoxのバージョンは 4.3.10 です)。


インストールメディア(Windowsのインストールディスク)の Virtual Disk Image は下記のように作成します。

  1. OSのインストールメディアをドライブに入れる
  2. Disk Utility を起動して [New Image] (→ .dmg ファイルが生成される)
  3. 2で作成した .dmg ファイルを `~/Library/VirtualBox` に置いておく。

あとはダイアログで上記 .dmg ファイルを選択すれば、インストールが始まります。


BGScriptの開発環境を用意する

BGScript 専用のIDE、みたいなのはないので、既存の Windows 用テキストエディタ "notepad++" をカスタマイズして使用します。


notepad++をインストール

ググれば本家ダウンロードサイトも出てきますし、Bluegiga の Documentation and Software のページ からもダウンロードできます。


途中でPlugin フォルダを有効にするかどうかのチェックボックスがあるので、有効にしておきます。


シンタックスハイライトやコード補完が効くようにする

notepad++で、BGScript 編集時にシンタックスハイライトやコード補完が効くようにします。


Bluegiga の Documentation and Software のページ から

[PC Tools] > [BGScript Syntax Highlighting for Notepad++]

をダウンロードし、下記手順を踏みます。

  1. Notepad++ を起動
  2. Notepad++のメニューから [Language] > [Defined your language...] を選択
  3. [Import...] をクリックし、 "userDefineLang_BGScript.xml" ファイルを選択
  4. "BGScript.xml" ファイルを '<NPP-Install-Dir>\plugins\APIs' にコピーする
  5. notepad++ を再起動

Bluetooth Smart Software and SDK をインストール

Bluegiga の Documentation and Software のページ から

[Software Releases] > [Bluetooth Smart Software and SDK v.1.2.2] 

を選び、インストールします。


SmartRF Flash Programmer をインストール

BLE112 / 113 は Texas Instruments (TI) のチップを使用しています。このチップのFlashメモリにプログラムを書き込むためのソフトウェア、Flash Programmer をインストールします。


http://www.ti.com/tool/flash-programmer


CC Debugger を Windows 側に認識させる

CC Debbuger は、BLE112 / 113 (で使用している TI のチップ)のデバッグを行ったり、プログラムを書き込んだりするためのデバイスです。


f:id:shu223:20140419214117j:image:w600

(CCデバッガをBLE112開発キットに接続した状態)


CC Debugger を USB で接続し、VirtualBox メニューから

[Devices] > [USB Devices] > [Texas Instruments CC Debugger [xxxx]]  

を選択します。


Windows(仮想マシン)側でデバイスドライバのインストールが開始され、完了すると、デバイスマネージャーで Cebel controlled devices が確認できるようになります。


動作確認

BGScriptのビルド

BGScript をビルドします。

下記のように bgbuild.exe をコマンドプロンプトから実行するだけです。

C:\Bluegiga\ble-1.2.2-100\bin\bgbuild.exe {プロジェクトファイル.bgproj}

BGScriptのプロジェクトは、C:\Bluegiga\ble-1.2.2-100\Example にいろいろとあります。

ビルド成功すると、 .hex ファイルが生成されます。これがチップに流し込むファイルです。


プログラムを書き込む

注意!!!License KeyがないとBLEのアドバタイジングが停止します。


前述した手順で作成した .hex ファイルを、下記ページのように Flash Programmer から書き込むことができます。


が、冒頭に書いた通り、この方法だと、BLEのアドバタイジングが停止します。


このページ に書いてある通り、

If you're using SmartRF to flash your project, that may be causing a problem with your license key. Using SmartRF does erase the license key from the module, which is specified in the third paragraph of this Knowledgebase article: https://bluegiga.zendesk.com/entries/22442106--HOW-TO-Using-the-BLE...

TI's SmartRF software can flash firmware to BLE113, but the license key is proprietary to Bluegiga, and SmartRF does not and cannot include the key while re-flashing firmware. The easiest way to pull your current key is to connect your module to your CC Debugger, open BLEUpdate, and click Info. If you could post the module's serial and license key, someone from Bluegiga could verify it, or provide you with a valid license key.


というわけで、ライセンスキーを入手して、Flash Programmer ではなく Bluegiga BLE SW Update Tool で書き込みを行うのが正しい手順のようです。。


ライセンスキーを入手する

ライセンスキーは Bluegiga BLE SW Update Tool の "Request license key" をクリックして申請フォームに飛ぶことができます。


f:id:shu223:20140419215011j:image:w488


申請したらすぐに送付されるわけではなく、Bluegigaからの返信を待つ必要があります。。(僕はイマココ)


工場出荷時のファームに戻す

Bluegiga の Documentation and Software のページ からダウンロードできる Examples の中に、DKBLE112_factory というプロジェクトが入っています。全く同じものかはわかりませんが。。


ただ、このファームを Flash Programmer で書き込んでも ライセンスキーがないとBLEのアドバタイジングは開始されない ので、とにかくライセンスキーを入手するまではファーム更新しないのが良さそうです。


2014-04-16

iOSのカスタム画面遷移64種類を試せるサンプルコードを公開しました

リポジトリだけつくって、ずっと放置してた 「iOS のカスタム画面遷移ギャラリーアプリ」 にやっと手をつけて、64種類 を試せるようにして公開しました。


f:id:shu223:20140416100040g:image


https://github.com/shu223/AnimatedTransitionGallery


なぜつくったのか

iOS 7 から UIViewControllerAnimatedTransitioning および UIViewControllerTransitioningDelegate プロトコルが追加され、カスタム画面遷移(トランジションエフェクト)が格段に実装しやすくなりましたが、結局のところ実際のアニメーション部分は自分で実装する必要があります。


で、カスタム画面遷移は UIViewController の実装とは切り離せるようにAPIが設計されていて、使い回しやすい ので、こうして一カ所にまとまっていてすぐに試せて見比べられたら便利かも、ということでつくりました。


使い方

git clone した後、 git submodule してください。

$ git clone https://github.com/shu223/AnimatedTransitionGallery
$ cd AnimatedTransitionGallery/
$ git submodule update --init --recursive

あとは TTMAnimatedTransitionGallery プロジェクトを開いてビルドすればOKです。


利用可能なカスタム画面遷移一覧

(2015.12.22更新)

  • HUTransitionVerticalLinesAnimator
  • HUTransitionHorizontalLinesAnimator
  • HUTransitionGhostAnimator
  • ZBFallenBricksAnimator
  • CoreImageTransitionBoxBlur
  • CoreImageTransitionMotionBlur
  • CoreImageTransitionCopyMachine
  • CoreImageTransitionDisintegrateWithMask
  • CoreImageTransitionDissolve
  • CoreImageTransitionFlash
  • CoreImageTransitionMod
  • CoreImageTransitionPageCurl
  • CoreImageTransitionPageCurlWithShadow
  • CoreImageTransitionRipple
  • CoreImageTransitionSwipe
  • ATCAnimatedTransitioningFade
  • ATCAnimatedTransitioningBounce
  • ATCAnimatedTransitioningSquish
  • ATCAnimatedTransitioningFloat
  • LCZoomTransition
  • ADBackFadeTransition
  • ADCarrouselTransition
  • ADCrossTransition
  • ADCubeTransition
  • ADFadeTransition
  • ADFlipTransition
  • ADFoldTransition
  • ADGhostTransition
  • ADGlueTransition
  • ADModernPushTransition
  • ADPushRotateTransition
  • ADScaleTransition
  • ADSlideTransition
  • ADSwapTransition
  • ADSwipeFadeTransition
  • ADSwipeTransition
  • ADZoomTransition
  • CECardsAnimationController
  • CECrossfadeAnimationController
  • CECubeAnimationController
  • CEExplodeAnimationController
  • CEFlipAnimationController
  • CEFoldAnimationController
  • CENatGeoAnimationController
  • CEPortalAnimationController
  • CETurnAnimationController
  • KWTransitionStyleNameRotateFromTop
  • KWTransitionStyleNameFadeBackOver
  • KWTransitionStyleNameBounceIn
  • KWTransitionStyleNameDropOut
  • KWTransitionStyleNameStepBackScroll
  • KWTransitionStyleNameStepBackSwipe
  • KWTransitionStyleNameUp
  • KWTransitionStyleNamePushUp
  • KWTransitionStyleNameFall
  • KWTransitionStyleNameSink
  • DMAlphaTransition
  • DMScaleTransition
  • DMSlideTransition
  • HFAnimator
  • HFDynamicAnimator
  • BouncePresentTransition
  • FlipTransition
  • ShrinkDismissTransition

たくさん集めてみての所感

とりあえず集めてみたものの、正直なところどれも「新しいAPIが追加されたのでつくってみた」感が強く、OSSとして完成度の高いものは(まだ)あまりないと感じました。


サンプルとしてはインパクトがあっても、クセが強すぎるものは使いづらいですし、本格的にアプリをつくる場合、アニメーションや演出の類いはやはり細かいチューニングをする必要がでてくるものですが、今回追加したOSSはカスタマイズ性に欠けるものがほとんどです。


また「遷移後の後片付け」がちゃんとされてないものもたくさんあります(遷移後にビューが元の状態に戻らないとか)。


とはいえ同じく iOS 7 で追加された snapshotViewAfterScreenUpdates やresizableSnapshotViewFromRect:〜 をうまく利用しているものや、CATransform3D で三次元的なエフェクトを使っているものもあり、自分が実装する際の参考やたたき台として便利だとは思うので、ぜひ一度ビルドしてお試しいただければと思います。


(2015.12.12追記)Core Image Transitions

Core Image を利用したカスタムトランジションエフェクトクラスを作成し、本サンプルにも11種類の実装例を追加しました。



上のgifのようなエフェクトは、実際のところクセがありすぎて使いづらいのですが、下記のような


(モーションブラー)


(ボックスブラー)


等は、比較的いろいろなアプリで使い回しが効くのでは、と思います。


実装解説は下記記事にあります。



参考

iOS7のカスタム画面遷移については、下記書籍に詳しい解説があります。


上を目指すプログラマーのためのiPhoneアプリ開発テクニック iOS 7編
加藤 寛人 西方 夏子 藤川 宏之 鈴木 晃 高丘 知央
インプレスジャパン
売り上げランキング: 1,885



iOS6.x以下でのカスタム画面遷移については、拙著に実装方法としくみの解説を書きました。




Core Image を使用したトランジションエフェクト、なんてのもあります。こちらも拙著に詳細あり。



2014-04-15

コネクタを挿すだけで電子工作!GROVEシステムのセンサ・アクチュエータのまとめ

konashi + GROVE拡張ボード、あるいは Arduino + ベースシールド を使うと、 コネクタを挿すだけ でセンサやアクチュエータを使用した回路を作成できるようになります。


ハンダ付けやブレッドボード上で回路を組む必要がないので、本格的なハードの開発はハード屋さんに任せる想定で、iOSアプリ側に専念したい僕のような人間には超ありがたいシステムです。


※詳細は下記連載記事をご参照ください


いろいろセンサ類を揃えておくとプロトタイピングの際に便利なので、本家GROVEサイト(海外)ではなく、Amazon.co.jpでさくっと買えるモジュールを調べてみました *1


センサ(I2C)

I2C デジタル光センサ

GROVE - I2C デジタル光センサ
スイッチサイエンス
売り上げランキング: 364,048

GROVEシステムのI2C接続デジタル光センサです。TSL2561を搭載し、光強度をデジタル信号に変換します。

検出する光のスペクトラムを、赤外線,フルスペクトラム,人間の可視光の3つのモードから選択できます。

  • 検出モード選択可能
  • 高分解能16bitデジタル出力 400KHz I2Cファストモード
  • ダイナミックレンジ 0.1~40,000LUX
  • プログラム可能な割り込み機能(ユーザー設定可能な上下閾値)

I2C カラーセンサ

GROVE - I2C カラーセンサ
スイッチサイエンス
売り上げランキング: 433,463

GROVEシステムのI2C接続カラーセンサです。 TCS3414CSを搭載。2行8列のフィルターされたフォトダイオードと16bitのADコンバータを内蔵しています。 環境光の色度や、物体の色を検出できます。

  • 16bitデジタル出力 I2C 400KHz
  • SYNC拡張ピンによる外部光源とのシンクロ可能
  • プログラム可能な割り込み機能(ユーザー設定可能な上下閾値)

I2C 気圧センサ

GROVE - I2C 気圧センサ
GROVE - I2C 気圧センサ
posted with amazlet at 14.02.13
スイッチサイエンス
売り上げランキング: 334,117

GROVEシステムの気圧センサーです(気温も測れます)。通信方式はI2Cです。

高分解能なBMP085を搭載し、300hPa ~ 1100hPaあるいは海抜+9000m ~ -500m を0.03hPa(0.25m)単位で計測できます。

特徴

  • 広範囲な圧力レンジ(300hPa ~ 1100hPa)
  • I2Cインターフェース
  • 完全に構成済み
  • 低消費電力:5μA (秒間1サンプリング時)
  • 低ノイズ:  1. 0.06hPa(0.5m) ウルトラローパワーモード時

 2. 0.03hPa(0.25m) ウルトラ高分解能モード時

 3. 0.1m以下も可能(rms noise)


I2C 3軸ジャイロセンサ

GROVE - I2C 3軸ジャイロセンサ
スイッチサイエンス
売り上げランキング: 142,968


I2C タッチセンサ

GROVE - I2C タッチセンサ
スイッチサイエンス
売り上げランキング: 857,739


I2C 三軸加速度センサ

GROVE - I2C 三軸加速度センサ
スイッチサイエンス
売り上げランキング: 463,483

GROVEシステムの三軸加速度センサです。通信方式はI2Cです。

MMA7660FC 搭載。資料ページにArduino用ライブラリがあります。


I2C 三軸加速度センサ ADXL345搭載

GROVE - I2C 三軸加速度センサ ADXL345搭載
スイッチサイエンス
売り上げランキング: 353,776

GROVEシステムの三軸加速度センサです。ADXL345搭載。通信方式はI2Cです。

特徴

  • 電源電圧:3V~5V DC
  • 高感度三軸加速度センサ
  • スタンバイモード時消費電力:0.1μA

センサ(アナログ)

水分センサ

GROVE - 水分センサ
GROVE - 水分センサ
posted with amazlet at 14.02.13
スイッチサイエンス
売り上げランキング: 106,952

GROVEシステムの水分センサです。水分量による土中の抵抗値変化に応じてアナログ電圧を出力します。

※増幅回路やケーブルコネクタ部などがむき出しになっています。使用される際は、センサ部分以外が濡れないようにご注意下さい。

特徴

  • 電源電圧:3.3V~5V

光センサ

GROVE - 光センサ(パネルタイプ)
スイッチサイエンス
売り上げランキング: 285,673


温度センサ

GROVE - 温度センサ
GROVE - 温度センサ
posted with amazlet at 14.02.13
スイッチサイエンス
売り上げランキング: 619,993


音センサ

GROVE - 音センサ
GROVE - 音センサ
posted with amazlet at 14.02.13
スイッチサイエンス
売り上げランキング: 318,145

GROVEシステムの音センサーです。マイクで拾った音声をオペアンプで増幅して出力します。

特徴

  • 電源電圧:4V~12V(標準5V)
  • 低自己消費電流:4mA(電源5V時)
  • ゲイン調整可能

センサ(デジタル)

PIRモーションセンサ

GROVE - PIRモーションセンサ
スイッチサイエンス
売り上げランキング: 193,613

GROVEシステムのPIRモーションセンサです。

検出範囲内で動きがあると、SIGピンがHIGHになります。

  • 電源電圧:3~5V
  • 検出角度:120度
  • 検出距離:最大6m
  • 検出距離、ホールド時間調整可能

デジタル温度- 湿度センサPro

GROVE - デジタル温度- 湿度センサPro
スイッチサイエンス
売り上げランキング: 395,876

GROVEシステムのデジタル温度- 湿度センサです。

独自の1wire通信方式です。資料ページにサンプルスケッチとライブラリがあります。

特徴

  • 電源電圧:3.3V~6V
  • 測定時電流:1~1.5mA
  • スタンバイ時電流:40~50μA
  • 測定レンジ:湿度5%~99% 温度-40~80℃

水センサ

GROVE - 水センサ
GROVE - 水センサ
posted with amazlet at 14.02.13
スイッチサイエンス
売り上げランキング: 141,775

GROVEシステムの水センサです。

出力ピンは1MΩ抵抗でプルアップされており、センサ端子に水滴が付くとGNDとショートして出力の電圧が下がる仕組みです。


アルコールセンサ

GROVE - アルコールセンサ
スイッチサイエンス
売り上げランキング: 97,706

GROVEシステムのアルコールセンサです。高感度な半導体アルコールセンサを搭載。

特徴

  • 電源:5V DC 最大電流 140mA(ヒーターON時)
  • 検出濃度:20~1000ppm のアルコール
  • デジタル入力1本(SEL),デジタル出力1本(DAT)
  • 高感度
  • 速い反応速度と使用後の復帰
  • 超寿命

ラインファインダ(近接センサ)

GROVE - ラインファインダ
スイッチサイエンス
売り上げランキング: 400,244

GROVEシステムのラインファインダ(近接センサ)です。

特徴

  • Groveコネクタ(2mmピッチ4ピン)
  • 電源電圧:5V DC
  • インジケータLED付き
  • 2値出力
  • 反応距離調整可能

磁気スイッチ

GROVE - 磁気スイッチ
GROVE - 磁気スイッチ
posted with amazlet at 14.02.13
スイッチサイエンス



センサ(シリアル通信)

GPS

GROVE - GPS
GROVE - GPS
posted with amazlet at 14.02.13
スイッチサイエンス
売り上げランキング: 638,562

GROVEシステムのGPSです。

E-1612-UB GPSモジュールを搭載しu-center software(GPSモジュールの製造元による評価用ソフト)を使用できます。もしくはシリアルポートからGPSパケットを直接読み取ってください。モジュールは、高性能の u-blox 5測位エンジンを備えたスタンドアロン GPSレシーバーのファミリです。

特徴

  • 超高感度: -160dBm
  • 低消費電力:最大 40mA(3.0V時)
  • ボーレート設定可能:4800~57600 Baud
  • NMEAおよびU-Blox 6プロトコルをサポート

赤外線受信機

GROVE - 赤外線受信器
GROVE - 赤外線受信器
posted with amazlet at 14.02.13
スイッチサイエンス
売り上げランキング: 41,629


アクチュエータ

I2C OLEDディスプレイ128×64

GROVE - I2C OLEDディスプレイ128×64
スイッチサイエンス
売り上げランキング: 505,015

GROVEシステムのOLEDディスプレイです。通信方式はI2Cです。


I2C モータードライバ

GROVE - I2C モータードライバ
スイッチサイエンス
売り上げランキング: 78,703

GROVEシステムのモータードライバです。L298搭載。通信方式はI2Cです。

2個のDCモーターまたは1個のステッピングモーターを制御できます。

ATmega8Lを搭載してI2C通信により簡単に制御できるボードになっています。

特徴

  • 外部電源電圧:6V~15V
  • 1チャンネル当り最大出力電流:0.7A
  • I2Cバス電圧:5V

ジョイスティック

GROVE - ジョイスティック
スイッチサイエンス
売り上げランキング: 677,757

GROVE用のジョイスティックです。

X軸、Y軸がそれぞれの位置に応じたアナログ電圧で出力されます。

ステックを押し込んだ(ボタンが押された)場合、X軸に電源電圧が出力されます。その間、X軸の位置は不明になります。

●回路図(商品写真2枚目)とピン配置

1:X軸出力

2:Y軸出力

3:VCC

4:GND


LEDバー

GROVE - LEDバー
GROVE - LEDバー
posted with amazlet at 14.02.13
スイッチサイエンス
売り上げランキング: 308,959

GROVEシステムのLEDバーです。赤x1、黄x1、緑x8の全10セグメントをそれぞれ最大256段階(16bit)で輝度指定可能。通信方式は2線式シリアル。

複数個連結可能。


リレー

GROVE - リレー
GROVE - リレー
posted with amazlet at 14.02.13
スイッチサイエンス
売り上げランキング: 223,908

GROVEシステムのリレーです。リレー駆動用のトランジスタも乗っているので、簡単に使えます。


赤外線発信器

GROVE - 赤外線発信器
GROVE - 赤外線発信器
posted with amazlet at 14.02.13
スイッチサイエンス
売り上げランキング: 45,104

GROVEシステムの赤外線発信器です。

TXから入力された信号がトランジスタで増幅されて赤外線LEDから発信されます。

他の多くのGROVEのパーツと違って、1番ピンは未接続(NC)、2番目のピンがTXになっています。


7セグメント4桁ディスプレイ

GROVE - 7セグメント4桁ディスプレイ
スイッチサイエンス
売り上げランキング: 149,812

GROVEシステムの7セグメント4桁表示のLEDディスプレイです。

TM1637を搭載し、たった2本のデジタルピンで7セグメントLED4桁を制御できます。


シリアル接続LCD

GROVE - シリアル接続LCD
GROVE - シリアル接続LCD
posted with amazlet at 14.02.13
スイッチサイエンス
売り上げランキング: 659,515

GROVEシステムのシリアル接続LCDです。

GROVE - スターターバンドル(http://www.amazon.co.jp/dp/B00CDFQHXY)付属品と同等のものですが、スターターバンドル付属品のみPower Up Resest機能があります。

※バックライトだけでなくLCDの電源もシリアルからのコマンドでON/OFFされるので、電源を繋いだだけでは何も表示されません。


テープLEDドライバー

GROVE - テープLEDドライバー
スイッチサイエンス
売り上げランキング: 688,222

GROVEシステムのテープLEDドライバです。

特徴

  • カスケード接続可能
  • テープLEDは5m以下を推奨
  • PWM出力
  • 256段階の輝度レベル

RGB LED

GROVE - RGB LED
GROVE - RGB LED
posted with amazlet at 14.02.13
スイッチサイエンス
売り上げランキング: 439,860

GROVEシステムのチェーン接続可能なRGB LEDモジュールです。


*1:2月ぐらいに書きかけでそのまま忘れてた記事なので、売り切れてる可能性もあります

2014-04-10

第5回、第6回 #potatotips で勉強になったことのまとめ

例のごとく、『第5回 #potatotips』『第6回 #potatotips』について @hirama2 さんの記事を読んでキャッチアップさせていただきました。


で、ちまちまメモとして勉強になったことをツイートしてたのですが、わりとふぁぼられ率が高いので、ニーズあるかもしれないのでこちらにまとめておきます。


『え!?Storyboard使ってるのにそんな画面遷移のしかたしてるのですか!?』

ViewControllerを疎結合にしておくための、値の受け渡し方の提案、およびそれを実現するための TKRIntent の話 by @tokorom さん。


スライドでは「そもそものstoryboardのいいところ」から始まり、「困るケース」「解決案」と順を追って説明してくれるので、すごくなるほど感があります。



直近の案件でまさにそういう状況になってたので、タイムリーに響きました。


『SDWebImageを1年半使ってみた』

超定番ライブラリ、SDWebImage の諸々の使い方や、職人的に気が利いてるところの紹介 by @ninjinkun さん。FastImageCache との併用例も。



「非同期で画像をとってきてくれるライブラリ」は過去にもいろいろなものが台頭しましたが、このスライドを読んで、SDWebImage はそれらの決定版なんだなーと。


最後のページの「自前の実装は捨てましょう」が個人的にグッときました *1


『デバッグ時のカスタムQuick Look機能』

by @TachibanaKaoruさん。


個人的にこのTipsを知ったときは超テンション上がりました。


下記記事にキャプチャ入りで詳細に書かれています。


『多段delegateをResponder Chainで取り除く方法』

Responder Chainをたどって、移譲先(セレクタが実装されているコントローラ)を見つけて、処理してもらう方法。


delegate が多段になってつらくなる、というケースも結構あるあるなので、今度試してみようと思います。


『iOS simulatorでもcolored logcatしたい!』


タイトルだけ見たときは、「コンソールのログ出力に色をつけてくれるXcodeプラグインなのかな?」と思ったのですが、記事を読んでみると、

  • ブラウザでログを見る
  • 複数アプリのログを見ることができる
    • url schemeでアプリ間を行き来する際のログを追うこともできる

という特徴があり、しくみとしては、

  • goのlogcat serverがブラウザにログを送る
  • ログの整形は template/main.html で行っている

となっているそうです。


こういうやり方もあるのかーと勉強になりました。


関連


*1:UIScrollView をベースに、自前でつくってたカルーセルUIコンポーネントがあったのですが、ふと『iCarousel』(こちらも超有名OSS)を見てみたら、そっちの方がずっとよくできてて、自分の実装はあっさり葬り去ることになったという。(iCarouselは「カバーフローをつくるもの」という思い込みがあって、当初は選択肢として考えてなかった)

2014-04-06

【iBeacon】Estimote iOS SDKがついに温度センサと加速度センサをサポート

iOS7リリース当初は「iBeacon といえば Estimote」ぐらいの存在感を発揮していたものの、

・・・と 他のビーコンがどんどん実践投入 されていく中でだんだん存在感が薄れてきた Estimote が、ついに加速度センサと温度センサをサポートしたSDKをリリースしたようです。



さっそく試してみた

1. SDKを取得

Estimote iOS SDK の 2.0beta ブランチをcloneしてきます。


2. ファームアップデート

2.0betaブランチに付属しているExamplesプロジェクトをビルドすると、

Update Firmware Demoという項目があるので、そこからファームをアップデートします。


f:id:shu223:20140406122128j:image:w240


自分が持ってるEstimote ビーコン3台のうち、1台は検出されず、1台は何度やっても必ず途中でコケる、そして1台だけ成功しました。


何に失敗してるのかわからなかったので、デモのソースを見てみると、

[self.beacon checkFirmwareUpdateWithCompletion:^(ESTBeaconFirmwareInfoVO *result, NSError *error) {
}];

こんな感じでエラーは取れてるので、それを表示するように改修 *1 してみたところ、download -> reboot まではうまくいってて、ファームインストール中に接続が切れてるようでした。


そのビーコンは繋がったり繋がらなかったりするので、電波が弱くなってるのかもしれません。もう1台は一度も検出すらされないし。。


温度センサの値を見る

ファームアップデートに成功すると、Examplesの Temperature Demo でそのビーコンを選択できるようになります。


で、そのビーコンを選択すると、接続が始まり、接続成功すると、


f:id:shu223:20140406122242j:image:w240


28.2度・・・


まだまだ肌寒い4月6日現在において、そんなはずはありません。


下に書いてあるINFORMATIONを読むと、参照温度をセットしてキャリブレーションしてねと書いてあります。


気温をキャリブレーション

手元に温度計等がなかったので、天気アプリで現在の気温を見て、

[self.beacon calibrateTemperatureWithReferenceTemperature:@(10.)
                                               completion:^(NSNumber *value, NSError *error) {
                                                   
                                               }];

こんな感じでキャリブレーションしました。


当たり前ですが、一度やればOKです。


ただビーコンごとにやる必要はあるので、もしこのビーコンの温度センサ機能を実践投入するなら、(台数によっては)複数のビーコンを一括キャリブレーションするユーティリティが必要になりそうです。


温度センサの値を取得するメソッド

こんな感じのシンプルなものでした。

[self.beacon readTemperatureWithCompletion:^(NSNumber* value, NSError *error) {
}];

加速度センサの値を見る

Examples の Accelerometer Demo で確認できます。


f:id:shu223:20140406122456j:image:w240


iOSの加速度センサのようにデバイスの傾きが得られるのではなく、Core Motion のモーションアクティビティのように動いた回数がカウントされます。


ビーコンを動かしながら値がどう動くか見てみた感じだと、閾値以上の傾きがあるたびに値がインクリメントされるようです。


加速度センサの値を取得するメソッド

実はiOSのように加速度センサの傾き自体を取得できるようになっていて、でもアプリ側で閾値処理して歩数カウントしてるのかなと期待したのですが、

[self.beacon readAccelerometerCountWithCompletion:^(NSNumber* value, NSError *error) {
}];

SDKでカウント自体しか取れないようにされていました。


使い道

温度センサは、iOSデバイスにも、他のビーコン端末にもついてない *2 センサなので、ビーコンの可能性がいろいろ広がるのではないでしょうか。


たとえば、IRKit + iBeacon であれば、今まで領域に入ったらエアコンon、出たらoff、としていたものを、温度が一定以上なら冷房をon、温度が一定以下なら暖房をon、みたいに出来ます。


加速度センサは、据え置きというよりは失くしもの防止等の持ち歩き用途で移動中かどうかを判別するとか、据え置き型なら持ち出し防止とか、そういったことに使えるかもしれません。


何はともあれ、技適マークは取得してくれないとどうにもなりませんが。。


参考・関連記事

*1:本家リポジトリにプルリク送りました

*2kontakt.io は、新基盤でセンサを拡張できるようになっているとCEOが言ってました。

2009 | 08 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2018 | 02 |