2013/04/20

UP by Jawbone 購入しました

ライフログツール、UP by Jawboneを購入しました。

 UP By Jawbone は、一日の運動量や睡眠時間を記録してくれるためのリストバンドです。


日本では2013/4/20発売。当初発売される色は、ブルー、オニキス、ライトグレイ。AppleStore では、Store限定としてミントグリーンが売られています。海外ではもう少し多色展開です。

同じような機能を持つ、人気の高いリストバンドに、NIKEのFuelBandがあります。


残念ながら、FuelBandは、日本ではまだ正式販売されていません。

UPはFuelBandよりも多くの情報を記録することができます。例えば、FuelBandは運動量を取得することへ特化していますが、UPはそれに加え、睡眠時間も記録します。

また、UPはバイブレーションを持ち、目覚ましなどに活用出来ます。電池も、FuelBandよりも長持ちします。

一方FuelBandは液晶がLCDが付いているため、情報を多く表示できます。例えば、運動量をFuelBand本体で確認したり、時計して活用することもできます。UPは本体へ情報表示機能はありません。

また、スマートフォンとの接続もBluetoothが利用できます。UPは本体付属のヘッドフォンジャックをスマートフォンへ差し込む必要があります。

どちらにも良い点がありますが、UPのほうが重量が軽いこともあり、また、記録情報が多いこともあり、日常生活用途として手軽に使えると感じています。

本体が見えるパッケージ。


箱には、腕を通してサイズを確認できる穴がついています。これに腕を通すことでサイズの確認が行える仕組みです。


箱内の本体装填方法は独特。


上がFuelBand、下がUP。


左がUp、右がFuelBand。


FuelBand、Upとも、購入時に一番悩むのは、どのサイズが最適化、ということです。

私は腕が細く、UP用に公開されているUP SIZERで計測したところ、155mmでした。

FuelBandではMを利用していましたが、やや大きめのつけ心地でした。FuelBandのオフィシャル写真などよりもゆるやかで、ゆるめのアクセサリ感覚で利用していました。

UPでは、155mmはちょうどSとMの中間ですが、今回もMを選択しました。

UPは、FuelBandと違い素材はゴムです。そのため、FuelBandよりもサイズへ柔軟性があります。結果FuelBandよりもダブつかせずに装着させることができました。

もし、FuelBandでMサイズを使っている場合、UPでもMサイズを選択するとハズレはないと思います。ただし、フィット感まで考慮すると、やや、UPのほうが小さめと捉えると良いでしょう。

これらのライフログツールは、装着し計測することで、普段は意識していなかったことに気がつくことができるようになります。私は、一週間の自分の運動量を把握することができ、週末、如何に動いていないかを思い知らされました。

ゆるやかな視点で日々を計測してみると、なかなか楽しいかと思います。



2013/04/14

Pebble Watch Face SDKとlibpebbleでPebbleへアプリを転送する

Pebbleは表示装置に電子ペーパを持つ時計です。


iPhoneやAndprodのアプリと通信することができ、また、自作のアプリを動作させることもできます。

現在はPre-Order状態ですが、KICK STARTERでの出資者へ先行出荷が開始され、幸い私も3月半ばに入手することができました。

梱包箱がそのまま送付箱になる、Amazon Kindleなどと同じスタイルです。




 中身は本体と充電ケーブルのみのシンプル構成。


常用している、CITIZEN PROMASTERとの大きさ比較。結構大きな腕時計ですが、それに負けない大きさです。


iPhoneアプリの起動画面とファームウェアアップデートの画面。


本体でもアップデートが確認できます。


今までは、開発者用SDKが公開されていなかったため、アプリを自分で作成することが困難でしたが、とうとう先日、Watchface SDKが公開されました!

まだまだ基本的な画面を構成できる程度のAPIが公開されたに過ぎません。また、所謂「原理試作」的な位置づけで、「大きく変化する可能性が高いです」と宣言されています。それでも、とても楽しそうです。

現状でもSDKやインストールマニュアルは完成度が高く、ドキュメント通りに進めれば、何の戸惑いもなくアプリをbuildし、転送することができます。

本来作成したアプリはiPhoneなどのスマートフォンアプリを使って、簡単にインストールできるはずなのですが、Get StatedInstall the SDKへ書かれているように、現在公開されているiPhoneアプリ(1.0.5)からはSDKを使って自作したアプリをインストールすることができません。

そこでlibpebbleを使う方法が推奨されています。このコマンドラインアプリを使用すれば、iPhoneアプリを使わず、直接Pebble Watchへアプリをインストールすることが可能です。この手法のほうが、より迅速に開発を進める上でも便利でしょう。

libpebbleを、常用しているiMac/Late 2012 & OS X 10.8.3で試してみたところ、SDK同梱のサンプルアプリをインストールすることができました。

転送にあたっての注意点は以下の通りです。
  • 環境依存の話なのかもしれませんが、私の環境では、同じ手順を行なっても、Pebble Watchとの接続に失敗する、または途中で途切れてしまうことが多々ありました。一度失敗しても、何度か試してみると良いでしょう。Pairをやり直すことも効果があるかもしれません。
  • Pebble WatchとiPhoneとのPairは解除しておくと良いでしょう。iMacとの接続が頻繁に切れるため、その度毎にiPhoneと接続してしまうことになり、やや面倒です。
  • iMacのメニューバーへ表示されているBluetoothアイコンをOptionボタンを押しながらクリックすると、connectしているデバイスだけではなく、Pairが確立しているデバイスも確認できます。接続可能かどうかは、この表示を確認すると良いでしょう。




  • Pebble Watch側のSettings>Bluetoothでは、Pairが確立されているデバイスが確認できます。libpebbleからのコマンド送出前は、この表示がconnectedとなっている必要はありません。コマンド操作を行えばconnectedになります。



  • 一度Pairを確立できれば、Pebble Watch側をSettings>Bluetoothのままにしておく必要はありません。時計画面表示でもlibpebbleからのコントロールは可能です。
  • ドキュメントへも書いてありますが、PEBBLE_ID環境変数を設定しておくと便利です。

接続実験にはlibpebbleのpingコマンドが便利です。Pebble Watchのバイブレーションが発動すると共に、画面へメッセージが表示されます(maciaはiMacのホスト名です)。



上記の画面を表示させる際に実行したコマンドラインは次のようなものでした。PEBBLE_ID環境変数が設定しているので、--pebble_idオプションは指定していません。
% ./p.py --lightblue ping
[DEBUG   ] LightBlue process has started on pid 58109
[DEBUG   ] Connection established to 00:11:22:33:44:55
[DEBUG   ] Initializing reader thread
[DEBUG   ] Reader thread loaded on tid Thread-1

SDK付属のアプリを転送するとこんなメッセージになります。
% ./p.py --lightblue load ../pebble-sdk-release-001/sdk/build/sdk.pbw
[DEBUG   ] LightBlue process has started on pid 57402
[DEBUG   ] Connection established to 00:11:22:33:44:55
[DEBUG   ] Initializing reader thread
[DEBUG   ] Reader thread loaded on tid Thread-1
[DEBUG   ] Attempting to add app to bank 2 of 8
[DEBUG   ] Sent 3840 of 3840 bytes
[DEBUG   ] Sent 4000 of 4256 bytes
[DEBUG   ] Sent 4256 of 4256 bytes

ドキュメントを読みつつ、いろいろ遊んでみたいと思います。

2013/03/26

TPMigrationManagerをリリースしました

TPMigrationManagerをリリースしました。

TPMigrationManagerはCoreDataのマイグレーションを簡単に行うための便利ユーティリティです。

github から取得出来ます。MITライセンスです。

git clone https://github.com/n-miyo/TPMigrationManager.git

CoreDataはOS XやiOSで使えるフレームワークで、オブジェクトをファイルへ保存したり、関係性を管理したりすることができます。非常に平たく言ってしまえば、データベースとCocoaのオブジェクトを、便利に橋渡ししてくれるフレームワークです。

データを格納する為には、その格納情報を示したモデル(RDBMS的に言えばスキーマ)が必要になります。モデルを変更した場合、データの移行(マイグレーション)が必要になりますが、CoreDataはその仕組みも提供しています。

CoreDataのマイグレーション機能は非常に多機能ですが、多機能であるが故に、利用するための設定などがやや複雑です。

TPMigrationManagerは、できることを基本機能へ限定することで、なるべく簡単に利用できるようにしました。

マイグレーションは以下の3ステップで完了します。

  1. TPMigrationManagerのインスタンスを作る
  2. - [TPMigrationManager migrationStatus]でマイグレーションの方法を得る
  3. 取得した方法に基づき、マイグレーションを実行する

インスタンスを作成するには、モデルや格納ファイルの場所を明示的に指定する方法と、基本となる名前を引渡し、TPMigrationManagerへ推測させる方法の2種類があります。

前者が - [TPMigrationManager initWithManagedObjectModel:persistentStoreURL:persistentStoreType:]、後者が - [TPMigrationManager initWithBasename:]です。
Xcodeが生成するCoreDataのテンプレートに従っている場合には、後者が便利です。

CoreDataでは2つのマイグレーション方法を提供しています。

一つが「新旧モデルの変更をCoreDataへ自動推測させてマイグレーションを行う」方法、もう一つが「自分で変換のマッピングモデル作成しマイグレーションを行う」方法です。

TPMigrationManagerでは、前者は - [TPMigrationManager migrateByInferredMappingModelWithOptions:completed:]が、また後者は - [TPMigrationManager migrateBySpecificMappingModelWithOptions:progress:completed:]が相当します。

前者は事前準備が必要ない分、より簡単で、また動作も大変に高速です。Appleの推奨もこちらです。ただし、複雑な変更などへは対応出来ません。また、マイグレーションの進捗状況を取得することや、キャンセルを行うこともできません。

後者は、新旧のモデルを自由に変換することができます。例えば、あるモデルでは複数の要素へ分かれていたデータを1つへまとめる、といったことも可能です。進捗状況も取得出来ますし、キャンセルも可能です。但しマイグレーションには多くの時間が必要となります。また、変換方法を示すNSMappingModelを事前に準備し、アプリへ含めて置かなければなりません。

どちらの方法を使うにしても、メソッドを呼び出せば、マイグレーションは終了します。終了後は、指定したblocksが実行されます。

どうぞ、お気軽にご意見などお寄せ頂ければ嬉しく思います。お待ちしております。