Byla vydána nová verze 3.38 frameworku Flutter (Wikipedie) pro vývoj mobilních, webových i desktopových aplikací a nová verze 3.10 souvisejícího programovacího jazyka Dart (Wikipedie).
Organizace Apache Software Foundation (ASF) vydala verzi 28 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.
Byl vydán Debian 13.2, tj. druhá opravná verze Debianu 13 s kódovým názvem Trixie. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
Google představil platformu Code Wiki pro rychlejší porozumění existujícímu kódu. Code Wiki pomocí AI Gemini udržuje průběžně aktualizovanou strukturovanou wiki pro softwarové repozitáře. Zatím jenom pro veřejné. V plánu je rozšíření Gemini CLI také pro soukromé a interní repozitáře.
V přihlašovací obrazovce LightDM KDE (lightdm-kde-greeter) byla nalezena a již opravena eskalace práv (CVE-2025-62876). Detaily v příspěvku na blogu SUSE Security.
Byla vydána nová verze 7.2 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Tor Browser byl povýšen na verzi 15.0.1. Další novinky v příslušném seznamu.
Česká národní banka (ČNB) nakoupila digitální aktiva založená na blockchainu za milion dolarů (20,9 milionu korun). Na vytvořeném testovacím portfoliu, jehož součástí jsou bitcoin, stablecoiny navázané na dolar a tokenizované depozitum, chce získat praktickou zkušenost s držením digitálních aktiv. Portfolio nebude součástí devizových rezerv, uvedla dnes ČNB v tiskové zprávě.
Apple představil iPhone Pocket pro stylové přenášení iPhonu. iPhone Pocket vzešel ze spolupráce značky ISSEY MIYAKE a Applu a jeho tělo tvoří jednolitý 3D úplet, který uschová všechny modely iPhonu. iPhone Pocket s krátkým popruhem se prodává za 149,95 dolarů (USA) a s dlouhým popruhem za 229,95 dolarů (USA).
Byla vydána nová stabilní verze 7.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 142. Přehled novinek i s náhledy v příspěvku na blogu.
Společnost Epic Games vydala verzi 5.7 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Podrobný přehled novinek v poznámkách k vydání.
Tiskni
Sdílej:
Musel bys vymyslet nějakou databázi, která ukládá data i indexy nějakým způsobem přátelským k verzovacímu systému. Je otázka, jestli dá méně práce napsat databázi nebo verzovací systém – IMHO bude snazší udělat to verzování nad nějakým existujícím DBMS.
Určitě záleží na konkrétním případu: upvote by asi projít měl (ale jak už tu zaznělo, není to spíš přidání nové položky?)Zalezi na konkretni situaci, nekdy muze mit smysl si ukladat soucet, aby slo napriklad rychle seradit clanky podle poctu upvotu.
Uvažoval jsem i o variantě, že místo do fronty se změny ukládají jako nové řádky přímo do databáze, kde se jenom nějak označí. S tím je ale spojeno spousta různých problémů, pokud to vůbec nějak řešit jde, tak určitě ne jednoduše.
Mně to naopak přijde vhodnější, než do toho zatahovat JSON (resp. obecně nějaké denormalizované struktury uvnitř záznamů databáze). Při dotazování tě nezajímá, jestli jsou data ještě ve frontě nebo ne – prostě uděláš dotaz nad celou množinou. A při synchronizaci tě to zajímá, tak si vyfiltruješ záznamy podle toho příznaku a synchronizuješ je se serverem (odebereš příznak a naopak přidáš číslo verze ze serveru).
] tak ty se dají kontrolovat až při dokončení transakce, nebo je prostě můžeš provádět ve stejném pořadí jako na klientovi[tam bys měl mít stejná integritní omezení, takže i tam budeš muset vytvořit nejdřív odkazovaný záznam a pak teprve odkazující].
Ukládat stejná data dvěma nekompatibilními způsoby (jednou v normálních tabulkách a jednou v nějakých jiných strukturách) jen kvůli tomu, že některé jsou synchronizované a jiné ještě ne, mi přijde jako zbytečný opruz – hlavně kvůli tomu vyhledávání a slučování výsledků.
Ty konflikty musíš řešit tak jako tak – např. u UPDATů si potřebuješ pamatovat verzi, kterou jsi aktualizoval, abys nepřepsal cizí změny (např. jsi chtěl zvýšit hodnotu o 100, ale na serveru ji mezi tím někdo zvýšil o 200 a ty bys ji tak vlastně snížil, kdyby sis neohlídal verzi záznamu). INSERTy jsou jednodušší.Tady by to prave nebyl klasicky UPDATE, ale obecne jakakoliv zmena databaze – operace, ktera dostane na vstup databazi a na vystup da novou verzi databaze. Takze napriklad operace "upvote" by znamenala "vem pocet upvotu a pridej 1". (Samozrejme se da namitnout ze je lepsi si ukladat kazdy upvote jako novy radek, ale muze mit smysl si nekde navic ukladat jejich soucet pro rychlejsi dotazy.)
Co se týče cizích klíčů[tou relací myslíš relationship ne relation? Protože relace v relační DB je tabulka, ne vztah mezi záznamy 1:n, m:n, je jasné, že v nerelačních databázích nebudou relaceMas pravdu, myslel jsem relationship :) Mozna by to nejak takhle resit slo, ale musely by se opatrne nastavit pravidla, jako ze pri smazani rodice se kaskadovite smazou deti atd. Ale taky by byly potreba transakce, coz znamena dalsi zesloziteni. Napriklad kdyz klient udela tri transakce a ta druha na serveru selze, klient by asi mel tu treti vratit zpet.] tak ty se dají kontrolovat až při dokončení transakce, nebo je prostě můžeš provádět ve stejném pořadí jako na klientovi[tam bys měl mít stejná integritní omezení, takže i tam budeš muset vytvořit nejdřív odkazovaný záznam a pak teprve odkazující].
Ukládat stejná data dvěma nekompatibilními způsoby (jednou v normálních tabulkách a jednou v nějakých jiných strukturách) jen kvůli tomu, že některé jsou synchronizované a jiné ještě ne, mi přijde jako zbytečný opruz – hlavně kvůli tomu vyhledávání a slučování výsledků.Celkem dlouho jsem se snazil na to jit presne takhle, ale pokud chci aby to fungovalo na 100% ve vsech moznych podminkach, tak jsem presvedcen ze ta fronta nakonec vyjde jako jednodussi reseni.
Tady by to prave nebyl klasicky UPDATE, ale obecne jakakoliv zmena databaze – operace, ktera dostane na vstup databazi a na vystup da novou verzi databaze. Takze napriklad operace "upvote" by znamenala "vem pocet upvotu a pridej 1".
Tenhle problém se vlastně řeší v každé víceuživatelské databázové aplikaci – je celkem jedno, jestli se klient odpojuje a je půl dne offline, nebo jestli si v 10:05 otevře v aplikaci formulář, načtou se mu tam aktuální data, on do toho chvíli kouká, něco tam změní a v 10:15 to dá uložit.
Buď se použijí transakce (s daty nemůže nikdo jiný manipulovat – což je problém, protože klient může klidně odejít na oběd a nechat to celou dobu zamčené) nebo se použije optimističtější přístup – uložíš si číslo verze, takže víš, jestli data mezi tím někdo jiný neupravil, abys mu nepřepsal změny – při ukládání to zkontroluješ a buď změny nějak sloučíš nebo uživateli ohlásíš chybu.
Samozrejme se da namitnout ze je lepsi si ukladat kazdy upvote jako novy radek, ale muze mit smysl si nekde navic ukladat jejich soucet pro rychlejsi dotazy.
Tohle by šlo řešit přes materializované pohledy – součty by se při každém zápisu samy přepočítaly.
P.S. Přidal jsem do poradny otázku, která mě v této souvislosti napadla: Protokol/formát pro přírůstkové aktualizace databází