カブトムシの壺

消しゴム付き鉛筆

potatotips #53 に参加しました

ちょっと遅くなりましたが、Androidブログ枠で参加したので、簡単にですがまとめました。

今回は、MoneyForward社の綺麗なオフィスで行われました。

f:id:namaninotiteti1026:20180730100213j:plain

AndroidXに移行するために

しゃりふ@syarihu.net (@syarihu) | Twitter

speakerdeck.com

  • Support LibraryからAndroidXへの移行を、本番のプロダクトで試してみたお話

  • Support Libraryはv28で終了するため、今後はAndroidXに移行する必要がある

  • AndroidXへの移行には移行ツールが用意されているが、やはりそれだけでは難しく手直しが必要

  • OSSをたくさん利用していると厳しい。逆に考えるとAndroidX対応のコントリビュートチャンス

  • 正式リリースはまだだけどお試しでやっておいた方が良さそう

Tips for migrating to Picasso2.71828

よこち (@chiiia12) | Twitter

speakerdeck.com

  • Picasso2.5.2からPicasso2.71828にアップデートした時のお話

  • 2.5.2からしばらくアップデートない

  • Picasso2.71828は2系との互換性はない

  • 2.5.2だと一部の端末で画像が表示されない問題があった

  • Picasso2.71828でも問題起きたが解決した

Cloud FirestoreでのClient Side Joinについて

shogo.yamada@Flutterが好き (@yshogo87) | Twitter

speakerdeck.com

J2Kコンバータをカスタマイズする

ぱらや (@paraya3636) | Twitter

speakerdeck.com

  • Java からKotlinへのコンバートツールをカスタマイズした話

  • 強制的にNonNull変換したかった

    • 手作業でやるのはしんどすぎる
  • コンバーターを改造する

    • TypeConverter.ktを編集する

sharedUserIdを使った俺得開発ツールの作り方

住友 孝郎@お-05:技術書典4 (@cattaka_net) | Twitter

www.slideshare.net

  • sharedUserIdを同一にした開発用アプリを作って、通信先APIの変更した際のテストなどを簡単にした話

  • 開発者用デバッグメニューで通信先APIの変更などは対応できるが、ビルド時の最初のタイミングで発生する通信などには対応できない

    • なので、別アプリからその変更を出来るようにした
      • sharedUserIdを使って
  • Preferencesの変更も行える

SdkSearchのアーキテクチャ

Sato Shun△ (@stsn_jp) | Twitter

感想など

  • 初めてpotatotipsに参加しましたが、フランクな空気で良いイベントでした。

    • 「乾杯〜」から始まって、お酒を飲みながらお話を聞けるのが良いですね。
    • ちゃんと笑うポイントで大きな笑い声が起きているのは、コールアンドレスポンスが出来ている証拠だ!良いイベントだ!と思いました。
  • iOSの知見も聞けるのも良かったです。

    • 普段、Android開発していると触れることがないので、「うちのiOSのプロダクトはどうなんだろうな・・・」と思うことがいくつか気になることがあった。例えば、Optional(2018)年の話とか。
  • Kotlinの話が出てきて分からないところがいくつかあったので、お勉強したいなと思いました。

RecyclerViewでドラッグ&ドロップ&スワイプ

 

Android のRecyclerViewで子要素を長押しして位置を変えるとか、スワイプして削除するとかって難しいのかなと思ってたのですが、シュッと出来ました。RecyclerView凄い。

 

参考にしたコードはこれです

 

 

書いたコードはこれ

github.com


仕事しているのはItemTouchHelperで、子要素に対してmoveだとかswipeだとかそういう動作が起きた時に何をさせるか書いてあげれば動いた。

 

やってみるまで、難しそうと勝手に思ってたけど、やってみたら全然そうでもなかった。

 

Spotifyが好きなところ3つあげる

 

Spotifyが好きです。

 


一応、音楽サービスは Apple Music、Amazon MusicGoogle Play Music、Line Music、AWAと良さそうのは一通り試してみたのですが、最終的にSpotifyに着地しました。ちなみに家族プランというプランに入っていて、1480円/月で課金しています。

 

Spotifyって音楽好きのためのサービスだなって思っていて。自分は音楽好きなので、ぴったりハマってるのかなと思います。

 

そんなSpotifyの好きなところを3つ紹介します。

 

1. 聴けば聴くほどレコメンドが優秀になる

 毎週金曜日に「Release Radar」というのが配信されて、このプレイリストには最近配信された曲と、最近自分が聴いてる曲を学習したオススメの曲を良い感じに合わせて30曲提案してくれます。

 

f:id:namaninotiteti1026:20180709221602p:plain

 

 30曲も提案されると、毎回大体2曲くらいは新しい発見があります。こんなアーティストいたんだ〜っていう。その発見が楽しい。だからどんどん使ってお気に入りしていく。自分仕様のオススメが提案される、みたいなループです。

 

2. 再生するまですごく早い

 

 これは触ってみると分かるのですが、上であげたリストを選んで、適当に選択して再生されるまで、びっくりするくらい早いです。最近の具体的な数字が無かったのですが、2011年でも既に中央値で0.265秒だそうです。

Spotifyを使うと海賊行為が不要になる—と言われるのはなぜか | TechCrunch Japan

 これ、何が良いかと言うと、私は毎日、良さそうなアーティストを発見するために音楽を聴いて5秒くらい聴いて「あ、これビートが好きじゃ無い」とか「これ、好き。お気に入りしてあとでゆっくり聴く」とかを何曲も繰り返すのですが、再生するまでが早いとめちゃくちゃ捗ります。あと、単純に快適です。

 

 

3. アーティストをちょっと深く知れる

 単純に最新の曲がリストアップされるんじゃなくて、アーティストが作ったプレイリストなんかも聴けたりするのも気に入っています。

f:id:namaninotiteti1026:20180709224156p:plain


 例えば、CHAIのプレイリストとか良かったです。CHAIがまだそんなに世に出てない頃に初めてLIVEで観た時に「これはどの辺のアーティストをルーツにして、何を聴いたらこうなるのだ?君たちは何者だ?」みたいな気持ちになったのですが、プレイリストを聴いてると少しですがルーツが分かったような気になりました。

 

 

f:id:namaninotiteti1026:20180709224519p:plain

 あとはフレンズのも良かった。シングルとかアルバム順とかじゃなくて、出来た順っていう切り口。曲順に聴いてって音楽性が少しづつ変わっていくのが楽しい。

 

f:id:namaninotiteti1026:20180709225025p:plain

 あと、たまにダイノジのオススメとか聴くのも発見があって面白いです。曲と曲の合間にダイノジ大谷の暑苦しくも愛のある解説が挟まるのもたまに聴くと良かったりする。ラジオで聴いた曲が良く聞こえる理論と一緒かなという感じ。

 

 

・・・

 

とまぁ語り出すとキリがなくて、他にも、友達として繋がっている人が今聴いてる曲が分かったり、何気にPCとスマホで同期再生出来たりとか好きなのですがこの辺にします。

 

気になった方は無料で試せます(フリーミアムモデル最高!)ので、ぜひ試してみてください。

〜という話をした、とどこかに書いておくと良い

良く話す

 職場の隣の席に同僚のエンジニアがいる。自分がコードレビューしてて、なんでこうなってるのか分からない事がある時とか実装で分からんなって時はすぐに口頭で聞いてしまう。向こうもそんな感じでフランクの話しかけてきたりするので、周りから見ると結構話してるなって思われてるんだろうなって、思っている。

 

 なんでそんなに話してるかっていうのは過去の自分の記事でも書いているけど、雑に話していると無駄に考えていることとか、自分の考えが整理されたりとかがあって僕は良い感じになるからである。

 あと、その同僚のエンジニアが以下の記事を読んでくれた時に「良いっすね!」って言ってくれたので、じゃあガンガン話しかけても大丈夫そうだなって思ったからっていうのがある。

namaninotiteti1026.hatenadiary.jp

 

何を話したのか思い出せない

 それはそれとして良いんだけど、最近レガシーなコードのリファクタリングをしていた時に、「何に使われてるか分からないけど、その部分について自分が1年前くらいに当時の〇〇と会話した記憶がうっすらあるなぁ」というコードにぶち当たってしまった。

 その箇所触った時のPull Requestのコメントとか見返しても全然その会話については残ってなくて、「あぁ〜もう!」というモヤモヤした気持ちになった。会話するのも大事だけど、それを何かしらgithub上とかslackに記録として残しておくのも大事かもなぁって思った。

 

なので、どこかに書きましょう

 みんなが後で追えるようにgithubかどこかに残した方が良い。「これこれこういう理由でこうなってるんじゃないかな?という話を〇〇さんとした」くらいのコメントでも何でも良いから。少なくとも0よりは良いだろ。と、考えている。

Android 8.0.0のEditTextをタップすると view.getBoundsOnScreen() でNPE

Android 8.0.0でEditTextをタップした時にクラッシュしていた。

Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.getBoundsOnScreen(android.graphics.Rect)' on a null object reference
       at android.app.assist.AssistStructure$WindowNode.<init>(AssistStructure.java:484)
       at android.app.assist.AssistStructure.<init>(AssistStructure.java:1908)
       at android.app.ActivityThread.handleRequestAssistContextExtras(ActivityThread.java:3038)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1810)
       at android.os.Handler.dispatchMessage(Handler.java:105)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6565)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)

これはOS8.0.0で起こるバグで、OS8.0.1にアップデートすれば治るとのこと。原因はAutofillまわりで、qiitaには以下のようにAutofill自体をしないようにしてクラッシュさせない方法があがっていた。

(qiitaから引用しました)

<style name="MyTheme" parent="@style/Nanika">
  ...
  <item name="editTextStyle">@style/EditTextStyle</item>
  ...
</style>

<style name="EditTextStyle" parent="@style/Widget.AppCompat.EditText">
  <item name="android:importantForAutofill" tools:ignore="NewApi">noExcludeDescendants</item>
</style>

ただ、これだとAutofill自体が効かなくなってしまう。なので、issuetrackerにあがっていたもう一つの方法を試してみたらクラッシュしなくなった。

というのも、このクラッシュは以下のようにTextInputLayoutの子要素にEditTextがあり、その中でhintを使っている時に起こるようだった。そのhintを親のTextInputLayoutに移せばクラッシュは起きなくなった。

            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <android.support.design.widget.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/hint" />
            </android.support.design.widget.TextInputLayout>

原因が結局モヤっとしているのだけど、OS8.0.0の全端末でこの事象が起きる訳ではなく一部の端末で起きていて、しかもOSのアップデートで治るのなら根深いんだろうな、と思ってそれ以上は深く掘って調べてない。

Android 8 (Oreo) の EditText をタップするとクラッシュする - Qiita Android O Preview 3 AssistStructure View.getBoundsOnScreen NPE [62834931] - Visible to Public - Issue Tracker

「理科系の作文技術」を読んだ

 

 「理科系の作文技術」を読んだ。分かりやすい文章を書くために意識すべきことがまとまっていた。例を挙げる。

 

・理系の文章には意見と事実、どちらかしか含まれない

・意見と事実を区別する

・段落の頭にトピック・センテンスを書くように意識する

・逆茂木型にならないようにする

・出来るだけ1文を短く書く

 

 この本に書いてあることを意識して、今後は書くようにしたら良さそうだと思った。

 

 あとは「理系の文章は意見ではなく、事実が中心にあるべきだ」と書いてあって、それが印象に残った。それは、作文技術の話でもあるが、同時に理系を志すもののあるべき姿勢だと感じたからだ。"Shut the fuck up and write some code."という言葉とどこか似ている。

 

 そんな感じです。読書感想はまだ慣れてなくて、オチとかつけられないけど、読んだら、何でも良いから書いた方が定着に繋がりそうなので書いていく、ことにした。良さげな本あれば紹介してください。

 

 

* ブクログも始めました。良かったらフォローしてください。

『理科系の作文技術』のレビュー 木下是雄 (うじ川さん) - ブクログ