Contents

Reminiscence

The "birth" of the CodeAbbey happened somewhere at September of 2013. Precise date I don't remember, as it was somewhat continous process, but there were roughly 3 key points:

I'm going to collect some recollections about how it all started - not only out of nostalgy, but in hope to inspire others to work on various pet-projects and, perhaps, to share some ideas, perhaps, useful.


Laptop used for creating CodeAbbey

Here you see the laptop which was generally used while creating the site and maintaining it few years after - Asus Eee PC bought back in 2010 for about $300 - it has 10 inches screen, 1Gb of RAM and this obviously affected the choice of technologies and even the design :)

Also it shows the main page of the very early version of the site - you can still browse it at messcoder.sourceforge.net, of which I'll speak bit more below.

Earlier Attempts

Byte and Bottle

The idea definitely had come years earlier - I was quite fascinated by programming problems, despite not being too strong in solving them. Initially, and for long period, there was only vague idea and the name like one you see above, i.e. it was supposed to be styled as a tavern or something like this (why? hard to tell).

This never materialized as by that time I only had superficial knowledge of HTML and nothing about web-servers, server-side scripts etc. Perhaps there was sketch drawing of main page, hard to remember. Most probably it was intended to have clickable items directly in the picture, like main menu screen in some computer game.

OpenCoder

Later (around 2010-2011) I wondered about existence of some similar sites and found TopCoder (which was since acquired by some other company and is not more the place it's been) - and just emerging CodeForces - both definitely targeted and tailored for "Competitive Programming".

After participating in some number of contests I decided to try build something similar. As I was by then newbie Java programmer, I started trying in Java. Bad choice. While Java is considered great for large enterprise projects, it obviously can be overkill for smaller-scale tasks.

As Java is not targeted specifically for web, you need to collect a number of frameworks and libraries generally to have something working, even small - and recompile for every change. And besides there were close to zero free web-servers where one can try deploy java apps.

Nevertheless I have built some application, learnt about VPS (virtual private servers), tried a couple, deployed the app for testing purposes...

But another issue is I followed the pattern of the mentioned sites, which upload your code, compile it and run various cunning tests against it. This requires some isolated environment and I was much busy trying to create one along with server itself, though it supported only Java and C++ (most popular languages in competitive programming).

To make it short, the idea died anyway because both developing this monster and creating content for it was quite toilsome. I doubt I was able to create at least few problems and most probably none had full set of tests.

I had difficulty recollecting the name of this project - ended up with starting the old laptop mentioned above and finding the sources in defunct windows partition. Perhaps I should upload them somewhere for reference.

JesyBots


Google AI Contest game example
Planet Wars - at Google AI Contest

By then I discovered Google AI Challenges - roughly yearly contests which allowed to submit multiple programs trying to compete in multiple duels. First of them was about playing TRON game I believe (like snakes trying to conquer field of squares), I only tried to participate in Planet Wars or how it was called (with not impressive results). This made me thinking of different type of challenge.

I even created such a challenge, announced it at CodeForces (at Nov 13 2012 - I checked now) and promised a prize of $100 (considerable sum for me by then - but feeling of trying something cool was stronger).

Well, it was not really extremely cool:

It was to some extent successful though I was much surprised at the guess rate of top-solutions and as two winners explained to me, it was a matter of using cryptographically insecure randomizer for throwing dice, which they were actively exploiting.

Nevertheless to continue in this manner it is necessary to invent other non-trivial games and together with the technical side still being difficult to maintain and develop, this buried the idea.

CodeAbbey

By coincidence I was giving private lessons to gain some additional money, perhaps since 2008 - mainly in physics and programming, but also sometimes trying at math and chess. Much interesting experience :)

Chess kids (aged about 7, of some quite wealthy family), for example, were constantly fighting each other, then their short and plump nanny rushed into and gave them couple of real boxing hits. She urged me to do this myself, explaining that this was a way approved by parents - but I never felt enough courage to beat children - and anyway they were really clever, curious and inventive fellows :)

However once I got request to teach some student basics of PHP. When? Today or tomorrow. I googled for some tutorial and after certain efforts really found it is simple and familiar due to my knowledge of HTML and PHP.

So I agreed and gave successful intro lesson to the student. He left good feedback but never returned. Nevertheless I learnt some new tool and soon figured out there are enough free web-servers allowing to try coding in PHP.

Along with percepted difficulty of implementing server which compiles and runs user's solution, this somehow lead me thinking about implementing much simpler approach, following the example of the Project Euler.

Though I poorly remember details, it is definitely that when I at last set to work, the work went fast. Despite I started with creating my own mini-framework (not because I was so clever, but on contrary) some functional version was ready probably in about 10 days. I quickly added perhaps the first dozen of tasks and started looking where to announce my work and attract people.

Unluckily my wife's mother had her leg broken on Sep 13 and we were involved in travelling between our and her house daily in shifts, and visiting her in the hospital etc - but in some manner it allowed me to concentrate on the work.

User flow initially was not encouraging - as I see now, during September there were registered only 6 users, of them two were my test accounts and the third test account was used mainly by my colleague, who initially was willing to help with testing. Anyway there were 3 real persons and even they gave some valuable feedback. During October about 40+ more joined. Bit later I was adviced to try inviting people via Reddit, and this improved the situation.

Code

I mentioned that the initial name was MessCoder and it was hosted for free at SourceForge (which I discovered couple years ago - and it was a great thing to tinker with - it still provides free shell and hosting, though it is not easy to find instructions).

Regretfully my old account there was removed somewhere around 2015-2016, I believe because the "interactive problems" also hosted there were abused (perhaps unintentionally) by some user and administration decided it is violation of terms of service. So now that old project still exists here but doesn't link any author's page anymore and I can't even fix the login at it. So no one can login (due to FaceBook API changed many times since) - and it is in a kind of "frozen" state.

But the code is preserved there and anyone curious enough can reuse and modify it to one's liking. Just click the image below:


Source of early CodeAbbey version

As I mentioned, I created my own mini-framework or engine for it, not because I was very clever, but because I was unable to well understand a couple of existing frameworks I've tried - obviously due to lack of skills in PHP and web-dev at all. Nevertheless I understood what I want:

So to sum up, the moral I got from this, is that in pet-projects and startups it may be very important to use the tool with which things could be built quickly - and also it is important to make idea simple enough that it could be implemented in some observable time. At least before the programmer gets bored.

It's a manifestation of popular KISS principle - keep it simple, stupid. :)