Na přelomu listopadu a prosince 2017 jsme v MoroSystems uspořádali v pořadí druhý firemní Hackathon. Ten měl za cíl navázat na zavedenou tradici a zároveň, mimo jiná zajímavá témata, vytvořit funkční aplikaci pro rozdělování zisku mezi naše kolegy, která měla být spuštěna do produkce hned následující týden.
Proč hackathon?
Co to je hackathon není třeba představovat – každá IT firma už nějaký ten svůj hackathon absolvovala a začínají se objevovat i akce pořádané veřejným sektorem. Pro ty, kteří přeci jenom neví, postačí vysvětlení z Wikipedie.
My v MoroSystems věříme, že jenom neustálou prací na sobě můžeme být lepší a posunout naše dovednosti a znalosti dále. A u toho se chceme bavit. To jsou dva hlavní důvody, proč jsme se do organizace pustili. Náš první hackathon se věnoval Atlassian nástrojům a jeho cílem bylo vytvořit několik zajímavých doplňků. V tomto programovacím maratonu jsme rozšířili obor témat a z těch jsme vydestilovali následující:
- Nástroj pro sběr dat pro rozdělení zisku
- Každý rok si na podzim v MoroSystems rozdělujeme část zisku společnosti mezi sebou. Prakticky to funguje tak, že každý MoroSystémák dostane budget, jehož polovinu musí rozdělit mezi ostatní kolegy. V minulosti jsme rozdělování řešili neohrabaně přes JIRA, cílem bylo tedy vytvořit nástroj, který nám celý proces usnadní a vygeneruje grafické znázornění (to jsme měli již hotové z předchozího hackathonu). Důležité bylo mít také výstupy pro následné zpracování v podobě mezd.
- Práce s Confluence stránkami pomocí EasyMindu
- Náš produkt EasyMind nám umožňuje v rámci Confluence vytvářet myšlenkové mapy. Cílem tohoto projektu bylo umožnit pracovat se stránkami v Confluence pomocí myšlenkové mapy – tedy jako s uzly v myšlenkové mapě.
- Dependence mezi JIRA issues pomocí grafu
- Na projektu, který realizujeme pro eBay, nás často trápí sledování závislostí mezi jednotlivými JIRA issues. Cílem bylo vytvořit grafické zobrazení, které bude umožňovat editaci a usnadní tak práci a zlepší přehlednost.
- Slackbot
- Různí boti, kteří dokážou komunikovat s člověkem a pomoci mi v každodenní práci jsou již dnes běžní. Chtěli jsme si vyzkoušet, jakým způsobem vytvořit MoroBota pro Slack, který by nám pomohl zjišťovat informace o dění ve firmě a usnadnil vyhledávání informací pro MoroSystémáky.
- Synchronizace WIKI tasks a Wunderlist / Todoist
- Jelikož rádi používáme funkci úkolů v Confluence, ale zároveň používáme Wunderlist a Todoist pro organizaci našich úkolů, řekli jsme si, že by bylo fajn mít úkoly synchronizované.
Jak to dopadlo
Po předchozích zkušenostech, kdy byl 24hodinový maraton zahájen až ve večerních hodinách, jsme tentokrát začínali v páteční poledne. Konec byl naplánován na poledne sobotní. Na akci jsme zajistili dostatek občerstvení, které bylo doplňováno v průběhu noci a nakonec se přidala i basa piv, která pozvedla morálku v nejtěžších a nejunavenějších chvílích. Účast se nakonec zastavila na 13 MoroSystémácích.
Na začátku proběhla klasická rozprava – rozdělili jsme si úkoly a nominovali se do jednotlivých týmů. Týmy měly velikost od jednoho vývojáře až po 4členný tým. Celkový průběh hodnotím veskrze pozitivně – drtivá většina týmu vydržela bez spánku a v plném soustředění. Jako nejkrizovější dobu vnímám sobotní ráno, kdy blízkost prezentace výsledků a nedostatek spánku vytvářely zajímavé situace. A jak dopadly jednotlivé projekty?
Nástroj pro sběr dat pro rozdělení zisku
Tento projekt byl tím největším a zároveň měl důležitou podmínku – příští týden jdeme do produkce. Nebudu vás napínat – dopadlo to dobře, nástroj vznikl a my si mohli v rámci MoroSystems rozdělit zisk pohodlně a bez potíží. Cesta k tomu byla trnitá – ať už zmíním velký feature list na začátku a jeho postupné ukrajování, zapojení Google autentifikace během vývoje a následné ladění i po skončení hackathonu. Spoustu témat si odnášíme na další hackathon.
Technologicky byl projekt postaven na Java backendu s našimi klasickými technologiemi Spring a Hibernate a React frontendu. Jako databáze slouží Postgres. Celý nástroj běží v Dockeru s automatickým deploymentem skrze Docker hub / Docker cloud.
Práce s Confluence stránkami pomocí EasyMindu
Jak už bylo napsáno výše – hlavním cílem bylo vytvořit nástroj, pro jednodušší správu stránek a jejich stromu v rámci Confluence. K tomu slouží speciální editor EasyMindu, který načte strom stránek a zobrazí je jako jednotlivé uzly – titulek uzlu je název stránky a další řádky jako H1, H2, H3 nadpisy. Přesun uzlů znamená přesun stránek v Confluence, jejich vytváření / mazání pak adekvátní operace v rámci Confluence. Před uložením mind mapy je uživateli nabídnut seznam změn ke schválení tak, aby se předešlo chybám.
Ne vše z výše zmiňovaných funkcí bylo implementováno – hlavní funkce ale ano, takže jsme mohli při prezentaci načíst strom stránek, manipulovat s uzly a výsledek uložit.
Dependence mezi JIRA issues pomocí grafu
Tento zajímavý technologický počin měl hned několik úspěchů – jednak se podařilo použít React v JIRA, vyzkoušet si Kotlin a také se podívat na problematiku teorie orientovaných grafů. Podařilo se vytvořit plugin, který funguje nad klasickým Agile boardem v JIRA a umožňuje používat zcela standardní filtry pro vyhledávání issues. K tomu se přidala názorná grafická vizualizace s oceňováním jenodtlivých hran, jejich přidáváním a odebíráním. Plugin tedy umožňuje jednoduše manipulovat se závislostmi mezi JIRA issues a důrazem na důležitost vazby.
Slackbot
Jeden z nejzajímavějších počinů – zejména z toho hlediska, že jsme o dané problematice věděli velmi málo a tím pádem musel jednočlenný tým prozkoumávat opravdu všechny oblasti. Z nápadu nakonec vykrystalizoval virtuální MoroSystémák, kterého jsme ještě během hackathonu překřtili na Gábi (poznámka pro neznalé – Gabča je jedním z našich pilířů backoffice). Gábi se podařilo v průběhu večera naučit vyhledávat v naší databázi znalostí na Confluence, zobrazovat blog posty, které máme na Confluence a také reagovat na konverzaci. Třešničkou na dortu pak byla možnost něco Gábi naučit přes speciální příkazy.
Synchronizace WIKI tasks a Wunderlist / Todoist
Toto téma vycházelo z mé osobní potřeby – nebaví mě neustále sledovat dva seznamy úkolů, které musím synchronizovat pouze ve své hlavě. Ze začátku se jevilo vše relativně jednoduché, ale postupem času jsme zjišťovali, že možnosti Confluence s práci s tasky nejsou ideální a stejně to platilo pro možnosti Wunderlistu / Todoistu. Z tohoto důvodu jsme se soustředili pouze na Wunderlist a nakonec se podařilo vytvořit funkční synchronizaci s následujícími parametry:
- funkční vytváření / mazání / označení úkolů (pokud task vznikne / je změněn v Confluence, je přenesen jeho stav do Wunderlistu)
- přednost má vždy Confluence – synchronizace probíhá směrem z Confluence
Nepodařilo se vytvořit funkční přenos stavu z Wunderlistu do Confluence – API Confluence nefungovalo a bohužel jsme toto téma nebyli schopni dořešit.
Závěrem
Chci poděkovat všem, kteří se akce zúčastnili – bylo inspirující sledovat atmosféru a programátorské flow, které v našich brněnských kancelářích bylo. Každý jel na maximum, každý ze sebe vymáčkl to nejlepší a každý se za těch 24 hodin naučil něco nového. Navíc jsme se u toho zasmáli a zabavili a tato kombinace přesně splnila zadání. Nemluvě o tom, že přinesla funkční aplikaci usnadňující naše fungování v MoroSystems a přinesla další zajímavé nápady.
V tomto roce plánujeme další dva hackathony – témat máme spousty. Ať už se jedná o dotažení věcí z minulých akcí, tak nová témata a technologie, které si chceme vyzkoušet a reálně použít. Už teď se těším a určitě budu u toho.