Last week, we onboarded a new engineer to our team. Initially, there was nothing out of the ordinary: gain access to applications, clone the repository, install dependencies, configure the database. But, when they fired up their development environment for the first time, things weren’t working as expected. The symptoms were perplexing. The database was working perfectly. The backend server…
Growing up, I witnessed firsthand the power of perseverance. My mom, an immigrant from Cuba, worked tirelessly as a nine-to-five medical assistant to ensure I had access to the best education she could provide. Her dedication fueled my own drive, but like many first-generation college students, I faced some interesting challenges. When I was in high school, we didn’t have programs that introduced…
This is my third year participating in Advent of Code , but the first using Rust! Since I’m new to the Rust ecosystem, I’ve been dependent on others to steer my third-party library selections. As an example, Day 15 (like most days) presented some interesting string parsing requirements. Luckily, I was guided toward an excellent parser combinator library, affectionately named nom , via Chris…
For the last six months, I’ve adopted a work schedule where you tally up extra hours in the first nine days of a two-week range, and take the second Friday off (also known as a 9/80 work schedule 1 ). Below is a diagram that illustrates one way to do it. When I first adopted this work schedule, I didn’t think I’d value it as much as my peers. For better or worse (increasingly, worse), I’ve come…
In a recent interview, I was asked to pair on a coding problem. Like most live coding exercises, I didn’t do very well. So, in an effort to redeem myself (in the eyes of myself), I studied up on the problem and worked through several solutions. Hopefully, you don’t find yourself in a similar situation. But, if you do, I hope reading through these solutions helps you fair better than I did! Courses…
In the past few weeks, I’ve participated in a handful of DevOps/Site Reliability Engineer (SRE) interviews. Several interviewers have asked for guidelines configuring and operating cloud-native applications. My mind immediately goes to the Twelve-Factor App methodology , originally created by the folks who built Heroku —one of the first publicly accessible platforms as a service (PaaS). Combined,…
For the record, the process of leaving comments on my own pull requests isn’t something I came up with on my own. I adopted it from a previous colleague of mine, Jean Cochrane . A while ago, Jean was being onboarded onto a team I was responsible for. Part of the onboarding process involved working through a breakable toy exercise, which is a project similar in toolset to the ones we’d work on…
As a daily Slack user for the last seven years, I’ve spent a lot of time exploring ways to get the most out of it as a collaboration tool. While I have mixed feelings about its impact on productivity, I figure Slack isn’t going away any time soon, so I may as well learn how to make it work for me. The sections below capture some Slack features and general tactics I’ve employed to make the most out…
A few weeks ago, I set out to upgrade the version of Go (1.6 to 1.15) used to build an old command-line utility I developed, named Heimdall . Heimdall provides a way to wrap an executable program inside of an exclusive lock provided by a central PostgreSQL instance via pg_try_advisory_lock . Now, Heimdall is nice little utility and all (if you’re intrigued, check out the README ), but the most…
This year was my first participating in Advent of Code —and I’m glad I did, because solving one of the challenges exposed me to an excellent data validation library for Python named Cerberus . What’s in a valid passport Below are some excerpts from the challenge, along with specific field level validation rules: You arrive at the airport only to realize that you grabbed your North Pole Credentials…
Keeping project dependencies up-to-date is a challenging problem. Services like GitHub’s automated dependency updating system, Dependabot , go a long way to help make things easier, but that is only helpful if your package manager’s ecosystem is supported . In the case of Scala based projects, it is not. Enter Scala Steward . Scala Steward provides a similar, low-effort way to keep project…
Recently, I had the pleasure of reading Work Is Work , an essay by Coda Hale on organizational design. Aside from providing a thought-provoking perspective on scaling organizational efforts, the post makes reference to two terms from anthropological field research that were new to me: emic and etic . Below, I’ll describe how these terms provide a useful framework for interpreting success stories.…
A few days ago, I spent some time learning how to use Amazon’s Serverless Application Model (SAM) to schedule the recurring execution of Lambda functions. To help better cement my understanding, I assembled an overview of all the SAM template components necessary to schedule the periodic execution of a Go-based Lambda function. I also made note of how I used the SAM CLI to package and deploy…
For the past few weeks, I’ve been starting off my days with Haskell flavored code katas from Codewars . Today I started with the kata below and figured it would be a good exercise to walk through my solution. Write a function that will return the count of distinct case-insensitive alphabetic characters and numeric digits that occur more than once in the input string. The input string can be…
Tor is a piece of free software and an open network that enables anonymous communication. Combined, these two components help defend against various forms of traffic analysis and network surveillance. Trying to re-explain Tor in a comprehensive way is outside the scope of this post, but please read about it via the literature provided by the project site and The Electronic Frontier Foundation…
A small paper reading group has assembled at work. We give ourselves two to three weeks to read a paper, meetup after hours, eat pizza, and discuss it. Our last paper focused on the Raft consensus algorithm, and I was chosen to lead the discussion. In order to help the impact of Raft hit closer to home, I put together a small demo of Raft’s leader election process using Consul . The demo spins up…
On March 23rd, 2015 20:00 UTC, Amazon plans to update the SSL certificate for RDS instances. This means that applications attempting to establish secure connections to Amazon RDS databases from servers without an updated RDS certificate bundle may begin to fail. In order to prevent connection failures to Amazon RDS databases, an updated certificate bundle can be installed on client servers in…
Most Amazon Machine Images (AMIs) are backed by an Elastic Block Store (EBS) volume. This volume houses the operating system and any additional software added to the machine image. When you launch an instance of an EBS backed AMI, the resulting EC2 instance usually includes some amount of instance store storage as well. Instance store is fast (relative to EBS), but also temporary, and physically…
TL;DR : As of the date this post was published, sending e-mail via Amazon Simple E-mail Service (SES) over SMTP with IAM role credentials does not seem to work. Earlier this week, I set out to wire up a Django application with Amazon SES for sending e-mail. Because the application is going to live in Amazon Elastic Compute Cloud (EC2), I decided to make use of IAM roles to provide the application…
Basho packages their own fork of Erlang/OTP along with Riak and Riak CS . The forks are typically an older version of a stable Erlang/OTP release with a few patches. Eventually, all patches included in the Basho fork are merged into later versions of an official Erlang/OTP release. If you’re installing Riak and Riak CS from a package, then all of the hard work that surrounds bundling a custom…
Amazon VPC Amazon Virtual Private Cloud (VPC) is a service that allows you to define an isolated virtual network within EC2. A common scenario involves a VPC with both public and private subnets. Instances within public subnets can send and receive traffic directly to/from the Internet. On the other hand, instances within private subnets cannot receive traffic directly from the Internet and can…
Setting up a cluster of computers for any purpose usually requires installing an operating system. The installation process typically consists of several questions and identical answers for each node in the cluster. Automating the submission of answers to these questions is desirable — not only to prevent inconsistencies, but for general convenience. Preseeding I spent the last few days working to…
Cucumber is often used to test web applications. Many developers hook it into their Rails projects to integration test site features. Wouldn’t it be great if there were a way to test command-line applications in a similar fashion? You can with Aruba . Aruba Aruba is a Cucumber extension for testing command-line applications written in any language. Passing arguments, interacting with the file…