P2P Zero-Knowledge-Proof based Opensource Social Network - HexHoot

I find that the domain name that I purchased on an impulse, hexhoot.com, would be the ideal name for the p2p social network; both of which I described in some of my previous posts. I have been working on it during my pasttime for about a month now, and I decided to make it opensource. You can have a look at the project using the following link: https://github.com/zenineasa/hexhoot I have attempted to follow all the best development practices as much as I can. I have written tests, and, enabled continuous integration feature in GitHub to run all the tests, lint and copyright checks for the code changes that is being made. I also have captured all the foreseeable tasks in a Trello dashboard. This helps me keep track of all the bugs that I have detected and all the important tasks that need to be completed. There are quite a lot of tasks left to make this bug-free and feature-rich. I hope I will find enough time and motivation to do the same in the coming days.

My attempt to create a Quine in MATLAB

A few weeks ago, I watched a video on YouTube which talked about quine. A quine is a program that outputs it's own code. For instance, in JavaScript, the following code would output itself.

!function $(){console.log('!'+$+'()')}()

As I watched the video, I was sure that creating a quine is not very easy. But, I found it interesting to attempt to write one on my own, maybe in MATLAB.

During the initial five minutes, I sat on my easy chair and started thinking about how to approach it. I drank a cup of coffee and opened up MATLAB Online and started trying out random things, hoping that I would eventually get some idea. I did not want to cheat by using operations to read from the currently opened file. That can be easily achieved by using the 'type' function or 'fileread' function.

As I was not able to get any idea by just thinking, I decided to have a look at different quines written by people in other languages. I thought perhaps something from JavaScript, Python or C++ would inspire me. I read through the Wikipedia page talking about quine, which has some examples.

After trying and trying for about an hour, I arrived at the following, which is not quite what we need yet,

function y=quine();y='function y=quine();y=REP;y=strrep(y,"REE",y);';y=strrep(y,"REP",['''' y '''']);

If you run the above, the following output would be produced,

function y=quine();y='function y=quine();y=REP;y=strrep(y,"REE",y);';y=strrep(y,"REE",y);

You should be able to see a few issues here. The first and foremost issue is with the inverted commas. That one is really hard to tackle. If I try to add an escape character and attempt to print it at one place, then I would have to do it twice at the other end, which would require me to add two more at the original place, and so on and so forth. The other issue is with 'strrep' trying to replace all occurances of "REP" rather than just the first. To showcase it here, I had changed "REP" to "REE" at one place to avoid multiple replacement.

Now that we know that the issue in this approach is to be able to replace just one "REP" and add an inverted comma effectively, it seems logical to attempt to use 'fprintf' function. However, my attempt was to create a function that would output itself as a function output, rather than simply displaying it. Therefore, I can't use that.

But then, I found a function very similar to 'fprintf', but can store the value to a variable. It's called 'sprintf'. Initially I arrived at the following.

function y=quine();y='function y=quine();y=%s;y=sprintf(y,y);';y=sprintf(y,y);

This one produced the following output:

function y=quine();y=function y=quine();y=%s;y=sprintf(y,y);;y=sprintf(y,y);

It appears to be almost right. Except for the inverted comma to show that 'y' is a string, everything is find here. The only option that I could think of was to use the character code of the inverted comma. The following MATLAB command helped be to get that.

>> char(39)

Intergrating that with the quine code, I got the following.

function y=quine();y='function y=quine();y=%s;y=sprintf(y,[char(39) y char(39)]);';y=sprintf(y,[char(39) y char(39)]);

And yes, that is a quine.


Popular posts from this blog

Regarding a Covid-19 related project that I worked on a few months ago

P2P Zero-Knowledge-Proof based Opensource Social Network - HexHoot

Went into the University for the first time