Technologie
Naši IT borci sepsali bodový popis technologií, nástrojů a buzzwordů, které používají. Rozumět jim budou hlavně… zase další IT borci. Takže pokud nevíte, o čem je tu řeč, nevadí – nerozumí tomu ani všichni Forresti.
Aplikační server
Nezbytný pro provoz java web aplikací. Na našich serverech používáme Apache Tomcat, umíme řešit deployment, ale třeba i clusterované řešení. Máme zkušenosti s aplikacemi provozovanými na WebSphere nebo WebLogic. Nebojíme se ani jiného servlet kontejneru.
Bezpečnost
Automatizované penetrační testy (pomocí online nástroje Detectify) jsou nedílnou součástí našeho testovacího checklistu. U důležitějších řešení přizveme k ručnímu penetračnímu testu kapacity z oboru (DCIT, Kümmel, Hacktrophy). Při zjištěné chybě opravu distribuujeme napříč všemi našimi řešeními. Mimochodem, nikdo na světě nevyrobí nic bezchybného… Vzdálený přístup k serverům – pomocí OpenSSH jen omezené skupině uživatelů (pouze pomocí jejich SSH klíčů) a jen z vyjmenovaných IP adres.
Bootstrap
Spousta z nás Bootstrapu zpočátku nevěřila, ale přišli jsme jeho možnostem brzo na chuť. Bez něj už ani ránu!
CDN, WAF
Navrhujeme co nejrychlejší řešení s vysokou dostupností, proto u vybraných řešení používáme CDN (Vshosting) i v kombinaci s WAF (Incapsula).
Chef
Automatizace infrastruktury pomocí kuchařek a vlastních skriptů. Nový server upečeme v produkční podobě v řádu minut. Konfigurace stovek serverů tak díky Chefu držíme v lati.
Cloudhosting
Umíme různá řešení, ale cloudhosting je z mnoha důvodů tou nejvýhodnější cestou (na platformě Unix/Linux).
Continuos integration
Každou změnu, kterou na projektu provedeme, chceme co nejdříve otestovat. Používáme k tomu nástroje jako Jenkins, Teamcity či GitLab (ano i zde se vedou svaté války).
CSS3
Kaskádové styly používáme již druhou dekádu a celých těch dvacet let nás trápí starší prohlížeče, které je třeba podporovat. Psaní CSS si ulehčujeme pomocí LESSu a s příchodem Bootstrap 4 SASSu.
Eclipse
Jeden z táborů se kloní k vývoji v Eclipse, respektive STS. Svoboda je pro nás důležitá, takže výběr IDE je volbou každého z nás, i když zrovna tuto volbu tábor vývojářů na IntelliJ Idea vůbec nechápe.
Elasticsearch
Rádi zkoušíme nové věci, z Elasticu jsme ale stále nadšení. I nejsložitější dotazy zvládá rychleji než tradiční řešení, k tomu přidejme jeho škálovatelnost a více už netřeba vysvětlovat.
Funkcionální programování
Je staronovým fenoménem. Ačkoliv většina z nás prošla na škole semestry Lispu, aktuálně jej u nás používáme nesystematicky jen na úrovni Java closures, streamů, někteří z nás koketují s Rx. Rozhodně je to ale oblast, kde bychom se rádi víc posunuli.
G Suite (přejmenované Google Apps)
S nadšením jsme před lety přešli z interních Microsoft Exchange a jednoduchého file serveru na G Suite. Teď si firemní život bez Gmailu, sdílených dat na Drivu, Google dokumentů, kalendářů a souvisejících aplikací z Google balíku již nedovedeme představit.
GIT
Dlouho jsme používali CVS, ale to už je minulost. GIT používá většina z nás denně. Máme zavedený model branchování, abychom dokázali na projektu pracovat ve více lidech a na více úkolech zároveň.
GitLab
Takový náš malý GitHub. Kromě zpřehlednění oprávnění a vizualizace změn využíváme možnosti pro psaní dokumentace (markdown je super), merge requesty a je to místo pro řešení code review.
Groovy
Již delší dobu se u nás používá pro rychlé customizace na jednodušších projektech nebo integrační části mezi několika moduly. V poslední době ale dáváme přednost Javě 8.
Grunt
Automatizace pro vývojáře. Využíváme primárně pro automatizaci deploymentu a zjednodušení lokálního vývoje, obdobně jako Yeoman pro založení projektu.
Gulp/Webpack
Pro nás nerozlučná dvojka pro vývoj a ladění frontendu. Základní nastavení může může snadno rozvíjet každý webař.
Haproxy
Nezbytný u všech našich provozovaných řešení. Slouží jako vstupní prvek umožňující všelijakou konfiguraci, typicky jako HTTPS terminátor a balancer.
HTML5
Základní technologie, kolem které se staví všechny webové projekty. Postupně jsme si prošli cestou od HTML3, HTML4 (taky tzv. DHTML), přes XHTML, až po dnešní HTML5 standard.
IDE
IDE = Integrated Development Editor – nástroj, který vývojáři přináší vše, co ke své práci potřebuje (nebo alespoň většinu z toho). V IDE trávíme většinu času a proto bývá předmětem svatých válek (stejně jako používání tabulátorů a mezer pro odsazování).
IntelliJ Idea
IDE používané našimi vývojáři v největší míře. Umožňuje nám být blízko našemu kódu a milujeme jeho uživatelskou přívětivost a inteligenci.
Intranet
Provozujeme vlastní informační intranetový portál nazvaný Jáchym. Jde o studnici všech možných firemních informací a sdělení. Chystáme jeho novějšího bratra Huga.
Java
Naše řešení programujeme v jazyce JAVA. Využíváme možnosti, které přináší Java 8, na úrovni produktů zatím stále podporujeme JDK 7, aby naše řešení mohla běžet i v prostředí klienta, kde bývá upgrade verze Javy složitější. Pilně se připravujeme na Javu 11.
Javascript
Stále nedílná součást všech projektů. Z rozvoje, který probíhá, máme velkou radost, i když nás životnost některých JS frameworků stojí občas dost úsilí. Máme radost také z příchodu ES6 a rádi jeho novinky používáme.
jQuery
U jednoduchých webů stále ta nejrychlejší cesta pro oživení webových stránek.
JVM
Záludnosti JVM máme dobře zvládnuté, včetně možností monitoringu, zabezpečení a dostupnosti. Javu na serveru provozujeme už od v1.2.
Logování
Pro provozní uložení a dohledání informací z logů využíváme interně provozovaný balík open-source software Filebeat, Elasticsearch a pro vizualizaci dat nám slouží Kibana. Ale kdo chce (a má k nim přístup), může si prohlížet logy na disku.
Maven
Pro buildování využíváme Maven. Pokukujeme po Gradle, ale nakonec je Maven prostě nejrychlejší cesta s maximální podporou napříč všemi vývojovými nástroji.
Modulární architektura
Je základem naší platformy a je postavená na kompozici Spring aplikačních kontextů v rámci jediného classloaderu, což se možná změní s příchodem JigSaw. Modularitu jsme dotáhli poměrně daleko – pokrývá nám vše od datové vrstvy po UI. Klíčovými atributy jsou izolace, rozšiřitelnost a kombinovatelnost.
Mongo DB
Máme zatím jen pár instalací, kde nám plní úlohu efektivního clusterovacího řešení. Líbí se nám jeho jednoduchost, schemaless přístup, agregační framework. Naše očekávání plní na jedničku, i když pár vrásek nám už taky způsobil.
Monitoring
Provozovaná řešení je nutné monitorovat. Používáme interně provozovaný open-source software Icinga a Zabbix. Pro vnější monitoring našich webových řešení jsme před lety zvolili Pingdom.
MyBatis
Zjednodušuje nám práci s perzistencí objektů do databáze. Máme ho mnohem radši než Hibernate, na projektech pak často využíváme vlastní řešení (Adam). Nepohrdáme ale ani přímou prací s databází pomocí Spring JdbcTemplate.
MySQL
Rychlá databáze, široký výběr nástrojů pro vývojáře i provoz. Umíme ji rozumně škálovat, zálohovat, víme, kde jsou její slabiny a kde je naopak lepší než Oracle.
Node.js
Javascript na serveru už není žádná specialita, bezproblémově zapadá do našich řešení. A diskuze jestli je lepší NPM nebo Maven nás baví pořád.
NoSQL
Dnes už běžná součást složitějších řešení. Většinou ale kombinujeme s klasickou relační databází, která slouží jako primární úložiště projektových dat a NoSQL pak nabízí pohledy pro snadnou prezentaci těchto dat dále.
Objektově orientované programování
Je základ naší práce a ačkoliv je mu v dnešní době vytýkána řada nedostatků, myslíme si, že je to zatím to nejlepší, co tu pro produktivní vývoj aplikací máme. Abstrakce, delegace a kompozice, GOF patterny a mnoho dalšího je naším denním chlebem.
Oracle
U velkých klientů je první volbou pro relační databázi. Umíme s ní, ale úmyslně nevyužíváme možnosti, které nejsou přenosné na jiné platformy.
Percona
O fous rychlejší implementace MySQL, kterou již léta nasazujeme spíše než její předobraz MySQL. Na úrovni API a funkcionality je shodná s MySQL, ale funguje nám rychleji a dává víc možností (zálohování, cluster).
React
O téhle javascriptí knihovně pro renderování UI se už jen hodně nemluví, ale hojně se používá. U nás na Reactu stavíme aplikace, které mají vymazlené a interaktivní rozhraní. Ekosystém okolo je docela rozsáhlý. Pro datovou vrstvu využíváme GraphQL platformu Apollo. V případě potřeby server side renderingu používáme React v kombinaci s Next.js.
Responsive webdesign
Zaručujeme, že weby a webové aplikace od nás budou optimalizované pro různá zařízení – od telefonů přes tablety až k desktopům. K tomu nám dopomáhá Bootstrap nebo třeba dynamické obrázky, které zajišťují optimální datovou velikost pro právě používané zařízení.
Skupinová/týmová komunikace
Nově jsme v roce 2016 začali používat open-source nástroj Mattermost, jde o Slack alternativu. Zatím převládají pozitiva tohoto druhu komunikace.
Spring
Hodně využíváme Spring framework a to nejen k řešení dependency injection, ale i dalších částí jako Spring MVC, Spring Security, Spring Batch atd. Líbí se nám i podpora pro testování, webové služby, LDAP komunikaci, zkrátka skoro všechno. :-)
Test driven development
Děláme, abychom si ulehčili práci. Ne vždy je test to první, co napíšeme, ale nevzdáváme to. Velký kus práce Java vývojářů se vyvíjí pouze pomocí testů, aniž by bylo nutné spustit aplikační server.
Testování
Vývoj našich projektů a jejich testování jsou navzájem neoddělitelné. Řešíme to unit testy (JUnit), integračními testy (JUnit), end-to-end testy (Webdriver). Naši testeři provádějí finální prověrku (oproti checklistu), penetrační testování (Detectify) i performance testy (Gatling). Po nasazení nových verzí nám vždy proběhne automatizovaný smoke testing.
ViM
Údajně třetí nejoblíbenější IDE v naší společnosti (tak v první stovce bude určitě), všechny ostatní se již dlouhá léta bezvýsledně (opět údajně) snaží dohnat funkce, které tento magický nástroj má, což uživatelům ViMu umožňuje pohlížet na nás ostatní přezíravě (velmi reálně).
Webdriver
Využíváme pro psaní UI testů, které prověří funkčnost z pohledu uživatele (end-to-end testy, akceptační testy). Testy tohoto typu se vyplatí především v rámci produktového vývoje, kde každá případná chyba ovlivní více projektů. Automatizované testování používáme v kombinaci s Browser Stack Automate.
Webový server
Původně používaný Apache na naší infrastruktuře postupně nahradil efektivnější NGINX. Využíváme jej i jako reverzní proxy keš.
Dlouhodobě úspěšným se může stát i váš projekt!