Jakub Młokosiewicz // hckr.pl
I like to tinker with software

Hi! Welcome to my home page.

I wanted to make it stand out a bit and finally got inspired by text mode interfaces, mainly Midnight Commander, a Linux console file manager. Let's say it's a very loose adaptation :)

Use up and down arrows to move between files in a virtual directory tree.
Press enter to switch to a directory.

A slightly less fun option is also possible – you can just click (or tap) the options.

Previous version of this page can be found here.

I like to code and honestly don't understand why someone would like trains or sports.
To each their own, I guess.

I discovered programming near the end of the primary school. I was playing with Excel and in the process of trying all the interesting, and also less interesting, options. I found an editor for creating windows in which I could place different controls (like buttons, text fields and so on). Even though, as far as I recall, I didn't manage to add any logic then, the sheer pleasure of having my own designed window showing after pressing a "play" key on the Excel toolbar was enough to get me interested. Soon I discovered it's called VBA. Soon after I found a book about Visual Basic .NET (slightly different thing) during shopping and asked my parents to buy it for me. When I got access to the internet, I stumbled upon CodersCity.net (in Polish) and, after some time, Forumweb.pl, where I received much guidance.

Long history short, I started programming in Visual Basic, then I also got interested in web development. Starting with very simple layuts in HTML and CSS, and poorly chosen colors, I got better over time and also learned PHP which enabled me to create websites with login and interaction with a database (MySQL in my case). JavaScript followed nicely as a way to do things in browser without necessarily reloading the page. On university I got a chance to finally learn how to properly manage memory in C++ which previously discouraged me from using it (I also got familiar with Linux which I happily use to this day), not mentioning less appealing look of a console application, compared to a web page which could be easily styled with CSS (is it why we have full-blown editors written in web technolgies and Electron? :D). All jokes aside, I know there are GUI libraries for C++. Some even embed JavaScript engine inside (Qt's QML)! I also have some experience with Python which I've used for example for convenience, web development or some kind of data science. And these, of course, aren't all programming languages I've ever used.

What I mean, at some point a specific language becomes just a tool for a job and a good coder should be able to easily transition between different languages and frameworks, and choose them well. I strive to be such a programmer each day :)

I hope I didn't bore you. Please, check out my projects and don't hesitate to improve something if you've got an idea (issues and pull requests are very welcome)!

If you'd like to contact me, my e-mail is available in the CV.

I've ordered my personal projects by category. Please, select a specific directory.

In Web technolgies, you'll find two games (in JavaScript), a CRUD (in PHP), a decision support system with a simple embedded language (in JavaScript), two utilities: for Facebook and for Github (web extension and userscript), and more.

In C++, there is a game, a thread pool library, and more.

In Python, you can find my engineering thesis with an implementation of Connect 4 (a game) and an application of reinforcement learning, a tool for report generation for signal processing classes, and more.

In Other, you'll find my implementation of snake for Arduino, demonstration of a padding oracle attack against AES CBC, a somewhat declarative approach to Pong, and more.

Throw an Arrow is a game made for Gynvael's Summer GameDev Challenge 2018.

Play online or take a look at the code.

There were some weird constraints like the content should be rendered into a 360x400 <canvas> which is then stretched to fill the full screen or there could be at most 32 colors displayed used at the same time. On top of that, the whole game had to have the size of at most 31337 bytes.

The application is based on the logical-algebraic method discussed during Decision Support Systems classes on Wroclaw University of Science and Technology. The program infers, based on previously defined variables and logical facts, what the effects of the decisions given by the user will be (analysis task) or what decisions should be made to achieve the desired effects (decision support task). The loaded database relates to yacht control. I was responsible for the implementation, a friend of mine developed the logical rules.

The application supports writing rules in a human-friendly format, which is converted to internal representation (parsed, interpreted) and checked for errors during the app initialization.

Input and output facts can be easily constructed in the application GUI. First, a template logical expression should be written with ? in places where there should be variables. Then, after pressing Enter or pressing a button, this expression will be checked for correctness and ? will be replaced with lists with meaningful variable names. After the selection is made, results are shown below in a form of a table and logical expressions.

A CRUD application for employee data management with different access levels (in Polish).

When we were assigned to write a CRUD for employee management in PHP, I used this oppurtunity to do it in a "more proper way" than it was presented during classes, which I then skipped, handing out the task early.

I programmed it in a MVC fashion. Even though it's plain PHP, it features routing, controllers, models, and of course, a simple mechanism for views which allows for creation of readable templates. There is also a Validator class which is easily extendable with new rules and easy to use in models.

Firefox Web Extension to save Facebook posts as images.

See the landing page, entry on Firefox Add-ons website or take a look at the code.

Web Extension saves Facebook posts as images ("takes screenshot"). Add-on adds new option in each post's menu to save it's screenshot (with all replies expanded). Screenshot can be also anonymized (profile pictures blurred, names replaced with identifiers like "OP", "Profile 1", "Profile 2" and so on). Large posts are split into multiple images each at most 8192 px tall (this can be changed up to 16000 px).

Facebook changes the interface from time to time which causes the add-on to stop working partially or even in full.

In this simple game you control a horse which has to jump to avoid the evil skeletons. The forst is getting more dense with time which makes it harder to see when the enemy is approaching.

Game was written in JavaScript and that made it possible to port it to Android with Cordova.

Two-dimensional visualization of k-means clustering algorithm in the browser.

Try it in the browser or take a look at the code.

You can add data points manually or at random and, similarly, centroids. The steps of the algorithm can be executed automatically or step by step with a click on the button.

A Userscript to filter GitHub news feed using case-insensitive regular expression.

The idea for this script came out from a simple need to have a way to quicky search through the GitHub front page "activity".

An attempt to create a matrix-like effect on a video (or a stream from a webcam).

Try it out or check out the code.

A very old project of mine. An attempt to create a web interface mimicking a desktop.

Space Logic Adventure is an arcade game I made for Gynvael's Summer GameDev Challenge 2017. I managed to win the first place :)

Download and play or take a look at the code.

The task was to make a game using only the provided assets with a couple of exceptions. I'm not much interested in games, hence I don't know what genre it is that I created. But it's definetety somewhat arcade and somewhat a puzzle. The goal of each level is to reach a field with the spaceship. Fields disappear one second after standing on them which means you must move fast.

The game has multiple levels which means I had to design them somehow. I created a text format for level files. Assets were supplied as separate files, so I created a very simple texture packer. At some places the code could've been written better and some functionality not required by current levels isn't finished (I was coding it fast). Maybe I'll revisit and improve the game in the future.

A thread pool implementation in C++11.

Take a look at the code and example usage.

Library makes it easy to schedule tasks (which can be anything assignable to std::function) to be executed in one of threads in a pool and then possibly receive a result if there is any (as a thread pool should do per definition). I think it's an interesting peace of code to learn about the concurrency features added in C++11. My implementation makes use of std::unique_lock, std::mutex and std::condition_variable for synchronization, and std::packaged_task which wraps a callable (and is ultimately called by one of the threads) and makes available a std::future which is returned to the user and provides access to the task result when it's ready.

Generating and visualizing Mandelbrot set/fractal using TBB and png++.

Take a look at the code and images.

Project explores tdd::flow::graph features in the implementation of a somewhat artifically created need to draw Mandelbrot fractals concurrently and then merge them into the third image. If you look for inspiration how to implement something with TBB, feel free to grab some code and maybe also contribute! I of course can't guarantee that the code is safe and well-written, it was my first time with TBB. But look at the images – something as easy as pixel offset during merge of two images can make an interesting effect!

A simple HTTP server written using C++ and Winsock.

Check out the code.

It technically is a HTTP server, but all it does is receive a request, parse headers and return them in an HTML table. It doesn't serve files, but this shouldn't be that hard to implement. The only thing to ask would be – why?

I wrote an implementaion for my engineering thesis in Python. In the thesis I apply a reinforcement learning algorithm to Connect 4 game and compare various values of algorithm's meta parameters.

Check out the repository.

TL;DR I didn't manage to train an agent which could beat a sensible human, but at least it beats a random player ;)

Library and scripts created to generate PDF reports for signal processing classes.

Check out the whole repository or start with one of generated reports (in Polish, but graphs are international ;) – AM, FM, PM.

GUI script (in Polish) which uses wxPython and matplotlib to draw a fuzzy logic function graph. I used it for fuzzy logic classes.

Check out the code.

A demonstration of a padding oracle attack against AES CBC (with PKCS7 or ANSI X.923 padding scheme) implemented using C# and .NET Core. Also includes a report with Q&A requred as a lab assignment.

Check out the implementation and don't forget to look at the report which briefly explains the code and how the attack works.

Small projects using a well-known prototyping board.

Watch video: snake clone on Arduino or check out the code and wiring.

A simple pong game written in QML.

As QML is a declarative language, I imagined my implementation to also be declarative. That's why there is a Game component which should have two Paddles and a Ball inside. Each Paddle should have either ManualControls or ComputerControls. I'm not sure wheather it worked out, but I've surely learned a bit more about QML.

Check out the code.

By default the game starts in 'vertical' orientation. You can change it to 'horizontal' in Game properties. For controls please see which are set in Paddles – you can replace manual with computer and vice versa, change the keys etc.

Press ENTER to explore directory My projects.
Press ENTER to explore directory Web technologies.
Press ENTER to explore directory C++.
Press ENTER to explore directory Python.
Press ENTER to explore directory Other.
Press ENTER to go up.