All blog entries, ordered from most recent. Entry count: 1198.
# Block Wizard - Remake of My Old Online Game
Fri
30
Oct 2026
My puzzle game Block Wizard is back! Originally released in 2010 as a Flash game, it now has a web remaster that you can play directly in a modern browser, with mouse or touch controls.
Block Wizard combines match-3 puzzles with RPG-inspired progression: match blocks by color or symbol, earn experience, upgrade your skills, and spend mana to cast spells. Special blocks and cascading matches add new challenges as you work your way through 50 levels.
Give it a try — it is free to play, with no download or installation required. Can you complete all 50 levels?
Comments | #games #productions Share
# 6 Reasons Why Programming Is Especially Exposed to AI Automation
Tue
27
Oct 2026
Summary: While AI may transform our world in many ways, it seems to me that programming is especially exposed to automation. Below I share 6 specific reasons why.
Many decades ago, people imagined that advances in cybernetics would give us intelligent machines in the form of humanoid robots, speaking in metallic voices and helping people with various physical tasks.

Robby the Robot from "Forbidden Planet", a sci-fi film from 1956
Things have developed differently. AI in the form of LLMs can do some intellectual work and, together with other models, generate realistic speech, images, and video, while general-purpose robots manipulating physical world are still very clumsy and far for being able to help us in everyday chores.
View Joanna Maciejewska’s post on X
I want AI to do my laundry and dishes so that I can do art and writing, not for AI to do my art and writing so that I can do my laundry and dishes. — Joanna Maciejewska
Switching to programming, I still remember reading the book "The Mythical Man-Month" by Fred Brooks a long time ago. The author argued that despite advancements in more convenient, higher-level programming languages, "there is no silver bullet" - no single development can provide an order of magnitude improvements in programming productivity. The argument behind it was that we can reduce the "accidental complexity" of the code (boilerplate code, manual memory management, friction with language syntax, etc.), but there is always "essential complexity" left to handle. If an app needs to provide 5 features, we need to specify all these 5 features fully and precisely how they should work. No matter how high level is the description, it always ends up being... some form of code.

I was thinking back then that a breakthrough would require computers to think like humans: take imprecise, incomplete requirements and turn them into code. My opinion was that programming requires knowledge, skill, and experience, but also analytical thinking and creativity. If computers could ever do it, surely they could do much of the other intellectual work that humans do, leading to changes much broader than just affecting programmers' jobs. I still share this opinion, except now we know it happened.
AI will likely transform our world in many ways, and I don't dare to predict what the future will bring. Right now, however, it seems to me that the nature of programming makes it especially exposed to automation. If we think about why that is, we can identify a few specific reasons:
When thinking about my life, I can see that we have gone through several stages in how programmers are commonly perceived. First, when I was a teenager, there was the stereotype of a computer geek. This was before smartphones or social media, so spending time at home with a computer, playing games or learning programming instead of going out to play football, could make someone seem geeky, weird, or socially awkward. Then the perception flipped as mainstream media noticed that working in IT was a good career with high demand and high salaries. Possibly, we are now entering another phase, as the situation of programmers and the public perception of them change. Some young people I've spoken with are already choosing other careers because they don't believe a career in IT is future-proof.
Comments | #ai #software engineering #philosophy Share
# Two articles: Time Measurement in Game Programming, Writing Efficient C++ Code
Fri
25
Sep 2026
I've translated to English and published two of my articles that have been published in Polish in paper magazine "Programista" many years ago. Some of the information may be outdated, but I think they may still be helpful.
I would like to point especially to the first article, and the chapter about Frames per Second (FPS). This unit is really the number of cycles per second: 1/s = Hz, and as such, it is a non-linear mesure in respect to the time it takes to process or render a single frame. Thus, we shoudln't ever say "I improved my game performance by 5 FPS", because it doesn't mean anything without knowing how many FPS did we have before the opimization. Check the article to learn more…
Comments | #math #optimization #productions #c++ Share
# First Look at Epic Games Lore VCS
Thu
18
Jun 2026
June 17th, 2026, Epic Games announced Lore - a new version control system for software developers, to compete with Git and Perforce. Being old enough to have worked with the old CVS and SVN, and having experience working with Git and Perforce, I am quite interested in what changes this new system brings.
In my article Thoughts Beyond C++ from December 2024, I described my opinion about the problems I can see with current version control systems and the improvements a better one could bring, especially for game development. Let's see whether Lore advances any of these topics.
Key pages about Lore:
I didn't test the app myself so far, but I've read some of the docs to get an idea of what it is and how it compares to Git and Perforce. tl;dr: It looks promising, although not revolutionary. Here is a summary and my thoughts.
# Floor and Ceil Versus Denormals on CPU and GPU
Sat
23
May 2026
Recently, I dove deep into floating-point numbers and their behavior. Somehow, this topic haunts me in my programming practice since I created Floating-Point Formats Cheatsheet back in 2013 and also released a comprehensive article The Secrets of Floating-Point Numbers in 2024.
This time, I would like to focus on one specific question:
What is the result of floor(-1.175493930432748e-38) ?
Note: Hexadecimal value of our input number is 0x807FFFFD.
# DirectX 12 News from GDC 2026 - My Comments
Sun
15
Mar 2026
Game Developers Conference (GDC) just took place on 9–13 March 2026 (renamed this year to “GDC Festival of Gaming”). Microsoft announced lots of interesting news during the event regarding further development of DirectX 12, its accompanying libraries, and tools. I didn’t attend the conference this year, but the announcements were also published on their DirectX Developer Blog. In this article, I will gather and summarize these news items, provide links to the appropriate web pages, and include my comments.
When I was working at AMD, I was deeply involved in this area - writing code, publishing articles on the GPUOpen website, attending GDC, and even giving a talk there twice. Back then, I didn’t post much about it on my personal blog, as I would have needed to watch my words and secure corporate approvals. Now, as I’m just a programmer at Plastic - a small game development studio - I can observe these developments from the outside and comment on them freely, which I am going to do with brutal honesty 🙂 If I had a YouTube channel, I would record a “reaction” type of video, but since I’m writing a blog, this will be my reaction in text form.
Disclaimer: Everything in this article is based on information shared publicly by Microsoft and GPU vendors and could be gathered by any graphics programmer. No insider information was used.
Comments | #microsoft #directx Share
# Total Commander - a Plugin Supporting a Custom Archive Format - a New Article
Sat
07
Mar 2026
Today I would like to present my new article: "Total Commander – a Plugin Supporting a Custom Archive Format". In this article, we will design our own file format that allows multiple files to be packed and compressed into a single archive, similar to formats like ZIP or 7Z. Using the C++ language and the Visual Studio environment on Windows, we will then write a plugin for the Total Commander file manager that enables creating and manipulating such an archive, including freely adding and removing files inside it.
The article was first published few months ago in Polish in issue 5/2025 (120) of the Programista magazine. Now I have a right to show it publicly for free, so I share it in two language versions:
See also GitHub repository with the source code accompanying the article: sawickiap/TotalCommanderPluginTutorial
# A Formula for Overall System Load
Thu
26
Feb 2026
Some time ago I've shared my thoughts about coming up with a nice formula to calculate memory fragmentation. I've recently had another such math puzzle, this time themed around "system load". Below you will find the formula I developed, this time with an interactive demo!
The problem is this: Imagine a system that consists of several sub-systems, each having a gauge indicating the current load, 0...100%. It may be some real device like a computer (with CPU busy %, GPU busy % and the current memory consumption), some vehicle (a car, an airplane), or some virtual contraption, like a spaceship in a sci-fi video game (with the current engine load, force field strength, temperature that can make it overheat, etc.) Apart from the load of the individual subsystems, we want to show a main indicator of the overall system load.
What formula should be used to calculate it? All the load values, displayed as 0...100%, are internally stored as numbers in the range 0.0...1.0. The key principle is that if at least one subsystem is overloaded (at or near 100%), the entire system is considered overloaded. A good formula for the overall system load should have the following properties:
Note that these requirements don't specify what happens between 0 and 1. For example, should the output become 0.5 if just one input reaches 0.5, or only after all inputs reach 0.5? We have full freedom here.
#1. My first idea was to use AVERAGE(input[i]). It meets requirement 1 and 3, but it doesn't meet requirement 2, because it requires all inputs to be 1 for the output to become 1.
#2. My second idea was to use MAX(input[i]). It meets requirement 1 and 2, but it doesn't meet requirement 3, because for any input other than the largest one, a change in its value doesn't change the output.
#3. There is a more complex formula that meets all 3 requirements. It may be called the "inverse product" and it looks like this:
output1 = 1.0 - ( (1.0 - input[0]) * (1.0 - input[1]) * ... )
You can think of it as multiplying the "headrooms" left in each subsystem.
#4. Unfortunately, the formula shown above has a tendency to give very high values nearing 100% even for low input values, which is not very user-friendly. A result that is closer to MAX() reflects the overall system load better. Considering this, but still wanting to preserve our requirement 3, I ended up blending AVERAGE() with the inverse product 50/50:
finalOutput = (AVERAGE(input[i]) + output1) * 0.5
Here is an interactive demo of all the formulas described above. You can move the sliders to control the input values.
Further modifications are possible: