Jakob's Blog coding for fun and growth

Why WebAssembly came to Web3 (Wasm in the Wild, Part 4)

Today, I show how to cheat the halting problem and why Web3 of all industries popularized the underlying principles. We will look at how untrusted user code is sanitized in eBPF as used in the Linux kernel, in Bitcoin script, in EVM, and, of course, in Wasm. This is part 4 of the Wasm in the Wild series, which now has a nice series overview ... Read more

Why WebAssembly came to the Backend (Wasm in the wild part 3)

Why and how are people running WebAssembly on the backend? I make the case it's simply the best way to run sandboxed code written in systems languages and why you should consider using it in your applications. Examples will be in Rust but the lesson applies to many languages. This is part 3 of the Wasm in the Wild series. Each post can be re... Read more

Why WebAssembly Came to the Browser (Wasm in the Wild, Part 2)

In this article, I look at the history of running untrusted code in browsers, contrasting WebAssembly to Java and Flash on an architectural level. To top it off, I will also show a Rust code example to demonstrate the sandboxing techniques of Wasm. I hope by reading this article, you will gain a new appreciation for the design decisions behind... Read more

Fundamentals of WebAssembly, the start of the Wasm in the wild series

Join me on a guided journey through the wild world of Wasm. Learn the secret sauce that enables Wasm runtimes to be fast and secure. At the end of this article, you will understand why Wasm was designed as a stack machine and what basic memory regions exist in Wasm. Introduction Welcome, welcome! Before we start our hike into the WebAssemb... Read more

The art of Byzantine benchmarking

A traditional benchmark decides which of two implementations is superior in a controlled lab environment. But what if you have a system with soft real-time constraints? How can you proof they won't fail the real-time constraint? And how wide is the margin? Byzantine-Benchmarking is one possible approach to assess it. I am in search of a perfo... Read more

Untapped potential in Rust's type system

Today, I'm writing about what types can be used for other than checking code properties. It will involve a good chunk of dynamic typing, and yes it's in Rust. There are some wild ideas in it, so fasten your seatbelt and get ready for a ride! Overview The article is divided into introduction, background, three sections containing the main cont... Read more

One enum to rule them all

Have you ever spent time writing boilerplate code around enums? With Rust, you don't have to! In this article, I want to show how easy it has become in Rust to use a single enum type across many application domains. From SQL databases, through a web server and a GraphQL interface, all the way to a web client, we will use a single enum definitio... Read more

Gamedev #6: New features in 0.2.1

Paddlers 0.2.1 is online and brings a ton of new features! Among other features, I present a new take on the tower defense aspect of the game, custom shaders for improved graphics, a skill-tree, and quests to guide the players through the game mechanics. Play the demo here! (Register with a fake email, it is still not used in any way.) It is n... Read more

Gamedev #5: Version 0.2 Released

Finally, with the completion of the transition to a new web-oriented game engine, Paddlers version 0.2 is ready. In this short post, I summarize the changes and what they mean for the Paddlers browser game. This milestone has been a lot of work, although it barely shows in the demo. For the past seven months, I implemented zero new features. No... Read more

Rust Tutorial: An Introduction to Rust for JavaScript Devs

An editor from SitePoint reached out to me, asking me if I can write an article for them. They have decided to add some Rust content and wanted me to write an introduction to the language. To make a long story short, the article has now been published. It is primarily directed towards JavaScript programmers with little to no Rust experience. Bu... Read more

Rust meets the web - a clash of programming paradigms

Most code running on the web is event-based, garbage-collected, and dynamically typed. In stark contrast, Rust is a compiled language with static type- and memory-safety without a garbage-collector. What are the implications for a project that compiles Rust to WebAssembly? I try to answer this question with a fictive story and hands-on code ex... Read more

Gamedev #4: Benefits of full-stack Rust

Efficiently synchronizing a client application with the server can be challenging. Today, I write about my recent experience on this topic and the benefits I found when using Rust for both the server and the client endpoints. Everything in this post is based on my long-term hobby project called Paddlers, an online multiplayer game playable in t... Read more

Gamedev #3: Fun with Rust and distributed systems

Programming an online multiplayer game is fun! Why, because programming is fun, especially in Rust. Not convinced? Let me show you. In this post, I will start to talk about the exciting technical stuff around Paddlers. If you haven’t read my other posts (#0, #1, #2), Paddlers is a game in which your goal is to make ducks happy. As of recently, ... Read more

Gamedev #2: Multiplayer and procedural map generation

Today, we define the basics of multiplayer in Paddlers and I walk you through the necessary steps to generate pseudo-random maps using procedural techniques. In previous posts, I have written about the single-player experience which happens inside a single village on a stream of water. The multi-player game mechanics should take place on a glo... Read more

Gamedev #1: Game mechanics

Gather a cult of followers around you and let them rise to become the most powerful empire in all of Paddland! After defining a theme for my game in the last post, let me now describe the gameplay from a player’s perspective. Entrance As you, as a player, start your journey in Paddland, you have a choice to make. From a set of ducks, you can ... Read more

Gamedev #0: Creating a new universe

I am working on a brand new massively multiplayer browser game! Three weeks ago, I decided it is finally time to put aside some of my other hobby projects and get to work on a game once again. The game is called Paddlers, as in a paddling of ducks, and the story description is presented in this post. Now, being the programming nerd that I am,... Read more

The struggle with API design

GraphQL could safe many software projects from failure because it reduces the total workload. With examples from my own work experience, I explain why I think like that. In this post, I am writing about the benefits of using GraphQL that have a positive effect on the development process of software projects. There may also be technical aspects ... Read more

My first master semester at ETHZ

Five months with much coffee, short nights and many amazing new insights that I could learn. Read this to find out which course selection kept me 100% motivated throughout the semester. After a full year of work as a software engineer, at a place that was full of friendly people, interesting challenges and great working conditions, I went back ... Read more

A custom time display for public transportation – Programming the Software

How I have replaced a wall clock by an LED matrix: A short look into the programming of a microchip. Overview The final product of this hobby project is a tram station board that displays visually how long I have to wait for the next connection to the city by public transportation. Previously, I have shown how I have assembled a small board w... Read more

A public transportation departures display in my home – The Hardware

The time until the departure of the next tram always displayed on my room's wall. How to build the hardware for it? In my last post, I have introduced the ESP-01S module and I showed how to program the integrated ESP8266. Now, I want to talk about a project I have realized, using that technology. This post covers the design thoughts behind the... Read more

Rust in a coding competition (Part 3) - Filling in the gaps

Python, Haskell, C, or Rust? Which do you like best to solve this task? This is the third post in a series. Follow the link to start reading part 1 first, where you can also find the problem statement and the first part of the solution. Second subtask: Guessing Okay, we are still trying to decrypt an encrypted message. From the task desc... Read more

ESP8266: A minimalistic, Internet-enabled computer chip

The central processing unit: Merely 5mm by 5mm! The complete module? 14mm by 25mm. The ESP8266 is a microprocessor natively speaking every protocol required to connect to the World Wide Web through a local WiFi network. In this post, I am writing about the ESP-01S module, one of the most common modules using this microprocessor. The picture ab... Read more

Versatile Rust - Part 2 of Rust in a coding competition

What does define a multi-paradigm programming language? And why should we care? This is the second post in a series. Follow the link to read part 1 first. Rust is imperative-procedural and functional at the same time. It also comes along with object-oriented features like methods, inheritance, and polymorphism, although it is technically ... Read more

Rust in a coding competition (Part 1)

What is the best programming language for a coding competition? What are the significant differences? And how does Rust fit in? The other Friday night, I attended a coding competition called Codecon. It has been organized by Bloomberg and hosted by ETHZ. Although I did not know what type of tasks will expect me, I knew that Rust would be am... Read more

Why this?

Why creating this public place in cyberspace? Why sharing personal ideas in a written form? Well, the Internet has quickly become a substantial part of human civilization. Both commercially and privately. But I have never been an active part of social media nor did I really participate actively in any online community. So far, I have almost exc... Read more