2013年12月30日月曜日

Unable to perform direct rendering operation on client


12-30 14:57:43.448: E/JavaBinder(197): !!! FAILED BINDER TRANSACTION !!!
12-30 14:57:43.448: E/TimelineService(197): Unable to perform direct rendering operation on client:
12-30 14:57:43.448: E/TimelineService(197): android.os.TransactionTooLargeException
12-30 14:57:43.448: E/TimelineService(197):     at android.os.BinderProxy.transact(Native Method)
12-30 14:57:43.448: E/TimelineService(197):     at com.google.android.glass.timeline.ITimelinePublisher$Stub$Proxy.performDirectRenderingOperation(ITimelinePublisher.java:98)
12-30 14:57:43.448: E/TimelineService(197):     at com.google.android.glass.timeline.Client.performDirectRenderingOperation(Client.java:129)
12-30 14:57:43.448: E/TimelineService(197):     at com.google.android.glass.timeline.TimelineService.performDirectRenderingOperation(TimelineService.java:188)
12-30 14:57:43.448: E/TimelineService(197):     at com.google.android.glass.timeline.ITimelineManager$Stub.onTransact(ITimelineManager.java:114)
12-30 14:57:43.448: E/TimelineService(197):     at android.os.Binder.execTransact(Binder.java:338)
12-30 14:57:43.448: E/TimelineService(197):     at dalvik.system.NativeStart.run(Native Method)




原因が良くわからない例外。
分かったら追記。
 →リフレッシュレートが多すぎた模様 (1秒あたり 500回 描画していた・・・)



いますぐゲットできるスマートグラス、Vuzix M100

今回は、既に市場に出荷されているスマートグラスをご紹介します。
Vusix の M100 です。


唯一、いま日本で手に入れられるスマートグラス
それがこの M100。



もし、これに見覚えのある方がいらっしゃったら、あなたは情報通です!
そう、これは今年の CEATEC で NTTドコモ が ”インテリジェントグラス”  として展示したものの一つですね。



この製品、Android が搭載されています。
従って、基本的には Android アプリ開発の延長線上の技術でアプリを用意できるようです。
ただし、開発するためには専用の SDK が必要になるとの事なので、その点がネックですね。


ちなみに、気になる本体のみのお値段は・・・ $999.99(国外価格)、約10万円です。
SDK が付くと 147,000円 (国内価格) だそうです。



他のスマートグラス製品との特長比較や普及予測・ビジネス予測についてはお正月に公開予定です。
ご期待ください!

2013年12月29日日曜日

Google Glassで目の前の人を自動で顔認識しリアルタイムに情報が見える「NameTag」 ・・・が準備完了とのこと

Gigazineさまにて

Google Glassで目の前の人を自動で顔認識しリアルタイムに情報が見える「NameTag」

という記事が出ております。

これは――記事末尾で指摘されている通り、Google がいまのところ一切許可していない顔認識 Glassware となります。

著者は当面 顔認識を伴う Glassware は解禁されない と考えており、開発リソースを割くのであれば顔認識以外のサービスに割くべきと考えております。
※ただでさえレストラン等での着用が禁止されている状況であるのに、火に油を注ぐような状況となり得るからです。

また、これが有効活用されるためには顔画像が広く公開されていることが前提であり、これは現時点での日本では到底許容されるとは思えないからでもあります。
※CEATEC JAPAN 2013 にて NTTドコモ が同じようなシステムを参考出品しておりましたが、こちらもまだ日本の文化には合っていないと考えます。


顔認識による情報提供は便利であると思われますが、ウェアラブルデバイスが怖いものであると一般ユーザーに錯覚させてしまうおそれが高いものでもあります。

デベロッパーの皆様におかれましては、顔認識に関する実装には細心の注意を払っていただきたく、よろしくお願いいたします。

2013年12月28日土曜日

【お年玉】 スマートグラス(メガネ型の機器) の製品比較 <一挙5機種> 【乞うご期待!】



2014年はウェアラブル元年になると考えております。
それも、使う必然性の薄かったウェアラブル時計ではなく、ハンズフリーで情報を受け取ることのできるスマートグラスが普及してゆく年となるでしょう。

これを祝い、市場に出つつあるスマートグラス 5機種 の特徴等を整理してご提供します!

お年玉として、2014年1月1日に当ブログにて開示予定。

ご期待ください!

スマートグラス(メガネ型の機器)の製品比較 <Glass, Moverio>
 が好評でしたので、第2弾です!!

2013年12月27日金曜日

なんと! Glassware のリリースには Google の審査が必要!!

Glassware (Glass アプリ) を開発しても、Glassware を配布するには Google の審査が必要となります。
Android と同じだと思っていると痛い目にあいますのでご注意ください。
※出典はこちらです。


Glassware は、MyGlass を介して配布することとなります。

しかしながら、Glass はスマホと違ってユーザに非常に近いデバイスである(Glass向けアプリ(Glassware) の企画には、5つのルールを守ろう! 参照)ため、当該 Glassware がさまざまなポリシーに則っているかどうかの審査を経てから公開となります。
※ひらたく言えば、iOS のアプリ配布と同じです。

現時点ではまだ審査は開始されていませんが、以下に配慮して開発を進める必要があります。

■各種ルールに則って開発しよう
ルールに則り、Glass にあるべき UI を実現したアプリを用意する必要があります。

■音声コマンドを選択・申請しよう
既存の音声コマンドを選択するか、あるいは、音声コマンドを申請します。
これは、Google が音声コマンドが的確に動作することを保証するためです。

上記をすべてクリアしたのち、Glassware の申請となります。
各種ルールは非常に厳密に定義されておりますので、じっくり目を通してから企画・開発に着手するのがよいでしょう。

屋根工事の現場で「Google Glass」が活躍! ・・・とのこと

他サイトさまにて『屋根工事の現場で「Google Glass」が活躍』との記事がありました。
関連記事で『ビジネス世界にも進出する「Google Glass」』というものもあります。



数日前に私が『Glass を日本で初めに手にする人々はビジネス関係者』で書いた内容が、そのまま事例として紹介されているような記事ですね。

重要なことなので、再度記載いたしましょう。


私は、Glass の最も画期的なところは
  • 視界をふさがず   (例えば、Moverio は視界をふさぎます)
  • ハンズフリー    (例えば、スマート時計は手をふさぎます)
で情報を得られるところだと考えています。


ビジネス用途であれば、いま米国で問題になっている「プライバシー侵害」に関してもあまり問題にならないと考えられます。
従って、日本でもビジネスでの利用が見込まれます。


なお、日本での Glass 販売に合わせ、Glassware(Glass向けアプリケーション) の企画・開発や講演等を仕事として承る予定でございます。
ご期待くださいませ。

2013年12月26日木曜日

Glass向けアプリ(Glassware) の企画には、5つのルールを守ろう!

今回は、Glass 用のアプリ (これを Glassware と呼びます) に要求されるデザイン・企画観点でのルールについてお話ししたいと思います。

Google のオフィシャルな説明を、私のコメントも含めて意訳したものです。
※原典はこちらです。

Design for Glass/ Glass の利用シーン


スマートフォン、タブレット、パソコンの機能をGlassで置き換えようとしてはいけません。
なぜなら、ユーザーは、パソコンで年単位の情報(写真や書類などなど)を、スマホで月単位(=わりと最近)の情報を管理しています。要は適材適所があるということですね。

では Glass はどういった用途に利用すべきでしょうか?

Glass では、シンプルで、「現在」に関連したものを管理(というよりも、表示)するのがよいでしょう。

Don't get in the way/ ユーザーの邪魔をしないで


ユーザーが「なにか」を必要としたときにのみ、あなたの Glassware が「なにか」を提供するようにしてください。
不快な思いをさせないことが重要です。

Keep It relevant/ 関連する情報を出そう


上述の「なにか」とは、ユーザーが不思議に思うことなどです。
それに対する答えを適切な時間に届けることにより、満足感を与えることができます。

Avoid the Unexpected/ 予想外の情報はダメ


Glass は、スマートフォンなどとちがい、ユーザーの感覚に非常に近いところにあるものです。
従って、例えば
  • 広告が突然表示される
  • 真夜中に突然音が鳴る
などは不適切です。

Build for people/ ユーザーに使いやすく


ユーザーが直感的に利用しやすく、かつ、使い終わったらそのまま放置しても問題ないインターフェースを実現してください。
なお、いまのところ Glassware から利用できる手段は
  • 1本指のスワイプ
  • 2本指のスワイプ
  • 1本指のタップ
  • 2本指のタップ
  • 音声認識
  • 加速度センサー
となります。
※著者は、日本では音声認識による操作はあまり普及しないのではと考えています(国民性ですね)。

Glass で com.android.ddmlib.SyncException: Read-only file system

Glass に adb install コマンドでアプリを転送しようとしたところ、

Failed to install xxx.apk on device 'xxxxxxxxxxxxxxxx': Read-only file systemcom.android.ddmlib.SyncException: Read-only file system起動はキャンセルされました!

が表示されて転送できませんでした。
adb コマンドの方では

Error: Could not access the Package Manager.  Is the system running?

が出ました。

こんなときはハードリセットで対処しましょう。

2013年12月25日水曜日

java.lang.NoSuchMethodError: com.google.android.glass.timeline.TimelineManager.getLiveCard

12-25 08:07:29.304: E/AndroidRuntime(1667): FATAL EXCEPTION: main
12-25 08:07:29.304: E/AndroidRuntime(1667): java.lang.NoSuchMethodError: com.google.android.glass.timeline.TimelineManager.getLiveCard
12-25 08:07:29.304: E/AndroidRuntime(1667):     at com.google.android.glass.sample.compass.CompassService.onStartCommand(CompassService.java:117)
12-25 08:07:29.304: E/AndroidRuntime(1667):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2359)
12-25 08:07:29.304: E/AndroidRuntime(1667):     at android.app.ActivityThread.access$1900(ActivityThread.java:123)
12-25 08:07:29.304: E/AndroidRuntime(1667):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210)
12-25 08:07:29.304: E/AndroidRuntime(1667):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-25 08:07:29.304: E/AndroidRuntime(1667):     at android.os.Looper.loop(Looper.java:137)
12-25 08:07:29.304: E/AndroidRuntime(1667):     at android.app.ActivityThread.main(ActivityThread.java:4424)
12-25 08:07:29.304: E/AndroidRuntime(1667):     at java.lang.reflect.Method.invokeNative(Native Method)
12-25 08:07:29.304: E/AndroidRuntime(1667):     at java.lang.reflect.Method.invoke(Method.java:511)
12-25 08:07:29.304: E/AndroidRuntime(1667):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-25 08:07:29.304: E/AndroidRuntime(1667):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-25 08:07:29.304: E/AndroidRuntime(1667):     at dalvik.system.NativeStart.main(Native Method)


上記のような例外が発生することがあります。
これは、XE12 で当該メソッドがなくなったことを表していますので、SDK をアップデートし、実装を修正しましょう。
 →XE12 での変更点はこちらです

Glass must cool down to run smoothly

Glass (XE12) を利用していると、時計画面の下部に Glass must cool down to run smoothly と表示されることがあります ("ok glass" と代わる代わる表示されます)。



これは、Glass が熱を持っている状態ですので、アプリを停止させるなどして冷えるのを待ちましょう。


2013年12月24日火曜日

GlassUp というスマートグラス

イタリアの会社が GlassUp というスマートグラスを開発中です。


そろそろ仮オーダーを頼めるとのこと。
価格は $299 とのことなので、Moverio と同クラスの価格帯ですね。

いまのところ詳細不明ですが、こちらも継続してレポートしてゆこうと思います。

Glass を日本で初めに手にする人々はビジネス関係者

ITPro さまのサイトにて

大学病院でGoogle Glass臨床試験が始まる、「グラス診療」がブレーク寸前

という記事が出ていました。
Glass の特性からすると、当然の発想ですね。

私は、Glass の最も画期的なところは
  • 視界をふさがず   (例えば、Moverio は視界をふさぎます)
  • ハンズフリー    (例えば、スマート時計は手をふさぎます)
情報を得られるところだと考えています。
そして、この事実は、日本への普及がどのような流れで進んでいくかを教えてくれています。

私は、ズバリ
  ビジネス用途
で日本に普及してゆくと考えています。

ビジネス関係者の場合は、ビジネスの効率化を図るべく、積極的な活用方法を模索してゆく(=アプリを作る)&大口で採用するからです。
※当然アーリーアダプター層も利用するのですが、これはどちらかというと受け身的な利用の仕方 (=アプリを使う)となるでしょう。

じつは私、医療関係の方から問い合わせを受けました。
具体的なお話は書きませんけれども、既に Glass のビジネス利用に目をつけている方がいらっしゃるということは、みなさま覚えておいて損はないかと思います。

Glass のバッテリー不足は、廃物利用で解決!

いまのところ、Glass の大きな泣き所がバッテリー不足であることです。
写真をとればとるほどバッテリーが減っていきます。

そんな中でふと思い立ったのがこの組み合わせ。


  • いまでは何の役にも立たなくなってしまった単三電池2本式の充電器
  • 1メートル程度の長さのUSBケーブル (巻き取り機能のないシンプルなもの)

単三電池2本式の充電器(ここでは eneloop スティックブースター )は、震災のころにはお世話になったものの、今となってはスマホを充電できないのでほこりをかぶっている代物です。
しかし Glass なら! 充電できる!!
4本式よりも軽いし、廃物利用にもなるし、一石二鳥ですね。

そしてなんの変哲もないUSBケーブルです。
Glass を装着しながらでも充電できるように、余計な巻取り機構がない方が安全だし、肩も凝らない (と、思う)。

ただ、欲を言えば、透明なUSBケーブルだとありがたい。
サンワサプライさまとか、そういったメーカーさまが「光らなくて透明で細い」ケーブルを作っていただけたらと思います!
# 作っていただけたら、テストしますよ!

2013年12月23日月曜日

Glass 2014/1月版(XE13?) は出ない模様

Google の Glass 担当者は、Discussions にて

Heads up: XE12 includes XE13, next update in February

と述べました。
内容を意訳しますと、

  • XE12 が年末年始のプレゼントとなるよう、すごい頑張ったよ!
    • iOS版 MyGlass
    • ウィンク機能
    • 画面ロック など
  • 疲れたから、2014/1 のアップデートはスキップするよ

という内容です。
一介の開発者としては、じっくり腰を据えて XE12 に対応できるので、嬉しいニュースかもしれません。

Google Glass をセキュアに使う方法! (ロック解除パターンを設定する)

Glass XE12 にて、ロック解除が実装されました。
タップやスワイプ操作を4回続けることで本人確認を行い、セキュリティを担保するものです。

設定方法は簡単です。
# ・・・が、なぜかこの操作、ガンダムUCでスタークジェガンからミサイル・ランチャー・ユニットを排除する操作を彷彿とさせる感じでありました (自分だけか?)
# え!? なんの話かって!?
# そんな貴方は

 
# を見よう!

 1)メニューを開き・・・

 2)タップして Set up を実行
 3)するとこういう画面になるので・・・
 4)4回続けてスワイプやタップ操作を行います(1本指・2本指が可能)




 5)同じ操作をもう一度行うと、オンになります!


くれぐれも、設定したパターンを忘れないようにしましょう!

Google Glass でウィンクして写真を撮る方法!

Glass XE12 より、ウィンクでの写真撮影が可能になりました。
ただし、これには設定が必要です。
# きっと、加速度センサの変化で関知しているのでしょうね。

設定はカンタンです。
 1)設定画面に行く
 2)タップしてCalibrateメニューを開き、タップ

 3)指示に従い、2回ウィンクする

 4)完了!

カンタンですね。

ただし、"Experimental feature" とあるとおり、今後どうなるかは(プライバシー観点等)気になるところです。


Glass Development Kit (GDK) が rev.2 にアップデート!

この数日で、Glass Development Kit (GDK) Sneak Peek が rev. 2 にアップデートされたようです。


さっそくダウンロードしよう!
# Glass が手元にないと、意味ないですが・・・


<気になる変更点>
タイミングからして、Glass XE12 の修正が反映されているように思われます。
Glass Developers のサイトでも、更新が 2013/12/17 や 18 に入っているページがいくつかあります。
  • com.google.android.glass.media
    • CameraManager ・・・インテント発行で、写真や動画が取得可能。こないだまで Intent を投げたらアプリがクラッシュしていたけど、これで大丈夫かも!?
    • Sounds ・・・タップ音を鳴らすときなどに。
  • com.google.android.glass.widget
    • CardScrollView などが追加 ・・・Immersions でタイムライン&ライブカード風の画面を作るためののビューかな?

・・・調べてみたら、全ページに更新かかってるじゃん ∑( ̄□ ̄ノ)ノ
# 今回の更新分がどこか、メソッド単位で表記してくれませんかね Google さん・・・

2013年12月22日日曜日

新ソフトキーボードの Minuum

目新しいウェアラブルキーボードはなかろうかと思って調査していたところ、このようなニュースがありました。

新ソフトキーボードのMinuumがIndiegogoで資金集め―モバイルからウェアラブル・デバイスまで省スペースで高速入力を狙う



どうも来年には姿を現してくるようです。
随時、情報を追ってゆきたいと思います!

Google Glass が Amazon で販売中! (これ、ダメなやつや・・・)


なにげなく Amazon を検索したところ、なんと日本の Amazon で Google Glass が販売されています!

Google Glass グーグル グラス 日本未発売 開発者向け



なんだこれは・・・。
この売り方は、Google が禁止しているダメなやつでは!?

2013年12月20日金曜日

スマートグラス(メガネ型の機器)の製品比較 <Glass, Moverio>

★最新情報はこちら



メガネ型の機器を総称して スマートグラス と呼びますが、これらの機器の特性を利用者視点から整理したいと思います。

今回の登場機器は
  1. Google Glass
  2. エプソン Moverio(新型)
です。


図1 Google Glass
※Moverio(新型) は、まだ公開されていません

表1 機器比較

メーカー Google エプソン
名称 Glass Moverio (新型)
機器を一言で 日常生活を送る上で、手ぶらのまま、適切なタイミングで適切な情報を手に入れることができる、まったく新しい感覚を提供する革命的デバイス。 スマホの「画面表示」と「それ以外」を分離させたような製品。
※根っこにあるのはスマートフォンの考え方。
画面の形状 右目の上に透明なディスプレイが配置される メガネやサングラスと同形状で、メガネのレンズにあたる部分が透明のディスプレイ部となる
画面の見え方 ・視界の右上に小さめに表示されるため、目線を右上に向けることで注視する
・視線を前方に向けている場合は、視野には入るものの、ぼんやりとしか見えない
・没入感はまったくない
・電源オフのとき、視界を遮らない(透明 かつ 右上にあるため)
・視界全体に表示されるため、目線を前方することで見える
・没入感がある
・電源オフのとき、視界を遮らない(透明のため)
リリース時期

米国先行
2014年春?

※日本は未定


2014年春

※Glass の日本投入よりも早いと思われる
メガネとの併用

可能


可能
主な用途 屋内

料理のレシピ参照 など


※提供されるアプリ次第


動画視聴
ゲームプレイ など


※提供されるアプリ次第
屋外

Google の各種サービス (カレンダー 等) との連携
ナビ機能 など

※提供されるアプリ次第
×

※Glass ほどの機動性はない
アプリの配布

Google が全世界向けのマーケットを開設予定
※大規模


エプソンが独自マーケットを開設予定
※小規模
操作方法 タッチジェスチャー

耳の上に細いタッチパッドがついている
Glass の画面サイズにちょうどよいタッチジェスチャーがいくつかあり、これらにより操作する
文字入力用途には向かない


リモコンにタッチパッドがついている
タッチパッドを (スマホを指で触るように) 操作する

※Android と同じ
キー

耳の上に写真撮影ボタンがついている
押すことで写真、長押しで動画が撮れる


リモコンに Android の3種のハードキーがついている

※Android と同じ
音声認識

音声認識により操作可能

※現時点では、綺麗な英語でなければ認識されない
※音声での操作は、日本人には向かないと考えられる
×

※音声認識による操作はできない
ウィンク

ウィンクすることで、写真撮影が可能
×

※ウィンクによる操作はできない


いかがでしょうか。
スマートグラスといっても、コンセプトがまったく異なる製品であることが分かります。
用途に応じたチョイスが必要になるわけですが、実際に購入する場合は、販売数(普及率)も考慮したいところですね。

なお、普及には価格帯も重要となりますが、価格帯については上記に記載しておりません。
Moverioは3〜5万円と言われておりますが、Glass はいまのところはっきりしていません (現在出回っている Glass は Explorer Edition と呼ばれており、有形無形のサービスとあわせて 1500ドル となっております; 正式販売の際は、もっと安くなるでしょう)。

※現時点で公になっている情報をもとに執筆しました。おかしな点が見つかったら修正します。
※ご意見、ご質問、調査依頼なども募集しております。

著者



2013年12月18日水曜日

Google Glass、ウィンクで撮影が可能に!

今月の Glass アップデートにより、ウィンクでの写真撮影が可能になったようです。



従って、カメラで撮影する場合の操作は以下の3通りとなりました!

  1. 声を出す (ok glass, take picture!)
  2. 撮影ボタンを押す
  3. ウィンクする

くわしくはこちらからどうぞ!

Camera#setParameters() を伴うカメラプレビューを表示するとプレビューが乱れる

カメラプレビューを表示しようとした場合、プレビューがおかしく(斜めに変な感じ)なることがあります。

 現状では、Glass (XE10~) のバグです。
こちらのおまじないで回避できます。

    Camera.Parameters params = camera.getParameters();
    params.setPreviewFpsRange(30000, 30000);  // ★これ
    camera.setParameters(params);
 

ApiTakePictureActivity/cameraClient: Not using prepare camera.

12-18 01:42:02.835: W/SharedCameraLogging(577): ApiTakePictureActivity/cameraClient: Not using prepare camera.
12-18 01:42:02.843: W/CameraService(109): CameraService::connect X (pid 577) rejected (existing client).
12-18 01:42:02.859: W/dalvikvm(577): threadid=19: thread exiting with uncaught exception (group=0x40dbe1f8)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577): Uncaught exception!
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577): java.lang.RuntimeException: java.lang.RuntimeException: Fail to connect to camera service
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at com.google.glass.camera.CameraManager.handleError(CameraManager.java:1974)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at com.google.glass.camera.CameraManager.handleError(CameraManager.java:1988)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at com.google.glass.camera.CameraManager.acquireCameraSynchronously(CameraManager.java:892)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at com.google.glass.camera.CameraManager.access$2600(CameraManager.java:65)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at com.google.glass.camera.CameraManager$PictureRequest.onExecute(CameraManager.java:540)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at com.google.glass.camera.CameraManager$CameraManipulation$1.run(CameraManager.java:278)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at java.lang.Thread.run(Thread.java:856)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577): Caused by: java.lang.RuntimeException: Fail to connect to camera service
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at android.hardware.Camera.native_setup(Native Method)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at android.hardware.Camera.<init>(Camera.java:374)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at android.hardware.Camera.open(Camera.java:330)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     at com.google.glass.camera.CameraManager.acquireCameraSynchronously(CameraManager.java:889)
12-18 01:42:02.867: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(577):     ... 6 more
12-18 01:42:02.867: E/AndroidRuntime(577): FATAL EXCEPTION: CameraManager/cameraManipulationExecutor-0
12-18 01:42:02.867: E/AndroidRuntime(577): java.lang.RuntimeException: java.lang.RuntimeException: Fail to connect to camera service
12-18 01:42:02.867: E/AndroidRuntime(577):     at com.google.glass.camera.CameraManager.handleError(CameraManager.java:1974)
12-18 01:42:02.867: E/AndroidRuntime(577):     at com.google.glass.camera.CameraManager.handleError(CameraManager.java:1988)
12-18 01:42:02.867: E/AndroidRuntime(577):     at com.google.glass.camera.CameraManager.acquireCameraSynchronously(CameraManager.java:892)
12-18 01:42:02.867: E/AndroidRuntime(577):     at com.google.glass.camera.CameraManager.access$2600(CameraManager.java:65)
12-18 01:42:02.867: E/AndroidRuntime(577):     at com.google.glass.camera.CameraManager$PictureRequest.onExecute(CameraManager.java:540)
12-18 01:42:02.867: E/AndroidRuntime(577):     at com.google.glass.camera.CameraManager$CameraManipulation$1.run(CameraManager.java:278)
12-18 01:42:02.867: E/AndroidRuntime(577):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-18 01:42:02.867: E/AndroidRuntime(577):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-18 01:42:02.867: E/AndroidRuntime(577):     at java.lang.Thread.run(Thread.java:856)
12-18 01:42:02.867: E/AndroidRuntime(577): Caused by: java.lang.RuntimeException: Fail to connect to camera service
12-18 01:42:02.867: E/AndroidRuntime(577):     at android.hardware.Camera.native_setup(Native Method)
12-18 01:42:02.867: E/AndroidRuntime(577):     at android.hardware.Camera.<init>(Camera.java:374)
12-18 01:42:02.867: E/AndroidRuntime(577):     at android.hardware.Camera.open(Camera.java:330)
12-18 01:42:02.867: E/AndroidRuntime(577):     at com.google.glass.camera.CameraManager.acquireCameraSynchronously(CameraManager.java:889)
12-18 01:42:02.867: E/AndroidRuntime(577):     ... 6 more
12-18 01:42:02.875: W/ActivityManager(220):   Force finishing activity com.google.glass.camera/.ApiTakePictureActivity


先ほどに引き続き、似たようなスタックトレース。
いまのところ、原因不明。

Google Glass が起動しない場合 (再起動/ハードリセット)

Google Glass が起動しない場合、ハードリセットという手段があります。

Hard reset

If you ever need to fully power Glass down and restart the device: Hold the power button for 15 seconds. Then, press the power button for a few seconds to turn the device back on.

  1. 15秒間、電源ボタンを押す
  2. その後、一度ボタンを離してから、電源ボタンを数秒押す

困った時にはお試しください。

java.lang.RuntimeException: Fail to connect to camera service

12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765): Uncaught exception!
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765): java.lang.RuntimeException: java.lang.RuntimeException: Fail to connect to camera service
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at com.google.glass.camera.CameraManager.handleError(CameraManager.java:1974)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at com.google.glass.camera.CameraManager.handleError(CameraManager.java:1988)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at com.google.glass.camera.CameraManager.acquireCameraSynchronously(CameraManager.java:892)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at com.google.glass.camera.CameraManager.access$2600(CameraManager.java:65)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at com.google.glass.camera.CameraManager$PictureRequest.onExecute(CameraManager.java:540)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at com.google.glass.camera.CameraManager$CameraManipulation$1.run(CameraManager.java:278)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at java.lang.Thread.run(Thread.java:856)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765): Caused by: java.lang.RuntimeException: Fail to connect to camera service
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at android.hardware.Camera.native_setup(Native Method)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at android.hardware.Camera.<init>(Camera.java:374)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at android.hardware.Camera.open(Camera.java:330)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     at com.google.glass.camera.CameraManager.acquireCameraSynchronously(CameraManager.java:889)
12-18 01:04:20.570: E/PriorityThreadFactory/CameraManager/cameraManipulationExecutor(1765):     ... 6 more
12-18 01:04:20.578: E/AndroidRuntime(1765): FATAL EXCEPTION: CameraManager/cameraManipulationExecutor-0
12-18 01:04:20.578: E/AndroidRuntime(1765): java.lang.RuntimeException: java.lang.RuntimeException: Fail to connect to camera service
12-18 01:04:20.578: E/AndroidRuntime(1765):     at com.google.glass.camera.CameraManager.handleError(CameraManager.java:1974)
12-18 01:04:20.578: E/AndroidRuntime(1765):     at com.google.glass.camera.CameraManager.handleError(CameraManager.java:1988)
12-18 01:04:20.578: E/AndroidRuntime(1765):     at com.google.glass.camera.CameraManager.acquireCameraSynchronously(CameraManager.java:892)
12-18 01:04:20.578: E/AndroidRuntime(1765):     at com.google.glass.camera.CameraManager.access$2600(CameraManager.java:65)
12-18 01:04:20.578: E/AndroidRuntime(1765):     at com.google.glass.camera.CameraManager$PictureRequest.onExecute(CameraManager.java:540)
12-18 01:04:20.578: E/AndroidRuntime(1765):     at com.google.glass.camera.CameraManager$CameraManipulation$1.run(CameraManager.java:278)
12-18 01:04:20.578: E/AndroidRuntime(1765):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-18 01:04:20.578: E/AndroidRuntime(1765):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
12-18 01:04:20.578: E/AndroidRuntime(1765):     at java.lang.Thread.run(Thread.java:856)
12-18 01:04:20.578: E/AndroidRuntime(1765): Caused by: java.lang.RuntimeException: Fail to connect to camera service
12-18 01:04:20.578: E/AndroidRuntime(1765):     at android.hardware.Camera.native_setup(Native Method)
12-18 01:04:20.578: E/AndroidRuntime(1765):     at android.hardware.Camera.<init>(Camera.java:374)
12-18 01:04:20.578: E/AndroidRuntime(1765):     at android.hardware.Camera.open(Camera.java:330)
12-18 01:04:20.578: E/AndroidRuntime(1765):     at com.google.glass.camera.CameraManager.acquireCameraSynchronously(CameraManager.java:889)
12-18 01:04:20.578: E/AndroidRuntime(1765):     ... 6 more
12-18 01:04:20.578: W/ActivityManager(221):   Force finishing activity com.google.glass.camera/.ApiTakePictureActivity
原因不明だが、カメラをクローズせずにアプリを起動したからかもしれない。
再起動して、正しいコードのアプリを動かせば問題ないと思われる。

2013年12月17日火曜日

Glass向け!? 透明なマイクロUSBケーブル

Google Glass はかっこ良いデザインであるものの、バッテリーが持たないという話があります。


実際、ナビ機能を有効にして歩くと、数時間も持たないこともあるとか。
着用中であっても充電する必要性が出てくるかもしれません。

Glass はスマホとほぼ同じ構成部品でできていますから、充電は当然 マイクロUSBケーブル です。
市販のケーブルで充電できるのですが、せっかくクールなデバイスを装着しているのに、だらーんとケーブルが垂れ下がっているというのも不格好なもの。

そこで!
透明のケーブルの出番です!

ちょうど、週刊アスキーさまが雑誌付録として透明なUSBケーブルを世に出しました。


これは昨日の『Google Glass × 藤井太洋』にて、アスキー遠藤さまが直々に紹介していたもの。非常にタイムリーです。
遠藤さま自身、「売り切れ必至!」と仰っているだけあり、これは非常に買いなのでは!


・・・とまぁ、ここまで書いてきたのになんなのですが、実は透明なのではなく、通電した瞬間に光るケーブルなのですね。
なので、目立たないどころか非常に目立ってしまいます
 →こちらで実物写真が!


というわけなので、本エントリのタイトルには「!?」が付いているわけですが、非常に売れるかもしれないアイデアですね。

透明で Glass の充電に必要十分な長さのマイクロUSBケーブル

ぜひ、Glass 一般販売の暁には、どこかの会社さまから発売していただきたいところです。
(サンプルをいただければ、私も PR しますよ!)

# という話を、遠藤さまにもお伝えしましたので、もしかしたら週アスの付録になるかも!?

【2014/03/25-26 開催】Wearable TECH EXPO IN TOKYO 2014

Wearable TECH EXPO IN TOKYO 2014 が開催されます!
朝日新聞さま主催、2014/3/25-26 東京ミッドタウン にて。


ウェアラブル関連の出典が見込まれているようです。

私も登壇オファー (というかお世辞) をいただきましたので、もしかしたら登壇するかも!?
ご興味のある方は、スケジュールを空けておこう!

【2013/12/16 開催】Google Glass × 藤井太洋

# いろいろ写真を上げたいのですが、諸般の事情で、あまり出せません。m(_ _)m

本日、

Google Glass × 藤井太洋
〜 新GDKに見る実力とGene Mapper的「未来」〜

 →http://www.lab-kadokawa.com/5035

と題したセミナーがありましたのでさっそく参加してまいりました。

シーリス有山さまが ABC2013Autumn に引き続き、分かりやすい説明をしてくださり、また、Gene Mapper の作者さまがこれまでの&これからのウェアラブルデバイスのお話をしてくださいました。







Googleによる公式情報以上の情報はありませんでしたが、なによりも、Glass に興味のあるユーザが集まり、懇親会で意見交換等できたという意味で、画期的なイベントであったと思います。

ウェアラブルにご興味のある方は、是非、こういったセミナーにご参加ください!

ちなみに、
が藤井さまの作品です。冒頭を読ませていただいたところ、SF好きな技術者には非常に向いていそうな本でした。
私も、今読まねばならない本をすべて読み終えたら、読んでみようと思っております!

2013年12月15日日曜日

ライブカードを実装したのに雲(?) のライブカードが表示される

ライブカードを実装したのですが、なぜか上記のような謎のカードが表示されます。


非常に手間取ったのですが、RemoteViews を生成する時のパッケージ名が 空だったためでした。

Google Glassでできること 最新開発情報 Mirror API & GDK

こちら
http://www.slideshare.net/vvakame/google-glass-29135974
にて、開発者向けの素晴らしくわかりやすい Glass の概要説明があります。

・Glass の使い方
・Mirror API
・GDK
・サンプルソース (要 お問い合わせとの事)
 
講演資料だったらしく、非常にわかりやすいです。


開発者の方は、ぜひどうぞ!


スマートグラス ハッカソン開催 と Moverio/Glass の勢いの差

日本Androidの会にて、「スマートグラス」のアイデアだし&実装コンテストを実施するようです。
※スマートグラス= スマートフォンではなくスマートメガネですね。
■ スマートグラス ハッカソン 横浜支部 第1回
12月23日(月祝) 13-17時
さくらWORKS (関内)

申し込みはATNDで。

■ 概要
スマートグラスのハッカソンを複数回に渡り開催します。
第1回目は アイデアソン です。

テーマ
スマートグラスの新しい活用方法を考える。
スマートグラスならではの活用をした Android アプリを開発します。
※ スマートグラスには、セイコーエプソン製の Moverio を使用します。

優秀作品は、来年3月21日に開催される ABC にて展示および表彰を行います。

横浜支部の他にも、
埼玉支部、浜松支部、金沢支部、大分支部、中国支部、大分支部、熊本支部などで開催される予定です。

主催 日本Androidの会
協賛 セイコーエプソン

セイコーエプソン製の Moverio(新型) のよいところは・・・
  • 真の意味でウェアラブル: 現行型と比較にならないほどシェイプアップを果たしたところ 
  • 低価格: Google Glass のエクスプローラー版の 1/4~1/5 の価格
  • Google Glass と違い、常に両目の真正面に表示されるところ
です。素晴らしいです。
※3点目に関しては、Google Glass とどちらがよいとは一概に言えない所でしょう。

そしてわるいところはただ一点、
  • 注目度が弱い
です。ここが非常に厳しい。

先日のAndroid Bazaar and Conference 2013 Autumnにて

 エプソンのMoverio講演(メーカーとしての製品紹介)
  ↓
 シーリス有山氏のGlass講演(いちユーザとしての製品紹介)

という連続したセッションがありましたが、このセッションへの参加者の数が物語っています。
ただの(というと有山氏に失礼なのですが)ユーザの製品紹介が超満員だったのに対し、メーカー担当者の製品紹介は会場の1/5も人がいたかどうか・・・

ABC2013A は Android開発者 が参加しているはずなのに、それでもたったそれだけの注目度なのです。
従って、広く市場を見渡した時の注目度は・・・少なくとも、現時点では推して知るべきというところです。

製品の特性上、Moverio と Glass は棲み分けができるはずです。
ただし、「スマートグラス」などとひとくくりにされてしまえば、より知名度のある方にシェアが奪われるのは自明の話。
日本市場への投入は Moverio の方が先となると予測されることから、スタートダッシュがどうなるか、見守りたいところです。


# ところで・・・
# 別ルートにて、新型 Moverio の試作品をお貸しいただく予定だったのですが・・・あの話、どうなったのだろう・・・。
# Glass 開発に注力してしまいますよ~   (などと言ってみる

java.lang.IllegalStateException: State CREATED expected, currently in PUBLISHED

12-15 13:42:36.562: E/AndroidRuntime(1905): FATAL EXCEPTION: main
12-15 13:42:36.562: E/AndroidRuntime(1905): java.lang.IllegalStateException: State CREATED expected, currently in PUBLISHED
12-15 13:42:36.562: E/AndroidRuntime(1905):     at com.google.android.glass.timeline.LiveCard.applyStateTransition(LiveCard.java:334)
12-15 13:42:36.562: E/AndroidRuntime(1905):     at com.google.android.glass.timeline.LiveCard.publish(LiveCard.java:193)
12-15 13:42:36.562: E/AndroidRuntime(1905):     at jp.nextsphere.positivesuppli.OrientationManager$1.onSensorChanged(OrientationManager.java:161)
12-15 13:42:36.562: E/AndroidRuntime(1905):     at android.hardware.SensorManager$ListenerDelegate$1.handleMessage(SensorManager.java:580)
12-15 13:42:36.562: E/AndroidRuntime(1905):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-15 13:42:36.562: E/AndroidRuntime(1905):     at android.os.Looper.loop(Looper.java:137)
12-15 13:42:36.562: E/AndroidRuntime(1905):     at android.app.ActivityThread.main(ActivityThread.java:4424)
12-15 13:42:36.562: E/AndroidRuntime(1905):     at java.lang.reflect.Method.invokeNative(Native Method)
12-15 13:42:36.562: E/AndroidRuntime(1905):     at java.lang.reflect.Method.invoke(Method.java:511)
12-15 13:42:36.562: E/AndroidRuntime(1905):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-15 13:42:36.562: E/AndroidRuntime(1905):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-15 13:42:36.562: E/AndroidRuntime(1905):     at dalvik.system.NativeStart.main(Native Method)

いちど LiveCard#publish() をコールした LiveCard インスタンスに対し、もう一度 publish() をコールしてはいけない模様。

リファレンスには確かに
Note that once a card using RemoteViews is published, changes made to the views by calling set* methods will not be visible in the timeline unless you explicitly call setViews on the live card again to force an update. 
と書いてある。
 LiveCard を更新する場合は、LiveCard にセットした RemoteViews の set系のメソッドを使えと。

流れとしては、
                    RemoteViews rv = new RemoteViews(packageName,
                            R.layout.testlayout);
                    rv.setTextViewText(R.id.textViewResultCombo, "p= " + mPitch);
                    mLiveCard.setViews(rv);
という感じに、
RemoteViews を new して
 ↓
RemoteViews#set* でビューを更新して
 ↓
LiveCard#setViews() で RemoteViews をセット
という感じみたい。


java.lang.IllegalStateException: A card can only be made silent or not when it is unpublished.

12-15 13:35:34.875: E/AndroidRuntime(1725): FATAL EXCEPTION: main
12-15 13:35:34.875: E/AndroidRuntime(1725): java.lang.IllegalStateException: A card can only be made silent or not when it is unpublished.
12-15 13:35:34.875: E/AndroidRuntime(1725):     at com.google.android.glass.timeline.LiveCard.setNonSilent(LiveCard.java:312)
12-15 13:35:34.875: E/AndroidRuntime(1725):     at jp.nextsphere.positivesuppli.OrientationManager$1.onSensorChanged(OrientationManager.java:160)
12-15 13:35:34.875: E/AndroidRuntime(1725):     at android.hardware.SensorManager$ListenerDelegate$1.handleMessage(SensorManager.java:580)
12-15 13:35:34.875: E/AndroidRuntime(1725):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-15 13:35:34.875: E/AndroidRuntime(1725):     at android.os.Looper.loop(Looper.java:137)
12-15 13:35:34.875: E/AndroidRuntime(1725):     at android.app.ActivityThread.main(ActivityThread.java:4424)
12-15 13:35:34.875: E/AndroidRuntime(1725):     at java.lang.reflect.Method.invokeNative(Native Method)
12-15 13:35:34.875: E/AndroidRuntime(1725):     at java.lang.reflect.Method.invoke(Method.java:511)
12-15 13:35:34.875: E/AndroidRuntime(1725):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-15 13:35:34.875: E/AndroidRuntime(1725):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-15 13:35:34.875: E/AndroidRuntime(1725):     at dalvik.system.NativeStart.main(Native Method)

一度 LiveCard#setNonSilent() をコールしたあと、もう一度コールしてはいけないということかな?
二度目以降の setNonSilent() をやめたら、この例外は発生しなくなりました。

※とりあえずのメモ書きであり、対策に関して全面的に信用はしないで下さいね。



今日から、このブログはあきたじゅん(↓)がお送りいたします。