📜 ⬆️ ⬇️

Hackathon at school InterSystems 2015

InterSystems has never conducted hackathons before. Schools were collected every year, trained, smashed into teams, did assignments of various lengths, but this was not called that. But time is ticking. I didn't want to repeat the same thing again. I wanted something new.

Hakaton, the same.

If we already collect fifty highly professional Caché programmers, why not try, breaking them up into teams, to create something new? Not everyone is likely to agree to participate and will want to program the night away, but even a small part, only two or three teams may well create something worthwhile. Even if you end up with just a couple, but meaningful projects, then we will consider the experiment a success. (And looking ahead, we can state with satisfaction that we have received more than a couple of worthy projects)

One problem in organizing such an event as a hakaton - we have never organized it before. And even no one personally participated. Therefore, Petrov, now the technical evangelist of Voximplant, and the former who did not have one hackathon in Digital October, had to turn for external help to Grigory eyeofhell Petrov. After the meeting with Gregory, we became armed with the knowledge of what and how to do at the hackathon, what to consider success, what to consider as failure, what sequence to act, who to invite and what to buy. One was the problem - the timing of our school: the hackathon overlapped with the conference PyCon Russia 2015 , at which Gregory was going to speak.
')
And we had to do everything ourselves. As an adult.

List of announced projects


Initially, we had a large list of proposed ideas for projects, but after the start of the hackathon and the distribution of topics, the list was strongly tightened - only a small part of the school participants agreed to participate in the hackathon on the last day / night.
( Next time you can have dinner and breakfast, do not feed those who refuse to participate in the hackathon. Joke )

Before the start of coding, after explaining the conditions of the game and splitting into teams, the alignment was as follows:



In fact, 7 teams started:

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

It was more than in our pessimistic predictions before school. Which indicates the correct recruitment of school participants.

Some representatives of the teams, for example, those who took up the development of tools for assessing ISO SQL compliance, although interested in the topic in the long term, but sensibly assessing the chances of winning the team number 4, joined it and began to make (next) projection of Caché objects in JavaScript objects in the browser. It was farsighted.

Others chose to pick mushrooms instead of push notifications . Which, of course, is also much more useful.

In any case, all 7 teams reached the final pitching and performances, although not all 7 advanced to the stated goals.

Prizes for the occupied places in the hackathon were not very large (for the 1st place each team member received the Ozon certificate for 5 thousand rubles, for the 2nd place - for 3 thousand rubles, and for the 3rd place - for 1 thousand rubles). The main thing here is not the size of the remuneration, but the fan and courage received during the creation of the project.



1 place


We, as organizers, were a little concerned that such 2 stars of the InterSystems community like Nikita @ZitRos Savchenko ( LightPivotTable in DeepSee Mobile , CacheUMLExplorer , WebTerminal , GlobalsDB Admin , etc) and Anton @gnibeda Gnibeda ( DeepSee Web , DeepSee Mobile ) gathered in one team . In addition, they, as experienced front-end teammates, could help many other teams, and we knew how. There was a desire, purely “from a pedagogical point of view,” to “rebalance” the teams, spreading out Nikita and Anton on different projects. Good thing we didn't do that ...

The theory of hakatonostroeniya teaches that ideas and projects prepared in advance achieve success on hackathons. In this case, it turned out completely wrong. The authors of the project winner claim (and there is no reason not to believe it) that the idea to create a projection of Caché objects in JavaScript came from the guys on the second day of school, at the time of discussing possible topics of the hackathon. This fact of the spontaneity of this project added weight in the final discussion of the winners, just as the factor of a correctly made presentation at the final pitching worked.

JavaScript Object Data Model - the projection of Caché objects in JavaScript


The authors:Nikita @ZitRos Savchenko , Anton @gnibeda Gnibeda , Irina Gra-ach Mikhailova
GitHub repository:https://github.com/ZitRos/cjs

The project consists of two parts: server-side and client-side JavaScript. The server part provides a simple set of REST data-points that allow access to the methods / properties of the class. The client side, using the special shamanism of JavaScript, exports these methods and properties on the client side, providing access to them in code and in a debugger.



The distinctive feature of this API on the client side is that it is done correctly using modern paradigms (such as asynchronous calls and cascading).

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


In preparation for the hackathon, we formed a list of interesting (from our point of view) tasks; this was a combination of the existing list of promising assignments for grants from the InterSystems university program and a sample from the list of extension requests (Issues) in some already existing intersystems-ru projects on github.

Adding geo-index searches was one such task.

Geospatial - spatial indices for Caché


The authors:Andrey Arechitsky Rechitsky, Alexander adaptun Koblov, Alexander @Apogrebnikov Pogrebnikov
GitHub repository:github.com/intersystems-ru/spatialindex


Caché has long lacked spatial index searches. Given the flexibility of the multi-model platform paradigm, there was not one objective reason why such support could not be added. The question was in desire, examination and, maybe, in a combination of circumstances. Gathering a team with so many mathematicians was the right combination of circumstances and expertise.

As a result, custom indexes were built, which build a quad-tree for given pairs of coordinates, and a simple web application was demonstrated that on the data array from millions of points found an intersection in a fraction of a second and visualized the specified area on the map.

Programmatically searching for spatial indexes now looks like this:

1. Setting the index in the class for a pair of properties that specify the coordinates:

 Index x1f on (Latitude,Longitude) As SpatialIndex.Index; 

2. Search by square area:

 SELECT * FROM SpatialIndex.Test WHERE %ID %FIND search_index(x1F,'window','minx=56,miny=56,maxx=57,maxy=57') 

3. Or by ellipse:

 SELECT * FROM SpatialIndex.Test WHERE %ID %FIND search_index(x1F,'radius','x=55,y=55,radiusX=2,radiusY=2') and name %StartsWith 'Z' 

It is clear that this is only the beginning of a big path to the product, and we must also implement a search by landfill, and before the implementation of ISO 19125 there is still a very long way. But it was the first important practical step.

There is a feeling that this particular project, in terms of benefits for the product, will have the greatest impact of all the winners of this hackathon: the functionality that has been waiting for, finally appeared, you can begin to use it right now.

3rd place


The third place was shared by 2 projects: the visualizer of interaction diagrams and the globalizer visualizer in the database
It so happened that the UMLExplorer project (by a strange coincidence, also created by Nikita @ ZitRos Savchenko ) prompted others to create several more different tools that facilitate interaction with the Caché database and / or its classes / tables.

Callsmap - interaction diagram visualizer


The authors:Oleg doublefint Dmitrovich, Evgenia Litvin, Alexander TsvetkovAV Tsvetkov
GitHub repository:github.com/intersystems-ru/callsmap

Oleg Dmitrovich liked the visualization of the hierarchy, and he wanted to do something similar, but at the level of the interaction diagram (calls). Unfortunately, not every jQuery component can withstand the variety of challenges that Oleg has in his test examples (several thousand classes, with the corresponding number of arcs in the interaction diagram). Therefore, we had to look for another suitable component - in the end we settled on Viva Graph, which is very fast.

The visualization of the interaction graph of classes in the test area in the end looked like this:



( A static picture does not reflect all the beauty of visualization and cannot convey the animation effects implemented on Viva Graph. The spread of the galaxy of classes in life is fascinating )

CacheBlocksExplorer - a global tree and database map visualizer


The authors:Dmitry Daimor Maslennikov, Olga Kazantseva
GitHub repository:github.com/intersystems-ru/CacheBlocksExplorer

Another great project that emerged from the UMLExplorer idea / engine is the global / base map visualizer, made by Dmitry Maslennikov. Actually, Dmitry made a global tree b * -tree globalizer before starting the hackathon, but when discussing the project before the hackathon, there was a general consensus that we lack visualization of the base map, as was the case with the old Norton SpeedDisk / Microsoft SpeedDisk. What Dmitri did for the night.

(And, by the way, this project also received a “audience award” following a general vote.)




Now, as a side effect of writing this project, we have 2 wonderful tools that are useful both for teaching and for optimizing databases: displaying all levels of the b * -tree tree hierarchy on the example of a specific global, and displaying the distribution map of database blocks with color coding globals. And all this within one tool.
I do not know about you, but I will definitely use it, and often.

Other hackathon projects


There were 3 more projects that reached the final pitching in one or another state. But, perhaps, we will tell about them another time.
Here are their repositories:

CPMgithub.com/intersystems-ru/CPM
Atom COS Studiogithub.com/UGroup/Atom-COS-Studio
Arduino Snippetsgithub.com/intersystems-ru/ArduinoSnippets

Conclusion


In general, after a few days after completion of school, having digested all the impressions, we can once again assert that the experiment with the hackathon at InterSystems school was more than successful. The community received 4 outstanding, if not brilliant projects, with tools of different directions. Many of them will be useful to the community, and some of them may be useful to InterSystems itself.

Which, incidentally, we initially wanted to get.

[Photo album number 1] [Photo album number 2] [Photo album number 3]

Source: https://habr.com/ru/post/267459/


All Articles