ninjinkun's diary

ninjinkunの日記

Web+DB総集編にiOSアプリ黎明期にお世話になったモジュールの記事を書いた

先日発売されたWeb+DB Press総集編に記事を寄稿した。お題が「記憶に刻む、あのコード」ということだったので、自分がiOSアプリ開発を始めた際にお世話になったImageStoreというOSSの画像ダウンローダーについて書いている。自分の記事は「初見で動きがわかるコード」という地味なタイトルだが、このソフトウェアが今の自分のコーディングに与えている影響を考えてみた結果、これがしっくりきた。

内容の詳細は誌面に譲るが、この記事を執筆するためにImageStoreの作者のPsychs氏にコンタクトを取り、当時のスクリーンショットの掲載許諾をお願いした。氏にはスクリーンショットの使用を快諾していただき、その後も献本などの関係で何通かメールのやりとりをした。

そのやりとりの中、Psychs氏からの返信メールにとても印象に残る言葉があったので、許可をいただいて引用する。

ぼくはコードを書くときに
「全体の動きを把握しやすくて、誰でもあとからハックしやすい」
ようになるように心がけているので、コードからそういうぼくの考えが少し
伝わったのかなと思ってすごくうれしかったです。
そういう風にしたほうが、どんなプロジェクトでも
・長期的なメンテナンスコスト
・問題が起きたときの原因究明のコスト
・新しいメンバーが入ったときの学習コスト
といろんな面でコストが小さくなると思うんですよね。
今でもこの考え方は変わっていません。

自分はこれを読んだ瞬間頷いてしまった。これは自分にとっても目指すコードの形そのものである。

そして自分は10年前にImageStoreのコードから既にこのメッセージを受け取っていて、氏の言葉で今それが追認されたのだ…と一人納得したのだった。

自分の原点を振り返る機会をいただいた、Web+DB PressとPsychs氏に感謝したい。

WEB+DB PRESS総集編[Vol.1~102] (WEB+DB PRESS plusシリーズ)

WEB+DB PRESS総集編[Vol.1~102] (WEB+DB PRESS plusシリーズ)

家レモンサワー

  • ウォッカ: 30cc〜好きなだけ
  • ポッカレモン: たくさん入れるとおいしい
    • でかいやつを買っておくと良い
  • 炭酸: グラスいっぱい
  • 氷: 適当に

ポッカサッポロ ポッカレモン100 450ml

ポッカサッポロ ポッカレモン100 450ml

アルゴリズム・クイックリファレンス第2版を読んだ

現場プログラマーアルゴリズム再入門本(勝手に付けた副題)、アルゴリズム・クイックリファレンス第2版を読んだ。今年の2月に訳者の @hydrakecat さんから献本いただいていたのだが、感想を書くのが遅くなってしまって申し訳ない。

ちなみにこの本を読んでいる自分の背景を説明すると、一応大学は情報系だが、アルゴリズムや理論寄りの話は苦手。仕事ではスマートフォンアプリのコードを書くことが多く、アルゴリズムに直接触る機会はほとんど無いという人間である。

内容

第1版をぱらぱら読んだことはあり、コンパクトで読みやすい本だなと感じていた。第2版では赤黒木が削られたり、Pythonのコードが追加されたりしたようだが、受ける印象はそんなに変わってなかった(と言いつつ第1版と比較してみると、C言語の箇所が減っている)。

前の版から引き続き、とにかく実際に動くコード、実際の計算機での動き方にページが割かれている。アルゴリズムの性能比較についても、計算量の表記に加えて、実際に動かしたベンチマーク結果が付いているのは、この手の本としては珍しいのではないかと思う。

原題の Algorithms in a Nutshell をそのまま訳するとたぶん「アルゴリズムのかいつまんだ説明」という感じになると思うが、解説は本当に簡潔で、証明はほぼ省かれている*1

一方で、AIにおける経路探索(ここで言うAIはゲームの敵キャラクターの移動ルーチン)や計算幾何学は一般的なCSの教科書には含まれないものだと思う(ゲーム作りの教科書には書いてあるかもしれないが)。全体を貫いている簡潔さの方針からすると、ここを削ってもっとコンパクトにする手もあったと思うので、これはあえて入れているのだろう。アルゴリズムの多様性を知って欲しいという著者の意思を感じる。

最後の「12章 結び: アルゴリズムの諸原則」には実際にコードを書く上で大事なことがコンパクトに詰まっているので、ここだけでも読む価値があると思う。「汝のデータを知れ」「空間と時間のトレードオフを使え」「問題を別の問題に帰着させよ」という節のタイトルだけでもはっとさせられる。

おわりに

自分は定期的にCSの基礎を復習することには、思わぬ再発見があったり、書くコードに自信が持てる効果があると感じている。「このような強固な基盤の上に自分の仕事がある」と再確認できることは、ソフトウェア製品を作る自信を高めてくれると思うのだが、他のソフトウェアエンジニア諸兄はどうお考えですか。

何にせよ、アルゴリズムの勉強は競技プログラマーにはほど遠い自分のような人間にも楽しい。これからも時々本書を取り出して、ぱらぱらめくって楽しみたい。

アルゴリズムクイックリファレンス 第2版

アルゴリズムクイックリファレンス 第2版

*1:アルゴリズムの教科書としてはアルゴリズム・イントロダクションが有名だと思うが、かなりボリュームがある上に証明が多くて難しいので、自分にとっては正直に言って日常的に読むには重い。本書はアルゴリズム・インロトロダクションのさらにイントロダクション版というか、抜粋版としても機能すると思う。

iOSDC2017で「ディープリンクの設計と実装」について発表した

9/15-17に開催されたiOSDC2017に参加し、9/16の1日目に「ディープリンクの設計と実装」というタイトルで発表を行った。一休レストランアプリディープリンク対応を例にして、ユーザー体験から実装まで含めた話題を取り上げた。

Universal Linksの実装方法自体は既によく知られているので、自分の発表では実際にサービスに適用する際に困るポイントなど、できるだけ生々しい現場の話をするという方針で内容を組み立てた。スライドを見ていただければわかるが、自社アプリの宣伝も兼ねている。

また今回の発表後に、参加者からの投票で選ばれるベストスピーカー賞の2位を受賞した。発表で賞をいただくのは初めてのことで、とても嬉しい。「あるある」を詰め込んだのが良かったのかもしれない。

イベント中に各社のiOSエンジニアとディープリンク対応について話をしたが、皆共通して今のディープリンク体験はまだ微妙、うまく設計するのが難しいしパーツも足りていないという認識を持っているようだった。これは自分も同意で、現在のディープリンクは1ユーザーとして不自然に感じる点が多い。Webの文脈とアプリの文脈を繋げること自体、かなり無茶なことなのではとも思う。

事業者として見るとWebからアプリに誘導できるメリットは多いが、この流れを今後ユーザーが支持するのかどうかは注意深く見守っていきたい。

他のセッションも面白く、色々な人と話して大変楽しかった。参加者の皆様、iOSDC運営の皆様、ありがとうございました。

就職

6月中旬に株式会社一休に入社した。一休レストランという飲食店予約サービスを運営するレストラン事業部で、iOSアプリの開発を行っている(やっていることはコーディングとプロダクトマネジメント的な仕事を半々ずつくらい)。

一休はIT系としては比較的歴史が長い会社だが、

  • アプリの伸びしろの大きさ
  • 経営陣の面白さ
  • 自分で使って楽しいサービス

という点で、総合的に見て面白い経験ができそうと感じて入社を決めた。事前に二週間お試しで働いてみて、一緒に働くメンバーとも楽しく仕事ができそうなのがわかっていた点も大きかった。

元々飲みに行ったり外食することは好きだったのだが、一休では自社のサービスを自分で使ってご飯を食べに行き、その体験をまた製品にフィードバックして改善できる。自分の生活をサービスに反映できるところが面白い。

他にも、社長(金融工学、CS、コンサル系のバックグラウンド)が検索のおすすめ順やリコメンデーションのロジックを書いていたり、ユニークな点が色々ある。

一休の開発は東京のみなので、平日は東京、週末は京都という単身赴任的な生活をしている。東京では築地で友人とシェアハウスを始めた。

というわけで、東京と京都の皆さん、一休レストランを使って飲みに行くぞ。

無職の振り返り

今年に入ってから半年ほど無職をしていたのだが、最初は意識高くCourseraなどやっていたものの、Nintendo Switchゼルダを始めてしまい、結局ゲーム(ゼルダペルソナ5)ばかりして過ごしていた。

前回の退職時の一番の目的であった、妻の忙しい時期をサポートするというのは何とかこなしたものの、自分は仕事がなければ特に生産的なことはしないということがわかった半年だった。次に無職をやる機会があれば、コワーキングスペースを契約するなどしたい。

ちなみに、平均的な一日はこのような感じだった。

  • 朝7時に起きて朝食を作る
  • 妻を送り出して8時からハイラルを駆け回る
  • 昼食を作って食べる
  • ハイラルを駆け回る
  • 16時くらいに意識が高まればプールに行って泳ぐ
  • 夕食の買い物
  • お酒を飲みながら夕食作り
  • 帰宅した妻ともう一回飲み直す
  • 23時就寝

builderscon 2017に行ってきた

8/4-6に開催されたbuilderscon 2017に行ってきたので、印象に残ったセッションのメモを書いておく。

DeepLearningによるアイドル顔識別を支える技術

  • LINEのエンジニアすぎゃーんさんの発表
    • 元々は仕事と関係なく始めたけど、最近はAIプラットフォームClovaの部署に居るとのこと
  • やはりデータセットがキモ
    • まずこれだけのデータセットを作っているのがすごすぎる
    • 1年半分類し続けているとのこと。これだけ続けられるのがすごい
    • 最初からこれくらいやろうとは思っていなかった
    • 最初は5人のアイドルグループを識別するところから始めた
  • DCGANを使って非実在アイドルを生成するなど、データセットがあると分類以外にできることが広がる
  • 正面顔にこだわったりしているのが精度の高さの秘訣なのではないかと思った
    • OpenCVで顔の角度を出してデータを選定しているとのこと

複雑なJavaScriptアプリケーションに立ち向かうためのアーキテクチャ

  • このテーマについてここ数年情報発信をしているしんぺいさんの発表
  • 本当に重要なのはMVVMかどうかではなく、Presentationとビジネスロジックが分かれていること というのがよかった
  • 休憩時間にしんぺいさんとMVVMは一番難しいパターンなのではないかという話をした

真のコンポーネント粒度を求めて

  • CodeGridの中の人
  • CSSのクラスの命名どうするの?という話からコンポーネント
  • Object Oriented CSS、BEM、Atomic Designなど、最近の流れが一通り追えて勉強になった
  • 個人的にはEnduring CSSが衝撃的で、自分の考え方にしっくりきた
    • コンポーネントを共通化しない、不要になったらすぐに捨てられるようにする
    • 継承でパーツ作るの嫌いなので、個人的にはこれはしっくりくる。冗長でもええやん
  • フロントエンドエンジニア、デザイナーであればこの辺りの話は一通りフォローしておく必要がありそう

感想

昨年に続き今年も参加したが、大変楽しかった。インフラからフロントエンド、ネイティブアプリまでこれだけ広い領域のエンジニアが集まるイベントは他にないのではないか。ネイティブアプリエンジニアの自分がフロントエンドエンジニアとアプリの設計を比較して話をしたりできるのが、自分が感じるこのイベントの醍醐味である。

また来年もぜひ参加したい。

山種美術館

f:id:ninjinkun:20170302123848j:image

東京に住んで良かったことの一つに、山種美術館との出会いがある。恵比寿にある日本画専門の美術館で、自分は新しい展示が始まる度に通っている。

この美術館で好きなところは、作品との距離がとても近いことだ。たいていの作品は額まで寄って眺められる。細かい書き込みと大胆に省略されている部分を比較したり、絵筆の動きを想像すると楽しい。また、金箔が張られている作品などは光の当たり方で見え方が全然変わるので、体を動かしながら眺めると面白い。

今やっている日本画の教科書 東京編は山種コレクションの総力戦という感じで素晴らしかったのでお勧めしたい。

 f:id:ninjinkun:20170302124536j:image

基本的に写真は撮れないが、こんな感じでときどき許可されているものがある。

結婚退職無職

昨年11月に結婚し、2月に勤めていたFablicを退職して京都で暮らしている。

結婚

3年前に上京して、京都に住んでいる彼女と遠距離恋愛をしていたのだが、昨年末に結婚した。現在は京都で一緒に暮らしている。毎晩一緒にお酒を飲めるのが楽しい。

退職

会社を辞めた理由としては、会社が昨年夏に買収され、自分の中でスタートアップ欲求が一段落付いたというのが一つ。もう一つは妻の仕事が3月まで忙しいことがわかっていたので、せっかく結婚したのだし、しばらく一緒に居る時間を作ってサポートするのも良いんじゃないかと思い、このタイミングになった。

Fablicにはスタートアップの黎明期から拡大期に移るタイミングで入社し、フリルのiOSネイティブ移行、AndroidのMaterial Design対応、RIDEの開発など、様々な楽しいプロジェクトに関わらせて頂いた*1。また、自分のわがままを聞いてもらって、プロダクトマネージャー見習いをやるチャンスもいただいた。素晴らしい同僚と製品に深く感謝する。

無職

今のところは就職していない。妻の仕事がとても忙しい時期なので、自分が家で一通りの家事をやっている。と言っても二人暮らしなのでやることは知れていて、基本的に自分の時間は多い。知人には「僕が言う主夫は、主にAmazonビデオを見る夫の略です」と自己紹介している。

今後

今後については今のところ白紙で、時間はあるのでじっくり考えようと思っている。

東京はやはり仕事環境として魅力的なので、関西の会社を探しつつ、東京と京都を往復する生活をまた再開することも視野に入れているという感じである(東京勤務の場合、平日は普通に出勤、週末は京都に帰り、慣れてくれば週一くらいでリモート勤務できると嬉しい)。3月からは、いくつかの会社でお試し勤務をしてみる予定も入っている。

東京時代にお世話になった方々、ありがとうございました。また東京にも月一くらいで行くので、飲みに行くぞ。Skype飲みなら気軽に出てくるぞ。

関西の皆様、飲みに行くぞ。

Product Managers Japanは自分が幹事なのもあって、ときどき東京に行って続ける予定である。DroidKaigiのスタッフは幽霊部員になってしまってすみません…。

写真は退職記念に買った複製画*2。家で撮ると台無しな感じもありますが…

Amazonウィッシュリストこちらです。

*1:仕事でやったことはLinkedInに書いていこうと思っているので、細かいことはそちらで

*2:オリジナルは現在恵比寿の山種美術館で展示中なはずなので、そちらを見に行きましょう