MaidSafe and PARSEC - a new distributed consensus algorithm

I'll write something about my work for a change.

I've been employed at MaidSafe for over a year and a half now. It's a small, Scottish company working on creating a fully distributed Internet. Sounds a bit weird - the Internet is already distributed, isn't it? Well, it isn't completely - every website in the Internet exists on some servers belonging to some single company. All data in the Internet is controlled by the owners of the servers that host it, and not necessarily the actual owners of the data itself. This leads to situations in which our data is sometimes used in ways we don't like (GDPR, which came into force recently, is supposed to improve the state of affairs, but I wouldn't expect too much...).

MaidSafe aims to change all of this. It counters the centralised servers with the SAFE Network - a distributed network, in which everyone controls their data. When we upload a file to this network, we aren't putting it on a specific server. Instead, the file is sliced into multiple pieces, encrypted and distributed in multiple copies among the computers of the network's users. Every user shares a part of their hard drive, but only controls their own data - the rest is unreadable to them thanks to encryption. What's more, in order to prevent spam and incentivise the users to share their space, SAFE Network is going to have its own native cryptocurrency - Safecoin - but it won't be blockchain-based, unlike the other cryptocurrencies.


Educational GIFs

I'm slowly preparing a new post for the category "Physics for everyone". The post will describe the Lorentz transformation a bit more in depth, and say something about the consequences of it being the correct description of reality. I prepared two GIFs for this purpose:

The transformation of the coordinate system by a rotation (click for an animation)

The transformation of a coordinate system by a Lorentz transformation (click for an animation)

A more detailed description of those GIFs will be a part of the new post in the category Physics for everyone :)

I published the code I used to generate them on GitHub:

Events and space-time

The first entry in the series will be quite basic, but I think that some problems will nevertheless be quite interesting. We'll be talking about what is the space-time, events, and we will show where the theory of relativity comes from. So, let's go :)

The notion of space-time is briefly mentioned at school, but usually the profound consequences of combining space and time into a single entity aren't explained too much. To understand this, one must first go a bit deeper into the details of this idea.


Hyperbolic functions - what sorcery is this?

If you are like me, your first contact with the hyperbolic functions was as "this strange, useless something on the calculator". There were just some weird buttons labeled "sinh" and "cosh". The school finally explained what "sin" and "cos" are, but there was no mention of those variants with the final "h". What is this about? The names suggest some similarity to the trigonometric functions, let's see what happens:

 \begin{array}{ll} \cos (1) = 0.54030230586 & \cosh (1) = 1.54308063482 \\ \cos (10) = -0.83907152907 & \cosh (10) = 11013.2329201 \end{array}

(You will get these results if you have the calculator set to radians - if you use degrees, then the cosine results will be different; it has no influence on the hyperbolic functions and we'll see later why that is.)

Right, these 11 thousand for cosh(10) look very similar to the trigonometric functions. This "h" apparently changes quite a bit, but what exactly...?

If you encountered complex numbers during your later education, you could stumble upon such definitions:

 \begin{array}{ll} \cos x = \frac{e^{ix} + e^{-ix}}{2} & \cosh x = \frac{e^x + e^{-x}}{2} \\ \sin x = \frac{e^{ix} - e^{-ix}}{2i} & \sinh x = \frac{e^x - e^{-x}}{2} \end{array}

Some similarity is visible here, but... Why such a form? What does this have to do with hyperbolas? If you don't know it yet, you will know after reading this article.


Generic-array reached 100 000 downloads!

My project, generic-array (a Rust crate) has now been downloaded 100 000 (in words: one hundred thousand) times! This is my first project of such a popularity.

It began with a simple hack, working around a limitation of the language - and apparently this limitation bothered many people, because a few sent me pull requests (also a first for me), and a large number downloads the library. I actually have no idea what else to write, I'm just happy that people are finding it useful ;)

The shape of a black hole's event horizon

Yesterday, while browsing the internet, I stumbled upon a thread which looked like a typical question asked by someone interested in science, and turned out to be a really interesting problem.

The question that has been asked concerned the shape of a black hole. A few people replied that the event horizon (the boundary - or the "surface" in a way - of a black hole) has the shape of a ball (which should be actually described as a sphere, since the horizon is a 2-dimensional surface, and not a 3-dimensional shape). Someone suggested that it's not exactly true, because black holes usually spin, which flattens them. I entered the thread then and said that even when a black hole is spinning, its horizon is still spherical - it's described by an equation like r = const. But is that really so...?


What can you do with a phone that has a broken touchscreen?

I have been asked recently to try to recover some data from a broken phone. The catch: the data was in the internal memory, the option to connect the phone as an external drive via USB was turned off and the touchscreen was broken. So what can you do in such a situation? It turns out that quite a lot, and even though I haven't eventually managed to recover the data, the fight with the phone was pretty interesting and I think it deserves a bit of attention.

A new project published - the 4D Labyrinth

I published another one of my projects today. I mentioned in the title that it is new, but that's not entirely true.

The history

The 4D Labyrinth is a program that I initially wrote about 10 years ago. My high-school friend had then an idea that a 4-dimensional shooter game could be quite funny. In his vision, the world would be 4-dimensional, but out of the 4 coordinates only 3 would be chosen to render a 3-dimensional scene. The player could change this set of coordinates at any moment, leading to strange situation like a 2-dimensional slice of another player moving towards you, briefly becoming 3-dimensional (as he would temporarily "jump" into the same space), kills you and becomes flat again. I decided to create a proof-of-concept of something like that, but I resolved to use continuous rotations of the visible slice instead of discrete coordinate set switching.


A new domain

I'm not particularly rich, so when I was creating this blog, I preferred a free domain. It just so happened that my hosting was offerring free subdomains under its own domain ( I decided to use the opportunity and this is how my blog got the address

Unfortunately, a problem emerged. There were changes in the hosting company some time ago and the free domains changed their endings from to Existing domains were still working as long as nothing had to be changed about them. A few days ago, though, such a necessity appeared - my SSL certificate from Let's Encrypt expired and renewing it proved to be impossible on the old domain. I had to switch to a new one, without a possibility of even creating a redirection.

I used the domain, but I knew it had to be only temporary. In order to avoid similar situations in the future (either due to internal changes in the hosting company or having to change the hosting for some reason), I had to get an external domain.

As of today, then, welcome to the brand new domain :)

An adventure with a microcontroller

At the beginning of May I digged up an old toy of mine, from about 2002-2004 - a "test computer" based on the 80C535 microcontroller. The computer consists almost exclusively of the controller, the memory (EPROM + RAM), a power connector and a serial port (RS-232) and some I/O ports. The serial port serves as a means of communication with a PC, allowing for uploading to it programs written in a simple assembly language.

80C535 test computer

80C535 test computer

Two problems appeared, though. The first one was that modern computers rarely have an RS-232 port, and laptops probably don't have them at all. This one was easy to solve by ordering a USB adapter from the internet. The second one was more serious.

In 2003 I was 15 years old, so as you can probably guess, I didn't have much influence on the design of the computer. It was designed by my teacher, who also provided us (me and the other students in the electronics club) with some software for writing and uploading programs. The problem is, during the 14 years that passed since that time, I lost the software and I have no contact with the teacher. Well, I said to myself, I'm an adult now and I'm quite good at programming, so I can probably figure this out ;)

And so began my adventure with reverse-engineering a toy from the electronics club.