petitviolet_blog

@petitviolet blog

勉強したかったことを盛り込んでアプリ作った

AndroidでHackerNewsリーダー作った

作ったもの
HNReader - Google Play の Android アプリ

f:id:petitviolet:20150730101913p:plain

Google Playで"Hacker News"と検索すると似たようなのがたくさん出てくる
何個か試してあんまりしっくりこないし自分で作りたいな、と思っていた
それに加えていろいろ勉強したいこと、使ってみたいものが積まれてきていたので一気に消化するべく作った

やりたかったこと

特にRxAndroidとDaggerは使ってみたかった
ちなみに今回DataBindingは使ってみたくてbuild.gradleに設定まではしたけど、RecyclerViewで使うの大変そうすぎたのでスキップした
導入の面倒さに対する良さが分かってないのもある

いろいろ困ったとこ

  • RxJava使い始めていきなりMissingBackPressureExceptionとか出て何も動かなかった
  • RxJavaでページャっぽいの実装するとこ
  • Daggerの使い始め
    • Appクラスの内部で宣言したAppComponentインタフェースに@ComponentつけたやつがDaggerApp_AppComponentになるとか全くわからず困った
      • Android Studioでちゃんと補完されなかったため合っている確証も無く困った
  • RealmObjectの使い回し
    • DBから読み出したオブジェクトを別スレッドで利用するとエラー吐いて死んだ
      • RealmObject継承したものとそうでないものを2つ用意してデータを受け渡しして解決
        • toStringとかも実装しちゃいけないとかいろいろきつい
    • List<String>とか持てない
      • List<MyRealmString>とかにしてRealmObjectを継承させないといけないの苦しい
      • せめて基本的な型についてはRealmStringとか用意して欲しい
    • RealmObject以外のtransactionとかwhereとかのapiは使いやすくて良かった
    • Realm BrowserなるスタンドアロンMacアプリがあってDBの中見れるのも便利だった
  • Hacker NewsのAPIがアレ
    • ちゃんとある HackerNews/API
    • でもアレすぎる
    • firebaseに乗っててRESTなAPIとかAndroidSDKもあったが、ただソートされたjson取ってくるやりかたもよく分からん

Android Quickstart - Firebaseの例が以下

myFirebaseRef.child("message").addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot snapshot) {
    System.out.println(snapshot.getValue());  //prints "Do you have data? You'll love Firebase."
  }
  @Override public void onCancelled(FirebaseError error) { }
});

データ取ってきたいだけなのに、addValueEventListenerってなんだよ!ってなるし使うのをやめた
リアルタイムな何かをする時とかは値を監視してそのコールバックで、とか出来そうなので用途によっては便利そうだけど、今回はいらない

Hacker Newsのフィードについたスコアでソートしたい、ってなるとTop Storyで取得できるidについて詳細を取得して、その結果のスコアでソートするみたいな処理が必要っぽくて面倒くさすぎたのでやらなかった
この"Top Story"ってのが最初からスコア順で並んでたら何も文句は無かったんだけど...

あとがき

  • RxJavaとretrolambdaの組み合わせめっちゃ良くてストレスだいぶ軽減されたので使っていきたい
    • まだまだ浅い理解で、使い込まないとRxの世界が理解出来なさそう
  • Dagger2はテスト全く書いていないし複雑なアプリでもないので、恩恵は分からなかった
  • Realmはスレッド間の受け渡しが出来ないとかメソッド生やしちゃいけないとか、List<String>も持てないとかいろいろ不便も大きいのでその辺解決しないと使いたくないかも
    • SQLiteスキーマ書いて、とかももうやりたくない...
    • 他のORMを試したいところ
  • Hacker NewsのAPIアレだしRSSも標準のしか無いしでアレ

いろいろとやりたかったこととか軽くは消化できたので良かった
Hacker Newsリーダー自分で作るっていう実績は解除できたけど、良いものが出来たか?と言われると違う
直す気になれば直すし、意外とこれでよければそのままでいいや

個人的にタイムリーだった記事

motida-japan.hatenablog.com

まったくプロダクト志向ではなく技術志向ドリブンなアプリ開発となった

メルカリのDrink Meetup#10に参加してきた

Drink Meetup with Mercari #10 - connpass

これに参加してきた

メルカリのスマホエンジニアがAndroidiOS開発についてざっくりLTして、後は歓談という感じだった

f:id:petitviolet:20150702224123j:plain

すごい手料理で良いビールだった

f:id:petitviolet:20150702224130j:plain

普通に酒飲んで食べつつスマホ開発のこと話したりしてた

決済が絡むと色々気を使うことが多くて大変、とかAndroidエンジニア見付からない、なんて話を聞いた

帰り際にTシャツまで貰ってしまった

f:id:petitviolet:20150702225931j:plain

meetup参加するの初めてだったけど、楽しかったのでまた機会があればこういうのも参加したい

DroidKaigiに参加してきた

2015/4/25に開催されたエンジニアが運営するAndroidカンファレンスであるDroidKaigi | 2015/04/25に参加してきた

droidkaigi.github.io

8分で埋まった先着200人枠に滑り込めたのは幸運だった
東京に来て初の外部勉強会/カンファレンス参加だったけど、とんでもない人数と熱気で東京すごいって感じた
めっちゃありがたいことに資料はここにまとめてくれています

unsolublesugar.com

聞いたセッション

  • マッチョなActivityにさよなら(基調講演)
  • 開発を効率的に進められるまでの道程
  • アプリの企画、プロトタイプからリリースに至るまで
  • 大容量ダウンロード戦略
  • 進化するART
  • ARTのメモリ管理
  • 使えるGradleプロジェクトの作り方
  • Androidアプリ公開の前に知っておきたいセキュリティ事項
  • 僕らのデータ同期プラクティス
  • AndroidSELinux

やったことないし知らないこと多くてめっちゃ勉強になった
みんながわかる辛さを解決する方法とかARTみたいに日常で絶対知り得ないこととかエモい話もちょこちょこあってバラエティに富んでた
でもSELinuxは難しすぎた...
あと話がうまい人も多くて楽しかった

感想

  • DroidKaigiの作り方 - ふたつの教室で書いてあったけど、会場の移動少なくて快適だった
    • バスケット分析すごい
    • 事前アンケートでそこまでやれるのか!ってなった
  • Android開発でやること・やれることが多すぎるので、聞くだけではなくて何か提供できる側になりたい
  • 全体的にUXを向上させることを前提としていたような印象
    • サーバーサイドと意識が違うような気がして面白かった
  • 異常に最先端なことやってるとかあんまりいない?
    • (やろうと思えばやれる | やった方がいい)けど大変でやりたくないことが多すぎる
    • やりたいけどやり方がよく分からない、とかも
      • データ同期の際の競合とか、画面回転時の状態保持など
      • 負けない気持ちで実装するのが大事なのかな
  • Android2.xは次の案件では切る、っていうのが大勢っぽい
    • ちょっと安心
    • 古い端末/OSの人に新しい端末配った方がコスト低い説ほんとにありそう

次回も開催されれば是非参加したいです
運営のみなさまありがとうございました f:id:petitviolet:20150428075914j:plain