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/

 

Школа Инноваций 2015 — что такое хакатон?

В этом году осенняя школа InterSystems слегка изменит формат. Да мы по-прежнему будем собираться в изолированном месте за пределами города, позволяющем максимально погрузиться в темы школы, да, мы по-прежнему будем чередовать теоретические лекции и практические упражнения, и по-прежнему это будет чисто техническое мероприятие. Но…

Раз уж мы собираем в одном месте на несколько дней такое большое количество высококвалифицированных специалистов в разных областях платформы InterSystems, и раз уж мы традиционно заставляем работать слушателей в командах над разными заданиями, то почему бы не расширить такие практические упражнения и не сделать это тем, что сейчас привычно называют «хакатоном»?

«Хакатон (англ. hackathon, от hack (см. хакер) и marathon — марафон) — форум разработчиков, во время которого специалисты из разных областей разработки программного обеспечения(программисты, дизайнеры, менеджеры) сообща работают над решением какой-либо проблемы. Сегодня хакатоны уже не относятся к хакерству, это просто марафоны программирования. Обычно хакатоны длятся от одного дня до недели.»

Источник <https://ru.wikipedia.org/wiki/%D0%A5%D0%B0%D0%BA%D0%B0%D1%82%D0%BE%D0%BD>

У каждого из нас (надеюсь) есть несколько идей проектов, которые хорошо бы было когда-нибудь сделать, но никогда не доходили руки. И вот хакатон на школе будет таким шансом. У вас будет целых 24 часа (что равно 1440 минут) чтобы в команде с коллегами максимально продвинуться в любом из направлений. Не обязательно пытаться завершить проект за эти первые сутки активного развития, но опыт показывает, что при правильной концентрации и при достаточном количестве ресурсов, за первые сутки можно сделать максимальное количество ошибок, и вырулить на наиболее правильное направление развития, продвинувшись максимально далеко. Чем если бы вы делали самостоятельно и в свободное от работы время.

(Т.е. разброс сроков тут может быть такой: или два человека и сутки работы, или пару часов в течение полугода)

Real path to success

Источник http://www.businessinsider.com/success-drawing-2012-10

Как это будет происходить?

Перед началом хакатона, будущие лидеры команд выходят и за пару минут пытаются «продать» идею другим (есть такая идея, нужны программисты с такой-то экспертизой, и художники с такой экспертизой). Если идея привлекла и команда сформирована, то они начинают суточный марафон, если его идея не стрельнула, и никто не вызвался помогать, то есть несколько альтернатив: автор продолжает в одиночку, он присоединяется к какой другой достойной команде, или организаторы формируют команду волюнтаристcки. (В конце-концов, куда вы денетесь из пансионата за городом? ;) )

Кодирование начинается в общем помещении или в отдельных комнатах, но периодически организаторы собирают/обходят команды и проводят промежуточные остановки, обзор достигнутого. Пока мы планируем сделать такие остановки в конце первого дня и утром следующего дня. На этих этапах ведущий хакатона может видит прогресс, и если все фатально уходит не в ту сторону или команда не срабатывается, то может предпринять какие-то действия (добавить кого-то в помощь или совсем переформатировать команды).

Важные условия игры — организаторы обеспечивают интернет, своевременную еду и питье в течение всего времени хакатона (и особенно ночью, если надо).

За пару часов до конца марафона, организаторы проводят тренировочную защиту проектов, и лидеры команд учатся правильно и быстро продавать текущий (или будущий) успех проекта. По завершении марафона все лидеры команд выступают перед аудиторией и организаторами и «за пару минут» выступления пытаются теперь уже всех убедить, что их проект самый полезный и крутой. По завершении докладов команд организаторы совещаются и выбирают победителей/распределяют призы. В настоящий момент предполагается что будут 3 приза от InterSystems, и один приз зрительских симпатий.

Какие темы проектов можно использовать?

Любые, в которых используются технологии платформы InterSystems (Caché, Ensemble, DeepSee, iKnow, whatever). Главным критерием в успехе хакатона всегда, всегда была хорошая идея (ну и правильные люди, собравшиеся в нужном месте). Мы открыты любой идее, если она релевантна InterSystems. Но даже если у вас нет ничего подходящего, у нас есть список тем, которые вы можете использовать для начала работ:

Вы можете выбрать любую из предложенных тем, и скооперировавшись с авторами этих проектов (большинство из которых будет на школе), продвинуть их максимально далеко за заданное время.

P.S.

Персонально я бы обратил ваше внимание на запросы по расширению Atom-COS-Studio, CPM, или cache-map-reduce :)

Но вы, конечно же, вольны выбрать любую тему, даже не из названных списков. Главное, чтобы вам было интересно.

ECP и API управления процессами

Технология распределения нагрузки между несколькими серверами сравнительно небольшой мощности является стандартной возможностью СУБД Caché уже достаточно давно. В её основе лежит протокол распределённого кэша ECP (Enterprise Cache Protocol); здесь имеется в виду именно «cache» («кэш»), а не «Caché» («кашЭ»). ECP открывает богатые возможности для горизонтального масштабирования прикладной системы, обеспечивая высокую производительность при не менее высокой устойчивости к отказам, оставляя при этом бюджет проекта в достаточно скромных рамках. К достоинствам сети ECP справедливо будет отнести и возможность сокрытия особенностей её архитектуры в недрах конфигурации СУБД, так что прикладные программы, изначально разработанные для традиционной (вертикальной) архитектуры, как правило, легко переносятся в горизонтальную ECP-среду. Эта лёгкость настолько завораживает, что хочется, чтобы так было всегда. Например, все привыкли к возможности управлять не только текущим, но и «чужими» процессами Caché: системная переменная $Job и связанные с ней функции и классы в умелых руках позволяют «творить чудеса». Стоп, но теперь процессы могут оказаться на разных серверах Caché… Ниже — о том, как удалось добиться почти такой же прозрачности в управлении процессами в среде ECP, как и без неё.
Читать далее

Создание пользовательских OID для мониторинга систем на Caché с помощью SNMP

Доброго дня (вечера, ночи, утра — нужное подчеркнуть) всем хаброжителям!
Этот пост посвящен мониторингу инстанса Caché с помощью SNMP. Наверняка, многие пользователи Caché этим в той или иной степени уже пользуются. Мониторинг через SNMP поддерживается в стандартной инсталляции Caché уже давно, однако далеко не все интересующие параметры доступны из «коробки». Например, хотелось бы видеть мониторинг количества CSP-сессий, более подробные сведения по использованию лицензии, частные KPI эксплуатируемой системы и т.п.
В этой статье вы узнаете, как добавить свои параметры для мониторинга Caché с помощью SNMP.
Читать далее

InterSystems Enterprise Manager

В стеке продуктов InterSystems появилось новое, бесплатное приложение для управления инстансами Caché и Ensemble — Enterprise Manager (EM). В этой статье я расскажу об основных возможностях нового продукта. Приложение активно развивается и поддерживает Caché, Ensemble и HealthShare версии 2014.1+.

InterSystems EM предоставляет инструменты для централизованного управления продуктами InterSystems. EM устраняет необходимость ручного изменения настроек, связанных с безопасностью, пользователями, лицензированием, пространством имен и базами данных и позволяет проводить единообразную политику изменения конфигураций серверов, исключая ошибки ручного ввода. EM позволит администраторам контролировать, кто может вносить изменения, а также сравнивать и отменять любые изменения, которые были сделаны.

EM является автономным, защищенным приложением. После начала управления продуктами InterSystems с помощью EM, все коммуникации между EM и управляемым инстансом шифруются (с помощью SSL / TLS или WSS).
Читать далее

Настройка LDAP-аутентификации в InterSystems Caché на базе Microsoft Active Directory

С одной стороны настройка LDAP-аутентификации в Caché не очень сложная — в документации этот процесс описан шестью пунктами. С другой стороны если LDAP-сервер на базе Microsoft Active Directory, то есть несколько не очевидных моментов, которые надо настроить на стороне LDAP-сервера. Так же для тех, кто не часто занимается подобными настройками, есть шанс запутаться в настройках безопасности Caché. В этой статье пошагово опишем процесс настройки LDAP-аутентификации, а также методы диагностики проблем в случае, если что-то не получается.
Читать далее

Установка InterSystems Caché и GlobalsDB на Linux

Так как у тех, кто впервые устанавливает продукты InterSystems на Linux, часто возникают проблемы в процессе установки, я решил описать этот процесс. На данный момент из бесплатных версий Linux начиная с версии 2014.1 поддерживается CentOS 6.4, поэтому процесс установки буду описывать именно на этой ОС но установка, например, на Ubuntu ничем не отличается (хотя она и не является сейчас официально поддерживаемой InterSystems).

Что потребуется

Для установки InterSystems Caché, нам понадобится дистрибутив, если у вас его нет, то вы можете его скачать здесь. Однопользовательская версия, для RedHat, установщик в формате tar.gz. Для установки на Ubuntu нужно брать версию для SuSE Linux. На момент написания статьи доступна версия 2014.1.
Для установки InterSystems GlobalsDB здесь качаем версию Для RedHat, на выбор предлагается Node.js или Java, но это не важно — на скачиваемый файл это не влияет.
Читать далее

Разработка в Caché Studio с использованием TortoiseGit

Caché-Git — это модуль контроля версий для Caché Studio, который обеспечивает вызов диалоговых окон TortoiseGit непосредственно из Studio и полуавтоматическую синхронизацию рутин между Caché и локальным репозиторием.

В каждой области выбираются пакеты, проекты, классы, рутины, dfi-файлы, csp-страницы, csp-приложения которые будут остлеживаться Caché-Git.

Всякий раз при сохранении отслеживаемой программы, она будет экспортироваться на диск в репозиторий. При открытии программа будет загружаться из репозитория, если версия, находящаяся в нём свежее.

Caché-Git работает только на компьютерах, на которых установлен и сервер и клиент Caché. Caché-Git не будет работать при соединении с удалённым сервером.

Где взять

Репозиторий с Caché-Git находится по адресу https://github.com/intersystems-ru/cache-tort-git. Там же есть wiki, в которой описаны шаги по установке и использованию
Читать далее

Клиент Caché ODBC в Linux

Несколько лет назад заказчик, крупный медицинский центр федерального значения, поручил нам разработать софт, обслуживающий информационные киоски. Внешне киоск напоминает платёжный терминал (только без купюроприёмника), его основная функция, как следует из названия, — предоставление пациентам различной информации, такой как расписание приёма врачей, услуги и их стоимость, и так далее.
По понятным причинам для киоска потребовалось разработать упрощённый интерфейс пользователя, который было решено реализовать как web-приложение. Имея в штате опытных web-программистов, уверенно владеющих php, решили (для скорости) поручить им его написание, организовав связь с базой данных нашей медицинской системы. Рассматривалось 3 варианта взаимодействия:

  • ODBC
  • JDBC
  • web-сервисы.

Web-программисты предпочли ODBC как наиболее простой с их точки зрения вариант, и альфа-версия киоска довольно быстро увидела свет. Однако вскоре выяснилось (surprise!), что php-код должен работать не под Windows, как это было у разработчика, а под Linux, несмотря на то, что в те годы наша медицинская система эксплуатировалась заказчиком на платформе Windows 2008. Чтобы «подружить» всех членов триады (Linux – ODBC-драйвер Caché — php5) потребовались определённые усилия. Последовательность проделанных действий я зафиксировал в виде наброска к данной статье, которую и предлагаю вашему вниманию.
Читать далее

Преодоление разрыва удаленного соединения при отсутствии действий пользователя

При работе с GUI и терминальными приложениями нередко случается, что пользователь, работая в режиме удаленного доступа (как правило, через Интернет), покинув компьютер минут на 15, по возвращении обнаруживает, что программа зависла. На любое действие она отвечает ошибкой, содержащей примерно такие фразы: «Потеряна связь с сервером», «[WINSOCK] virtual circuit reset by host» и т.п. Наблюдается такое и при выполнении «долгоиграющих» методов (запросов к серверу), в которых не предусмотрен вывод прогресс-бара или какая-либо интерактивность.

Данная проблема характерна не только для GUI и терминальных решений на базе СУБД Caché и Ensemble компании InterSystems, а вообще для любого клиент-серверного взаимодействия по протоколу TCP/IP. Обычно она решается на прикладном уровне путём периодического обмена пустыми сообщениями специального вида, предназначенными лишь для того, чтобы просигнализировать о том, что приложение «живо».

Ниже о том, как можно решать эту проблему без программирования.
Читать далее