2011年8月31日水曜日

[Android]Local Service

ああ、またブログかいてない・・・orz

気を取り直していきましょう!

今回はAndroidねた。しかもサービス。
これ、よくわかんないんだよね。なので、自分まとめ。

そもそも、ServiceはLocalとRemoteとあって、Remoteはいろいろ面倒らしい。
Serviceがよくわかってないので、簡単なほうから着手。

Serviceの特徴?
  • 状態は3つ
    • onCreate
    • onStartCommand
    • onDestroy
  • 生きている期間は、動き始めるときの号令の掛け方によって違ってくる
  • 号令の掛け方は2つ
    • startService
    • bindService
  • startServiceで始まった場合は、
    • 起動後はActivity側からの口出しはお断り
    • 号令をかけたActivityがいなくなったて平気
  • bindServiceで始まった場合は、
    • bindでつながってる
    • つながってるから、Activityから口出しできる
    • つながってる間だけ生きられる。
    • つなりが切れちゃうと死んでしまうなぁ
  • Service -> Activity の口出しはいつでもできるけど、Intent使ってね

サンプルないとだめかな?

2011年8月17日水曜日

64bit ubuntu adbが動かなかった

いつまでも古いPCでAndroidでもないので、新しいPCにAndroid環境構築。
新しいPCは64bit。
ま、あまり影響ないよね、と油断してたら、adbまわりでエラーがでた。

ADTインストール中にも、adb kill failureとか見たような気が・・・
すんだ事を気に病んでもしかたがない、ポジティブシンキングで行こう!

症状は、エミュレータ作成しようとするとエラーになって作れない。


tools/mksdcard: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
Failed to create the SD card.
Failed to create sdcard in the AVD folder.

libstdc++.so.6?

ldd adb 実施。なにが足りないのか、分かるかな。

linux-gate.so.1 =>  (0xf779a000)
librt.so.1 => /lib32/librt.so.1 (0xf7781000)
libncurses.so.5 => not found
libpthread.so.0 => /lib32/libpthread.so.0 (0xf7767000)
libstdc++.so.6 => not found
libm.so.6 => /lib32/libm.so.6 (0xf7741000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf7725000)
libc.so.6 => /lib32/libc.so.6 (0xf75ca000)
/lib/ld-linux.so.2 (0xf779b000)

libncurses.so.5
libstdc++.so.6

両方分かりませんが。
ググったら、g++-multilibが必要らしい

インストールした。

Ubuntu ソフトウェアセンターで、「g++」で検索したら、いくつか出てきた。
ぐぐる先生の言う通りに g++-multilibと書いてあったものをインストールした。

ldd adb よもう一度。

linux-gate.so.1 =>  (0xf7728000)
librt.so.1 => /lib32/librt.so.1 (0xf770f000)
libncurses.so.5 => not found
libpthread.so.0 => /lib32/libpthread.so.0 (0xf76f5000)
libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf760a000)
libm.so.6 => /lib32/libm.so.6 (0xf75e4000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf75c8000)
libc.so.6 => /lib32/libc.so.6 (0xf746d000)
/lib/ld-linux.so.2 (0xf7729000)

libncurses.so.5が相変わらずない。

普通にncursesをインストールしてもダメ。
上のldd結果をよーく見ると、/lib32というのが見えますね。
32bit版が必要なのです。

そこで、32bit版のncurses5を探します。

Ubuntuソフトウェアセンターにはありません。
探し方が悪いかもしれませんが、ないのでコマンドで。

apt-cache search ncurses

おぉ!たくさんある。

apt-cache search ncurses | grep lib32

これでOK
見つかったncursesの32bit版をインストール

sudo apt-get install lib32ncurses5

linux-gate.so.1 =>  (0xf774f000)
librt.so.1 => /lib32/librt.so.1 (0xf7736000)
libncurses.so.5 => /lib32/libncurses.so.5 (0xf76fd000)
libpthread.so.0 => /lib32/libpthread.so.0 (0xf76e3000)
libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf75f8000)
libm.so.6 => /lib32/libm.so.6 (0xf75d2000)
libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf75b6000)
libc.so.6 => /lib32/libc.so.6 (0xf745b000)
/lib/ld-linux.so.2 (0xf7750000)

お、全部埋まった。

エミュレータ作成・・・成功!
動くかな
エミュレータ実行・・・まさかの失敗。

SDL init failure, reason is: No available video device

なんと!
しらべていったら、32bit版のライブラリがいろいろ足りないらしい。
そんなときは、ia32なんていう便利なものがあるので、いれるといいよ。

sudo apt-get install ia32-libs

よし、エミュレータ実行

動いた!
64bitっていろいろこまかく発生するねぇ

動いてよかった。


2011年8月11日木曜日

LogCatにログが表示されていなければDevices

あるとき、ログがLogCatに表示されていないことに気づいた。

サンプル作りばかりやっているので、基本的にToastを使っていたので気づかなかった。
めずらしくLogを使ったので、ログ表示したら、こんなことになっていた。

あら?

Google先生に聞いてみました。

解決方法は、Devicesでエミュレータを選択する、とのこと。
あー、選択するとは思ったけど、LogCatにそんなのないなぁと思っていたら、Devicesかぁ・・・

Devicesは、メニューバーの Window -> Show View でダイアログを表示、それから、Androidカテゴリをクリックすると、出てきます。
なれないうちは、便利機能を見逃すよねぇ


2011年8月8日月曜日

AmaterasUML

チンさむアプリソースから、現状をクラス図とシーケンス図におとした。
前々から使用しているツールを使った。
とっても使いやすいし、コード読みながら書くと、けっこうちゃんと読むので重宝している。
文章とか絵とかからモデリングしていくのも好きなんだけど、コード読みながら書いていくのも好きなんですよ。

ところで、チンさむは個人のものではないので、UMLなんてやってない方もいらっしゃるかも知れない。
それに、正確に詳細にしようとすると、手作業は面倒だ。

せっかくeclipse使ってるわけだし、プラグインでも探すか!

で、やってきました。

とりあえず、みんな使ったこと無いので、フリーの先頭のものをチョイス。
スケッチ的に使えるみたいなのも好みなので。

さっそくインスコ・・・と行きたいとこですが、ちょっと手順あり。

1.GEFインストール

AmaterasUMLはGEFが必要とのこと。
GEFはGraphical Editing Frameworkのことらしい。
まずは、こいつをインスコ!

いつも通り、Installダイアログを召還

Help -> Install New Software...

Installダイアログをだしたら、すべてのサイトを選択して、GEFをみつけるべし!

[Work with:]--All Available Sites--
[Name]Graphical Editing Framework GEF SDK


2.AmaterasUMLインストール

ご本尊です。拝んでくださいw

これは、ここからダウンロード。
ページ前半にあるダウンロードのところから、AmaterasUML_1.3.2.zip(2011/8/7現在)をダウンロードする。
解凍すると3つファイルがあるので、eclipseのdropinsへコピー。
直下でも良いけど、気持ち悪いって人はフォルダを掘ってちょうだい。
たとえば、AmaterasUML_1.3.2/eclipse/plugins とか。
eclipse/pluginsは必須なので、お忘れなく

コレでいんすこ完了っす。


使い方を簡単にめも

File -> New -> Other といって、AmaterasUMLからダイアグラムを選択して、UML開始!
ここにAmaterasUMLがないというあなた!
いんすこ失敗です。
失敗の原因になりそうなのを列挙しましたが、nouzui2007は失敗しなかったので、想像です。
  • GEFいんすこしましたか?
  • dropinsフォルダにjarをコピーしましたか?
  • dropinsフォルダ下に、フォルダ掘った人は、eclipse/pluginを掘りました?
楽しいUML Lifeを

2011年8月4日木曜日

アジャイルサムライ読書会 in 湯島道場 2回目

アジャイルサムライの読書会に行ってきたので、思ったことを記録。

良いものを作るという思い、みたいなものを共有する、これが大事なんだと思う。
ポイントは共有


みんなそれぞれに思いはあるわけだけど、
議論してすりあわせていくと、同じ方向を向くようになってくるし、
そうなれば、結論に対して共感できたり、愛着がわいたりするのかもしれない。

良いものを作るというのは、きっとみんなやりたいことなんだと思う。
今はそう思っていない人だって、むかしはそう思っていたんじゃないかな。
ちょっとしたことで挫折することだってあるわけだから、何かで諦めたのかもしれない。
そんな良いものを作るなんて考えてない人だって、悪いものを作るとは考えていないだろうから、良いものを作る思いが共有されれば、事態が変化するのではないか、と期待したりする。

今はちょっとした規模のプロジェクトの一部に組み込まれているのだけども、このプロジェクトが何をしようとしているのかを知ろうともしない方々を見かける。
この方々とお話しすると、たいていイライラさせられるわけだが、考えてみれば、彼らだって別にプロジェクトの邪魔をしようとか、お客さんに悪いものを提供しようとかの悪事を考えているわけではない、と思う。
積極的な参加をしていないだけではないのか、と考えた。
そうであれば、思いが共有できたら、あのチームだって変わるんじゃないか、なんて熱く思った夜だった。

まぁ、こっちがあっちを悪く思っているので、あっちだってこっちを悪く思っているかもしれない。
その変はぶっちゃけて話し合えばいいんだと思う。
それこそ河原でなぐりあうみたいなノリで。

ところで、今回の読書会では、ドーナツが出た。
ごちそうさまでした。

ドーナツとコーヒーで「ご近所さん」にご挨拶、というくだりがあるが、知らない人より知った人によくするのはどこでも同じなんだな。
であれば、ちょっとしたことを惜しんで知らない人同士でいるよりは、知った人になっちゃったほうが良いよね
って、けっこう難しいんだよね。声をかけるタイミングとか。
はかっていると大抵逃してしまうのがタイミングってやつなので、先の先で攻めるのが良いのかもしれない。

あ、「先の先」は剣道で良く使われる言葉で、とにかく相手より先に動くこと。
相手が攻めきていても守っていてもお構いなし!
空気を読まないのも案外重要なスキルかもしれない。

いろいろと考えたし、話したし、聞いたしで、楽しい読書会でした。
みなさん、お疲れ様でした&ありがとうございました

#agilesamurai #湯島道場

2011年8月1日月曜日

エミュレータでセンサーテスト

このページを参考にしました。ありがたや、ありがたや
http://technopocket.sakura.ne.jp/tips/android_sensorsimulator.html

では、早速

センサーエミュレータをセットアップする

1.ダウンロード&インストール
このサイトにいって、sensorsimulatorをダウンロードしよう
http://code.google.com/p/openintents/downloads/list

2011/6/22時点での最新版はこれ
sensorsimulator-1.1.1.zip

インストールは簡単
適当なところに解凍するだけです。
例)C:\Dev\sensorsimulator-1.1.1

解凍先のディレクトリ(例だと、C:\Dev\sensorsimulator-1.1.1)を$SS_HOMEとしましょう。

解凍がすんだら、シミュレーターを動かしてみましょうか

> cd $SS_HOME\bin
> java -jar sensorsimulator-1.1.1.jar

Windowsだと、ダブルクリックで起動しますよ
あ、Javaはインストール済みの予定です。あと、Android開発環境もね。

動いたら、携帯(ちょっとしょぼい感じの箱の絵)をぐりぐりしてください。
いろいろ数値が変わった?


2.デバイスへのセットアップ

エミュレータを起動しましょう
デバイスは、テストに使うものでお願いしますね

> start emulator -avd hogehoge

hogehogeには、作成済みのデバイスを指定してください

起動したら、パッケージインストールっす
($SS_HOME\binにいるよね?)

> adb install SensorSimulatorSettings-1.1.1.apk

こんな感じになると、インストール成功です

> 290 KB/s (60397 bytes in 0.203s)
>         pkg: /data/local/tmp/SensorSimulatorSettings-1.1.1.apk
> Success

デバイスにSensorSimulatorがあるはず!!

SensorSimulatorを起動してください。

IPアドレスがありますね?
そこに、エミュレータに表示されてたIPアドレスを入力してください。
ポートも同じです。

入力した?
そしたらね、Testingをクリックしましょう。
Connectボタンをクリックすると、有効になっているセンサーが一覧されるので、試したいものをチェックしちゃってください。

そしたら、おもむろに、エミュレータの携帯をぐりぐりしましょう
デバイスの数値が変わった?
そしたら、セットアップ完了っす

でもこれ、作っているほうのソースをテスト用に変えないといかんのだよね~
なんとか解決方法ないもんかな

おつかれ~

第2回スマドラ会議

ブログの更新が・・・

気を取り直して行きましょう。

7/31(日)は、スマドラ会議の第2回目でした。

Bump Recorderについては、こっち
スマドラについては、こっち

日曜に出かけるのはなかなか大変ですが、今回の目玉はBump Recorderの構造説明なので、
これからソースいじろうってぇのに、行かないわけには行きません。
家庭内のキーマンに交渉して、なんとか行ってまいりましたw

やっぱりちゃりで行きましたよ。
そして、迷いました。
ええ、自信満々で逆に曲がりましたとも!!

それはともかく。

前半は、簡単な物理の時間です。
お題は「加速度から距離を取得する」です。
久しぶりの勉強です。
拒否る頭をなだめすかして、お話についていきました。

簡単にまとめると、

  • A⇒Bの距離が90kmあって、1時間で到着すると、スピードは90km/時間 = 1500m/分
  • A⇒B間のある地点aでは、400m/分で、2分後には700m/分になっていたとすると、加速度は300m/分・分←(分・分が気に入りましたw)
  • センサーは、加速度を教えてくれるので、逆算していけばいいと思うよ

逆算のためには、いろいろと準備とか前提とかが必要になってしまうわけですが、それはまぁ、それとして・・・

大変なのは、逆算中に誤差が出るので、キャンセルする仕組みがないといかん、と言うことらしいですわ。

あとは、傾きね。
このアプリ、端末をダッシュボードあたりに固定して車を走らせて使うのだけども、このとき路面に対して水平かどうかがポイントになってくるとのこと。
水辺でなければ、その分補正しないといかんわけですよ。

いろいろと刺激的でした。重力加速度なんて、久しぶりに聞いたよw


さてさて、後半はもくもく会となりました。
みんなでソースをいじってみました。さすがにコミットはできなかったけど。
やってみたら、みんな手をつけるところがばらばらになって、なんか楽しかったな。
コミットする手順とか、方法とか、なんかその辺をうまく決めてかないと、混乱しちゃったりするかも。
次回課題にでもどうかな?

いろんなことを知った一日でした。
あ、帰り道も勢い良く間違えましたwww