FOSDEM 2014 Go devroom project roundup
We won’t cover things you can easily glean from the slides or abstracts, since we want to have time to pay attention to the talks!
- Iris Decentralized Messaging: Peer-to-peer based messaging for back-end service decentralization (Péter Szilágyi)
- Camlistore: Your personal storage system for life (Brad Fitzpatrick and Mathieu Lonjaret)
- Interfaces: a new leaf for an old book (Matthew Cottingham)
- Scaling with Go: Youtube’s Vitess (Sugu Sougoumarane)
- Write your own Go compiler (Elliott Stoneham)
- Looking toward Go 1.3: What’s coming in the next major release of Go (Andrew Gerrand)
- Porting Go to new platforms: Lessons learned from the Solaris port (Aram Hăvărnanu)
- Lightning talks
Iris Decentralized Messaging: Peer-to-peer based messaging for back-end service decentralization (Péter Szilágyi)
Iris is a messaging framework that Péter Szilágyi developed to simplify the creation of decentralized clusters. It’s Péter’s PhD project and looks quite sophisticated and polished.
Over on Sourcegraph, you can see usage examples and docs for Iris’s Connect function and Connection type. There are 2 other open-source projects using Iris: coopernurse/barrister-go (bindings for Barrister RPC) and coopernurse/retina (an HTTP-to-Iris gateway).
Camlistore: Your personal storage system for life (Brad Fitzpatrick and Mathieu Lonjaret)
Camlistore’s goal is to be a storage system that outlasts any one person or organization and can be used by anybody, not just the nerds in the Go devroom (according to Brad). (Or the seemingly 100 other nerds waiting to get inside. This devroom is seriously in high demand.) Even if you don’t use Camlistore, you can learn a lot by reading its source.
Brad did a live demo where he took a photo of the devroom, uploaded it to his “Camlihouse”, and showed it appear shortly thereafter. Then he opened his Camlistore using FUSE and showed the photo in OS X Finder.
A tidbit of Go standard library lore: the database/sql package was originally extracted from Camlistore. (Check the commit logs if you don’t believe it.)
Interfaces: a new leaf for an old book (Matthew Cottingham)
Matt Cottingham is talking about Go interfaces and how to use them effectively. He discussed how to mock a struct type, giving the example of mocking sql.DB by creating a new interface DBer with the same method set as sql.DB and creating a mock implementation of that new interface. He also covered interesting uses of interfaces in the Go standard library, such as net.IP.
Scaling with Go: Youtube’s Vitess (Sugu Sougoumarane)
Vitess is a library that provides tools that facilitate the scaling of MySQL databases to large scale web services. It’s currently a critical part of production infrastructure at Youtube.
Sugu Sougoumarane gave an incredibly detailed talk about the design and architecture of Vitess and the motivations behind it. Vitess has multiple components.
vttablet sits on top a single MySQL instance and handles things like connection pooling. Another component handles sharding and load balancing to many MySQL instances.
Vitess enables MySQL to serve millions of queries per second at millisecond latency. It’s only about 70,000 lines of code of Go, and Sugu estimates it would’ve taken at least 200,000 lines of C++.
Sugu also talked about his experience using Go for Vitess. He mentioned that there were some issues in the early days (2010) due to the immaturity of the language and library support, but now no one should worry about Go’s performance.
Write your own Go compiler (Elliott Stoneham)
go.tools/ssa library to transpile Go into Haxe, which then gets transpiled to other languages.
Elliot says “30 years ago, I fell in love with the C programming language. I stopped programming 10 years ago. 1 year ago, I started using Go. I fell in love with Go. I fell in love with programming again.”
He did a demo of animated gophers taking C++ manuals, stacking them, and then burning them (in parallel) running in C++ on his machine. The same demo (derived from the same Go source via TARDIS Go) runs online in JS.
Looking toward Go 1.3: What’s coming in the next major release of Go (Andrew Gerrand)
Andrew reviewed the Go 1.3 TODO list. The main topics discussed were the toolchain overhaul (better linker parallelization by moving code gen from the linker to the compilers, and the move to an all-Go toolchain), sync.Pool, and os/fsnotify.
For those interested in the progress toward Go 1.3, Dominik Honnef’s What’s happening in Go tip series is also a great way to stay updated.
Porting Go to New Platforms (Aram Hăvărnanu)
Aram Hăvărnanu is a systems programmer who has worked on various kernels and recently ported Go to Solaris.
He’s talking about how to port Go to new platforms, what to watch out for, specific issues he ran into porting to Solaris, and specific implementation details.
He gave an overview of the Go internals and specific files you’ll need to look at it when making your own port. He’s walking us through specific parts of the Solaris port (Unix signals, syscalls, stack layout).
Compiling Lisp to Go
Gisp is a Lisp to Go transpiler - several examples demoed. Project URL: github.com/jcla1/gisp
Go IntelliJ Idea plugin
If you use IntelliJ Idea, you should check out the Go plugin. It supports syntax highlighting, autocomplete, unused import, go get integration, docs, live code templates. Good demo of the plugin. Future plans: AppEngine support, templates for test files, better GOPATh integration, code refactoring, gccgo support, golint.
tiedot: a NoSQL engine powered by Go
Tiedot is a high-throughput, low-resource NoSQL database engine implemented completely in Go. It’s designed to be easily embeddable in Go programs, but also runs as a standalone HTTP service. Cross platform (Windows and Linux), and low resource consumption means it’s great for embedded systems.
Writing a database driver for fun and freedom
Go database driver for SQLServer using the TDS protocol. Unlike ODBC, is pure Go. Check the project out here.
Webloop: headless webkit in Go
Webloop is a Go library for scripting web browsers (similar to PhantomJS but in Go). Great for testing and scraping. Check out the project here.
Why contributing to Go is cool
Talk about experience using Go inside a large French bank. He ended up making a lot of contributions to the Go compiler and standard lib as part of that work (e.g., parsing numbers efficiently).