jOpenSpace

jOpenSpace - ročník 2022

Přednášky a záznamy

Fotogalerie

Kompletní fotogalerie z akce

Zápisky z konference

    Jan Horalík

    Shorův algoritmus - kvantová magie v praxi

    • soucasne RSA sifry spolehaji na rozklad velkeho cisla na rozklad nasobku prvocisel
    • vypocetne narocna operace a na tom stoji soucasna kryptografie
    • kvantove pocitace mohou tuto rovnovahu narusit
    • superpozice - qbit je vlastne pozice na povrchu koule
    • stav lze precist pouze jednou
    • Interference - eliminace nežádoucích stavů (které nevedou ke chtěnému výsledku)
    • prectenim druhe casti cisla, ktere reprezentuje modulo (zbytek po deleni) jsme schopni odstranit prave ty nezadouci stavy pro konkretni hodnoty modula o kterych vime, ze nejsou spravne
    • fourierovou transformaci jsme schopni dopocitat cislo, ktere nam umozni s ⅜ pravdepodobnosti rozlozit vstupni velke cislo a iterativne pokracovat s rozkladem dal
    • pro prolomení základní RSA šifry je potřeba 1024 qbitů, aktuální kvantové počítače maji nižší stovky qbitů

    https://twitter.com/jan_horalik

    Jan Vondrouš

    CDC

    • https://pact.io/ nejznamnejsi framework pro CDC
    • Scénář - consumer, provider, komunikace
    • E2E testování, je drahé, pomalé neškáluje
    • oddělené testování s použitím mocku - rychlejší, stabilnější, lépe se udržuje a škáluje, ale netestuje reálný case celého systému
    • CDC - při testování consumera vznikne kontraktu, který poté ověřuje test provideru
    • Pact Broker - aplikace, kterou je mozne spustit v dockeru a ktera si stahne kontrakt a umi jej nasimulovat
    • příklad - https://github.com/bugs84/pact-01-hello-world-pact-broker

    Lubomír Petera

    Šachy

    • v 17 letech Fide ELO rating 2000+, velke zkusenosti se sachy
    • Arpad Elo v roce 1959 prisel s prvnim ratingem pro hodnoceni vykonnosti ve hre sachy
    • mladsim hracum se rating meni dynamicteji nez starsim hracum
    • do ratingu se pricita/odecita podil rozdilu ELO ratingu obou hracu - tj. s cim narocnejsim souperem clovek vyhraje, tim vice bodu si pripise a vice versa
    • soucasni mistri maji az 2800 bodu
    • sachovy engine sunfish v Pythonu o 111 radcich kodu ma rating nad 2000 bodu
    • existuje Universal Chess Interface, ktery popisuje komunikaci mezi sachovym enginem a klientem, pouziva k tom STDIN / STDOUT pro komunikaci
    • 1769 prvni “pocitac” - mechanicky Turek (coz byl podvod)
    • prvni skutecny byl v roce 1912 prvni mechanicky stroj, ktery umel zahrat konkretni koncovku
    • 1951 Alan Turing napsal na papire algoritmus, ktery by umel hrat sachy
    • 1966 prvni pocitacova partie po telegrafu - hrali po dobu 9 mesicu
    • 1981 poprve porazi pocitac cloveka
    • 1997 vyhrava Deep Blue nad Garry Kasparovem - mistrem sveta
    • 2005 Rybka engine se stava nejlepsim enginem na sachy
    • 2009 Pocket Fritz - engine na mobilni telefon, ktery ma rating 2900 - tj. vetsi nez mistr svete
    • 2020 stockfish - soucasny nejlepsi engine, cca 20k radku kodu
    • Proč není možné “propočítat“ celou hru? - pro první tah bílého je 20 možností, pro tah černého už je to 400….  brzy dojdeme k číslům na které nestačí současný výpočetní výkon.
    • pouziva se databaze her - cca milon zapasu se vejde na CD
    • Zahájení program obvykle vybírá z databáze, stejně tak koncovky s posledními kameny jsou propočítané
    • 3,4,5 kamenove pozice (tj. zbyva tento pocet kamenu ve hre) ma 1GB
    • 7 kamenove koncovky uz maji 18TB a uz zacinaji byt neprakticke

    https://www.linkedin.com/in/lubomirus/

    Zdeněk Henek

    Geografické informační systémy

    • když se zeptáte zákazníka, řekne že chce vidět všechno, což obvykle nefunguje
    • volba zobrazení dle důležitosti, zoomu, agregace dle regionu, heatMapy…
    • další zjednodušování pro rychlejší render a menší přenos
    • validace
    • je důležité jak je polygon zadaný (clockwise vs counterclockwise) - kanonizace
    • www.mapshaper.org program pro zjednoduseni geometrickych dat

    https://www.vrablik.org

    Víťa Plšek

    Jak testujete webové aplikace?

    • testy nad mocky casto nedavaji vubec smysl
    • diky pouziti frameworku neni casto co unitove testovat
    • vlastne pisu hlavne e2e testy, take hodne pisu testy na datove vrstve, ktere overuji slozite dotazy do databaze
    • zacinam tim, ze napisu testy podle akceptacnich kriterii a leckdy jen proti mockove implementaci, kterou postupne nahrazuji uplnou implementaci
    • e2e testy jsou dobre, ale je nutne jejich psani nejak zjednodusit

    https://vitaplsek.cz

    Petr Filip

    JSONata

    • https://jsonata.org
    • uzasny deklarativní jazyk na zpracovani JSON i pro neprogramatory
    • umožňuje agregace, funkce, jednoduche skriptovani
    • vhodné pro transformace, reporty, monitoring
    • nativni implementace je v JavaScriptu, existuje Java port ale neni uplne dokonaly - nektere funkce se tam musi drobne zjednodusovat

    https://github.com/petrfilip

    Vladka Janu

    IPFS

    • interplanetarni file system
    • v roce 2017 v Turecku zablokovali Wikipedii
    • centralizovany pristup k datum je spatny protoze jej mohou diktatori ovlivnovat
    • IPFS umoznuje decentralizovane zpristupnovat informace a obchazet blokace
    • peer to peer system, na ktery neni jednoduche aplikovat globalni pravidla pro blokace
    • nevyhoda je, ze data o ktera nema nikdo zajem casem zmizi, proto je nutne resit tzv. pinovani - napr. pres server pinata
    • nema to privatni soubory - vsechno je proste verejne, lze obchazet sifrovanim, ale to uz neni nijak podporovano ze strany IPFS
    • neni jeste takova podpora v prohlizecich ale zlepsuje se
    • system umi vyhledat konkretni soubory dle jejich kodu
    • IPFS umi obchazet problemy na siti (NAT a podobne), takze se k datum da dostat skutecne odkudkoliv
    • data jsou immutable a na soubory se odkazujeme pomoci hashe, ktery reprezentuje obsah tohoto souboru
    • pro ukladani struktury se pouziva merkle tree - hashovy strom
    • merkle tree pouziva i Git
    • umi rozdelit i jeden soubor na vice nezavislych bloku, se kterymi pracuje nezavisle
    • ma podporu i pro adresarove struktury, lze tedy mountovat do FS
    • OrbitDB je databaze postavena nad IPFS, pro ukladani souboru lze pouzit i FileCoin

    https://twitter.com/vladkax

    Petr Ferschmann

    Ajťáci pomáhají na bojišti

    • na zacatku byly levne tablety s offine mapami
    • vznikal dost zivelne a agilne
    • puvodni system se jmenoval Kropyva, nove GIS Arta
    • vojak v tabletu vidi zname pozice nepritele, muze si objednat delostreleckou palbu
    • Rusko znicilo satelitni system viasat, ukrajinci presli na Starlink a tim tento problem obesli
    • ziskavaji data pres drony, radarove systemy, fyzicke vojaky v poli, vyzvedne satelity atp.
    • realne jsou schopni do 1 minuty strilet na misto dle objednavky z bojiste
    • obchazeji detekci bateriove strelby tim, ze strili z ruznych pozic ale synchronizuji strelbu
    • Nato vraci strelbu asi za 20 minut (overuje zda to neni od svych jednotek/ civiliste )
    • Rusko vraci strelbu az cca za hodinu
    • prevzali rizeni NATO, kde jsou jednotky velmi autonomni a veleni urcuje jenom high-level strategii

    https://twitter.com/fersman

    David Ondřich

    Skutečnost neexistuje

    • clovek ma nekvalitni senzoriku, clovek ma asi 10, v prirode u zvirat existuje asi 26 celkem
    • na vstupu ma clovek velmi mnoho sumu, ktery filtruje mozek (podobne jako AI)
    • umele inteligenci by se mela rikat umela intuice
    • cloveku nejde pravdepodobnostni matematika
    • kazdy jedinec zije ve vlastnim modelu pochopeni a vnimani sveta, ktery se navic meni v case
    • casto zijeme pribehy (a podlehame predsudkum)
    • vnímání = bias+ šum + iluze
    • flashable memories = 75% respondentů zapomnělo při vyplňování dotazníku po delší době, že vyplňovali dotazník týden po tragédii (havárie Challengeru)
    • problem pribehu je v tom, ze z nich vyvozujeme kauzalitu, ale ono se obvykle jedna jen o korelaci (nahoda)
    • kazdy dostatecne komplexni system je neustale alespon castecne rozbity (neznamy inzenyr NASA), dalsi zminky The Myth of the Root Cause, Mathias Lafedt a dalsi (viz. prezentace)

    https://dond.cz

    Tomáš Záluský

    Od SQL k Cypheru

    • Cypher je dotazovaci a DDL jazyk
    • snazi se opticky napodobovat uzly a hrany (analogie k ASCII art)
    • dotazem prochazeji tuples (n-tice), ktere predstavuji uzly, relace atp, ktere musi splnovat “match patterny”
    • je velmi analogicka k Java streamum

    https://twitter.com/tomaszalusky

    Honza Novotný

    EvitaDB

    Tvorba vlastní doménově specifické databáze, s cílem vyššího výkonu oproti existujícím řešením. Domain specific databáze se vyskytují čím dál častěji, zřejmě je to směr co dává smysl.

    Výkonnostní testy řešení (EvitaDB - nejlepší škálování) vs PostgreSQL (nejhorší škálování) vs ElasticSearch (o trochu lepší než samotné PostgreSQL, ale o řád horší než EvitaDb) ana datech Senesi Datasetu

    • 120000 entit

    PostgreSQL implementace

    • pro rychlost vyhledávání obětovat normální formu, a vyhledávánou entitu uložit jako blob do jediného binárního sloupce
    • pro 4x zrychlení prvotního naplnění db použít inversion of data loader pattern - inserty pouze v paměti, pak hromadně batch update
    • Využití CTE (Common table expression) nástroje

    Elastic search implementace

    • Nepodařilo se dořešit uložení dokumentu jako jednu entitu, bylo nutné ho uložit do více entit. To pak přinášelo dost problémů.
    • Neexistenci DB sekvence vyřešilo využití čísla revize speciálního dokumentu, které se opakovaně updatoval a tím se zvyšovala jeho revize, která se pak používala jako primární klíč/id jiných entit.
    • nebylo možné implementovat “not have a facet” query
    • nebylo možné spočítat kombinované AND/OR dotazy na cenu a kategorii
    • Problémy s pamětí - když elastiku dojde paměť, tak proces umře.

    EvitaDb

    • Fyzicky data ukládá pomocí Kryo knihovny, což je key value store, databáze jako taková běží v paměti.
    • Využívá Roaring Bitmaps pro bitové operace.

    http://evitadb.io

    https://blog.novoj.net

    Ondřej Šika

    Náhrada shell scriptů pomocí CLI toolu v Go

    • git repo s bash skripty - moc nefunguje
    • různé druhy bash/zhs/…
    • nic moc jazyk pro složitější věci
    • neexistují SDK
    • ne všude je git
    • Python - jsou ruzne verze, nektere problemy resi, jine prinese
    • GO nepotrebuje pro svuj beh nic / vystupem je jedna binarka, ktera ma vse, co potrebuje
    • vystupem jsou binarky pro vsechny typy architektur a OS
    • GO ma spustu SDK nativne
    • skvele jsou vsechny nastroje okolo (v ekosystemu)
    • Goreleaser: zbuildi pro ruzne platformy, zabali do dockeru, nebo udela package pro dany system, uploaduje na github / gitlab
    Tooling

    cobra a viper knihovny

    SikaLabsUtils (Slu) - https://github.com/sikalabs/slu

    https://sika.io

    David Matějček

    Jakarta EE vs. Technický dluh

    • Java EE - vznikalo ve velkem tempu s mnohem horsim HW a toolingem
    • Oracle se pokusil o zmeny, ale skoncil tak v puli cesty
    • pak to vzal a to monstrum predal nadaci Eclipse
    • Payara vypadala dynamicky, ale implementovala plno veci, co zakaznici pozadovali ale casto to skoncilo v nedotazenem stavu
    • Glassfish jako prvni prochazi TCK JakartaEE 10
    • rocni vydavani verzi - prechod na JDK17

    https://omnifish.ee/

    Michal Augustýn

    gRPC prakticky

    • doménové objekty jsou ve stejné složce jako .proto soubory, takže se navzájem můžou referencovat. Pak se z nich generují knihovny pro různé jazyky - Java, javascript, s možností zavolat konkrétní microservice pomocí této knihovny
    • monorepo pattern - jeden repositář pro celou firmu
    • existuje také “monolit first pattern”
    • gRPC cca 5x rychlejší než GraphQL (Novojův “echo service” test)
    • Google protocol buffers (binární=datově úspornější alternativa k textovému JSON) + Http v2.0
    • gRPC (vs REST) výhoda - existuje popis toho, co za data teče v komunikaci, je vhodný pro interní komunikaci mezi microservices v rámci jednoho projektu
    • graphQL výhoda - developer přívětivější, query language na tahání dat, jiný usecase než gRPC
    • Buf https://buf.build/ nastroj pomaha pri sprave a vyvoji grpc api

    https://twitter.com/AugiCZ

    Michal Těhník

    Staff Engineering

    Metodiky

    • Trident model
    • management (řídí lidi)
    • Individual Contributor (IC - vývojáři)
    • Technical (garanti, zastřešují technicky + svým know-how řešení)
    • Robin Pokorný model
    • Expert track, Tech lead track, Engineering Track, management track

    IC leadership - řeší/motivuje řešení technického dluhu, přechod na nové, efektivnější technologie, nahrazování monolitu větší modularitou a další long-term investment vývojové aktivity

    staffeng.com

    Remark from audience: Peter’s principle - by promoting developers to higher, often management positions, can lead to situation when people change from someone bringing big benefit to company as SW engineer to doing management job for which is not competent/efficient.

    https://twitter.com/MicTech

    Vojta Růžička

    Uzitecne nastroje nejen pro blogovani

    • Netlify-analytics: server side analytika (funguje bez JS, bez cookies)
      https://www.vojtechruzicka.com/netlify-analytics
    • Staticman: reseni komentaru na blogu (umoznuje embedovat komentare do statickeho html), komentare jsou pak soucasti verzovanych zdrojaku v Gitu
      https://www.vojtechruzicka.com/staticman
    • Grammarly umoznuje kontrolu pravopisu a gramatiky v textu
    • WarbleAlerts: monitoring socialnich siti na klicova slova (pro Twitter)
    • ContentKing: SEO monitoring a auditing, sleduje i performance, propady ve vyhledavatelnosti, tipy na vylepseni
    • Monitorbacklinks: prehled zpetnych odkazu, zcizeni obsahu, inflow uzivatelu z daneho zdroje

    https://www.vojtechruzicka.com

    Jiří Kadlec

    Java Virtual Threads

    • preview featura JDK19
    • starsi java ma Thread rizeny OS, 1MB pameti per thread mimo heap, ridi system, vyzaduje context switche
    • stejny interface jako Thread
    • nove jeden carrier thread rizeny OS realne provadi mnoho virtual threadu
    • na pozadi fork/join pool
    • stare reseni pri threadpoolu 500 a tasku ktery waituje po dobu 1s, execute trvalo 20s a vyzadalo 200MB
    • nove reseni bezi 1s a vyzaduji 80MB
    • nepouzivat Thread pools
    • nepouzivat ThreadLocals (nasobi se velkym mnozstvim virtual threads)
    • nepouzivat sychronized klauzule ale ReentrantLocky
    • vhodne pouzivat Semafory pro omezovani pristupu k I/O resourcum, abychom je nezahltili requesty

    https://www.linkedin.com/in/ji%C5%99%C3%AD-kadlec-10237753/

    Kamil Ševeček

    Java a nativní knihovny

    Na začátku javy byla idea pokrýt všechny služby OS v JavaAPI, od toho se spíš ustoupilo, JavaAPI dnes pokrývá sotva ¼ OS API. Proto se občas můžeme setkat s potřebou volat nativní kód/knihovnu z Javy

    Jak volat nativní (Cčkový) kód, co existuje  v OS?

    1. JNI call - deklarace native metody + napsání a zkompilování Cčkové “wrapper” knihovny, pracující s nativním Cčkovou knihovnou
      :( Javista musí psát Cčkový Wrapper
      :) největší kontrola nad efektivitou a pamětí
    2. JNA - Java Native Access
    1. com.sun.jna.Structure => mapuje se na Cčkové typedef struct
      :) je vidět v Javě
      :( obsah se kopíruje z a do JVM paměti při volání metody
    2. com.sun.jna.PointerType - silně typovaný objekt, mapuje se na externí Cčkový objekt v paměti přes pointer
      :) efektivní
      :( v JVM jako blob
    1. JEP: Foreign function & Memory API - new in Java 19 (v preview, nutné aktivovat)
    1. Výhody JNI, JNA
    2. Výhody ByteBuffer
    3. jextract - autogenerátor C headers => Java

    java.nio.ByteBuffer - alokace paměti OS mimo JVM (obdoba Cčkového malloc)

    allocateDirect(int capacity)

    public byte get(int index)

    public ByteBufffer put(int index, byte data)

    Jak psát plošinovku?

    • Java + SDL (C)
    • Java + Java 2D (Swing lze dost optimalizovat)

    https://www.linkedin.com/in/kamil-sevecek/

    Aleš Rybák

    Se Stringem to není jednoduché

    • String.length pro emotikony neocekavane vratil dvojnasobnou delku
    • UTF-8 a UTF-16 ma variable length
    • UTF-32 ma fixed length na 4B
    • String length vraci pocet charů (ale ne unicode code units) - pokud se znaky vlezou do prvni casti znaku (unicode basic plain) tak se znak pocita za jeden, pokud v druhe (cast emotikonu) - tak uz se vraci dva
    • Emotikony lze dokonce kombinovat pomoci znaku “zwidge”, ktery je pak muze nejak interpretovat - ovsem stale to jsou dva ruzne emotikony a znak zwidge, takze jeden smailik muze mit length 6 nebo i 12 apod, takze pozor :)

    https://github.com/AlesRybak/

    Václav Pech

    Trendy v JetBrains IDE

    • soucasne UI je velmi podobne UI z verze 1.1 (ktere melo tedy mnohem mene funkci)
    • new UI - positive user feedback (very happy 53%, somewhat happy 34% unhappy 7%)
    • integrovany remote development
    • vedle se vyviji uplne novy editor Fleet napsany from scratch
    • je velice rychly - v zakladnim rezimu funguje jen jako obycejny editor a muze se prepnout do rezimu jazykove podpory, kde teprve potrebuje indexy
    • indexovani je napsane v Rustu

    https://twitter.com/vaclav_pech

    Pavel Jetenský

    Produktivita v IntelliJ Idea

    • poměr čtení:psaní kódu je 10:1
    • Ctrl+Shift+Backspace skoč na poslední místo editace
    • F2/Shift + F2 - skoč na chybu
    • CamelCase a ‘*’ při otevírání tříd (Control + N) nebo souborů (Control + Shift +N)
    • Drop frame
    • Live templates
    • Surround with…
    • Pomocí Intentions (Alt + Enter) lze nagenerovat neexistující volané metody

    https://www.linkedin.com/in/paveljetensky/

    Ivo Musil

    Starý Ops Dev Sec hraje Kubernetes

    • zkusenosti s problemy, ktere vznikaji aplikaci pristupu 20. stoleti na technologie 21. stoleti
    • kombinace security, ops a dev ve stejnem tymu pri implementaci aplikace provozovane v Kubernetes

    https://www.linkedin.com/in/ivosh/

    Milan Lempera

    Data oriented programming

    • oddelit data a kod
    • immutabilni datove struktury (pouziti persistentnich datovych struktur)
    • popis dat pomoci JSON schematu, ze schematu je mozne generovat TypeScript

    https://blog.lempera.cz

    Martin Tošovský

    JVM Jazyky známé i neznámé

    • porty jinych jazyku - JRuby, Jython
    • vylepseni Javy - Kotlin, Groovy, Scala, Xtend, Gosu
    • unikatni jazyky: X10 (parallel computing), Cypher
    • Funtom: mixiny, immutability, nullable typy, clojures, concurrency (actor based), literaly
    • Gosu: pascal like deklarace, properties, smart casty, null-safe operatory, extenze zakladnich typu
    • Ceylon: immutable, null safety, generics (reified, unions), named arguments, mudule system
    • XTend: pouze dialekt Javy, featury podobne ostatnim jazykum, dispatch metody
    • Ballerina: vsechno co v predchozich, podpora pro vstup dat z ruznych datovych formatu (JSON, XML …), dokaze generovat sekvencni diagram
    • OSTRAJava

    https://www.linkedin.com/in/martin-tosovsky/