日記:Android勉強会@愛媛 5回目やった

土曜日にですが、Android勉強会@愛媛 5回目やりましたー。

参加者は、

@patorash
@stachibana
@esperia09
@minmin0530
@kama_AGE
@genkan2000

の6名でした。

最初は stachibana さんが見忘れてたというアメトーークの天下一品芸人の回をトルネで見るところからスタートしていたので最初は全然開発せずにどこのラーメンが旨いか?みたいな雑談で和み、見終わってからまた各々が開発を開始。

今回は前にいた会社で同僚だった genkan2000 さんが初参加。会社外のプログラマの人達と話をすることが出来て、色んな刺激を受けて楽しかったらしいので、やっててよかったなぁと思いました。他の人達も色々と動きがあったらしいので、まぁ近況報告しながら、もくもくと開発するという感じでしたねー。

できる限り、月一で開催して、なんか形になるものを作っていけたらなぁと思います。


Android:ABC 2011 Winter に行ってきた

もう金曜日なので、ネタ的には随分古い感じがしてしまいますが、1/9(日)に東京大学で開催されたAndroid Bazzar and Conference 2011 Winter に参加してきました。今回は、聴く側ではなく喋る側だったのと(といってもライトニングトークで3分ほどですが)、日本Androidの会 四国支部のメンバーとして四国支部のブースでトートバッグを販売したりしていたので、実は私は全くといっていいほど、講演が聞けていません。(まだUstも見てない…)まぁそんな感じなので、私がABCに行くところから、ABC終わるまでを報告しようかなと思います。
※ライトニングトークは以降、LTと表記

まず8日に松山発の夜行バスに乗車。交通費を節約しようと思っての選択だったが、夜行バスは乗った事がなかったので経験しときたいなぁということでの選択。ギリギリまでLTの資料作成やプログラムやっていたため、結構寝不足だったのでバスでも寝られるなぁと思っていたら、速攻で寝てしまった。途中、休憩で起こされたが、かなり寝たと思っていたのに2時間しか経過しておらず、でも眠気は吹っ飛んでいたのとバスの振動と音で、夜中に寝られなくなったので時々twitterで呟く。深夜バスの洗礼を受け、なんとか目をつぶってウツラウツラしていたら東京に到着。7時に新宿です。

東京大学は上野駅近くにあるので、上野に移動。なんせ地理には弱いので時間たっぷりの余裕を持って上野に到着。お腹空いたので駅内でモーニングセット食べてGoogleMapを頼りに東大に移動。到着。この時点で8時半。基調講演の受付が9時半だから1時間もあるよ、早過ぎたなーと思っていたら、四国支部の他のメンバーも既に到着済み。田舎者はビビって来るのが早いという話をしていたら、安田講堂の前に行列ができはじめた。我々も並んでいたのだが、四国支部のブースの準備しないといかんのじゃないのか?という話になり、そーだそーだと行列を離脱。元四国支部長のLionasさんと奥さんと弟さんと合流し、一緒にブースの準備にとりかかった。

ブースの準備をしていたら基調講演の開始時間をとっくに過ぎていて、聞けなかった。四国支部の隣は女子部で、女子部のやのさんがパンダのかぶり物をして登場。Android Tシャツを販売していた。そういえば買えばよかったと後悔。買うのを忘れていた。

そうこうしている間に人がチラホラ来だしていたので、四国支部で作ったアプリのイケメンデベロッパー時計の紹介とAndroidグッズのトートバッグの販売をしていた。四国支部のTamさんに「Androidアプリのレビューサイトのアンドロイダーさんのブースに行って、自分のアプリが載ってることを伝えたらバッジが貰える!」と聞いて、早速アンドロイダーさんのブースに行って、「音声エディタ作ってます!」と伝えたら「おー!アレ作ってる人ですか!?」と言われた。最近紹介されたばかりだったので覚えていてくれたらしい。

で、これを貰った。あと名刺交換させていただいた。しょぼい名刺を渡してすみません…。
アンドロイダーのバッジ

バッジもらってウキウキしていたら、基調講演の後に各ブースのPRタイムがあるから、四国支部のブースのPRをする人を選んでくれと言われて、LTの前に慣れとけ!という無茶ぶりで急遽、自分とめんみさんが行く事になった。東京大学の安田講堂で1,100人を前に30秒とはいえ喋ることになるとは、予想だにしていなかったので、すごく緊張した。

PRは30秒経過したら強制終了になるので、しどろもどろにならないように注意して、トートバッグをアピールしてきたら5秒くらい余ってしまった。配分が悪かったけれど、おかげでブースに戻ったら、バッグを求めて来て下さる方々がいたのでよかった。PRした甲斐があった。中国支部のとろくんやおくとばさんがブースに来てくれてイケメン時計用の写真撮ったり、今までtwitter上でしか交流がなかった人と出会って名刺交換させていただいたりなどした。

気付いたらもう午後のセッションが開始する時間になっており、昼ご飯を食べていなかったので、みんなで東大の食堂に行ったら凄まじい行列だったので、大学内にあるローソンに行って各々ご飯を買う。自分はパスタにした。岩崎女子さんがどん兵衛買っているのには驚いた。東大来てまでどん兵衛っすか!?と聞いたら、関西と関東では出汁の色が違うらしいので食べてみたかったのだと。知らんかった…。

ブースに戻った後、とりあえず近くのブースくらいは適当に回りたいなと思っていたので、時間があるときにサラッと回った。株式会社アプリックスのところで、zeemoteというBlueToothのゲームコントローラーを使ってAndroid内のゲームを操作するというのをやっていて、名刺を渡したらそのコントローラーを無料で貰えるということだったので、貰ってきた!しかも自分が残りの1つだった!ギリギリセーフ!
zeemote

SDKが公開されているのでダウンロードして何か作ってみたいなと思っている。

F会場の女子部のもぐたそさんのオールナイトヒャッハーを見に行ってみたのだが、自分がいったときには既に満席で立ち見でも部屋に入れない状態で部屋の外で見ていたのだが、それでも声がうまいこと聞き取れなくて微妙だった。すごい人気だった。他の会場も満席で入れませんという感じで、Androidの盛り上がりぶりを感じた。でも聞けないのかい!?と残念だった。会場の講演を聞きにいけたのはそれくらいだった。

あとは自分のLTの時間になるまで、ひたすらブースでトートバッグを販売した。途中からバーッと買って下さる方が増えて、とても嬉しかった!トートバッグ自体はものはいいし、デザインも白はかわいいし黒はカッコいいので、どちらを持っていても本当によい。自分は2つとも持ってる。

そしてLTの時間になり、B会場に移動。Macを立ち上げて、Keynoteを準備して、他の人のLTを聞きながらどんどん緊張感が高まっていった。裏では、というか自分たちが裏なんだけれど、他の会場ではシャープ、はてな、日本通信などなど名だたるビッグネームが講演をしているので、LTを見に来る人は少ないんじゃないかなーと勝手に思っていたのだが、立ち見をしている人がいるほど人が多かった。こっちに与えられている時間は各自3分間。それを過ぎたら強制終了。
3分内にすごく内容の濃い発表をする方々ばかりで、自分のこの発表で果たして大丈夫なんだろうか?と。しかも高校生や中学生がLTをしにきていた。どんだけハイレベルな学生だよと。話している内容は自分のレベルよりも上だし…。
まぁドッカンと受けているLTを見ながら自分の順番が来て、イケメンデベロッパー時計の発表を行った。

以下がB会場のLTのUstream。自分の発表は58分過ぎくらいから。

以下がそのときに使ったスライド。

ディスプレイ繋いだ時にちょっとトラブったりもしたけれど、なんとか丁度3分くらいで発表を終えることができた。笑いも取れたみたいで、その笑い声が聞けて緊張がほぐれてきた。やはり笑いが重要!そしてアプリのアピールもできたのでよかった!
Androidをやるようになってまだ1年経っていないのだけれど、まさか自分が東大の教室で人前で発表するようなことになろうとは思ってもいなかったので、とても貴重な経験ができた。あと緊張しすぎて気付いてなかったのだけれど、とろくんとおくとばさんが私のために横断幕作ってくれていた。あとで写真で見せてもらってびっくりしたけれど、すごく嬉しかった!

その後はブースの片付けに行って、残った時間を最後の安田講堂での講演を聞いた。Android 2.3 の機能について、日本のAndroid開発者のトップの面々が発表していた。レベルの高い発表で、わからないこともしばしば。格の違いを感じた…。

最後の講演の後は、懇親会に参加。一体何人いたのだろうか…。大勢の方と名刺交換して話した。twitter上の交流からリアルに会うようになるので、相変わらずすごく不思議な感じだった。しかもあまりに大勢の方と同時かつお酒も入っていたのでかなり記憶が混乱している…。しかしAndroid界隈のいろんな方に出会えて刺激を受けて、とてもよい機会だった。十分に東京に来た甲斐があった。

次回のABCもぜひ参加したいと思う!!


日記:ABC行ってきます

明日、東京大学にてAndroid Bazzar and Conference 2011 Winterが開催されます。そこでコミニュティー枠のLTで3分間ほど話してくることになっているので、もうちょっとしたら東京行ってきます。

四国支部の有志で作成したアンドロイドアプリ、イケメンデベロッパー時計のアピールをするという使命を授かっているので、バシッとアピールできたらなぁと思います。僕はサーバサイドプログラミングを担当したのだけれど、Slim3で作って色々と勉強になりました。使い方はすごくてきとうなので間違っている部分もたくさんあるようなやり方ですけど…。もっと精進せないかんですね。

楽しいイベントになることを願っております!


日記:Scalaのインストール等

昨日買ってきたScalaの本を、今日から少しずつ消化していくことにした。まずは概念を理解し、そして使えるようになりたいなと思う。

まずはインストールだけ行っておいた。Macならば、macportsでインストールできる。

sudo ports install scala28

これだけ。

ただ、shellから起動するときにscala-2.8って叩かないといかんのが面倒なので、シンボリックリンク作っておくと便利。
以下のサイトを参考にした。

MacにScala入れてEmacsから使えるようにした

sudo ln -s /opt/local/bin/scala-2.8 /usr/local/bin/scala
sudo ln -s /opt/local/bin/scalac-2.8 /usr/local/bin/scalac
sudo ln -s /opt/local/bin/scaladoc-2.8 /usr/local/bin/scaladoc
sudo ln -s /opt/local/bin/scalap-2.8 /usr/local/bin/scalap
sudo ln -s /opt/local/bin/fsc-2.8 /usr/local/bin/fsc
sudo ln -s /opt/local/bin/sbaz-2.8 /usr/local/bin/sbaz
sudo ln -s /opt/local/bin/sbaz-setup-2.8 /usr/local/bin/sbaz-setup

これで、scalaと叩くだけでよくなった。

本は1章,2章を読んで現在3章の途中。関数型言語の特徴を学んでいる最中。関数の引数に関数が入るというのが、関数型言語の知識がない自分には斬新で驚いた。これから頑張って学んでいきたいと思う。


Android: WebViewClientでonPageFinishedは複数回呼ばれる可能性あり

表題の通りなんだけれども。

最初全然気付かなかったんだけど、Ajax使ってるサイトとかで起きた。

WebViewClientを継承してロード中…みたいなProgressDialogを出そうと思ってやってみたら出来てたわけです。
しかし、YouTubeのサイトで画面タップしたら、いきなりエラーで落ちた。LogCat見たら、「onPageFinishedでpd.dismiss()ってやってるけど、ProgressDialogないよ!」って怒られてた。
ん?なんで一度onPageFinished終わってるのに再度呼ばれてるの?と疑問に思ったのだが、どうもAjaxでデータ取り終わった後にも呼ばれているっぽい。onPageStartedはAjax呼ばれた最初にはコールされないので、pdを初期化する処理が行われずに呼ばれるからエラーと。そうですか…。

ということで、以下のように改良。

public class HogeActivity extends Activity {
	.
	.
	.
	/**
	 * WebViewのロード中にプログレスダイアログを表示するクラス
	 * 
	 */
	public class SimpleLoadingClient extends WebViewClient {
		
		private ProgressDialog pd;
		@Override
		public void onPageFinished(WebView view, String url) {
			super.onPageFinished(view, url);
			this.dismissDialog();
		}
		
		private void dismissDialog() {
			if (pd != null) {
				pd.dismiss();
				pd = null;
			}
		}
		
		@Override
		public void onPageStarted(WebView view, String url, Bitmap favicon) {
			super.onPageStarted(view, url, favicon);
			this.dismissDialog();
			pd = new ProgressDialog(HogeActivity.this);
			pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
			pd.setMessage(getString(R.string.now_loading));
			pd.show();
		}
	}
}

pdがnullならdismissしないようにすると。
以上でーす。