InterSystems Hackathon 2015

[Русская версия статьи изначально опубликована на Хабре здесь]

We have never arranged hackathon before, and none of us has even participated in such events. But if we bring ~50 of experienced COS developers to the same location for multi days training then why not try to apply their expertise for our good? Divide to teams, ask for ideas, and make them code some crazy projects in 1 day of hacking. [Well a little bit less than 1 day as we have found actually, but still idea is the same]

We are newbies in hackathon organization, so we asked for the external help – we have contacted Grigory Petrov (now technical evangelist of Voximplant, and former evangelist of Digital October center where he arranged several hackathon and similar events). He was willing to help, but we have discovered the harder way that he has to be in PyCon 2015 the same days we arrange Russian InterSystems School. Sigh. In any case, after long discussion with Grigory we have got clear understanding of all possible scenarios, of steps we need to proceed before hackathon, during, what to do, when and in which sequence. We were mentally ready for it.

InterSystems Fall School is usually 2-3 days long event. This year we were planning to start with almost 2 days of technical training and exercises (where most of training were doing various operations over the same dataset – database of sql.ru/cache posts). And after those 2 days participant supposed to be well prepared to use modern practices (using Angular for the client development, DeepSee and iKnow for analytics, and such).

At around of 17:00 of 2nd day we started hackathon: after brief introduction of rules and planned schedule, we started initial project teams assembly. The plan was  – get all possible ideas for projects from all relevant sources (i.e. our Russian University grants suggested projects, or suggested extension ideas to some already existing GitHub projects), start to discuss them and then choice project from the list, or any other relevant idea (which might be influenced by the list of suggested ideas).

team-list

If we review now all projects, which started, and categorize them by their sources, then we see that only small fraction were using topics of the suggested list. Most winners were developing their own idea.

Here is the list of projects at the start:

1.       Atom plugin; Suggested development of existing project
2.       CPM web site; Suggested development of existing project
3.       Geo-spatial indices Suggested but new
4.       Caché <> JS projection Brand new
5.       Arduino connect Suggested but new
6.       Call diagram Brand new
7.       B*-Tree map Brand new

We have proceeded a couple of intermediate stops where we have reviewed project advancement (i.e. at around 22:00 the 1st day, and at 11:00 the next day). And we stopped development at the 13:00 the 2nd day (due to logistics constraints), and not as if it would be spanning whole day hacking – the 17:00 the 2nd day. i.e. teams have only 20 hours for development, but apparently it was not a big deal for those who prepared well enough.

Each team had 5-10 minutes for presentation, and then ISC SEs decided which teams are winners. We have touch problem to choose – there were 4 brilliant works, each of them in other circumstances would be considered a winner. But we decided that Nikita Savchenko/Anton Gnibeda work this day was the best. Just because of astonishing development speed (only 1 day since the project inception) and the shown quality and achieved results.

hackathon-1 hackathon-2 hackathon-3

Here are more details about projects winners:

1st place

Nikita Svchenko and Anton Gnibeda are stars of our local community. They both participated in many outstanding projects, e.g

Although Nikita, Anton and Irina are all living in Kiev nowadays, but they usually not working on the same project at the same time, and this school was a rare chance for them to work together. But when they decided to form the team we (organizers) were tending to break a team and rebalance to others because other teams will be lacking of frontend skills we need elsewhere. However, at the end we decided to just see where this star team could go given opportunity and chance. [That was correct decision as we see today]

This project was not developing some precooked project as many other were doing. They have developed idea at the start of 2nd day of school, and then started coding immediately.

JavaScript Object Data Model — JavaScript object projection from Caché

Team: Nikita @ZitRos Savchenko, Anton @gnibeda Gnibeda, Irene @Gra-ach Mikhailova
GitHub repo: https://github.com/ZitRos/cjs

There are 2 parts in this projects: server COS and client JavaScript. Server-side is simple REST data-points which allow get access to methods/properties of a classes. Client-side uses dirty JavaScript magic for extending client-side objects with the list of available server-side methods/properties. Which simplify debugging in the debugger

cjs-in-browser

The beauty of this API design – it uses “proper”, modern paradigms in the JavaScript part, i.e. async calls and cascading where possible.

cjs.connector.connect("http://172.16.2.172:57776/", "Samples", ["School2015"], function (cache) {
// creating a new object
 var p = new cache.School2015.Participant();
 p.Name = "Anton";
 p.Surname = "Gnibeda";
 p.$save(function(obj) {
   console.log("Participant with name " + obj.name + " saved!");
 });
// executing instance method
 cache.School2015.Group.openById(1, function (group) {
   group.PrintInfo(function (res) {
     console.log(res);
   });
 });
// executing linq-like queries
 cache.School2015.Participant
   .query()
   .where("Carma < 100 OR Carma > 140")
   .where("$id > 10")
   .orderByDesc("Carma")
   .orderBy("Name")
   .exec(function(res) {
     console.table(res);
   });
 });

2nd place

As I already mentioned as a preparation step to hackathon we have formed a list of “interesting” task, which might be approached during hackathon. This was collected of Russian grants backlog and current GitHub projects backlog, with few additions of ideas from ISC employees.

And it was a good surprise for us when 1 of topics from grant backlog list was selected as a hackathon projects – geo indices.

Geospatial — spatial indices in Caché

Team: Andrey @Arechitsky Rechitsly, Alexander @adaptun Koblov, Alexander @Apogrebnikov Pogrebnikov
GitHub repo: https://github.com/intersystems-ru/spatialindex

This was a long-staning request – we wanted that someone would implement support of geo spatial indices in Caché. There was no single reason why it could not be done eventually, given enough of expertise and opportunity. This hackathon was a good chance, because this team formed was overwhelmed with mathematics skills and COS expertise.

Thanks to this project now we have custom indices which internally use quad-trees for given set of geo pairs. Also authors have demonstrated simple Angular application, which visualizes quick search for the given box on map, and this search takes fractions of seconds even for the multiple millions in dataset.

In essence adding of such geospatial indices could be done this way:

  1. Add index for the pair of properties (longitude, latitude):
Index x1f on (Latitude,Longitude) As SpatialIndex.Index;
  1. Search for the given box of coordinates
SELECT *
 FROM SpatialIndex.Test
 WHERE %ID %FIND search_index(x1F,'window','minx=56,miny=56,maxx=57,maxy=57')
  1. Search for the given ellipse
SELECT *
 FROM SpatialIndex.Test
 WHERE  %ID %FIND search_index(x1F,'radius','x=55,y=55,radiusX=2,radiusY=2')
 and name %StartsWith 'Z'

This is only beginning of an implementation, obviously, and not in any case is pretending to be ISO 19125 compliant in this early development state. But that was an important 1st step, and is already usable in the COS projects

I am super excited about this particular project! It is not that polished as other winning projects, but could be influencing product in a long run…

3rd place

We decided to give 3rd place to 2 brilliant projects: call diagram visualizer and global map visualizer.

And worth to note that both these projects were directly influenced by Nikita Savchecnko’ UMLExplorer

Callsmap —call diagram visualization

Team: Oleg @doublefint Dmitrovich, Evgenia Litvin, Alexander @TsvetkovAV Tsvetokov
GitHub repo: https://github.com/intersystems-ru/callsmap

Oleg Dmitrovich liked how UMLExplorer visualized class hierarchy, and he wanted to extend it with call diagram functionality. They parse classes themselves, extracting method and function names, and then want to show call graph somehow. But unfortunately the components used in the UMLExplorer was not scalable enough to handle so many classes as Oleg had in their development namespaces (several thousand of classes, with the corresponding number of call edges). Thus he had to find another JavaScript component which could handle their situation and eventually they ended up using Viva Graph, which is very fast.

In some of their namespaces call diagram “galaxy” could be visualized this way:

cache-galaxy

Static picture does not show the whole beauty of a visualized diagram (which has nice animation effect in Viva Graph, in real life this graph animation is really astonishing)

CacheBlocksExplorer — global tree and database map visualizer

Team: Dmitry @daimor Maslennikov, Olga Kazantseva
GitHub repo: https://github.com/intersystems-ru/CacheBlocksExplorer

Yet another project, which has been created on UMLExplorer engine — is that global tree, and database map visualizer created by Dmitry Maslennikov. Actually he had working globals b*-tree visualizer even before hackathon started (as a side effect of one question he has been asked at the Vladivostock training he delivered before). But once he showed his project at the start of hackathon the consensus was that we all want database map just like in old school “Norton SpeedDisk”. So Dmitry has implemented just exactly that map in 1 night.

global-tree disk-map

Now, as a side effect of this project development we have 2 very valuable tools, which might be useful both for education and for performance analysis.

It will be one of my favorite tools, I guess.

Other noticeable projects

There were 3 more projects which got to the final pitching stage in various conditions. Most of them are long-standing projects, and will be probably mentioned later, once some notable development would happened and went online. Not today

Here are their repositories in any case:

CPM https://github.com/intersystems-ru/CPM
Atom COS Studio https://github.com/UGroup/Atom-COS-Studio
Arduino Snippets https://github.com/intersystems-ru/ArduinoSnippets

Conclusion

Now, several days after the hackathon completion we might derive cold hearty conclusions, and should admit that this hackathon experiment was more than successful, and produced 4 brilliant projects which will be of much help to community and to the product in a longer run.

Ain’t it cool?

https://plus.google.com/+TimurSafin1/posts/AN2JcP9K2yx

https://plus.google.com/+TimurSafin1/posts/9BMJjFAqmxn

https://www.facebook.com/groups/mskiscmeetup/permalink/1056669757706535/