GothamGo 2017 Program

Oct 5 - Day 1

Time Talk/Event
8:30 – 9:30 Registration and Breakfast
9:30 – 10:00 State of Go by Steve Francia
10:05 – 10:35 Performance Optimisation: How Do I Go About It? by Kat Zien
10:35 – 11:05 Break (30 mins)
11:05 – 11:35 Closures are the Generics of Go by Jon Bodner
11:40 – 12:10 Alan Donovan
12:10 – 1:40 Lunch (90 mins)
1:40 – 2:10 Monitoring and Tracing Your Go Services by Aditya Mukerjee
2:15 – 2:45 Calling Rust from Go, without cgo by Filippo Valsorda
2:45 – 3:25 Break (40 mins)
3:25 – 3:55 Implicitly Impacting the Cloud with Go by Kris Nova
4:00 – 4:30 From Frontend Engineer to Go Core Team member by Andrew Bonventre
4:30 Activity
6:00 After Party

Oct 6 - Day 2

Time Talk/Event
8:30 – 9:30 Registration and Breakfast
9:30 – 10:00 Carmen Andoh
10:05 – 10:35 A Python and a Gopher Walk into a Bar by Massimiliano Pippi
10:35 – 11:00 Break (25 mins)
11:00 – 11:30 Making Code Write Itself: How To Build Code Generation Tools in Go by Bouke van der Bijl
11:35 – 12:05 JBD
12:05 – 12:35 Building a Multiplayer New York Times Crossword by JP Robinson
12:35 – 2:05 Lunch (90 mins)
2:10 – 2:40 I Will Debate Mark Bates About All of the Controversial Issues in Go by Sean Kelly and Mark Bates
2:40 – 3:10 Becoming a Go Contributor by Kevin Burke
3:10 – 3:50 Break (40 mins)
3:55 – 4:25 Building a Distributed Serverless Platform from Scratch by Tim Marcinowski
4:30 – 5:00 Internals of the Go Internal Linker by Jessica Frazelle
5:30 Happy Hour Party

Steve Francia

Steve Francia is the Technical Program Manager on the Go Language Team at Google. Steve is the creator of Hugo, Cobra, spf13-vim, and is an author and frequent speaker.

Prior to Google, Steve served as the Chief Operator of Docker, and the Chief Developer Advocate of MongoDB.

Steve loves creating software and is thrilled to be able to work on it full time and then some. He is a very active member of the Go community and has been an organizer of GopherCon and GothamGo.

Jess Frazelle

Jess Frazelle works with Linux and Containers at Microsoft. She loves all things involving Linux namespaces and cgroups and is probably most well known for running desktop applications in containers. Jessica has been a maintainer of Docker and a contributor to RunC, Kubernetes, Linux, and Golang, among other projects, maintained the AppArmor, Seccomp, and SELinux bits in Docker, and is quite familiar with locking down containers.

Internals of the Go Internal Linker

This talk will cover how the internal Go linker works. It will also describe some awesome hacks with the external linker and LDFLAGS. Take a deep dive into how the Go toolchain works to create binaries.

Carmen Andoh

Carmen Andoh lives in New York and is an Infrastructure Engineer on the Build Infrastructure team at Travis CI. She is active in the NYC Go community, is an organizer of both the Go Language NYC and the WomenWhoGo NYC meetups, and is a member of Golang's New Developer experience Working Group.

Jon Bodner

Jon Bodner is part of the Technology Fellows Program at Capital One, currently working on a fork of the LGTM project that will be open sourced soon. Jon's team is helping to transform Capital One through introduction and integration of new technologies, working to shorten release cycles, and generally pushing forward an "open source first" culture.

Jon is a software engineer, lead developer, and architect and enjoys presenting and discussing open source, technology trends, and the future of software engineering. Over the past 20 years, Jon has worked in just about every corner of the software industry including on-line commerce, education, finance, government, healthcare, and internet infrastructure.

Closures are the Generics of Go

Generics are probably the most contentious topic in Go community. Every other modern typed language has them. The recently announced Go 2.0 will probably adopt them. In the meantime, you can get most of the functionality of generics today by taking advantage of a feature that Go does have: closures.

JP Robinson

JP Robinson is a Principal Software Engineer at The New York Times where he has been using and evangelizing Go for over 4 years. When he’s not walking around the office beating the drum to lead coworkers towards serenity with Gophers and Google Cloud, he can be found lounging with his fat cat, enjoying the amazing food of NYC or attempting (and failing) to get the high score on Joust at Barcade.

Building a Multiplayer New York Times Crossword

At The New York Times, we’ve been using Go along with Google’s tools to rebuild the platform behind the crossword product. Recently we’ve been experimenting in adding realtime (and offline) collaborative crossword play and we’re ready to share some of the details of our implementation.

We’ll walk through building a realtime collaborative crossword game that uses App Engine, Firebase’s Realtime Database and other Google Cloud Platform tools for matchmaking, streaming game progress and aggregating game statistics.

Alan Donovan

Alan Donovan

Alan Donovan is a Staff Engineer in Google's infrastructure division, specializing in software development tools. Since 2012, he has been working on the Go team, designing libraries and tools for static analysis. He is the author of the oracle, godoc -analysis, eg, and gorename tools.

Alan is also a co-author of the Go Programming Language book.

Bouke van der Bijl

Bouke van der Bijl is a jack of all trades, master of some at Shopify. He uses Go in his day-to-day work, has written multiple blog posts on the subject, and published multiple semi-serious packages for Go, including one that allows you to monkey patch Go functions (don’t use it).

Making Code Write Itself: How To Build Code Generation Tools in Go

Go’s built-in templating system is powerful and easy to use, but has the problem of interpreting templates at runtime. I created Statictemplate, a tool that performs static compilation to improve performance. I will show both the results, and how you can write a tool in Go that generates code.

Kris Nova

Kris Nova lives and breathes open source. She is transgender, and is transparent about all things in her life. She believes in advocating for the best interest of the software, and keeping the design process open and honest. She is a backend infrastructure engineer, with roots in Linux, and C. She has a deep technical background in the Go programming language, and has authored many succesful tools in Go. She is a Kubernetes maintainer, and the creator of kubicorn, a successful Kubernetes infrastructure management tool. She organizes a special interest group in Kubernetes, and is a leader in the community. Kris understands the grievances with running cloud native infrastructure via a distributed cloud native application, and is authoring an O'Reilly book on the topic called Cloud Native Infrastructure.

Implicitly Impacting the Cloud with Go

In this talk we look at how Go has forever changed the cloud for better and for worse. We draw on real world examples and meaningful data sets. We look at concrete examples in OSS that reflect the constraints and features of Go, and explore how it has implicitly shaped the cloud and tech forever.

Andrew Bonventre

Andrew Bonventre is a senior engineer on the Go team at Google. He is the creator of Google Forms and led the recent UI overhaul of Gerrit, the code review system used by the majority of open source projects at Google (including Go).

From Frontend Engineer to Go Core team member

I cut my teeth early on in my career doing frontend engineering, and I’ve been gradually moving down the stack ever since. In July 2017 I joined the Go Core team at Google. I will share my experiences and tips for pushing out of your comfort zone and overcoming impostor syndrome along the way.

Kat Zien

Kat Zien writes Go, Ruby, bash and PHP at Brightpearl. Working remotely from Bristol, UK or anywhere with wifi. Her main interests include automating #allthethings, sorting out legacy code and making things simpler and faster. She’s co-organising and giving talks at Golang Bristol++ and PHPSW. Kat loves travelling and keeping active, appreciates good coffee and is a big Lego fan. She will be cycling from Copenhagen to Berlin in September to raise money for Room To Read.

Performance Optimisation: How Do I Go About It?

Every developer should be confident that their code is efficient and safe to run in production. But it can be hard to get started. What tools to use? What do the graphs mean? What to look at first? Let’s answer those questions by analysing a simple app using Go tools and some open source projects.

Kevin Burke

Kevin Burke likes building great experiences. He helped scale Twilio and Shyp, and currently runs a software consultancy. Kevin once accidentally left Waiting for Godot at the intermission.

Becoming a Go Contributor

Contributing to the Go project and associated tools can look really intimidating. I’ll share how I went from being a part time Go hacker to a contributor, and discuss how you can get started contributing to Go!

Sean Kelly

Sean Kelly (affectionately known as Stabby) is a Principal Software Engineer for Komand Security. A simple man with a dog for an avatar, he enjoys learning new things, helping / mentoring others, and posting photos of his dog on the internet. When he's not giving talks about his many failures, he enjoys spending time at home with his wife, and coming up with new projects to work on that he will never actually finish.

I Will Debate Mark Bates About All of the Controversial Issues in Go

Mark Bates - A name known throughout the community for terrible opinions.

I will have an open debate with Mark, as a sequel to our famous Boston Go/Ruby cross meetup Go VS Ruby debate (where Mark chose Ruby, AND LOST). I’m not going to say that Mark performed shamefully - but the audience was thinking it.

Go is a great language, with a great community. But there are a good number of “controversial” issues in the community that you see flare up from time to time, with a lot of impassioned people taking up sides on how things should be done “in the go way”.

I will debate Mark on these controversial opinions (dependency management/vendoring, logging, handling errors, frameworks, “just use the stdlib”, and others) in a quick lightning debate, where we inject a little levity into the situation and remind people that it’s ok to laugh at ourselves in good fun.

Also, It’s good to laugh at Mark, which I assume everyone will be doing as I mercilessly destroy him in front of his own audience. The dude has no idea what is about to hit him, and no silly batman costume will save him from me.


JBD is working on the Go programming language at Google. Her current focus is to make Go the best language to write production systems. Before Go, she worked on API infrastructure at Google. She has a decade-long experience in building developer platforms and tools.

Massimiliano Pippi

Massimiliano Pippi is a software developer for over 10 years, more than half spent working on scientific visualization and backend software for a private company, using C++ and Qt technologies. Then a lot of Python, Django and web related applications. I can ops. Open source advocate and active contributor, documentation fanatic, speaker at conferences (for the ❤ of sharing). I wrote a book once.

Currently at Datadog, where I’m allowed to play with high scalable systems, a wide number of different technologies, open source stuff, Python and Golang.

A Python and a Gopher Walk into a Bar - Embedding Python in Go

Success stories about rewriting Python applications in Go are not big news anymore. The pros and cons are well known, best practices are in place, and the standard library is there to help. But what if you want to keep some of your Python code? When we chose to port the Datadog Agent to Go, we needed to maintain support for our existing library of plugins written in Python. During the talk we will share lessons learned from our experiences with cgo, the GIL and the quest for performance as we bridge multiple languages in a single application.

Filippo Valsorda

Filippo Valsorda works on cryptography and systems engineering.

He’s been the main developer of the pure-Go Cloudflare DNS server, and designed its DNSSEC implementation. Then he deployed the crypto/tls and net/http based TLS 1.3 reverse proxy for the Cloudflare edge.

He often writes about Go on his blog, talks about security and programming, and builds Go tools like gvt, hellogopher, the Heartbleed test and the whoami SSH server.

Calling Rust from Go, without cgo

Calling Rust from Go would let us replace unreadable assembly for tasks like crypto.

But cgo is too slow, and we’ll see why. It has to do with goroutine stacks, panics and the GC.

Instead, with knowledge of the Go calling convention and build system, we can use assembly to call Rust directly.

Tim Marcinowski

Tim Marcinowski is part of the Technology Fellows Program at Capital One, currently working on cloud architecture, container infrastructure, and evangelizing Go. Tim has over ten years of experience in large scale operations, development, and open source communities. Before working for Capital One, Tim worked for Puppet, FINRA, CFPB, General Dynamics, and US Navy.

Weekend Project: Building a Distributed Serverless Platform from Scratch

A discussion of existing serverless solutions, design patterns considered, lessons learned from learning Go and a code walkthrough with the libraries and technologies used on a weekend project that uses Go to build a client, master/slave agents, code executor for Go / python, and replicated filesystem using FUSE & Cassandra.

Aditya Mukerjee

Aditya Mukerjee is a systems engineer at Stripe on the Observability team, based in New York City. He studied statistics at Columbia and computer science at Cornell, and has been writing Go professionally for the past four years. When not defending users against online fraudsters, he spends his free time playing German-style board games and listening to embarrassing music.

Monitoring and Tracing Your Go Services

“If a Go microservice falls down in the middle of a server farm, does my pager make a sound?”

If your service is automatically monitored, then the answer is “yes!”. But what if your service isn’t monitored yet? Or what if your monitors alert you when the server is offline, but not on subtler problems like latency spikes or CPU load?

Fortunately, there’s a quick and easy way to get high-resolution metrics for monitoring your services. The Go standard library now contains the basic building blocks for application tracing. When you combine these tools with Veneur, a pure Go distributed metrics aggregator, you can easily answer the questions you care about, like “Which servers are currently running near maximum capacity?”, or “Can our infrastructure handle tomorrow’s product launch?”.