RSSAmplifier

Blog

Smolka

Recent content on Smolka

smolka.devRSS feed ↗36 posts

Latest posts

White / Blue / Silver

I went down the Japanese knife rabbit hole over Christmas. Getting into something new can feel quite overwhelming, especially for me. I tend to skip the Dunning-Kruger effect and immediately notice that I know nothing about the topic and that it is infinitely complex. Even in this post, there are some details I skip because they are too difficult for my liking 1 .

Gyotaku

My father was an angler. He frequented the ponds and rivers near us and, on occasion, went night, ice and sometimes even deep-sea fishing. Few foods are comparable to the taste of fresh and smoked fish, especially eel. Unfortunately, they are a pain in the ass to catch. You sit still the entire night, eat canned ravioli and return home empty-handed if unlucky. I gave it a fair chance back then,…

workin²

Today, workin celebrates its second birthday and the release of version 2.0 . Writing software for oneself and using it extensively feels like a rare thing in software engineering. It begins with for loops and calculators in school, advances to sorting algorithms in university and ends with REST applications for work. At no point are you creating something useful for yourself .

10,000 Tasks Later

The year of high numbers concludes with a follow-up post to my 2024 Todoist review . The app continues to serve as my second brain and eliminates the mental load of remembering tasks. Despite being an easy recommendation for everybody searching for a productivity tool, I have noticed some shortcomings that I want to discuss here.

Horizons

In a restless search for new opportunities and new ways of living The mystery and the promise of distant horizons Always have called men forward\

10,000 Hamburgers

I started cycling back in mid-2020. It wasn't due to COVID-19, like for many others. I finished my bachelor's degree in October the year before and got myself a job. I had the income of a junior software developer and the lifestyle of a student. For the first time in my life, I could afford nice things: a larger apartment closer to work and a shiny new bike worth riding.

The Bottle

The water bottle is an essential cycling accessory. It comes in a more or less standardized shape and can hold anything from 500 to 1000 ml of liquid, usually a mixture of water, carbohydrates, electrolytes and flavorings. Athletes new to the sport might disregard the importance of the latter and go for a ride with just plain water. If they are unlucky, they will hit the wall a few hours in…

5000 Tasks Later

Organizing my thoughts and shifting mental load to a different medium were both part of my yearly theme . I wanted to move away from Google's Notes app because it couldn't keep up with my growing demand. My brain thinks in lists, and after trying a few apps, I ended up with probably the most popular one of them all: Todoist, which has been my faithful companion ever since.

Pixel Soup

I published the last post about my NES emulator spirit in December 2022. After that, work continued, the progress became visible, and I created the draft of this post a few months later. Now, over a year has passed and nothing has changed. I can't remember why I stopped, but I hate unfinished projects. It shouldn't take too long to finish, considering my previous work. Let's see if I can find the…

Restless Mind

I tend to go through periods of obsessive behavior 1 . Once I'm focused on a particular thing, something that really captivates my imagination, it's hard to concentrate on anything else. A recent example of this is workin . I had to take a week off work to finish it, because I couldn't concentrate on the task at hand. No matter what I had in front of me, my mind would just slowly drift back to it.…

Year of ...?

I listened to lots of Cortex podcast episodes over the last months. In some of them, the hosts CGP Grey and Myke Hurley discuss their yearly themes : year of refinement, year of order, year of novelty. A theme is different from a New Year's resolution. It's something broad that guides your decision-making. Something you can't fail at. Something that steers your life in a positive direction.

Nothing Newt

During the process of designing a new logo, I also stumbled across the idea of creating one featuring my favorite animal: the alpine newt 1 . I used to hunt these majestic creatures in a small pond at the edge of my hometown. I went there for frogs, which was hard enough, but every once in a while, I had a small blue and orange jackpot in the landing net.

Procrastination Project

If I had to describe this blog in two words, it would be time sink. It went through many design iterations and each time I thought: "This one looks nice. It can stay like that forever". But there was always something I didn't like. Make it more minimalistic. Make it more efficient. Add a feature here. Change a minor thing there. It became the thing I worked on when I had nothing to do. It became…

workin

Despite their name, smart trainers are pretty dumb out of the box. To get the most out of them, you need an external service like Zwift or TrainerRoad to control the target power. These services are usually subscription-based and cost around 15$ per month. For that price, you can choose between watching a road race video, playing a video game or staring at blue bars 1 .

Bitfield

A lot of emulation comes down to bit manipulation. Consoles are nothing more than microcontrollers designed to be as efficient as possible without wasting precious memory. Memory-mapped I/O registers are the norm and control everything from the pixels you see on the screen to the samples that come out of the speakers. A typical data structure to deal with that kind of data is a bitfield, which…

Christmas Spirit

The transition time between two side projects is something I like a lot. There is no place for the mind to wander to during downtime, no sudden ideas in the bed that prevent you from sleeping and no frustration because something doesn't work even though it should — I don't make mistakes. All of that sounds horrible for something you'd do in your free time, but the dopamine hits when you pass…

A New Hope

The previous post was meant to mark the end of sprite and drizzle development. I achieved everything I ever wanted: a working programming language and a program large enough to prove its maturity to handle medium-scale problems. But some part of me just couldn't let it go. I love efficient programs, and the fact that sprite could not run games at native speed bothered me, so I decided to make one…

The Slow Finale

Hello ladies and gentlemen! Please take a seat and enjoy the finale of the series nobody asked for: yet another Game Boy emulator. Over the course of the last few episodes , we managed to implement a stunning three of eight relevant memory banking controllers. That allowed us to load ROMs with a size of up to two megabytes and increased our catalog of potential commercial games to more than two.…

Four Shades of Green

Progress over the last months has been quite slow. I focused on improving my performance on the bike and took big strides in that regard. I found some time to tinker on sprite during my vacation. With a working CPU implementation in place, there isn't much left to do anyway. I had to fix a few timing-related problems and implement interrupts to pass the blargg tests I'm interested in. One nasty…

Interpreterception

The next project in the pipeline is a Game Boy emulator written in my own programming language. An interpreter within an interpreter and a stress test for the virtual machine and its functionality. It also opens the door for future optimizations because those are quite hard to do without a sizable program to test them on.

Emulation Ready

The latest version of drizzle adds the remaining language features required to implement a basic emulator. That includes a switch statement to run the typical main loop:

Real Language Features

Following some weeks of pause and slow progress, I finally found the motivation to work on the remaining language features required to implement a Game Boy emulator in my own programming language.

Barely Functional

drizzle now supports functions and starts to look like a proper programming language. Its syntax is similar to an unknown snake-like language used in niche fields like machine learning. Keeping in line with that theme, here is how a function is defined:

Abstract Syntax Tree

drizzle started with a single-pass compiler. It took a stream of tokens and converted them into bytecode. There was no intermediate representation and to be honest: there was no need for it. A single-pass compiler is sufficient for a programming language. Just take a look at Lua : it's small, simple and has fast startup times.

Signs of Life

I made some good progress with drizzle. It's now smart enough to understand expressions, statements and control flow. It's barebones but functional. The lack of shorthand operators results in more typing than necessary, but that's something I'll fix in the future.

A Glorified Calculator

Creating a programming language has been on my mind for a while, and the paperback release of Crafting Interpreters , as well as the 1.1 release of eggvance, finally gave me the time and motivation to start working on it. I didn't know much about grammar or parsing back then, but I know at least something now.

Progress Report #7

These were some productive weeks for me. I made visible, audible and technical progress, which pushed the project over the finish line. I never intended for this emulator to be good. Hell, I didn't even know if I could do it at all. I started working on it with the expectation of running Pokémon Emerald someday. The current version blows this expectation out of the window to the point that you…

Progress Report #6

2020 came to an end and left me with an output of two progress reports and a simple, short release note. That's less than I was hoping for, but most time this year went into improving the codebase and some performance tinkering for personal pleasure. In my defense, the last progress report had a much higher quality than the ones before, and I'd like to keep it this way!

Release 0.2

I finally reached a point in development where I was not utterly discontent with the code I wrote and decided to release the second version of my emulator. It includes all the changes mentioned in previous progress reports as well as some other features like optional color correction. Binaries can be found on GitHub .

Progress Report #5

Over four months have passed since the last progress report. During that period, I invested a lot of time into cleaning up the current codebase, improving performance and adding some nice features. Unfortunately, there were no notable fixes to broken games so please don't expect nice screenshots with before/after comparisons.

Progress Report #4

Hello there! It has been quite a while since the last progress report, two months to be exact. Development of the emulator has slowed down a little during that time because I started working full-time. Apart from cleaning up the codebase, I also fixed and implemented some things that might be of interest to some people.

Progress Report #3

This month in your favorite emulator: a complete rewrite. That's what happens when you aren't satisfied with your project and have a whole month of spare time at your disposal. Some parts have been reused, but almost every area has been improved to some extent, accuracy and performance-wise.

Progress Report #2

One month has passed since the last progress report, and I'm back with another one. Most of this month's effort went into accuracy and performance improvements of the pixel processing unit (PPU). Its main purpose is converting data stored in memory like VRAM and object attribute memory (OAM) into pixels on the screen.

Progress Report #1

I finished my introduction project to C++ at the end of last year. Since then, I've read some books and watched a couple of performance-orientated talks about the language, and it really started to grow on me. It is quite versatile and expressive with lots of horrific corners you better stay away from. Mastering this beast seems like an impossible task, but I'll do my best.

About

Living life one obsession at a time. Me What's up! I am Julian, a 28-year-old software developer from Leipzig, Germany. In my spare time, I like gaming, cycling and working on side projects . That's pretty much all I do actually. Lately, I've focused a lot on emulation , which will probably cover most of this site.

Projects

bottle bottle is a companion web app for the identically titled post . It calculates the glucose/fructose ratio, electrolyte contents and osmolarity of a cycling bottle. It also provides reference values to aid evaluation and tries to shed some light on an often overlooked nutrition topic.