Byla vydána betaverze Fedora Linuxu 44 (ChangeSet), tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 14. dubna.
Open source router Turris Omnia NG Wired je v prodeji. Jedná se o Turris Omnia NG bez Wi-Fi. Je připraven pro zamontování do racku.
Sníh roztál a roztávají i bastlíři. Žene se na nás celá řada konferencí a seminářů technického rázu. Zajímá vás, jaké? Pak se připojte k 60. Virtuální Bastlírně, tedy k veřejné diskuzi bastlířů, techniků, učitelů i vědců. Jako vždy přijde na přetřes spousta novinek ze světa hardwaru, softwaru i bizáru. Na začátek lze očekávat hardwarová témata, tedy například nový KiCAD 10, nové akcelerátory LLM s nízkou spotřebou, nejvíce fosforeskující
… více »IuRe (Iuridicum Remedium) v rámci programu Digitální svobody zveřejnila analýzu dopadů a efektivity systémů ověřování věku v digitálním prostoru, která srovnává implementace ověřování věku v Austrálii, Velké Británii a Evropské unii.
Multiplatformní emulátor terminálu Ghostty byl vydán ve verzi 1.3 (𝕏, Mastodon). Přehled novinek a vylepšení v poznámkách k vydání.
Byla vydána nová verze 14.4 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.
Databáze DuckDB (Wikipedie) byla vydána ve verzi 1.5.0. S kódovým názvem Variegata (husice rajská). Přináší řadu vylepšení, včetně nového ergonomičtějšího CLI klienta nebo podporu pro typ VARIANT a vestavěný typ GEOMETRY.
V pátek 6. a sobotu 7. března proběhl v pražském sídle Nejvyššího kontrolního úřadu (NKÚ) Hackathon veřejné správy 7.1. Publikovány byly vytvořené aplikace. V kategorii projektů rozvíjených z krajského kola zvítězil tým „Mackokládi“. Čtyři středoškoláci ze Dvora Králové uspěli s aplikací KompaZ. Jde o digitálního průvodce, který pomůže s rychlou a srozumitelnou orientací v životních i krizových situacích „krok za krokem“. Aplikace
… více »QGIS, svobodný desktopový GIS, byl vydán v nové hlavní verzi 4.0. Změny zahrnují několik nových analytických a editačních funkcí, rozšíření podpory 3D, více možností úprav uživatelského rozhraní či mnoho dalších zlepšení použitelnosti. Řada 3.44 má aktualizace plánovány do září.
Dan Blanchard vydal knihovnu pro Python chardet v nové verzi 7.0.0. S novou verzí byla knihovna přelicencována z LGPL na MIT. Souhlasili s tím všichni přispěvatelé? Dan Blanchard souhlasy vůbec neřešil. Zaúkoloval umělou inteligenci (Claude), aby knihovnu zcela přepsala a výslovně jí nařídil, aby nepoužila žádný LGPL kód. Dan Blanchard tvrdí, že se jedná o clean room design. Protistrana argumentuje, že umělá inteligence byla trénována
… více »Byla přidána podpora pro hostitelské řadiče USB3.0/xHCI, žádný však ještě není k dispozici.
Jsem rád, že je Linux připraven i když skutečných zařízení se stejně dočkáme tak nejdřív za rok.
To by mě teda zajímalo, jak takovou věc testovali :=ooo
čipová sada AMD r60 čipová sada Intel IGDNG
asi chybi odrazka. jinak jako vzdy skvele pocteni!
asi chybi odrazkaDík, opraveno.
Nejak nerozumiem tomu konceptu "kotvy"; nemate niekto nejaky link kde je opisany?
Představte si, že máte struct, který obsahuje několik proměnných (memberů) různých typů - například další vnořené structy.
No a dostanete se ve zdrojáku do situace, kdy máte pointer na ten vnořený struct, a potřebujete zjistit pointer na ten větší struct, který ho obaluje. Vlastně jde o to, zjistit ofset vnořeného structu v tom obalovém structu (operace na úrovni statických typů, čili ta informace je k dispozici už při kompilaci) a odečíst ho od známého pointeru na vnořený struct.
Všiml jsem si, že to kernel umí řešit nějakými makry - patrně zmiňovaným container_of().
Omlouvám se, pokud tohle všechno je jasné
Dál to z hlavy dopodrobna neznám. Čili nevím přesně, jak "kotva" funguje.
Tuším že jsem to viděl v klasické kernelové knihovničce pro vytváření "spojových seznamů", kde "struct list_head" je vnořený do Vašeho uživatelského structu. No a při procházení seznamem pracujete s pointery na ten vnořený list_head, ale cílem je, dostat pointer na ten Váš uživatelský struct.
ListNode, která vypadá zhruba takhle (pseudokód!):
class ListNode<T> {
ListNode<T> next;
T data;
}
Šikulové od jádra to převrátili vzhůru nohama a vymysleli asi tohle:
class ListNode {
ListNode next;
}
class MyData {
...
ListNode node;
}
Implementace seznamu pracuje s ListNode, ale navenek umí poskytnout přímo objekty dat. Představuju si to asi takhle nějak:
void forEach(ListNode head, {T -> void} callback) {
ListNode curr = head;
while (curr != null) {
callback.invoke(CONTAINER_OF(curr)); // !!!
curr = curr.next;
}
}
MyData a = new MyData(...); a.node = new ListNode();
MyData b = new MyData(...); b.node = new ListNode(); b.node.next = a.node;
forEach(a) { MyData data -> ... }
Pochopitelně tohle je extrémně zjednodušené, ale myslím, že princip je správný. Pokud se pletu, někdo mne prosím opravte
/**
* container_of - cast a member of a structure out to the containing structure
* @ptr: the pointer to the member.
* @type: the type of the container struct this is embedded in.
* @member: the name of the member within the struct.
*
*/
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
struct parent { ... };
struct s {
struct parent; // prvni prvek ve strukture
...
};
Na strukturu s pak muzes pouzivat vsechny funkce (samozrejme s pretypovanim - coz ale za tebe muze delat nejake makro), ktere lze pouzit na strukturu parent bez pouziti maker typu container_of() nebo offset().
Na strukturu s pak muzes pouzivat vsechny funkce (samozrejme s pretypovanim - coz ale za tebe muze delat nejake makro), ktere lze pouzit na strukturu parentTyvado tak to je fikaný, by mě nenapadlo, ale to skutečně tak je. Akorát musí člověk pamatovat, že je potřeba alokovat/uvolnit víc paměti pro potomka, aby to nezatejkalo...
To je taka ta vec ktoru maju lode a ked sa chcu urzat na mieste vypustia kotvu...
Keby si furt nieco nekopiloval a nepisal v terminale a namiesto to si dal Vistu, mal by si cas aj na vseobecne vzdelavanie :p
Tiskni
Sdílej: