FOSDEM 2021, Golang room
Nejsem vymetač konferencí. V dobách před pandemií to nebylo úplně jednoduché se dostat na zahraniční konferenci — stálo to dost peněz (od registrace, přes cestu a ubytování) a ne každá firma to chtěla zaplatit. Dnes, kdy se všechny konference přesunuly do virtuálního prostoru je situace v mnohém jednodušší.
Ale nějak to není ono. Nemůžu si dát kafe a catering, nemůžu si pokecat s lidma (většinou to nedělám, ale když je řečník excelentní, tak mu to řeknu), nemůžu poznávat nová místa. Těším se, až budou konference jako dřív (a ony budou).
Když jsem ale na Twitteru zachytil, že součástí FOSDEM 2021 je i Go Room a že je to zadarmo, tak jsem se zúčastnil. Mimochodem, FOSDEM znamená Free and Open source Software Developers' European Meeting.
Deploy a Go HTTP server in your browser
Nicolas Lepage měl takový nápad — nechat běžet Golang webovou aplikaci v browseru. Asi to nemá nějaké valné využití, kromě znovupoužití už hotového kódu (aplikace).
Fór je v tom, zkompilovat Golang kód jako WebAssembly a výslednou binárku provolávat pomocí Servicer Worker. Jediným problémem/omezením je, že ve WebAssembly se nedá nastartovat Golang http.Server. Ale zato se tam dá spustit http.Handler. Aby to fungovalo, tak je potřeba v Golangu přeložit JavaScript request na Golang http.Request a pak už to sviští.
Zajímavá blbůstka. Takže hadlery se dají bez problému reusovat. Jenom je otázka, jak moc je komplexní business logika v hadleru — ty by měly být spíše bezstavové.
Go Without Wires: Programming Bluetooth Using Go and TinyGo
Ron Evans měl přednášku o tom, jak používat Go Bluetooth pro připojování k různým zařízením a jak vlastně fungují Bluetooth Low Energy zařízení.
Bylo to docela zajímavé, ale bohužel stream měl tak špatné rozlišení a zpoždění videa, že z přednášky skoro nic nebylo. Nakonec se Ron připojil ke dronu a zobrazoval live kameru. Pěkné a efektní, ale škoda toho pokaženého streamu.
Drones, Virtual Reality and Multiplayer NES Games: The fun you can have with Pion WebRTC!
Sean DuBois sice taky trochu mluvil o dronech, ale jen okrajově — jeho tématem bylo WebRTC a speciálně jeho Go implementace Pion. WebRTC je technologie pro real-time communication (RTC), která může přenášet audio, video a binární data a to vše pěkně v browseru.
Je to peer-to-peer komunikace mezi dvěma klienty, z nichž ani jeden nemá veřejnou IP adresu. To se děje pomocí NAT Traversal.
Po vysvětlení jak funguje WebRTC následovalo demo, jak v Golangu (v Pionu) naimplementovat vytvoření spojení, poslání dat (binární a video) a jak data přijmout. Kód vypdal velmi čistě a idiomaticky.
Calling Python from Go In Memory: Using 0 Serialization and ε Memory
Miki Tebeka měl celkem klasickou přednášku — jak z “nějakého” jazyka volat data science knihovny v Pythonu. V tomto případě byl tím “nějakým” jazykem Golang. Už jsem pár takových přednášek viděl, takže to nebylo nic moc objevnýho.
Co bylo ale zajímavý, tak informace, že Golang float64
a NumPy
float64
mají v paměti stejnou reprezentaci. A taky že NumPy array
je
v paměti spojitý, stejně jako Golang slices.
Miki tedy ukazoval celý postup, jak z Golangu volat NumPy funkce. Podmínkou byl CPython a v podstatě šlo o kopírovní (spíš přesouvání) polí z paměti spravované Pythonem do paměti spravované Golangem. To vše bez jakékoliv serializace. Hodně zajímavé řešení! 👍
Writing a Go Client for Photoprism
Tady bohužel vypadla přednáška o použití Go v krypto-analýze, na kterou jsem se nejvíc těšil. Uznání patří organizátorům, kteří sedli na Twitter a během hodiny našli náhradu. Kloubouk dolů!
Náhradou byla Kris Nova, která live odpřednášela jak psala Go klienta pro PhotoPrism, včetně integračních testů. Téma nebylo nějak extrémně zajímavé, ale je jasné, že Kris je hackerka každým coulem.
Asi nejzajímavější bylo, že u integračních testů nesnáší mockupy — chce co nejvíc živých aplikací, aby bylo v testu vidět, jak se systém chová. To si musím zapamatovat!
Building cross-platform Go GUIs fast using Fyne: Platform agnostic is the future of app development, and Go is the language of choice
Andrew Williams měl sice nudnou, ale zajímavou 🤔 přednášku o Fyne — cross-platform GUI toolkit pro psaní nativních aplikací v Golangu. Kdybych někdy potřeboval napsat (desktop) GUI v Golangu, tak po Fyne určitě sáhnu.
Proč byla přednáška nudná? Protože přehlídka widgetů moc sexy není. Takže spíš potencionální využití do budoucna (i když v cloudu to asi moc nevyužiju).
Go at Tailscale: From writing Go to using Go
Na Brada Fitzpatricka jsem se těšil — to je přece ten chlápek, co 10 let psal Go! Zejména std a http packages. Teď dělá ve start-upu Tailscale, kde vyvíjejí VPN nové generace.
Tahle VPNka běží na všech platformách a zajímavější než ona same je to, jak tuhle multiplatformnost řešili. Na všech platformách je to (téměř) čisté Go, všechno OpenSource, občas (Windows, Mac) něco trochu proprietárního (třeba Windows system tray) a třeba na Macu volání Golangu ze Swiftu. Na Adroidu třeba zas něco málo JNI. Na serveru pak (výhradně) čisté Go a databáze etcd (to je taky Go).
Zajímavá pak byla ještě diskuze o IP adresách v Go — jednak existuje typ
net.IP a pak ještě net.IPAddr.
Ani jeden typ chlapcům z Tailscale nevyhovoval (jsou mutable, nejsou
comparable a IP []byte
se nedá použít jako klíč v mapě, plus ještě pár
další věcí) a tak si napsali vlastní typ netaddr.IP,
který zmíněnými neduhy netrpí.
Jo a pak taky Tailscale používá již výše zmiňovaný NAT Traversal.
The State of Go: What’s new since Go 1.15
Poslední přednáška byla od pořadatelky Maartje Eyskens
o novinkách v Go 1.15. Bylo to fajn, holčina věděla o čem mluví, ale musím
se přiznat, že si z toho moc nepamatuju. Jediné, co si vybavím, tak
že nejsou žádné změny v jazyce a že go build
a go test
už teď nemodifikují
go.mod
— místo toho je potřeba zavolat go mod tidy
.
Když se teď zpětně dívám, tak přednáška více méně kopírovala obsah Go 1.15 Release Notes, ale bylo tam i něco o nadcházejícím Go 1.16.
Suma sumárum
Bylo fajn si poslechnout po čase něco nového o Golangu. Až mě překvapilo, že ačkoliv měly všechny přednášky pouhých 30 minut, tak se do nich vměstnalo překvapivé množství informací. Pěkně to odsejpalo a nebyl čas se nudit.
Poklona patří pořadatelům, protože paralelních streamů bylo požehnaně, ale všechno klapalo jako dobře promazaný stroj. Well done!