メイン | 2009年10月 »

2009年9月

2009/09/29

目線の違い

勉強会でのお話。

Web系?という分野でいいのかわからないけど、組み込み系ではない人々とお話をした。
分野が違うと、非常におもしろかった。
特に、目線が違う、というのがいい。
私はどっちかというと、下を向いている。ハード側。
でも、サービスやらシステムやらを考えているWeb側の人を見ていると、非常にまばゆい。
後光が差す?というか。

私が組み込みでやるのは、アプリからミドルウェアまでが多い。
ドライバをやるときは、だいたいはOSもアプリもいっしょになってる場合とか。自分の家でやるときとか。
やるときに意識するのは「タイミング」と「安全さ」だ。

タイミングは、デバイスの要求するタイミングだったり、操作してから応答するまでのタイミングだったり。
たとえば、ボタンをぽちっと押すとしよう。
押されたイベントが来てから、どのくらいまでの間にボタンが押されているグラフィックを表示して、押された音を鳴らすか。
CPUのパワーがあるならいいけど、あまりないときには計算しないといけない。
数値の計算ってのは(やらないといかんだろうが)やらなくて、この区間は画面処理に力を割けるようにしとかないとなー、とか。
でも、そういうの考えるのめんどくさいから、スレッドの数はなるべく少なめにして・・・とか。

安全さ、というのは、そのまま。
組み込み機器は、死んだらおしまいだ。
一番の最低ラインは、WDTでの再起動。
でも、やはり死んだらおしまいなので、なるべく死ににくく。
死んでも、使ってる人にわかりにくいように再起動。。。
メモリを何度もアロケーションしていると怖いから、staticにばーんととっておこう、とか。
スタックが増えないように関数呼び出しの深さを考えたりとか。

けっこう、そういうのが楽しかったりするのだが、伸び伸びプログラムを作るということにはほど遠いと思う。
なにせ、組み込みってだけで、制限があるってことになるし。
イメージするのはあれだ、庭園。
限られた空間の中で自然を表現するようなところ。
狭いんだけど、その中では石の置き方にまで気を配るよ、というようなところ。
そんなところが楽しいのかもしれん。

と、適当なことを書いてみたが、単にC/C++が好きなだけかも。
言語の占める割合がC/C++だけで90%以上ってのは、組み込み系以外はなかろう。
それに、私はオブジェクトになっていないものは安心できないのだ。
コンパイルしたいのだ。
バイナリーにしたいのだ。
スクリプト言語なんてふわふわしたものは食わんぞ!みたいな気持ちがあるのだろう。
俺はせんべいが好きだ、と。

でも、たまに食べるシュークリームみたいな柔らかいものもいいんだよなぁ。。。

2009/09/26

AIP cafeへの行き方

福岡に、AIP cafeがある。
勉強会があったので、初めて行った。

40分前に近くに着き、40分歩きまわって、着かなかった。
言い訳も兼ねつつ、最新のAIP cafeへの行き方も伝えておきたい。

まず、公式の地図はこれ
今となってわかることを書いておこう。

  • ローソンはない!
  • 一風堂の近く
  • ジョーキュー、は醤油屋さん
  • 入江書店は、古本屋さん

さて、もう少し手前を書いておこう。

  • 国体道路から曲がるときの目安は、AppleStore
  • 天神西通りから曲がるときの目安は、BMナカムラビル
  • しかし、ここら辺はビルの名前がわかりにくい
  • 店が多い!
  • 「かに本家福岡店」は「カニ道楽」ではない!

私の考えていた曲がるポイントが、いちいち打ち砕かれていたのだ。
特に、西通りにあんなに店が多い、というのを知らなかった。
天神西通りは「おたふく」しかないとCMで思い込んでいた私が馬鹿だった。
ばかばか・・・

結局のところ、主催者のしかじろうさんに助けてもらった。
まあ、なんて迷惑な!、と昔の私なら思っただろうけど、わからんものはわからんのだ。
歳を取ると、開き直りやすくなるから、若い人は要注意だ。

そうそう、私が一番の目安にしていた「俊英学園」は工事中だった。
だから、私が迷ったのは、私のせいではない。
そう開き直るのも、歳のせいだ。

さて、肝心の目安となるものだが「紺屋」だ。
「紺屋の白袴」の「紺屋」ではなく、「紺屋町」の「紺屋」みたいだ。

私がポイントとなると思われる場所をまとめた地図が上記だ。
ゼンリンの地図は、こういうときに便利だ。

赤い矢印が、AIP cafeの入り口。
大きく「AIP cafe」と書いてあるわけではなく、アパートのピロティーから入るような感じだ。
(ピロティーっていうのかどうかはわからんが・・・)
私は頭を上げて店の名前を探していたけど、それでは見つからない。

初めて行く人には、こうアドバイスしよう。
「主催者の電話番号を聞いておきなさい」と。
私はそれで、事なきを得た(遅刻したけど)。

一番わかりやすそうな写真を探したが・・・
これが見た目でわかりやすい。
入り口からしばらく入ったところにこんなのがある。

近所なら写真を撮っておくのだけど、なかなか行かない場所なのだ。
天神のあの辺に行ったのは、1年ぶりだか2年ぶりか・・・。
その手前のカホパーツセンターには、ときどき行くのだけどね。

勉強会なるものに参加してみた

そのまま。

福岡でAndroidの勉強会がある、というので飛びついた。
にゃんまげに飛びつく、というCMが一時期あったが、そんな気分だったのだろうか。
今の私にはよくわからない。

ともかくまぁ、勉強会、しかも社外で行われる勉強会、というものに私は惹かれていた。
会社でやると、どうしても上下関係ができてしまう。
上の方が意識していないとしても、やはりそんな雰囲気ができるような気がする。
私がやりたいのは、そんなぬるま湯のようなやつではなく、血で血を洗うような技術の争い、みたいな感じ。
まあ、そこまではやらなくても(やらんが)、技術に上下はないのだから、自分の持つ技術を発揮すればいいのだけど・・・

それについては、後で書こう。
人々に興味がないことは、後に書くものだ。


結論として、「C++はやはりいいよね」ということになった(一部)。
そして、私はその一部であることに誇りを持っている!

といっても、Javaをやらんわけにもいかんので、ちゃんとやりますよ。
ええ、10年前くらいに「Personal Java」の勉強をして以来ですがね。
あのときから比べると、Javaもgenericが使えるようになるなど・・・

いかんいかん、そういう話をするところではなかったな。


勉強会自体のことを少し書こう(少しかい・・・)。

初めてそういうのに参加したので、意表を突かれたのが「名刺交換」だ。
普段の仕事では、配るとしても最高で5人くらい。
まあ、普段の仕事では、配ることがないけど。

そういえば、いろいろな分野の人が集まっていた。
私は一応組み込み屋さん、ということにしているが、Web屋さんも多かった。
なんとなく、Androidの勉強会というのは、Androidアプリを作るんだ、と思っていたので、斬新だった。
特に、Androidアプリでなくても、WebkitブラウザなんだからWebでもできるよ、というところ。
ほほー、と目から鱗が落ちる音がはらはらとしていた。
(目から鱗が落ちる、というのは聖書から来た言葉らしい。なぜか先週調べた。)

あとは、Open Space Technologyという技を使ってミーティング。
詳細は調べてほしいが、OpenなSpaceを使うTechnologyだ。
私は、
 ・Androidアプリで対価を得るには(もうけよう)
 ・Androidアプリと家電
に参加。
私の視点からすると、Android OSって単なるOSだから、それを与えられたハードウェアに載せるからあとはがんばってねー、みたいな気持ちがあった。
けど、それでは当たり前だけど視点が足りないわな・・・。
勉強になりました。


勉強会は、こんなところで。
あとは議事録を見てくだされ。

JavaだのC++だのは・・・また機会があれば。ぜひ(姉妹サイトに書くかな…)。

2009/09/25

ACH ?

Google Checkoutの続き。

未だにデポジットがこない・・・
やむなくFAQを見ると「ACHに対応してないとダメ」とある。

ACH?

初めて聞く言葉だ。
Automated Clearing Houseの略らしい。
というところはわかったけど、検索してもよくわからん。

なんか、日本にある銀行は対応してなさそうな感じがする。
アメリカに支店がいるのか?
アメリカに本店がいるのか?
よくわからない・・・

とにかく、前回入力した情報を削除してもらうよう依頼を出してみた。
どこの銀行がよいのやら・・・

2009/09/24

ゼロサプレス

ゼロサプレス、というのはよく使うけど、ゼロサプレスなし、という表現はあまり見ない。
いつも間違えてしまうのだが、ゼロをサプレス、つまりゼロを抑制するのがゼロサプレス。
不要なゼロを取り除くと思えばいいのかな。
文字で「001」などと書いたものを数値に直すとき、「00」は不要だ。
だから、取り除こう。
という使い方かしら。

ゼロサプレスの逆は、ゼロサプレスなし、というよりも「ゼロパディング」がよさそうだ。
数字の表示桁数を統一したいので、桁のない部分にゼロを埋める。
私は「ゼロ埋め」と言っていたのだが、ゼロパディングの方が専門用語っぽくてよいな。
まあ、忘れるだろうけど。

普通に、数値を文字列化すると、ゼロサプレスになると思う。
Cで書くなら、

printf("%d", i);

のような。
ゼロサプレスするときは、

printf("%03d", i);

とかで書ける。
これがC++になると、ちとめんどう・・・

いかんいかん、ここはAndroidの話を。
つまり、Javaで。

java.text.DecimalFormatを使うようだ。

DecimalFormat df = new DecimalFormat("000");
System.out.println(df.format(i));

こんなのでよさそうだ。

Google Checkoutのデポジット

日本でも、Androidアプリが販売できるようになった。
Google Checkoutなるものを使うらしい。

Android Marketのアカウント登録の際に使ったので、お金を払う方はわかった。
問題は、お金をもらう方だ。

もちろん、今すぐに売り物になるようなものが作れるとはとても思わない。
買って24時間以内ならば、1回は払い戻しができるということからすると、私みたいなちょっと見て満足するようなアプリでは売り物にならないだろうと思う。

が、準備くらいしてもいいではないか。

というわけで、販売側の準備をしている。


登録する際、銀行の口座名を書かねばならない。
振り込んでくれるのだから、そうだろう。
が、その記入が英語表記にしなくてはならんようなのだ。
銀行名だけとはいえ、英語表記がよくわからん・・・
私は三井住友銀行にしたので、ホームページに書いてあった「Sumitomo Mitsui Banking」と入力してみた。
これでわかってくれるよなぁ・・・。

確認が取れると、その銀行に振り込みがあるらしい。
それを「デポジット」と呼ぶようだ。
その額をGoogle Checkoutに書き込むと、登録完了だ。

そのデポジット振込が、まだない・・・。
最大5営業日ということで、明日が5日目に当たる。
情報の入力をし損なっているところがあるのかなぁ。

ネットドラゴン?

ケサロニケ人・・・ではないが、英語の人からメールが来ていた。
あまり長くないので、そのまま載せよう。
Subjectは「request for permission from ND CO.」。
ちなみに、メールに出てくる「IKAKU! SYAA!!」は、私がAndroid Marketにアップしたアプリである。


Hello,

This is Anita from NetDragon Websoft Inc. (China). We saw your android application - "IKAKU! SYAA!!" on Android Market.

It is a very nice application for Android, so we hope to get your permission to localize (if necessary) and introduce it

to the Chinese users through our android site-http://android.sj.91.com and other distribution platforms.

Our company is one of the leading online game developers and operators in the PRC.

Besides the online game business, we have been extending our business into wireless enterprise and smart phones.

Here is the Chinese website of our company: http://www.nd.com.cn, and the English website: http://ir.netdragon.us.

Currently, our charging system is under construction, so we can only provide this free service to translate (if necessary)

and distribute free or trial versions. If you have other apps and want to translate them into Chinese, we would love to help, too.

Anyway, if you are interested, or have any questions, please let me know.

2009-08-05

Thanks & Best Regards,

Anita


何も読まずに、自分のアプリ名だけ見たときは「おっ、ユーザから反響があったのかな?」だった。
嬉しかったのだが・・・その喜びは続かなかった。

あのアプリを使ってみたらわかるけど「 to localize (if necessary)」はないだろう。
この時点で、適当に送ってきたことがわかる。
いや、ボタンが2つあるから、翻訳が必要と言われれば、全くないとは言わないのだが。。。

2009/09/23

UnitTestを追加してみる

単体テストをしたくなることもあろう。
そういうときには、JUnit。

と書いてみたが、使ったことはない・・・。
eclipseでなるべくやってみよう。


新規プロジェクト作成。これはテスト対象のプロジェクト。
デフォルトのまま使うことにする。

ここでNextを押すと・・・
左上に、「Create a Test Project」が出てくる。
が、今回は「後から追加する」イメージでやってみる。

Finishすると、eclipseのプロジェクト画面に戻る。
赤いマークがでているのは、genディレクトリ以下が見つからなかったためだろう。
自動ビルドにてgen以下を生成してくれるので、実は問題ないのだが、気になる。
これは、プロジェクトのPropertiesを開いて、OKすると消える(プロジェクト名を右クリックして出てくるコンテキストメニューの一番下にある)。
F5で更新しても消えなかったから、何か更新する必要があるということか。
よくわからん。

左側のプロジェクト(パッケージ?)をマウスで選んで右クリック。
下の方に「Android Tools」があるので、開く。
開くと「New Test Project...」があるので、選択。

ダイアログが出てくる。
ここで「Test Target」を選ぶと、他の空欄を埋めてくれる。
「This project」でもよさそうな気はするのだが、Browseから選ばないとうまくいかないように見える。

Finishすると、プロジェクトが追加される。
さっきと同じく赤いマークがついているのが気にくわないが、今回はPropertiesでやることがあるので、それで解決できるだろう。

・・・と思ったら、自動でそこまでやっていた。
生成したテスト用プロジェクトのPropertiesを選び、「Java Build Path」を選択。
タブの「Projects」を選び、ここにテスト対象のプロジェクトを追加する必要があるのだ。
あるのだけど、やってくれるのね。。。

さて、ここまでは何とかなる。
問題はここからだ。

Androidのサンプルにはtestsの下にテストが書いてあるので、まねをしよう。
まねをするだけなのだが、ApiDemosとHelloActivityでは作りが違う。
ApiDemosにはAllTestsがあるのだけど、HelloActivityにはHelloActivityTestしかない。
「俺はActivityしかテストしないぜ」と主張している。
ApiDemosは、私の中ではちょっと毛色が違ったアプリという扱いになっている。
他のはActivityを継承するが、ApiDemosはApplicationを継承している。
まあ勉強不足なので、Applicationは後回しにしよう。
何となく、Activityが1つのときと、複数の時で作り方が違うんじゃないか、という気がするが、それはそのときでよかろう。

しかし・・・HelloActivityTest.javaを見るとわかるが、中身はスカスカだ。
テストしてない。
なので、ここからはAndroid Wiki*さんを参考に。

eclipseから新規追加で「JUnit Test Case」を選択。

順番はよくわからんけど、「Class under test」を追加。
たぶん、テスト対象のクラスだと思う。
Browseを選んでも何も出てこない…ので、文字を入力する必要がある。
これになかなか気付かなかった。

そのあと、「Superclass」。
これはデフォルトで埋まっていたのだが、AndroidではAndroid用のを使うとよさそうだ。
どれかわからないので、Android Wiki*にもあり、ApiDemosにもあった「ActivityInstrumentationTestCase2」を選択。
AndroidのサンプルにはActivityInstrumentationTestCaseという「2」がないやつになってるけど、もう推奨されていないらしい。
Android Wiki*の説明によると、これは「Activityの機能テストを行う」らしい。
他のは、単体テスト用。
ApiDemosの下の方では、それらを使ったテストになっていた。
まあ、テストの中身についてはまた考えよう。
「そんなSuperclassはないぞ」と言われているが、無視。

setUp()とtearDown()にチェックをし、Nameを適当に(今回は「HelloActivityTest01」)につけた。
そしてNext。

今度は、テストするメソッドを選択するようである。
HelloActivity.onCreate()にチェック。

Finishすると、プロジェクトに戻る。

eclipseに頼るのは、ここまで。
あとは手でぽちぽちとやらねばならぬ。

まず、追加したTestCaseが怒られているので、何とかせねば。
テンプレート(というのかな?)のtypenameに当たる部分が「T」のままなので、テスト対象のクラス名にしてやる。
ここでは「HelloActivity」。

(ここにきて「HelloAndroidクラスじゃないことに気付く・・・。まあいいや。)

そうすると、今度は「HelloActivityなんか知らない」とおっしゃる。
まずは何も考えずに、Ctrl+Shift+O。
テスト対象クラスへのimportを追加してくれたので、よし(あ、これはeclipseの機能か)。

しかし、また赤マークがついている。
今度はコンストラクタがないとのこと。
赤マークのところにマウスを持っていくと、「add constructorなんちゃら」と書いてあるので、クリックしてみよう。
・・・追加されたけど、Android Wiki*のと違う・・・
よくわからないので、このままやってみて、だめなら修正しよう。

では、ここまでで赤マークが消えたと思うので、動かしてみよう。
まずは、HelloAndroidプロジェクトで右クリックして、「Run As→1. Android Application」。
エミュレータがのしのしと起動して、こんな画面が出てくる。

さて、次はTestアプリ。
これもeclipseからHelloAndroidTestプロジェクトで右クリックして、「Run As→2. Android JUnit Test}。
動いているかどうかは、eclipseのConsoleを見るしかない。
最後に「HelloAndroidTest]Test run complete」と出てくれば、動いたのだろう。


が、これでは何かわからん。
そもそも、テストケースは追加したものの、テスト自体は何もしていない。
testOnCreateBundle()というメソッドに「fail」があるから、失敗しそうなのだが、それすらもわからない。。。

ということは、さっきのコンストラクタか?

	public HelloActivityTest01() {
		super("jp.justblog.hirokuma.HelloActivity", HelloActivity.class);
	}

こんなコンストラクタを追加した。
第1引数はクラスまでのフルパス。第2引数はテスト対象のクラス。 これで動かすと・・・

おお、失敗している。
というわけで、コンストラクタは自分で追加しなくてはならない。

しかし、ActivityInstrumentationTestCase2のコンストラクタは引数2つなのになぁ。
なんで引数なしコンストラクタが有効なのだろう?
Javaの言語ルールなのか、JUnitのルールなのか、AndroidのJUnitルールなのかは気になるところだ。

ちなみに、成功するとこんな画面だ。

R.javaがない

Androidでは、リソース類はR.javaというファイルにIDをまとめる。
まとめるというか、自動でまとめてくれる。

eclipseでプロジェクトのクリーンをかけると、genディレクトリごと削除してしまい、R.javaも消してしまう。
genディレクトリだけは作ってくれるのだが、R.javaまではやってくれないようだ。
自動ビルドモードにしていても、作ってくれない。
手動ビルドモードにしてビルドしても、作ってくれない。
作ってくれないと、ビルドできない。
antを使えばいいのだろうけど、なるべくeclipseだけでうまくやりたい。
どうすればいいんだ?

私の出した結論は・・・resディレクトリ内のファイルを更新して、日付を新しくする、というものだ。
そうすると、eclipseが「ビルドすべきだ!」と認識してR.javaを作ってくれる。
作ってくれるんだけど・・・そんなのは私の望む方法じゃないなぁ。

いつか解決する日を期待しておこう。

2009/09/22

初アップ後

初アプリの「IKAKU! SYAA!!」だが、予想通りほとんどダウンロードされていない。
いや、ずいぶんされていると思った方がよいのかな?

0.1.0をアップして、こりゃあんまりだと思い、画像を3枚増やして0.1.2をアップしている。
カテゴリーの分け方がよくわからず、最初はゲームにしていたけど、何か違う・・
ということで、途中からエンターテイメントに変更。

現在のところ、86ダウンロード。そのうち生きているのは22。
25%か。まあまあだ。
有償アプリなら、きっと0%だったに違いない。

これは、Androidの私のページだ。
何の画面なんだろう?
タイトルが「デベロッパー コンソール」となっているので、そうなのだろう。
星が1つか・・・。
そう評価した人が2人もいる!
まあ、評価されないよりもいいや。

もう少しちゃんとしたアプリを出したいなー、と野望を持った私であった。

2009/09/19

初アップ

初めて、AndroidアプリをAndroid Marketにアップしてみました。
・・・ごめんなさい、としかいいようのないできばえです。

ポイントは、
・Androidらしい技術は使っていない
・そもそも、技術っぽいところがみられない
の2点です。

「IKAKU! Syaa!!」みたいな名前でアップしているので、気になった方はどうぞ。
リンクがどこにあるのかなどは、わからないんですよねぇ・・・
Android Marketへは、Android上のブラウザからしか入れないのかしら?

2009/09/15

Android用です

はじめまして。

Androidアプリの配布にはURLが必要だったので、作りました。
有料アプリを配布できるくらいまでがんばりたいところです。
が・・・実力に見合ったものができればと思います。

よろしくお願いします。