RSSAmplifier

Blog

Matthias Endler

Consultant at corrode.dev. Likes just-in-time compilers and hot chocolate

endler.devRSS feed ↗74 posts

Latest posts

How Other Link Checkers Do Recursion

After I published Five Years of Trying to Add Recursion to lychee , one reply I got was a very fair question: If recursion is so hard, how do other link checkers do it? Plenty of them already crawl websites! This sent me down a rabbit hole of reading the code of other link checkers. The key takeaway is: they didn’t find a clever trick we missed. They were built as crawlers from the very first…

Five Years of Trying to Add Recursion to lychee

Recursion has been lychee ’s longest-standing open issue. It’s been sitting there, unresolved, for over five years now. If you haven’t come across it before, lychee is a fast, async link checker written in Rust (BTW). You point it at your website, your docs, your README, your Markdown files. I started it in 2020 because I got bored at home. By now, around 40k GitHub repositories depend on it.…

Hosting My Own Newsletter

I had a newsletter on this blog for years, but I didn’t send a single email for a long time. This is the story of how I finally got it back up and running, and what I learned along the way. A quick note up front, because this caused some confusion: by “hosting my own” I mean I don’t use a newsletter platform . The signup backend and the CLI I use to send issues are mine, and the issues themselves…

On Taste

I’ve been refining this blog’s design for two decades now. With each new version, I get a little better at knowing what I want. Turns out, my designs tend to get simpler with time. At this point, it’s all typography and negative space. I got better at knowing what I value and what I can take away . Uncluttering brings joy. Maybe that’s a deeply human thing? Screenshots of my blog’s design over the…

Now's The Time To Start That Blog

I was listening to a podcast recently where someone pointed out something curious: machines have been better at playing chess than humans for three decades now, and nobody cares. People still watch human chess players. If anything, chess is experiencing a renaissance. I don’t know anyone who wants to watch robots play chess. But I know plenty of people who love watching humans play. I’m not a big…

Building Up And Sanding Down

Over the years, I’ve gravitated toward two complementary ways to build robust software systems: building up and sanding down. Building up means starting with a tiny core and gradually adding functionality. Sanding down means starting with a very rough idea and refining it over time. Neither approach is inherently better; it’s almost a stylistic decision that depends on team dynamics and…

On Choosing Rust

Since my professional writing on Rust has moved to the corrode blog , I can be a bit more casual on here and share some of my personal thoughts on the recent debate around using Rust in established software. The two projects in question are git ( kernel thread , Hacker News Discussion ) and the recently rewritten coreutils in Rust , which will ship with Ubuntu 25.10 Quizzical Quokka . What…

How To Review Code

I’ve been reviewing other people’s code for a while now, more than two decades to be precise. Nowadays, I spend around 50-70% of my time reviewing code in some form or another. It’s what I get paid to do, alongside systems design. Over time, I learned a thing or two about how to review code effectively. I focus on different things now than when I started. Think About The Big Picture Bad reviews…

Repeat Yourself

One of the most repeated pieces of advice throughout my career in software has been “don’t repeat yourself,” also known as the DRY principle. For the longest time, I took that at face value, never questioning its validity. That was until I saw actual experts write code: they copy code all the time 1 . I realized that repeating yourself has a few great benefits. Why People Love DRY The common…

Watching Millionaires

I watched the Champions League final the other day when it struck me: I’m basically watching millionaires all the time. The players are millionaires, the coaches are millionaires, the club owners are millionaires. It’s surreal. This week I watched John Wick Ballerina and, again, there’s Keanu Reeves, who is a millionaire, and Ana de Armas, who is as well. Yesterday I heard about Trump and Musk…

Paolo the Plumber

Paolo was a plumber. People knew him as a reliable and thorough craftsman. He fixed the pipes in his small town and made a good living doing so. One day, his friend Mario told him that he’d bought a plumbing machine. Paolo was intrigued and asked how it worked. “It’s magical!” said Mario. “I show it what’s broken, and it fixes the problem in no time!” Paolo asked if he could watch the machine…

Reinvent the Wheel

One of the most harmful pieces of advice is to not reinvent the wheel. It usually comes from a good place, but is typically given by two groups of people: those who tried to invent a wheel themselves and know how hard it is those who never tried to invent a wheel and blindly follow the advice Either way, both positions lead to a climate where curiosity and exploration gets discouraged. I’m glad…

No Matter What

As kids, our parents established a few simple rules that we would all follow, no matter the circumstances. One of them was that we’d always have dinner together in the evening, typically around 6pm. In almost two decades, they never broke that rule. We had dinner on 9/11 and when mom was at the hospital. It’s not always easy. There’s a nice thing that happens when you have such a golden rule:…

The Best Programmers I Know

I have met a lot of developers in my life. Lately, I asked myself: “What does it take to be one of the best? What do they all have in common?” In the hope that this will be an inspiration to someone out there, I wrote down the traits I observed in the most exceptional people in our craft. I wish I had that list when I was starting out. Had I followed this path, it would have saved me a lot of…

So You Want to Start a (Tech) Podcast

For the past year, I’ve been hosting the Rust in Production , a podcast about companies who shape the future of infrastructure. This journey has taught me a lot about what it takes to create and maintain a successful podcast. Well, success is always relative; at the moment we have around 5k regular (monthly) listeners. Maybe not a ton of people, but it puts us comfortably into the top 5% of…

Follow the Hackers

Want to see tomorrow’s important technologies? Watch what hackers are passionate about today. Defining “Hacker” I’m using the term “hacker” in the spirit of the Hacker Ethic, as described by authors like Steven Levy and Pekka Himanen . In this context, a hacker is someone who: Follows their passion and seeks self-fulfillment through technology Creates something beneficial for the wider community…

Be Simple

Last night I realized that my life is very simple. That’s not by chance, but by conscious effort. Life becomes complex all by itself if you do nothing about it. One day you’ll wake up and you have a mortgage, 10 on-demand subscriptions, 20 insurances, 1000 open browser tabs, a demanding job and a dog. And when you realize it, you wonder how you got there. I keep my life simple because I know my…

What to Write

People sometimes ask me how I come up with things to write. To me, it’s the same as asking how I come up with things to say. There’s always something to say. It might not be novel or interesting to most, but it’s important to me and hopefully to someone else. What people actually want to know is how to come up with something interesting to write. But why should that matter? What if people don’t…

Move Slow and Fix Things

Growing up as a kid in rural Bavaria, I always dreamed of moving to the US to run a startup. Many kids in my generation shared that dream. To me, it felt like the only way to combine my two greatest passions: writing code and building things. As I got older, I became disillusioned with the narrative surrounding Silicon Valley. The hockey stick growth, the VC money, the “get rich quick” mentality –…

Asking Better Questions

Recently, I realized that I mostly get paid to ask questions. As a consultant , advising companies As a podcast host In calls with potential clients The curious thing is that, like most people in a similar position, I never had any formal training in asking questions! I basically just wing it and try to get better over time. That got me thinking: What makes a good question? The other day, I…

The Dying Web

I look left and right, and I’m the only one who still uses Firefox. At conferences and in coworking spaces, it’s always the same scene: people using some flavor of Chrome. Sometimes it’s Brave, sometimes Chromium, most of the time it’s just Google Chrome. I find that hilariously appalling. An entire generation grew up with access to great free tools and open standards, which helped them jumpstart…

How To Sell To Developers

One of the hardest challenges I know is how to sell to developers. This is NOT an article for developers. Today, I want to write for non-developers whose job it is to sell to developers. My goal is to help you understand how they think. Developers Hate Being Sold To We tend to be a skeptical bunch! We’re not reachable through Google ads because we use ad blockers. We expect software to be free and…

Cursed Rust: Printing Things The Wrong Way

document.addEventListener("DOMContentLoaded", function() { lightEmbedInit(); }); There is a famous story about a physicist during an exam at the University of Copenhagen. The candidate was asked to describe how to determine a skyscraper’s height using a barometer. The student suggested dangling the barometer from the building’s roof using a string and then measuring the length of the string plus…

Deploy Rust Code Faster

I’ve come a long way in my tech journey, from dealing with bare metal servers to exploring the world of cloud computing. Initially, it seemed so straightforward – spin up a server, deploy a container, and you’re done. But as I delved deeper, I realized that the ease of infrastructure is not as simple as it appears. Cloud providers offer a multitude of tools, each with its own learning curve:…

Little Helpers

Yesterday I couldn’t help but feel a sense of awe at all the conveniences modern life has to offer. A lot of the chores in our household are taken care of by little helpers: The dishwasher washes the dishes, the washing machine washes the clothes, and the robot vacuum cleaner cleans the floors. The refrigerator keeps our food cold, the microwave heats it up, and the oven cooks it. We take all of…

A Reader Mode Proxy for the Slow Web

Reader showing an article in light and dark mode. tl;dr: I built a service that takes any article and creates a pleasant-to-read, printable version. It is similar to Reader View in Firefox/Safari, but also works on older browsers, can be shared and has a focus on beautiful typography. Check out the source code . The web used to be such a fun place. Nowadays? Meh. Trackers, ads, bloat,…

zerocal - A Serverless Calendar App in Rust Running on shuttle.rs

Every once in a while my buddies and I meet for dinner. I value these evenings, but the worst part is scheduling these events! We send out a message to the group. We wait for a response. We decide on a date. Someone sends out a calendar invite. Things finally happen. None of that is fun except for the dinner. Being the reasonable person you are, you would think: “Why don’t you just use a…

The Uber of Poland

A few years ago I visited a friend in Gdańsk, Poland. As we explored the city, one thing I noticed was that cabs were relatively expensive and there was no Uber. Instead, most (young) people used a community-organized service called Night Riders . I couldn’t find anything about that service on the web, so I decided to write about it to preserve its history. Delightfully Low-Tech What fascinated me…

How Does The Unix `history` Command Work?

Source: Cozy attic created by vectorpouch and tux created by catalyststuff — freepik.com As the day is winding down, I have a good hour just to myself. Perfect time to listen to some Billie Joel (it’s either Billie Joel or Billie Eilish for me these days) and learn how the Unix history command works. Life is good. Learning what makes Unix tick is a bit of a hobby of mine. I covered yes , ls , and…

Spreadsheets Make For Great Business Ideas

One of the best decisions I made in 2020 was to open my calendar to everyone. People book appointments to chat about open-source projects, content creation, and business ideas. When we discuss business ideas, the conversation often leans towards problems suited for startups, such as using artificial intelligence to find clothes that fit or building a crowdfunding platform on the blockchain. While…

Starting A Print-On-Demand Business As A Software Engineer

One day I had the idea to make a print of my Github timeline. I liked the thought of bringing something “virtual” into the real world. 😄 So I called up my friend Wolfgang and we built codeprints . It’s my first “physical” product, so I decided to share my learnings. Felix Krause of fastlane fame was one of our first customers and we are very thankful for this tweet promoting our service, which…

So You Want To Earn Money With Open Source

I earned 0 Euros from maintaining OSS software for years, and I thought that’s the way things are. I finally looked into ways to monetize my projects last year and in this talk I want to share what I learned so far. It didn’t make me rich (yet!), but I built my first sustainable side-project with analysis-tools.dev ✨. I’ll talk about this and other projects and the mistakes I made on the road…

My Blog Just Got Faster: Cloudflare Workers and AVIF Support

Did I mention that this website is fast? Oh yeah, I did , multiple times . Few reasons (from ordinary to the first signs of creeping insanity): 📄 Static site ☁️ Cached on Cloudflare CDN 🔗 ️HTTP/2 and HTTP/3 support 🚫 No web fonts (sadly) ✅ Edge-worker powered analytics (no Google Analytics) 🌸 Avoiding JavaScript whenever possible; CSS covers 90% of my use-cases. 🖼️ Image width and…

Launching a Side Project Backed by Github Sponsors

Yesterday we launched analysis-tools.dev , and boy had I underestimated the response. It’s a side project about comparing static code analysis tools. Static analysis helps improve code quality by detecting bugs in source code without even running it. What’s best about the project is that it’s completely open-source . We wanted to build a product that wouldn’t depend on showing ads or tracking…

What Happened To Programming In The 2010s?

A while ago, I read an article titled “What Happened In The 2010s” by Fred Wilson. The post highlights key changes in technology and business during the last ten years. This inspired me to think about a much more narrow topic: What Happened To Programming In The 2010s? 🚓 I probably forgot like 90% of what actually happened. Please don’t sue me. My goal is to reflect on the past so that you can…

Tips for Faster Rust Compile Times

This post has moved to my other blog . It will be updated there in the future.

Gravity

Here’s a test to show your age: Do you still remember that funny JavaScript gravity effect , which Google used on their homepage ten years ago? This one? document.addEventListener("DOMContentLoaded", function() { lightEmbedInit(); }); I wanted to have some fun and integrated it into a website I was building. Unfortunately, it didn’t work out-of-the-box. It choked on some DOM elements that were not…

Hacker Folklore

Some computer terms have a surprising legacy. Many of them are derived from long-obsolete technologies. This post tries to dust off the exciting history of some of these terms that we use every day but aren’t quite sure about their origins. Let’s jump right in! Bike-Shedding Today’s meaning: A pointless discussion about trivial issues. The term bike-shed effect or bike-shedding was coined as a…

A Timelapse of Timelapse

Timelapse is a little open-source screen recorder for macOS. It takes a screenshot every second and creates a movie in the end. To celebrate its unlikely 1.0 release today, I present here a “timelapse” of this project’s journey. It just took ten years to get here. document.addEventListener("DOMContentLoaded", function() { lightEmbedInit(); }); 2011 - How it all began To be honest, I don’t remember…

Github Stars

Repository Stars analysis-tools-dev/static-analysis 14737 ★ mre/idiomatic-rust 7838 ★ lycheeverse/lychee 3835 ★ tinysearch/tinysearch 2954 ★ mre/the-coding-interview 1743 ★ analysis-tools-dev/dynamic-analysis 1100 ★ ReceiptManager/receipt-parser-legacy 853 ★ mre/hyperjson 511 ★ lycheeverse/lychee-action 508 ★ mre/cargo-inspect 383 ★…

A Tiny, Static, Full-Text Search Engine using Rust and WebAssembly

I wrote a basic search module that you can add to a static website. It’s very lightweight (50kB-100kB gzipped) and works with Hugo, Zola, and Jekyll. Only searching for entire words is supported. Try the search box on the left for a demo. The code is on Github . Static site generators are magical. They combine the best of both worlds: dynamic content without sacrificing performance. Over the…

Maybe You Don't Need Kubernetes

A woman riding a scooter Source: Illustration created by freepik , Nomad logo by HashiCorp . Kubernetes is the 800-pound gorilla of container orchestration. It powers some of the biggest deployments worldwide, but it comes with a price tag. Especially for smaller teams, it can be time-consuming to maintain and has a steep learning curve. For what our team of four wanted to achieve at trivago , it…

What Is Rust Doing Behind the Curtains?

Rust allows for a lot of syntactic sugar, that makes it a pleasure to write. It is sometimes hard, however, to look behind the curtain and see what the compiler is really doing with our code.

The Unreasonable Effectiveness of Excel Macros

I never was a big fan of internships, partially because all the exciting companies were far away from my little village in Bavaria and partially because I was too shy to apply. Only once I applied for an internship in Ireland as part of a school program. Our teacher assigned the jobs and so my friend got one at Apple and I ended up at a medium-sized IT distributor — let’s call them PcGo.

Switching from a German to a US Keyboard Layout - Is It Worth It?

For the first three decades of my life, I’ve exclusively used a German keyboard layout for programming. In 2018, I finally switched to a US layout. This post summarizes my thoughts around the topic. I was looking for a similar article before jumping the gun, but I couldn’t find one — so I wrote it. My current keyboard (as of April 2021), the low-profile, tenkeyless Keychron K1 is close to my…

fastcat - A Faster `cat` Implementation Using Splice

Lots of people asked me to write another piece about the internals of well-known Unix commands. Well, actually, nobody asked, but it makes for a good intro. I’m sure you’ve read the previous parts about yes and ls — they are epic. Anyway, today we talk about cat , which is used to concatenate files - or, more commonly, abused to print a file’s contents to the screen. # Concatenate files, the…

That Octocat on the Wall

Photo of my office with Github’s octocat on the wall over my couch So I’m in a bit of a sentimental mood lately. Github got acquired by Microsoft. While I think the acquisition was well-deserved, I still wish it didn’t happen. Let me explain. My early days I joined Github on 3rd of January 2010. Since I was a bit late to the game, my usual handle ( mre ) was already taken. So I naively sent a mail…

Ten Years of Vim

When I opened Vim by accident for the first time, I thought it was broken. My keystrokes changed the screen in unpredictable ways, and I wanted to undo things and quit. Needless to say, it was an unpleasant experience. There was something about it though, that kept me coming back and it became my main editor. Fast forward ten years (!) and I still use Vim. After all the Textmates and Atoms and…

Refactoring Go Code to Avoid File I/O in Unit Tests

At work today, I refactored some simple Go code to make it more testable. The idea was to avoid file handling in unit tests without mocking or using temporary files by separating data input/output and data manipulation.

A Tiny `ls` Clone Written in Rust

In my series of useless Unix tools rewritten in Rust , today I’m going to be covering one of my all-time favorites: ls . First off, let me say that you probably don’t want to use this code as a replacement for ls on your local machine (although you could!). As we will find out, ls is actually quite a powerful tool under the hood. I’m not going to come up with a full rewrite, but instead only cover…