Enjoying food on a budget

After graduating the German equivalent of high school at the beginning of summer 2020, I immediately made plans to start studying computer science that same year, far away from home. Up to this point, I had spent my entire life living with my parents in one city. Now, all of a sudden, I would have to figure out how to live on my own, in a city I did not know, all at the height of the COVID pandemic. I'm sure many people can relate when I talk about how overwhelming this step can be and how the uncertainty of it all can cause a lot of anxiety.

Continue reading ➡

How To Write a Webhook Discord Bot In Clojure

I write a lot of apps for the messenger Discord, specifically bots. It's a big part of how I learned programming to begin with and I still enjoy it to this day. Last year, I wrote quite a few small and simple bots: instant-poll (creates polls in your Discord server), xkcdiscord (displays xkcd comics) and beepl (translates messages via deepl).
They all have something in common: they're written using a new(-ish) way to interact with Discord. It's a way that is very efficient, clean and simple compared to the traditional way of using the Discord API, which is why I like it so much. Even after over a year, this method is still not on every Discord developer's rader. Subsequently, I frequently get the question "How do these bots work?" - answering this question will be my mission for this post.

Continue reading ➡

Immutable Collections are Fast (Enough)

A couple of months ago, a few people, including myself, discussed how to implement breadth-first search in concrete code. As is often the case, there are multiple approaches: an imperative implementation (as shown on the Wikipedia page) and a recursive, more declarative implementation. The latter looks something like this (pseudo code, mostly taken from German Wikipedia but with an ML-style syntax):

Continue reading ➡

Adopting Clojure in a Hostile Environment

If you've ever developed plugins for the Minecraft server software Spigot, you can probably come up with a list of questionable API behaviour and design choices made by Spigot fairly quickly. Pain points that have made your experience with the API unpleasant or at the very least inconvenient at some points during development.

Continue reading ➡

An Introduction to JVM Bytecode

It is very likely that you were taught the same lesson as me when you first started learning Java: the benefits of using the JVM.
Usually, that lesson is just a very brief and general description of Java’s well-known cycle: Write source code, compile to bytecode, run anywhere. Thanks, JVM!

Continue reading ➡

[webring]
« prev next »