Android:SHARPハッカソンに参加してきました。

7/23,24の両日、東広島のSHARPさんでAndroidアプリのハッカソンが行われました。
SHARPさんにAndroid端末を提供していただいて、1泊2日でアプリ作ろうぜというイベント。今回が3回目ということですが、私は初参加でした。今回は開発者とデザイナーが参加してアプリを形にすることを通じてなにか発見があればという感じでした。

まずはsharpさんからSHARP製端末の特徴や、独自APIについての説明をしていただいた。その後、アイデア出ししながらの弁当タイム。お弁当は超豪華!!なんで箸とか置いたまま写真とってしまったのか…orz

各テーブル4人ずつに別れてアイデア出し。
参加したチームのメンバーはこちら。

私たちのチームが興味を持ったのは、3D写真撮影と3D表示。AQUOS PHONE SH-12Cを使って何かできないかなーということになり、3D写真に3Dで落書きができたら面白いんじゃないか?というアイデアが出て、それを採用することに。3Dデコメールやるぞ!ということで、チーム名は「チーム デコメ」に。

仕様とUIを話し合いながら、作業分担を決定。私はあんまり描画周りに詳しくないので、そこはsakiraさんとtam_xさんに任せて、デコレート用の画面のXMLとかその画面の基本操作のActivityを実装開始。隣ではtommmmyさんがすごいスピードでデザインしていく。プロのデザイナーすごい!!魔法をみているようだった。
その後、3D写真を表示する必要があったので、まずはSHARPさんが公開している3D表示用APIのサンプルアプリのソースコードを読んでいたら1日目が終了。早い。

諸事情により、sakiraさんが抜けられて、チーム デコメは3人に。

その後、広島のホテルに移動しての懇親会。twitter上でしか絡んだことのないスーパーなエンジニアさん達やSHARPの中の方々と色々話してウオー!な気分。刺激を受けまくる。なぜか、@kakenaviさんが参加していたのは秘密。

2次会に参加して、ホテルに帰ってきてから、tam_xさんと仕様について話し合って方向性と削る仕様を決める(メンバーが減ったため)。5時に起きてコーディングしようと思ってたら2度寝してしまって、6時からコーディング。とりあえず設定画面とデコメ編集画面ぽいものを作った。

そして2日目。9時に東広島の会場入りして、チーム内で進捗を報告。なんかプロトタイプくらいまでできそうじゃないか?という空気が流れて、tommmmyさんに切り出してもらった画像を自分の作った画面に適用していった。その間にtam_xさんに3Dデコレートと3D写真を連動して動かす実装をしてもらう。デコレートが3D表示で動いているところまでできてて、すげー!!と盛り上がっていた。
しかし、画面とデコメの生成機能の連結までは間に合わずに、アプリが未完成で終了してしまった…。残念><

そして各チームが成果発表。下のはチーム デコメのプレゼン(自分がやったんですが下手ですみません…)。



Video streaming by Ustream

各チームの全体発表はこちら。第3回 SHARPハッカソン 二日目 各チーム発表

ぜひ、他チームのプレゼンを見てください!全チームがハイレベルでした!!

さて、以下から個人的な感想など。

よかった点:

  1. デザイナーさんと連動して開発しているとリズムにのれる。やる気がでる。
  2. 役割分担して作業ができるのは、集中できていい。
  3. メンバー、ホテル、懇親会、お弁当など全てが豪華!

悪かった点(?):

  1. アイデア出しが先攻してしまうため、先に交流の時間がもっとあったほうがよかった気がする。
  2. 事前にSHARP APIを使ったアイデア考えておけばよかった(私が)
  3. 懇親会にコーラがなかった(ぇ
  4. チーム分けはクジのほうが面白かったのではないか?(最初は知り合いでまとまってしまうから)

最後に言いたい放題:(私の独善的な希望)

  1. ハッカソン前に端末貸してほしい!
  2. ハッカソン後も1ヶ月くらい貸してほしい!(b-mobileのsim付きとかで)
  3. FeliCa APIのことも考えて2台!
  4. できれば端末ください!(買えという話。しかし資金が…)

SHARPさんのAndroid端末に触れて、独自APIに触れて、色々とアイデアが出てきても、それを活かしたアプリの開発が継続して行えないので、なんだか勿体ないなぁと感じてしまった。参加者の希望者に端末を3ヶ月レンタルとかして、独自APIを使ったアプリを出す度にレンタル延長とか、SHARPさんのサイトで紹介されるとか、アプリ開発報奨金が出るとか、そういうのがあると、SHARPさんも開発者もSHARP端末ユーザも幸せになれるんじゃないかなーと思った。

言いたい放題言いましたが、この2日間はとても楽しかったです!むちゃくちゃやる気をいただきました!!
SHARPの皆様、ブリリアントサービスの方々、参加者の皆さん、ありがとうございました!(^O^)


Android:ACE合格しました!

Androidアプリケーション技術者認定試験ベーシック(ACE)を受験してきました。
この資格を取ることを今年の目標に入れていたので、早く受験しようと思ってさっさと申し込んでしまって、締め切り駆動で勉強しました。

結果はギリギリ合格!!取ったもん勝ち!!

実質的な勉強期間は2週間。
問題集を3周すれば受かるだろうとだいたい思っているので(完璧は目指さない。合格圏内を目指す)、一気にやりました。まぁ私の勉強パターンですが、マクドナルドに行ってコーヒーで粘りながら3時間くらい勉強して帰る、というのをできるだけ毎日やるというやつです。今回はそんなに時間とれなかったですが。

受験前に、日経BPの問題集から出る問題は3割程度で後は見たこともないようなのが出るというブログの記事を読んでしまったせいで、かなりビビっていました(このブログ読んだの受験日前日だし)。しかし結果はギリギリ合格!!

さきのブログのように、確かに全く知らないこととかもバンバン出てきて、「えっ」って面食らうことも結構ありました。しかも2択までは絞れるけれど、どっちも正解ぽいなーとかもわりと多くて…。重箱の隅をつつきまくってるような…とか色々と考えさせられる試験でした…。うーん、黒本だとどうなんだろうか?後発の黒本のほうがオススメかもしれません。読んでないので、わからないけど…。Androidアプリの開発経験のおかげで合格できたといっても過言ではないので、まだあんまり経験ない人が日経BPの問題集だけで勉強して受験したら、ほぼ間違いなく、落ちると思います。でもまぁ、問題集だけやって合格できる試験に存在意義はあるのか?とも思うので…。

こっちのほうがいいかも?

資格を取る前に、アプリをリリースしたほうが、絶対にいい経験になるので、資格から入ろうとしないほうがいいです。間違いなく。余裕があって、腕試ししたいとかだったら、受けてもいいかも。というくらいに自分は思いました。


Android:暗黙的Intentの戻り値の問題

私が作っているアプリ、コスメマネージャーで、化粧品に画像を関連付けるためのインポート機能があるのですが、それで、暗黙的Intentを発行しています。intent-filterはimage/*です。画像を読み込みたいので。そうすると、ギャラリーアプリの他、エクスプローラー系のアプリも候補に出てきます。

onActivityResultのintent.getData()の戻り値はcontent://〜で始まるUriだと信じ込んでいたのですが(ギャラリーアプリだとこれが戻ってくる)、エクスプローラー系のアプリだとfile://〜のUriが返ってきていました。
そのままデータベースに文字列に変換して放り込んでいたため、エクスプローラー系のアプリで拾った結果が入っていると、画像を表示するところで画像が見つからなくて(ContentProvider経由で探させているから)、エラーでアプリが落ちるという経験をしました。まぁ検証が足りないと言われればそれまでなのですが、暗黙的Intentの戻り値がどんなのなのかってのも想像できんしで…。

自戒の意味を込めてのメモでした。
暗黙的Intentを使ったとしても、ちゃんと想定できないデータ形式やアプリでテストせんといかんっすね…。


Android:タブレットでのウィジェットの話。

今、Androidタブレットでウィジェットを作っています。
そこでわかったことなどをちょっと纏めておきます。自分用に。

まず、ウィジェットですが、ウィジェットでは使えるViewがかなり制限されていて、リストとかグリッドとかを作ることができませんでした(擬似的にはできるだろうけど)。いままではウィジェット内でスクロールするものとか作れなかったのです。どうもホームアプリを自分で作っていれば、擬似的にウィジェットっぽい普通のViewを作ることも可能だったようですが、それだと単にホームアプリが変わったら機能しなくなりますし、微妙でした。自分も事前知識としてそういうふうに思っていたので、XOOMのGmailやYouTube、ブラウザのブックマークのウィジェットはどうやって実装しているのだろうと凄い悩んでいたのですが、単にハニカムからListView, GridView,StackViewなどのサポートが行われるようになったとのことでした。

参考URL
http://developer.android.com/intl/ja/guide/topics/appwidgets/index.html
StackView Widgetを使ったサンプルはこっち(StackViewはYouTubeのウィジェットのやつ)
http://developer.android.com/intl/ja/resources/samples/StackWidget/index.html
Cursorを使ったサンプルはこれ。
http://developer.android.com/intl/ja/resources/samples/WeatherListWidget/index.html

これらのViewを使えば、今まで使えなかったリッチなUIをウィジェットでも使うことができるので、よりタブレットらしいウィジェットが作れるかと思います。作り方に関しては、上記のURLにある程度参考情報が載っていますので、読んでみたらいいかと思います。英語ですが。

上記のURLの内容を要約しますと、

  1. RemoteViewsServiceというサービスクラスを継承したクラス作成(要マニフェストに追加。方法は上記URLを参照)
  2. 上記のサービス内でRemoteViewsFactoryのインターフェースを実装したクラスを作成し、扱いたいアイテム(ArrayListなりCursorなりをonCreateやonDataSetChangedを生成しとく)に合わせてgetViewAtメソッド内で実装。
  3. アイテムへのイベント設定はRemoteView.setonClickPendingIntentではなく、RemoteView.setOnClickFillInIntentで行う。
  4. setOnClickFillInIntentで実行したい処理は、ウィジェットのonResume内で実装
  5. AppWidgetProviderのonUpdateでRemoteViewsServiceを呼び出すIntent生成して、RemoteView.setRemoteAdapterを呼ぶ。これで、RemoteViewsFactory.getViewAtメソッドで実装したViewの描画処理が行われる

という感じ?まぁ概要をざっと書いてみましたが、すごい適当です。間違ってたらすみません。でも動作チェックまでやってみたので、合ってると思います。
リッチなUIがホームに置けるというだけでも、わざわざアプリを起動しなくてもよくなるわけですから、ユーザとしても利便性が増すと思います。積極的にウィジェット作成を狙っていきたいところですねー。


Android:ACE問題集を買ったらまず正誤表を見よう

昨日、ACEの資格を取得するのを今年の目標に掲げたので、1日1時間程度ずつでもテキストを進めていこうかなと思って勉強を始めた。持っているテキストはこれ。

順調に進めていたら、自信満々で答えた問題で間違った。
今までの自分の経験からすると、明らかに問題集のほうが間違っていると思ったので、試しに問題集に書いてあるようにコーディングしたらやっぱりエラーが出て、自分のほうが正しいことがわかった。ここで、一応、正誤表を見ておこうと思って検索してみたら、この問題集、結構間違いが多いらしい。テキストを買った人はまず、正誤表をチェックして、直してから勉強することをオススメする。特に初心者は、テキスト側が間違っていることに気付けないからね…。

正誤表は下のリンクから行けます。
正誤表のページへのリンク

そういえば黒本も出たらしい。こちらはどうなんだろうか?
自分がネットワーク系やLinux系の資格を取っていたときは、黒本のお世話になっていたので、黒本のほうがいい内容かもしれない。後発本だし。立ち読みしてみようかなー、今度。