CI/CD with GitHub Actions

In a previous post, I created a Chat Bot Auto Responder. That little project was written in Go. It was deployed directly to GCP as a Cloud Function via the gcloud CLI.

I used two Cloud Functions, one for testing (responding to a sandbox channel), and one for the actual channel (production). After the initial launch, I pushed the code up to GitHub and wanted to use GitHub Actions as the CI/CD mechanism for future development.

This post describes the CI/CD workflow I wanted and what I settled on.

Read more →

Writing a Chat Bot Auto Responder

Chat bots are popular in the industry right now. They are used for customer service, devops, and even product management. In this post, I’ll dive into writing a very simple bot while dealing with an inconsistent chat service API.
Read more →

Engineering Management: Lessons Learned

I made my jump over to management a number of years ago when I was at a startup. I didn’t understand what I was getting into until years later. Management is rewarding and exhausting. It tests your courage and ability to handle conflict.
Read more →

Getting started with Nerves; embedded elixir on Raspberry Pi 3

Why elixir for an embedded device? Elixir treats binary as a data type. Sending a binary stream to a device can be trivial and elegant. Pretend that we have a device that requires 17 bits per message (like a MCP3008 analog input). We can send a start bit, followed by a mode bit, then 3 bits for sensor id, then 12 bits of empty bits, in a very succinct way1:
Read more →

Playing short sounds in iOS with Swift 3

It was hard to find a concise example of playing a short audio sound in an iOS application using Swift 3. I write one such example here for posterity:
Read more →