2012/06/11

COMPUTEX 2012 Taipei 探訪

Android Application Award 2012 アイデア部門優秀賞の副賞として、COMPUTEX 2012 Taipei にご招待いただき、さらにはOpen Embedded Software Fundation様のAndroid Cafe ブースにて QDen についてプレゼンテーションの機会をいただきました。プレゼン資料はこちらです。


さて、COMPUTEX ですが、これがなかなか面白い。メインはIntel、Microsoft、ASUS、GigaByte等々有名どころの新製品なんでしょうけど、それらは報道されるので、正直後でまとまった記事を読んだ方が簡単です。私がとても面白いと思ったのは、端っこのちっちゃなブースで展開される様々なちょっと???な製品です。


例えば、これです。


USBカメラなんですが、なぜか電球の口金がついた電球擬の形をしています。口金から電力をとるのかと思いきや、ACアダプタが付属しています。口金は電球ソケットに設置するためだけについているようです。室内の上の方に設置するのにネジなしで設置できて便利ということでしょうか?あまりの衝撃にパンフレットも受け取るのを忘れてしまいまい、メーカーの名前が不明です。どなたかお教えください。
これを見た夜、台北の屋台で食事したのですが、もしかすると室内設置を想定しているのではなく、屋台にUSBカメラを設置するという用途を考えているのかもしれないと思い至りました。




展示で多かったのは、防水ものでした。各種のデバイスが防水のデモンストレーションをしていたり、スマートフォンを防水にしてくれるサービスや、スマートフォンに吹き付けて防水化するスプレーとか、噴水で水をかけられたタッチパネル、水没させられたタッチパネルなどが数多く見られました。





それらの中で最も衝撃的だったのがお湯に浸されたSSDドライブです。
IHヒーターで60℃に暖めたお湯につけても大丈夫というものです。MemoRight社はもともとアーミーに納品していたメーカーだそうです。普通の民生用の機種もありますが、技術をアピールするためにアーミー用のSSDを展示しているとのことです。


熱といえば、これまたアーミー用で公称80℃でも動作するメモリーを展示していたのはInnoDiskというメーカーです。残念ながら撮影NGのため画像はありませんが、私が見たときは、100℃超えたくらいの温度で正常動作していました。基板の導線部分は銀を使っているそうです。価格はどれくらいか聞いたところ、「かずによりますね」ということだったので、「普通のやつの2、30倍くらい?」と訊ねると口ごもっていたので、もっとお高いのでしょう。


NTT DoCoMoが透過型のディスプレイのデモをして話題になっていましたが、もっとサイズの大きい透過型のディスプレイの展示もありました。




その中で、最もすごかったのがTROPOXの大型タッチセンサーつきディスプレイを使ったゲームが遊べる自動販売機です。


色味はまだまだ感が否めませんが、これだけのサイズで実際に動いているのにはびっくりです。OSはWindows Embeddedを使っているらしく、Microsoftのブースでも同じものが展示されていました。


iPhone,iPad,Android用のいろいろなケースやアクセサリ類はざくざく展示されていました。その中で面白かったのが、これです。






製品自体は、何の変哲もないICS Droid君な訳ですが、写真を撮ろうとしていると、展示主のインド人のおばさんが近寄ってきて、”Do you know this character ?"なんて聞いてきます。もちろん知ってると答えると、「わたしゃこれがなんだかわからないんだよ。いったいなんなんだい、これは?」と言い出します。ああ、そうか、キャラクタが何かなんて関係ないんだ。売れそうだったら作ってしまうんだ。すごいスタンスだな、と感心した次第です。


全般的に、作れるものはさっさと作って、あたればハッピー的なノリが満載の展示会で、とても元気をいただきました。









2012/04/26

A3 2012 にてアイデア部門優秀賞をいただきました

かねてから構想していた QDen 広告提供型充電サービス が、A3 2012 にてアイデア部門優秀賞をいただきました。
「Android Application Award 2012」受賞作品を発表


表彰式での決勝プレゼンテーション時のプレゼン資料はこちらです。
決勝プレゼンテーションは、いささかきれいにまとめすぎたせいか、ビジネスモデルの提案のようになってしまっています。
しかし、QDen を考えるにあたっての問題の中心は、Android Open Accessory Development Kit (ADK) でした。ニーズから出発したのではなく、ADK をどう使うのが正しいのかを考え抜いた結果出てきたものがこのサービスです。
QDen 作成に至る経緯は、A3 表彰式に先立って行われた、ADK勉強会(東京)のLT大会”ADK BootCamp"で述べました。資料はここにあります。


Google I/O 2011 で ADK が登場して以来、どういう使い道があるか、様々なことを考え、いろいろなものを作ってきました。
その一つが Google Developer Day 2011 Tokyo の ADK OpenCall に出展した DreamWaver だった訳ですが、一つ重大な欠点がありました。元々極私的なニーズを満たすために発案したものであったために、私の努力の足りなさもあって、あまり広がらないという点です。ニッチにも満たない領域は、アート系にふってしまってオーラ満載にするか、特定用途の実験装置として細々続けていくか、2つくらいしか道が思いつきませんでした(もちろん、こちらの活動も継続しています)。


世の中にある ADK を使った作品や装置をいろいろリサーチしてみると、
*Android に接続するマイコン技術の理解を中心とするもの
*いろいろな既存デバイスを Android に接続するもの
が、ほとんどで、技術的な興味、電子工作、ネタが中心となってしまっている嫌いがあります(DreamWaver も意図的にそういう面を強調してもいます)。
Arduino と Android の接続が簡単なため、ネタを思いつくと、あっという間に作れてしまうので、ネタ消費ためのプラットフォームになってしまう危険があります。
それはそれで大いに楽しいのですが、Googleさんが意図していたのは、そういう世界じゃないよな、と思うようになりました。

GDD 2011の展示以降月にほぼ2回、ADK勉強会(東京)やADK ハッカソンなどいろいろな集まりに参加し、いろいろな方と交流して、ADK に関するいろいろな問題を考えてきました。

それらの集まりであげられた問いへのささやかな解答が QDen です。


改めて、皆様に感謝申し上げます。

ADKが世にでてもうすぐ1年が経ちます。ADKの今後の発展を楽しみにしています。

2012/04/16

Arduino の sketch はどうビルドされるか

Arduino IDE は、avr-gcc をつかって、Sketch からファームをビルドしてくれますが、どのような過程でビルドするのか理解しておくと、Sketch を書いたり、ライブラリを作成したりする際の参考になるかもしれません。
参考文献にもあげたArduino Build Processの記述は、若干古いようで、1.0以前の内容が書かれています。以下の説明は、1.0のAruduino IDE のソースコードをもとに再構成して行っています。1.0以前とは若干処理が異なっていますが、大筋で同じことをしていると思われます。


まず、Sketch の構成要素ですが、多くの場合1つの  ino ファイルを使うだけで十分ですが、Arduino IDE は、複数のファイルに分割して Sketch を構成することもサポートしています。"mysketch" という名前の Sketch を作った場合、 "mysketch" という名前のディレクトリの中に


  1. mysketch.pde あるいは.ino
  2. 拡張子なしのファイル (あるいは、pde, ino, h, c, cpp 以外の拡張子のファイル)
  3. 拡張子.hのヘッダファイル
  4. 拡張子.c/.cppのソースファイル


を置くことができます。b〜dのファイルのことをArduino IDE では、”Tab" と読んでいます(Tabの作り方などの操作は連載(9)Arduinoで何でも制御 サンプル・スケッチを動かす(3)などをみてください)。
"mysketch"という Sketch の名前にあたる部分を、"main class name"などと呼んだりします。


cのヘッダファイルはa,b,cから
#include "hoge.h"
のようにダブルクォートでインクルードして使用できます。
bの拡張子なしのファイルは、ビルド時にaの Sketch にマージされます。この機能を利用して、大きなプログラムのソースを複数の Sketch として分割することができます。
Sketch 風の構文ではなく、C/C++ で直に書きたい場合も、そのまま、C/C++ のソースを Tab に含めることができます。この機能のおかげで、テスト段階のライブラリを Sketch ディレクトリにおいてテストしながら作ったり、IDE本体にライブラリを追加することなく、Sketch に固有のライブラリを導入したりすることが可能になっています。


以上のファイルをもとにビルドされる訳ですが、ビルドの処理の概要を順を追って説明します。


1) main sketch file の生成
まず、 main sketch file に Sketch のソースを集約します。
main Sketch file は、1.0以前は、拡張子.S のファイルとして 、main 関数を含むターゲットごとの main.cxx ファイルを追加する形態をとっていましたが、1.0以降は、別ファイルとしてmain.cpp(hardware/arduino/cores/arduino/内)を使い、リンク時に統合される形態にかわっているようです。
main sketch file は、以下のように生成されます。
  1. aとbのファイルをマージして一つにまとめる
    (Sketch::preprocess())
  2. #include <[ファイル名]>を探して、インクルード/リンクするライブラリを収集する
    (PdePreprocessor::writePrefix())
  3. 関数定義を収集し,プロトタイプ宣言を作る
    (PdePreprocessor::writePrefix())
  4. #include "Arduino.h" を挿入する
    (PdePreprocessor::writeProgram())
  5. 3を挿入する
    (PdePreprocessor::writeProgram())
  6. main sketch name に拡張子.cpp をつけて保存します。
    (PdePreprocessor::write())


注目すべきは、2 の段階です。インクルードファイルに指定したヘッダファイルに対応するソースファイルが、リンクの行程でライブラリとしてリンクされることになります。
また、sketch 内では、3の段階で関数プロトタイプ宣言が自動で生成されるので、C言語などと違って、宣言を書かなくても良いようになっています。




2) コンパイル
コンパイルは、
  1. Sketch フォルダ
  2. ライブラリフォルダ
  3. コアフォルダ
単位で行われます。
通常作業ディレクトリはシステムのテンポラリフォルダに作られますが、preferences.txtに
build.path=build
を追加しておくと、作業ディレクトリがArduino IDE と同じディレクトリ内のbuildになります。生成されるファイルを確認するのに便利です。


3) リンク
コンパイルされたオブジェクトファイルとアーカイブファイル、および Cライブラリ libc.a, 数学ライブラリ libm.c がリンクされ、最終的に hexファイルにまとめられます。これがArduino に書き込まれるファームとなります。


以上を図にまとめておきます:




  
(参考文献)
#includeWriting a Library for Arduino