Blok finally při odchytávání výjimek: C++ vs. Java
vydáno: 29. 10. 2024 22:20
Programovací jazyky C++ i Java implementují výjimky (exceptions) pro ošetřování chyb resp. řízení toku programu při chybových stavech. V bloku try provádíme operace, které mohou selhat a vyhodit výjimku. V bloku catch tuto případnou výjimku zachytíme a nějak na ni reagujeme. V blogu finally pak máme kód, který se má provést vždy, bez ohledu na to, zda výjimka vyletěla nebo ne – typicky jde o kód, který zavírá zdroje, uvolňuje paměť nebo dělá jiný úklid. Na rozdíl od Javy jazyk C++ blok finally nemá. Není to zvláštní, když v C++ je jinak prakticky vše, co lze vymyslet? V dnešním článku si ukážeme, jak v C++ vytvořit obdobu bloku finally a následně i lepší řešení, která jsou pro C++ přirozenější.
HiFive1 – deska s otevřeným čipem RISC-V
vydáno: 4. 8. 2018 23:23,
aktualizováno: 2. 3. 2020 01:14
Zatímco v oblasti softwaru jsme se dostali do stavu, kdy všechny běžné potřeby uživatele lze uspokojit svobodným softwarem (operační systém, nástroje, aplikace…), a uživatel má tak plnou kontrolu nad svým systémem, v oblasti hardwaru jsou stále uživatelé většinou závislí na tom proprietárním-uzavřeném. Uzavřenost – jak softwaru, tak hardwaru – má řadu negativních dopadů. Jde buď o těžko odhalitelné a často neopravitelné chyby nebo o záměrně škodlivé vlastnosti. Poslední roky jsou v tomto ohledu zvlášť bohaté: Intel AMT/ME (trojský kůň přímo v procesoru, před kterým nás FSF varovala už někdy v roce 2014) nebo Spectre a Meltdown. Ať už jde o chybu, záměrně škodlivou vlastnost nebo kombinaci obojího, důsledky jsou stejné – počítač přestává poslouchat svého uživatele/vlastníka a řídí se pokyny někoho jiného, komu buď předává naše data (šifrovací klíče, citlivé soubory…) nebo nám zabrání v používání počítače (např. DRM), pozmění či smaže data. Tohle je jednoznačně nežádoucí stav – a to bez ohledu na to, zda jste běžný uživatel, banka, výrobní firma, vládní organizace nebo armáda. Současná situace v oboru je hodně špatná. Nicméně i v případě hardwaru se situace zlepšuje. Cestou, jak z toho ven, je otevřenost a veřejná kontrola – nad zdrojovým kódem i nad hardwarovými návrhy. Máme poměrně silné hnutí tvůrců otevřeného hardwaru, vzniká spousta desek a zařízení, ke kterým jejich autoři zveřejňují schémata a seznamy součástek, zdrojové kódy firmwarů, návrhy pro FPGA a návody na výrobu. Ale i v těchto případech zůstává většinou zásadní část systému – procesor počítače nebo MCU (microcontroller) menšího zařízení – uzavřená. Není to vinou autorů těchto návrhů, ale tím, že otevřené součástky na trhu chybí – nebo alespoň donedávna chyběly. Ovšem i tady jsme na dobré cestě: máme architekturu OpenPOWER pro výkonné servery a pracovní stanice a máme RISC-V a lowRISC pro menší zařízení.
Přepisování parametrů příkazové řádky
vydáno: 25. 11. 2017 20:26,
aktualizováno: 16. 12. 2017 22:07
Obecně se nedoporučuje předávat citlivá data (např. hesla) programům jako parametry na příkazové řádce. Důvodem je jednak to, že se spuštěné příkazy ukládají do historie, a jednak to, že by se k parametrům mohli dostat jiní uživatelé resp. procesy na témže počítači. Bezpečnější je proto citlivé údaje předávat buď ve formě souborů (kterým lze nastavit práva) nebo přes standardní vstup (rouru). Řada programů možnost zadat heslo na příkazové řádce zrušila nebo nikdy nenabízela – podporují pouze interaktivní režim nebo předání souborem či rourou. Některé programy zadání hesla parametrem stále umožňují a některé v sobě mají jakousi ochranu, která zabrání tomu, aby takto zadané heslo šlo snadno zjistit z výpisu procesů. V následujícím článku se podíváme, jak si takový program skrývající hesla můžeme napsat sami.
Paralelní port jako generátor signálu
vydáno: 11. 6. 2017 19:05,
aktualizováno: 5. 7. 2020 16:39
Dnes oprášíme zase jednu starou dobrou technologii – paralelení port – a ukážeme si, jak ji softwarově ovládat. Protože je to dost nízkoúrovňová záležitost, nebude to tentokrát v Javě ale v C++. Cíl bude poměrně skromný: generovat obdélníkový signál s frekvencí 10 000 Hz a zadanou střídou (což zde neznamená střed chleba). Ve výsledku budu signál generovat jiným programem, nicméně nejdřív si chci otestovat jednotlivé části systému samostatně, takže teď to bude jen LEDka a pár řádků kódu bez nějakých složitostí.
Java a princip RAII (SBRM, CADRe) známý z C++
vydáno: 9. 9. 2014 10:06,
aktualizováno: 5. 11. 2023 13:24
C++ nemá garbage collector (GC) a navíc si s sebou táhne historické dědictví jazyka C a ruční správy paměti. Proto je spousta programů v C/C++ docela peklo a udržovat kód prolezlý pointery je procházka minovým polem. Ale nemusí tomu tak být – v moderním C++ se používá princip RAII a další vymoženosti.
AppArmor vs. iptables – blokování sítě
vydáno: 17. 8. 2010 20:26,
aktualizováno: 18. 7. 2020 13:31
Člověk se pořád učí. Myslel jsem, že to jde jen ve firewallu v BSD systémech, ale on to umí i iptables, který tu samozřejmě mám a používám. O čem je řeč? O psaní firewallových pravidlech pro konkrétní uživatele, ne jen pro celý systém. Diskuse vznikla pod zprávičkou, kde Harvie psal, jak využít (zneužít) SSH server jako proxy, přestože si to jeho správce moc nepřeje (nastavil AllowTcpForwarding no). K tomu jsem poznamenal, že návod je sice fajn, ale bylo by taky dobré zmínit protiopatření – a navrhl jsem řešení pomocí AppArmoru.
Psi – přidání ikony pro odeslání souboru
vydáno: 31. 7. 2009 18:16,
aktualizováno: 10. 12. 2013 23:57
Nedávno vyšel IM klient Psi ve verzi 0.13. Stáhnul jsem si zdrojáky a zkompiloval i s podporou VoIPu – sláva, konečně funguje telefonování přes Jabber! Když už tu mám lokálně přeložené Psi, rozhodl jsem se vyřešit jednu věc, která mne vždycky trochu štvala – odesílání souborů.
Posílání zpráv pomocí fronty (POSIX MQ)
vydáno: 7. 4. 2009 12:15,
aktualizováno: 22. 4. 2019 17:07
V operačních systémech odpovídajících standardu POSIX jako je např. GNU/Linux nebo Mac OS máme k dispozici systém front. Jedná se o něco podobného jako JMS, ale na nižší (systémové) úrovni. Tato technologie nám umožňuje vytvářet pojmenované fronty (názvy začínají lomítkem). Do těchto front můžeme posílat zprávy a následně je z fronty vybírat. Fronty jsou tak použitelné pro asynchronní meziprocesovou komunikaci (IPC).