Mittwoch, 10. Dezember 2014

My participation in Global Hackathon

The past weekend I was lucky enough to participate in an event held by Koding (http://koding.com) titled "Global Hackathon" (https://koding.com/Hackathon).
Hackathon - is a kind of time-limited events, where participants work on projects for which in ordinary daily life there is no time as a rule. The main idea is to bring the idea to the finished prototype of the final product in the shortest possible time. Hackathon is named this way because participants can use all possible tools and ways to achieve this goal.


file-2.pngThe event was attended by 2000 teams from all around the world, selected from more than 19,000 applications. Maximum number of participants in the team was equal to 5. Many people like me was not fortunate enough to find teammates and had to work alone. 51 of the judges will find winners among completed projects and the most worthy of them will be awarded.





The main topics on which participants were required to follow were:
  • Problems facing humanity (e.g. global climate change, earthquakes, pollution, accessibility problems and others);
  • Introduction to Programming for Beginners (games);
  • Problems associated with the complexity of perception of different usage conditions, agreements, rules, etc. documents regulating relations;
  • Multiplayer online games with educational and learning content;
  • Task communication and translation between languages ​​in real time.


The initial idea of ​​my project was a autonomous spacecraft simulator. Implementation should be a multiplayer game built with html5 canvas and Scala. The main difficulty which I had to face was to explore the possibilities of working with Scala as a language for frontend application development. The final implementation is based on two components:
  • ScalaJS - a set of libraries and plug in to compile Scala Javascript to run in the browser;
  • Blockly - a tool for the implementation of visual programming.


During the implementation I had to drop some ideas in the current version because of resource constraints, namely:
  • Implementation of a text code editor (aka IDE) in the browser;
  • Using a third-party library for working with graphics;
  • Compiling (and possibly execute) implemented algorithms on server;
  • The implementation of multi-user functionality;
  • Exercises implementation;
  • Implementation of a natural physical model.


In preparation for the submitting the project I had to change the paradigm of my project from space exploration to control of an aircraft in two-dimensional space because of better graphics availability and ease of perception for end user.


What has been achieved:
  • The implementation of the simulator is completely written in Scala and runs in a browser;
  • Users can implement their own control algorithms using basic control blocks included by default in Blockly and custom blocks for control of an aircraft:
    • speed change;
    • rotation angle change;
    • getting information about the nearest object (distance and relative angle);
    • getting the distance along the direction of travel to the border area (screen border);
    • write debugging information to the log;
  • Save current program and load it to/from browser's local storage.



Demo available on koding.io You can find demo here.

Future plans for further development are largely consonant with the initial objectives. I want to implement:
  • Server component, comprising:
    • registration, ratings, etc.
    • the opportunity to compete in real time;
  • Usage one of graphic libraries (e.g. paperjs) to improve gameplay;
  • Finalization of aircraft "api"  - increase the quantity and quality of available commands
  • Assignments/exercises, and in particular:
    • adding of unmanaged objects;
    • goals strict definition and monitoring of their achievement;
  • Adding text code editor along with the visual one.

In conclusion, I would like to add that my participation in hackathon helped me to take a fresh look at the current challenges, increase personal motivation and put a couple of new skills im personal skillset.