読者です 読者をやめる 読者になる 読者になる

Celeste Engineer

Androidとか自転車とか

#C90 アンドロイドアカデミア

技術書典に続き、夏コミでも TechBooster さんから新刊「アンドロイドアカデミア」に記事を書きました。

techbooster.github.io

Android Auto の API のうち、オーディオ周りの部分を紹介する記事ですが、単に Android Auto の API の使い方を紹介するだけではなく、Android Auto がどうやって動いているかも合わせて紹介しています。仕組みとしてはシンプルですが興味深いところも多々あるので、是非お手にとっていただければと思います。

はじめての同人誌即売会、はじめての技術系同人誌 #技術書典

それ早く言えよ!というツッコミもあるかとは思いますが、TechBoosterさんの技術系同人誌「AZ異本(アツい本)」でAIDLに関する「そんな使い方するの…」的な記事を担当しました。

techbookfest.github.io

techbooster.github.io

AZ異本は技術書典という技術系同人誌オンリーの即売会で出まして、現在はBOOTH.PMでも取り扱っています。

techbooster.booth.pm

TechBoosterさんで世に出る何かを書く、というのは密かに憧れていたのですが、今回の技術書典でそれがかなってとても嬉しかったです。 技術書典当日も売り子としてブースで来場者の方々が手にとって買っていくのを生で見ていました。これまでは電子書籍の売れ行きやQiita上のストックがたまっていくところでしか実感できなかったことが、直接自分の目で見て体感できたのはとても貴重な体験でした。同人誌即売会というもの自体がはじめてだったので、会場の雰囲気も、来場者の方々、出店者の方々の熱気もアツくて、これはすごいところに来たんだな(小並感)と思いました(気がついたらお昼を食べるのも忘れていましたw)。

執筆に関しては、執筆前から一通り書き終えてからのレビュー、出版後の誤字等の指摘に至るまで手厚くフォローしていただけて、初心者にもとても優しくかつ丁寧に対応してくださいました。本当にありがとうございました。

次の機会があれば、また何か書いてみたいです!

potatotips #30 Android まとめ

potatotips #30 の Android まとめブログです。

potatotips.connpass.com

発表内容

1. ken0331 - CDD(コンポーネント駆動開発)

コンポーネント駆動開発ということで、共通で使えるコンポーネントを用意して再利用性を高める、というお話でした。 Fragment をコンポーネントとして、ドメインに近い部分は Activity がもっておき、コールバックでやり取りをするというのが大筋の方針のようです。 個人的には、クリーンアーキテクチャのような"プレゼンテーション"、"ドメイン"、"データ"の3層構造が分かりやすくてよいなと思っているのですが、プレゼンテーションの部分の作り方に関しては、それはそれで色々なパターンがあるようです。コンポーネント駆動開発、というのはそのうちのひとつとしてとらえたほうが良いかなと思いました。

2. hkusu - RxJavaを活用する3つのユースケース

www.slideshare.net

RxJava の活用法として、とくに Subject を使った pub/sub の構造の作り方にフォーカスしていました Otto や EventBus などもありますが、これを RxJava でも行う、というものです。まだまだ知らないオペレータがあって、なるほどそうやって実現するのか!という知見であふれていました。 やはり、関心の分離とデータの流れがシンプルになるという点がよいですね。

3. nekoe - プッシュ通知の「開封」を検知する方法

プッシュ通知の効果測定はとても気になっていた話題です。 個人的には、プッシュ通知を配信しても通知経由ではなく通常のランチャー経由でアプリを開く「みなし開封」の技術が面白かったです。

4. Fumihiko Shiroyama - Realm for Android Tips

最近正式リリースとなった Realm の Tips です。transient なフィールドのための @Ignore をはじめ、RealmObject が POJO を作る際にも使えるようになっていたりと、ドンドン進化しています。 RealmRecyclerViewAdapter はかなり便利にみえました。RxJava にも対応しているので、トレンドにも乗っていて使い勝手の良さが伺えます。

5. shaunkawano - Introduction to AutoValue

Google が出しているコードの自動生成プロジェクトです。 POJO なエンティティクラスのフィールドを用意しておいて、アノテーションを付けることで apt で必要なコードを自動生成します。Parcelable の実装はいつもボイラプレートになるので、非常に便利ですね。 Gson や Moshi などのシリアライズフレームワークとも相性が良いというのは重要ですね。

6. yamacraft - FirebaseのAuth機能

Firebase での Auth 機能の解説です。非常に強力なバックエンドとして進化を遂げた Firebase ですが、もちろんアカウント管理も強力です。確認メールまでおくれるのは流石だと言う感じでした。 メールアドレスとパスワードによる通常のサインアップのほか、SNS 等のアカウントシステムとの連携もとれるので、Firebase を使わない手はないですね。 ただし、Goole Play が使えないと Firebase も使えなくなるのはちょっとした弱点かなという気がします。

7. magiepooh - How to detect phone call

speakerdeck.com

音楽や動画などのコンテンツを扱うとき、アプリ外で何が起きているかを把握し適切にハンドリングすることはとても大切です。今回は、電話を例にとって、再生中に電話が来た時のハンドリングの仕方のお話でした。 TelephonyManager で判別することも出来ますが、再生コントロールとしては AudioManager も使うことが出来ます。AudioManager をつかった AudioFocus の管理をすると、電話以外にも使えて便利です。

なまけ者メガネ

Twitter でなまけ者メガネが話題になっているところ、ソファーに寝そべってPCを操作することが快適だよとリプライをしたら、PrimeNow で爆速でメガネが送られてきました。

圧倒的感謝!!

Amazon ではいくつかの種類が売られていて、価格も様々ですが、どういうわけか 88%OFF な商品もあるので、たいてい 1000 円だせば買えるようです。

商品の画像を見ていただければ分かるとおり、真っ直ぐ前を向くとその 90 度下のほうが見えるようになっています。当然ながら視野は狭まることになりますが、余計なものが目に入らなくなるのでかえって集中するのに良い感じがあります。メガネ on メガネで使用できるのも Good。ただし重量があるので、もしかすると重量感が気になる人もいるかもしれません。少なくとも普通に上体を起こして使うと、メガネ on メガネは厳しいです。そんな使い方は想定してないのですが。

寝そべった時に PC はと言うと、だいたいはお腹に乗せることになります。掛け布団的なものか、それの代替品になるような柔らかいものがあると、MacBook のエッジに手を痛めることも無いでしょう。基本的にはこれで腕も疲れず楽な姿勢でコードが書けます。

もっと楽をしたい方は、ErgoDox と組み合わせて使うという手もあるようです。これならば、PC はお腹に乗せて、手はスッと両脇に下ろすことが出来ます。

寝そべってコードを書けば、椅子の座り心地に悩むことも、それによって腰をいためることもありません。高価なヘッドマウントディスプレイを買う手もありますが、これなら安価に環境が整えられますね!

umeda.apk #1

umeda.apk に参加してきました。

shibuya-apk.connpass.com

shibuya.apk の関西出張版ということで、面白そうだなぁと見ていたらお誘いをいただけたので行ってみることに。 今回のテーマは Google I/O の報告ということでしたが、自分は行ってすらないので、設計にまつわるトークをしてきました。

speakerdeck.com

Bento や Burrito のメタファーは、Twitter のエンジニアであるIsrael Ferrer氏の過去の発表やポッドキャストで取り上げられています。 ちょっとまえに Qiita で Bento や Burrito に見る設計といったような、ポエミーな記事も書いたのですが、今回はもう少しまじめに、こう言う設計にするといいよという話です。

MVP とか MVC とか MVVM とか、大きな単位でのパターンはいっぱいあるんですが、往々にしてモデルはでっかく一括りで"モデル"と呼ばれてしまい、放っておくとコントローラのように太っていきがちです。 そこでこのトークでは、オブジェクト指向の原則のうちのひとつの単一責務の原則と、最近話題の Clean Architecture を取り上げ、いかに弁当のようにきれいに仕切られたモデルを作るかというところにフォーカスを置きました。

Clean Architecture で注目すべきは、いわゆるモデルと呼ばれる部分が2層に分かれている点です。厳密には、画面にも状態はあるので、その状態をもっておくプレゼンテーションのレイヤもモデルと言えばモデルですが、データをやりとりしたり、与えられたデータをもとにビジネスロジックを動かす部分は2層あります。

ひとつはリポジトリやデータレイヤと呼ばれるような部分で、非同期処理でくるんで使う部分のおおくがここに入ります。REST を叩いてデータを取り出す・変更する・作成する・削除する部分や、データベースの操作など、一番データソースに近い部分がこのデータレイヤで、作り方のパターンとしてはリポジトリパターンを使うと良いようです。 REST、データベース、メモリキャッシュなどはこのリポジトリでまとめて取り扱いますが、クラス自体は分かれます。そのため、画面に近いレイヤからみた時に扱いやすいよう、分離されたクラスをひとまとめに扱うインタフェースを用意します。最近は Rx が主流になりつつあるので、Observable を返すようなインタフェースを用意すれば便利でしょう。

リポジトリができたら、そのリポジトリとプレゼンテーションをつなぐドメインの部分を作ります。このドメインの部分がないと、リポジトリが散らかるか、プレゼンテーションが太るかになってしまう為、ドメインの部分を必ず用意します。

リポジトリはアプリケーションでシングルトン、ドメインドメインごとにシングルトンであれば良いと思います。

そういうわけで、金曜日は大阪で一泊、土曜日は半日大阪を観光して帰ってきました。また機会があれば行ってみたいですね!

正丸峠〜定峰峠

先週末はまた秩父にでかけました。所沢街道から国道299号を通り、正丸峠を超えて秩父まで。帰りはどうしようか迷いましたが、一度寄居方面に出て考えてみたところ、定峰峠という面白そうなところがあるのを見つけたのでそちらを通って帰ってきました。総行程168kmは久々の長旅でした。

正丸峠は何度も来ているところですが、やはりいつ来てもキツイですね。調子に乗ってアウターで登りきりましたが後々の足があんまりもってなかったです。 そういえば、正丸峠は心霊スポットとしても知られているようです。昼間にしか来ないので何も気にしたことはありませんが、狭い山道で鬱蒼と木々が生い茂っているので、そういうこともあるのかなという気はします。

秩父の街に降りてから、一旦羊山公園を見に行くことにしました。これがやってしまったなあという感じなのですが、西武秩父駅側から羊山公園に向かうと、小高い丘の上にある羊山公園に行くために鬼のような斜度の坂を登るはめになります。坂の長さは大したことはありませんが、一気に小高い丘を登るので斜度がきつめ。完全に足を使ってしまいましたorz

そこから国道に戻って、定峰峠へ。

定峰峠は県道をひたすらゆっくり登る道で、5km〜7kmくらいずっと登り坂が続きます。ただ斜度自体はゆるやかです。途中自転車のラックが置いてあるお茶屋さんがいくつかありました。麓の当たりにもそういうお店があって、沢山自転車が停まってたのでそこで休めばよかった……

定峰峠は自転車乗りがよく集まってくるそうで、その日も沢山の自転車乗りの人たちとすれ違いました。また、峠から分かれている道を行くと、秩父周辺にあるいろいろな峠にもたどり着けるそうで、次に来るときはそちらに向かってみたいとも思います。

最近は地図を見ると必ず峠を見るようになってきました。またいろいろ山を走りに行ってみたいですね。

青梅街道〜奥多摩湖〜都民の森〜五日市街道

久々のロングライドにでかけました。総行程140km、いつもは奥多摩湖を見たら引き返していましたが、都民の森までチャレンジしてみることにしました。

うわさに違わず、延々と続く坂がしんどかったです。半分くらいはインナーローでジワリジワリ登っていた気がします。 途中の開けたところにある駐車場で一旦休憩し、ヒルクライムを続行。下りはスピードが出過ぎないよう気をつけました。

初めてなのもあってか、本当に峠に到達するまでが地獄のように長くて、ああいう時に心が折れないようにすることと、ペースを上げすぎず下げすぎずのところをうまく維持するのって大事なんだなと思いました。 帰ってきたらクタクタになってましたが、気力を振り絞ってカレーと肉を準備して食べました。うめぇ!

いよいよ梅雨に入ってしまいましたが、引き続き折を見て運動するようにしないと……