Český Nejvyšší soud potvrdil, že česká právní úprava plošného uchování dat o elektronické komunikaci porušuje právo Evropské unie. Pravomocným rozsudkem zamítl dovolání ministerstva průmyslu a obchodu. To se teď musí omluvit novináři Českého rozhlasu Janu Cibulkovi za zásah do práv na ochranu soukromí a osobních údajů. Ve sporu jde o povinnost provozovatelů sítí uchovávat údaje, ze kterých lze odvodit, kdo, s kým a odkud komunikoval.
Google bude vydávat zdrojové kódy Androidu pouze dvakrát ročně. Ve 2. a 4. čtvrtletí.
Bezpečnostní specialista Graham Helton z Low Orbit Security si všímá podezřelých anomálií v BGP, zaznamenaných krátce před vstupem ozbrojených sil USA na území Venezuely, které tam během bleskové speciální vojenské operace úspěšně zatkly venezuelského diktátora Madura za narkoterorismus. BGP (Border Gateway Protocol) je 'dynamický směrovací protokol, který umožňuje routerům automaticky reagovat na změny topologie počítačové sítě' a je v bezpečnostních kruzích znám jako 'notoricky nezabezpečený'.
Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu dosáhl 3,58 %. Nejčastěji používané linuxové distribuce jsou Arch Linux, Linux Mint a Ubuntu. Při výběru jenom Linuxu vede SteamOS Holo s 26,32 %. Procesor AMD používá 67,43 % hráčů na Linuxu.
V Las Vegas probíhá veletrh CES (Consumer Electronics Show, Wikipedie). Firmy představují své novinky. Například LEGO představilo systém LEGO SMART Play: chytré kostky SMART Brick, dlaždičky SMART Tagy a SMART minifigurky. Kostka SMART Brick dokáže rozpoznat přítomnost SMART Tagů a SMART minifigurek, které se nacházejí v její blízkosti. Ty kostku SMART Brick aktivují a určí, co má dělat.
Vládní CERT (GovCERT.CZ) upozorňuje (𝕏) na kritickou zranitelnost v jsPDF, CVE-2025-68428. Tato zranitelnost umožňuje neautentizovaným vzdáleným útočníkům číst libovolné soubory z lokálního souborového systému serveru při použití jsPDF v prostředí Node.js. Problém vzniká kvůli nedostatečné validaci vstupu u cest k souborům předávaných několika metodám jsPDF. Útočník může zneužít tuto chybu k exfiltraci citlivých
… více »V úterý 13. ledna 2025 se v pražské kanceláři SUSE v Karlíně uskuteční 5. Mobile Hackday, komunitní setkání zaměřené na Linux na mobilních zařízeních, kernelový vývoj a související infrastrukturu. Akci pořádá David Heidelberg.
… více »Už je 14 dní zbývá do začátku osmého ročníku komunitního setkání nejen českých a slovenských správců sítí CSNOG 2026. Registrace na akci je stále otevřená, ale termín uzávěrky se blíží. I proto organizátoři doporučují, aby se zájemci přihlásili brzy, nejlépe ještě tento týden.
… více »Rok 2026 sotva začal, ale už v prvním týdnu se nashromáždilo nezvykle mnoho zajímavostí, událostí a zpráv. Jedno je ale jisté - už ve středu se koná Virtuální Bastlírna - online setkání techniků, bastlířů a ajťáků, kam rozhodně doražte, ideálně s mikrofonem a kamerou a zapojte se do diskuze o zajímavých technických tématech.
Dějí se i ne zcela šťastné věci – zdražování a nedostupnost RAM a SSD, nedostatek waferů, 3€ clo na každou položku z Číny … více »Vývojáři GNOME a Firefoxu zvažují ve výchozím nastavení vypnutí funkce vkládání prostředním tlačítkem myši. Zdůvodnění: "U většiny uživatelů tento X11ism způsobuje neočekávané chování".
Odpočiňme si na chvíli od manažersko-ekonomických diskusí a pojďme se věnovat jedné čistě technické otázce. Analýza Cadusu není ani zdaleka hotová, nicméně už teď lze vyvodit určité závěry ohledně architektury programu. Potřebujeme modulární architekturu, jakýsi framework.
Jádro Cadusu (pozn. něco jiného než výpočetní-matematické jádro CADu) bude minimalistické a bude sloužit jen jako společná sběrnice. Veškerá funkcionalita bude zapouzdřena v modulech.
Moduly spolu potřebují komunikovat. Např. modul pro výpočet spotřeby materiálů (a tisk nějaké pěkné tabulky) potřebuje od jiného modulu zjistit, jaké objekty v modelu máme a z jakých materiálů jsou složené.
A teď jak to implementovat? Jedna věc je použitá technika (signály/sloty, posluchače/události, přímé volání metod, jmenná služba…) a druhá věc jak a kde definovat rozhraní. Napadají mne následující možnosti:
Poslední tři možnosti nevyžadují sdílení hlavičkových souborů. To se na první pohled může zdát jako výhoda (žádné otravné chyby při kompilaci). Ale na druhou stranu: jak bude volající modul vědět, jak se jmenují akce volaného modulu? Jak se jmenují parametry a jakých jsou typů? Jaké klíče má uložit do mapy nebo jaké tam má hledat? Jak jsou serializovaná data a jakou mají strukturu (názvy polí, kardinalita, typy)?
Jak se říká: z hovna bič neupleteš a nad hlavou nezapráskáš. I podle mých zkušeností je podstatná část problémů při vývoji SW způsobena příliš volnou vazbou (a nejde jen o počet problémů, ale hlavně o čas potřebný k ladění a nalezení chyb). Za sebe to tedy vidím na první možnost (klidně navrhněte něco lepšího).
Je tedy potřeba nějaké rozumné a efektivní sdílení definic mezi moduly a řešení závislostí mezi nimi (načtení jednoho modulu může vynutit načtení dalších).
Vím, jak tohle dobře implementovat v Javě. Ale Cadus bude (s největší pravděpodobností) v C++. Tak se chci poradit s těmi, kdo mají s tímto jazykem více zkušeností. Jak byste se s tímto úkolem vypořádali vy?
P.S. Pod tímto blogem prosím o věcnou diskusi – jestli máte potřebu ostatním sdělit, že to nemá cenu, že jsme naivní banda onanistů a metodologů provozující overengineering a podobně, poslužte si prosím vedle, tam je na to místa dost.
P.P.S. Pokud budete zlobit, tak vám ten CAD napíšu v XSLT a budu vám ho předčítat večer před spaním.
Tiskni
Sdílej:
(aniž by bylo potřeba vynakládat zbytečné úsilí a duplikovat kód/konfiguraci). A třetí věc jsou závislosti v době běhu – aby se načetlo jen to, co je potřeba, aby šlo moduly zapínat/vypínat za chodu. Jde tohle v C++ udělat?
Příklady ze světa Javy: plug-iny v jEditu, moduly v Netbeans, OSGi…
Jde mi o to, jaké jsou nejlepší praktiky, jak tohle řešit. Jaký svobodný software má tohle dobře udělané a mohl by sloužit jako vzor?
No co jineho, nez C++ Object?Taky si myslím, že by to měl být C++ objekt, ale viděl jsem i systémy, kde je to řešení obecněji (různá pole, mapy) a někteří to tak radí dělat, což se mi ale nelíbí.
dlopen(), dlsym() a dlclose() z dlfcn.h fungují tak, že se běžná dynamická knihovna (.so) načte do paměti a je možné získat adresy vstupních bodů jednotlivých symbolů, jak dat, tak ḱódu, jako ukazatele na void.
To je největší sílá a slabost zároveň - jde sice načíst naprosto cokoliv a dělat s tím cokoliv chcete, ale neexistuje nic, co by pak zabránilo dělat chyby - není obecný způsob, jak se z knihovny dozvědět, jestli je symbol proměnná nebo funkce, jaké má parmetry a co vrací.
Pro praktické použití se nad to musí napsat nějaké wrappery, už třeba jen kvůli tomu, že ve Windows se příslušné funkce jmenují jinak (ale fungují víceméně stejně).
jestli je symbol proměnná nebo funkce,No GDB to tahá z debugovacích symbolů (zrovna datové typy symbolů se tam myslím kódují i když není knihovna přeložena s parametrem -g). Ale naostro to tak dělat a spoléhat na to je samozřejmě kravina. Hlavičky, hlavičky, hlavičky. Dynamický modul se ještě nemusí automaticky rovnat jednomu binárnímu souboru.
Dynamický modul se ještě nemusí automaticky rovnat jednomu binárnímu souboru.I takový kernel si myslím tyto věci exportuje bokem do texťáku, takže automaticky nemusí platit, že stačí modprobnout libovolné *.ko které kde seženu a že to automaticky musí fungovat.
není obecný způsob, jak se z knihovny dozvědět, jestli je symbol proměnná nebo funkce, jaké má parmetry a co vrací.
A proč bych to dělal? Od toho máme hlavičkové soubory.
Ale možná jenom hledáte gobjectový introspection.
Modul je část programu, která jde přeložit samostatně – může si ho někdo zkompilovat bokem a dodatečně nainstalovat.A co by si takhle chtěl dělat prosimtě v CADu? Obdobu skinů pro Winamp či Firefox extensions?
A snadno přenositelný mezi architekturamiStejně jako s jakýmkoli jiným textovým formátem nebo i dobře specifikovaným binárním formátem.
Co se těch pluginů týče, tak pracuju na větším projektu, který je založený právě na pluginech.Dík za relevantní komentář.
Máme jádro, které obsahuje rozhraní každého pluginu coby hlavičku.Ale co když bude někdo chtít přidat svůj modul, aniž by zasahoval do toho jádra? To by ještě šlo, ale co když na něm bude záviset jiný modul? To v tom CADu může nastat, protože ho bude tvořit víc nezávislých autorů a nemusí být všechno centralizované na jednom místě.
Rozhodně nesdílet hlavičkové soubory mezi moduly. To by pak nebyly moduly.Jak by potom byl implementovaný ten příklad ze zápisku?
modul pro výpočet spotřeby materiálů (a tisk nějaké pěkné tabulky) potřebuje od jiného modulu zjistit, jaké objekty v modelu máme a z jakých materiálů jsou složené.V jaké formě by si ty dva moduly vyměňovaly data, jakou by měly strukturu?
Jak by potom byl implementovaný ten příklad ze zápisku?To záleží na tom, jestli ty struktury těch modelů a materiálů definuje jádro. Pokud ano, tak je to celkem jednoduché (předají se instance,...), pokud ne, je to složitější a byla by pak otázka, jestli je takový návrh vůbec dobrý...
V jaké formě by si ty dva moduly vyměňovaly data, jakou by měly strukturu?To záleží na konkrétních požadavcích, ale souhlasil bych s Lukem, že XML (apod.) radši ne (pokud by to nebyl nějaký specifický případ). Nemohl bys ty moduly nějak konkrétněji definovat? Přijde mi, že se snažíš najít v C++ javovské packages, což tak úplně nejde (resp. ne obecně)...
To záleží na tom, jestli ty struktury těch modelů a materiálů definuje jádro. Pokud ano, tak je to celkem jednoduché (předají se instance,...), pokud ne, je to složitější a byla by pak otázka, jestli je takový návrh vůbec dobrý...A podaří se nám v jádře udělat rozhraní pro všechno, co si mezi sebou moduly potřebují vyměňovat? Některá rozhraní můžou (a měla by být) jednotná – např. pro importní a exportní moduly. Ale u všech to IMHO nejde, resp. není to správné. Pokud je to technicky proveditelné (snad by mělo být) a není to nijak šíleně pracné, tak si myslím, že bychom měli mít i možnost závislosti modulů mezi sebou a do modulu jménem „jádro“ dát jen ta společná rozhraní. Přijde mi to jako pružnější a univerzálnější návrh. Paralela jsou balíčky a knihovny v distribucích – různé programy používají různé knihovny a závisí na sobě – není jedno rozhraní, za kterým by byly schované všechny knihovny. Např. někdo udělá modul pro sazbu tabulek a textových výstupů. Více jiných modulů ho bude chtít využít a sázet pomocí něj své výstupy. Tak mi přijde rozumnější, když budou záviset na tom modulu – ne že se rozhraní nacpe do jádra. Jednak by byl v jádře časem bordel a ztrácel by se přehled, co je čím používáno a jestli není nějaký kód zastaralý/zbytečný. A jednak by to představovalo velké nároky na centrální autoritu – správce projektu – kteří by museli rozhodovat, co do jádra dát a co ne – musela by se dělat řada administrativních rozhodnutí. Ale když budou moci moduly záviset na jiných modulech, může být vývoj živelnější – dá se tomu nechat volný průběh, každý si může dopsat libovolný modul a praxe ukáže, co uživatelé používají a chtějí (a to se pak dá zahrnout do projektu mezi ostatní zdrojáky hned vedle jádra). Správci projektu to pak můžou jen trochu usměrňovat a pomáhat, aby podobné moduly implementovali jedno rozhraní.
Přijde mi, že se snažíš najít v C++ javovské packages, což tak úplně nejde (resp. ne obecně)...Javovské balíčky ani ne, spíš JARy nebo lépe OSGi moduly (což je JAR + metadata). Moje představa je zatím takováhle:
libcadus-něco obsahující -dev verzi, kde by byly hlavičkové soubory – rozhraní. Pro naprogramování nového modulu bych si pak nainstaloval -dev balíčky jádra a modulů, na kterých bude ten můj závislý.
Mám tři dotazy:
Je to technicky proveditelné?Rozhodně ano.
Jak dlouho by trvalo zkušenému C++ programátorovi vytvořit tento framework? (žádná funkcionalita, jen framework, buildovací a balíčkovací skripty… viditelný výsledek: prázdné hlavní okno aplikace + možnost zapínat a vypínat moduly + jeden „Hello World“ modul)Podle mě k tomu nemusíš nic programovat, kromě seznamu modulů UI na vypínání/zapínání modulů. Možnost dynamických modulů je standardní vlastnostní dynamického linkeru. Případně můžeš použít nějakou lehkou nadstavbu z aplikačního frameworku.
Je to pro projekt tohoto rozsahu overengineering nebo ne?Ani ne.
Ty požadavky vypadaj hodně podobný...
(Teda ne nutně s Qt specifikama, nevim, jestli budete Qt používat...)
#include "ABaseClass.h"
class SubClass1 : public ABase
{
public:
SubClass1(unsigned int i) : ABase(i) {};
virtual void doWork(void) const {...}
};
Util::RegisterInFactory<SubClass1, ABaseFactory> regSubClass1("SubClass1");
hlavni program potom pouzije tovarnu pro vytvoreni kontretni tridy:
int main( int argc, const char* argv[] )
{
void *handle = dlopen("./libSubClass1.so", RTLD_NOW | RTLD_GLOBAL);
if( !handle)
{
std::cout << dlerror() << std::endl;
return 1;
}
ABase *one = ABaseFactory::Instance().createPtr("SubClass1", 0);
if( !one)
return 2;
one->doWork();
return 0;
}
Pouzivame to v projektu Tora. Tim modulem je "connection provider" - knihovna ktera je wrapperem nad nativni knihovnou pro pripojeni do databaze(libpg.so, libclntsh.so, ...). Pokud hlavni program najde instalaci DB klienta(Oracle,PgSQL, MySQL), tak si nacte plugin(knihovnu) a rovnou muze vytvaret instance trid z te knihovny. Samotna hlavni aplikace vubec nezavisi na zadnem DB klientovi.
Zatim mi to funguje jen na Linuxu a Woknach - na MAC se mi to zatim nepodarilo portovat - nemam MAC.
Pozadavky na struktury, ktere to bude pouzivat, vyrazne ovlivni, jak bude vypadat pozadovane rozhrani. Jste schopni uz ted rict, jak ty struktury budou vypadat?+1 Osobně bych napřed napsal nějaký kód a teprve poté řešil, jak a zda to případně rozdělit.
Osobne bych k tomu pristupoval jinak. Jako prvni vec bych resil hlavni cast -- modul pro CSG. Pozadavky na struktury, ktere to bude pouzivat, vyrazne ovlivni, jak bude vypadat pozadovane rozhrani.+1
Dal tu nekdo navrhl pouzit nejaky vyssi jazyk jako lepidlo, to neni spatne reseni.Tady by bylo záhodno připomenout, že třeba Python se s C++ lepí relativně velmi dobře. Viz třeba sublime apod.