preload
4月 07

日本Androidの会主催の定例イベントでお話を聞いてきましたので、簡単にレポートします。

DalvikVM on JavaVMの話をメインで聞きにいきましたが、後半の家電ビジネス周りのお話も初めて知ったことが多くて、勉強になりました。とても濃いお話で楽しめましたです。

Ust録画がここで見られそうな予感。幹事のかた、スピーカの皆様、ありがとうございました。

イーフロー 久納さんによる、DalvikVM を Pure Java (CLDC) で実装した話

  • 久納さんがこれまでにつくったものの紹介
    • QuickBASICの処理系
      • 6000行くらい
    • JavaScriptで動くGameboyエミュレータ
      • ほんとに動いてた。変態だw
      • Canvas処理周りが、Google Chromeが最速とか
      • Wiiブラウザでも動くようにつくってあるとか
      • 4000行くらい
    • Skype4Java
      • Skype APIのJavaラッパ .. Skype公認とか
  • DalvikVMをつくってみたことについて
    • Google公開の仕様ドキュメントがやけに少ないので、自分でつくってみて、よく理解してみようとおもったらしい。ふむふむ
    • すでにケータイJavaVMで動くJavaVMの実装を作ってあったらしく、それに手を加えて4日半くらいでつくったとか。おおー
    • オープンソースで公開することで、イーフローさんがDalvikVMに取り組んでることをアピールしたいとか。なるほどねえ。勉強させていただきます
  • つくったDalvikVMの動き
  • どうやって作っていったか、とか、作っていて気づいたこととか
    • dexdump使って、dexバイトコードをダンプしてみて、追ってみる
      • バッチファイル書いて効率化。$ adb shell “<adb shellで実行するコマンド>” とかでadb shellへコマンドを飛ばせるらしい
    • DalvikVMの命令コードは2Byte(16bit)単位の可変長(最大80bit)らしい
    • バイトコードのエンコードを短くするための工夫が見られる。長いメソッドディスクリプタに命令コードを割り当てなおしたり、配列のデータをとり回す処理が一命令コードになってたり。
    • メソッド内でのレジスタの使い方が変わってる?引数やメソッドローカルな変数などはレジスタに。返り値や例外は、特別な場所へ入れてる?(このへん、意味がよくわからず)
    • 命令コードの説明などなど。Constなんとかでレジスタへの変数格納とかとか。
  • ベンチマーク
    • Embedded Caffeine Mark
    • Google Dev Phone(Dalvik)とP905i(JBlend)で比較
    • StringでDalvikVMの方が1/10くらい遅い
      • なぜか?実行コードが単純に多いからっぽい。JITコンパイラ使って最適化すれば、高速化の余地はありそう
  • VM on VMについて
    • 開発済み資産の再利用とかとか
    • Java MEの世界でいえば、動的なクラスロードができないという制約を超える一手としても

Celevo 岩佐さんによる、家電向けDalvikVMとCE向けAndroid Marketに関する話

  • CE は Windows CE(懐かしい)ではなくて、Consumer Electronics のほうでした
  • Celevo の話
    • 家電ベンチャー。デジカメ作ってるそうです
  • デジタル家電がハード勝負からソフト勝負になっていってる話
  • 家電メーカーにとって、ソフト差別化が(いろんな理由で)難しいし、舵切りできてないという話
  • ハードで勝負するにも、モジュール化が進んでて、海外の部品特化メーカ(IntelとかT1とかNVIDIAとか)が強い
  • 家電にユーザが作ったアプリが載る時代 .. 家電メーカーからすると「来ちゃったか」
    • PCつくるのは儲からない .. 家電もそうなっちゃうかも
  • 小規模でもハードウェアに参入できるようにもなってきたという話
  • デジタル家電のプレイヤーの話
    • 量販では、BUFFALOとかI/O DATAの売り場と(旧来からの)家電売り場で流通マージンがちがうのでごにょごにょ
    • 大手家電メーカは動きにくいね、という話
  • CE 向け Android Market の登場が、大きなターニングポイントになりそう
    • メーカは家電販売が主。そういうアプリの販売機能を持ちにくい。サーバホスティングもやりたくない、らしい
    • 出てくるには、メーカをまたいだUIの標準化や仕切り、メーカ承認フラグみたいな仕組み、DRMとかとかも必要に
  • 誰がやるんでしょうね、とかとか

日本Androidの会 木南さんによるLBSの話

  • LBSつくった話と、アイデアなど。
    • ショートペッパー、良いですね!
Tagged with:
3月 22

3/19, 20 に開催された Android Hackathon に参加してきました。参加者は 2 日間いずれかへの参加を選ぶ形式で、僕が参加してきたのは 3/19 のほう。主催は Android SDK Japan(User Group)、会場は Google さんの東京オフィスでした。というわけで、イベント概要やら、そこでつくったものの報告とか、メモとか、感じたこととかを書いておきます。

ところで、Hackathon というのは、Hack + Marathon の造語らしいですが、平たく言うと、お泊まり無し(そうでない場合もあるかもだけど)の開発合宿みたいなものです。で、今回は、Android Hackathon だったので、みんなで Android アプリ/サービスをつくろうぜ、的なイベントだったということになります。

今回の Hackathon では一週間ほど前に事前ミーティングが開かれており、そこで参加者のチーム分けや Ideathon なるアイデア出しの打ち合わせがおこなわれていました。チーム区分は以下の通り。

  • Lifestyle & Travel – 日常生活や旅行先で使える便利系アプリ/サービス
  • Multimedia – マルチメディアを駆使(?)するもの
  • News & Weather – ニュースとか天気とか。RSSフィード使ってごにょごにょとか。
  • Specific Device(Feature) – デバイス固有の機能を使ってごにょごにょ
  • Tutorial – テーマは決めず、チュートリアル的になんか作ってみる

僕は Specific Device のチームに参加させていただきました。で、Ideathon でいろいろ討議した結果、「端末によるモーションジェスチャを検知する仕組み(ライブラリ)の開発」&「その仕組みを使ってかめはめ波を撃つ」という壮大な目標にチャレンジすることとなったのでした。

さて、Hackathon 当日の成果ですが.. 結果から言うと、「かめはめ波」の捻出には至りませんでした。まだまだ修行が足りなかったようです。残念。

ただ、以下のような見栄えの、「単純なジェスチャの検知」アプリまでは行き着くことができました。

device

上の画像は、アプリ起動後、端末を上方向に持ち上げたときの画面表示です。とりあえず、端末を平面方向タテヨコナナメに直線に動かした際の8方向について、なんとなくジェスチャが検知できています。ほんとは、ここからこういったシンプルなジェスチャを組み合わせたジェスチャコマンドを認識させ、かめはめ波を撃って、あと、昇竜拳くらいまで行きたかったのですが、残念ながら力及ばず.. でした。

当日開発されたソースコード一式は、以下の hackathon-jp リポジトリから取得できますので、ご興味のある方、どうぞご覧ください(コミット権限はHackathon参加者に限っているようですので、read-onlyにてご了承ください)。

http://code.google.com/p/hackathon-jp/


さて、以下、今回の Hackathon 参加で自分なりにやってみたことや感じたことをメモしておきます。

今回は、事前準備として OpenIntents の Sensor Simulator を動かしてみたり、OpenIntents の trunk にいつのまにか入っていた SensorGestureDetector の実装を読んでみたり、なんとなくヒントがあるんじゃないかと Firefox の All-in-one Gestures の実装を読んでみたりしてました。

また、「ジェスチャを複合して『かめはめ波』のような複雑なジェスチャを組み立てるより、任意のジェスチャパターンを学習させられるようなトレーニングアプリを作って、ジェスチャパターンを数値化していくのが良いんじゃないか」とも考え、ジェスチャ時の各種センサの値をcsv出力するデモアプリを作ってみたりもしました。そんな折に、チームの方から、「HMM(隠れマルコフモデル)による学習/識別が主流らしい」との情報もあり、ググってみて、なんだか難しい論文に行き着いたりしていました。

ただ、Hackathon 当日は、なんだかんだで時間制限に押され、

  • ジェスチャで取得できたcsv値も隠れマルコフモデルとかもよくわからん.. 深みにハマりそう
    • やっぱしとりあえずはシンプルなジェスチャを認識させるところを作ろう
  • どうも加速度センサの値がオカシイ
    • 重力加速度の影響を受けてしまっているみたいだ
      • 重力加速度をキャンセルできるように、逆向きの加速度を渡してみよう
        • 端末のどちら側が地表側を向いているのかを適切に数値化するのが難しい..
          • とりあえず、端末の向きは固定で使うってことにしよう
  • Z軸方向のジェスチャの認識を加えると、認識精度が落ちるみたいだ
    • とりあえず、今日のところは X-Y 2方向の平面ジェスチャのみでいこう
  • 平面でもイマイチ精度が悪い
    • 一定時間(回数)以上、同方向の加速度が取れることをジェスチャ認識の条件にしよう
    • センサデータ取得時の速度を変更させるオプションがあるらしい => 最高速度(SENSOR_DELAY_FASTEST)に!

と、まあ、こんな感じに試行錯誤の繰り返しに多くの時間を使ってしまっていたような気がします。最後のプレゼンが終わった後になって、他の参加者の方に「重力加速度のキャンセルにはローパスフィルタ使うといいよ!」って教えてもらったり、既に試行錯誤されていた方のエントリを発見したり、という感じで、なんだかんだで準備不足、力不足を痛感したわけでした..

とはいえ、こういった開発は久しぶりに新鮮でした。「時間制限(のプレッシャー)」と「チームでの開発」があったおかげでしょうか。意見交換したり、コード見せ合ったりしながらも、ひとりで深みにハマる前に、上のような「問題の単純化(「あきらめ」ともいう)」や、「仕様の割り切り」「当座の目標決定」を短いサイクルで繰り返し、一日での成果を出すことに集中する、ということができたような気がします。で、しかも、それが、とても楽しかったわけです。良いですね、こういうの。僕、いわゆる「開発合宿」には参加したことが無いんですが、その楽しさの一端が垣間見えたような気がしました。


そんなこんなで、当日の他のチームのプレゼンや飲み会の部まで含めると、とても書き切れないほどの多くが得られた、楽しいイベントでした。同じチームの皆様はじめ、ご参加の皆様、主催や協力の皆様、お疲れさまでした。ありがとうございました。

Tagged with:
2月 24

ブログ Persistence is Power を、こちらのサイトに移管しました。

長らく Livedoor Blog にてお世話になってきましたが、さくらのレンタルサーバで使用できるディスク領域がいつの間にか増えていて、だいぶ余裕ができたので、こちらに持ってくることにしたのでした。

以前のエントリは、すべてこちらに移管しました。DNS もこちらのサーバに向けましたので、1 ヶ月ほどしたら Livedoor Blog の方は削除してしまおうと思っています。

ブックマークや検索エンジンなどで、旧サイトへたどり着いた方には、ちょっとご不便をおかけしてしまいますが、サイト内検索などをご利用いただければ幸いです。あと、データ移行時に、記事内のソースコードのインデント情報が消失してしまったり、サイト内リンクがリンク切れになってしまったりしてます。ごめんなさい。たぶん、そのままです。

ではでは、こちらでもよろしくお願いいたします。

12月 27

先日 GitHub というのを初めて使ってみて、テキトーな小物をちょいちょい晒していくにも都合が良さそうだということがわかったので、今回、標記のプログラムも晒してみる事にしました。使用許諾条件は、基本的には the MIT License に基づきますが、「(迷惑メール送信に用いるなど)悪用・乱用を禁止する」という条件を付加したいと思います(っていうほど作り込んでないので、まあ、あんまし意味のない付加条件だと思いますが)。



MbSmtp – GitHub



MbSmtp は、Net::SMTP の拡張クラスで、日本の携帯向けにできるだけ効率よくメールを送る事を目的とした SMTP クライアントです。



MbSmtp は以下の機能を提供しています。

  • SMTP セッションあたりの送信通数が設定値以下になるよう、セッションを自動分割制御します
  • キャリアからの通信ブロックが発生した際、 設定時間待機した後、
    設定回数、失敗したメールのみ再送リトライします
  • メール送信処理中にエラーとなるアドレスが含まれていた場合、同一セッションで未送信のアドレスリストからエラーアドレスを除去します
  • セッション終了時、 送信リポートの構造体を返します
    • リクエストメッセージ数, 送信完了メッセージ数, エラーメールアドレスなど

各種設定値は lib/mb_smtp.rb 内で指定されていますが、必ずしも適正値ではありません。適宜設定を変更してご利用ください。



以下、簡単な使用例です。基本的には Net::SMTP と同じように使えますが、キャリアメールサーバは :docomo, :au, :softbank などといったシンボル指定で open できます。また、以下のようにセッション内である程度まとまった数を送信したとしても、1 セッションでの送信通数が設定値を超えないよう、勝手にセッション分割してくれます。その他、キャリアのメールサーバからの応答に応じて、エラーアドレスの振り分けや送信成功数のカウント、キャリアブロックに対する待機などをおこない、最後に MbSmtp::Result 形式でのレポートを生成する、といった動きをするようになっています。

@mail = TMail::Mail.new # MbMail::DMail とかでもOK
## @mail を適当に組み立てる
@result = MbSmtp.start(:docomo) do |smtp|
50.times do
smtp.send_mail @mail.encoded, @mail['from'].to_s, @mail['to'].to_s
end
end
puts @result # => MbSmtp::Result による送信結果レポート

この他の使い方や、動きの詳細については spec/mb_smtp/*.rb にある spec ファイルや lib/mb_smtp.rb 本体をご覧ください。



ちなみに MbSmtp は、元々は、個人的にメール配信時のキャリアのメールサーバの振る舞いを調べてみようとごにょごにょやっていたときの副産物です。実サービスでの利用実績はありませんし、これにより高速に携帯メール配信ができるという保証も検証結果も一切ありません。もちろん、これを使用した事で、キャリアブロックされまくってマトモにメールが送れなくなった、とかになっても、僕の方で責任はとれませんです。あくまでご参考まで、ということで。。

Tagged with:
12月 25

git とか GitHub とかいうのを使った事がなかったので、このたび初めて使ってみました。というわけで、標記の Rails プラグインを the MIT License にて公開します。


MbMail – GitHub


MbMail は、Rails で日本の携帯向けサービスをつくる際、 メール扱い周りで発生するちょっとした面倒を回避するための小物寄せ集めプラグインです。rails-2.0.2, tmail-1.1.0 環境下での動作を確認しています。また、rails プラグイン形式で配布していますが、MbMail::DMail は rails 環境に関係なく使えます。


MbMail は以下の機能を提供しています。

  • MbMail::DMail
    • キャリア間HTMLメール(デコメール, デコレーションメール, デコレメール)の相互変換
  • MbMail::MbMailer
    • ActionMailer の拡張
      • 標準で使用する charset (エンコーディング)を ISO-2022-JP に変更
      • 文字コード変換器に NKF を使用するように変更 (機種依存文字の送信を可能に)
      • 日本語ヘッダを作成するためのメソッド base64 を追加 (Mailer 内で日本語Subjectや日本語Fromを簡単に記述)
      • RFC違反のドットが連続するアドレスが扱えるよう、TMail::Parser を置き換え

たとえば、以下のように au デコレーションメール形式のファイルがある場合、これを load し to_docomo_format とすれば、docomo のデコメールフォーマットが得られます。

au = MbMail::DMail.load("au_decoration_mail.eml")
docomo = au.to_docomo_format
puts docomo.encoded # => docomo デコメールフォーマット文字列

その他、使用方法サンプルは、git リポジトリの中の spec ファイルたちをご参考ください。


パッケージに含まれるクラスのうち、MbMail::MbMailer は以前、こちらのエントリでも取り上げた「ドット連続アドレス問題」などに対応するものです。ただし、MbMailer を使用する事により TMail::Parser を書き換えてしまいますので、ご注意ください(MbMailer を使用するに当たって、ActionMailer の使い勝手を残しつつ TMail の一部だけ書き換える、ウマい方法が思いつかず。。誰か助けて)。


MbMail::DMail も MbMail::MbMailer も個人的な利用実績がありますので、基本的な部分はそこそこ使えると思います。が、プラグイン形式に切り出したのはこれが初めてですので、何かと不都合があるかもしれません。(絵文字の変換辺りで微妙にオカシイところがあるかも。)あと、git の使い方がよく分かってないうちは、何かと不慣れなことをしでかすかもしれません。諸々ご理解の上、ご利用いただければ幸いです。


なお、再掲を含みますが、上記のプラグイン提供に当たりお世話になった方々をご紹介しておきます。勉強させていただきました。ありがとうございました。

  • 携帯メールを扱うに当たっての base64 メソッドの実装や NKF 利用のアイデアとして、以下のサイト様を参考にさせていただきました
  • DMail の絵文字相互変換に Jpmobile の絵文字変換テーブルを使用させていただいています
  • ActionMailer の拡張時に TMail の幾つかのクラスを書き換え利用させていただいています
  • サンプルで使用している GIF 画像に 素材屋イチゴアポロ の素材を利用させていただいています

ついでに、以前こちらで紹介した「ケータイサイトで機種情報を取得する Rails プラグイン mbterm_db」も GitHub に引っ越しました。ついでに更新しようと思ったけど、更新の仕方を忘れたので、そのうちメンテします。


MbtermDb – GitHub


それでは皆様、よいクリスマス&よいお年をお迎えくださいませ。

Tagged with: