Poněvadž Redis už není svobodný, konsorcium Linux Foundation a Amazon Web Services (AWS), Google Cloud, Oracle, Ericsson a Snap Inc. společně představili svobodný fork Redisu s názvem Valkey.
Sam Bankman-Fried, zakladatel zkrachovalé kryptoměnové burzy FTX, byl dnes odsouzen k 25 letům vězení [Yahoo Finance].
Proxmox oznámil, že usnadňuje migraci z VMware ESXi do Proxmoxu.
Byla vydána nová verze 2.53.18.2 svobodného multiplatformního balíku internetových aplikací SeaMonkey (Wikipedie). Přehled novinek v poznámkách k vydání.
Na blogu programovacího jazyka Swift byl publikován příspěvek Psaní aplikací pro GNOME v programovacím jazyce Swift. Používá se Adwaita pro Swift.
egui je GUI knihovna pro programovací jazyk Rust běžící na webu i nativně. Vydána byla verze 0.27.0.
Byla vydána nová verze 6.1 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.13. Thunderbird na verzi 115.9.0.
Linka STOPonline.cz v roce 2023 přijala 3700 hlášení závadného obsahu na internetu, 22 bylo předáno PČR, 23 bylo předáno ISP a 944 závadových domén zobrazujících dětskou nahotu či pornografii bylo nahráno do mezinárodního systému ICCAM, který je spravován asociací INHOPE.
Byla publikována podrobná analýza v upstreamu již opravené bezpečnostní chyby CVE-2024-1086 v Linuxu v nf_tables.
Byla vydána nová verze 4.1 svobodného 3D softwaru Blender. Přehled novinek i s náhledy a videi v obsáhlých poznámkách k vydání.
Zdravím, stalo se, že jsem jako dlouhodobý Qtčkař byl donucen začít se kvůli škole učit pracovat s wxWidgets. Moje pocity z tohoto toolkitu však nejsou zrovna pozitivní. Ať se podívám na jakoukoliv část wxWidgets, vidím oproti Qt značné množství nedostatků.
Začněme tím, čím začne každý, který potřebuje nějakou knihovnu používat.Qt má velmi obsáhlou dokumentaci, ve které jsou poměrně vyčerpávajícím způsobem popsány všechny vlastnosti tříd a jejich metody, je popsáno která třída od jaké dědí a hlavně – celá dokumentace je vzájemně popropojovaná odkazy natolik, že se v ní snadno vyhledává. Kromě toho dokumentace často obsahuje i příklady, které jsou podrobně rozepsané.
Odkaz: dokumentace Qt
Dokumentace wxWidgets se značně liší v závislosti na použité verzi. K verzi 2.8, se kterou musím pracovat je dokumentace…inu tragická. Nepřehledná, neobsáhlá, matoucí, nelogicky rozčleněná…a dalo by se pokračovat. Ostatně jedna ukázka lepší než tisíc slov: dokumentace wxWidgets 2.8
Verze 2.9 už je na tom o poznání lépe a značně se funkčností přiblížila k dokumentaci Qt. Stále sice dle mého názoru nedosahuje její kvality, ale již je použitelná: dokumentace wxWidgets 2.9
V další části už budu popisovat pouze verzi 2.8, jelikož s verzí 2.9 nemám žádné zkušenosti. Možná to nebude úplně rovné, neboť verze 2.8 asi již není úplně aktuální, nicméně je to poslední verze označená jako stable.
Obě knihovny fungují na všech běžně používaných prostředích, u obou je i snaha k používání na mobilních platformách, která je v případě Qt výraznější, neboť vývojáři jsou placeni Nokií.
V čem se obě knihovny liší, je způsob jakým pracují s GUI prvky. Qt má veškeré vykreslování vlastní a na jednotlivých platformách se mění pouze vzhled. To umožňuje snadnější portování na další platformy, umožňuje to nabízet větší množství prvků, než jaké poskytuje grafická knihovna cílového prostředí. Nevýhodou tohoto přístupu je pak nižší rychlost vykreslování, než u nativní knihovny.
wxWidgets naproti tomu využívá GUI prvky cílové platformy, což má přesně opačný efekt. V praxi to pak například znamená, že při spuštění programu v GNOME wxWidgetsvyužívá knihovnu GTK k vykreslování. Rozdíl ve výkonu by se měřil poměrně obtížně, žádný obrovský rozdíl ve výkonu oproti Qt tam ale pravděpodobně nebude.
Qt je nabízeno pod dvěmi licencemi – LGPL 2.1 a komerční licencí, kterou v současné době nabízí společnost Digia. I pod nekomerční licencí je možné vytvářet uzavřené aplikace, pokud přímo nemodifikujete kód Qt. Jediné omezení spočívá v tom, že není možné aplikaci staticky slinkovat, je nutné přibalit Qt knihovny jako sdílené knihovny. (Týká se převážně Windows.)
wxWidgets je licencováno pod licencí wxWindows licencí, což je LGPL s výjimkou toho, že odvozená díla v binární formě mohou být distribuovány pod podmínkami uživatele.
Rozdíly jsou i při sestavování programu. Při použití Qt zdrojový kód nejprve projde skrz MOC(Meta Object Compiler), který zdroják před zkompilováním modifikuje. V Qt se využívá minimum maker – prakticky jediné, na které jsem narazil je makro QOBJECT, které umožní třídě používat signal/slot mechanismus. Ve vnitřku knihovny se makra využívají hojně, ale uživatel s nimi pracovat nemusí.
Ve wxWidgets to zase vypadá tak, že makra jsou na každém kroku – při vatváření odvozených tříd, při použití kolekcí,...
class Car{ int počet_kol; …. };Pokud chceme vytvořit lineární seznam z takové třídy, lze to udělat takto:
QList<Car> seznam;
WX_DECLARE_LIST(Car, CarList); #include <wx/listimpl.cpp> WX_DEFINE_LIST(CarList); CarList seznam;
Qt využívá šablony, stejně jako kolekce v STL, wxWidgets pak používá (jak jinak :D) makra. Přístup wxWidgets prý šetří velikost výsledného souboru. Šablonový přístup je pak podle toho co jsem našel výkonnější. Může mi to někdo potvrdit, vysvětlit? Osobně si myslím, že velikost výsledného souboru už dnes nehraje příliš velikou roli, naproti tomu psát 4 řádky kódu namísto jednoho mi nepřijde příliš přehledné. A jako bonus u kolekcí vytvořených makry nefunguje obarvování syntaxe ani doplňování.
Najde se tu někdo, kdo programuje v obou knihovnách? Zajímalo by mně, jestli je ta knihovna opravdu o tolik horší, nebo je můj pohled pouze zkreslený používáním Qt.
Cílem tohoto zápisku je zjištění informací, ne vyvolaní flejmu. :) Pokud najdete v zápisku nějakou chybu, rád ji opravím.
Tiskni Sdílej:
V čem se obě knihovny liší, je způsob jakým pracují s GUI prvky. Qt má veškeré vykreslování vlastní a na jednotlivých platformách se mění pouze vzhled. To umožňuje snadnější portování na další platformy, umožňuje to nabízet větší množství prvků, než jaké poskytuje grafická knihovna cílového prostředí. Nevýhodou tohoto přístupu je pak nižší rychlost vykreslování, než u nativní knihovny.To s tou rychlostí je nepřesné. Žádná nativní GUI knihovna pro Linux neexistuje. V konkrétním případě bude pomalejší spíš wxWidgets, protože používá další multiplatformní toolkit - Gtk+. Kód tedy prochází přes více vrstev, než se dostane k X11.
wxWidgets naproti tomu využívá GUI prvky cílové platformy, což má přesně opačný efekt. V praxi to pak například znamená, že při spuštění programu v GNOME wxWidgetsvyužívá knihovnu GTK k vykreslování. Rozdíl ve výkonu by se měřil poměrně obtížně, žádný obrovský rozdíl ve výkonu oproti Qt tam ale pravděpodobně nebude.Opět
LicenceV praxi je rozdíl mezi LGPL a wxWidgets licencí ten, že v případě wxWidgets můžes zkompilovat celou knihovnu staticky k tvoji aplikaci. V Qt tento postup není možný bez komerční licence.
Rozdíly jsou i při sestavování programu. Při použití Qt zdrojový kód nejprve projde skrz MOC(Meta Object Compiler), který zdroják před zkompilováním modifikuje.MOC nikdy nemodifikuje zdrojový soubor, ale vytvoří úplně jiný, s příponou
.moc
.
Něco k zamyšlení – kolekceNebo můžeš napsat třeba
std::vector<Cat>> seznam
Popravdě, spíš jsem čekal nějaké srovnání API. Mi osobně přijde obtížné udělat ve wxWidgets layout - v Qt se to dělá mnohem líp, a je to takové intuitivnější. Mezi další věci patří třeba podivné chování GroupBox/GroupLayout ve wx, atd... Už jsem s tím nedělal celkem dlouho, takže si na víc nevzpomenu.
To s tou rychlostí je nepřesné. Žádná nativní GUI knihovna pro Linux neexistuje. V konkrétním případě bude pomalejší spíš wxWidgets, protože používá další multiplatformní toolkit - Gtk+. Kód tedy prochází přes více vrstev, než se dostane k X11.A jak by to bylo s rychlostí na windows, tam bude wx rychlejší? Zajímalo by mě, jak by bylo možné to otestovat, nějaký nápad?
MOC nikdy nemodifikuje zdrojový soubor, ale vytvoří úplně jiný, s příponou .moc.Tak jsem to myslel, trochu špatně jsem se vyjádřil. To že se v tom obtížně navrhuje layout mi vadí asi nejmíň. Horší jsou nekonzistence v pojmenovávání metod tříd, nebo třeba fakt, že některé metody nefungují intuitivně tak jak by měly: např. třída wxCommandEvent má naprosto nelogicky metodu IsChecked(), která funguje jen tehdy, pokud byl event vyvolaný z checkboxů nebo menu (přitom může být vyvolaný ze spousty jiných prvků a korektní postup je získat z eventu zdrojový prvek a z něj teprve zjistit stav). To vypadá jak kdyby to tam někdo přidělal právě když to potřeboval. Srovnání API můžu udělat pokud je o to zájem, nechtěl jsem to přespříliš natahovat, dlouhé zápisky nikdo nečte.
To s tou rychlostí je nepřesné. Žádná nativní GUI knihovna pro Linux neexistuje. V konkrétním případě bude pomalejší spíš wxWidgets, protože používá další multiplatformní toolkit - Gtk+. Kód tedy prochází přes více vrstev, než se dostane k X11.Neexistence nativního GUI je spíš důsledek architektury a minulosti vývoje X Windows než Linuxu. Sice by se dalo říct, že kombinace Xt+Xaw/Motif (resp. jeho otevřené implementace) by se za určitých okolností mohly považovat za nativní GUI, ale pokud dáme jako podmínku, že ostatní toolkity fungují srz něj, tak už to neplatí (ty komunikují přes nižší vrstvu Xlib/XCB). Mimo toho, XServer funguje na mnohem nižší úrovni než widgety, samotný protokol je spíš na úrovni jednoduchých grafických knihoven typu SDL: klient si udělá okno, do něj může kreslit jak vektorově (včetně psaní pomocí fontů), tak bitmapově (přes pixmapy) a XServer mu zas zpět posílá události.
Popravdě, spíš jsem čekal nějaké srovnání API.V tomhle je docela zajímavé porovnat řešení vláken. v Qt totiž imho kvalita API QThread (případně příbuzných) pokulhává za zbytkem Qt, a to především proto, že to je jedno API pro dva různý use cases - a sice "klasická" vlákna a vlákna s event loop, čili, řekl bych, "gui-aware" vlákna. Uživatel na to musí dost pamatovat, aby tyhle dva přístupy v jednom API nemíchal, musí mít stále na paměti, jestli má nebo nemá nastartován event loop a který postupy jsou vhodný pro event loop a který ne. Imho by možná nebylo marný to rozdělit na dvě třídy. Krom toho co si vzpomínám, v některých detailech byla dokumentace QThread trochu vágní, co jsem to viděl naposled... Na druhou stranu je hezké, že v dokumentaci Qt mají všade (co vím) důsledně specifikováno, co je thread-safe a co ne. Co se týče wxWidgets a vláken - koukám do dokumentace a zjišťuju, že něco jako "gui-aware" vlákna vůbec neřeší, k dispozici jsou jen "klasická" vlákna. API vypadá slušně, ovšem já ale wx neznám z praxe (taky jsem nebyl dál než u hello world). Zajímavý je koncept detachted thread, tohle afaik v Qt vůbec není a mohlo by to imho dost zjednodušit práci v některých případech, především pro začátečníky. Ačkoli trošku z toho kouká podobný problém jako v Qt - jedno API, dva use cases.
zde mam pocit, ze ten signal-slot konzept je jakasi mantra intergalaktickeho programovani+1
Mym hlavnim kriteriem byla multiplatformost a licence. V dobe pred cca 5 lety, Qt v podstate multiplatformni nebylo a licence byla nepouzitelna. S multiplatformosti uz hodne postoupili, licence je sice o dost lepsi, ale porad to neni rozumne pouzitelna licence. Rozhodne neni jistota, ze ta knihovna se bude dat pouzivat bez obav i za 5 let. To je bohuzel obecne problem softu spravovanem jednou firmou.
V současnosti to jen občas používám jako uživatel. A protože jsem, co se optiky týče, řekněme nadstandardní uživatel, tak jsou wx-Gtk víc než na prd. Jsou nahovno (přetékající písma při exotických velikostech, zároveň nedokreslované widgety). Ale zase to může být chyba v Gtk. Nevím.
Používám několik aplikací ve wxWidgets a je to tórčr.