“Because learning without taking notes is like teaching a snail to breakdance: slow and frustrating.” ― Mario Ortiz Manero 

Preview image, with an astronaut lost in space

I've quit my job to get you off your phone

I never expected quitting a job to be so hard! My time at Lyft has been an enriching journey. Tons of smart people at three very different teams, where I’ve learned how the industry works. The technical challenges were endless: from user-facing fe...

 ·  From “Get off your phone!”
Preview image, with Ferris watering plants in a garden and a thief overlooking it from behind a fence

Blindsided by Rust's Subtyping and Variance

Subtyping and variance is a concept that works in the background, making your life easier without you knowing about it. That is, until it starts making your life harder instead. It’s a good idea to know about it, in case you end up being a fool li...

 ·  From “A Plugin System in Rust”
Preview image, with a phone telling the user to touch grass

Beyond Dumbphones: Building a Minimalist Yet Functional Phone

What if there was a company selling phones that, against all odds, optimized how little they were used? There’s a lot of potential here, given that every company is trying to get you hooked on their app. “Dumbphones” have emerged for this very rea...

 ·  From “Get off your phone!”
Preview image, with Ferris lost in complicated Rust errors

The bane of my existence: Supporting both async and sync code in Rust

Imagine you want to create a new library in Rust. All it does is wrap up a public API that you need for something else, like the Spotify API or maybe a database like ArangoDB. It’s not rocket science, you aren’t inventing something new or dealing ...

 ·  From “Maintaining RSpotify”
Preview image, with multiple stickmen and Ferris partying

[Talk] Rust, the best and worst thing to happen to Tremor

Hello! I’ve recently had the pleasure of giving a talk at this year’s TremorCon. I really enjoy public speaking, so this has been an excellent opportunity to get better at it (let me know your thoughts!). In case you missed it, you can check out t...

 ·  From “A Plugin System in Rust”
Preview image, with various burritos that contain Ferris inside of them

Plugins in Rust: Wrapping Up

Welcome to the final article of this series! Here I’ll showcase some clean-ups and optimizations I may or may not have performed yet, so that our plugin system can get closer to production. I will also run benchmarks for some of these to ensure th...

 ·  From “A Plugin System in Rust”
Preview image, with two dirty hands being rubbed

Plugins in Rust: Getting our Hands Dirty

Welcome to one of the last articles of this series! Previously, we covered how to use external dependencies to lessen the work necessary to implement our plugin system. Now that we know how to actually get started, we’ll implement it once and for ...

 ·  From “A Plugin System in Rust”
Preview image, with the logo of crates.io

Plugins in Rust: Reducing the Pain with Dependencies

Previously in this series, I covered how the plugin system could be implemented from scratch. This is a lot of work if you’re dealing with a relatively large codebase and therefore a complex interface in your plugin system, so let’s see how we can...

 ·  From “A Plugin System in Rust”
Preview image, with a diagram of rspotify's architecture

Designing an API Client in Rust: New RSpotify Version a Year Later

This article in the Rspotify series describes my journey of basically rewriting the entirety of this Rust library; around 13 months of work (in my free time), starting at September 2020, up until October 2021. I think this has given me enough expe...

 ·  From “Maintaining RSpotify”
Preview image, with a diver finding Ferris deep under the water

Plugins in Rust: Diving into Dynamic Loading

In the last article of this series I wrote some simple experiments of plugins both with WebAssembly and dynamic loading. After discarding Wasm for this specific plugin system, I wanted to try to get a more realistic example with dynamic loading an...

 ·  From “A Plugin System in Rust”
Preview image, with Ferris reading various books and a question mark on top of it

Plugins in Rust: Getting Started

Welcome to the second article of my “Plugins in Rust” series! Here I will try to actually write some simple code of what a plugin system might look like, and try to answer any questions that may arise while doing so. Even though the project is spe...

 ·  From “A Plugin System in Rust”
Preview image, with a screenshot of Godbolt's compiler explorer

Why you shouldn't obsess about Rust "features"

Rust makes it very easy to express conditional compilation, especially thanks to Cargo “features”. They’re well integrated into the language and are very easy to use. But one thing I’ve learned by maintaining RSpotify (a library for the Spotify AP...

 ·  From “Maintaining RSpotify”
Preview image, with the logos of Lua, Wasm, Python, eBPF, and more

Plugins in Rust: The Technologies

Welcome to the “Plugins in Rust” series! During the next months I’ll be involved in a project with Tremor, for which I need to implement a Plugin System. The goal is to maximize modularity and reduce Rust’s wild compilation times. The implementati...

 ·  From “A Plugin System in Rust”
Preview image, with Ferris and a question mark

Optional parameters in Rust

Optional or default parameters are a very interesting feature of some languages that Rust specifically doesn’t cover (and looks like it won’t anytime soon). Say your library has lots of endpoints like so: fn endpoint<T1, T2, T3, ...>(mandato...