AI. AI AI AI. Artificial "Intelligence". Large Language Models. Well, they sure are large, I'll give them that. This isn't quite how I was hoping to write a new blog post after years of not touching the site, but I guess it's what we're going with. To make it very clear: none of the text, code, images or any other output I produce is AI-written or AI-assisted. I also refuse to acknowledge that AI…
Every now and then, I get the urge to download and install a Minecraft modpack. Mind you, it's often the case that I go through the installation process, and only then realize I don't actually want to play it, because I might not be in the mood to do so. CurseForge has pretty much become the de-facto place to find and download mods. Or at least, that's the impression I get when looking for…
You are a young developer. You're only getting started, and learning new things as you go, but you love the idea of telling computers what to do. Automating mundane tasks. It's really exciting to have this much freedom and control over something you own. Your only limit is your imagination! Time goes by. You've come across GitHub quite a few times by now. A lot of code searches lead to GitHub…
Or: Dissecting Cheat Engine's Pointermaps This is part 8 on the Writing our own Cheat Engine series: Part 1: Introduction (start here if you're new to the series!) Part 2: Exact Value scanning Part 3: Unknown initial value Part 4: Floating points Part 5: Code finder Part 6: Pointers Part 7: Code Injection Part 8: Multilevel pointers In part 7 we learnt how to allocate memory in the remote process,…
This is part 7 on the Writing our own Cheat Engine series: Part 1: Introduction (start here if you're new to the series!) Part 2: Exact Value scanning Part 3: Unknown initial value Part 4: Floating points Part 5: Code finder Part 6: Pointers Part 7: Code Injection Part 8: Multilevel pointers In part 6 we ended up spending most of the time in upgrading our breakpoint support to have a proper…
This is part 6 on the Writing our own Cheat Engine series: Part 1: Introduction (start here if you're new to the series!) Part 2: Exact Value scanning Part 3: Unknown initial value Part 4: Floating points Part 5: Code finder Part 6: Pointers Part 7: Code Injection Part 8: Multilevel pointers In part 5 we wrote our very own debugger. We learnt that Cheat Engine is using hardware breakpoints to…
This is part 5 on the Writing our own Cheat Engine series: Part 1: Introduction (start here if you're new to the series!) Part 2: Exact Value scanning Part 3: Unknown initial value Part 4: Floating points Part 5: Code finder Part 6: Pointers Part 7: Code Injection Part 8: Multilevel pointers In part 4 we spent a good deal of time trying to make our scans generic, and now we have something that…
This is part 4 on the Writing our own Cheat Engine series: Part 1: Introduction (start here if you're new to the series!) Part 2: Exact Value scanning Part 3: Unknown initial value Part 4: Floating points Part 5: Code finder Part 6: Pointers Part 7: Code Injection Part 8: Multilevel pointers In part 3 we did a fair amount of plumbing in order to support scan modes beyond the trivial "exact value…
This is part 3 on the Writing our own Cheat Engine series: Part 1: Introduction (start here if you're new to the series!) Part 2: Exact Value scanning Part 3: Unknown initial value Part 4: Floating points Part 5: Code finder Part 6: Pointers Part 7: Code Injection Part 8: Multilevel pointers In part 2 we left off with a bit of a cliff-hanger. Our little program is now able to scan for an exact…
This is part 2 on the Writing our own Cheat Engine series: Part 1: Introduction (start here if you're new to the series!) Part 2: Exact Value scanning Part 3: Unknown initial value Part 4: Floating points Part 5: Code finder Part 6: Pointers Part 7: Code Injection Part 8: Multilevel pointers In the introduction, we spent a good deal of time enumerating all running processes just so we could find…
This is part 1 on the Writing our own Cheat Engine series: Part 1: Introduction Part 2: Exact Value scanning Part 3: Unknown initial value Part 4: Floating points Part 5: Code finder Part 6: Pointers Part 7: Code Injection Part 8: Multilevel pointers Cheat Engine is a tool designed to modify single player games and contains other useful tools within itself that enable its users to debug games or…
During university, there were a few subjects where I had to write blog posts for (either as evaluable tasks or just for fun). I thought it was really fun and I wanted to preserve that work here, with the hopes it's interesting to someone. The posts series were auto-generated from the original HTML files and manually anonymized later. Data Mining and Data Warehousing Information Retrieval and Web…
This post will be mostly me ranting about setting up a new laptop, but I also just want to share my upgrade. If you're considering installing Arch Linux with dual-boot for Windows, maybe this post will help. Or perhaps you will learn something new to troubleshoot systems in the future. Let's begin! Last Sunday, I ordered a Asus Rog Strix G531GT-BQ165 for 900€ (on a 20% discount) with the following…
Outpost is a fun little game by Open Mid Interactive that has popped in recently in my recommended section of Steam, and I decided to give it a try. It's a fun tower-defense game with progression, different graphics and random world generation which makes it quite fun for a few hours. In this post I want to talk about some tips I found useful to get past night 50. Build Pattern At first, you may…
Python 's ctypes is quite a nice library to easily load and invoke C methods available in already-compiled .dll files without any additional dependencies. And I love depending on as little as possible. In this blog post, we will walk through my endeavors to use ctypes with the Windows API , and do some cool stuff with it. We will assume some knowledge of C/++ and Python, since we will need to read…
Shattered Pixel Dungeon is the classic roguelike RPG game with randomly-generated dungeons. As a new player, it was a bit frustrating to be constantly killed on the first levels of the dungeon, but with some practice it's easy to reach high levels if you can kill the first boss. Basic Tips The game comes with its own tips, but here's a short and straight-forward summary: Don't rush into enemies .…
This is my second take at installing NixOS, after a while being frustrated with Arch Linux and the fact that a few kernel upgrades ago, the system crashed randomly from time to time. journalctl did not have any helpful hints and I thought reinstalling could be worthwhile anyway. This time, I started with more knowledge! The first step is heading to the NixOS website and downloading their minimal…
Risk of Rain is a fun little game you can spend a lot of hours on. It's incredibly challenging for new players, and fun once you have learnt the basics. This blog will go through what I've learnt and how to play the game correctly. Getting Started If you're new to the game, you may find it frustrating. You must learn very well to dodge. Your first character will be Commando . He's actually a very…
WorldEdit is an extremely powerful tool for modifying entire worlds within Minecraft , which can be used as either a mod for your single-player worlds or as a plugin for your Bukkit servers. This command guide was written for Minecraft 1.12.1, version 6.1.7.3 , but should work for newer versions too. All WorldEdit commands can be used with a double slash ( // ) so they don't conlict with built-in…
Index Background Input / Output Diving In A Toy Example A Real Example Extra Material Background After seeing some friends struggle with asyncio I decided that it could be a good idea to write a blog post using my own words to explain how I understand the world of asynchronous IO. I will focus on Python's asyncio module but this post should apply to any other language easily. So what is asyncio…
These are some interesting posts and links I've found around the web. I believe they are quite interesting and nice reads, so if you have the time, I encourage you to check some out. Algorithms Image Dithering: Eleven Algorithms and Source Code . What does it mean and how to achieve it? Idempotence layer on bloom filters . What are they and how can they help? Huffman coding . This encoding is a…
There are a few things which won't render unless you enable JavaScript. No tracking, I promise! ¿No hablas inglés? Lee la versión en español . Let's imagine we have 5 bus stations, which we'll denote by ((s_i)): ' s_1 ' s_2 ' s_3 ' s_4 ' s_5 \\ s_1 ' ' V ' ' ' \\ s_2 ' V ' ' ' ' V \\ s_3 ' ' ' ' V ' \\ s_4 ' ' V ' V ' ' \\ s_5 ' V ' ' ' V ' This is known as a "table of direct interconnections" .…
Update Please see my followup post with NixOS for a far better experience with it Today I decided to install NixOS as a recommendation, a purely functional Linux distribution, since Xubuntu kept crashing. Here's my journey, and how I managed to install it from a terminal for the first time in my life. Steps aren't hard, but they may not seem obvious at first. Grab the Live CD, burn it on a USB…