It's 2026, you don't need to deal with git
It’s 2026, you don’t need to deal with git.
Recent content on Matthew Mayer's tech blog
It’s 2026, you don’t need to deal with git.
Looking back at 2025: Technical and Personal reflections.
Jujutsu (JJ) for my workflow This is how I use JJ. There’s a lot one can do with source control tools; this is what I do. Terms are a bit loose, especially commits versus changes and branches versus bookmarks.
Looking back at 2024: Technical and Personal reflections.
How to split code changes We’ve all been there: when writing code, we fall victim to “while I’m here, I might as well…” and end up with a collection of code changes instead of a focused set of deltas. One term for this is shipwrights disease. It’s so easy to fix this typo, update this comment, change this dependency, etc… There are ways out and methods…
Closed loop development Brace yourself for car analogies. Vehicles: open/closed loops Modern cars have two modes of operation: open loop and closed loop. Open loop: get engine inputs such as engine speed, air temperature and how much air is going into the engine. Apply a set of rules to determine how much fuel to put in. Closed loop: using the above data combined with information from the exhaust,…
The tiny guide to Rails (that I wish I had) I’ve found Rails to rely on more convention over configuration than I’m comfortable with - so much so it seemed impenetrable at times. This is the tiny guide to Rails I wish I had to understand where code lives and how the application works. Know where to find things Go to definition or go to implementation doesn’t work well with Rails…
As the challenging year of 2020 wraps up, here’s what happened in the past twelve months with a focus on my experience in technology. Rust I’ve been writing Rust since mid 2015. That’s over five years of working with the language. At the start of 2020 I stepped back from my work on Rusoto, an AWS SDK for Rust. Looking back: every line of Rust I’ve written has been unpaid,…
Rusty von Humboldt is a GitHub Archive data explorer and Extract, Transform and Load (ETL) tool. Or: seeing how far the tools you know can take you.
This is my perspective of the current state of Rusoto as a semi-retired maintainer and Amazon outsider. The post borrows the term winter from AI Winter: a time period of decreased interest and funding. Amazon is hiring engineers for an AWS Rust SDK Amazon has two public job openings for Senior Software Development Engineers - AWS Rust SDK. There’s now enough customer demand for Amazon to…
Red/green bugfixes are the best technique for communicating understanding of a bug and its solution, especially for asynchronous code reviews. A bug Say a new bug has been discovered in a backend service. If it’s found in production, the first instinct is to solve it as quickly as possible. While laudable, this kneejerk reaction can actually make the fix slower and harder for others to…
TL;DR: I’m not working on Rusoto any more. A history of Rusoto Anthony DiMarco and I started Rusoto in July of 2015. I knew we started the project shortly after Rust’s 1.0 release, but I didn’t realize we had our first commit less than two months after Rust 1.0 landed. Wow! Some early parts of Rusoto are similar to how Rusoto looks now, others are quite a bit different. Our first…
Per my tweet: doing Advent of Code 2019 the wrong way. 😁 Today we’re easing into #serverless. WHAT are we doing? Advent of Code! Advent of Code is an Advent calendar of small programming puzzles for a variety of skill sets and skill levels that can be solved in any programming language you like. It’s an excuse to play around with smaller coding problems and enjoy some recreational…
Rust: a Language for the Next 40 Years put a seed of an idea on my head. I recommend watching the 55 minute video if you haven’t had a chance yet. The recent posts on the Microsoft Security Response Center blog helped the pieces click in my head. Rust is like anti lock brakes (ABS) for motorcycles. Wait, what? There are a lot of parallels here! Bringing a motorcycle to a stop as quickly as…
Like last year I’m taking a summer break from open source, including Rusoto. Outside time is good for me I’ll be spending more time outside and less time on a computer until September 2019. There won’t be a disappearing act but I’ll be significantly reducing the amount of time spent on computers for the next few months. Until then!
Most software developers will tell you that tests are good. More tests are better. How much is enough? How can one recognize diminishing returns? What types of tests should be written? Here are some guidelines for determining what a team’s “enough” level of testing is. Definitions and goals unit test: tests a single unit of code. Think a single function or method. If there are…
A hot take on hot patching/fixing. Definitions A hot patch, or hot fix, is a method of fixing a critical bug found in production by following a branching strategy that’s outside the norm of software development. Specifically called out in Gitflow, this process is more complex and error prone than treating a critical bug as a regular bug or feature. When following Gitflow, a hot patch can get…
Rusoto supports asynchronously running commands to AWS. While immediately making a blocking call to AWS is a common use case, one can create actions to run async and let the tokio runtime handle it. This opens up the ability to run multiple AWS calls concurrently. If a project sets up infrastructure on AWS, the actions that don’t depend on others to finish can run concurrently. For example:…
I’m often involved in hiring. When GitHub links are on a resume, I look at pinned repos and source repos. Here’s a checklist of important items to have in a GitHub public repository to catch the eye of reviewers. Or at least my eye when hiring, and why it’s important. Your goal, my goal Yours: get hired. Mine: make an informed decision about hiring someone who can do the job.
“Dance like nobody’s watching. Encrypt like everybody is.” In this post we’ll go over how to get the postgres crate and r2d2_postgres working with openssl for connection pooling with TLS. Source code is available. Goal Modern web applications are built with resiliency and fault tolerance in mind. For our example, we’ll be examining parts of a web application backed by…
Previously, we defined Continuous Integration (CI), Continuous Deployment (CD) and build servers. Now we’ll see how combining these concepts creates something greater than its parts: a true CI/CD pipeline. Continuous Integration and Continuous Delivery are processes that tell humans what techniques to use with source control. Build server is a server, servers or a system that automatically…
Ever hear someone say “CI/CD build pipeline” and weren’t sure that that means, exactly? Let’s define and explore the concepts of: Build server Continuous Integration (CI) Continous Delivery (CD) Three separate ideas Build server is a server, servers or a system that automatically builds and tests code. Continuous Integration and Continuous Delivery are both processes,…
After three years maintaining an open source project, it’s time to take a few months of me time. TL;DR I’m taking a break to do things I’ve been missing. I will be back, no later than September 1st, 2018. Rusoto history and running an open source project Back in early 2015, Anthony DiMarco and I started Rusoto. Rust’s promises of performance and correctness looked like a…
List of links for topics including: Git Branching strategies Ruby Go Testing Cloud and AWS Git Think like a Git Pro Git Branching strategies GitHub flow Trunk based Development Ruby Learn Ruby the Hard Way Go Effective Go Golang Tripping Hazards Testing Practical Test Pyramid https://en.wikipedia.org/wiki/Test-driven_development Red Green Refactor Repeat Cucumber general reference Cloud and AWS…
Per the call for blog posts, I’ve got thoughts and ideas on where Rust can go in the upcoming year. My wants haven’t changed much over the last year or so: give me non-embarassing compilation speed! 😁 Before getting started, I’m very appreciative of the hard work put into the overall Rust community and ecosystem, including the behind-the-scenes work. It’s difficult to…
Rusoto, an unofficial SDK for Amazon Web Services, had a wonderful year! We made great strides in improving functionality, increasing the number of services covered and making various ergonomic changes. Improved functionality Added all publicly available AWS regions Custom endpoint support HTTP connection pools for connecting to services S3 supports streaming responses: no more loading the entire…
Test Driven Development (TDD) encourages better software design. When the desired behavior is known and expressible, it’s highly effective to make modular and easily tested code. Let’s take a look at using TDD with Rust, using release-party as an example. What we’re changing Release-party is a command line tool I made for my day job. We’ve got a fair amount of repositories…
While a software enginerd/pixie wrangler at heart, I’ve discovered the stereotypical developer path of grabbing a ticket from Jira, working on it, shoving the results to QA and repeat isn’t for me. The biggest reason is how this leaves a tremendous amount of efficiency on the table. This inefficient approach is difficult to reconcile with empathy for the customer buying and using the…
My recap of RustConf 2017 in Portland, Oregon. Or: how I avoided hotel surge pricing during the eclipse weekend! RustConf the second I’ve been told the first conference for community or technology is the best. I’m happy to report I don’t believe it applies in this case! The first RustConf set a tone of possibility and potentials whereas RustConf 2017 focused more on the progress…
This is part three of Rusoto code generation. The first two parts went over how code inside a crate is generated. In this post, we’ll take a look at how we make the crate for an AWS service. Parts one and two recap In the previous two posts, we followed code generation from the Simple Queue Service (SQS) botocore service definition to Rust code. We glossed over where the generated code went…
In the previous post we took a quick tour of the major pieces of Rusoto code generation. In this post we’ll get deeper into code generation for the Simple Queue Service. Picking up from part one Part one described a few parts of Rusoto codegen: Finding which services to generate Making the service’s crate Generating the service and placing it inside its crate rustfmt the generated code…
Writing a software development kit (SDK) is a challenge. Especially when the target has a tremendous number of services, endpoints and different styles of interacting, such as REST, querystring and “other.” Rusoto uses the botocore service definitions to create Rust code to interact with Amazon Web Services. Let’s dive into how it’s done! Using Simple Queue Service as an…
Since the publication of Rusoto RDS walkthrough, a new version of Rusoto has been released: 0.25.0. This includes some breaking changes so let’s work through those. We’ll also be cleaning up some of the rougher edges in the previous walkthrough. rusoto-rds-mk2 The previous project’s source code is on github. We’ll be making a new project based off that one. You can see the…
Let’s tie some great Rust crates together! In this walkthrough, we’ll use Rusoto to create a Postgres RDS database instance, Rocket.rs to make a web server and Diesel to talk to the database on AWS to make a proof of concept hit counter. Walkthrough overview There are two projects in this walkthrough. First is rusoto-rds. This creates the Amazon Web Services (AWS) Relational Database…