Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Gopher道場#3を振り返る
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Daichi Hioki
September 18, 2018
Technology
2.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gopher道場#3を振り返る
https://mercari.connpass.com/event/101178/
の発表資料です。
Daichi Hioki
September 18, 2018
More Decks by Daichi Hioki
See All by Daichi Hioki
Rustで学ぶTOTP
hioki_daichi
0
1.3k
仕事でGoで書いたWindows向けの小さなアプリをAppVeyorを使ってCIした話
hioki_daichi
0
270
Rubyエンジニア多めの現場での Vue.js1系 on Rails
hioki_daichi
5
1.3k
Other Decks in Technology
See All in Technology
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
leveragestech
PRO
0
150
メルペイ 会計システム概要と歴史
mewuto
0
150
事業活動を AI Ready にする攻めと守りのデータエンジニアリング / data-engineering-for-ai-ready-business
pei0804
1
210
今こそ知りたいAmplifyGen2
mkdev10
2
150
freeeらしさをAIとともに作る / Creating the freee Experience with AI
ymrl
0
200
検証フェーズはAIの回答を判断するための学習機会
toru_kubota
2
500
『GOエコノミー 』(相乗りサービス) におけるスペック駆動開発
mot_techtalk
1
310
FactoryBotアンチパターン / factory_bot anti-patterns
toshimaru
0
140
AIアプリを使い分けるための共通ツール基盤を考えてみる#devio2026
osawa
0
250
Datadog の学び方 - あるいは、オブザーバビリティを学ぶとは何か
mananyuki
1
450
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
150
購入ドメインでの課題と取り組み
ykagano
0
140
Featured
See All Featured
Mind Mapping
helmedeiros
1
390
The Curious Case for Waylosing
cassininazir
1
550
Amusing Abliteration
ianozsvald
1
330
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1k
We Have a Design System, Now What?
morganepeng
55
8.4k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
610
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
380
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Transcript
Gopher道場#3を振り返る @hioki-daichi
自己紹介 兼 宣伝
- 最大週4リモート - 私は基本週4 - モダンな開発スタイル - GitHub, Slack, PivotalTracker,
esa, 2 人以上のレビュー体制 - 使用している言語やバージョン - Ruby on Rails + Vue.js (基本的に最新バージョン ) - 対応ブラウザは Google Chrome 最新版のみ クリニカル・プラットフォーム株式会社 https://clinical-platform.com/ エンジニア募集してます〜
本編
参加の動機を振り返る
参加の動機 ~Gopher道場になぜ参加しようと思ったか?~ - 好きなのは Haskell のような関数型言語だけれど・・ - 学習コストが高くて流行らない・・
参加の動機 ~Gopher道場になぜ参加しようと思ったか?~ - 現在仕事で使っている Ruby はというと・・ - 界隈の高齢化を感じるような・・ - Go
は若いイメージ - Ruby の懇親会で若い Gopher を見かけた - 「Go で API サーバーとか書いてますよー」といっていた
参加の動機 ~Gopher道場になぜ参加しようと思ったか?~ そんな時に「Gopher道場#3」の選考で Go の課題が存在することを知る
参加の動機 ~Gopher道場になぜ参加しようと思ったか?~ 『え !? Go 書いたらメルカリのエンジニアが見てくれるの !?』 『これをモチベーションにして Go 入門しよ
!!』
選考課題を振り返る
選考課題 7/27 - 8/4 - 当時の自分の Go 歴 - vim-go
チュートリアル をやった - ※ Vim のプラグイン vim-go のチュートリアル - A Tour of Go がバズった時にちょっとやったような・・うっすらとした記憶・・
選考課題 7/27 - 8/4 - 実装方法は・・ **ネタバレになるため公開時に削除されました**
選考課題 7/27 - 8/4 - これではまずそうなので追加で・・ **ネタバレになるため公開時に削除されました**
第1回を振り返る
第1回の講義 8/6 ~Goに触れる/基本構文/型と関数/コマンドラインツール ~ - 帰りに、道場生との間で選考課題の実装の話になった - @shuntaka9576 さんのコードを見せてもらった **ネタバレになるため公開時に削除されました**
第1回の講義 8/6 ~Goに触れる/基本構文/型と関数/コマンドラインツール ~ - 翌日からは @shuntaka9576 さんのコードを味わう日々 - 日記
- 『8/8 shuntaka9576さんのコードをもとにいちから書いてみてるけれど変 数を使い回すのだったり、for 文で index でたどっていったり、読み込ん だ分だけ引いていくところだったり、脳のワーキングメモリーを多く使うの ですごく疲れる。go は疲れる。でも面白い。試すたびに発見があるスルメ のようなコード。』 - 『8/8 shuntakaさんのリポジトリ、Makefileがある。初めてちゃんと見た 気がする。こうやって書くのか。テストコードもすごく参考になる。』
第1回の宿題 ~画像変換コマンドを作ろう~
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - いざ着手し始めると・・ - ImageMagick が不要なの不思議 - Ruby
の `File.exist?(path) -> bool` が Go にはない !? - REPL 欲しいな・・ - ※ 現在では gore を便利に使ってます
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - 一応できた・・が、もうひと工夫 - GIF 対応 - ファイル名が重複した時に上書きする
-f オプション - 冗長なログ出力をする -v オプション - ファイルの内容が期待するフォーマットかどうかのチェック - JPEG だったらファイルの内容が FF D8 FF で始まるかなど - ※ 後になって同様のチェックが標準パッケージ側でされていることが 判明 - https://github.com/gopherdojo/dojo3/pull/20#discussion_r21 4764456
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - いざ提出 (8/14)・・が・・ - osamingo さんから以下のアドバイスが -
『自力で作る => セルフレビュー => 昔の道場生の作品をみる => 書き直 す をすると、PDCA が回るはず。』
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - さっそく昔の道場生の作品を全部見てみた - https://github.com/gopherdojo/dojo3/pull/1#issuecomment-413155710 - この日の日記 -
『8/15 過去の道場生の作品から学ぶことが多すぎ』 - JPEG だったらファイルの内容が FF D8 FF で始まるかなどのチェック、昔の 道場生の @onoyama-git さんも同じことやっていて親近感を感じるなど
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - そこからコミットを 52 個積み・・・再提出 (8/19) !! -
ついでに昔の道場生 @int128 さんが実装していた画像変換時の品質等のオ プションも実装してみたり・・ - JPEG: Quality - GIF: NumColors - PNG: CompressionLevel
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - PR 提出したところ・・ - tenntenn さんから GOOD
ラベルを頂く
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - この日の日記 (※ エモ注意。会場限定コンテンツ) - 「8/20 tenntenn
さんに GOOD ラベルを頂けて感無量。しばらく尊すぎて説 明が頭に入ってこなかった。godoc も README も PR 本文もちゃんと書い たのが功を奏したと思われる。**これ以降は公開時に削除されました**」
第1回の宿題 8/6-8/20 ~画像変換コマンドを作ろう~ - その後、レビュー指摘事項を修正 (+20 コミット) - 合計: 89
コミット (+631 -0)
第2回を振り返る
第2回の講義 8/20 ~パッケージ/抽象化とエラー処理/テストとテスタビリティ ~ - 日記 - 『8/20 しかしこのクウォリティーを無料で4回も添削付きでやってくれるの、 ちょっと改めて太っ腹すぎる。』
第2回の宿題 ~第1回の宿題のテスト~
第2回の宿題 8/20-9/3 ~第1回の宿題のテスト~ - 日記 - 『8/23 テストカバレッジが 72 %
までいった。正常系は一通りやった気がする。 異常系をどうするかだな。』
第2回の宿題 8/20-9/3 ~第1回の宿題のテスト~ - 日記 (その2日後) - 『8/25 テストカバレッジが 90
% 超えた。codecov が落ちてたから `$ make cov` でローカルに吐けるようにしたけど便利で最初からこれで確認すりゃよ かった。』
None
第2回の宿題 8/20-9/3 ~第1回の宿題のテスト~ - 日記 (その夜) - 『8/25 カバレッジ 96.86%
までいったけれどもう無理そう・・』
第2回の宿題 8/20-9/3 ~第1回の宿題のテスト~ - 日記 (翌日) - 『8/26 カバレッジ 98%までいった..!光が見えてきた!』
第2回の宿題 8/20-9/3 ~第1回の宿題のテスト~ - 日記 (さらに翌日) - 『8/27 カバレッジ 100
% 達成 !!!』 - ※ main.go のテストを書いていなかった実は 100 % ではなかった
指定した回数だけ Seek を成功させるような Mock を作ったのが山場 ← 2 回目の Seek ←
1 回目の Seek
第2回の宿題 ~io.Reader と io.Writer が標準パッケージでどのように使われているか調べる~
第2回の宿題 8/20-9/3 ~io.Reader と io.Writer~ - アプローチの仕方が難しかった - ファイル名が reader.go
や writer.go で、かつ、Read や Write の実装を持つ ファイルを片っ端から読んでいくというアプローチをとった
第2回の宿題 8/20-9/3 ~io.Reader と io.Writer~ - 読むだけだと理解が怪しいためさらに片っ端からサンプルコー ドを書くなど・・ - kadai2/hioki-daichi-sandbox/main.go
第2回の宿題 8/20-9/3 ~io.Reader と io.Writer~ - iotest package が便利そうなことを知った -
主にテストに役立つ Reader や Writer を提供しているパッケージ - 例えば TimeoutReader ( src/testing/iotest/reader.go#L73-L88 ) は 2 回目 の Read でタイムアウトエラーを返すような Reader になっている - (どこかで聞いたような・・)
第3回を振り返る
第3回の講義 (9/3) ~ゴルーチンとチャネル ~ - 日記 (※ エモ注意。会場限定コンテンツ) - 『9/3
3回目が終わった。やはりてんてんさんは尊かった。とてもありがたい時 間。何かに向かって複数人で真剣に学ぶ経験は実は初めてかもしれない。そ ういえば**これ以降は公開時に削除されました**』
第3回の宿題 ~タイピングゲーム~
第3回の宿題 (9/3-9/10) ~タイピングゲームと分割ダウンローダー ~ - タイプする単語のソースはどうしよう? - 最近スプラトゥーンしてない・・ - 道場通い中はスプラトゥーンをしないという掟
- かといって溜まったスプラ欲を発散しないのは不健康・・ - タイプする単語のソースをスプラ関連にすることで昇華しよう - ソースをスプラトゥーンに出てくるブキ名に !!
第3回の宿題 (9/3-9/10) ~タイピングゲームと分割ダウンローダー ~ - 文字ごとのヒット数も出したいなー - 以下を出すことに - トータルのヒット数
- 文字ごとのヒット数 - 1 秒あたりのヒット数
None
第3回の宿題 (9/3-9/10) ~タイピングゲームと分割ダウンローダー ~ - 1 文字ごとにヒット判定したかったが・・断念 !! - ScanLines
なので Enter を入力するまでヒット判定ができない - https://github.com/pkg/term を使えば実現できそうなことはわかったが・・ - 実際にやってみると入力は一見上手く動いているように見えるが、表示が 少しずつズレれていく・・
第3回の宿題 ~分割ダウンローダー~
第3回の宿題 (9/3-9/10) ~タイピングゲームと分割ダウンローダー ~ - 動く実装はできたが PR 出せるレベルに至らず・・ - Context
もテストも間に合わず・・
第3回の宿題 (9/3-9/10) ~タイピングゲームと分割ダウンローダー ~ - レビュー後 - タイピングゲームの方は再び tenntenn さんに
GOOD ラベルを頂けました。 尊みが深い。
第4回を振り返る
第4回の講義 (9/10) ~HTTPサーバ・クライアント ~ - 後半内容が難しかった - あっという間に終わってしまった
第4回の宿題 ~おみくじAPIを作ってみよう~
第4回の宿題 9/10-9/18 ~おみくじAPIを作ってみよう~ - 工夫点 (1) - URLクエリパラメータとして name を指定できるようにした
- `?name=名前`
第4回の宿題 9/10-9/18 ~おみくじAPIを作ってみよう~ - 工夫点 (2) - name が 33
文字以上の時にバリデーションエラーになるようにした - ステータスコード: 400
以上、振り返りでした !! ありがとうございました !! - メルペイさま、複数回に渡って会場のご提供ありがとうご ざいました。 - 講師の皆さま、本当に貴重で素晴らしいお時間をありがと うございました。
- 道場生の皆さま、一緒に課題に取り組んでくださり、また、 Slack を盛り上げてくださり、ありがとうございました。 - 特に @shuntaka9576 さんは毎回の帰り道でお話 して楽しかったです。ありがとうございました。 - 昔の道場生の皆さま、コードたくさん参考にさせていただ きました。ありがとうございました。 - 課題1: 画像変換コマンドを作ろう - https://github.com/gopherdojo/dojo3/pull/1 - 課題2: 課題1のテスト・io.Reader と io.Writer - https://github.com/gopherdojo/dojo3/pull/20 - 課題3-1: タイピングゲーム - https://github.com/gopherdojo/dojo3/pull/42 - 課題3-2: 分割ダウンローダ - https://github.com/gopherdojo/dojo3/pull/50 - 課題4: おみくじAPIを作ってみよう - https://github.com/gopherdojo/dojo3/pull/65