I recently spent some time figuring out how to gracefully shut down a Go service. The goal was to allow in-flight transactions to complete successfully before shutting down, but return Unavailable for any new requests. I found the solution to be fairly straightforward for Linux, but a little bit more tricky for Windows, specifically when running in a Windows Docker container.
General solution for handling termination signals (Linux/Darwin) # For most use cases, the os/signal package works for capturing termination signals:
Another year and another GopherCon, this time in sunny San Diego! As usual, there were a lot of high quality talks across a breadth of subjects. I highly recommend browsing through the GopherCon videos on YouTube, but I’ll highlight what I thought were the interesting bits below.
The last year or so has seen a LOT of discussion around dependency management for Go, particularly around dep and Go Modules (formerly vgo).
My brother and I are in the early stages of development and design for a game we are making together. He’s the genius artist and I’m the programmer guy. Everything in-between we share, including map making. There’s an excellent free tool called Tiled that can be used to make 2D maps. It supports layering, automapping, animations, and even collision boundaries. In short, it’s a fantastic tool for creating 2D maps.
We had yet another hackathon at work. This time around, I wanted to do something with Python. Since we have a gap in test data at work, I decided to create a script to generate oodles of fake test data using a Python library called Faker. It has a number of default providers for generating different types of data. It can generate fake addresses, names, dates, phone numbers, etc.
This simple code block:
When the theme for our latest company hackathon was revealed to be “Need for Speed”, I went straight to Best Buy after work and picked up a DJI Tello drone. I had been wanting one ever since I went to GopherCon and saw the presentation by Ron Evans where he used Gobot and GoCV to make a Tello drone follow his friend’s face around. Now that I had a drone, I needed to figure out what to do with it.
Something that Go does very well is multi-platform support. You can build a binary for just about any system without much hassle. On a single build machine, you can build binaries for Windows, macOS, and many flavors of Linux. All that is required is to change the GOOS and GOARCH env variables to the desired OS and architecture. I made a Makefile to take advantage of this.
First I started with a few variables.
Recently, I had the need to process a near infinite number of messages asynchronously. You can’t just throw all the messages into separate goroutines when there are that many of them and more incoming. One solution is to use some sort of worker pool to manage the number of concurrent goroutines that can run. Here’s how I went about creating a worker pool (I’ve called it a task pool) in Go.
I had the privilege again this year to fly out to Denver and attend GopherCon, the premier gathering of “gophers” (people who program in Go). It’s a lot of fun and I learn something every time. After spending the weekend hanging out around town with my wife, enjoying Hammond’s candy and exploring the Denver Museum of Nature and Science, I started the conference with a machine learning workshop. It turned out to not be quite what I expected.
A couple weeks ago, we had another hackathon at work. This time, I wanted to create something useful that could potentially be adapted by one of our teams. My initial thought was to convert some of our old C++ code to Go and remove a Windows dependency, but after talking with one of my coworkers, we decided to instead create a DNN service for executing a Caffe2 model in Go. We had a third volunteer join us and we set out to achieve our goal.
Earlier today, Microsoft announced they are acquiring GitHub, the popular git hosting solution that everyone uses. At least, it feels like everyone uses it. Here’s the announcement from GitHub. I use GitHub and I really like it. It seems to be an integral part of the Go ecosystem and open source software at large. I actually like Microsoft, but I’m not happy about this turn of events. The design and user experience currently present in GitHub are in line with what I want from my version control hoster.
Recently, I had the pleasure of participating in an internal hackathon at work. They gave us two days to create whatever we wanted with whatever group of coworkers. There were no specific guidelines on what the project had to be or what technologies it needed to use, so I decided to go solo and recreate Conway’s Game of Life in Go. I’ve been fascinated with the Game of Life ever since I first heard of it several years back.
If it wasn’t immediately evident, I created this blog fairly recently. After much deliberation and research, I chose Ghost as my blogging platform. I like its simplicity and focus on content. My desire was to use Amazon AWS for hosting, as it is fairly cheap and dependable. It took some fiddling to get Ghost running and I thought I would share what I did in the hope that it would aid someone else. Please note, these instructions assume the person following them already has an AWS account set up and ready to go.