Hatena::ブログ(Diary)

Over&Out その後 このページをアンテナに追加 RSSフィード

2017-12-31

2017年の反省

ふりかえり的なことは先月に書いたのですが、

実際のところこの記事は上澄みだけすくい取ったようなもので、ここには書いていない反省や葛藤がたくさんあります。


いま12月31日ですが、その葛藤はいまも現在進行系で自分の中にあるなーという気がするので、やはり2017年の振り返りというか主に反省を書いておきたいと思います。


反省1: アウトプットが減った

技術記事をあまり書かなかった

自分のブログ(これ)はほとんど「◯◯しました」系の自己PR記事だけになり、Qiitaでも(この12月のアドベントカレンダーの時期を除き)ほとんど記事を書いていませんでした


フリーランス時代は仕事を減らしてでも勉強時間を確保し、勉強したことをアウトプットしていましたが、会社員になると週5日が自動的に埋まってしまいますし、発信することへの意識もだいぶ下がってしまった*1感があります。


iOS 11 Samplerを出さなかった

iOS 7のころから4年続けていたiOS Samplerシリーズ、今年はついにサボってしまいました。


例年8月ぐらいから始めて、そこそこ時間をかけて実装して、9月の正式リリースに合わせて公開、というスケジュール感なのですが、今年のその時期はiOS 11 Programmingの執筆で手一杯で、まったく無理でした。


せめてもの足掻きとして(成果物の横展開的な発想で)ARKit-Samplerを公開しましたが、それもサンプル数がちょっとしかなく、追加更新もできず、例年とは大違いです。*2


iOS Samplerはそもそも「自分で新APIを使ってみて、どんなもんか把握しておく」という目的で始めたもので、今年はiOS 11 Samplerをつくってないので、iOS 11の新機能があまり(実感として)把握できてないという普通に宜しくない状況です。


反省2: 「自分にとって唯一の技術スタック」で遅れをとってきている

「最近のiOS開発」がキャッチアップできてない

会社ではSwift書いてませんし、新しい技術の勉強としても、機械学習とかMetalとか3Dまわりをやってたので、

こういうあたりが全然キャッチアップできてません。ずっとiOSしかやってないエンジニアが、そのiOSでもメインストリームから遅れをとっている感。焦りがあります。


アプリ開発に対して腰が重くなった

ちょっと前までは、「iOSアプリをゼロから実装して、申請して、ストアに出す」という一連の流れは「簡単」という感覚だった気がするのですが、今ではすっかり腰が重くなり、既存アプリをアップデートするにしても、非常に大変な作業のように感じてしまいます。


経験を積んで作業の見通しがより正確にできるようになった(ので、大変に感じる)という面もあるかもしれませんが、割り切りが下手になった、頭でっかちになってしまった、という面が大きいように思います。


また、前述した、最近のベストプラクティスについてキャッチアップできてない、というところもあると思います。


自分はそもそもアイデアを形にするところが楽しくてiOSをやってきたので、アプリ開発へのフットワークの軽さは取り戻したいところです。


反省3: アメリカで働いてるのに、アメリカで勝負してない

僕は元来保守的で、不安やプレッシャーを過度に抱えたくないので、1つの重要なチャレンジをしているときは他のチャレンジは諦めてよい、と自分を赦すところがあります。


で、2017年は

  • 今は英語よりも新しい技術(Metalや機械学習)を勉強するのが重要
  • いまはとにかく本の執筆(iOS 11 Programming)が最重要

みたいな状況が続き、英語とか、アメリカ社会にあまりまともに向き合っていない1年でした。


具体的には、

  • 会社が健康保険も負担してくれてるのに、なんだかよくわからないし調べるのも面倒だから日本に帰ったときに病院行こう
  • そろそろクレジットヒストリーがたまって条件の良いカードをつくれそうだけど調べるのが面倒だから最初につくった日系企業のカードをずっと使ってる

とか、諸々そういう話。


あと、こうして日本語での発信を続けているのもそうだし、未だに会議で全然みんなが何言ってるのかわからない程度の英語力を放置しているのもそう。


同じ時期にサンフランシスコの会社に就職し、グリーンカード取得を見据えて働いている友人等を見ていると、しっかりアメリカと向き合って暮らしているな、と思います。「海外で暮らす」ということに伴う様々な困難に対して、彼らはしっかり向き合い、乗り越えている。僕はただ避けているだけ。せっかく海外で働いているのに、これでは世界が広がっていかない


総括

2017年の反省点をつらつらと書きました。単純に心構えや時間の使い方を改善するだけで対策できそうなところもありますが、これらの根底には、会社員とフリーランス、アメリカと日本、というところでの自分の中での葛藤、あるいは切り替えの中途半端さがあるように思います。そういうフワフワしたところのせいで、この1年の4分の3ぐらいは有意義だったものの、残り4分の1ぐらいはなんだか中途半端に過ごしてしまったような。2018年はこのへんの問題にちゃんと向き合い、優先度をしっかりもって行動したい所存です。


*1:仕事の依頼が来ても基本的には受けられないので。

*2:iOS Samplerシリーズは、だいたい公開時からサンプル数が20前後ありますが、それはたまたまではなくて、意識してそこまで持っていってます。(数の)驚きがないと、広がっていかないので。

2017-10-30

iOSDC2017で「飛び道具ではないMetal」という話をしました #iOSDC

9月15日〜17日の3日間にわたって開催された iOSDC Japan 2017 にて、「飛び道具ではないMetal」と題して登壇させていただきました。


発表資料はこちら・・・と普段ならここでスライドを貼るところですが、その前に、「あーMetalね。関係ないや」と思われた方。今回はむしろそういう方向けです。MetalのAPIを直接たたくことはなくても、UIKitの下回りでもMetalが使われていて、間接的に誰もがMetalの恩恵を受けています。今日はお祭りなので、そんなMetalにちょっと目を向けてみませんか・・・と、そういう内容です。「Metalをさわったことない人が、Metalについてわかった気になれる」というところをゴールとして設定して発表を構成しました。(そういう切り口でもないと、誰も興味がない話になってしまうので。。)




CfPに書いた内容はこちら。

WWDC17でもMetalのセッション会場は閑古鳥が鳴いてました。Metalって3Dゲームとかカメラアプリとかのトリッキーなエフェクト用でしょ、うちには関係ないなぁ・・・と思われている方も多いかもしれません。しかし、UIKitの下回りもMetalですし、色んな所で実はMetalは暗躍しています。そんなMetalにもっと多くの開発者に興味を持ってもらうため、非ゲーム・非カメラアプリ開発者にも関係しそうな切り口からMetalやGPUについて紹介してみたいと思います。


以上、前置きが長くなりましたが発表資料はこちらです。




今日公開されたばかりの動画がこちら。たった15分の短い発表なので、ぜひ見てみてください。



当日の様子・いただいた感想

絶対みんなこっち見に行くだろーっていうセッションが裏にあり、コアなMetalユーザがパラパラと来るだけだったらどうしよう・・・と思ってたのですが、ありがたいことに多くの方に来ていただけました。




こういう反響をいただきました。







あとNextstep.fmというPodcastで、sonson氏が『Metal書いたことなかったけど、「こういう感じなんや―」っていうのがわかってよかった』と言ってくれてました。



多くの方に期待した感じで伝わったようで良かったです。


お知らせ1: Metalについて書いた本が出ます!

ARKitの章とMetalの章を担当しました。


Metalの章は、新機能というよりどちらかというとゼロから入門するところに力を入れて書いています。また別記事で詳しく書きたいと思います。今日か明日にでもクラウドファンディングで購入された方々にはβリリースされて、近いうちに一般販売開始とのことです。


お知らせ2: try! Swift 2018に登壇します!

本日発表になりましたが、ついに念願かなって来年のtry! Swiftに登壇させていただくことになりました。


f:id:shu223:20171030085505p:image:w600


あと4ヶ月、ネタを推敲して臨みます!


2017-06-27

iOSの技術書をクラウドファンディングで執筆します - 共著者8人の紹介 #peaks_cc

「PEAKS」という技術書のクラウドファンディングサービスで、今日から9人の執筆陣によるiOSの解説書「iOS 11 Programming」のファンディングが始まりました。


f:id:shu223:20170626233655j:image:w600



9人の著者陣に僕も入ってるので、宣伝といえば宣伝なのですが、技術書大好きな自分としては、自分が入ってなくても絶対に買うであろう執筆陣/内容なので、いち読者としてもぜひとも成立して欲しいと思ってまして、本記事を書こうと思った次第です。


そう、念のため書いておきますが、クラウドファンディングなので、成立しなければ出ません😭

購入締切日時 2017年07月28日 23:59 までに、購入者数が目標の 500人 に達した時点で執筆開始となります。購入額の決済は、目標人数が達成された時点で行われます。(目標人数に達しなかった場合はプロジェクト不成立となり、決済は行われません。)


ページ内の著者コメントにも書きましたが、僕がお世話になった著書の執筆者であったり、いつもお世話になってる著名オープンソースライブラリのコミッタの方であったり、いつも素晴らしい記事を書かれている方であったり。期待しかない布陣なのです。


万が一それが伝わってなくても悲しいので、僕「以外」の方々についておこがましいですが簡単に紹介させていただきたいと思います。以下サイトに載ってる順に。*1


吉田 悠一 - Core ML

通称ソンソン(sonson)さん。「iOS SDK Hacks」のメイン著者のひとり。


iOS SDK Hacks ―プロが教えるiPhoneアプリ開発テクニック
吉田 悠一 高山 征大 UICoderz
オライリージャパン
売り上げランキング: 226658


2010年とかなり黎明期に書かれた本ですが、Method Swizzling や Accelerate.framework といった他著では扱ってないトピックについて書かれていて、その後何年も本書を開いて参考にさせていただきました。


コンピュータビジョンや機械学習を専門とされていて、今回Core MLについて書かれるということで、ブログ記事や他著にありそうなチュートリアルをなぞってみた的なところを超えた、「中身がわかってる人ならではの解説」が非常に楽しみです。


池田 翔 - Swift 4の新機能とアップデート

通称いけしょーさん。あの Carthage、ReactiveSwift のコミッタであり、Himotoki の作者です。Carthageというパッケージマネージャ、ReactiveSwiftというリアクティブプログラミングをするためのライブラリ*2、Himotokiという「Swift自体がそのコアコンセプトを後追いすることになった」JSONパーサの中身をコミッタ・作者レベルで理解している人が解説するSwift 4、読みたすぎます。


坂田 晃一 - Xcode 9 の新機能

僕は坂田さんと呼んでますがID的にはhuinさん。今年出版された「モバイルアプリ開発エキスパート養成読本」の著者のひとり。


モバイルアプリ開発エキスパート養成読本
技術評論社 (2017-04-11)
売り上げランキング: 38,762


iOSDC等のカンファレンスや勉強会でよく発表されていて、わかりやすくてためになる内容に定評がある方です。


加藤 尋樹 - Drag and Drop / Files と Document Based Application

通称すこんぶさん。try! Swiftの記念すべき第1回目に登壇されていました。

上記はすこんぶさんのブログですが、技術記事はいつも他の記事には書いてない「一歩踏み込んだ」内容で、めちゃくちゃ勉強になります。


川邉 雄介 - UIKitのガイドラインの変更点とAutoLayoutの新機能、アップデート

僕は川邊さんと呼んでますが、ID的にはjeffsukeさん。「よくわかるAuto Layout」の著者の方です。


よくわかるAuto Layout  iOSレスポンシブデザインをマスター
川邉 雄介
リックテレコム
売り上げランキング: 130,872


この本の紹介記事にも書きましたが、「こんなに詳しく、しかも噛み砕いててすごい」と驚く内容の良さでした。*3


ブログ記事もちょっと込み入った内容を綺麗に構造化してわかりやすく書くのが上手い方だなーと思います。


岸川 克己 - Core NFC / PDFKit / SiriKit

通称きしかわさん。きしかわさんです!Realm、try! Swiftの主催、色々な会社の技術顧問、KeychainAccessの作者等いろいろな顔がありますが、なんといっても岸川さんの勉強会等での登壇内容は、そのまま本にして欲しいぐらい詳しく、他で説明されてないような内容まで網羅されていて、それでいてわかりやすいです。


PEAKSクラウドファンディング第1弾は岸川さんの「Inside Swift」でしたが、ぜひとも成立して欲しい企画でした。目標部数が高すぎるからだ!と思わずPEAKSにアンケートでクレームを入れたぐらいでした😭


今回こそは成立させて、岸川さんの書く章を読みたいです。というか、「PDFKit」は何となく岸川さんが書きそうなイメージがありますが、「Core NFC」「SiriKit」というチョイスは個人的にはちょっと意外で、だからこそますます読んでみたい気持ちが高まります・・・!


所 友太 - HomeKit入門とiOS 11における新機能

僕は普通に「ところさん」と呼んでます。みんな持ってたあの「UIKit詳解リファレンス」を書いた方。


iPhoneプログラミングUIKit詳解リファレンス
所 友太
リックテレコム
売り上げランキング: 355,345


「よくわかるAuto Layout」の監修でもあります。あと #potatotips の創始者でもあります。


「UIKit本の次回作は書かないんですか?」と会う度に聞いてて「今書いてます!」と言ってたのに7年経ってもまだ出てないので、こういう機会でもないとなかなか書いてくれない気がしますw 所さんのHomeKit解説、ぜひ読みたいです。


永野 哲久 - Audio/Media関連 新フレームワークとアップデート

iOSのオーディオまわりをいじる人はみんな参考にしたあの「iPhone Core Audioプログラミング」の著者。


iPhone Core Audioプログラミング
永野 哲久
ソフトバンククリエイティブ
売り上げランキング: 88,410


2009年刊行ですが、オーディオ周りの低レイヤのAPIのうちのいくつか(大部分)はこの本にしか書かれてないことが多く、一時期は1万円を超えるプレミア価格がついてました。プログラミング界隈においてはだいたいの情報は英語が源泉ですが、この本をネイティブで読めるので日本語できて良かったーとまで思った一冊です。


この企画の話をいただくまで知らなかったのですが、実はPEAKSの中の人はこの永野さん。今回の発起人でもあります。


おわりに

もしかしたら個人的な思いがほとばしりすぎて宣伝にすらなってないかもしれません。。プロジェクトが成立(=購入者数が目標数に到達)してから執筆される本なので、ある程度内容については著者陣を信用してほしいということになりますが、ガジェット系等のクラウドファンディングと違って成立しなければ決済されないので、"支払ったけど本(電子書籍or紙の本)は届かない"ということはないのでその点はご安心いただきつつ、気になった方はぜひ応援の購入をしていただければありがたいです。



よろしくお願いいたします🙇🏻



*1:なお、紹介に出てくる著書はもちろん全て個人的に所有しております

*2:こういうの何て総称するんでしょう?

*3:「わかりやすいけど内容が薄い」、または「内容は詳しいけど公式ドキュメントの直訳でわかりにくい」(著者が咀嚼できてない)、というパターンは実際にたまに見かける

2017-06-07

【iOS 11】ARKitについてWWDCのラボで聞いてきたことのメモ

iOS 11から追加された、AR機能を実装するためのフレームワーク「ARKit」についてWWDCのラボ(Appleのデベロッパに直接質問できるコーナー)で聞いたことのメモです。注目のフレームワークなので行列ができてましたが、丁寧に色々と教えてくれたので、忘れないうちに書いておこうと思います。


f:id:shu223:20170608032933j:image:w600

(WWDCセッションスライドより)


既存実装とどう共存させるか?

先日の記事にも書いたのですが、今働いている会社のアプリ「Fyuse」はスマホで3D的な写真を撮るアプリで、その撮影を補助するために、撮影対象の周囲に3Dの「ARガイド」を表示するという機能をAVFoundation+Metal+SceneKit+独自の画像処理ライブラリ(トラッキング等)で実装しました。


f:id:shu223:20170606094825g:image


ARKitを使うとなると、要iOS 11以上、要A9以上のプロセッサという条件を満たす必要があるわけですが、当然2017年現在では多くのアプリはこれよりもっと広いiOSバージョン、iOSデバイスをサポートしたいはずです。


で、まず聞いたのは、そういう既存実装とARKitを共存させるのに、

if <# iOS 11以上 #> && <# A9以上 #> {
    // ARKitを使う実装
} else if <# 既存実装を使う条件 #> {
    // 既存実装
} else {
    // それ以外
}

みたいなのを避ける方法があったりしませんか?と。



回答:ない。ARKitを使うにはiOS 11以上、A9以上が必要だ。



・・・はい。そりゃそうですね。変な質問してすみません。でもせっかく来たので食い下がって聞いてみました。


「他のAR利用アプリもiOS 10以下はまだ切れないと思うけどみんなどうしてるの?たとえばポケモンGoとか」



回答:知らない。



・・・はい。そりゃそうですよね。(もし知ってても言えないですしね)



既存実装と比較したARKitのアドバンテージは何だと思うか?

質問が悪かったので、「じゃあ既に実装が済んでいて、ARKitを使うとなると既存実装にプラスしてバージョンわけが必要というデメリットがありつつ、それでもARKitを使う理由はあるのか」という観点から、我々の既存実装と比較したARKitを使うメリットについて聞いてみました。



→ 回答:

  • Appleの純正フレームワークは公開APIよりもっと下のレイヤーを利用した実装ができるので、サードパーティ製の実装よりもハードウェアに最適化されている。よってバッテリー消費量や処理速度の面で優れていると考えられる
  • ユーザーがタップしなくても、ARのセッションを開始した時点でシーンの解析が完了している(これは厳密には我々の用途にとってはアドバンテージではないが、「違い」ではある)
  • デバイスの姿勢も考慮してキーポイントを抽出してるので、デバイスを動かすと云々(すみません、実はこのへんちょっとよくわかりませんでした)

結局のところ、ARのシーンとしてはどういうものが検出できるのか

我々の要件としては、水平面に何かを置きたいわけじゃなくて、対象オブジェクトを囲むように3Dノードを表示したいわけです。


f:id:shu223:20170606094825g:image


ところがARKitは検出した床やテーブル等の水平面に何かを置く実装しか見当たらないので、「こういうのってARKitでできるの?」ということを聞いてみました。



で、回答としては、今のところ「水平方向」(horizontal)の「平面」(plane)しか検出しないそうです。


`ARPlaneAnchor.Alignment` というenumがありますが、実はまだ `horizontal` という要素ひとつしかなくて、`vertical` というのはまだありません。つまり壁のような「垂直方向の平面」を検出したり、我々のアプリのように人間や銅像や動物といった任意のオブジェクトを検出したり、そういうことは現状ではサポートしてないようです。


なので、ポケモンGoのようにキャラクターの3Dモデルを表示するタイプのARにはいいですが、我々のアプリのような用途や、実世界のものに合わせて何か情報を表示したり、みたいなタイプのARにも現状では向いてなさそうです。



どういう水平方向の平面が認識されるかについても教えてくれたのですが、ある程度の大きさが必要で、たとえばイスの座面は十分な広さがあるので水平面として検出されるが、背もたれの上(伝わりますかね?)みたいな狭いものは水平面としては検出されないと。



ただもう一つ提案として言ってくれたのは、検出したキーポイントはAPIから取れるので、それらを使って自分で垂直方向の面なり何なりを再構成することならできる、と言ってました。これはありかもしれません。


深度情報は使用しているのか?

たとえばiPhone 7 PlusのようにDepth(デプス/深度)を取れるようなデバイスの場合、それを使ってより精度良く検出するような処理を内部でやってたりするのか?ということを聞きました。



回答:使ってない



普通のカメラだけで精度良く動くようなアルゴリズムになっていて、デバイスによる処理の差異はないそうです。


おわりに

結論としては、我々の用途には今のところは合ってなさそうです。が、今後のアプリ開発の可能性を広げてくれる非常におもしろいフレームワークであることには代わりはないので、プライベートでは引き続き触っていこうと思っています。


2017-03-19

【書評】iPhoneアプリ開発講座 はじめてのSwift

現在の最新開発環境である Xcode 8、Swift 3 対応のiOSアプリ開発入門書iPhoneアプリ開発講座 はじめてのSwift』を、著者の諏訪様・出版社のSBクリエイティブ様よりご恵贈いただきました。


f:id:shu223:20170320135355j:image:w400



昨年12月に発売されたばかりで、Amazonで購入できます。Kindle版もあります。


iPhoneアプリ開発講座 はじめてのSwift
諏訪 悠紀
SBクリエイティブ
売り上げランキング: 45,845


他の入門書との違い

iOSアプリ開発の入門書は数多出ているわけですが、本書の特長としては、表紙にも、[著者の諏訪様による紹介記事](http://dev.classmethod.jp/smartphone/iphone/wrote-swift-book/)にも

何がわからないか? に対して真摯に向き合い、熟考し、執筆しました。

とある通り、解説がめちゃくちゃ丁寧です。


たとえば、iPhoneアプリ開発を行うためには、プログラミング言語であるSwiftを学ぶ必要があるわけですが、その前段階として、

  • 「プログラムとは」
  • 「プログラミング言語とは」
  • 「コンピュータがプログラムを理解する仕組み」
  • 「iPhoneアプリ開発のためのプログラミング言語『Swift』」

と、Swiftを学ぶ理由に至るまでを順を追って、実に丁寧に説明してくれます。



そしてなんとも図表/イラストが豊富


f:id:shu223:20170320142011j:image:w600

(この丁寧さ、「読者を絶対に突き放さないぞ!」という著者様の意志を感じます)


オールカラーで、ほぼ全ページに図が入っています。



あと素晴らしいと思ったのがこういうところ。


f:id:shu223:20170320143135j:image:w600


ソースコードについての解説、普通の技術書では、インラインのコメントで済ませちゃうと思うんですよ。こういう感じで。

// Carクラスをインスタンス化し、プロパティに値を代入する
let car = Car()
car.mileage = 200
car.usedFuel = 10

// FuelEfficiencyプロトコルに準拠したインスタンスとして扱う
・・・(ソースコード省略)

それを上の写真にあるような感じで全編でソースコードの要点を図っぽく示しているところ、これは実に手間暇かかってるなーと。



そして、筆者の諏訪さんは超有名なクラスメソッド社の技術ブログで非常に多くの投稿(累計406投稿!)をされている方なので、文章が非常に読みやすいです。


Amazonのレビューにもこう書かれていました。

外国人の私でもす一回でわかるぐらいのやさしい日本語で書いています。とてもわかりやすいです、プログラミング経験ゼロの方にオススメです。


目次

  • CHAPTER01 プログラミングの基礎知識
  • CHAPTER02 プログラミングを始めるための準備
  • CHAPTER03 Swiftの基本的な文法
  • CHAPTER04 Swiftとオブジェクト指向プログラミング
  • CHAPTER05 Swiftの発展的な文法
  • CHAPTER06 iOSアプリ開発入門
  • CHAPTER07 iOSアプリ開発レシピ
    • Recipe01 電卓アプリ
    • Recipe02 タイマーアプリ
    • Recipe03 マップアプリ
    • Recipe04 図鑑アプリ
    • Recipe05 写真ビューアアプリ

それぞれの詳細については、著者様ご自身による解説記事に詳しいです。


まとめ

最新の Xcode 8 / Swift 3 対応のiOSアプリ開発入門書「iPhoneアプリ開発講座 はじめてのSwift」を紹介させていただきました。気になる方はぜひAmazonの「なか見!検索」で試し読みしてみたり書店でチェックしたりしてみてください!


iPhoneアプリ開発講座 はじめてのSwift
諏訪 悠紀
SBクリエイティブ
売り上げランキング: 45,845


2009 | 08 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2013 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2014 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2016 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 11 | 12 |
2017 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2018 | 02 |