V jádře Linux byla nalezena a v upstreamu již byla opravena kritická zranitelnost GhostLock aneb CVE-2026-43499. Lokálnímu uživateli umožňuje získat práva roota a také obejít kontejnerovou izolaci. Zranitelnost existovala v Linuxu 15 let, tj. od roku 2011, od Linuxu verze 2.6.39.
Evropská komise předběžně shledala, že návykový design aplikací Instagram a Facebook od americké společnosti Meta porušuje unijní nařízení o digitálních službách (DSA). Návykový design zahrnuje například takzvané nekonečné posouvání, automatické přehrávání videí, tzv. push notifikace, kdy aplikace uživatele vybízí k návratu do jejího prostředí, či vysoce personalizovaný algoritmus, který rychle pozná, co uživatele baví a snaží
… více »Byla vydána verze 1.97.0 programovacího jazyka Rust (Wikipedie). Podrobnosti v poznámkách k vydání. Vyzkoušet Rust lze například na stránce Rust by Example.
Švýcarská společnost Punkt. má nově v nabídce telefon Punkt. MC03. Telefon byl navržen ve Švýcarsku s důrazem na soukromí a digitální suverenitu a vyroben v Německu. V telefonu běží operační systém AphyOS (Apostrophy OS) založený na AOSP (Android Open Source Project) 15. Cena telefonu je 745 eur.
TypeScript (Wikipedie), tj. JavaScript rozšířený o statické typování a další atributy, byl vydán v nové verzi 7.0. Kompilátor byl kvůli výkonu přepsán z TypeScriptu do Go.
Europarlament podpořil pozměněnou verzi výjimky známé jako „chat control 1.0“ umožňující firmám skenovat soukromou komunikaci na internetu kvůli ochraně dětí před zneužitím. Pozměňovací návrhy přijaté europoslanci však počítají s tím, že z výjimky bude vyřazena šifrovaná komunikace. Výjimka přestala platit začátkem dubna poté, co se Evropský parlament a Rada EU nedokázaly shodnout na jejím prodloužení. Rada následně přijala
… více »Nejnovější X.Org X server 21.1.24 a Xwayland 24.1.13 řeší 2 bezpečnostní chyby.
Clement "Clem" Lefebvre publikoval souhrn dění v Linux Mintu za červen 2026. Vypíchnuta je vylepšená podpora Waylandu. Už není považována za experimentální. V příští verzi Linux Mintu, plánována je na Vánoce, bude běh Cinnamonu plně podporován na X11 i Waylandu. V květnu na vývoj Linux Mintu přispělo 611 dárců celkovou částkou 19 612 dolarů. Dalších 2 326 patronů přispělo na Patreonu celkovou částkou 5 334 dolarů.
V Linuxu v KVM byla nalezena a v upstreamu již byla opravena kritická zranitelnost Januscape aneb CVE-2026-53359. Root na hostovaném počítači (virtuální stroj) může obejít izolaci a získat plnou kontrolu nad hostitelským systémem (DoS útok nebo vzdálené spuštění kódu s právy roota). Na obou hlavních architekturách – Intel i AMD. Zranitelnost v Linuxu existovala téměř 16 let (od srpna 2010 do června 2026).
Tribunál Soudního dvora Evropské unie dnes zamítl několik žalob, v nichž se americká společnost Apple ohrazovala proti pravidlům fungování velkých technologických společností na unijním trhu. Applu se nelíbilo, že jeho obchod s aplikacemi a operační systém iOS mají podléhat přísnějším povinnostem jen proto, že Brusel firmu považuje za takzvaného gatekeepera, tedy strážce přístupu.
První poznatek o Pieterovi. Jakožto editor verze 0.9 amqp měl potřebu svoje poznatky vtělovat do podoby RFC, čili specifikací. Stejně je tomu tak i v případě CLASS, neboli C language style for scalability.
A protože je jazyk C starý a jeho standardní knihovnu a posixová rozhraní tvořilo mnoho nezávislých týmů. Tohle všechno společně s tendencí C programátorů pro mikrooptimalizace a existence preprocesoru vede k tomu, že průměrný C kód je velmi špatně čitelný.
Základní poznatek je
If the code isn't readable on a grey Monday morning before coffee, chuck it out and start again
Ten rules of good code @hintjens
struct addrinfo hints, *res; int sockfd; // first, load up address structs with getaddrinfo(): memset(&hints, 0, sizeof hints); hints.ai_family = AF_UNSPEC; // use IPv4 or IPv6, whichever hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_PASSIVE; // fill in my IP for me getaddrinfo(NULL, "3490", &hints, &res); // make a socket: sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); // bind it to the port we passed in to getaddrinfo(): bind(sockfd, res->ai_addr, res->ai_addrlen);A podobný kód v czmq
zsock_t *socket = zsock_new_router ("tcp://*:3490");
...
zsock_destroy (&socket);
Pochopitelně se nejedná o ekvivalentní kód, kdy v jednom případě tvoříme klasický socket a ve druhém jeho zeromq abstrakci. Ale ilustruje to princip čitelnosti kódu, o kterém CLASS je. Mimochodem všechne kód je jak je, s přesvědčením, že půjde i zkompilovat.
#include <czmq.h>
struct _globdom_t {
size_t counter;
bool kaboom;
char *name;
};
typedef struct _globdom_t globdom_t;
Nutno podotknout, že globdom je neprůhledná (opaque) struktura, která není deklarována v hlavičkovém souboru.
globdom_t * globdom_new () {
globdom_t *self = (globdom_t*) zmalloc (sizeof (globdom_t));
assert (self);
self->counter = 0;
self->kaboom = false;
self->name = strdup ("");
assert (self->name);
return self;
}
Konstruktor je zodpovědný za alokaci paměti a nastavení výchozích hodnot.
void globdom_print (globdom_t *self) {
assert (self);
zsys_debug ("globdom:\n\tcounter=%zu\n\tkaboom=%s\n\tname=%s",
self->counter,
self->kaboom ? "true" : "false",
self->name);
}
Print metoda není přesně vzato potřeba, ale velice usnadňuje ladění programu. Jelikož se czmq (a CLASS) obvykle používá na psaní asynchroního serverového kódu, ladění pomocí metody print je jediný použitelný způsob.
void globdom_destroy (globdom_t **self_p) {
assert (self_p);
if (*self_p) {
globdom_t *self = *self_p;
zstr_free (&self->name);
free (self);
*self_p = NULL;
}
}
Destruktor je specifický tím, že očekává ukazatel na ukazatel. To proto, že zavolání destroy vyNULLuje ukazatel v nadřazeném kontextu. A díky tomu je možné jej volat vícekrát aniž by kód spadnul na double free chyby. Srovnejte s libc funkcí free a nechvalně známou double free error.
const char* globdom_name (globdom_t *self) {
assert (self);
return (const char*) self->name;
}
char* globdom_get_name (globdom_t *self) {
assert (self);
return strdup (self->name);
}
Metody pro přístup k položkám. Obvykle se vrací ukazatel zevnitř struktury. Klíčové slovo const se používá ke zdůraznění faktu, že se nepředává vlastnictví objektu. Nicméně existuje i druhá možnost a to vracet nový objekt. Dokumentace potom musí zmiňovat, že je volající zodpovědný za zrušení vráceného objektu.
void globdom_set_name (globdom_t *self, const char* name) {
assert (self);
assert (name);
zstr_free (&self->name);
self->name = strdup (name);
}
Nastavení nové hodnoty je triviální. Obvykle chceme daný objekt vlastnit, na což je ideální funkce strdup. A ano, v položce mohou být nějaká data, takže je vhodné je zrušit.
void globdom_test (bool verbose) {
printf (" * myp_myclass: ");
// Conduct tests of every method
globdom_t *self = globdom_new ();
assert (self);
assert (streq (globdom_name (self), ""));
globdom_set_name (self, "NAME");
assert (streq (globdom_name (self), "NAME"));
globdom_destroy (&self);
globdom_destroy (&self);
printf ("OK\n");
}
A nakonec by každá třída měla mít unit test. Vzhledem k tomu, že se jedná o C, je vhodné unit test pustit i pod valgrind.
Pozorní čtenáři si jistě všimli zvláštní konstrukce strdup ("") v konstruktoru. Typický C programátor nechce zbytečně plýtvat cykly CPU, takže by napsal self->name = NULL. Což je možné, ale potom je potřeba to všech metod třídy naprogramovat kód pro obsluhu NULL. Použití strdup vede na jednodušší kód bez zbytečných podmínek. A jednodušší kód je lepší, než ten komplikovaný.
Příště se podíváme na generování kódu a zproject.
Edit: jenom dodatek k C++ dole. Sice je mi trapné postoval "slovo" Boží, nicméně velkou Pietrovou předností bylo to, jak dokáže formulovat myšlenky.
7. Technology is a tool, not a tribal affiliation.
Never turn pragmatic choice of tools into a belief system. I have written editors and code generators in COBOL 74. The language matters little.
Ten habits of good programmer @hintjens
Cheap is important. Learn to use Linux, and a cheap or second-hand PC. Learn the command line. Stick with small languages like C, instead of massive languages like C++. Learning a larger language does not make you a better programmer. Ten Tips for Young Programmers @hintjens
Tiskni
Sdílej:
Tohle znáš? O objektu, struktuře a gotu.
Tohle znáš? O objektu, struktuře a gotu.Ehh, to je zas ptákovina. Zas se někdo potřebuje cítit na výši nad ostatními. Někteří k tomuto účelu využívají svou znalost dizajn paternů a entrprajs Javy, jiní zase zalost embedded přístupu. U někoho, kdo pracuje s embedded mě tenhle postoj trochu zamrzel, čekal bych u těhle lidí větší nadhled...
Už se ti někdy stalo že se ti nevešel program do Arduina?Stalo a nikdy za to nemohlo použití objektů. Jinak tohle je argument jako prase. Už se ti někdy stalo že se ti nevešel program do arduina? Tak bys měl používat všude assembler, i když píšeš na desktopu, protože všechno je zlo a všichni jsou neschopní, jen já vím jak na to.
Už se ti někdy stalo že se ti nevešel program do Arduina?To, že někdo nerozumí objektům, resp. jak fungují pod kapotou, a v důsledku toho je nemůže úspěšně použít pro embedded, není úplně důvod, proč by na tom ostatní museli být nutně stejně.
Ale raději začnu s nějakým skutečně objektovým jazykem, asi C++.
Chtěl jsem napsat, že jste si naběhl na vidle, protože za tohle vás místní vyznavači zásady "žádný jazyk, který používá víc než deset lidí, nemůže být dost cool" rozcupují na kousky. Ale jak vidím, už je pozdě. Tak příjemnou zábavu… :-)
Chtěl jsem napsat, že jste si naběhl na vidle, protože za tohle vás místní vyznavači zásady "žádný jazyk, který používá víc než deset lidí, nemůže být dost cool" rozcupují na kousky. Ale jak vidím, už je pozdě. Tak příjemnou zábavu…Ono hlavně C++ není skutečně objektový jazyk ani omylem. Objekty jsou tam naroubované jak rakovina na C.
"žádný jazyk, který používá víc než deset lidí, nemůže být dost cool"Hlavně žádný jazyk není skutečně objektový
. Možná tak Self, nebo Javascript*
* smajlík-vyjadřující-dobrovolné-naběhnutí-si-na-vidle
Navíc tento pattern není nový, například libmagic, nebo libabc, nebo hormada dalšího kódu.
Ale raději začnu s nějakým skutečně objektovým jazykem, asi C++C++ má svoje výhody, zejména práce s kolekcemi (až na odporné STL API). Na druhou stranu i spoustu nevýhod, jako komplexní pravidla (rule of five), pomalá kompilace, nutnost dávat implementaci do hlavičkových souborů, neexistující ABI, ... Obvykle je to tak, že než já vyšperkuju třídu v C++, tak v C už mám dávno implementaci hotovou
Hele on zije 
Pozorní čtenáři si jistě všimli zvláštní konstrukce strdup ("") v konstruktoru. Typický C programátor nechce zbytečně plýtvat cykly CPU, takže by napsal self->name = NULL. Což je možné, ale potom je potřeba to všech metod třídy naprogramovat kód pro obsluhu NULL. Použití strdup vede na jednodušší kód bez zbytečných podmínek. A jednodušší kód je lepší, než ten komplikovaný.No, je pravda, že použít
strdup("") na inicializace řetězce dělá věci jedodušší, nicméně osobně bych raději udělal nějaký chytrý wrapper (možná by stačilo i makro), který obsahuje test na NULL (něco jako realloc(), ale pro řetězce), protože mít na haldě spousty pidiřetězců velkých jeden byte mi případá jako velmi neelegantní řešení.
A i když test na NULL je podmínka a tudíž skok, ve výsledku se přeloži jako jedna instrukce, zatímco ten kód, který následuje při dealokaci objektu z haldy, bude určitě obsahovat mnohem více skoků (například kvůli implementaci scelování) a navíc sahání do paměti, která nemusí být zrovna nacachované.