Sunday, February 14, 2016

#4 GeoChat

This is like "modern" EvyMap, a project I worked on before. GeoChat is a very good example of how much better I have got in developing web stuff. This took me 1 month to create, compared to EvyMap 4-5 months. (for my defense: working on this stuff is just a small hobby of mine).

GeoChat was made by taking additional care of the design. The page is fully functional on phones and is designed to be comfortable to use. Currently, the page is tied to one location, given by the user.
These are ideally the GPS coordinates, but manual location selection is also possible.

An algorithm for automatic content selection was also added.

Tuesday, February 9, 2016


This one is a HTML5 remake of the popular game curv. I suppose that I don't need to elaborate much about the game mechanics. We implemented a matching system and a global scoreboard for the active players. Periodically, upgrades also spawn on the map, giving you various advantages over your opponents. The game is also working well on mobile platforms!



#2 AudioWars

This one brought us the first place on a hackathon (theme: gamification). We developed a game that requires one to whistle a popular song in order to destroy asteroids heading to our planet. The best part? Local multiplayer works!

The game does not have its own domain, but is still accessible here:


Monday, February 8, 2016


There are several web apps I developed together with a few friends on my university that I failed to share on my blog here. 5 of them, actually. Yeah, crazy... We somehow end up creating things and then we stop pushing the extra mile to see how to market things. At least we know what we need to work on now. :)

The first app that I wanted to mention is:

I believe that this page is amazing for those that want to create some web content in 5 minutes. Currently, there are no "real" private sections, but channels do exist. Once an user occupied some area with his box, no other user is able to take away that place.

The amount of boxes a user can create is limited by the amount of credit the user possesses. Visiting the page on a daily basis increases that amount.

Here is a screenshot (zoomed out a bit):

This is from the public channel. If you want to get to your own quiet place:

In the next few days I will come to make a post about the app #2. It is pretty amazing if you're the type that likes to whistle around.

Sunday, September 6, 2015

Codeforces: Xenia and Hamming

Here is a coding puzzle I wanted to formalize due to clarity for myself. If you're into number theory this is your thing.

Problem statement:

Solution: First observation which is easy to make is that it is easier to calculate where the characters match instead of mismatch and that we do not need to compute n*x and m*y. This is true:

\( (n \cdot x)[dx + i \cdot |x|] = x[(dx + i \cdot |x|) \mod |x|] \)

Therefore, we want to count how many (dx, i) exist so that x[(dx + i*|x|) mod |x|] = y[(dx + i*|x|) mod |y|] holds. Since i*|x| mod |x| == 0, it is actually:

\( x[dx] = y[(dx + i \cdot |x|]) \mod |y| \)

Lets fix dx and see how i*|x| behaves within modulo |y|. This part requires some simple algebraic knowledge. i*|x| is trivially a repeating sequence within modulo |y|. But how does that repetition look like?

If i*|x| = t (mod |y|), then i*|x| - j*|y| = t, for some j. Using bezouts identity we know that t = gcd(|x|, |y|) * k, for some k.  This means that all sequences make jumps of length gcd(|x|, |y|). With this information and the frequency of all characters within the second string for each repeating sequence, an efficient algorithm can be developed.

Sunday, August 16, 2015 -- a new HTML5 game!

Over the course of the last 2 months I have developed with a friend a new HTML5 game. It supports multiplayer and is meant to be very simple. You jump off of bricks and try to get as high as possible.

It really showcases the power of nodejs + With enough optimizations, we were able to get a stable frame-rate even though all the computation is done on the server.

Interested to try it out? Go and play at: TARG.IO !

This preview should give a good insight about the idea behind:

Saturday, May 2, 2015

Exam season done and... The progress on EvyMap

Onwards with EvyMap (! Now that I have been done with my exams for a month, I have invested some time in EvyMap's progress. Throughout that time, I have thought a lot about the way EvyMap should function. This made me make a slight "change of course". The biggest change is the extension of the chat based system to a thread based one.  Therefore, people can create posts on a location and other people can then reply to it.

What that means for the user?
With this system, the usage of EvyMap should feel more natural. You enter a location, get some conversations offered, and you can join, if you want. 

How does this work geographically? 
Your post is going to be shared on the location of your choice. A person doesn't have to be necessary on the same location as your post is in order to see it. It is merely necessary for the other person to be close to your post.
A system has been integrated to adapt to the load on the map. Densely active areas will get the conversations that are more recent and close, while inactive areas will get those further away and less new. 

cool upcoming feature: Spreading of posts! Based on the activity your posts have, they will be able to spread geographically to more locations. 

What has been done further?
  • The design has been greatly adapted.
  • Small description added on the index page.
  • Main page displays well on smaller devices now (phones, etc.).
  • Self-adapting fetching of replies. Ajax calls are adapting their cycles based on activity.
  • Image uploading fixed for profile pictures: images of all proportions are now supported. 
  • The user-search bar is now using trigram matching: greatly improved search.
  • Some more XSS fixes.
  • Move from MySql to Postgresql
  • Code was greatly refactored and a new pipeline for producing Javascript has been made: Grunt is used together with Typescript. Minified Javascript is also produced on the production side -> performance up!
  • Fix more known XSS vulnerabilities.
  • Add bcrypt for password hashing in order to keep the passwords safe.
  • Adapt the post-fetching mechanism to the above load adaption algorithm.
  • Enable manual extension of the search area in time and space. 
  • Automatic user fetching while typing (currently, pressing enter is required).
  • Further adaptation of the reply fetching mechanism is needed.
  • Notifications on replies.
  • Access to made posts through the profile page.
  • Read-access without an account.
  • Delete/edit post/reply.
  • The cool upcoming feature :)