Desktopové prostředí Budgie bylo vydáno ve verzi 10.10. Dokončena byla migrace z X11 na Wayland. Budgie 10 vstupuje do režimu údržby. Vývoj se přesouvá k Budgie 11. Dlouho se řešilo, v čem bude nové Budgie napsáno. Budgie 10 je postaveno nad GTK 3. Přemýšlelo se také nad přepsáním z GTK do EFL. Budgie 11 bude nakonec postaveno nad Qt 6.
OpenChaos.dev je 'samovolně se vyvíjející open source projekt' s nedefinovaným cílem. Každý týden mohou lidé hlasovat o návrzích (pull requestech), přičemž vítězný návrh se integruje do kódu projektu (repozitář na GitHubu). Hlasováním je možné změnit téměř vše, včetně tohoto pravidla. Hlasování končí vždy v neděli v 9:00 UTC.
Byl vydán Debian 13.3, tj. třetí opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.13, tj. třináctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
Na stránkách Evropské komise, na portálu Podělte se o svůj názor, se lze do 3. února podělit o názor k iniciativě Evropské otevřené digitální ekosystémy řešící přístup EU k otevřenému softwaru.
Společnost Kagi stojící za stejnojmenným placeným vyhledávačem vydala (𝕏) alfa verzi linuxové verze (flatpak) svého proprietárního webového prohlížeče Orion.
Firma Bose se po tlaku uživatelů rozhodla, že otevře API svých chytrých reproduktorů SoundTouch, což umožní pokračovat v jejich používání i po plánovaném ukončení podpory v letošním roce. Pro ovládání také bude stále možné využívat oficiální aplikaci, ale už pouze lokálně bez cloudových služeb. Dokumentace API dostupná zde (soubor PDF).
Jiří Eischmann se v příspěvku na svém blogu rozepsal o open source AdGuard Home jako domácí ochraně nejen před reklamou. Adguard Home není plnohodnotným DNS resolverem, funguje jako DNS forwarder s možností filtrování. To znamená, že když přijme DNS dotaz, sám na něj neodpoví, ale přepošle ho na vybraný DNS server a odpovědi zpracovává a filtruje dle nastavených pravidel a následně posílá zpět klientům. Dá se tedy používat k blokování reklamy a škodlivých stránek a k rodičovské kontrole na úrovni DNS.
AI Claude Code od Anthropicu lépe rozumí frameworku Nette, tj. open source frameworku pro tvorbu webových aplikací v PHP. David Grudl napsal plugin Nette pro Claude Code.
Byla vydána prosincová aktualizace aneb nová verze 1.108 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.108 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
Na lasvegaském veletrhu elektroniky CES byl předveden prototyp notebooku chlazeného pomocí plazmových aktuátorů (DBD). Ačkoliv se nejedná o první nápad svého druhu, nepochybně to je první ukázka praktického použití tohoto způsobu chlazení v běžné elektronice. Co činí plazmové chladící akční členy technologickou výzvou je především vysoká produkce jedovatého ozonu, tu se prý podařilo firmě YPlasma zredukovat dielektrickou
… více »EAV je bez významu.
Proč? Minimálně má tu výhodu, že při přidávání/odstraňování atributů nebude potřeba upravovat strukturu tabulky a tím pádem jí zamykat.
Jak je to s rychlostí hstore/jsonb vs klasická dekompozice? Jak vysoká režie je spojování mnoha tabulek?
EAV je bez významu.Proč? Minimálně má tu výhodu, že při přidávání/odstraňování atributů nebude potřeba upravovat strukturu tabulky a tím pádem jí zamykat.
EAV má mnohem víc nevýhod než výhod. Tam, kde je dostupný hstore/jsonb, bude EAV pouze kulhat.
hstore/jsonb jsou dynamickými strukturami. K čemu je pak dobré zamykání tabulek? 
Jak je to s rychlostí hstore/jsonb vs klasická dekompozice? Jak vysoká režie je spojování mnoha tabulek?
Klasická dekompozice má výhody zejména v tom, že můžeš data lépe normalizovat a tím usnadnit vyhledávání - hstore/jsonb je svou povahou spíš na ukládání dokumentů.
Pomalost EAV se těžce projevuje už při jednotkách tisíc položek. Čím víc, tím hůř. Kromě toho tam jsou značné problémy s datovými typy.
Z toho vyplývá, že by se především měla dát přednost pevné struktuře. Pokud nestačí, můžeme využít služeb hstore/jsonb, případně jiných zajímavých konstrukcí.
EAV je úplně v pohodě, pokud potřebuješ data v první řadě ukládat a číst, ale nemáš velké nároky na vyhledávání.
A pokud si dokážeš udělat index pro efektivní vyhledávání nad hstore/jsonb, tak si ho dokážeš udělat i nad EAV. Akorát do toho EAV je líp vidět a snáz v něm udržíš pořádek (máš číselník/slovník atributů).
To jen aby nevznikaly nějaké zbytečné fámy, tabu a neopodstatněný strach z určitého nástroje. EAV má svoje smysluplné uplatnění stejně jako kterýkoli jiný návrhový vzor.
Rekonstrukce entity z EAV je jeden dotaz:
SELECT název, hodnota FROM eav_tabulka WHERE entita = ?
Tím mám všechny atributy dané entity1 a můžu nad nimi vyhodnotit dotaz – ať už v aplikaci nebo nějakou DB funkcí – např. a1 = 10 AND a2 > 5 AND (a3 = 'x' OR a3 = 'y').
Ano, znamená to, že musím projít všechna data, full table scan, ale kde nemusím? Když napíšu totéž jako XPath dotaz, jak si s tím PostgreSQL poradí? Budou fungovat indexy nebo budu muset projít všechny ty XML dokumenty a nad každým vyhodnotit daný XPath? Indexy pro konkrétní XPath dotazy si můžu připravit předem – ale co když předem nevím, jaké dotazy budou uživatelé klást? A jak je to se složenými dotazy (AND/OR)? Když budu mít AND/OR operátory uvnitř XPath dotazu, dokáže PostgreSQL využít jednotlivé indexy pro dílčí dotazy, které jsem si teoreticky mohl připravit předem? Minimálně bych musel udělat tolik indexů, kolik mám atributů (tisíce nebo víc), ne?
U toho EAV si dokážu představit rozdělení dotazu na dvě fáze: 1) vybrat z dotazu určité podmínky a na základě nich udělat hrubý výběr, vytáhnout si z DB podmnožinu dat; při tom se využijí indexy 2) iterovat přes tuto podmnožinu a vyhodnotit celý dotaz.
[1] BTW: původně jsem psal: „EAV je úplně v pohodě, pokud potřebuješ data v první řadě ukládat a číst, ale nemáš velké nároky na vyhledávání.“ – na zobrazení entity mi to stačí a není s tím žádný problém
Tím ale nedostanu 1 řádek, ale n řádků - a jakákoliv manipulace s těmito daty vyjma poslání dat na klienta je dost ojeb. Entitou myslím v relační databázi jeden záznam.
Dostat z toho entitu v podobě jednoho řádku je nereálné/nepraktické, protože by tam byly tisíce sloupečků, většina prázdných a jiné by obsahovaly více hodnot (asi pole).
V Postgresu jsou pro HStore a jsonb přepravené speciální indexy optimalizované na dotazy typu klíč/hodnota
Je tohle tedy doporučený způsob pro uložení atributů výrobků? Dají se nad tím psát rozumně dotazy, o kterých píšu v #4. Pokud by šlo použít jen PostgreSQL a nebylo by potřeba do toho tahat další databázový systém, tak by to bylo ideální.
Dejme tomu, že to XML bude vypadat takhle:
<produkt>
<barva>červená</barva>
<rozměrX>10</rozměrX>
<rozměrY>20</rozměrY>
<rozměrZ>30</rozměrZ>
<hmotnost>500</hmotnost>
<rozhraní>VGA</rozhraní>
<rozhraní>HDMI</rozhraní>
<rozhraní>DP</rozhraní>
</produkt>
A udělám si indexy pro jednotlivé atributy:
xpath('/produkt/barva/text()', atributy)
xpath('/produkt/rozměrX/text()', atributy)
xpath('/produkt/rozměrY/text()', atributy)
xpath('/produkt/rozměrZ/text()', atributy)
xpath('/produkt/hmotnost/text()', atributy)
xpath('/produkt/rozhraní/text()', atributy)
A pak bych ten dotaz mohl postavit tak, že AND a OR nebudou uvnitř XPathu, ale budou v SQL.
Funkce xpath() ale vrací pole a já nechci testovat přesnou shodu pole=pole, ale budu mít spíš dotaz ve stylu: pole obsahuje hodnoty A a B, pole neobsahuje hodnotu X, pole obsahuje hodnoty C nebo D. Takže do hry vstupují ještě funkce pro práci s poli – jejichž výsledky ale naindexované už nemám (protože předem nevím, na jaké hodnoty se uživatelé budou ptát a jaké AND a OR podmínky si sestaví).
Jaké je tedy lepší řešení? A vadí něčemu velký počet indexů? (kromě toho, že zabírají místo na disku)
Zrovna jsem chtěl položit podobnou otázku 
Přemýšlel jsem nad datovým modelem pro atributy produktů v obchodě. Dejme tomu, že chci udělat něco jako eBay (ale lepší samozřejmě).
Požadavky:
rozhraní = {VGA, HDMI, DVI}.Tohle je takový ideál, možná nedosažitelný, ke kterému se dá jen přiblížit…
Mám rád relační databáze, na většinu úloh je to ideální nástroj a relační databáze tam určitě bude1, takže je celkem přirozené to zkusit navrhnout nad ní. Taky je dobré minimalizovat počet použitých technologií. Na druhou stranu ve výsledku to dopadne spíš tak, že budou databáze dvě: relační na většinu dat + nějaká jiná pro atributy a hierarchie + možná ještě něco dalšího pro fulltext.
Co mě zatím napadlo:
P.S. zatím to jsou spíš teoretické úvahy a diskuse na nedělní odpoledne 
[1] fakt nechci vést účetnictví nebo údaje o klientech v nějaké bezschémové/noSQL databázi a mít tam bordel a při psaní každého dotazu si rvát vlasy
Dík, to vypadá zajímavě, musím si to prostudovat…
Ruční údržba není nijak zvlášť náročná, pokud se držíš zavedených pravidel a nevymýšlíš blbosti. SQL dotazy jsou poměrně jednoduché a snadno se slepují. Trocha práce navíc při návrhu se vyplatí. Pokud je potřebné přidat další atributy pro další typ zboží, přidá se tabulka.Právě proto, že to je celkem jednoduché, ale musí se držet pravidla, se vyplatí udělat tu zapouzdřující vrstvu nad tím. Šikovný query builder, trocha konfigurace, pěkné API a je na roky vystaráno.
To ale musím předem vědět, jaké skupiny atributů patří k jakým skupinám výrobků, ne?
Tzn. ta možnost
Dynamicky generované tabulky – pro každý atribut jedna – opět jich můžou být tisíce nebo víc. V obou předchozích případech bude zase problém s prohledáváním vícenásobných atributů.
co jsem psal výš, ne? A vícenásobné atributy filtrovat pomocí HAVING count(*).
Protože ten atribut může obsahovat víc hodnot. Buď je dáš do pole nebo z toho uděláš víc záznamů. Co se dá líp indexovat?
A co když chci atribut popisující např. rozhraní? Jeden výrobek má VGA+HDMI+DVI a druhý má VGA+DP a třetí HDMI+DP a zákazník chce vyhledat výrobky s rozhraním VGA and (HDMI or DVI or DP), tak to najdu jak?
Jedna možnost je pole nebo bitová maska (tzn. uložit těch víc hodnot do jednoho sloupce) nebo mít pro každou hodnotu atributu jeden záznam v nějaké tabulce.
Pokud počet hodnot toho atributu byl malý a konečný, tak bychom mohli mít pro každou hodnotu boolovský sloupec.
Samotný typ boolean se do databáze moc nehodí - z mého pohledu je přežitkem z doby strukturovaného programování.
Když odhlédneme od řešené úlohy: tohle bych v databázi modeloval spíš tak, že budu mít entitu výrobek, entitu rozhraní mezi nimi vazbu M:N, kde atributem té vazby může být násobnost (počet takových rozhraní) a verze by byla spíš atributem rozhraní. Ano, booleany tam potřeba nejsou, protože true/false je vyjádřeno existencí či neexistencí té vazby resp. záznamu ve vazební tabulce.
Mnohem lepší by bylo mít pomocné tabulky "vga", "hdmi", "dvi" a "dp" s náplní viz výše. Takový SELECT se pak dá napsat poměrně jednoduše i bez klauzulí WHERE či HAVING.
Problém je v tom, že atributů může být hodně a jejich hodnot ještě víc a můžou se relativně často měnit, což znamená nutnost DDL operací i v průběhu běžného používání systému. Představ si, že obchodník vyplní do formuláře detaily zboží a to vyústí ve vytváření nových tabulek a jejich plnění… to mi nepřijde jako úplně šťastné. Dalo by se to dělat asynchronně a přidat tam nějaké kontroly nebo schvalování, ale stejně mi to přijde takové zvláštní a nevím, jestli jsou na takovou dynamičnost a velké počty tabulek/sloupců databáze stavěné.
Představ si, že obchodník vyplní do formuláře detaily zboží a to vyústí ve vytváření nových tabulek a jejich plnění… to mi nepřijde jako úplně šťastné. Dalo by se to dělat asynchronně a přidat tam nějaké kontroly nebo schvalování, ale stejně mi to přijde takové zvláštní a nevím, jestli jsou na takovou dynamičnost a velké počty tabulek/sloupců databáze stavěné.Databázím je tohle šumafuk, snad jen SQLite má omezení na 2^31 tabulek. Bolestivější bude spíš omezení JOINů na 64. Na druhou stranu použití DDL za běhu obvykle ukazuje na chyby v návrhu a proto je zpravidla lepší se tomu vyhnout. Při použití vhodného prefixu názvu tabulky však ke kolizím nedojde - takovou tabulku bych obchodníkovi klidně dal na starost, pokud by aplikace generovala všechny potřebné DDL operace a byl k tomu vhodný frontend.
Tiskni
Sdílej: