native module の code cache の worker thread 対応について
はじめに
Node.js Advent Calender 2018の 23 日目のエントリーです
native module の code cache の worker thread 対応とは
Landed a PR on Node.js master to share the code cache of builtin modules & bootstrappers compiled among the main thread & worker threads https://t.co/UVl9HqH5s9 so launching workers can be ~2x faster than launching child processes (thanks @addaleax for the review!)
— Joyee Cheung (@JoyeeCheung) December 18, 2018
先日も東京 Node 学園祭に来てくださった Joyee さんの PR でこれにより worker thread が child process を使うより 2 倍早くなるそうです
おわりに
取り急ぎ書いたので明日以降ちょっと更新するかもしれません
INSIDE FRONTEND #2 Impression (as a server side engineer) #insideFE
はじめに
表題のイベントに参加してきたの簡単な感想を書き残します。 間違いなどございましたら教えていただけると幸いです。
FRONTEND と銘打っていますが今時サーバーサイドエンジニアもクライアントサイドの知識なしに働くことは出来ないのでとてもバランスの取れた良いイベントだと思いました。
気になったセッション
素晴らしいセッションが多くとても迷いましたが以下のセッションについての感想を
到着がちょっと遅れてしまったのと、前提知識が無かったので詳細を追いきれませんでしたが、ざっくり言うと Vary ヘッダの値にリクエストヘッダを指定することでそのヘッダに応じたコンテンツの出し分けをキャッシュサーバーで行えるという感じでした。要件があえばチャレンジしてみたい内容ですね。
実際には聴講していないのですが、前述の Vary ヘッダの話も含めてキャッシュサーバーの話が再び説明されていたようです。 Vary ヘッダが自由に扱える Fastly のメリットとともに VCL の複雑さという現場の実感はとても有益な情報だと思いました。
参考 Knowledge Base #5301 - Varyヘッダを含む場合のキャッシュ動作について | Akamai Community
これ資料と映像が無いのがとても残念です。謎の webkit comitter をゲストに迎えて、ベンチマークスクリプトはきちんと考えないと JIT レイヤーで無効化されてしまうという示唆あふれるセッションでした。FRONTEND のパフォーマンスチューニング時には抑えておきたい概念ですね。
終わりに
ありがたいことに映像が公開されているので (一部公開なし) 見返したいなー。時間がなー。。
`good first issue` で Node.js に contribute してみよう!
はじめに
この記事は
の 17 日目です。
good first issue とは
good first issue
- Issues suitable for newcomers to process
node/onboarding-extras.md at master · nodejs/node · GitHub
とあるように初めての人に適した Issue としてラベリングされています。
Advent Calendar 何書こうかなーと迷っていたところ、ちょうど良い issue があったのでそれを題材にしてみました💦
Tracking issue: Migrate errors to internal/errors.js
今回はこちらの Issue に対応してみました。
古いスタイルのエラーを internal/errors.js module を使ったものに書き換えるだけです。
とりあえず他の人とかぶらないように、これをやる宣言をしておくと良いと思います。
Issue に書かれた説明をよく読んで各種 guide も一通り目を通して修正を行って、テストを通すと document が足りないとか、一行の行数が 80 文字超えてしまっているとか教えてくれるのでそれもきちんと対応しましょう。
おわりに
今回対応した pull request はこちらです。
make -j4 test
が通っていないんですが master branch でも通っていなかったので reviewer の反応待ちをしています。
OSS に contribute する事に興味がある方は good first issue
を見つけてみてください!
golang.tokyo #11 リンク集 + ちょいメモ
闇のBashををGoに置き換える技術(nashiox)
How Go test tests(timakin)
- テストのテスト
- 関数がどんな出力をするのか Example を出力する機能
- output がないとExample が出力されないバグがあった
- testdata
- contribute しましょう!
Go2の世界(niconegoto)
go-sql-driver/mysqlの問題に救われて、そして更新したら死んだ話(shinofara)
資料公開されていない?
設定の初歩的なミスをしていたがライブラリのバグのために正常に動いていた
- ライブラリのバグ修正によって設定ミスが顕在化
- きちんと確認しましょう
DIコンテナを使わないDI(morikuni)
Go開発を助けるGoツールGo選のGo紹介(haya14busa)
docs.google.com https://beta.golang.org/doc/go1.10 https://github.com/haya14busa/goverage
GoでJavaのライブラリを使う(juntaki)
- go - (cgo) - C - (JNI) - Java
go tool traceを使ってみよう(nametake)
go tool trace - Making Pusher trace - The Go Programming Language
Go1.10導入予定のキャッシュビルドについて(zchee)
- 資料まだ公開されていない?
今年作ったGoツール10(?)選(Songmu)
- 資料まだ公開されていない?
Machine Learning with Go を読んで(ysaito)
MP3 デコーダを C から移植した話(星一)
最強のDatastoreライブラリを作った(vvakame)
Goで地図サーバを構築した話(tsukumaru)
Alfred Workflows by Go(仮)(enta)
# golang.tokyo #6 雑メモ
補欠繰り上がりで参加しました
ブログ枠では無かったんですが、社内で「レポート期待しています!」と言われたので雑メモを上げておきます
DeNA 宣伝枠
golang.tokyo について
gopher fest について / tenntenn さん
- Gopher Fest 2017に参加してきました #golang - Mercari Engineering Blog
- Google I/O に合わせて開催されるイベント
- 主催は GoSF
- GopherFest 2017 - YouTube
- The State of Go
- Google I/O では golang は話題に上がらなかった
- 言語仕様の変更
- Brad Fitzpatrick on Twitter: “If you’re curious after #GoogleIO whether Go supports Android Go, the answer is… I think?#golang”
- Codebase Refactoring (with help from Go)
- メソッドが引き継げない type Applicant Client 、キャストが出来ない type Applicant struct { Client } 言語仕様の問題
- Alias を貼る type Applicant = http.Client
- April fool ネタ proposal: all: quaternions · Issue #19813 · golang/go · GitHub
- 標準ライブラリの変更
- sync.Map スレッドセーフな Map
- html/template がより安全に エラーが返るようになった (スライドの panic は間違い)
- os.Exec 上書き可能になった (最後に定義されたものが優先になった)
- compiler のエラーが賢くなった (?)
- compiler が早くなった
- テストが vendor を無視するように
- godoc のリンクが改善された
初めて microservices をgolang で作った時に得た教訓 / 村田さん
- DeNAでのGCP活用事例とGCP NEXTでの事例紹介 — Mobage Developers Blog
- web application framework gin /echo
- 教訓1 フレームワークにこだわらない
- 教訓2 interface を尊重する
- 独自のエラー型
- interface は interface として扱うべき
- 教訓3
- validator でパフォーマンス問題が発生
- regex の compile や reflection は遅い
- go-jsval が早い
- 教訓4 非対称暗号は遅い
- Microservices の肝となる認証・認可
- tenntennʕ ◔ϖ◔ʔ ==Go on Twitter: “いそのー静的解析やろうぜ #golangtokyo”
- App Engine を利用していたので cgo を使えなかった
- API を分けて PHP/openssl で認証・認可を行っている
- ベンチマークを見ると改善はまだまだ…
- Go の哲学に帰りシンプルなアプローチを
- パフォーマンスに気を配れ
ゲーム開発には欠かせない?!あれをシュッと見る / Konboi
- golang tokyo #6 / ゲーム開発には欠かせない?! あれをシュッと見る // Speaker Deck
- csv
- csviewer GitHub - Konboi/csviewer: csv viewer command
- 便利だったモジュール
- sliceflag
- tablewriter
Go code Review Comment を翻訳した話
- Go Code Review Comment を翻訳した話 // Speaker Deck #golang CodeReviewComments 日本語翻訳 - Qiita
- Writing An Interpreter In Goを読んだ | SOTA
Scala から go に来た話 / James
- https://www.slideshare.net/JamesNeve2/scalago
- Scala OO ? 関数型?
- golang で関数型は出来る?
- 関数型 副作用がない
- scala が好き、golang は初心者には良いかも
Goにおける暗号アルゴリズムを利用する
golang.tokyo #5 にブログ参加枠で参加
〜 GCPUG Tokyo さんとの共同開催です 〜
遅くなってすみません…
時間経ってしまった割に単なるメモ書きです
訂正箇所がありましたらご連絡いただけますと幸いです
吉海 将太 / 株式会社カブク
ナラトドン 鹿
GAE とは
- Google のインフラを使えるのがメリット
- なぜ GAE なのか?
- インスタンススピンアップが早い
- Go は圧倒的に早い
- GAE の種類
- Standard Environment
- Flexible Environment
- Flexible は若干遅い
- Flexible は出来る事が多いけどデメリットが多い
- Standard Environment (SE)
- 基本的にオートスケール
- モニタリング
- バージョン管理
- TaskQueue
- SDK
- Flexible Environment (FE)
- Standard Enveronment
- Flexible Environment
- カブク社での構成例
- 3D を利用したプロダクトが多い
- SE, FE 両方利用
- SE は 60 秒でタイムアウトしてしまう
- TQ 挟んでも同じ
- FE は TQ が使えない
- FE は LB として利用
- dispatch を利用している
- 辛かったこと
- class がない
- 不要な import で動かない
- mock がやりにくい
- SE で FE 向けの package が動かない
- 良かったこと
- 資産があれば FE でも良さそう
- gofmt
- 型定義いいね
- goroutine いいね
- gophaer かわいい
- kabuku 開発ブログ Developers' Blog | 株式会社カブク
GAE/Go の勘どころ
- GAE/Go の勘どころ // Speaker Deck
- GCPUG の Slack に入ってね
- heroku と同じ感覚で触るとげっそりする
- SE が基本
- ネットワークの制約等がある際は FE (NAT gateway とか)
- 一時ファイルも FE を使う
- 1.8 来るかも
- Cloud Datastore
- KVS
- 設計力が試される…
- Cloud SQL
- Managed MySQL/PostgreSQL
- 東京リージョンの latency 問題も解決済み
- Think Web【技術書典2新刊】 - TechBooster - BOOTH(同人誌通販・ダウンロード)
- Cloud SQL
- 同時接続数が最大 12 個
- Vendoring について
- プロジェクトベースになる
- GB を使う
- Configuration について
- The Twelve-Factor App https://12factor.net/
- Test のときは、direnv を使おう
- わかめ@TypeScript味 on Twitter: “僕はappengineの場合現在のAppIDが取得できるのでそれがunittestだったら処理分岐するみたいなコード書いちゃってる(良いとも悪いとも言い難い #golangtokyo”
- Deploy
- Traffic migration
- LB の向き先を変えるようなもの
- 10% 振り分けるとかも出来る
- Traffic migration
- Monitoring
- Stackdriver が一通りやってくれる
- 1.8 早く来い!
- Goroutine どのくらい使ってる?
- Koki Ide on Twitter: “GCPUG内でも歩くドキュメントと呼ばれている@sinmetal さん「GoもGAEも詳しくないんですが〜」#golangtokyo”
- taskqueue を投げる部分でだけ使っている
- spombe on Twitter: “SEはCPUが1つだけど、Goroutinはどのくらい使っているの? ANS:データストア、タスクキューのときくらい。下手に使っても早くならない。遅くなる可能性。 #golangtokyo”
- kiyo on Twitter: “SEでゴルーチンが効果的に使われているかと言うのを確認するときにはStackdriver Traceでみるとzipkinみたいに細かく見れるので便利。 #golangtokyo”
- cron.yaml でスケジューリングしてタイムアウトを避けている
LT
- https://www.slideshare.net/pospome/datastorego-struct
- Datastore のデータ構造の設計やレビューでは Kind に持たせる値ではなく、値が持つ振る舞いと特性も一緒に考えた方がいい
- わかめ@TypeScript味 on Twitter: “Scopeに併せてstruct切るのは確かに良さそうかもしんない #golangtokyo”
- わかめ@TypeScript味 on Twitter: “Datastoreを使う上でネストしたstructは自動生成系ツールとの相性が悪い可能性があるのでバッドプラクティスだよ論者です #golangtokyo”
- timakin on Twitter: “DataStoreは保存するときにそれ用のEntity定義してるから、完全にそのpackage以外のstructからは区別して使ってる #golangtokyo”
- 菊練りが得意なエンジニャー on Twitter: “srcとtypeで保存しちゃうかも #golangtokyo”
- pospome on Twitter: “自動生成は考えてなかった。たしかに、相性悪そう。 https://t.co/rSX5qNLdo9”
- Context アンチパターン
- Contextアンチパターン // Speaker Deck
- 俺がアンチパターンだ!
- 実例
- struct に custom context
- repository in context
- わかめ@TypeScript味 on Twitter: “contextが辛そうという話の前にechoが辛そうという印象になった…(今は改善されてるのかもしれないけど #golangtokyo”
- GoDoc context - GoDoc
- GoDoc の教えを守れ!
- わかめ@TypeScript味 on Twitter: “requestにContext入ってないけどrequestからContext出せると思うんだけどそこなんか区別してるのなんでやろ? #golangtokyo”
- そな太 on Twitter: “何故Contextを構造体に含めてはいけないかはGoogleの @Sajma 氏が答えてます https://t.co/lb1mTLCQUa #golangtokyo”
- timakin on Twitter: “辛いです…前は標準のcontext使ってたのにいつの間にかecho独自のcontextに変わった今は特に… https://t.co/CT4b5DTirv”
- ライブコーディング by tenntenn
- AST の話しかしていない
- 変数の使用箇所を調べたい
- ast.Inspect
- ast.Ident
- ast.Node
Node学園 24時限目で発表した
もう一ヶ月以上前の事ですが…
一応記録として
from https://iojs-jp.slack.com/
という事で 2 日前に決まったのでほぼぶっつけ本番で…
実際は github の README.md とそこに記載された Demo を見ればほとんどわかります
なので内容はありません
が、動かしてみるのが大事という事で…