Welcome to my website!

Hey there, random internet dweller, welcome to my website! My name is Michal Procházka, and I'm a student currently living in the Czech Republic.

36 days, 12 hours, 30 minutes & 5 seconds without an accident!

I tend to focus primarily on computer-related projects either just for fun, or because I somehow have an actual need for the thing that I'm working on and there isn't any other viable solution available (that, or because I'm just cheap and doing things myself is, well, cheaper). Either way, I find the results of my development work rather cool. Don't be afraid to scroll down and explore!

Or click here to watch a random favourite short video of mine.

My ugly face

Me at my grandma's

(Click here to view the entire album of my ugly face.)


My profile picture

If you find any of my online accounts, they will likely have this profile picture.

It's a Terraria character I made many years ago, and I've been playing with it a fair bit. Well, until I was dumb enough to migrate to a new computer, erase the old drive and forget to back up my Terraria saves (because Terraria for some reason does not sync to Steam Cloud by default, and the saves were in ~/.local, a directory which I deliberately wanted not to migrate over).

Luckily, I did not lose any of the worlds that I actually played on, as I primarily played on a LAN server. So the loss was not really that devastating (other than for all the gear that I had in my inventory).

I have since implemented a robust backup system, and created a new Terraria character (which looks basically identical to the old one which I use in my profile pictures, other than the fact that it's now wearing full armor and a cool wizard hat).


Please keep in mind that this site is still under construction and is subject to change! (Don't worry, I'm talking about just adding new content, I don't have any intentions to turn this site into the stereotypical soydevvy JS-riddled infinitely scrolling unusable garbage that is so common on the web nowadays.)

What I'm trying to say is that if you visit this site every couple of months, there may be new stuff to explore. That's it.

Alright, enough rambling. Enjoy your visit!

Under construction

Latest post from my blog

That's right, I created a blog where I (sometimes) post about my projects (or really about anything I want)! To give you a small taste of what my blog has to offer, here's a link to my latest post:

Moving domains – goodbye prochazka.ml

Topic: General | Published 2023-01-22 19:06:14 UTC

Hi! If you're reading this, it means that you must have found my new domain, and I must apologize for any incoveniences (in case you've tried to send me mail or visit my website in the past few weeks), as I have failed to do my homework properly. Let me explain. See, when I originally wanted to have a website, I wanted to do everything for free. That meant free hosting (courtesy of Endora, a local Czech web hosting company which has an ad-supported free tier) as well as a free domain with a custom 2nd level domain (i.e. not something like prochazka.4fun.cz), which meant g...


Latest projects

Here's some cool stuff I have worked (or even am currently working!) on. I mostly just write software, but sometimes, hardware gets into the mix as well. Remember that most software I write is licensed under the GNU GPL v3 Free Software license, meaning that it is free for anyone to use, modify and share.

corrodedbar

Written in Rust

corrodedbar screenshot

A simple text-based statusbar for your X11 window manager. It can easily interface with services such as PulseAudio or NetworkManager, it is easily extensible and wildly configurable.

Yes, I'm one of those freaks who still use an old X11 tiling window manager (more specifically, dwm). And no, I am probably not switching to anything else anytime soon. After I had used dwm for several years now, everything else (especially full-blown desktop environments) feels clunky by comparison.

Essentially, I have reached the Linux nirvana, when you figure out that you do not need more than a simple window manager (and preferably a compositor) for using your graphical applications.

My current setup (Arch Linux + dwm + an old build of compton) and the way I have everything currently configured is, for lack of a better term, quite comfy for me.

...except for one thing. Before creating this project, I was using a simple shell script to update the status text in dwm. That was far from ideal: it ate up too much CPU time, often the clock would skip seconds, sometimes it would inexplicably crash etc. So at one point I finally decided to bite the bullet and write my status bar in something more sensible.

Also, I wanted to start learning Rust, and needed a good first project. 🦀

Apple I Emulator

Written in MATLAB

Apple I Emulator screenshot

I very much dislike MATLAB with its absolutely proprietary & commercial nature. That said, I am kind of proud of this one. At the end of the mandatory MATLAB university course, we were tasked to make something in MATLAB (and it had to be a GUI application). I was switching between a few ideas, before I ultimately settled on emulating the Apple I. After all, the Apple I hardware is incredibly primitive - you have a 6502 CPU, many kB of RAM, a terminal interface and ROM. How hard could that be?

Actually, not that much. Within a few days, I had a semi-working 6502 implemented in MATLAB that was able to boot the WozMon and manipulate the memory, even launch simple programs. (And after running some standard 6502 emulation tests and further improving the emulator, I was able to boot Integer BASIC).

There was just one problem: the emulator was insanely slow (as in slower than real hardware running at 1 MHz). I started benchmarking MATLAB, and figured out that calling a function which just writes to a global variable (you know, it is kind of important for an emulator to have a function which reads/writes from/to a given memory address) is just shy of being 1000x slower than if the code had been inserted inline.

So, that's what I did! I created a simple MATLAB preprocessor (in Bash) that inlines certain functions (with the output script being a single ~15k line file). Now, the emulator (on my Ryzen 5 3500U machine) executes on average ~500k instructions per second, which is quite on par with original hardware! And to wrap the whole thing up, I added some blinkenlights. Because why not.

Retrulator

Written in iOS Shortcuts, JavaScript, powered by JSNES

Retrulator screenshot, running on an iPhone SE (1st gen)

There was a period of time when I used to daily drive an iPhone (more specifically, an old 1st gen iPhone SE). What made me mad the most was that I couldn't install (or "sideload") my own applications, including emulators for old 8-bit systems (which the SE could otherwise handle with breeze). Sure, I could play through a browser on some shitty website, but I wanted to play my old NES library offline. What else would I do when I'd be stuck in the middle of the woods?

Introducing Retrulator, a solution for your offline 8-bit needs. Coding such large projects in iOS Shortcuts is a complete clusterfuck (remember, iOS Shortcuts are officialy meant to do simple tasks, once you add >100 blocks to your project, the Shortcuts editor goes to shit performance wise), but I managed to pull off a half-decent UI with which you can add downloaded NES games to your library and play them through Safari.

But didn't I say that it worked offline, when it still requires Safari? Well, what Retrulator does is that it embeds all required emulator code and game data into an enormous URL string, which Safari can parse, even offline.

Here's how to install it: first, create a "Retrulator" folder in the root of your iPhone (through the Files app), then install the shortcut from this link, Start it, give it the permission to access the created folder and also to connect to the internet (emulator code is not stored in the Shortcut and needs to be downloaded on first launch). Then, add your ROMs (do not use 50 Hz games, they are not implemented yet), turn your phone to landscape and enjoy!

Click here to expand the entire list of my projects.


Unfinished projects

To encourage myself to work on my old projects again and actually finish them, I decided to make the list of my unfinished projects public – below should be most of them. Consider this as a sort of "to-do list", just more shameful (and without the projects already listed above, which I still might be working on).


Other cool stuff that is hosted on this server

My own stuff (which has not been already mentioned)

Mirrors of other cool stuff


Mail GitHub Reddit (not that I use it that often, but here you go anyway) YouTube Discord Printables