ナカザンドットネット

Android Developer's memo

Code SchoolのAngularJS入門がとても良かった

Ionicを勉強する機会があったので、基礎学習として元になっているAngularJSについても勉強してみました。

色々探してみて、最終的に公式サイトのメニューからたどり着いたのがCode Schoolのチュートリアルです。

www.codeschool.com

Code Schoolを利用したのは今回が初めてでしたが、動画レクチャーとハンズオンを交互に行うスタイルはインプットとアウトプットのイテレーションを素早く回せてよいですね。

また、授業の内容も上手に組み立てられていたように思います。一歩ずつ丁寧に説明してくれるので、頭の中にブラックボックスを作らずに理解を積み重ねていくことができました。特にありがたかった点は、一度たりとも$scopeが登場しなかったところです。

$scopeは使わなければならないのか?

続きを読む

珈琲倶楽部のホームページ戦略どうなってんだと思ったお話

普段からデスクワークが多い方々の中には、コーヒーを一日中飲んでいるような方を多く見かけます。私は睡眠に影響しやすいので1日数杯といったところですが、まあコーヒーは好きな方です。

さて、新潟市で生活していると「珈琲倶楽部」という喫茶店をよく見かけます。 会社の近くには笹口店があってときどき足を運んでいますし、ギークハウス新潟の近くには石山店がありました。

フランチャイズ展開で店舗数を伸ばしているらしいというのは風の噂で聞いていたので、職場の場所が変わったり家を引っ越したりした時には、近所にも店舗がないか探してみたくなりますよね。そんなときに役立つのが「店舗一覧」のようなページを持ったホームページでしょう。きっとホームページを探せば、近場の店舗も見つかるはずです。

しかし、それが難しい状況になっているのです。

okwave.jp

実は、前述の笹口店や石山店のリンクを見てみると、Webへの情報公開の方法がバラバラなんですね。

どうやらこの珈琲倶楽部、本部のようなところでホームページを取りまとめるようなことはせず、広報周りを各店舗に丸投げしているようなのです。独自性を尊んでいるのでしょうけれども、探す方からすると検索性が悪すぎです。単純に比べられるものでもないですが、おとぎや珈琲店あたりは見やすいのになあと感じてしまいます。

いい機会なので、現状を調べてみました。新潟でWeb製作している方は提案のいいネタになると思うので、なんとかしてくれると珈琲好きとして嬉しいです。

続きを読む

Code for Niigata 真夏のハッカソンに参加してきたよ #c4ngt

Code for Niigataのイベントがあったので参加してきました。

8/1-8/2に「真夏のハッカソン!」( #C4NGT )を開催します!! | Code for Niigata

前夜に突発的に参加を決めたため 家庭の都合により、2日間構成の1日目のみの参加となりました。しかも、

出入り自由ですので、ご都合の良い時間のみの参加でも全く問題ありません

と書いてあったので、完全に鵜呑みにして、13時から18時までという中途半端な時間だけいた感じでした。(自分が一番半端かと思ったら、夕方に1時間だけいた @ パイセンのほうが半端だったのでちょっと安心した)

色々と雑多に感想を書いていこうと思います。

会場について

f:id:Nkzn:20150802000042p:plain

http://tsubamesanjo-style.jp/

今回のイベントは、昨年の秋にオープンした、燕三条トライクというシェアスペース(コワーキングスペース?)で行なわれました。知りあいづてに存在は知っていたのですが、行くのは今回が初めてです。

感想としては、めっちゃ雰囲気のいい古民家でした。*1

*1:元商店らしいので、古「民家」ではないのだけれども

続きを読む

Icepickにノスタルジックな変更が入りました

ポエムです。

皆さん、Icepickをご存知でしょうか。ActivityやFragmentに書いたプロパティをSavedInstanceStateで保存/復元する責務だけを持つ、アンチAndroidAnnotations界隈では人気のあるAndroid向けライブラリですね。

このIcepickに、下記のコミットが行われました。

github.com

さよなら、@Icicle。

分かる人には分かる、寂しい変更です。この記事ではAndroid界の老害たちに向けて、昔を懐かしむ話をしたいと思います。

続きを読む

読み書きソロバンから、読み書きコンピュータへ

BBCさんの取り組みがあまりにもアツくて、ちょっと気持ちが盛り上がってしまったので、今回は珍しく、かなりポエミーな内容を書きたいと思います。

読み書きソロバンの時代から、読み書きコンピュータの時代へ。

英国BBC、ミニ基板コンピュータ『Micro Bit』100万台を無償配布。中1生全員にコーディング教育 - Engadget Japanese

全ての人がコンピュータを自在に操れる数十年後の世界に向けての取り組みが、どんどん増えてきています。

Scratch - Imagine, Program, Share

Kano - Make a Computer

こういった取り組みへのコメントを見ていると、「普通の人がコンピュータを覚える必要なんて無い」と言った意見を見かけます。これは、昔の下流階級の人々が「普通の人が文字を覚える必要なんて無い」と言っていたのと同じことだと、私は思ってます。

手紙を書くにも、文字の読み書きができる人を探してきて、お願いするなりお金を払わなければいけなかった時代。現代の、プログラミングができる人、できない人の関係と似ていますね。

プログラマーは職を失うのか

(私はプログラマーなので、ここから先の話はプログラミングに寄ります。コンピュータの広大な分野の中から一部分だけをピックアップすることをお許し下さい。)

こんな話をすると、「普通の人がプログラミングできるようになったら、プログラマーが職を失うじゃないか」という話が出てきますが、そうです、一般の人々が最低限作れるような、メモ書きレベルのプロダクトしか生み出せないプログラマーは職を失います。代筆を生業としていた人々も、同じく職を失っていったのでしょう (要出典) から、自然な流れです。

では、文章を書くプロの仕事はなくなったのでしょうか。そうではないのです。 作家、記者、詩人、作詞者、脚本家。現代でも、文章を書くことを生業にする人たちは、確かに残っているのです。

プロであるということ

プログラミングによってものを作る職業は、きっと無くなりません。

ですが、おそらく、他人に頼まれたものをそのまま作る、という仕事は、少しずつ少しずつ、なくなっていくのでしょう。だって、ちょっとしたものならば、世間一般の(私達の子の世代や孫の世代の)人々は、自分で作れてしまうのですから。現在でも、Excelを上手に扱える人々は家計簿ソフトなどを買うことなく、家計簿を電子的に作成・集計できている*1ことを考えると、その片鱗は少しずつ現れているとも言えます。(Excelの式を書く作業は紛れも無くプログラミングです)

基板となる技術が一般に普及した後にも、生業としてお金を稼ぐことができるのは、その技術を「上手く」使って、他人にとって価値のあるものを生み出せる人です。私は、そう思っています。

識字率の上昇に伴い職を失っていった人がきっといたように、識コンピュータ率の上昇によって、職を失う人々が出てきます。でもきっと、その後にプロの仕事として残ったものが、プログラミングの、エンジニアリングの、本質的な価値なのではないでしょうか。

10年後なのか50年後なのか分かりませんが、そんな時代がいつかやってきます。

その時に向けて、エンジニアとしての自分の価値を、見直し続けていけたらいいなと、そんな風に思うのです。

どっとはらい。

反省会

タイトルはソロバンとコンピュータの対比みたいになってたのに、実際には識字率にしか注目していなかったことに書き終わってから気がついた。まあ寺子屋教育が日本にもたらしたもの的なニュアンスでなんとか。

*1:もちろん、クラウドにアップロードしたりといった付加価値の点では、市販のものに分があります

勉強会の発表下書きにQiitaを使うスタイル

第40回勉強会(2015/02/21) - 長岡 IT開発者 勉強会(NDS)

第40回 長岡IT開発者勉強会に参加した皆様、お疲れ様でした。初心者Dayという名前ながら知見にあふれた良いイベントだったと思います。

さて、私は「Android再入門 〜Eclipseのことは忘れろ〜」と銘打ち、Android初心者向けにネット情報の取捨選択を行うにあたって考慮してほしいことを発表しました。

また、今回は講演内容をQiitaに下書きして、勉強会と同時に公開するという初めての試みも行いました。

Android再入門 〜Eclipseのことは忘れろ〜 #nds40 - Qiita

1週間で400ストックという凄いペースで伸びていて、承認欲求が大幅に満たされつつもビクビクしている日々です。

この記事では、今回試みたことを簡単に紹介したいと思います。

公開までの流れ

  1. 初期構想
    • Android Studio便利だよ!
      →でも情報が氾濫してるね
      →初心者向けに1度整理しよう
    • Eclipseへのdisはうっかり紛れ込んだだけで本筋ではないのです
  2. 全体構想
    • 概要(見出しレベル)をMarkdownでゴリゴリ書く
  3. 原稿作成
    • ↑に肉付けしつつ、Qiita向けの技術記事として当たり障りなさそうな体裁の文章をKobitoで書く
  4. スライド作成
    • 「原稿の内容を喋っている時に背景として表示されていてくれると嬉しいスライド」という観点でスライドを作成する
  5. 勉強会中にQiitaに原稿を公開
  6. 勉強会でセッションを発表
  7. 発表しましたレポとともにスライドを公開(本記事)

この順でやってみて、全体的には良かったと思っていますが、もちろんデメリットもありました。それぞれ紹介します。

悪かったこと

二度手間

単純に数だけ見れば資料を2本仕上げたことになるので、作業量としてはただスライドを作るよりも少し重くなりました。とはいえ、倍という程ではなかったと思います。

分量が測りづらかった

スライドだけを作っている分には、枚数を見ながら「1枚○分ずつは喋れるな」のような算段ができたのですが、Qiita向けの原稿を書く体で作っていると、実際に喋るときの分量が想像しづらく、作りすぎてしまいました。(実際に、15分枠だったセッションを30分枠に変更してもらうことになりました)

良かったこと

テーマの深堀りができる

技術記事として成り立つものにしようというスタート地点で原稿を書き始めると、スライドにキーワードを書き連ねていくよりも具体的に発表テーマについて検討することができます。また、スライドに比べて1つの見出しに書ける一連の情報を大きくできるため、情報に深みを持たせることができました。

細かい話題まで入った資料を公開できる

勉強会の後にSlideShareSpeaker Deckに資料を公開して、当日会場にいた人やいなかった人が見れるようにすることは一般的になってきています。公開を前提にしてスライドを作成する講演者も多いのではないでしょうか。

資料の公開自体はありがたいのですが、少し困ったことが起こります。喋る内容を概ね再現した資料を作成しなければならなくなるのです。講演者が読みながら喋るための「原稿としてのスライド」は、聴き手が読むことに集中してしまい、肝心の口頭の話を聞けなくなってしまう危険性を帯びています。

私の感覚では、講演スライドには2種類あります。

  • 資料としてのスライド
    • 後日読む分には、情報量も多く発表内容が伝わってくるいい資料になる
    • 会場にいると文字を追うのと話を聞くのが同時進行になって大変
    • MSの講演でよく見かける
  • 背景としてのスライド
    • その時喋っている内容を象徴するキーワードだけが載っているスライド
    • 聞き手が読む文字が最小限になり、話を聞いてもらいやすくなる
    • ジョブズ的なアレ

この2つのどちらを採用するかは、現場での読みやすさと公開時の資料としての価値を天秤にかけることになり、非常に悩ましいところでした。

ですが、今回のように「資料としての内容はQiitaに投稿する」と最初から決めてしまっていれば、迷う必要はありません。スライドだけなら冗長すぎて書けなかったような余談も含め、話題をガンガン深めていくことができます。

深めすぎた結果、喋れない分量になったらどうするって? そうなったらスライドを作るときに推敲して、省ける項目を原稿から省いてしまえばよいのです。

スライドがすっきりする

前述のとおり、「資料としてのスライド」を作る必要性が薄くなったので、「背景としてのスライド」に寄せられるようになりました。

文章量は極力抑えてみたところ、これまでのイベントでの講演に比べて、聞き手の目が僕に向いている時間がとても長かったように思います。ただ、当の僕が練習不足で、別途カンペを見ながらでないと喋れない状態だったので、聞き手のほうを見ながら喋ったりができなかったのが悔やまれます。

スライド作りにはそこまで時間がかからない

原稿にある内容を表現すればいいという性格上、新しくネタを考える時間は取られませんし、文章量も原稿に比べればかなり少ないです。そのため、原稿+スライドでかかる時間は、中身を悩みながらスライドだけを作る場合の1.5倍程度の時間でできるのではと思います。

まとめ

Kobitoで重厚な原稿を書いて、軽いスライドで発表して、Qiitaに公開する。このサイクルで、公開スライドが抱えていたジレンマが少し解消されそうです。

スライドだけを作ると話題が中途半端になってしまうような感覚を持っている方は、是非このスタイルを試してもらえればと思います。

宣伝

ウォーターセル株式会社では、農業分野でのITツールの開発・改善に一緒に取り組んでくれるAndroidエンジニアを募集しています。

農業IT分野がどんなものなのか話を聞いてみたいレベルでも結構ですので、興味のある方は@まで空リプを飛ばすなり何なりして、コンタクトを取っていただければと幸いです。

スティーブ・ジョブズ 驚異のプレゼン

スティーブ・ジョブズ 驚異のプレゼン

Android版ChatWorkアプリ内で使われているOSSを眺めてて見つけた15のライブラリ

12/10に、ビジネス用途向けのチャットサービス「ChatWork」のAndroidアプリが大幅リニューアルされました。

チャットワーク社といえば、国内有数のTitanium Mobileをガッツリ触っている会社としても有名ですが、今回のリニューアルではAndroid SDK + Javaによるネイティブ化を断行したようです。(ツール選びに関する感想は最後に書きました)

というわけで、Facebookアプリのときに続きまして、OSSライブラリのライセンス一覧を眺めていたら面白かったので、各ライブラリに感想を入れていきたいと思います。

ActiveAndroid

クックパッドAndroidアプリにおける最近のDB運用事情 - クックパッド開発者ブログ

クックパッドでも採用されて、苦しみの声が上がっているやつです。弊社では少し実用した後でContentProviderとの相性が死ぬほど悪い(検証当時)という理由でリプレイスしたことがある思い出深いライブラリでもあります。

現在ではContentProvider対応のPullReqがマージされたので、そのへんは解決されていると思われますが、作者が「5年以上ActiveAndroidやってきたけどさー、今の設計だとコレ以上パフォーマンス出ないんだよね。だから発想変えて別のO/Rマッパー作るわ!」とかぶっちゃけてて、今後の開発どうなるんだろう、と不安になるところです。 ただ、当のOllieとやらも数ヶ月更新が無いので、pardomさんが何かの拍子に我に返ったという可能性もあります。 (2015/1/19訂正:別ブランチで作業をしていただけなのか、全然活発に開発してらっしゃいました。)

後述のRealmと用途が被ってる部分もあるので、何と使い分けてるのかなという気持ちもあります。

とりあえず、O/Rマッパーとしての使い勝手や、クエリの発行しやすさで言えばORMLiteよりも楽な気がするので、良いライブラリだと思います(こなみ)

Android Priority Job Queue (Job Manager)

今回初めて存在を知ったやつです。やたら動く(+)ボタンで一世を風靡したPathが公開しているライブラリなんですね。

順番に実行したいタスクをAsyncTaskとかLoaderとかServiceとかで実装するのは大変手間なので、良い感じに順次実行してくれる的なやつでしょうか。便利そうです。

Butter Knife

安定のJW。(広義で)Squareからの刺客その1。

アノテーションによるfindViewByIdsetOnClickListenerの簡素化といったどこか聞いたことのある機能を提供してくれるライブラリですが、他のライブラリに比べると責務を絞ってあり軽量であるという印象があります。

今度弊社でも採用しようかなと思っているところです。

というかAndroidAnnotationsは重厚すぎて全力でロックインする覚悟がないと採用しづらいし、RoboGuiceはスーパークラスを汚染するしで他に選択肢がない

Chunk Templates for Java

今回初めて知ったやつです。

Java向けのHTMLテンプレートエンジンらしいです。このへんを見ると分かりやすいでしょうか。WebViewに表示を任せている部分があるということだと思います。

EventBus

出た!死ぬほど便利なやつ!

従来はBroadcast Intent+BroadcastReceiverなどで実現していた「ある場所から別の場所へイベントを通知する」という目的を良い感じに果たしてくれるライブラリです。一説では、Fragment→Activityの通知や、Service⇔Activityの通信はもう全部これでいいんじゃないかという話もあります。

もちろん飛び道具の類なので、多用すると状態が増えすぎて死ぬ危険が増しますが、適切に使えば強い味方になってくれるはずです。

FloatingActionButton

チャットワークアプリの新UIの中で、一番おもしろかった部分です。

今回のリニューアルの目玉の1つがMaterial Designへの対応でしたが、その中でもFloating action buttonの実現にフォーカスしたライブラリがこちらになります。

他にも makovkastar/FloatingActionButton(★1024) や FaizMalkani/FloatingActionButton(★450) がある中で、このライブラリが選ばれたのは、ボタンが増えるアニメーションの面白さでしょうか。

image

実際、チャットワークアプリの新UIをひと通り触った時は、僕もこの(+)ボタンを連打してしまいました。楽しいです。

しかしこれ、近いうちにappcompat-v7でサポートされて、リプレイスするかどうかの選択に迫られそうだなあ。ActionBarSherlock(→ActionBar)やViewPagerIndicator(→PagerTabStrip)が通ってきた道ですね。

Icepick

SavedInstanceStateを扱うのをちょっと楽にしてくれるライブラリみたいです。Android 1.6くらいの時代に使われていたIcicleという言葉が使われていて、古参の琴線をフルスイングで殴ってくる感じのライブラリになっています。

AndroidAnnotationsにも@InstanceStateっていう似たようなアノテーションあるけど、たぶんIcepickのほうがいい。

Joda-Time

java.util.Calendarがアホみたいに使いづらいのを何とかしてくれる神ライブラリ。あまりにも神すぎて、JDK1.8ではJoda-Timeにインスパイアされた形で"Date and Time API"(JSR-310)というのが入ったりしました。

参考: http://acro-engineer.hatenablog.com/entry/20130213/1360691391

ちなみに内部のメソッド数が4611個とかある(当社調べ)ので、dexのメソッド数65536上限問題に立ち向かうときには少しお気をつけて。

jQuery

言わずと知れたJavaScriptライブラリ界の巨人ですね。Chunkと組み合わせてWebViewに使っていると予想されます。

json-simple

公式のorg.jsonをシンプルにしたやつらしい。

たまにorg.json.JSONObjectorg.json.simple.JSONObjectが紛らわしくてアレなイメージしかないんだけど、動作が速かったりするんだろうか。

OkHttp

Squareからの刺客その2。お手軽な使い勝手のHTTPライブラリ。

現状、AndroidSPDYプロトコルが使える、数少ないネットワークライブラリなので、近年いろいろなところで重宝されているようです。

Picasso

Squareからの刺客その3。素晴らしい画像読み込みライブラリです。

URL, Drawableリソース, java.util.Fileオブジェクトなど、様々な形で画像を指定すると、とりあえずロードしてきてImageViewに放り込んでくれる素敵なライブラリです。画像表示はこれがないとやっていられません。

内部でOkHttpを全力で使って、画像のキャッシュにも対応しています。

Realm (realm-java)

iOSのCoreDataやSQLiteを置き換えるために生み出されたという、C++RDBMSライブラリですね。

@さんがたまに 言及しておられるような印象があります。

ActiveAndroid的なクエリ発行の使い勝手の良さも感じますし、速度が凄いとのことなのでちょっと興味はあるんですが、流石にプロダクトに使っていい品質ではないだろうなあと邪推して、今のところは手を出していません。

流石チャットワークアプリさん、チャレンジャーだぜ!

と思っていたんですが、チャットワークアプリver3.0.3ベースで本記事を書き始めた後、ver3.0.4でRealmがライセンス一覧から消えました。どうやらRealmを使うのをやめたようです。

やはり人類にはまだ早すぎたのでしょうか。

Secure-preferences

SharedPreferenceに保存するKey, Valueそれぞれを256-bit AESで暗号化してくれるやつだそうです。自分でやるよりは楽そうですね。

TimesSquare for Android

Square最後の刺客。カレンダーライブラリです。

おしゃれ感ありますよね(小並感)

まとめ

ちょいちょい攻めてる感じのライブラリ選定をしていてアツいなと思いました(既に1件思い直されていますが)。ただJSON周りはJsonPullParserとか使うと型安全にマッピングできていいんじゃないかなと思ったり(ステマ

あとやっぱりSquare社とJWに足を向けて寝られないことになっているアプリって多そうだなと再認識したところであります。

その他、RoboGuiceやAndroidAnnotations重すぎてつらいということを再認識できました。

チャットワークさんは社内チャットとして大変お世話になっておりますので、今後とものご繁栄をお祈り申し上げます。改めまして、リニューアルおめでとうございました。

余談:発足初期の技術選択について

やっぱりクロスプラットフォームツールは保守が大変だったのかなあ、と邪推してはいるものの、「だったら最初からJavaで作ればよかったのに」とは思っていません。

恐らく、初期のメンバーのスキルセットの範囲で、最も早く顧客に価値を届けうる選択肢がTitanium Mobileだったのでしょう。

サービス発足初期は、迅速にプロダクト(≒価値)をユーザーに届け、使ってもらいながらサービスのどの部分の価値を最大限に高めていくのか見極めるのも、また1つの戦術です。

「顧客に本来届けたいもの」が出来上がるまで顧客に価値を全く届けないことより、80%くらいの中核となる価値を真っ先に届けた上で、フィードバックを得ながら時間をかけて「本来届けたかったもの」を届ける。外部から見て、チャットワーク社はこれを実践したように思います。

というわけで、現代のサービスの立ち上げ方、育ち方として、良い事例が1つ生まれたなあと思う次第でございます。

12/15 9:20追記

チャットワークCTOの山本さんも、似たようなお話を講演されていました。既に公知の話題だったことを改めて書いた形になって恥ずかしい(´・ω・`)

自分がいなくてもうまくいく仕組み

自分がいなくてもうまくいく仕組み

自分がいなくてもうまくいく仕組み

自分がいなくてもうまくいく仕組み