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
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.
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 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.
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
places where there should be variables. Then, after pressing Enter or pressing a button, this expression will be checked for
? 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.
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.
Two-dimensional visualization of k-means clustering algorithm in the browser.
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).
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 :)
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.
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::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++.
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.
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.
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.
GUI script (in Polish) which uses wxPython and matplotlib to draw a fuzzy logic function graph. I used it for fuzzy logic classes.
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.
Small projects using a well-known prototyping board.
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
ComputerControls. I'm not sure wheather it
worked out, but I've surely learned a bit more about QML.
By default the game starts in
orientation. You can change it to
Game properties. For controls please see which are set in
Paddles – you can replace manual with computer
and vice versa, change the keys etc.