builderscon tokyo 2018のスタッフ & LT登壇しました #builderscon

iOSDCの翌週だったので、そのまま東京に残って、builderscon tokyo 2018*1

去年に続いてのスタッフだったけど、去年までと環境が全く変わっていて、いろいろ大変だった。

スタッフ

やったこと

  • 準備
    • パンフレット作成
      • 編集
      • 校正
    • スポンサーノベルティ
      • スポンサー企業とのやり取り
      • 袋詰業者とのやり取り
    • スピーカーディナー
      • ほとんどを @kiko_tw に巻き取ってもらった 🙇‍♂️
  • 当日
    • 何でも屋
      • 買い出し
      • 弁当出し
      • 荷物運び
      • 各部屋のヘルプ

実は開催前日に、本当に大変なミスがあって、 本当にやばかった。
@uzullaに助けてもらえなければ、当日ボクの姿は無かったかもしれない...
本当にありがとうございました 🙇‍♂️

2017が終わった時には、当たり前に来年もやるものだと思っていたし、そうなった。
@kiko_twをスタッフに引き込んだりもした。

ただ、はてなに転職が決まった次のスタッフミーティングで、 @lestrrat さんを始めとするメンバーに、「2月に京都に行くことになった、それでもスタッフを続けたい。」と正直に話した。
どうなるかなと思ったけど、不安は杞憂で、「大丈夫、遠隔でもやりやすいタスクを拾っていってもらうから」と言われ、やるぞ!となった。

それでも遠方にいることのデメリットはある。
毎月のミーティングには出れないし、打ち上げに参加できないことに寂しい気持ちはある。

PyCon JP

ここでちゃんと説明しておかなければいけないのは、PyCon JPとの関わりだと思う。
2016、2017と関わってきたPyCon JPだが、2018は残念ながら途中リタイアした。
理由は2点ある。

1. 開催時期

  • iOSDC 8/30(木) - 9/2(日)
  • builderscon 9/5(水) - 9/8(土)
  • PyCon JP 9/16(日) - 9/18(火)

と実質3週連続は、仕事的にも体力的にも厳しい。
自分の仕事や関心を鑑みて3つの内から1つを選ぶとすると、PyCon JPの優先度を下げざるを得なかった。

2. 文化

※あくまで、今の自分の状況には合わなかったという個人のケースだという前置き
buildersconのコミュニケーションはSlackがあれば、大体のことは事足りた。
PyCon JPの場合は、月1のミーティングで合意を取ったり、作業日を設定して、集まってタスクをガッと進めるという文化がある。
遠隔でスタッフをできている人もいるが、自分は月1でリモートで同期的にコミュニケーションを取るということがなかなかできなかった。
リモートでのミーティングよりも、オフラインで人と会ったり、自分のことを優先していた。
※あくまで、今の自分の状況には合わなかったという個人のケースだという前置き

以上、2点で、今年はPyCon JPは断念した。

LT

会の4日前くらいに、LTに出ないかと提案されて、二つ返事でやることとした。
ネタとしては結構前から考えていたんだけど、普段Swiftを触ることがない人がターゲットの話なので、出す場所を伺っていた。

speakerdeck.com

www.youtube.com

いい写真撮ってもらった

f:id:yutailang0119:20181019104441j:plain
CC-BY-NC 4.0 (c) builderscon

まとめ

そんなこんなで、なんとかbuilderscon tokyo 2018は無事に終了できた。
かなり不安があったので、打ち上げや帰りの新幹線で涙腺が崩れかけてた。

前述の通り、遠方にいるデメリットは確かにある。
それでも来年もスタッフをやろうと思っているし、また少し新しいことにも挑戦しようと思っているので、続報をお待ち下さい。

f:id:yutailang0119:20181019104700j:plain
CC-BY-NC 4.0 (c) builderscon

*1:間の期間は、東京オフィスに出社して、カンファレンス中の宿泊費をはてなから出してもらえたりと、かなりサポートしてもらえ、大変助かった

iOSDC Japan 2018に参加 & LT登壇しました #iosdc

遅くなりましたが、iOSDC Japan 2018に参加、LT登壇してきた。

参加前のブログはこちら yutailang0119.hatenablog.com

参加

去年はスタッフ側だったけど、転職したり、転居したり、身の回りの変化で、残念ながらスタッフはできず。
去年は設計の話が多かったけど、今年はそれを実装に落とし込んだりとか、インターフェイス周りの話が多かった印象 *1
来年はテストとか、Packaging周りが流行らないかなぁ...
今年は Swift Package Manager話のプロポーザル 出したけど、通らなかった。

スポンサー紹介ムービー、ほんとよいよね

https://www.youtube.com/watch?v=Wy6XCIDJRIU&t=0s&list=PLod2oSGQp3W6Qw5RFipf6N5YY80InTQPX&index=4www.youtube.com

見た中でもよかったもの

~~ †††† 漆黒の魔法 Objecitve-C Runtime API †††† ~~

おもしろいんだけど、実際使い所が...
終わった後に おもち とバグってるの見つけてしまった。

MicroViewControllerで無限にスケールするiOS開発

さすがベストトーク1位だよねというトークだった。
mercari/Mew は本当によくできてて、感動した。
トーク後に、@tarunon と一緒になって、コード読んだり、PR投げたりしたのはいい思い出。

宣言的UICollectionView

自分は差分計算にInstagram/IGListKitというのを使ったことがあるけど、dataとcellのマッピングがイケてなくて、うーむと思っていた。
ishkawa/DataSourceKitは、Swiftのいいところを使っていてよさそう。
どっかで使いたい。

スマホアプリエンジニアだから知ってほしいブロックチェーンと分散型アプリケーション

元同僚の id:niwatakoトーク
この日が退職日だったので、ギリギリ同僚だったのだけど、満席で見れず...

f:id:yutailang0119:20181019105822j:plain
id:ikesyo と写真だけ撮って退出した

あとでniwatako追悼式典したので許して (後述する)

他にもいろいろあったけど、時間がなくなったので割愛。
アンカンファレンスで行われたわいわいswiftcも、めっちゃ楽しかった。

LT

weak vs unowned by Yutaro Muta | トーク | iOSDC Japan 2018 #iosdc - fortee.jp

speakerdeck.com

youtu.be

がっちりテックトークするの、結構久々でめちゃくちゃ緊張してた。
絶対5分おさまらないとわかってたので、無理やりねじ込んだ。
Twitterでの反応も多くてよかった。

あと、初めて気づいてもらえて嬉しかった。

当日に公開した yutailang0119/ProgressSpinnerKit もよろしくお願いします 🙇‍♂️

yutailang0119.hatenablog.com

いい写真撮ってもらった

f:id:yutailang0119:20181019105002j:plain
CC-BY-NC 4.0 (c) iOSDC

余談

途中で少し出てきた、selfのshadowing問題に

guard let self = self else {
    return
}

が追加されて、どうしましょうね

swift-evolution/0079-upgrade-self-from-weak-to-strong.md at master · apple/swift-evolution · GitHub

niwatako追悼式典

会期中に niwatakoがはてなを旅立つことに寄せて #niwatako追悼式典 - がんばってなんか書く を投稿したので、これについて話しかけられることも多かった。

せっかく最後の瞬間をみんなで迎えられるよねということで id:niwatako, id:ikesyo はもちろん、スピーカーディナー後の方々に参加頂いて、盛大に祝えた。
ご参加ありがとうございました @takasek, @_bannzai_, @d_date, @itaru_sugimoto, @hironytic, @rikusouda, @dchn2904, @tatsuhama50

全体フィードバック

今年は3.5日という超長丁場で、全日参加した感想は「もう少し短くてもよくない?」。
日程が伸びると枠が増えて、門戸が広がって、って感じはするけど、その分濃度の薄まりが否めないなぁという感じ。
WWDCとかはもっと長い期間だけど、実際ダラダラできる時間もそれなりにあるし、セッション自体の濃度も濃い。
カンファレンスの規模が大きくなると生まれる壁なのかなと感じた。

まとめ

実はCfP段階で、ちょっと思うところはあったのだけど、参加するとやっぱりおもしろいし、モチベーションも上がったし、参加してよかった。
来年も是非よろしくお願いします!!!

*1:これはiOSDCに限らず、トレンドとして

macOS Mojaveが最高なんだけど、もっと最高になるアプリ Gray のご紹介

[追記]

注意点 1 に書いた、Systemに揃える設定が選択できないのは、0.9.0で解決されました 🎉

Release 0.9.0 · zenangst/Gray · GitHub

---追記終わり---

macOSを使用している皆さん、Mojave最高ですよね?

Mojaveにまだアップデートできてない方、ぜひアップデートしましょう
アップデートして1週間立ちましたが、開発環境面で問題は起こっていません

ですが、1点だけ、どうしても気になることがある

Dark appearance最高なんです
最高なんですけど、これアプリケーション毎に切り替えるGUIがないんです
アプリケーションによってDarkは見づらかったり、Safariは通常のブラウザとプライベートブラウザの目視区別がしづらい...

f:id:yutailang0119:20181012145237p:plain
左: 通常、右: プライベート

そんなあなたに朗報です

github.com

ポチポチするだけで、アプリケーション毎にAppearanceが切り替わります

SafariだけLightにしたりできる

f:id:yutailang0119:20181012145511p:plain
左: 通常、右: プライベート

インストール

https://github.com/zenangst/Gray#gray の下のリンクを押すと、ビルド済みのアプリがダウンロードできます
コードを読むと、アップデート確認も実装されてた

内部でやっていること

READMEに書いてあります https://github.com/zenangst/Gray#how-it-works
macOSにはアプリケーション毎の設定ファイルがあって、これを defaults というコマンドで書き換えることができます

$ defaults write com.apple.dt.Xcode NSRequiresAquaSystemAppearance -bool YES

その設定ファイルの NSRequiresAquaSystemAppearance をポチポチtoggleするだけ

一度設定すれば、再起動しても、Grayを削除してしまっても大丈夫
でも、できれば消さないでねとのこと

So when you are done configuring, you can toss Gray in the trash if you like (I hope you don't :) )

注意点

1. Grayで一度Appearance変更をすると、Systemに揃える設定に戻すことが、GUI上からはできなくなります -> 0.9.0でResetが追加された🎉

[追記]
0.9.0で、アイコンを右クリック (今右クリックって言うのかな🤔) することで、リセットする機能が実装されました。
以下の操作も使えますが、難しいと思うでの、仕組みを理解できる人以外には推奨しません。

---追記終わり---

そんな時は、ターミナルで、

$ defaults read 

と入力して、タブを押しながら、戻したいアプリを探します
アプリが見つかったら、

$ defaults read com.apple.SafariTechnologyPreview(ここがアプリ名) NSRequiresAquaSystemAppearance

とかとすると 0 or 1 と表示されるかと思います
表示されたら、再度ターミナルで、

$ defaults delete com.apple.SafariTechnologyPreview(ここがアプリ名) NSRequiresAquaSystemAppearance

確認すると

$ defaults read com.apple.SafariTechnologyPreview(ここがアプリ名) NSRequiresAquaSystemAppearance
The domain/default pair of (/Users/yutailang0119/Library/Containers/com.apple.SafariTechnologyPreview/Data/Library/Preferences/com.apple.SafariTechnologyPreview, NSRequiresAquaSystemAppearance) does not exist

とエラーになっていれば、成功です
もう一度Grayを開き直すと、Systemになっているはず

2. Mail、Messages、Safari、Homeのようなアプリは、Full Disk Accessパーミッションが必要

ボクは許可していません
「最初のSafariのプライベートブラウザの話どこいった」と思われるかと思いますが、普段 SafariのTechnology Preview版を使っていて、これはFull Disk Accessを要求しません
便利ですね

@_monoさんのツイートで知りました

活発に開発されていそうなので、watchしていきたいですね

ProgressSpinnerKitというSwift CLI用ライブラリを作った

github.com

発端

yutailang0119.hatenablog.com

というエントリで xcopen というCLIツールを作っている話をしたが、Swift製CLI向けのライブラリに、いわゆるSpinnerがなく、困っていた

swift-package-manager/Utilityには ProgressBarは存在するが、パーセンテージ表示で、開始時点で終了状態がわからないタスクには使えない。

無いなら作ろうということで作った。

使い方

READMEを読んでもらえればわかると思うが、

  • ProgressSpinnerKit.createProgressSpinner(forStream: _, header: _) で初期化
  • start()
  • stop()

という、極めてシンプルな作りにした。

Demoも用意したので、ぜひ手元でも実行してみて頂きたい。

f:id:yutailang0119:20180917022559g:plain
Demo

まとめ

少し前に完成していたのだが、iOSDCの登壇タイミングで公開にしようと思い、温めていた。
そのかいあって、すでに25starついていて、自分としては嬉しい限りである。

自分のようにSwiftでCLIツールを作りたいというような奇特な方向けだが、ぜひ使ってみてフィードバックがほしい。

ということで、あまり言わないが、スターください。

github.com

niwatakoがはてなを旅立つことに寄せて #niwatako追悼式典

niwatako.hatenablog.jp

取り留めのない文章。
いつか自分で思い返す時、何かの折に懐かしめるように書き留めておくこととする。
特に自分や id:niwatako、2人を知らない人に読んでもらおうと思った文章ではないことを、前置きしておく。

本当は彼が東京勤務になった時に、このエントリの草稿は書いていたのだけど、公開するタイミングを逃し、他人の目に触れることはなかったので、改めて書き直した。

発端

はてなに入社して3ヶ月ほど経ったある日、 id:niwatako が東京オフィスに異動となると周知された。
いつかは東京勤務にしたいと聞いていたし、なんとなくその内そうなるだろうと思っていた。
そして、7月中旬の夜中のDMで、退職の運びとなったことを聞いた。
彼がすぐにでもブロックチェーンをやりたいと常々聞いていたので、この退職が会社に対するネガティブなものではないことは理解できた。

思うところ

社内外で、「(自分を誘ってきた) id:niwatakoさんの退職、 id:yutailang0119さんは、どう思ってるの?」と聞かれることがある。
「京都で金が回らなくなり、実家に帰ってきた29歳になる息子をどう思っているのか気になる。」と返答している。
半分は本音だが、実際には思うところは多くある。

  • 彼が楽しそうに働くはてなに、少なからず魅力を感じたから入社した
  • 自分は関西に友達が少ないのに、さらに減る
  • もっと一緒に仕事をしたかったとも思う
    • 実際、一緒に作ったジャンプルーキー!は、今できうる最高の実装になったと思う
  • そりゃ、寂しいですよ

彼と初めて対面したのは、たぶんtry! Swift Tokyo 2017のハッカソンday後の有志打ち上げだったと思う。
仙禽 (🍶) を10合 (=1升) 注文し始めようとしたことが、記憶にある。
まさか、一緒に働くことになるとは思わなかったし、京都に住むことのハードルを下げたのは、 id:niwatako がいたからに他ならない。
自分の社会人人生の中でも、何度も2人で飲みに行ったり、泊めてもらったりしたのは、 id:niwatako だけだ。
あっちがどう思っているかはわからないが、親友と言っていいレベルだと思う。

会社には悪いが、自分は「転職が悪いことをしているような空気」がとても嫌いだ。

さいごに

いろいろ言ってきたが、id:niwatako にはこの挑戦をがんばってほしい。

直接、面と向かって言うのは憚れるので、こういう形にした。
思っていたよりも早くはあるが、また飲みに行きましょう。

id:yutailang0119 < 達者でな

iOSDC Japan 2018に登壇します #iosdc

f:id:yutailang0119:20180816015426p:plain

会社のdeveloperブログに書いた通りですが、登壇します。

developer.hatenastaff.com

weak vs unowned (LT)

  • id:yutailang0119
  • 2018/09/02 16:25〜 Track A(5分)
  • Swiftを扱う上で度々議論となるweakとunownedによるキャプチャ。「確実にクラッシュを防げるweakの方がよい」、「unownedの方がパフォーマンスが優位である」よく聞く意見ではありますが、それは本当なのでしょうか。なぜメモリリークが起こるのかを復習して、両者のメリット/デメリットを再整理し、実コードにおける使い分け方を考え直してみようと思います。

この時期、いろいろと思うところはあったものの、CfP出して、採択されたので、まずは1山超えた感じ。

ありがたいことに2年連続で、採択されました。

去年は「iOSDCだけではもったいない!iOSアプリケーションエンジニアの他言語コミュニティ生存戦略」と、直接的な技術ネタじゃなかったので、大人数の前で技術ネタ話すのは初めてです。

まだ準備を始めた段階ですが、5分間でいい感じにまとめたいと思います。

P.S.

その次の週はbuilderscon tokyo 2018 ということで、10日間ほど東京にいます。
忙しくはありますが、ぜひお誘いください。

株式会社はてなに入ってからの半年を振り返る

早いもので、先日の8/10で株式会社はてなに入社して半年が経った。
会社としても期の変わり目で、振り返りがあったので、それも踏まえて残しておく。
そして、忘れていたが、去年は突然にお盆休みが発生して、8/16にはてなの東京オフィスにお昼を食べに来てたらしい。

いろいろな縁が重なって入社した、はてなでの半年を振り返る。

入る時のエントリはこちら

yutailang0119.hatenablog.com

はてなでやってきたこと

ジャンプルーキー!

オファーをもらった段階で、マンガチームということは決まっていた。
平たく言うなら、受託サービスで、とても葛藤があったことを覚えている。
蓋を開けてみると、このチームでの経験は大きかった。

ここには id:niwatako くんがすでに属していることも知っていたし、入社する頃には id:ikesyo さんもいることがわかり、念願のという感じだった。
社内のスマートフォンアプリケーションエンジニアが集結したチームでの開発は、自分の基礎レベルをかなり上げた。
また、自分のSwift力が可視化されて、とてもよかった。*1

実際のところ、開発はかなりタイトで、リリース直前は労働時間で量をまかなうという感じではあったが、初めて業務でRxSwiftを使えたり、DIKitを導入できたり、デザイナーとHangoutで会話しながら画面構成考えたり、3年ぶりにAndroidやってみたりもできて、辛いとは感じなかった。
一方で、振り返りの時にも感じたが、自分は軽度のワーカホリック的な部分があるなと感じていて、

  • 仕事が片付いて、手が空くとそわそわする
  • 夜中まで働いた時はハイになってたけど、効率が良いわけではなかった

と思ったので、労働集約型の働き方はよくないし、マインドも矯正して行かなきゃだなと、痛感した。

はてなブックマーク

直近は、はてなブックマークを担当している。
このチームではiOSAndroidに担当の区別がなく、両プラットフォームの開発をしてる。
まだまだKotlinやGradleのことわからんなーという状態。
自分よりも何倍もiOSに携わっている id:nakiwo さんと対等 *2 に議論させてもらいながら、開発を行っている。

昔から使っていたサービスの開発を担当することになるとは、まさか大学生の自分は思わなかっただろうな。
自分は今の状態が最上ではないと思っているので、コードもUIも改革したい。

それ以外

はてなには多くのサービスがあって、特別な制約があるサービスを除くリポジトリには、基本的にアクセスできる。
はてなの歴史が見れるし、自分が担当していないサービスにふらっと立ち寄ってPRを出したりもした。
それだけでなく、CTOの id:motemen さんと一緒にコード書いたり、コードレビューしたりと超豪華

会社としても、QOLが高い。
有名な話だけど、飲み物、お菓子、昼食は準備されている。
エンジニアは本当の意味で裁量労働なので、早めに帰るというのも結構できている。

エンジニアだから特別扱いというわけではないと認識していて、それぞれの職種やポジションの中で、必要とされる/許容される範囲で、最高の状態にしたいねという空気はある。
思ったこと、問題意識、アラートを上げやすい環境だと感じている。

design.hatenastaff.com

自分は心からいい会社だなと思っていて、人を誘える。
「xxxさんだけずるい」みたいな声があがる世の中は生きづらいと思っているので、そんな状況で疲弊している、はてなで働くことに興味がある人がいれば、ぜひランチに招待します!!!

WWDC

ありがたいことに、念願のWWDCに行った。
来年も行きたいなぁとは思うけど、どうだろう。

yutailang0119.hatenablog.com

OSS活動

自分もOSS活動をちゃんとやっていきたい

空が青いので転職しました - がんばってなんか書く

自分でもそれなりできたと思うし、習慣化された。

今はサマーインターン期間で、インターン用の課題も合間でやってみている。
今年はGo!!!

京都

京都に住み始めても半年。
通勤のストレスがなくなったことは、最高にQOLを上げた。

  • 小学校 徒歩15分
  • 中学校 徒歩10分
  • 高校 自転車25分
  • 大学 徒歩10分
  • 社会人1社目 電車20分
  • 社会人2社目
    • 前半 電車10分 + 徒歩10分
    • 後半 電車 20分 + 徒歩10分
  • 現在 徒歩7分

と生きてきたので、幼少期から通勤通学に時間をかける生活は向いていないのだと思う。

いい意味で繁華街が集中しているので、徒歩圏内で大体生活できる。
徒歩圏内にLOFTもROUND1もあるのすごい、映画館がすぐ近くなのにまだ行ってないので、通いたい。

反面、デメリットは確かにある。
東京にいた頃に比べて、休日に集まってもくもくしようとなる友人は減ったし、勉強会も減った。
こっちにも友人増えるといいなと思っているので、これから解決したい。
解決案も広く募集しています。

以上、直近の半年をまとめてみた。
半年後の1周年でも、どう変化があるか経過観察していきたい。

*1:低くはないはず

*2:🙇‍♂️