Adam Kalisz: Krejzy věci v SSH
Ne ve všech sítích funguje SSH bez problémů, často nejsou v korporátu otevřené příslušné porty. SSH je proto možné tunelovat různými cestami včetně WebSocketu, pracuje se na implementaci přes QUIC, nebo je možné zneužít i protokoly jako DNS, WebRTC nebo ICMP. Ještě pořád se v některých firmách používá třeba FTP. Neviděl jsem nástroj, který by balil SSH do FTP, ale nemělo by být těžké to implementovat.
Při použití SSH na delších spojích, hraje výraznou roli zpoždění linky. Záleží na tom, kolik dat můžu mít v jednu chvíli na cestě bez potvrzení.
S rychlostí a latencí rychle rostou buffery, které jsou potřeba k plnému využití kapacity. Při desetigigabitové lince se zpožděním 100 milisekund už musím bufferovat 120 MB a rychle to narůstá.
Když pak máme příliš mnoho bufferů, začnou nám škodit a objeví se problémy typu bufferbloat. Řešením je chytřejší řízení přenosu, prioritizace potvrzování a rozumné velikostí vyrovnávací paměti.
SSH má svou sadu různých problémů, například donedávna mělo statické buffery o velikosti jen 64 KB. Ty byly navýšeny na 2 MB, ale také je to maximum a dál už nerostou.
To také určuje nejvyšší rychlost, kterou je možné na delších linkách dosáhnout. Dalším problémem může být pomalé navazování spojení, zejména pokud potřebujeme naráz obsluhovat větší množství strojů.
Jedním z možných řešení je použít SSH jen pro vzdálené přihlášení k termínálu a tam si spustit jiný nástroj pro rychlejší přenos dat. SSH je pro mě super bezpečná cesta k připojení, pro velká data ale můžu použít něco jiného.
Jako příklad takového nástroje byl uveden stunnel
, který sestavuje bezpečný šifrovaný tunel pomocí protokolu TLS.
Vyššího výkonu při přenosu šifrovaným kanálem je možné dosáhnout laděním algoritmů a šifer. Například šifry založené na AES jsou akcelerovány v hardware.
Bogomil Shopov: Thunderbird
Buď ovládáte software, nebo software ovládá vás. Různé nástroje dnes řídí to, co máme číst a jak máme myslet. Zatím nemáme bohužel žádný antivirus pro naši mysl, který by řešil škody napáchané uzavřeným softwarem.
Thunderbird je e-mailový klient, který podporuje práci s poštou, RSS, IRC, newsové skupiny a další protokoly.
Thunderbird původně vytvořila organizace Mozilla, která ho vyvíjela a financovala. V roce 2012 se ale rozhodla zaměřit na Firefox a přestat vyvíjet Thunderbird a FirefoxOS. V té době měl Thunderbird 20 milionů uživatelů, takže tahle změna zasáhla spoustu lidí.
Postupně se ale situace stabilizovala a dnes se vývojem zabývá 29 vývojářů na plný úvazek. Budoucnost je radostná, díky silné komunitě.
V současné době je Thunderbird používán denně na více než 9,2 milionech zařízení. Měříme počty zařízení, ne uživatele.
Je také zajímavé, že ze 152 tisíc zařízení je přistupováno na RSS kanály. Říká se, že RSS je mrtvé, ale podle mě to není pravda.
Tři čtvrtiny kódu Thunderbirdu jsou napsány v JavaScriptu, zbytek je v C++. Nedávno byla přidána také podpora jazyka Rust a brzy do něj bude kompletně přepsán jeden z klíčových modulů. Pokud umíte Rust, můžete určitě do projektu přispět.
Programování není jedinou možností, jak projektu přispět – je možné pomoci s překlady, dokumentací, marketingem, testováním či jinak.
Pomoci je možné také na fórech, kde uživatelé pokládají své dotazy. Je spousta lidí, kteří neví, jak se Thunderbird používá. Ptají se na fóru a můžete jim pomoci.
Je potřeba také pomoci s tříděním nových bugů, které je potřeba sledovat a ověřovat.
Vývojáři pracují na integraci služby Mozilla Account a synchronizaci účtů a nastavení napříč několika instalacemi. Pracuje se také na plnohodnotné podpoře pro Microsoft Exchange, která bude napsaná v jazyce Rust. Další užitečnou funkcí bude plná podpora tmavého režimu také pro čtení e-mailu a možnost přeložit offline texty zpráv pomocí technologie Firefox Translate.
Jan Švancar: demonstrátor přeaktuované platformy
Už v 80. letech vznikl automobil Honda Prelude, která natáčela také zadní kola. Stále to bylo napojeno na volant, protože pro řidiče je těžké ovládat více různých prvků.
Pro složitější řízení je potřeba se odklonit od mechanického řízení a přejít na drive-by-wire, kdy se řídicím prvkům posílají elektrické povely. To uměl například Pontiac Pursiut nebo Saab 9000 řízený joystickem.
S příchodem elektrických motorů začalo být jednodušší dát do vozů více pohonných jednotek. Například Audi e-tron má čtyři nezávislé motory, které umožňují například lepší řízení trakce.
Podobně Systém e-Corner dovoluje natočit kola nezávisle v různých úhlech, což je možné využít například k automatickému zaparkování do řady.
Na ČVUT vyvinuli vlastní platformu, na které je možné všechny varianty řízení nasimulovat a testovat jejich vlastnosti. Systém využívá distribuovanou komunikační platformu, která využívá několik různých jednotek. Pro zpracování obrazu a plánování se využívají nejvýkonnější počítače, řízení trakce pak zajišťují řídicí jednotky.
Na nejnižší úrovni jsou pak specializované jednotky řešící bezpečnost, běh motoru nebo ovládání řízení. Systémy jsou propojeny pomocí ethernetu nebo sběrnicí CAN. Výhodou této architektury je, že je modulární a je možné přidávat či ubírat jednotlivé části.
Zároveň je multiplatformní, takže je možné ji propojit s různými prvky vozu různých výrobců.
Nejvyšší vrstvu tvoří nejvýkonnější počítače, co jsou upravená herní PC schopná v reálném čase rozpoznávat obraz. Střední vrstvu pak tvoří jednodeskové počítače jako Raspberry Pi, které propojují další součástí vozu a dokáží překládat konfiguraci mezi sběrnicí CAN a ethernetem. Nejnižší stupeň tvoří mikrořadiče od firem STM nebo TI, které jsou používány jednoúčelově.
Řídicí architektura se zabývá zpracováním obrazu a plánováním a následně řízením vedení po trati a také řízením rychlosti. Naše auto je součástí mnoha výzkumných a studentských projektů zabývajících se senzory, plánováním, vedení po trati či trakční kontrolou.
Daniel Maslowski: Co je před Linuxem?
Bootloader je aplikace, které načítá a spouští jinou aplikaci. V Linuxu je nejznámější GRUB2, ale existují i další jako systemd-boot nebo U-Boot známý z embedded zařízení. Bootloader je mezi firmwarem vašeho počítače a operačním systémem.
Firmware se stará o inicializaci celé platformy, aktivaci hodin, naplnění správných registrů a aktivaci řadiče paměti DRAM.
Bootloader potřebuje být flexibilní, načte jádro operačního systému a zkontroluje jeho integritu. Dnes je možné zobrazit také pěkné barevné interaktivní menu pro uživatele.
Aby bylo možné obsluhovat hardware, potřebujeme ovladače, které nás abstrahují od nízkoúrovňových detailů. Ty můžou být poskytování v UEFI DXE nebo v Linuxu.
Pro interpretaci načítaných dat pak potřebujeme parsery, které přeloží původní syrová data do použitelné podoby.
Poté potřebujeme načíst konfiguraci, nahrát do paměti spouštěnou aplikaci a přidat k ní další potřebná data. Nakonec řekneme procesoru, aby skočil na určitou konkrétní adresu v paměti.
V celém tomto procesu je potřeba se zabývat bezpečností všech komponent. Firmware je známým prostorem pro nejrůznější útoky.
V několika posledních letech jsme viděli řadu zneužití zranitelností ve firmware jako Logofail nebo Pixiefail.
Bylo možné připravit zvláštní obrázek, který zneužil chybu a spustil útočníkův kód v prostředí firmware. Takto nainstalovaný malware přežije ve vašem počítači, i když nainstalujete úplně nový čistý operační systém, zůstane malware stále uvnitř.
Zneužití není snadné, ale není ani úplně nemožné.
Kolem sebe máme celou řadu neinteraktivních zařízení, která nemůžeme detailněji ovládám. Můj chytrý náramek je třeba příkladem takové věci. Zapnul jsem ho, dal jsem si ho na zápěstí a nějak ho ovládám mobilem. Ale detaily jsou přede mnou skryty.
Také v tomto prostředí musí být nějaký jednoduchý bootloader, který zavede operační systém. Naopak v interaktivních zařízeních, jako jsou počítače, chceme provozovat různorodý a flexibilní software a chceme vše konfigurovat. Konfigurace za běhu ale vytváří velký prostor pro zranitelnosti.
Jak to vypadá, když počítač startuje? Obvykle je už v procesoru malá nepřepisovatelná paměť obsahující kód, které se někdy říká BROM (boot ROM) nebo ZSBL (Zero Stage Boot Loader). Může obsahovat protokoly pro nahrání dalšího kódu třeba přes USB, což se hodí pro vývoj.
V závislosti na platformě jsou pak potřeba různé další fáze pro zprovoznění celého počítače. Hodně se to liší na různých platformách, ale výsledkem celého složitého procesu bude spuštění operačního systému.
Bootloader plnohodnotného operačního systému vyžaduje, aby byla inicializována paměť. Řadiče pamětí jsou velmi složité a vyvinout je stálo spoustu peněz. Výrobci u nich nejsou příliš otevření.
Je proto velmi těžké napsat nízkoúrovňový kód pro moderní základní desky. Přesto existují různé projekty, které se o to snaží: Coreboot, Project Mu, oreboot nebo U-Boot.
Vlastníme ale plně své zařízení? Můžeme si na něm pustit cokoliv chceme? Výrobci nám v tom často brání pomocí zamčených bootloaderů či podepsaného firmware. Projekty jako OpenWrt umožňují alespoň velkou část původního software nahradit. Pokud máme kontrolu nad celým zařízením, můžeme dělat vlastní úpravy a zjednodušuje nám to další vývoj.
Spousta zařízení je určena pro použití s konkrétní službou a když ta přestane fungovat, je zařízení k ničemu, protože už ho nedokážeme využít k jiném účelu.
Marek Peca: Jak jsme chytali družici na 75 GHz
Cílem bylo prozkoumat nová elektromagnetická pásma, konkrétně kolem 75 GHz. Tomu už se neříká mikrovlny, ale milimetrové vlny.
Na družicích se tato pásma využívají zejména pro telekomunikaci, tedy pro výměnu dat. Běžná satelitní televize běží už desítky let na 10 a 14 GHz, ale všechna okolní pásma jsou už obsazena. Hledáme tedy nový prostor, kam bychom se mohli s komunikací rozšířit.
Při zjišťování použitelnosti daného pásma se provede takzvaná propagační kampaň, která má za úkol ověřit šíření signálu atmosférou. Šíření ve vakuu je jednoduché spočítat, ale v atmosféře je to složitější, protože je tam spousta mraků, prachu a jiných překážek.
K propagační kampani je potřeba mít ve vesmíru vysílač a na zemi pak přijímací stanici.
Vysílač na 75 GHz tvoří družice W-Cube, která už přibližně rok obíhá kolem Země a na požádání vysílá signál. V Rakousku už existovala jedna přijímací stanice, ale bylo potřeba postavit druhou, která bude jednoduchá a snadno sestavitelná. Používá malou 60cm parabolickou anténu, font-end převádějící signál do pohodlnějšího pásma a SDR USRP Ettus N210. Je také potřeba použít zařízení pro směrování antény, protože družice létá po nízké oběžné dráze. Může jít o tři až čtyři stupně za sekundu, takže je potřeba s tím hýbat svižně.
Kvůli vlnové délce a malému talíři bylo potřeba mít přesnost při natáčení přibližně na zhruba desetinu stupně. To je stále výrazně volnější než pro použití v optické astronomii, ale přísnější než co dokážou běžné radioamatérské montáže.
Pro kalibraci byla využita Polárka, což je pro astronomy nepřesný přístup, ale pro toto použití je to dostačující.
Ukázalo se, že vědci při měření podcenili dopplerovský efekt, který mění signál v řádu megahertzů. Jednoduchý přístup se spektrálním analyzátorem proto nefungoval.
Při průletu se frekvence signálu měnila a když pak byla na konci konstantní, signál už byl zase slabý. Nakonec se podařilo efekt kompenzovat a bylo možné měřit sílu přijímaného signálu.
Jan Hrach: Od umělého neuronu k ChatGPT
Strojové učení potřebujeme, protože některé úlohy jsou lidmi nezvladatelné nebo potřebujeme vysokou míru autonomie. Naprogramovat například rozpoznávání obrázků klasickým způsobem je velmi složité.
Strojové učení znamená, že se program sám rozhodne, co bude dělat a jak.
Existuje několik způsobů, jak ke strojovému učení přistoupit. Jednou možností je takzvané učení s učitelem, kdy máme k dispozici data se správnou odpovědí. Je to jednoduché na implementaci, ale potřebujeme předem říct, že na daném obrázku je leopard.
Často je pak možné naučit proces jen řádově tak dobře, jak to umí nejlepší učitel.
Další variantou je učení bez učitele, kdy dodáme jen určitá data a je na stroji, aby v datech našel zajímavé vlastnosti. Je možné použít také různé kombinace, například máme částečně popsaná data a spoustu nepopsaných.
Existuje také zpětnovazební učení, kdy stroj zkouší různé varianty a je hodnocen podle dosaženého výsledku.
Strojové učení nejsou jen neuronové sítě, ale i například rozhodovací stromy, lineární regrese nebo nejbližší soused. Umělá inteligence je v poslední době marketingový termín, každý tvrdí, že to má, ale je velmi těžké definovat, co to znamená.
Základní jednotkou neuronové sítě je neuron, což je „krabička“ s několika vstupy a typicky jedním výstupem. Neuron vezme vstup, vynásobí ho váhou, přičte bias, aplikuje aktivační funkci a dostane výsledek.
Dříve se jako aktivační funkce používal sigmoid, ale později se zjistilo, že stačí výrazně jednodušší funkce ReLU. Tohle je ten velký průlom, který znamenal, že se neuronové sítě začaly kolem roku 2011 rychle rozvíjet.
Neuronová síť je orientovaný acyklický graf, u které někdo nastaví parametry sítě. Dnešní sítě mají miliardu parametrů, proto není možné je nastavovat manuálně. Musíme mít nějaký algoritmus, který to udělá automaticky.
Proto se připraví datová sada, u které máme k dispozici popis – například fotografie s osobami a bez nich. Bývá zvykem si část sady odložit pro pozdější testování.
V nejjednodušším případě tzv. fully connected sítě je obrázek vždy rozdělen po řádcích a každý bod pak propojíme se všemi neurony systémem každý s každým. Pro inicializaci jsou u jednotlivých neuronů nastaveny malé náhodné váhy. Poté uděláme první výpočet a vyjde nám nějaký výsledek. Poté zpětně upravíme váhy tak, aby byl výsledek podle očekávání.
Takto postupnými operacemi upravujeme váhy tak, abychom se přiblížili ke správné hodnotě. Tohle udělám pro všechny obrázky a z trochou štěstí dostanu síť, která dokáže další obrázky ohodnotit sama.
První síť pro rozpoznávání obrázků se jmenovala AlexNet a vyhrála v roce 2012 soutěž v rozpoznávání obrázků. Vyžadovalo se rozpoznat tisíc různých vlastností obrázků.
Lidé si všimli, že když se síť prohlubuje, jsou výsledky lepší, ale síť se hůře učí. Když zjistím, že odpověď je špatná, je obtížné definovat, jakou váhou je potřeba pohnout.
Výsledkem byla architekturní zlepšení a vznik hlubších sítí.
Pokud máme velmi málo trénovacích dat, je možné použít trik, kdy využijeme cizí natrénovanou neuronovou síť a použijeme jen její část, která funguje jako klasifikátor. Síť je natrénovaná na jiném problému, ale můžeme k ní doplnit vlastní malý klasifikátor, který udělá to, co potřebujeme.
Takto můžeme například vyrobit síť, která například vylepšuje obrázky nebo generuje nové obrázky.
Je možné také trénovat dvě sítě proti sobě, když například jedna síť generuje obrázky a druhá síť se snaží odhalit, zda jsou pravé či falešné. Když budeme takto obě sítě vylepšovat, můžeme získat síť, která bude generovat fotorealistické obrázky.
Síť se dokáže učit sama a postupně se zlepšovat. Dostane například rozehranou hru a jejím úkolem je vymyslet další tahy. Časem síť dostane odměnu podle toho, jak dopadl výsledek.
Váhy se pak upravují tak, aby byla odměna maximální. Tomu se říká reinforcement learning a je možné to ještě vylepšit například pomocí předtrénování na lidských hrách. Můžete také vzít dvě sítě a nechat je hrát proti sobě.
V posledním roce a půl se na nás ze všech stran valí textové jazykové modely. Pro zpracování sekvencí se používají takzvané rekurentní sítě, které produkují klasický výstup a zároveň skrytý stav. Ten si uložíme a při příštím kroku ho zahrneme do vstupu.
Tohle vedlo k architektuře nazvané sekvence na sekvenci (seq2seq), která se dříve používala na strojový překlad. Vytvoří se enkodér, který z původního textu vytvoří vektor hodnot, který předáme zase dekodéru, který na jejím základě vytvoří text v jiném jazyce. Nefunguje to ale dobře po jednotlivých větách, potřebovali bychom použít delší text.
Proto byl vymyšlen postup nazvaný attention, který pracuje jako lidský překladatel: zhruba si přečte celý text a pak se vrací k jednotlivým detailům. Tento algoritmus má ale kvadratickou složitost, takže není možné pracovat v libovolně velkém prostoru. To je problém například u ChatGPT, který má jen omezenou možnost pracovat s historií komunikace.
Prodlužování této historie vede k nárůstu nároků na paměť a výpočetní čas.
Velký průlom v reprezentaci slov znamenala předtrénovaná neuronová síť word2vec. Rozsekáte čistý text na pětice slov, čtyři strčíte do neuronové síti a snažíte se předpovědět páté.
Síť si uvnitř natrénuje váhy a naučí se přiřazovat související slova k sobě. Učí se tak podobné vztahy různých slov.
Jazykový model je program, který předpovídá chybějící token. Na vstup dostaneme větu „Každý večer si jdu lehnout do“ a zbytek chybí. Síť pak má za úkol předpovědět, že s devadesáti procentní pravděpodobností bude následovat slovo ‚postele‘.
Alternativní definice říká, že jde o program, který řekne pravděpodobnost, že danou větu někdo skutečně řekl.
Jazykové modely mají klasická využití například při kontrole pravopisu, v prediktivní klávesnici nebo rozpoznání řeči. Poměrně malá část programu se zabývá zpracováním zvuku, naopak většina se zabývá jazykem.
V praxi také nemusíme rozumět každé hlásce, ale z jazykového kontextu pochopíme, o čem se hovoří.
Jak můžeme testovat, zda je umělá inteligence skutečně inteligentní? Klasickým řešením je Turingův test, kde má počítač přesvědčit pozorovatele, že je také člověk. To je ovšem velmi subjektivní a výsledkem je jen odpověď ano nebo ne.
Existují ale i testy, při kterých se programu předkládají různá tvrzení a počítač musí prokázat pochopení světa tím, že správně odpoví na testovací otázky. Jeden z těchto testů se jmenuje Winogradovy dvojice, anglicky Winograd schema.
Na jakých datech bychom měli modely trénovat? Wikipedie je sice snadno dostupná, ale je málo rozmanitá. Nezachycuje to, jak lidé skutečně mluví.
Pokud bychom stahovali celý internet, narazíme na to, že na webu je spousta rozbitého obsahu, jako třeba výstupy z databází, kterého je řádově více než lidmi napsaného textu. Tvůrci GPT-2 využili odkazů z Redditu, které byly alespoň třemi uživateli označeny jako kvalitní. U GPT-3 už vytvořili malý klasifikátor, který dokázal zhodnotit kvalitu textu a pak byli schopni takto ohodnotit celý internet a zvolit pro hlavní trénování jen vhodný obsah.
Když se jazykovému modelu zvětšuje velikost, získává překvapivě další schopnosti a umí například odpovídat na další otázky. Modely jako ChatGPT, Copilot nebo Gemini vznikl přesně takto: natrénovali ho na čistém textu a on umí řešit různé úlohy.
Nefunguje to ale jako opravdová umělá inteligence, nedokáže to například vymyslet fúzní reaktor funkční za pokojové teploty. Vývoj je ale bouřlivý, celý obor je asi rok starý.
ChatGPT je jen služba, která má navíc politický a bezpečnostní filtr. Neporadí vám například, jak se vyrábějí biologické zbraně.
Existují ale i alternativní modely jako LLaMA nebo Alpaca. Modely jsou ale menší a jednodušší, protože ChatGPT vyžaduje 750 GB paměti.
Je potřeba tedy věnovat více času vstupům, abychom dostali rozumné výstupy.
Vojtěch Dušátko: Vlastní infrastruktura Kubernetes
Pokud nechceme se svými službami přecházet do cloudu, časem nám narůstá množství operačních systémů, které je potřeba spravovat. To je možné řešit přístupem „infrastruktura jako kód“ a můžeme začít atomizovat. Po nějaké době začnete mít zájem o přechod k deklarativnímu popisu.
Velké systémy se špatně spravují, takže pak přichází přirozená touha po rozpadu na samostatné menší části.
Kubernetes je orchestrační „framework“ pro aplikační kontejnery, není to ale kompletní řešení. Když ho spustíte samostatně, moc toho neumí.
Je třeba přizpůsobit infrastrukturu, abychom kolem tohoto motoru postavili celé použitelné auto.
Při stavbě clusteru je nutné použít vhodný automatizační nástroj jako Ansible nebo hned od začátku použít orchestrátor jako Rancher. Ten sám o sobě běží v Kubernetes, ale je tu pak problém slepice a vejce.
Prakticky je taky nutné použít verzovací nástroje, aby bylo možné se kdykoliv vrátit k poslední funkční verzi.
Poté je potřeba vymyslet, jak definovat obsah clusteru. Doporučuji použít CD nástroje, které implementují GitOps.
Lehčí variantou je FluxCD, robustnější je pak ArgoCD. Má perfektní webové rozhraní a umí ukazovat stav.
Podporuje spoustu pluginů a umožňuje odesílat notifikace.
V takovém prostředí je nutné řešit bezpečné uložení tajemství jako jsou hesla, klíče k API a podobně. Je možné použít takzvané sealed secrets, kdy jsou zašifrovaná tajemství uložena v Gitu. Další variantou je použití nástroje Vault s Vault Secret Operatorem a pluginem do ArgoCD. Výhodou je, že můžete mít tajemství uložená úplně jinde.
Persistentní úložiště je možné zvolit dle dostupných technologií nebo dle požadavků zákazníka. Můžete použít lokální úložiště, síťové úložiště (Ceph, Longhorn nebo NFS), cloudové úložiště (AWS EBS, Azure Disk, GCH a podobně) nebo enterprise storage API.
(Autorem fotografií je Petr Krčmář.)