from/prod
← All companies

THE COMPANY INDEX TRACKED BLOG

Dennis Felsing

Ideas, decisions, and lessons from the team.

hookrace.net (opens on the source site)
26Posts tracked
4 weeks agoLatest publication
0.3Posts / month over the last 12 months

Latest writing

20 of 26 posts

Staying in Taiyuan, China (opens on the source site)

We live in Heidelberg, Germany. About once a year we travel to my wife’s hometown of Taiyuan, the capital of the Shanxi province in China, to visit my parents-in-law. Our most recent visit was in spring of this year, for two months. In this post I’ll talk about my experiences of regularly staying in Taiyuan since 2019. Source: Wikipedia Getting There Currently Germans can stay for 30 days in China without a visa. Since we stayed in Mainland China for the entire two months, we couldn’t make use of it this year unfortunately. Last year we did a quick trip to Hong Kong, so we had two separate…

Read at the source

Finding Bugs using LLMs (opens on the source site)

At Materialize we’ve had success in finding bugs in existing code and open pull requests using LLM-based coding agents since February 2026, coinciding with the release of Anthropic’s Opus 4.6 (now mostly running on 4.7). In this post we’ll look into some of the considerations that went into the system we are currently using as well as lessons learned. Read the rest of the blog post over on the Materialize blog.

Read at the source

Workload Capture & Replay (opens on the source site)

When customers hit issues in production, it can be an effort to locally reproduce them, especially when external sources are involved. Reproducing issues is useful not just to figure out the root cause, but also to verify the fix and add a regression test. The newly introduced workload capture & replay tooling records a Materialize instance’s state as well as recent queries and ingestion rates, then replays them in a Docker Compose environment with synthetic data. In this blog post I’ll show how it works and talk about some of the challenges and future work. Read the rest of the blog post…

Read at the source

Speeding up Materialize CI (opens on the source site)

In the previous post I talked about how we test Materialize. This time I’ll describe how I significantly sped up our Continuous Integration (CI) Test pipeline in July, especially for pull requests that require a build and full test run. The goal is to make developers more productive by reducing the time waiting for CI to complete. We always kept CI runtime in mind, but it still slowly crept up over the years through adding tests, the code itself growing larger, as well as hundreds of minor cuts adding up. Read the rest of the blog post over on the Materialize blog.

Read at the source

How to Use the Materialize Emulator (opens on the source site)

In our last blog about our Quality Assurance (QA) team, we gave an overview of the QA process, including our software and testing methods. One of our key tools during testing is the Materialize Emulator, a Docker image that allows you to maintain a locally hosted version of Materialize. Read the rest of the blog post over on the Materialize blog.

Read at the source

The CI Flake (opens on the source site)

I analyzed a flaky test failure in our Materialize CI today: $ docker compose up -d --scale default=0 default no such service: default mzcompose: error: running docker compose failed (exit status 1) I had seen this error already once or twice in the last year, but it was incredibly rare in our Continuous Integration (CI) runs, and never happened locally. As usual, there were more pressing product issues to debug, so I never looked into it. But last week I switched most of our CI tests to run on Hetzner Cloud instead of AWS to save some money. Suddenly this issue started occurring more often…

Read at the source

Testing Materialize (opens on the source site)

I joined Materialize’s Quality Assurance (QA) development team over a year ago. Since our team is small, we have to be conscious about focusing our time on the most impactful testing and test tooling. Our goal is to find issues in Materialize as early and as efficiently as possible, ideally before a pull request even lands. Despite our small team, Materialize has a huge surface area. Read the rest of the blog post over on the Materialize blog.

Read at the source

Port Scan with Spoofed IP Addresses (opens on the source site)

Or how to make naïve hosters shut down your victim’s server. Do you want to bring down your victim’s game servers? Do they host their game servers on cheap VPSes at hosters who are not that experienced with networking? Is running an actual DoS against the server too expensive and illegal for you? Just grab a server for yourself from a questionable hoster with IP address spoofing allowed on their network. Next run a port scan using nmap (man page) with a spoofed source address (-S or -D for multiple decoys) using your victim’s IP address(es). As the target of the port scan choose a university…

Read at the source

Haskell: Game Programming with GIF Streams (opens on the source site)

Note: This is translated from the German original, which was used as a homework for the Programming Paradigms course at Karlsruhe Institute of Technology a long long time ago when I was co-holding the practical courses. Snake is a computer game in which a snake has to be moved through a playing field. Eating food increases the snake’s length. When the snake collides with a wall or itself the game ends. In this homework you will implement Snake in Haskell. For this you will require the framework from the gifstream repository. The output of the game happens in an animated GIF stream, which you…

Read at the source

God writes Haskell (opens on the source site)

God famously does not play dice with the universe, but he seems to enjoy writing Haskell: Consider the wave-particle duality in quantum mechanics. Every particle behaves as a wave, as long as you haven’t interacted with it. Thanks to Haskell’s lazy evaluation values are also only evaluated once they are accessed (interacted with particles), and stay unevaluated thunks (waves) in the meantime. Two particles can be Quantum-entangled, so that their states depend on each other, even though the particles are seperated by any distance. In Haskell a value, whether it’s evaluated yet or not, can also…

Read at the source

Database Testing at Yugabyte (opens on the source site)

YugabyteDB is a cloud-native database for business-critical enterprise applications. It is designed to provide continuous availability as well as horizontal scalability, while retaining a strong set of RDBMS features. This objective creates a strong quality incentive for us in the Yugabyte Quality Assurance (QA) team. As a member of this team, I am giving an overview of the testing philosophy, approaches, and implementations for YugabyteDB. Read the rest of the blog post over on the YugabyteDB blog.

Read at the source

€9 Ticket (opens on the source site)

As a relief for rising energy costs and inflation Germany is offering nearly-free public transportation for the months of June, July and August. For just €9 per month you can take any kind of regional public transportation in all of Germany. That’s basically everything except the IC/ICE for long distance. This means that a monthly ticket is now as cheap as what I would normally pay for a single route. In this post I want to talk about my experiences with this €9 ticket. Update 2022-09-01: The €9 ticket ended yesterday without a similar replacement system in place. So many people are again…

Read at the source

Update on DoS Attacks against our Online Game (opens on the source site)

In my previous post 8 months ago I described how our open source online game DDraceNetwork has been suffering under DoS attacks for about 8 years, basically since its inception. Recently the attacks have gotten much worse, forcing us to work on further approaches. Since many players made suggestions recently, I’m writing this blog post to summarize what we are attempting and to ask for help again. These traffic graphs are from two of the servers we are running, note the logarithmic x-axis. Each spike represents an incoming DoS attack, as you can see some of them last for nearly a day.…

Read at the source

macOS Setup after 15 Years of Linux (opens on the source site)

About 3 years ago I wrote about my Linux Desktop Setup and having used pretty much the same software setup for 10-15 years. My setup used to be heavily keyboard based. Now for work I am for the first time using a macOS-based Macbook Pro with an M1 Pro CPU. I spent the last 3 weeks using it as a daily driver, tweaking it here and there. Here are my experiences. Hardware-wise the machine is great. With the 10 core ARM64 CPU I get about 2-3 times the CPU performance of my desktop system with an Intel i7 6700k. In DDNet I can reach 1800 FPS which is clearly more than enough and about 10 times the…

Read at the source

DoS Attacks against our Online Game (opens on the source site)

DDraceNetwork is an open source online game I’ve been running since 2013 with a community of volunteers. The game is available for free, I’m hosting servers for it in many countries around the world so that we have trusted official ranks. The servers are paid for by donations, which I stop collecting once the cost of the servers for the current year is covered. I wrote about DDNet in a previous post in 2016 and also a bit about the game history in 2013. Pretty much since the beginning we have been suffering from DoS attacks against the servers. Since the Steam release in 2020 the player…

Read at the source

Quest for the Lost Home Server (opens on the source site)

Today I lost access to my home server. As I described in a previous post I depend heavily on the server to fetch my emails, as a file server, to synchronize files, for newsbeuter and irssi sessions and many other things. As no one was going to be in proximity of the server for the next few hours, my goal for today was to solve the problem remotely. The symptom was that my SSH connection attempts failed. The server also didn’t respond to pings. As the server is sitting at home behind a regular DSL connection it uses a dynamic IP address that is shuffled every 24 hours. So my first hunch was…

Read at the source

Chinese Traffic to time.gif (opens on the source site)

Nearly two years ago I posted this endless GIF that always shows the current time in UTC: Now looking at my GoAccess dashboard I can see that it is picking up in popularity rather suddenly: But strangely I can’t find anything about time.gif being linked on the web. So this might just be an attempted Denial of Service (DoS) attack? At least that would be something I am familiar with from the DDNet direction, but it’s certainly strange on HookRace. But instead of simply shutting down time.gif I decided to try to find out who is accessing it and whether I can keep the server up. Let’s look into…

Read at the source

Linux Desktop Setup (opens on the source site)

Russian Translation by Akhmad Karimov My software setup has been surprisingly constant over the last decade, after a few years of experimentation since I initially switched to Linux in 2006. It might be interesting to look back in another 10 years and see what changed. A quick overview of what’s running as I’m writing this post: Motivation My software priorities are, in no specific order: Programs should run on my local system so that I’m in control of them, this excludes cloud solutions. Programs should run in the terminal, so that they can be used consistently from anywhere, including weak…

Read at the source

Theme Switcher in Nginx (opens on the source site)

Some people really liked the dark DDNet theme for Halloween by Soreu, so we decided to keep it possible to use the default bright or the dark theme. Thanks to xse we got a JavaScript based theme switcher. After some improvements I finally I switched it away from JavaScript entirely and finally am also using it on this blog with an OLED friendly dark theme. The final result is quite simple, and only requires static HTML, a cookie for the theme and Nginx for setting and returning the correct CSS file for it. You can try it out by clicking on the Switch Theme button at the top of this page,…

Read at the source

One year of cycling to work (opens on the source site)

Exactly on this day, one year ago, I came back from a one month long trip to Taiwan, went straight to work from the airport and immediately moved into a new apartment after work. Since then I have cycled to work nearly every day. Fullscreen (map made with umap, routes made with GraphHopper) Alternatives and motivation Previously I lived in Heidelberg, 15 km from work and usually took the train, only cycling to work about once a week. But my new apartment was significantly closer to work, only 6 km, which takes just 15-20 minutes to cycle, so it became much easier to use the bicycle to get to…

Read at the source

Privacy choices

Reading never requires analytics. These choices last 90 days on this browser.

Essential sign-in and security storage always stays on. Read the privacy notice.