シルバーウィーク中に北陸旅行したので、記録に残しておきます。
小蓮華-白馬岳縦走
まずは日本百名山であり、北アルプスを代表する山の一つである白馬岳に上ってきました。
白馬岳は一般的には長野県(東側)側の大雪渓と呼ばれる経路から登ることが多いのですが、今回は北陸側に来たので、糸魚川(北麗)方面の蓮華温泉経由で登りました。
北麗から登る場合、蓮華温泉~白馬大池~小蓮華~白馬岳というルートになります。
先週日曜日に海外のイベント告知サービスであるmeetupからイベント(もくもく会)に参加したのですが、これ英語力つけたいエンジニアにオススメなんじゃね、って思ったので書きます。
日本だと勉強会等のイベント告知サービスはconnpassやatnd, dots.などが有名どころかと思います。自分も勉強会を探す時や主催する時は大体これらのどれかのサービスを利用しています。一方海外だとmeetupというサービスがもっとも有名です。サンフランシスコにいた時は、あらゆるイベントがここ経由で開催されていた印象がありました。手前味噌なんですが、USに来たら入れるべきアプリについて書いた以下の記事でも、meetupを入れてます。
機能としての差異はconnpassなどとそれほど大差ありません。あえていうなら、SNS機能が結構充実しているところでしょうか。
例えば、参加者をフォローする機能などがあり、イベント後に連絡取りたい場合などに活用できます。
また、参加イベントに対して自由にコメントする機能もあります。ちょっとした質問をする際に気軽に使うことができます。
特に英語圏を中心とした海外で利用されているサービスということもあり、日本で開催されるイベントの多くが外国人によって主催されていたり、英語が主となるイベントが多いようです。
(自分が参加しているグループ)
meetupの機能にグループ機能というのがあります。グループに参加していると、そのグループで主催するイベントの告知が通知されて確認することができます。
その中でたまたまDev Japanというグループに参加していたのですが、そこでTokyo Developers Meetupなるものが開催されることを知りました。内容としてはいわゆるもくもく会のようなものだったのですが、休日にコーディングに集中できる場所が欲しかったので、参加することにしました。
(Dev Japanのコミュニティページ)
meetupに参加してみて感じたこととしては、 "これ、日本で英語環境に身をおきたいエンジニアに最高な環境じゃね?" ってことでした。
今回の参加者は15名ほどだったのですが、場所を提供してくださった方と自分以外は全員外国人でした。さすがmeetupといったところです。参加者はフリーランスのエンジニア、転職を見据えてプログラミング勉強中の人、はたまた自分のように作業場所を確保したい人など様々でした。また国としても中国、シンガポール、ブラジル、スコットランドなど色んな国の人がいましたが、もちろん共通語は英語でした。
とにかく始まった途端、初対面にも関わらずみんなぺちゃくちゃおしゃべりしながら作業していたのが印象的でした。
取り組んでいる作業とは別の仕事の話や、最近スタートアップ界隈であった面白い出来事などなんでもかんでも作業しながら話しまくります。ぼーっとしててもいきなり話しかけられたりします。
自分は最近勉強しているSwiftに取り組んだのですが、色々つまずくたびに隣に座っていたCookpadでiOSをやっていたというエンジニアに相談したり、おすすめの教材を教えてもらったりして、だいぶはかどりました。
(一枚だけ写真撮ってた。全然伝わらない現場の雰囲気...)
今日本で仕事探しているけどVISAをサポートしてくれる会社がない〜とか
◯◯って日本の会社に入りたんだけど、中途はどうしたら楽に入れるんじゃろか?とか
外国人同士で日本での仕事事情の話を聞けて、これは全然日本人が日本の企業にアプライするのとは違うようで、面白かったです。
今回日本では初めてmeetupを使ってイベントに参加したのですが、思った以上にインターナショナルな環境でしたし、もくもくする場でありながらアメリカっぽい雰囲気も味わえました。なので、
という方はぜひ一度meetupでイベントを探してみてはいかがでしょうか。
先日dots.さんが主催するAndroidオールスターズという勉強会で、"Android Clean Architectureことはじめ"と題して発表してきました。
資料はこちらになります。
www.slideshare.net
また資料でお見せしたサンプルコードは https://github.com/tomoima525/CleanArchitectureSample になります。プリミティブな形でサンプルをお見せしたかったため、ほぼデファクトスタンダートとなっているRetrofitとButter Knife以外のライブラリは利用せずに書いています。
最低限の実装なので色々荒くなってるし、テストガーとか言ってたくせにテストも書けてないので、後ほどもう少しブラッシュアップしてテストも書きます。気になる方はwatchしていただければと思います。
上記はUncle Bobさんの"Architecture is about Intent, not Frameworks"という言葉の意訳です。発表の最後でも話したのですが、結局のところ、設計はこの言葉につきるかと思います。
自分も、Androidの設計について色々調べ始めたきっかけは、1000行を超えるActivityやMVCと銘打ちながらもAndroid Frameworkが絡んでこんがらがってしまったコードをなんとかしたい、と考えたからでした。
今回は"The Clean Architecture"というUncle Bobが提案した設計思想をベースにした設計をご紹介しました。これ以外にも、MVVMやFacebookのFluxなど、様々な設計手法があります。一体何がいいのか迷ってしまいますが、これらのうちから一つ選んでまるっと採用する必要はなく、良いとこどりして出来る範囲で、コストに見合う形で、自分のサービスに取り込んで行けばよいのではないかな〜と思います。なので、資料でも、どこから手を付ければよいかの指針を書いています。
またチームで開発している場合、メンバーの意志を合わせていくことも重要になります。新しい手法を試す場合はチーム勉強会を開く、レビューで気をつけるなど、全員が同じ方向を向くように頑張らないと、設計が崩壊してしまいます。やっぱり意志が大事なんですね。
個人であれチームであれ、良い設計を通じて最終的には楽しく(ここ大事)迷わずサービスにフォーカスして作れることが一番だと思う次第であります。
自分がAndroid Clean Architectureを学ぶにあたって参考にしたリンクをまとめておきます。もうちょっと学んでみたいと思ったら参考にしてください。
MVP for Android
自分が見つけた中で一番シンプルなMVPの実装です。Daggerなどのライブラリを使わずにシンプルにMVPのアーキテクチャを実装しています。
説明: http://antonioleiva.com/mvp-android/
ソースコード: https://github.com/antoniolg/androidmvp
Introduction to Model View Presenter
こちらもMVPのサンプルです。ただ、自分で作ったライブラリも利用しています。
https://github.com/konmik/konmik.github.io/wiki/Introduction-to-Model-View-Presenter-on-Android
Effective Android UI
MVPの基本的な内容と、MVVMについても説明しています。
説明: http://www.slideshare.net/PedroVicenteGmezSnch/effective-android-ui-english
ソースコード: https://github.com/pedrovgs/EffectiveAndroidUI/
Architecting Android The Clean Way
恐らくClean Architectureをベースにした一番最初の設計なのではないかと思います。当初はシンプルな実装のようでしたが、今はDagger2, RxJavaを使ったものとなっています。
説明:http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/
ソースコード:https://github.com/android10/Android-CleanArchitecture
Clean Android Architecture
MVCモデルをいかに機能分割してThe Clean Architectureに持っていくか、についてまとめた資料です。とてもわかりやすく分割の過程がわかります。
https://speakerdeck.com/richk/clean-android-architecture
これから設計の話をしよう
@kgmyshinさんの資料。なぜ優れた設計をすべきかとAndroid で綺麗な実装をするための指針が大変わかりやすくまとまっている素晴らしい資料です。インフラ層の考え方などとても参考になります。日本語です。
http://www.slideshare.net/shinnosukekugimiya/ss-50705888
その他の方の資料はこちらにまとめがありました。当日の感想ツイートなんかもまとまってます。他の登壇者の方たちの発表はレベル高くてめっちゃ勉強になりましたし、改めてほんと精進しないと、って思いました。 会場を提供いただいたshibuya dots.さんは8月に出来たスペースとのことで、今までの会場にない、家のような落ち着いた雰囲気の場所でした。写真はテンパってて撮り忘れたのですが、Webサイトをみていただくとわかるかと思います。運営の皆様、ありがとうございました!
Android Studioでプロジェクトを新規で作る時、テンプレートは何を選択していますか?
テンプレートには自動でNavigation Drawerを生成してくれるものや、最近だと広告をつけてくれるものなど色々ありますが、実際のところ、Add No Activity
を選択するか、Blank Activity
を選択する人が多いのではないのでしょうか。
テンプレートはプロジェクト作る時に必ず通るのですが、正直あまりイケてると思えないので、今回もうちょっとましなテンプレートを作ってみました。
続きを読む
自分の過去のツイートをカレンダーでふりかえることができるTwitCalというツイッタークライアントアプリを作っています。このアプリではデータのキャッシュ、ロードにRealmというモバイル向けDBを利用しています。
Realmは高速なので、Listviewで3000件のデータを表示する場合もほとんどディレイはありません。 ただし、格納されているデータが10000件くらいになった場合に、速度の保証はありませんし、Out of Memoryも心配です。そこで、必要な分だけデータをロードし、下までスクロールしたら追加でデータを取得するようなListViewの実装をこころみました。果たしてRealmでこの実装方法が適切なのかどうか不明なので、Qiitaではなくブログに投下します。
最近開発ネタよりもアメリカ生活ネタばかりになっていますが、懲りずに生活ネタ書きます。
日本人には馴染みの薄いチップですが、色々わかってきたのでガイドブックには載ってない(あるいは曖昧に書いてある)けどありがちなパターン別にまとめてみました。