Hatena::ブログ(Diary)

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

2015-08-26

もくもく会@ベルリン

世界を旅するプログラマやデザイナーの集団『Hacker Paradise』というコミュニティに参加し、19日間の旅程でドイツはベルリンに滞在しております。今日で4日間が経過したところなので、ファーストインプレッション的なものを書いてみたいと思います。


"Hacker Paradise"とは?

もともと、主催の2人*1がノマド的に仕事をしながら旅をしていて、楽しいけど毎回場所を変わる度にコミュニティを離れるのが寂しいと感じて、それなら自分たちでコミュニティをつくろう、ってことで今の形になったそうです。



滞在する国は4週間ごとに移ります。今はドイツ、前回はバルセロナ、その前はエストニア、、、といった感じで。(僕はドイツの4週間のうち、後ろの2週間から参加したかたちになります)


参加は有料です*2。渡航費、宿代という普通に旅行に必要なものはここには含まれていなくて、彼らが提供するのは以下の4つ。


f:id:shu223:20150826092850j:image:w600


というわけでざっくりいうと、彼らが異国の地に作業場所を用意してくれて、そこに集う仲間に入れてもらえる、というわけです。


基本的には皆何かしら取り組むことを決めて、それぞれもくもくと作業します。それを週始めに宣言したり、週の終わりに発表したりといったしくみもあるので、僕的にはこれは「旅するもくもく会」みたいなものかなと思っています。


参加目的

理由は大きく2つありまして、ひとつめは、先日チケットもないのにWWDCの会期に合わせてサンフランシスコに行ったらすごく良かったので、定期的にこうして仕事とは関係なくリフレッシュして新しい技術の勉強とかをする機会を持ちたいなーと。


もうひとつは、先日書いた記事みたいに、海外からもフリーランスとして仕事をとれるようになりたくて、その足がかりを何かつかめないかなと。ベルリン滞在中に無料でちょっと手伝ったりして、その後もiOSの仕事があればお呼びがかかるようになるのが理想だけど、それが難しければ海外から仕事を受けるにあたって何が不足しているかの感覚だけでもつかめればと思っています。


スカイプ面接

参加にあたっては、20分〜30分ぐらいの簡単なスカイプ面接があります。次のようなことを聞かれました。

  • これまでどんなプロジェクトに取り組んできたのか
  • iOS を始めたきっかけは?
  • Hacker Paradise に参加したらどんなことをやる予定か
  • どの期間に参加する予定か(ベルリン4週間なのか、2週間なのかとか)

最初から僕が iOS エンジニアで、ということが前提で話が進んだので、こちらがフォームに入力したプロフィールとかはあらかじめ目を通してくれていたようでした。


準備

前述のような参加目的が既にあったので、ベルリン滞在中は日本でのお客さん仕事は一時停止させていただくべく、面接合格のメールが来てすぐに、お客さんへの連絡・調整を行いました。


あとは普通の渡航と同様、航空券購入とAirbnbでアパート借りたぐらい。


ドイツは行ったことがなく土地勘もないので、事前にHacker Paradiseの中の人にワークスペースの住所を聞いて、そこから近いところを借りました。


(築100年ぐらいの渋いアパート)


航空券はボーッと数週間放置してたら当初14万円ぐらいだったのが24万円ぐらいに値上ってました。ドイツの都市の中でも特にベルリンは経由便しかないのでこういうことになりやすいので要注意です。


ベルリンに来てからの4日間でやったこと

Hackday

ベルリンに着いてすぐ、Hacker Paradise がやっていた Hackday というイベントに参加しました。ハッカソン的な名前がついてますが、チーム分けとか賞とかはないので、これももくもく会的なものでした。


僕は Interface 4月号にあった「生体センシング入門」を読んで信号処理をまたちゃんとやりたいと思っていたので、



「Apple Watch(watchOS 2)の加速度センサデータをiPhone側で受け取ってリアルタイムにFFTかけてスペクトル表示する」というものをつくり、プレゼンしました。


(こういうプレゼン風景でした)


つくったもの自体は、英語力不足によりイマイチ伝わらなかった感があったのですが、

I came from Japan yesterday, so it's my first day for Hacker Paradise!

みたいなことを冒頭にいったらみんなワーッと拍手してくれて、何ていい人たちなんだ、と思いました。


Group Lunch

イベント名から察するにグループに分かれるのかなとか思いましたが、全員でのランチでした。


f:id:shu223:20150826153127j:image:w400


一応この日が正規の初日(Hackdayは休日開催)だったので、ここでも改めて自己紹介させてもらい、またワーッと拍手してくれました。みんな超親切。


で、ひとりひとり順番に「今週やること」を話していきます。僕は "I'll work on my open source project." といって、iOS-9-Sampler の説明をしました。誰も iOS エンジニアじゃないのであまり伝わってない気がするのですが、みんな「ワオ、クールだね!」と言ってくれます。


他の人達は、Python で機械学習に取り組む人、フロントエンドのフレームワークをつくってる人、Arduino で何かやってる人、普通にリモートワークしてる人など色々。


意外にも、リモートでどこかの誰かと一緒に仕事してる人は多いけど、わりとHacker Paradiseのメンバー同士でコラボしてるケースは少なそうな印象を受けました。


もくもく開発

iOS 9 の新機能について調べつつ、iOS-9-Sampler を絶賛開発・・・といいたいところですが、実際のところまだ半日弱ぐらいしか作業できてなくて、既存サンプルの修正(適当にやってるところをちゃんと公開できるようリファクタしたり)とREADMEとかの整備をして、Privateリポジトリにpushするところまで。


他に音声処理(DSP)や画像処理周りの勉強とかもやりたかったのですが、手がまわらず。


Coffee Chat

あまり普段話さない人と話すきっかけになるように、主催側が(以前とかぶらないように)ペアを決めて、コーヒー代あげるのでお茶してきてください、みたいな催しです。僕はアメリカからきたプログラマのLanaとペアになって、小一時間コーヒー飲みつつしゃべりました。


僕は大勢だと全然その会話スピードについていけなくなるので、1対1で話すお膳立てをしれくれるのはほんと助かります。しかもLanaは超ゆっくりしゃべってくれて、とても話しやすかったです。


ごはん

昼や夜にワークスペースにいると、だいたいごはんに誘ってくれます。


(主催の Alexey (左)と、コロンビアからきたデータサイエンティストの Juan (右))


ドイツに来たからにはビールだ!クラブだ!という感じではなく、仕事がまだ残ってれば水、ビール飲むとしても1杯、とか結構みんなそんな感じです。(クラブに行ったりがっつり飲んだりしてる人たちもいるかもしれません)


Goodpatch ベルリンオフィス訪問

現地の会社のオフィスを見学させていただきつつ、あわよくばフリーとしての仕事のチャンスを探るべく、ツテを辿ってGoodpatchさんのベルリンオフィスを訪問させていただきました。


f:id:shu223:20150827194328j:image:w400


とある案件の見積もりについて話し合いました。まだどうなるかわかりませんが、もしかすると仕事につながるかもしれません。とにかく最高に親切な方々でした。いつでもオフィスに来て作業していいよ、といっていただけたのでまたお邪魔しようと思います。


湖へドライブ

色々縁あって、ドイツに住んで働いている日本人の方々とつながり、ベルリンの北の方にある湖へ連れて行っていただきました。



すごい水がきれいでみんな泳いでてうらやましかったので、僕も(パンツで)ひと泳ぎしました。そのあとはドイツ肉をかこみつつビール。みなさん魅力的な方々ばかりでとても楽しかったです。


おわりに

Hacker Paradise が契約してくれたコワーキングスペース「Betahaus」のこととか、費用的なこととか、他にも書こうと思っていたことがたくさんあるのですが、長くなりすぎたのでまたの機会に。引き続き有意義な滞在になるよう楽しみつつ精進します!


*1:今はOrganizerは4人

*2:サイトでは公開してないようなので控えておきます

2015-08-15

GitHub経由で海外から仕事が来た話

はじめて海外から(フリーランスとして)仕事をいただく、という貴重な経験ができたので、その経緯などを書いてみたいと思います。


きっかけ

7月末のある日、知らないメールアドレスから英語のメールが来ました。内容を一部だけ抜粋すると、

We are looking for someone to develop a very simple apple watch app and a companion apple phone app.


というわけで、Apple Watch アプリをつくって欲しい、とのこと。内容を読むと加速度センサとジャイロを使いたいそうで、必然的に watchOS 2 案件になりそうです。


メールには明記されてませんでしたが、GitHub で公開している watchOS-2-Sampler を見て連絡くれたのかなと。(※もちろん面識はなく、共通の知り合いもいないので、これ以外にわざわざ海外にいる僕に依頼してくる理由が考えづらい)


f:id:shu223:20150815125651j:image:w500



会社名も書かれていたのでググってみると、イスラエルの会社のようです。メンバーもLinkedInのプロフィールを見ると某世界的大企業の出身で、学位も持ってて発表した論文とかも載ってるので、怪しい感じではない、というかむしろすごいレベル高そう。


実はちょうど(フリーランスとしての今後を考えると)海外からの仕事もやりたいと思っていた & watchOS 2 を案件でやりたかったのもあって、前のめりに食いつきました。

I'm interesting for the work to build an watchOS 2 app.

(2015.8.16追記:はてブコメントで「そこは "I'm interested in" でしょ」ってツッコミを何件かいただきました。。恥ずかしいですがこんな英語でも全然やりとりできたという事実にも価値があると思うのでそのままにしておきます)


受注するまでのやりとり

工数や金額の提示

相手からきた最初のメールに(簡単に)こういうものをつくってほしい、ということが書いてあったので、僕も最初の返信から「こういう内容で、日単価○ドルで、○日でやります」と明記しました。

My freelance fee is $xxx / day. I can develop the watchOS 2 app with following features in 2 days:

  • ・・・・(機能1)
  • ・・・・(機能2)

単価は、普段日本でやってるのと同等の価格を提示しました。イスラエルの相場とかよくわからないので。それと安く済ませるためのオフショア、というよりは watchOS 2 実装がちゃんとできそうな人を海外からわざわざ探してきた、という位置付けなので、安売りする必要もないかなと。(とはいえシリコンバレー相場からすると安い)


また工数の見積もりは、だいたい1日もかからずできそうとは思ったのですが、watchOS 2 はまだベータで不安定なのでそのあたりで色々ハマるかも、というのと、

  • 加速度センサの値をインターバル x [ms] で取得し、それを iPhone 側に n 秒ごとに送る
  • データ(加速度センサ値)のロストは NG

という要件があり、取得インターバルがかなりギリギリ(短い)で、こういうのは実際にやってみるとウォッチ側の処理性能やBLEの通信速度的な部分やでどうのこうのありそうだなーというのも加味して2人日としました。


要件確認

あとちょっと要件的に気になる部分について確認しました。ジャイロの値は今のところフレームワーク的には用意されてるけど、実機でやってみると取れないですよ、とか、前述した加速度センサ値の取得インターバルや、Watch <-> iPhone 間の通信速度に関する懸念とか。

However we can't get gyroscope data from Apple Watch for now. You can try with my OSS (https://github.com/shu223/watchOS-2-Sampler). In addition, ・・・(他の要件についての懸念点)

このへんはいち開発者ではどうにもできない場合もあるので。。


以上が僕からの最初の返信メール。


条件の調整

で、それについての先方の返信があり、会社の詳細・ビジョン・プロダクトの説明とか、もっと具体的な要件とかが書いてありました。その具体的な要件が、最初のメールよりも増えてたので、「それなら4人日でやります」という旨の回答をしました。


そしたら、「なぜ2倍になったんだ?どの要件を減らせばどれぐらい減るの?」という質問が。


どれがどう、というよりベータ版での開発に携わる際の直観的なものしか根拠としてないので、その旨を正直に伝えました。

Both 2 days and 4 days, they depends on my rough feeling. It may takes more or less.

(2日にしろ4日にしろ、なんとなくの感覚なので、もっと伸びるかもしれないし、縮まるかもしれない。・・・と言ってるつもり)


さらに、次のように提案しました。

  • 3日で終わったら、3日分だけ請求します
  • 3日で終わらなかったら、その時点での状況と、あと何がどれぐらいかかりそうか、を報告するので、引き続き作業を進めるか、やめるかを選択してください
    • それ以上進めないことを選択した場合、その時点までの成果を受け取るかどうかを選択してください
      • 成果を受け取ることを選択した場合、その3日分を請求します
      • 成果を受け取らないことを選択した場合、一切請求しません

こちらとしては「やってみないとわからない」ことがほとんどなので、こういうやりとりで平行線をたどるよりは早く手を動かしたいし、最悪お金にならなくても watchOS 2 の知見は得られる(そしてブログとかに書ける)ので数日ぐらいならアリかなと。


だいぶ変則的ですが、先方の返答は、

We would like to hire you to develop these apps (iphone and apple watch).

The conditions you stated sound fair.

フェアだね、よし、任せよう


というわけで無事受注することができました(実際は技術面でもっと細かいやりとりがあったのですが、長くなるので省略)。


ここまでメールは5往復。


開発

その3日間について、いつといつといつでやります、ということは明示してましたが、当日に先方から「ちゃんとやってるか〜?」とか聞いてきたり、スカイプで何か話したりとかはなく、完全に任せてくれてました。ただ向こうも心配はあると思うので、「そろそろ作業始めます」とか、1日目の終わりにもちょっとメール送ったりとかはしました。


本当のところは、3日分の作業を1日で終えて、「もう終わったよ、請求は1日分でいいよ」「まじか!すげーな。次も頼むよ」みたいな展開を狙ってたのですが、watchOS 2 beta のあれやこれやにハマって(watchOS 2 の技術的なことはまた別記事で書こうと思います)、結局2日かかって完了。


作業報告

実装的には要件は満たしたのですが、どう考えても watchOS 2 beta 自体のバグとしか思えない挙動 *1 があり、それにより実機ではある要件を満たせないという部分がありました。そこをどう説明し、納得してもらうか、はけっこう悩みました。


前述したような条件なので、Xcodeプロジェクトをいきなり送ってしまうと相手がその成果に満足しない場合に何ももらえなくなってしまうので、まず、実装自体はできていることを証明するため、シミュレータではきちんと動いている動画を撮影し(シミュレータでは加速度センサ使えないので、そこはダミーで値を生成するモードを実装しておいた)、その上で、実機ではどういう問題が起きているのか、それについてどんな検証を行い、なぜAppleの問題(watchOS の問題)と考えるのか、どんな対策が考えられるかといったことを整理して書きました。


代替実装も行っておき、その動画も撮影して送りました。


プラス、僕としては初めてのお客さんなので、早く最初の入金までこぎつけたく、

  • まだ不足がある、追加要望がある等あれば、8月○日にもう1日作業できます
  • これで十分であれば、Xcodeプロジェクト一式を送り、2日分だけ請求します

と書きました。


そんなこんなで作業報告メールはレポートはこの記事よりも長くなり、2〜3時間はかかったわけですが、先方は「言ってることは筋が通ってる」と実機では要件を満たせていない件について理解してくれ、代替実装案についても同意してくれました。


で、まずこの2日分は入金した上で、プラス今後も作業をお願いしたい、と言ってくれました。


その後、あれこれ送金方法の調整があったのち、すみやかに送金していただけました。


所感

一連の流れから汲んでいただけると思いますが、すごく理解があり、信頼できる良い方たちでした。分野的にも watchOS 2 は興味のあるところなので、ぜひ今後も一緒にやっていきたいと思っています。


ただ、数人日の小さい案件なので、比較的ざっくりした感じで進められたものの、もっと大きい案件だとこうもいかないかもしれません。そういった場合に、

この記事に書いたみたいに、見積もり型ではなく、(ある程度の信頼関係を築いた上で)先方のオフィスまで行って、2週間とか一緒に作業して帰る、みたいなやり方ができたら理想的だなぁと思っているのですが、それも色々な面で難しいところはありそうです。


とにかく今後も海外からもお仕事をいただけるよう、GitHub活動やStackOverflow活動をがんばろう、と思った次第です。


制作実績を3ヶ月ごとにまとめています:[制作実績]記事一覧 - Over&Out その後



2015-08-03

iOS 9、watchOS 2 技術記事のまとめ

今年はWWDC後の勉強会も多く開催され、正式リリースを前にして iOS 9、watchOS 2 の技術情報が既に多く出てきています。あとでキャッチアップしよう、と思ってたらいつの間にかかなりの記事がたまってきたので、ここらへんでいったん整理しておこうと思います。


iOS 9

f:id:shu223:20150804031922j:image:w600


Search API

Search API は既存アプリへのメリットもはっきりしているためか、注目度が高く、発表スライドや詳細な解説記事を多く見かける印象があります。




Universal Links

App Thinning
  • WWDC - App Thinning メモ - Qiita
    • 「App Thinning」「App Slicing」「On-Demand Resources」「Bitcode」など、どれが何だか区別がつかなくなる各用語について解説してくれています。

SFSafariViewController

UIWebView や WKWebView と同様に、アプリ内ブラウザとして使えるビューコントローラ。


コンテンツブロッカー(Content Blocker Extension)


UIStackView




LLDB


Core Location


MapKit
  • iOS 9で強化されたMapKit - Qiita
    • ピンアノテーションに任意の色をセットできるようになったりとか、コールアウトの詳細部分に任意のUIViewサブクラスをセットできるようになったりとか、見た目のカスタマイズ性が向上したようです。
    • Transit 機能の開放、Flyover のタイプ追加等、結構うれしい機能追加があります。

Audio Unit Extension


Metal
  • WWDC 2015 METAL
    • あまり見かけない、貴重な Metal 情報。WWDC 2015 の4つの Metal 関連セッションの内容をかいつまんで紹介してくれています。


Core Image


ReplayKit

ReplayKit は、画面を録画するフレームワーク。ゲーム実況にしろ、ユーザビリティテスト用途にしろ、それをメインプロダクトとしてがっつり取り組んでいる企業がいくつかある分野なので、あまり個人的には直接は利用しなそうと思っていたのですが、下記スライドに載っているサンプルを見ると、導入が簡単そうなので、ちょっと試してみようかと。




その他
  • iOS9でカスタムURLスキームの遷移に失敗するときの注意点 - Qiita
    • iOS 9 ではプライバシーへの配慮により、Info.plist に LSApplicationQueriesSchemes キーに対して追加してあるカスタムURLスキームについてのみ、 `canOpenURL:` で正しく結果を返してくれるようになった
    • (Info.plist に追加してないと、対象アプリがインストールされていて遷移可能でも、canOpenURL で `NO` が返ってくる)









watchOS 2

f:id:shu223:20150804031921j:image:w600


Watch Connectivity



Complication
  • 簡単!Complication!!
    • Complication の実装手順について、用語説明からダウンロードサンプルまであって、すごく丁寧に解説してくれているスライド



HealthKit
  • How to make workout app for watch os 2
    • HKWorkoutSession クラスを用いて、ワークアウト機能を利用したアプリを実装するための情報がひと通り書いてある大変ありがたいスライド


Core Graphics


その他

watchOS 1.0のアーキテクチャはいったい何のために用意されたのだろうか。ネイティブ化されるまでの半年間はいったい何のために必要だったのだろうか。Apple Watchに搭載されている一部のApple製のアプリは最初からネイティブで動作しているはずだが、はじめからその方法を解放できなかったのはなぜなのか。

    • という、開発者みんなが思った疑問についての、Bitcode やプロセッサを絡めての考察。




2015-07-14

watchOS 2 の Core Graphics は何ができて何ができないのか #potatotips

本日開催された、「【第19回】potatotips」にて、watchOS 2 における Core Graphics について発表をさせていただきました。



概要

watchOS 1 では Core Graphics が使えなかったので、次のような UI を実現するにあたって、


f:id:shu223:20150214162301p:image:w600


Appleのサンプル「Lister」では、360個の連番pngを使用するという相当な力技でやっていたことは記憶に新しいところです。


f:id:shu223:20150714210052p:image:w425


で、watchOS 2 でついに Core Graphics が使えるようになったわけですが、発表されて1ヶ月経過した今も、(自分の探し方が悪いのか、)10本ぐらいあるAppleのWWDC動画にもサンプルにも、GitHub や StackOverflow にも未だに具体的なコードは見当たりませんでした


単にまだ誰も書いてないというだけかもしれないし、何か重要なクラスが watchOS 上で使えないとかで結局使えないのかもしれない、実際に試してみないとわからない・・・ということで何ができて何ができないのか、検証コードを書いて確認してみました。


ポイント

詳細はスライドを見ていただくとして、ここではポイントだけ。

  • watchOS では UIGraphicsGetCurrentContext() でグラフィックス コンテキストを取得できない
  • ビットマップコンテキストを作成し、そこに描画 → ビットマップコンテキストから UIImage を生成して WKInterfaceImage や WKInterfaceGroup に表示すればOK

(2015.7.21 修正)@hoppenichu 様よりご指摘&Pull Request をいただき、上記に間違いがあることがわかりました。(打ち消し線を入れた箇所)


UIGraphicsBeginImageContext() すれば、 UIGraphicsGetCurrentContext() でグラフィックス コンテキストを取得できます


また僕の当初のサンプルでは UIGraphicsBeginImageContext() したあとさらに CGBitmapContextCreate() でビットマップコンテキストを生成していましたが、Beginの時点で既に生成されているので、このステップは必要ないということになります。


// Create a graphics context
let size = CGSizeMake(100, 100)
UIGraphicsBeginImageContext(size)
let context = UIGraphicsGetCurrentContext()

// Setup for the path appearance
CGContextSetStrokeColorWithColor(context, UIColor.whiteColor().CGColor)
CGContextSetLineWidth(context, 4.0)

// Draw lines
CGContextBeginPath (context);
CGContextMoveToPoint(context, 0, 0);
CGContextAddLineToPoint(context, 100, 100);
CGContextMoveToPoint(context, 0, 100);
CGContextAddLineToPoint(context, 100, 0);
CGContextStrokePath(context);

// Convert to UIImage
let cgimage = CGBitmapContextCreateImage(context);
let uiimage = UIImage(CGImage: cgimage!)

// End the graphics context
UIGraphicsEndImageContext()

image.setImage(uiimage)

こちらの commit を見ると、間違いをどう修正していただいたかわかります。(修正ここまで)


うまくいったこと
  • CGPath を用いたパス描画
  • UIBezierPath を用いたパス描画
  • SVG ファイルからのパス描画
  • グラデーション描画

(描画の話なのに、NDAにつきまだスクショ貼れないのが残念。。)


watchOS の Core Graphics でできないこと

グラフィックスコンテキストの問題が解決できたことで、結構いろいろなことができることがわかったわけですが、基本的に CALayer や UIView の API を使う必要がある処理は実現できません。スライドでは例として下記3つを挙げています。

  • スクリーンキャプチャ
    • UIView または CALayer の内容をコンテキストに描画する必要がある
  • キーパスアニメーション
    • AddAnimation: しようにも CALayer オブジェクトにアクセスできない
  • 手書き
    • タッチイベントを取るAPIがまだ開放されていない

キーパスアニメーションができないということは、冒頭に挙げたような Circular Progress 的な UI の実現も結局難しい、ということになりますね。。(アニメーションの各フレームを UIImage として生成することもできますが、非現実的な方法かと)


おわりに

最初 UIGraphicsGetCurrentContext() でグラフィックスコンテキストが取得できず、ググってもあまり情報が見当たらなかったときは「もしかして何もできないのか・・・!?」と思いましたが、上述のようにそこは解決して、パス描画やグラデーション描画などなど、結構いろんなことができました。


ただ最後に書いたように、タッチイベントが取れない、キーパスアニメーションが使えない、という大きな制約もまだあるので、「Apple製アプリではできてサードパーティにはできない」ことというのは色々とありそうです。手書きの筆跡を共有する 「Digital Touch」的なこととか、Circular Progress的なUIを動的に描画するとか。



2015-07-02

WWDC15のチケットは外れたけどサンフランシスコに行ってきたメモ

タイトルの通り、今年はWWDCのチケットは残念ながら外れてしまったのですが、初参加した昨年を振り返ってみると

  • セッションを(英語力と理解力と集中力の点で)リアルタイムで理解できない
  • → セッション中にドキュメント等で勉強しようとする
  • → セッション会場は(椅子間の距離が)狭いし、ネットも遅い
  • 1Fのネットコーナーに入り浸る

という、日本でもできる、というかむしろ日本での方が快適にできる過ごし方をしていたわけで、良かったのは何よりもその「iOSエンジニアの祭典」的空気感なわけで、じゃあチケットなくても行く価値はあるかも、ということで航空券購入に踏み切りました。旅程は 6/6 〜 6/15 の 8泊10日。


やったこと

ヨセミテ旅行

WWDCが始まる前の土日を利用して、iOSエンジニア4人でヨセミテへ行ってきました。シリコンバレーには何度か来ているものの、なかなか観光をする機会がなかったので、今回が初。


空港で集合し、レンタカーでそのままヨセミテ方面へ。宿はヨセミテ内ではなく、そこから車で1時間ぐらいの、別荘地的なところ。


f:id:shu223:20150703093037j:image:w600

f:id:shu223:20150703093034j:image:w600


Airbnbで(Tonnyさんが)予約してくれたところなのですが、雰囲気があって超よかったです。



ヨセミテも想像以上に楽しかった。


f:id:shu223:20150607100935j:image:w600

(川遊び)


f:id:shu223:20150703042256j:image:w600

(某El Capitan)


f:id:shu223:20150703034635j:image:w400

(なぜか乗せてもらえた本場のハーレー!)


日々もくもく開発@Realm オフィス

サンフランシスコの Realm オフィスのモニタで、みんなで基調講演のストリーミングを見ました。


f:id:shu223:20150703034810j:image:w400

(広くて綺麗で快適でした)


Realmオフィスへは基調講演以降もほぼ毎日お邪魔し、もくもくドキュメント見ては手を動かして新機能を試してました。


f:id:shu223:20150703034918j:image:w400

(ランチ風景)


f:id:shu223:20150703035002j:image:w400

(念願のTシャツもいただきました。愛用してます)


StackOverflow デビュー

StackOverflow でいくつかの質問に回答し、Reputation もいくらかつき、ついに自分も vote up やコメントができるようになりました。

今まで、「なんて素晴らしい回答だ!ありがとう!」と思っても vote up する権利すらない自分の無力さを何度歯痒く思ったことか。。


StackOverflow の Reputation は GitHub 同様に世界で通用する客観的&定量的評価だし、英語の練習になるし、人の役にも立つ、ということで自分の中でずっと重要TODOだったのですが、日々の仕事を言い訳にずっと後回しにしてきたことなので、非常に達成感があります。


HomeKit 対応デバイス購入

iOS 8 で発表された HomeKit、IoT の文脈から注目はされていたものの、対応製品がない、という状況がずっと続いていました。で、最近ぽつぽつと製品が出始めている、ということでサンフランシスコの Apple Store に行ってゲットしてきました。


f:id:shu223:20150703035336j:image:w400


Lutron社の「Caséta Wireless」という製品です。229ドルもしました。とりあえず HomeKit を体験したいだけなのでもっと安いのを・・・と店内の製品パッケージをくまなく探してみましたが、残念ながらこれしか置いてないようなので購入。


後日またブログかLT等で使用&実装報告したいと思います。


WHILL HQ 訪問、野球観戦など

昨年のTechHouse内オフィスから移転したWHILLの米国本社や、とある企業のオフィス等に遊びに行きました。


f:id:shu223:20150703035436j:image:w400



あと人生初の野球観戦。


f:id:shu223:20150703035511j:image:w400


ホットドッグ&ビール&野球という経験ができてよかったです。


Apple Watchハッカソン参戦

最終日、ちょうどSFでAppleWatchハッカソンが開催されてたので参戦。


なんと、賞をいただいてしまいました!!!!


f:id:shu223:20150614131616j:image:w400


つくったのは watchOS-2-Sampler。コミュニティへの貢献を評価していただけたようです。めっちゃ嬉しかったです。


ちなみに英語プレゼンはアドリブでは絶対にグダグダになる自信があったので、いったん話したいことを全部書き出して、流れだけ頭に入れつつ反復練習して、ハック中に話しかけてくれた優しそうな現地の人に聞いてもらったりもしました。


後日談として、こういうこともありました。


やっぱ海外でハッカソンに参加するのは楽しい。


費用

気になるお値段ですが、

  • 飛行機代:¥125,140
  • 宿代:¥44,860($45 × 8 × 124.6)

で、基本費用は17万円程度。40万オーバーだった昨年と比べて、大幅にコストダウンしました。WWDCチケット代がかからなかったのと、宿を全泊TechHouseにしたのが効いたな―と。(TechHouseについては昨年の記事をご参照ください)


あとは日々の食費、ヨセミテ旅行費(レンタカー+宿。手渡しだったのでいくらか忘れた。。)、野球観戦のチケット代(確か8000円ちょい)がかかってるので、総旅行費用としては20万円ちょいかと。


LT

せっかくSFの空気に触れて高まった意識も、帰国して日々の仕事の波にさらされるとあっという間に消えてなくなるので、「人前で発表しないといけないプレッシャー」ドリブンで勉強を進めるべく、WWDC関連の勉強会にはできるだけLT枠で申し込みをするようにしました。


6/16 「potatotips #18」


ブログ:watchOS 2 新機能の細かい話5つ #potatotips - Over&Out その後


6/17 「UI Crunch #5 スマートウォッチUIデザインの今」


ブログ:UI/UX に影響の大きい watchOS 2 の新機能 3つ #uicrunch - Over&Out その後


6/19 「WWDC Afterparty Roppongi」


ブログ:【iOS9】Core Image の新機能:文字認識/追加フィルタ47種 - Over&Out その後


6/24 「WWDC2015報告共有会@ネクスト」


ブログ:【iOS9】Audio Unit Extensions &#12316;オーディオエフェクトのアプリ間共有&#12316; - Over&Out その後


所感

チケットなしWWDC、ものすごく行ってよかったです。ドキュメント見るなら日本でもできる、とはいえ日本にいたら絶対仕事を入れてしまってドキュメント見たりサンプルつくってみたりLTしたりしなかったと思うので。


あと、WWDCのチケットがあると、高いチケット代払ってるので朝ちゃんと起きてフルに会場にいないといけないという気がどうしてもしてしまってなかなかしんどいのですが、そういうプレッシャーもなく健やかな気持ちで日々を過ごせたのもよかったです。結局毎日ドキュメント見てコード書いてたわけですが、義務感があるのとないのとでは健やか度がだいぶ違うなと。


それと、Realmオフィス。Realm の中の人をはじめ、CocoaPods の中の人や RestKit の中の人など、真のスーパーハッカーな方々が集う場で、なんというかそこにいるだけで「もっと精進せねば・・・」と意識が高まりました。


そんなこんなで、来年もチケット外れてもまた行きたい所存です。現地でお世話になった皆様方、ありがとうございました!


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 |