GopherCon 2015 Recap
With todays release of the videos from GopherCon 2015 I thought I would write up my 5 minutes recap of the conference, in case it helps someone pick the videos that might interest them.
Go Kit: A Standard Library ...
Peter Bourgon
Codifying what it means to write a microservice at a “modern enterprise”. Providing a standard set of APIs for services that wrap common libraries.
- Transports
- Logging
- Instrumentation
Delve Into Go
Derek Parker Engineer at Hashrocket
Delve is a Go debugger, that works directly on the binary. Looks like some special build steps are involved to keep symbols but not a code injection solution. Go-aware so that goroutines are available and understood, unlike in gdb. Very early release.
How a complete beginner learned Go ...
Audrey Lim Developer Evangelist at Nitrous.IO
Amazing talk by a lawyer turned developer. Learned HTTP/CSS/JS then wanted to learn about the “backend”. Lots of issues with trying to learn python or ruby because of frameworks. Enjoyed go’s simplicity because it allowed her to focus on the problems she wanted to solve.
A Practical Guide to Preventing Deadlocks ...
Richard Fliam Software Engineer Lead on Comcast VIPER’s Pillar linear packager
Advice …
- Focus on DataFlow
- Draw flow
- Pipelines
- Exit Strategies
One of the big lessons from this talk that hit home for me was that CSP != OOP. This really changed the way I am thinking about Go.
Go GC: Solving the Latency Problem
Rick Hudson Engineer at Google
Go 1.5 has a new Garbage collector
- Mark and sweep
- Uses app “help” to identify changes during the mark phase
- Trades throughput for latency
More improvements coming in 1.6
Simplicity and Go
Katherine Cox-Buday Software Engineer at Canonical
Go’s quest for simplicity is clouded by - pop culture, a desire for ease, appeals to authority, small projects/std lib as examples. Easy and Simple aren’t the same thing. What’s really driving simplicity - simple language, composability, concurrency, code that scales, duck typing. Don’t Simplify by Coincidence.
Rebuilding Parse.com in Go - an opinionated rewrite
Abhishek Kona Engineer at Parse.com
Parse was a Ruby on Rails shop - moved to Go one process at a time.
- No downtime
- Backward compatibility
At least one service supports 6x the concurrent connections after rewrite. Tests run in ⅛ of the time, and apps start an order of magnitude faster. Created lots of libraries - dep injection, graceful restarts, error reporting, “generics”.
Prometheus: Designing and Implementing ...
Björn Rabenstein Production Engineer at SoundCloud
Focused on a couple problems in the prometheus code base. Atomic are faster than channels and locks. Doubles can be wrapped into 64 bits for atomic ops. Running benchmarks in go now allows for multiple CPU settings so that you can compare across different resources.
What Could Go Wrong?
Kevin Cantwell Lead Architect at Timehop
Lots of lessons from programming in Go
- Don’t modify maps while ranging over them
- Closures hold pointers to values - so very dangerous in loops
- Arrays are pass by value <- very very confusing
- Typed values returned as an interface aren’t nil
- You can override pre-declared values in your package - and that is really scary
Static Code Analysis Using SSA
Ben Johnson Open source Go developer in databases & distributed systems
There is an experimental package called SSA
- Provides an internal representation, like assembly, of the code
- Can be used to track data flow
Several really cool tools are built on top of this
- safesql looks for sql injection
- gorename does safe renaming
Go for Mobile Devices
Hana Kim Engineer at Google
Ongoing project to build mobile apps in Go. You can now compile static and dynamic libraries with go - which you can link in manually (think JNI). Building tools for better language bindings. Released an ios and android app called “ivy” written by Rob Pike in Go.
Go Dynamic Tools
Dmitry Vyukov Bug slaughterer at Google
Built a race detector, fuzzer and execution tracer. Talked a lot about fuzz tests, which have found a number of issues in the stdlib and in other places.
- Randomized input into tests based on initial set of inputs
- Smart mutations
Embrace the Interface
Tomás Senart Software Engineer and Author of Vegeta
Minimize interface methods so they don’t leak functionality. Use the decorator pattern to wrap interfaces implementations with other implementations - nice example in the talk for HTTP client. Go is about composition.
Uptime: Building Resilient Services with Go
Blake Caldwell Developer, Kentik
Case study of an SSH Proxy at Fog Creek for Kiln. Lots of real world advice. Example of setting a version variable value at compile/build time. Discussion of pprof and Fog Creek open source profiling library.
I worked with Blake on this project. His talk is really interesting and the library he built for runtime profilling is really useful.
The Many Faces of Struct Tags
Sam Helman Software Engineer at Flatiron Health
Kyle Erf Kernel Tools Engineer at MongoDB
Struct Tags are comments inside a struct definition. Encoding libraries use them to set names and flags. Rely on convention, but go vet knows the convention as does reflection. There are some interesting libraries that use these for validation and mapping.
Betting the Company on Go and Winning
Kelsey Hightower Product Manager, Developer and Chief Advocate at CoreOS
Using Go for many tools: etcd, rkt, flannel. Discussed some of the issues with vendoring, but 1.5 is working toward solutions.
Go History
There were 3 talks focused on Go's history and some of its future.
The Roots of Go
Baishampayan Ghose Co-founder at Helpshift
The Evolution of Go
Robert Griesemer Engineer at Google
Closing Keynote
Andrew Gerrand Engineer at Google
and More ...
Cayley: Building a Graph Database
Barak Michener Backend Developer at CoreOS and lead maintainer of Cayley
Cayley is a graph database built on other datastores. Discussion of how to optimize this process.
Code Generation For The Sake Of Consistency
Sarah Adams Software Engineer at Restless Bandit
Discussion on using code generation to build docs from tests and vice-versa. I think Sarah needed some guidence on this talk and unfortunately I can't recommend it.
and More ...
Pre-Talk on Sets in Go - github/xtgo/set
// Inter performs an in-place intersection on the two sets [0:pivot] and
// [pivot:Len]; the resulting set will occupy [0:size]. Inter is both
// associative and commutative.
func Inter(data sort.Interface, pivot int) (size int) {
Interesting shift from defining a data structure to defining operations