petitviolet_blog

@petitviolet blog

振ると進むViewPagerのライブラリ作った

小さいライブラリを作ってリリースしたのでブログ書く

スワイプしなくても端末を振ると進むViewPager
petitviolet/shakable-viewpager

スクリーンショット撮れないから振ってる様子を動画に撮るしか無くてめんどくさかった

こんなの

f:id:petitviolet:20150906175241g:plain

リリース作業

Maven Centralにアップロードしてみたかったが、必要な作業が非常にめんどくさく感じたため、少し気になっていたJitPack.ioを使ってみた。

その前の準備として、projectのbuild.gradleを少し書き換える

rootのbuild.gradleのdependenciesに追加

dependencies {
    classpath 'com.github.dcendents:android-maven-plugin:1.2'
}

そしてlibraryプロジェクトのbuild.gradleにpluginを追加

apply plugin: 'android-maven'

準備はこれだけで良い

リリース版としてgit tagを打ってから、この検索欄にGithubのURLを入れるだけで良い
f:id:petitviolet:20150906172652p:plain

そうすると下のスクリーンショットのように、打ったtagが表示される
f:id:petitviolet:20150906172805p:plain

get it押してしばらくするとこうなる

f:id:petitviolet:20150906172839p:plain

そして公開したライブラリの使い方を表示してくれる

f:id:petitviolet:20150906173320p:plain

jitpack最高
でも、namespaceがgithubになってしまうのがちょっと残念

YAPC::Asia Tokyo2015 #yapcasia に参加した

yapcasia.org

仕事の都合で二日目だけの参加となった

最後のYAPCに参加出来て良かった
ありがとうございました

twitter.com

とのことなのでブログ書く

ビッグサイト

https://lh3.googleusercontent.com/-MH44yQhA2Vk/Vdhu08kkX9I/AAAAAAABHoE/GF906ZQZX20/w1330-h998-no/IMG_20150822_163744.jpg

でかい

聴いたセッション

資料は別のだれかが全部のセッションをまとめてくれると思うので、そちらを

所感

聞いたことある、ちょっと興味あるけどちゃんと触ったこと無い技術に関して色々と知見を聞けた
仕事したり趣味の範囲だけでは賄えないことも多いので、こういった場でいろんなドメインの話を聞いて知識を広げる活動も大事だと思った
もう26歳で若くないけどバリュー出していきたい

そんなことより

http://news.yahoo.co.jp/pickup/6171644news.yahoo.co.jp
死にたい

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

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

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