A refuge for sharing experiences with programming and technology.

AWS re:Invent 2019

AWS re:Invent 2019
Another late post, but that’s just how it goes. I attended AWS re:Invent with some collegues back in December of 2019 in Las Vegas. The conference spans multiple hotels on the main strip and has something like 70-80k attendees. Since it was my first time attending, I wasn’t really sure what to expect. Turns out, I had a lot of fun! There were lots of opportunities to try out different AWS technologies.

Hackathon: Using Go on an Arduino

Hackathon: Using Go on an Arduino
This is waaaay overdue, but we had another hackathon at work back in September of last year and even though I’m waaaay behind on blog posts, I wanted to make sure I did a short writeup on my project. During GopherCon, I received a small Arduino Nano 33 IoT. Not exactly a powerhouse, but I wanted to do something with it. I bought a breadboard, sensors, wires, and other various components.

Graceful Shutdown of a Go Service

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:

GopherCon 2019

GopherCon 2019
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).

Tiled in Unity using SuperTiled2Unity

Tiled in Unity using SuperTiled2Unity
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.

Hackathon: Generating Fake Test Data with Python

Hackathon: Generating Fake Test Data with Python
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:

Hackathon: Tello Drone, Go, and Lua

Hackathon: Tello Drone, Go, and Lua
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.

Multi-platform Makefile for Go

Multi-platform Makefile for Go
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.

Worker Pool to Limit Concurrent Goroutines

Worker Pool to Limit Concurrent Goroutines
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.

GopherCon 2018

GopherCon 2018
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.

Hackathon: DNN Service

Hackathon: DNN Service
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.

Microsoft Acquires GitHub

Microsoft Acquires GitHub
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.