社内基礎勉強会 #1
社内で行った勉強会の資料
他に社内で勉強会が走っているし、自分が勉強会に取り上げたいテーマで人が集まりそうなテーマが思いつなかった。 なので基礎勉強会という形で、再度初めから勉強し直したくはないが復習はしておきたいトピックで初心者にも受けが良さそうなものを紹介していく形の勉強会にした。 (どのみち人は集まらなかったが…)
Git の方は楽にスライド作れそうだし、現在のエンジニアは必須の知識だろうと思って最初のテーマに取り上げた。 楽に作れるかと思っていたが、「基礎」的な部分の定義がブレブレでどういうことを書くべきがかなり迷ってしまった。 Git について語りたいことは山ほどあったが、基礎的な話かというとそうでもない場合が多い。 結局結構スライドを削ることにした。脇道にそれるのはいけない。
次回についての要望がなかったので、独断でテスト駆動開発について話したいと思う。 TDD is dead と言われて久しいが、テストを先に書いたほうが良い場合は結構あるはずなので、うまいところ話しておきたい。
Scala 実践入門を読んだ
- 作者: 瀬良和弘,水島宏太,河内崇,麻植泰輔,青山直紀
- 出版社/メーカー: 技術評論社
- 発売日: 2018/10/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
先月でた Scala 実践入門をようやく読んだ。
何か一つの言語(おそらく Java)を経験済みで Scala をこれから始めたいという人に勧めたい。
逆に Scala を超えて、関数型プログラミングやアクターモデルなどは入門の範囲外ということであまり触れられておらず、 それらを学びたい人には向いていない。 そういう人は巻末の参考資料にある書籍から当たっていったほうがいいかも.
特に良かった点として、まず本のサイズをあげたい。 持ち運びが楽だし他の Scala 本の置き場所とおおよそ競合しない。 電子書籍にするにしても大きめの本だとコードとか見づらくなりがちなのでコンパクトなサイズは単純に嬉しい。 またこの分量で Scala でプログラミングを始めるのに必要な情報が揃うのは素晴らしいと思う。ビルドとテストのことも書いてあるし。 ただ短い分、若干説明が足りない部分もあったりするのがちょっと気になったか。
あと並行プログラミングに関する部分が薄かったのがちょっと残念。 最近流行りの言語では重要な機能なので、Scala が並行処理得意ですよというのがもっと書いてあっても良かったと思う。 そういうのは Akka でやっているので、おとなしくそちらを読んどけということなのかもしれない。
Kotlin Conf 2018 参加報告会 を見てきたメモ
10/15 と 10/19 に行われた Kotlin Conf 2018 の参加報告会を聞いてきた。
CA_kt の Kotlin Conf 2018 参加報告会
こちらは 10/15 に行われたサイバーエージェント主催の参加報告会。
Kotlin Conf 2018 Keynote Overview @satorufujiwara
Kotlin Conf 2018 Keynote を振り返る内容。
- Kotlin Conf について
- 今回で2回め
- 参加者は 1300+
- 今回はオランダ、アムステルダムで開催。前回はアメリカで開催だった
- セッションはすべて動画で公開されている。見よう
- 内容としてはコルーチン、マルチプラットフォーム、サーバサイドの話が多く、Android に関するセッションは 3 つ
- キーノート
- Kotlin 言語のデザイナー Andrey Brslav によるセッション
- Be Pragmatic
実装者の考えをコードに落とし込めるようにしたい
- Consicion < Readability
- 簡潔さより読みやすさ
- ボイラープレートは減らし、書いたコード全てに意味があるように
- Expressiveness < Reuse
- 表現力のためでなく、再利用のため
- 標準ライブラリによく使われるパターンを入れている
- Originality < Interoperability
- 独自性<相互運用性
- 他の言語にすでにある機能・知見を取り入れる
- Soundness < Safety / Tooling
- 言語的な堅牢さより、安全さ、ツールによるサポート
- 静的型付き言語なのでツールも作りやすい
- Consicion < Readability
- Kotlin 1.3
- Coroutines -> stable
- kotlin/native -> beta
- build -> faster 75%
- おすすめのセッション
- coroutine exporing coroutines in kotlin
- kotlin coroutines in practice
- mutliplatform
- kotlin/native concurrency
- おすすめの Kotlin 教材
- Courseara の Kotlin for Java Developers
- 新しい本 "Atomic Kotlin"
Kotlin 1.3 新機能 @_a_akira
- 元になったセッションは New Type Inference and Related Language Features by Svetlana
- Experimental features
- Experimental features の目的は、アーリアダプターになるべく早く新しい機能を試してもらうこと
- 使いかた
- migration 1.2 to 1.3 * AndroidStudio で Tools > Kotlin > Enable migration option を選択
- gradle
kotlin { experimental { coroutines 'enable' } }
- 1.2 と 1.3 の import 違い
- 1.2
import kotlinx.coroutines.experimental.*
- 1.3
imoprt kotlinx.coroutines.*
- 1.2
- ユーザ定義の experimental を作ることができるようになった
@Experimental
アノテーションを使う- 使うときは
@UseExperimental(<API名、クラス名>)
- Contracts
- New Type Inference
- gradle で
kotlin { experimental { newInference 'enable ' }}
- SAM conversions
- SAM = single abstract method の引数型が推論されるようになった
sequence<int> { yield 11, yield 42 }
の<int>
を書かなくてもよい
- SAM = single abstract method の引数型が推論されるようになった
- Inference for call chains
- Intersection types
- gradle で
優れたコードは小説のようか? @kaelaela31
- 「よくかけたコード=小説」ということで文法に影響する Kotlin の機能の紹介
- Kotlin Conf では表現について言及したセッションが多かった
- Next Level DSLs
- Writing The Next Great Kotlin Novel
- Writing The Next Grewat Kotlin Novel
KotlinConf Report @takusemba
- Best Practices for Unit Tesint in Kotlin, Phillipp Hauer から
MockK
MockK<HogeFactory>
verify()
べんり メソッドがどのように呼ばれるかを検査できるJUnit5
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
- テストごとにクラスを再生成できる
@Nested
- テスト結果をグルーピングして IDE とかで見やすくなる
- バッククォートでテスト名を記述できる
- テスト結果などがかなり見やすくなる
JKUG の Kotlin Conf 2018 参加報告会
こちらは 10/19 に行われた Kotlin ユーザグループによる参加報告会。 会場は Line Cafe でとてもキレイな場所だった。
KotlinConf 2018 カンファレンス概要とトピックOverview @mhidaka
CA_kt のセッションとかぶるので、おすすめのセッションだけ。
- おすすめのセッション
KotlinConf 2018 のワークショップに参加してきました あんざいゆき
今年の KotlinConf は初日が Workshop Day でした。 丸一日のワークショップに参加してきたのでその内容と様子についてお伝えします
ワークショップに参加してきた話
Kotlin Conf Workshop
- 649 ユーロ 8万くらい ちょっと高い
- 9:00 - 17:00
- 朝食・昼食あり
- 5 つのワークショップ
- 変換プラグが C type で、穴にはめるタイプなので、ヨーロッパ行く人は注意
Acynchronous Programming with Kotlin
- About
- 内容
- Asynchronous programming, introduction to coroutines ...
- coroutine について一通り
- サンプルプロジェクト
- デスクトップアプリ
- よく考えられたデモ
- ちっさなTips
- デスクトップアプリ
- Kotiln での並行処理
- thread
- ->
thread
トップレベル関数でバックグラウンド実行
- ->
- callbacks
- ->
Retrofit
のenqueue
を利用
- ->
- coroutine
- thread の場合とそれほど変わらない書き方になる。シンプル
- async, awaitAll
- future
- channel and actor
- thread
KotlinConf 2018 Android編 @hoshi_gaki
Android Ssupenders, chris bane
- coroutines on ndroid
- jobs, scopes, reactivity
- Reactivity
- Rx のものは coroutine で置き換えられる
Shaping your app's archiecture with kotlin and architecture components, Florina
- coroutine の why, where , how
- why -> ease of learning, single/maybe/completale -> suspend fn
- where -> ほぼ全部、どこでも使える
- how to use -> retrofit2-kotlin-coroutines-adapter
- Java とのつなぎ込み
- suspend あ Continue を返すのでこれをどうにかしないといけない
- callback 使うのが良さそう
- Typing
- これまで
data class UserId(val id: Long)
- kotlin 1.3
inline class UserId(val id: Long)
- これまで
- coroutine の why, where , how
「KotlinConf から見る、最近の Kotlin サーバーサイド事情」 @hktechno
- Server Side Kotlin
- Kotlin web framework
- 選択肢はいくつかある: Ktor, http4k, spring boot
- Spring Boot が多いっぽい
- Which to use
- Swagger, micrometer, zipkin を使う場合-> http4k, Spring Boot
- coroutine を使う場合 -> ktor, spring boot(ただし unofficial)
- Ktor は JetBrain 製なので coroutine もよく対応できている
- Spring Boot を Kotlin で使うには
- SpringFu, KoFu で Functional , DSL にできる(ただしincubating feature
- annotation 対応の cofiguration ができる
- annotation からは何が発生しているかが辿りにくい
- API / Micoservices
- Kotlin/Native
- kotlin/Native はサーバサイドでもつかえるか
- Concurrency 周りが難しそう
- Ktor に期待, native をサポートしてほしい
- Server-less な利用法では kotlin/jvm では startup time 問題があるので厳しい
- サーバレスで使いたいなら GraalVM に期待したほうが良さそう
- kotlin/Native はサーバサイドでもつかえるか
「Kotlinのユニットテスト ベストプラクティス」 @ngsw_taro
- Best Practices for Unit Testing in kotlin @philipp_hauer
- JUnit4
- JUnit5 を使うのがベスト
@TestInstance
junit.jupiter.tesinstancelifecycyle.defaut = per_class
@Nested
でグルーピング- バッククォートで読みやすいテスト名
- おすすめライブラリ
- どれもそこそこよい
- おすすめは: JUnit5, mockK, AssertJ
- mockK 注意
- モックの生成は重い
- 一度生成して
clearMocks
でクリアするのがよい
- アサーション
- データクラスのアサーション
- フィールド毎でなく、データクラスをそのまま
assertThat
に渡すとよい。Assertion の結果が読みやすくなる
- フィールド毎でなく、データクラスをそのまま
- データクラスのアサーション
感想
Visual Studio Code Extension 拡張を作成してみたメモ
最近 golang を書くのに Visual Studio Code を使っている。 で、使っていると当然不満も出てくるので拡張を書いてみることにした。 TypeScript は書き慣れていないのでその点の苦労はあったが、テンプレートや楽に試す環境ができているので割と楽に作ることができた。
一応欲しい機能は作れたのだが、その機能がすでにあることに気付いたのでとりあえず動くところまでやって終わりにしている。
準備
yo
に Visual Studio Code Extension のテンプレートがある。
yo
を入れていない場合は次のコマンドでインストールする。
npm install -g yo generator-code
テンプレートの生成は次のようにする。
yo code
ウィザードに従って情報を入れればよい。
開発
テンプレート生成で作られたディレクトリに移動して、
code .
で workspace に拡張が入った状態で vscode を起動できる。
基本的には extension.ts
をいじることになる。
拡張が読み込まれると activate
が呼ばれるので、registerCommand
でコマンドとして呼び出す関数を作ったり、イベントのサブスクリプトをしたりする。
デバッグする場合には、f5 で拡張を読み込んだ vscode を起動できる。
Ctrl+Shift+p
で拡張で作ったコマンド(テンプレートのままだと Hello World)を指定して起動できる。
ハマったところ
拡張をつくるのは割とスムーズに行ったが、肝心の中身は慣れていない TypeScript を使う必要があったので苦労した。
やりたかったのは QuickPick
を使って、ワークスペースのファイルを選択して開くということ。
(繰り返しになるが quickOpen
というコマンドで完全に実現されている)
API は Visual Studio Code API Reference
このQuickPick
を利用するには、showQuickPick
に表示したい文字列のリストを渡すのだが、
リストをつくるのに時間がかかる場合にはThenable
で包む。
非同期にやらないとエディタが泊まってしまうだろうし。
Thenable
がちょっとハマった部分で、最初Tunable
と読んでてググってもわからなかったり、
スペルミスに気付いて検索し直しても google が Then
と解釈してやっぱりわからなかったりした。
一方、findFiles
でワークスペース中のファイルのリストをThenable<Uri[]>
の形で得られる。
なので、showQuickPick
に渡すにはThenable<Uri[]> -> Thenable<string[]>
という変換ができればよいということで、これってファンクターだよねということで Thenable + functor
で探したがそれっぽいのは見つからず‥
色々試してみると、.then(f: Uri[] -> string[])
とすればThenable<string>
が得られることがわかった。
結局次のようなコードを書くことになった:
var files = vscode.workspace.findFiles("*"); vscode.window.showQuickPick(files.then((urls) => { return urls.map((url) => { return url.toString(); }); })).then((selectedItem) => { if (selectedItem) { var path = vscode.Uri.parse(selectedItem); vscode.workspace.openTextDocument(path).then(doc => { vscode.window.showTextDocument(doc); }) } });
変数の方とかは vscode 側が表示してくれていたので、実験しながらコードを書くのに非常に役に立った。 やっぱり型はあったほうがいい。
他、比較に ===
が必要だったりと、普段から JavaScript とか書いていないとしっくり部分があったが、 この点は vscode が優秀でちゃんと指摘してくれたのでなんとかなった。
参考
- 公式
- 英語だがドキュメントは充実している
- Hello World と WordCount のチュートリアルをやればだいたい感じはつかめる
深セン・香港・マカオ観光してきたメモ 2
2018年の9月23日から28日まで深セン・香港・マカオを観光してきた。
この記事では旅行後半の香港とマカオを扱う。
3 日目、深センから香港に移動
この日は電車を乗り継いて香港まで移動した。香港の電車だと、みんな降車する人を優先していたのでやっぱり文化が違うんだなと思ったり。
再度国境を超える
ネイザンロードを少し見てからホテルに移動。
一泊あたりの値段は深センのホテルと大差なかったが、香港のホテルは非常に狭かった。 ホテルで一休みしてビクトリアピークを見に行く。
ピークトラム
観光客の数が相当多くピークトラムに乗るまでに長い行列にならんだ。
夜景はかなり良い。夜景を見ている人をターゲットにしている広告があったりしたのが興味深かった。
4 日目、香港観光
この日も適当にぶらつく。
ハリウッド通りの壁画アート地帯
ミッドレベルエスカレーター
スターロード
ネイザンロードと女人街、男人街あたり
街中に来るとそこかしこに宝石店がある。しかもほとんど同じ店なので流石にうんざりしてしまった。
5 日目、マカオ観光
最初の予定ではマカオ観光はしないつもりだったが、気が変わったので急遽マカオにも行ってみることにした。ホテルは香港島にあるので、近くのフェリーターミナルからフェリーで移動。マカオまでは大体 1 時間ぐらいとかなり近い。
歴史保存地区を中心にぶらつく。
思いつきで行動したので、マカオ観光にはあまり時間を取れず、結局カジノには行かなかった。
6 日目、帰国
この日は帰るだけ。 帰りは香港エアポートエクスプレスのチケットをホテルで買って楽して空港まで移動した。
感想
- 観光しやすい
- 観光スポットかくあるべしみたいなお手本のような都市だった
- 香港もマカオも小さい都市なので、観光スポットは狭い範囲に集中している
- 英語通じるのもかなり楽
- クレジットカードも大体の店で使える
- 人多すぎ
- 物価、交通費は結構高い
- 深センの後だから余計に
今回の旅行では深セン観光のおまけのような部分もあって、ちょっと事前調査が足りてなかった。実を言うとそれほど美味しい料理にはありつけていない。
また割と前半の深セン観光で体力を使いすぎた感じもあったので、あまりいろんな場所にいけなかったかもしれない。次行くとしたら観光だけに集中するようにしたいところではある。
深セン・香港・マカオ観光してきたメモ 1
2018年の9月23日から28日まで深セン・香港・マカオを観光してきた。
この記事では深センを扱う。
準備編
まず深セン観光前にした準備について。
- インストールしておいたアプリ
- SIM カード
- チケットの入手
- 航空券はいつも使っている Expedia から購入し、航空会社は香港エクスプレスを選択。香港で LCC となるとこれ一択になる
- 直前になって名前と姓が逆になっているのに気付いた。これは香港エクスプレスに電話してなんとか変更してもらえた。あとで調べると香港エクスプレスではこのトラブルが結構多いらしいので、それもあって対応が早かったのかもしれない。
- WeChatPay の準備
旅行本番
1 日目、香港到着から深センで1泊目まで
香港到着から越境
バスから見た景色。中国らしくがかなり雄大な景色
早朝に香港に到着したので、香港国際空港から深センには始発が早いバス + 電車を使うことにした。空港バス乗り場から 43 番のバスに乗り、 MTR 上水駅まで移動、後はMTRで羅湖駅まで移動、後は徒歩で国境超えをした。
羅湖駅を降りると深セン方面には看板が出ている。他の人も大体は深センに向かっているので人の流れに乗っていればおそらく深センに行けると思う
入館では指紋の登録など一部混んでいるところもあったが、それほど待たされずに越境できた。日本のパスポートだとICチップ入りなので若干スムーズにできる
深セン入り
羅湖では「深セン通」という、深センの交通機関で使えるプリペイドカードを購入。滞在期間中の足に使った。 ただし、電車の入場でもQRコード支払いができるようだったので、WeChatPayにたっぷり入金していればそれほど必要なかったかもしれない
深セン通。なぜかドラえもんのイラストのものが売られていた。購入は自動販売機からできるので楽だが、リファンドは難しいらしい
羅湖から地下鉄にのり華強路に移動して、その後は徒歩で華強北の電子街に移動した。 昼はマクドナルドで初 QR コード支払いを試した。メニューの選択は店内に設置された端末で行い、 QR コードで支払い、受取だけ人力だった。
地下街でみかけたもの。中国も日本文化の影響を受けているんだよなあ
華強北電子街
電子街到着後は体力の限りぶらついた。
「矿机」はマイニング用のマシンと思われる。結構あちこちで扱っていた
デモしている機械があったので3Dプリンタかと思ったら自動のネジ打ち機だった。
PM2.5 の検知器。中国らしいといえばらしい。ところで滞在中はそれほど空気が悪いと感じることはなかった。
LED たくさん
大量のネジだけを扱っている店もあった
ここではプリント基板を作ってくれるらしい。
怪しいものもあったり
無人コンビニ
しばらく電子街をぶらついていたが、訪問したのが土日だったせいか、開いていない店も結構あった。 人で混み合うということはなかったが、日本からわざわざ電子街を見に来た団体もいたし、値引き交渉していた欧米人の姿も見かけたので色々な人が訪れていたのだと思う。
結局この日買ったものは次のようなものだけ
- Boogie Board っぽいやつ。 80 元だから 1,300 円くらい
- GoPro っぽいやつ。 店の人は GoPro だとはっきり言っていたがまあそうじゃないと思う。180 元だから 3,000 円くらい
どちらかというと観光客向けのお土産品という感じだが、値段を考えるとまあいいかな。
DJI 旗艦店
ホテルにチェックインしてから今度は DJI 旗艦店に行った。
DJI 旗艦店は割と新しくできたと感じのするショッピングモールの近くにある
かなりモダンな建築
写真には取れていないが、このコーナーではドローンのデモをしていた
直前にあった台風の被害が痛々しい
tello を買おうかちょっと悩んだが、国際クレジットカードが使えないようだったのと、現金支払いだとレートの関係もあり日本で買うのとさほど変わらないようだったのでスルーした。
小米旗艦店
そのあとで小米旗艦店を観に行った
小米というとスマホ屋だという印象があったが、展示されていたのはスマホの他にも生活家電とか知育玩具とか結構幅広い商品を扱っていた。
小米旗艦店もショッピングモールの一角にあったが、周辺は広さを利用したでかい展示品があるので見ていて楽しい。
夕食
夕食は白石州というところまで行って食べてきた。このあたりは一昔前の中国という趣が残っていて、かなり安く食事を済ませられるらしい。
夕食を食べた店。
羊串。辛くしないでと頼んだが割と辛い味付けだった。
焼きなす。正直今回の旅行で一番気に入った料理。再現したい。
これらにビール1缶を合わせて 52 元、でだいたい 800 円くらい。実際安いしうまい。
2 日目、深セン観光と深セン 2 泊目
2 日目は電子街行くと現金がそこをつきそうだったので別の場所を中心に見て回ることにした。
CEES
スタートアップなどの企業の展示があるとのことだったが、フロアは空きのほうが多かった。
深圳书城
深圳にあるでかい本屋。
この建物の大部分が本屋になっている
技術書は AI 関連が多いのは予想していたが、C の本が結構あった。組み込み向け?
「软件」はソフトウェアの意味。ハードウェアは「硬件」
みんな大好きオライリーも中国語になっている
ディープラーニングのコーナー。定番の本が見える。
技術書のコーナーは期待していたよりうは小さかった。池袋のジュンク堂の技術書コーナーより少し小さいくらいか。 逆に広く場所を取っていたのは教育用の書籍のコーナーだった。1フロアがまるまるそのこーなーになっていた。なぜかインド式計算の本がいくつかあった。ブームなのかもしれない。
深圳市软件产业基地
深セン市ソフトウェア産業基地というところにも来てみた。 名前の通りソフトウェアの会社が多く集まっているらしい。 来ては見たもののほとんど人がいない。 このあたりで土日に来たのはあまりよくないんじゃないかと気がついた。
共産党と一緒に企業しようのスローガン。マスコットキャラクターもいるはずだが見つけられなかった。
多分平日はもっと人が多いはず
OCT-LOFT
色々壁画アートなどがあるエリアがあるので見てきた。古い建物をリノベーションしているので、独特の雰囲気がある。
エリアの入り口あたり。スターバックスも後ろに見えている
写真には撮っていないがカップルがたくさんいる
感想・反省点
感想としては、
- QR コードでの支払いは慣れてみるとかなり楽
- その一方でネットワークに繋がらない状況だと支払いに失敗する
- 電波状況には気をつけたい、現金も持っておいた方が良さそう
- 電子街はとても広く見ているだけでも楽しい
- おもしろガジェットを探すという点ではうまくいかなかった
- 何か探したいものが決まっているとつらそう
- 深センについてはかなり進んだ街という印象
- 一方、大陸的あおおらかさによる雑さもかなり感じた
- 深セン行きまでの準備大事
- 前もっていろいろ調べたのもあって、割とスムーズに行くことができた
- 逆にいうと調べてから行かないと詰みになりそうな場面もあった
- 両替屋とかほとんど見かけなかったし
- 物価、宿泊費、交通費はかなり安い
- 香港に比べて非常にコストパフォーマンスがよい
- 香港から日帰りでも行けそうだが、滞在費を考えると深セン泊してじっくり観光するのがいいと思う
- 台風すごい
- 直前に台風が来ていたので街並みを見るのにはタイミングが悪かった
- 街路樹が倒れたままになっているのをよく見かけたが、本来はもっときれいな街だと思う
- 逆に空気の汚さは滞在中感じなかった。これは台風のおかげなのかどうか?
- 食事は良かった
- 安くてうまいと言える
- 現地の人はみんな鍋を食べていた
- 個人旅行だったので試してみなかったが、複数人で行ってみんなで鍋を食べると楽しそう
反省点としては
- 持ち込む現金が少なかった
- 平日に行ったほうがよさそう
- 営業していない店もあった
- 深圳市软件产业基地は特にこれに当てはまると思う
参考にした本
- 深センの歩き方2018
- 深センでの行き先についてはかなりこの本が役にたった。行くなら買おう。
- 地球の歩き方 香港編
- 深センの情報も少しだけ記載されていたが、それほど役には立たなかった
builderscon 2018
9/7, 9/8 に builderscon tokyo 2018 に参加してきた。 builderscon はあまり技術分野などの縛りがないカンファレンスで、 他のカンファレンスではなかなか聞かない話が聞けるおもしろイベントだ。 縛りがゆるいとはいえ、発表内容は結構レベルが高いものも多い。
Web周りから低レイヤまで幅広いジャンルの話が聞けるので、 参加したらなにか一つは引っかかるものがあるんじゃないだろうかと思う。 これまで聞いたことがない話を聞きたいという人にはすごいあっているじゃなかろうか。
会場は一つを除くとさほど狭くないので、 観るセッションは決めておいて早めに並んでおかないと見逃しやすい。 自分も結構聞きたいセッションを逃してしまったので、ここらへんは改善してほしい。 そういうのは会場変えないと難しいのかもしれないが…
ちなみに開催場所は日吉。 Google Map での表示を見ると駅から少し歩くように見えるが、 実際には駅から出てすぐの建物になるので初参加の場合は気を付けたい。 前回初参加のときはちょっと間違えた場所に行ったが今回は間違えなかった。
以下見てきたセッション
Envoy Internals Deep Dive by Matt Kelin
Envoyはマイクロサービス向けのサービスプロキシ。発音は「あんぼい」に近い。
Envoy とは
Envoy はマイクロサービス向けのサイドカープロキシー。ユニバーサルなデータプレーンとも。 このサイドカープロキシーは、マイクロサービスを動かすノードに常駐して、 アプリケーションや言語、フレームワークによらずロードバランシグなどを行ってくれるものを指すようだ。 同じノードにのるということで「サイドカー」ということなのかも。
背景
Envoy はマイクロサービスを作るにあたって出てくる次のような問題を解決する: * 複数の言語とフレームワークの解決 * 複数のプロトコル ( HTTP/1, HTTP/2, gRPC etc ) * ブラックボックスなロードバランサ (AWS ELB とか) * 一貫したモニタリング方法がない (統計、トレーシング、ロギング) * 足りない機能 (リトライ、サーキットブレーカー、タイムアウトなど分散システムのベストプラクティス * 認証周り * 言語ごとに存在するサービス呼び出しのライブラリ * レイテンシーやエラーのデバッグの難しさ * マイクロサービスアーキテクチャを信用していない開発者
Envoy は、ネットワークはアプリケーションに対して透過的=アプリケーションの問題が起きたときにその発生元が簡単に特定できるようにしたい。
Envoy の目標
- プロセスアーキテクチャの外側で動かす
- 低レイテンシ、高パフォーマンス、高開発効率
- L3/L4 フィルター
- L7 での HTTP フィルター
- HTTP/2 ファースト
- サービス・コンフィグディスカバリと API の提供
- アクティブ・パッシブなヘルスチェッキング
- よりよいロードバランサ
- サービス・ミドル・エッジプロキシー
- ホットリスタート
Envoy のアーキテクチャ
xDS API による設定マネジメント
- Envoy is a universal data plane
- xDS == X Discovery Service つまり:
- LDS == Listener Discovery Service
- CDS == Cluster Discovery Service
- gRPC ストリーミングや JSON/YAML REST Protocol Buffers (proto3) もサポート
- 中央集権的に Envoy 設定を管理することができる
- Eventual consistency
Envoy のスレッドモデル (c10k)
- アイディアとしては、スレッドにイベントループを持たせて複数のコネクションを操作する
- メインスレッドはデータと関係ない様々なタスクを実行
- ワーカースレッドは並列にリスナー、コネクション、プロキシをハンドリングする
- ブロッキングを避けるためにファイルのフラッシュをするスレッドを持つ
- 100% ノンブロッキング
- RCU (read-copy-update) をメインスレッドとワーカー間の共有に使用
ホットリスタート
Envoy はコネクションを一切切らずにバイナリのリロードができる。 仕組みとしては: * ソケット、ロックはシェアドメモリー上に持つ * シンプルな RPC プロトコルを unix domain ソケット上で使用 * ソケットなどはプロセス間でやり取りする
Caching at Netflix: The evolution of EVCache by Scott Mansfield
EVCache = Ephemeral VOlatile Cache は Netflix が開発している KV ストア形式のキャッシュ。 特徴として: * 分散、シャードされた KV ストア * memcached を基にしている * インリージョンかグローバルかチューニング可能 * AWS に最適化している (AWS は色々問題があるので)
パフォーマンスの話で性能について話すのにパーセンタイルを使っていたのが興味深い。 聞いてみるとパフォーマンスのイメージを掴みやすいかったので、ぜひ自分もマネしたい。
パフォーマンスの問題解決については同じフロアに Brendan Gregg (詳解システムパフォーマンスの著者、パフォーマンス研究のすごい人)がいたのがよかったとのこと。
カクヨムでの縦組み表示の実装と縦書きWebの将来に向けて by nanto_vi
カクヨムで行っている縦書き表示での苦労と将来的にはどうするかについての話。
縦書き表示は CSS では規格があるものの、そのまま使うと表示がおかしくなる例があったり、バグも結構あったりで大変だったらしい。
後半ではバグの報告の行いかたについての話があった。
バグを新たに報告する際には次の3つを書くとよい * 簡潔な再現コード (jsfiddle を使うのが便利) * 期待する挙動 * 実際の挙動
あと Web 屋さんにとってはブラウザ間の挙動の違いもバグに含むものらしい。
謎ガジェット by @uzulla
https://builderscon.io/tokyo/2018/session/442f46cc-c888-4cc6-8e66-0f17144ea5fb
おもしろガジェットを作ったという話だが、作った数が 200 台ということでなかなか普段聞くことがない話を聞けた。
200 台なのでバッテリーが200個とかネジが 4,000 本あったりとするので購入するのにかなり苦労したという話も。 実際に小規模な大量生産しようとすると訳に立ちそうな話がたくさんあった。
途中でも人に評価してもらうことが大事で、作業に集中しているとすごい見落としてしまうことがあるそうだ。
Java カード @moznion
Java カードの話。SIM カードやクレジットカードはこの Java カードらしく、それらのカードの上で jvm が動いている。 当然制限は普通の JVM よりかなり厳しく型は byte だけだし、メモリの扱いなどにもかなり癖がある。
たとえば、電源を切っても Java カードの vm はとまらず、インスタンス変数のデータは残り続けるなど普通の環境とは違うことが多々あるようだ。
lld, rui314
lld の話。今回の builderscon で聞きたかった話。 lld はとにかく高速ということで、最近色々なプロジェクトで使われているし、特に FreeBSD ではデフォルトのリンカになっている。
最初は Windows 上のリンカとして作られたが、ELF 向けのパッチが送られてきてなし崩し的に他のものもターゲットになったというこ。
高速にするためのコツがかなり聞けたので良かった。 * よいデータ構造にするのが重要:データが先、コードが後 * 2回書く、1度目の経験を2度めに活かす * 最適化する箇所を最小にとどめる
gold との違いが気になっていたが、gold ではスレッドをタスク、ワーカーで扱うなど汎用的な書き方にしているので lld よりも遅くなっているのではという話。
Securty, privacy performace of next-generation transport protocols, Kazuho Oku
ネットワークプロトコルのセキュリティで、主に TLS の現状と将来のQUIC の話を聞いた。
現在の TLS 1.3 でどのような問題があって、 QUIC ではどのように解決しているのかなどを聞いた。 主な話としては: * TLS 1.3 * QUIC * Encrypted SNI
といったようなあたらしい拡張でプライバシーを確保することができるようになり、 セキュリティ面でこれまでの TCP/TLS とはかなり違った世界になるらしい。
ルーター屋とプロトコル屋で意見に違いがあったりしてな興味深かった。
TLS
QUIC
TLS over TCP では man-on-the-side アタック = パケットを観察して RST などをインジェクションする攻撃が多い。 これは他の攻撃に対してコストが安く済むため。 この攻撃に対策するためには、認証付きでパケットを暗号化するのがよくて、QUIC ではそれを行っている。
- QUIC の特徴
- encrypted transport
- handshake in 1 RT
- mulitiplexing streams int on connection
- fix head-of-line blocking int HTTP/2
- mobility (network migration)
QUIC の問題 * 暗号化 * 複数のストリーミングの1つで暗号化のための前処理を行っているので、他のストリームからはいつ QUIC で暗号化通信が開始できるかの判断が難しい
Encrypted SNI
SNI = Server Name Identity も暗号化が進められている。まだドラフト段階。
Excel 依存からの脱却と失敗
非常にレガシーな体制な会社でワークフローを Excel 依存から切り替えようとしてうまく行かなかった話だった。
技術選定に失敗したとあったが、技術選定は選ぶ余地がある場合に使う言葉ではなかろうか。
上からの命令が絶対で、技術の選定が技術的な理由でなく政治的な理由から決まるというのはかなりひどい話だ。
最初から最後まで成功しそうな感じがしていなかったので、大変でしたねと言う他ない。
自分が作ったシステムで人が首になるというのはかなり胃が痛いらしい。
なぜエンジニアはパフォーマンス計測しないのか , @mogetta
健康の話
ウェアラブルデバイスや IoT 機器など、健康に関する色々なガジェットを試してみたという話だった。
色々製品が紹介されたので、若干通販番組のような気分だった。
結構お金がかかっているが、健康のためにはしょうが無い。。のか?
紹介されてたモノ * HEALBE Gobe2 * Withings Wifi Body Scale * Withings Activie * Withings Sleep * JINS MEM * Spire
話を聞いてて欲しくなったがちょっと高い…。
計測結果はは Firebase に入れておいて、いろいろグラフを作りやすくしていたらしい。 やっぱり計測は大事か。
Chrome デベロッパーツールのハック
Chrome のデベロッパーツールをうまいこと使ってテイラースウィフトのチケットを入手したという話。 テイラースウィフトのPVをたくさんみると、チケットが購入しやすくなるというキャンペーンをやっていたらしく、 紹介されていたハックは youtube の動画の再生数をスクリプトを使って稼ぐようにするものだった。
スクリプトを作るために、まず最初にChrome のデベロッパーツールを使って、 動画の再生速度を上げたり自動再生するようにしたりするリクエストがどうなるかを調査していた。
そして狙いのリクエストが作れたらクリップボードにそのリクエストがコピーできるので、これを cURL などに渡す。 後はシェルスクリプトでもなんでもこのリクエストを投げるようにして目的達成となる。
普段フロントエンドそれほど触ったりしないので、興味深く話を聞いていた。活用できれば便利そうだ。
1 日 700,000 ビルド: Docker と Nomad が支える CI/CD プラットフォーム
Circle CI でどのように CI/CD プラットフォームを提供しているかという話。
Docker は当然として、Nomad は全然知らなかったので使っているとは思わなかった。 ただ話を聞いていると、たしかに妥当だなという感じがする。