After spending a lot of time with OpenAPI schemas and trying to answer the question of “are my HTTP requests and responses actually conforming to what my users are sending and receiving?”, I set out to finally build the solution. Like all projects, it started out small, found some pitfalls, and eventually landed on a pretty solid approach that scales to any spec size. My initial approach was to…
In today’s tech-driven job market, Restricted Stock Units (RSUs) are marketed like pots of gold that companies are willing to hand over to the right candidates. Companies love offering them because they can feel generous without requiring immediate cash outlay and it entices employees to have longer tenures and get their cut. Employees often accept them because there is the potential for a big…
In every generation, a new gold rush emerges. It might be cryptocurrency. NFTs. A new social media platform. Or whatever hot AI trend is flooding your feed today. In each of these hype cycles, there’s a crowd rushing in to stake their claim. Most are driven by dreams of fast success, only to discover that hype burns bright — but often burns out even faster. But here’s the truth: the real winners…
In the frozen wilderness of Antarctica, emperor penguins do something extraordinary. Faced with wind chills that would kill most animals in minutes, they ensure the continuation of their species by forming tightly coordinated, groups that move as one. When building high performing teams that need to operate in mission-critical environments, there’s a lot we can learn from these remarkable birds.…
At NASA’s Jet Propulsion Laboratory (JPL), there is a tradition for “lucky” peanuts to be present at every launch. The tradition dates back to the early Ranger launches where a series of missions were either delayed or unsuccessful. Ranger 1 (Launched Aug. 23, 1961) Launch vehicle failure; spacecraft could not leave Earth parking orbit Ranger 2 (Launched Nov. 18, 1961) Launch vehicle failure;…
For much of my career, I’ve been in positions where I was sought out to provide guidance for larger or more complex tasks. That could be a functional spec for overhauling an existing system, a new vendor assessment or even how to approach a difficult or hard to trace bugs. This was all something I enjoyed as it gave me variety and breadth into the types of work I was doing day-to-day. Along the…
I regularly need a way of running a container ( mitmproxy or tcpdump ) against another running container. Sure, you could stop the container, update the Dockerfile and build in your dependencies but this approach is very cumbersome and slow on most projects. Instead, how about just running a new container and attaching it to the existing Docker network? To get started, build the container you want…
Today while performing some basic networking connectivity tests between Kubernetes namespaces, I found myself without redis-cli which is what I’d usually reach for to test connectivity to a Redis instance. The container also didn’t have nc which left me in a bit of a bind as to what to do. I could have just installed the packages and shipped a new image but instead, I opted to use what I had: bash…
For the longest time, Terraform Registry documentation has been manually updated as the resource is created or modified. This has always been painful to remember and keep in sync given the number of sources of documentation already out there for the Cloudflare provider. However, that is all changing with terraform-plugin-docs . terraform-plugin-docs uses the provider schema to generate consistent…
Since we purchased our new house in 2015, I’ve slowly been building up the home network and the components in it. Until this earlier month, majority of my network was run by Google Wifi and for the most part, it worked great. Unfortunately, between Google making some product changes which I didn’t really agree with and the more complex configuration, I outgrew it. Google Wifi is still my…
If you’re working on a Terraform provider, chances are at some point you want to run in against your configuration before pushing the changes publicly. Until recently, this involved sketchy and error prones solutions such as (ab)using the filesystem mirror directives or modifying your $PATH . These approaches were tedious and in some cases resulted in more debugging that what the code change…
Like most of you reading this, I have important personal data scattered around on various devices (external hard drives, iOS devices, The Cloud™) and until recently, this had not bothered me too much. I take good care of my physical hardware and the cloud services I use have redundancy and durability built in. That was, until I got a text message from a friend who runs his own business earlier…
For the majority of my engineering career, I’ve been on-call in some capacity. Whether it is looking after systems serving 50k rpm and customer facing, an internal service only handling internal traffic or serving as a subject matter expert for a technology in a bunch of systems I’ve rarely touched. Much of the experience was trial by fire (my first couple of months at Envato included one of the…
In 2014, I was being bewildered and overwhelmed with the amount of options for a simple to-do list style application. My needs were pretty simple, I needed something with categorisation (work/personal) and a way to add items; that was it. Unfortunately, every system and application I looked at had those features plus more. This would have been fine however the features were all intertwined and…
Being a combination of remote worker and having a partner who loves travel has forced me to continuously evaluate my travel gear and setup to get the most out of the trip. This is a collection of tools and tips I’ve tested, updated, discarded, updated and then tested again throughout travelling both domestically and globally for personal vacations and work trips. The goal has been simple: do…
Just on 10 months ago I joined Envato as a Site Reliability Engineer and took the plunge into full time remote work. While I’m far from having it all worked out, I’ve managed to stumble across some useful information along the way that I think is worth sharing. What I love Spending time with my wife and family Prior to working remotely my commute was on a train for three hours a day. Yes, 3 hours…
When you run a large application (or many large applications), it is important that you can effectively track down and investigate slow SQL queries when they arise. MySQL doesn’t receive context of where the query is coming from so in your logs you end up with something that will look like this: # Time : 150517 6 : 26 : 05 # User @ Host : mysql_user [ mysql_user ] @ db1 . example . com [ 10 . 0 .…
Whether you run a service or provide a product to customers, there will be times when your service (or part of it) is unexpectantly unavailable. These things happen however providing a good post mortem can demonstrate transparency and build trust with your customers if executed correctly. Leave blame at the door If you don’t already use blameless post mortems, I suggest you go check out some…
When you are working on a large project sometimes you need the ability to gradually roll out a new feature to public facing users. Out of the box, Drupal doesn’t provide too much to assist you with this however one option is to riddle your code with ‘if-something-then-do-something’ checks but what happens if you need to update that condition? You’ve then got to go back through and redo all the…
Building RESTful services within Drupal isn’t a new concept and there are already a lot of existing projects out there that will allow you to build a simple REST service. However, one of the big problems with this approach is that because they are based on Drupal modules they require a full bootstrap process and in many cases, causes the application to pull in functionality that will never be…
Something that all API’s need to consider (no matter how simple they are!) is how they will handle adding and upgrading functionality once someone gets a hold of it. Sure, you could just wing it and rely on your test suite to give you some confidence in just rolling it out…but what about those weird and wonderful ways others may be leveraging your API? How will they cope with your update? One…
Monit (as the name suggests) is a tool designed for monitoring systems, processes and filesystems. There are others out there which go far and above what Monit is capable of but with those more extravagant tools also comes more of a learning curve. Monit does an excellent job in being easy to setup and packs 95% of the requirements most developers will ever need to implement without a need to get…
Bootstrapping a project is a concept that I first seen derived from Ruby on Rails script/server and I was instantly hooked. Fortunately, this concept was beginning to catch on and many open source projects were getting on board with it. The process of having a single point of contact for everything I needed to do in a project (outside of the actual development of course) was amazeballs. No longer…
As all Ruby developers will know, dependency management and isolation in projects is paramount. Example, project ‘A’ is based on a Ruby 1.9.2 and has a version of a gem that only works with 1.9.2 whereas project ‘B’ is a bleeding edge Ruby 2.0.1 application that only works with a few custom gems that you have created. Until recently I was using rbenv which worked great however it was incredibly…
I recently started building a new service in Ruby on Rails and had the need to build an API that users can interact with for their own applications or tools. Unfortunately, Ruby on Rails is a little bit heavy for this so I needed to find something that not only played nicely with my current setup but could also leverage the funcitonality I have already built. I ended up settling on Sinatra . Why?…
Within my daily workflow I can work on 5-6 projects over the course of the week and the likelihood of anyone remembering the exact dependencies and requirements for each environment is close to impossible. In addition to this, I need a development environment that will replicate the production environment so I spend less time debugging inconsistencies and more time shipping code. The solution?…
One thing that is overlooked and under rated in team projects and especially open source collaboration is a good commit message and the benefits that come from that good commit message. Writing a good commit messages will be the difference between understanding the changes and needing to see the diff to understand the changes. Consider the following commit message: [ project/master_branch] updated…