Proběhla hackerská soutěž Pwn2Own Ireland 2025. Celkově bylo vyplaceno 1 024 750 dolarů za 73 unikátních zranitelností nultého dne (0-day). Vítězný Summoning Team si odnesl 187 500 dolarů. Shrnutí po jednotlivých dnech na blogu Zero Day Initiative (1. den, 2. den a 3. den) a na YouTube.
Byl publikován říjnový přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Pracuje se na podpoře M3. Zanedlouho vyjde Fedora Asahi Remix 43. Vývojáře lze podpořit na Open Collective a GitHub Sponsors.
Iniciativa Open Device Partnership (ODP) nedávno představila projekt Patina. Jedná se o implementaci UEFI firmwaru v Rustu. Vývoj probíhá na GitHubu. Zdrojové kódy jsou k dispozici pod licencí Apache 2.0. Nejnovější verze Patiny je 13.0.0.
Obrovská poptávka po plynových turbínách zapříčinila, že datová centra začala používat v generátorech dodávajících energii pro provoz AI staré dobré proudové letecké motory, konvertované na plyn. Jejich výhodou je, že jsou menší, lehčí a lépe udržovatelné než jejich průmyslové protějšky. Proto jsou ideální pro dočasné nebo mobilní použití.
Typst byl vydán ve verzi 0.14. Jedná se o rozšiřitelný značkovací jazyk a překladač pro vytváření dokumentů včetně odborných textů s matematickými vzorci, diagramy či bibliografií.
Specialisté společnosti ESET zaznamenali útočnou kampaň, která cílí na uživatele a uživatelky v Česku a na Slovensku. Útočníci po telefonu zmanipulují oběť ke stažení falešné aplikace údajně od České národní banky (ČNB) nebo Národní banky Slovenska (NBS), přiložení platební karty k telefonu a zadání PINu. Malware poté v reálném čase přenese data z karty útočníkovi, který je bezkontaktně zneužije u bankomatu nebo na platebním terminálu.
V Ubuntu 25.10 byl balíček základních nástrojů gnu-coreutils nahrazen balíčkem rust-coreutils se základními nástroji přepsanými do Rustu. Ukázalo se, že nový "date" znefunkčnil automatickou aktualizaci. Pro obnovu je nutno balíček rust-coreutils manuálně aktualizovat.
VST 3 je nově pod licencí MIT. S verzí 3.8.0 proběhlo přelicencování zdrojových kódů z licencí "Proprietary Steinberg VST3 License" a "General Public License (GPL) Version 3". VST (Virtual Studio Technology, Wikipedie) je softwarové rozhraní pro komunikaci mezi hostitelským programem a zásuvnými moduly (pluginy), kde tyto moduly slouží ke generování a úpravě digitálního audio signálu.
Open source 3D herní a simulační engine Open 3D Engine (O3DE) byl vydán v nové verzi 25.10. Podrobný přehled novinek v poznámkách k vydání.
V Londýně probíhá dvoudenní Ubuntu Summit 25.10. Na programu je řada zajímavých přednášek. Zhlédnout je lze také na YouTube (23. 10. a 24. 10.).
$this->__set('foo');
$this->__get('foo');
Getterem/setter nezpřístupníš žádnou imlementaci (naopak), je doplníš (obvykle) veřejné rozhraní. A setter právě potencionální inkonzistenci brání, protože provede ty patřičné operace aby k tomu nedošlo.
Je lepší gettery/settery vůbec nedělat a atributy objektu ponechat jako privátní…Pominu-li, že mohou existovat různé typy tříd, mezi nimi třeba datové, zajištující právě tu konzistenci dat, kde se to minimálně gettery může hemžit, tak se jedná jen o jeden z možných způsobů jak pracovat.
Tím nám objekt zůstane hezky zapouzdřený a nikdo nemůže narušit jeho konzistenci.Vidím tam hříčku, s tím co je zapouzdřené. Ale jinak počítač odpojený od sítě, taky nebude napaden, jeho využití, nechť každý zváží sám…
Pro většinu drtivou setterů, které vidím v různých aplikacích, toto tvrzení neplatí. Sofistikovaným setterům se omlouvám, ty jsem na mysli neměl. Měl jsem na mysli ty primitivní šmejdy, kterými se to v aplikacích jen hemží.A setter právě potencionální inkonzistenci brání, protože provede ty patřičné operace aby k tomu nedošlo.
No, ono se to logicky těmi primitivními hemží (tam kde se používá předávání dat), protože když tam ten primitivní setter/getter je, tak lze třídu případně upravit a udělat z něj pak sofistikovaný setter/getter), a tedy nerozbije se rozhraní třídy.
Furt někde něco nastavovat setterem a vybírat getterem je často jen blbost, nezkušenost či lenost, ale obecně bych to neodsuzoval.
$obj = new Predmet();
$obj->setTvar('kostka');
$obj->setBarva('bílá');
Metoda setTvar() možná kontroluje, zda parametr je některým z podporovaných objektů a setTvar() kontroluje barvu, ale ten objekt není konzistentní. Po provedení prvního řádku vím, že mám nějaký objekt, ale nevím o něm nic. Použití takového objektu zpravidla způsobí chybu. Po provedení druhého řádku vím, že je to kostka, ale barva je stále v nedefinovaném stavu. Objekt stále není konzistentní.
$obj = new Predmet('kulička', 'modrá');
$obj->setTvar('kostka');
$obj->setBarva('bílá');
Už to mám i s konstruktorem. Předmětem je původně modrá kulička, která se pomocí setterů změní na bílou kostku. Samozřejmě je to také špatně.
Proč o tom píši? Protože je to i v různých návodech a spousta tupců to opisuje do svých aplikací. Ukaž mi příklad nějaké své třídy, ve které to bez setteru/getteru nejde. Samozřejmě s privátními vlastnostmi.
Předmětem je původně modrá kulička, která se pomocí setterů změní na bílou kostku.No dobře, tak třeba změna tvaru nemusí být úplně v pořádku, ale nevidím důvod, proč by tu kuličku nemohl někdo přebarvit. Nebo proč by si člověk nemohl změnit telefonní číslo, student opravit známku, okno změnit stav ze zavřeného na otevřené, ... Jak to chceš bez (nějaké obdoby) setteru řešit? Podle mě, máš prostě tři možnosti. Veřejnou metodu, klasický setter jako takový a nebo metodu typu
setFoo($foo). Pokud tě chápu, tak jsi proti všem těmto možnostem, ...
open(), close(), isOpened().
open() na rozdíl od setOpened(true) nepředávám argument, tedy dle Kitovi logiky, nemůže narušit konzistenci objektu.
open(), close() za setter označit nedá.
open() a close(). Každý z nich to může implementovat jinak. Ty implementace se rozhodně nedají označit za settery, protože se netýkají atributu, ale objektu.
open() a close() jsi mě stejně odzbrojil. Tyto metody už nemanipulují s atributem, ale s objektem.
Možná to vypadá jen jako obyčejná změna názvu metod, ale i prosté přejmenování proměnné může změnit smysl třídy a čitelnost programu.
$objekt->setVisible(false); $objekt->setVisible(true);a
$objekt->hide(); $objekt->show();Uvnitř mohou dělat naprosto totéž, ale sémanticky se liší. Které řešení je pro tebe čitelnější?
)
Zapnutí/vypnutí průhlednosti objektu?
Nastavení příznaku, zdali je daná osoba student nebo ne (nezpůsobí to nic, akorát se podle toho následně bude počítat daňový přiznání)?
Nastavení, zdali se dané osobě má nebo nemá posílat pravidelný newsletter.
Atd....
Obecně: symetrické jsou zpravidla ty metody, které nezávisle na argumentu provedou stejné akce (viz např. první dva příklady, oba nezávisle
na vypnutí/zaptnutí způsobí překreslení), speciálně pak ty vlastnosti, jejichž změna nezpůsobí žádnou okamžitou reakci (druhé dvě vlastnosti).
Pokud píšu plně internacionální program, je samozřejmě lepší výčet. Na jednu věc může být dle kontextu více "nejlepších" řešení.
- průhlednost okna - hodí se mít nastavený alfakanál na konstantní hodnotu, ale kromě toho mít možnost tu průhlednost zapnout/vypnout, aniž by člověk hýbal s nastaveným alfakanálem. Dvě metody jsou tady míň ergonomické, protože tudle vlastnost budu vázat s nějakým zapínacím tlačítkem, jehož vypnutí/zapnutí opět jednoduše a bezproblémově vyřeším setterem a getterem. Další výhoda bool setteru je tu symetrie s getterem - který zde zcela jistě potřebuji.
- výčet student/důchodce atd... použít nejde, protože to nemusí být disjunktní množiny (a pokud v současné právní úpravě některé dijunktní jsou, neznamená to, že za rok budou furt: proto je správné tu disjunktnost zajistit nikoli na úrovni uložení dat, ale na úrovni přístupových metod). A pokud to dáš do konstruktoru, tak se nutnosti setteru nezbavíš, protože samozřejmě člověk během svého života tyto své statusy mění. To už mi přijde, že hledáš jakoukoli cestu, hlavně abys nemusel použít bool setter.
- výčet (nezasílat, jenVýroční, zasílat) užít jde, ale je to imho blbé řešení. Totiž ono je použitelné jen pro dvě kategorie newsletterů (a to ještě těžko, jak je vidět, žes ze čtyř možností jsi dal jen tři, protože čtyři už by byl trochu zmatek - a s dalšími kategoriemi roste počet možností exponenciálně). Přitom běžné je, že buď stačí jen hrubé rozdělení (zasílat/nezasílat - např. většina eshopů na webu nic jemnějšího nepotřebuje), nebo je třeba rozdělení dle kategorií newsletterů - kde bude u každé volba ne/zasílat danou kategorii - pak ale zas je většinou hodně nepraktické mít ty kategorie natvrdo v kódu.
Za povšimnutí také stojí, že mé řešení jde na více kategorií jakžtakž rozšířit (původní setter může zůstat jako "all-in-one" nastavování), zatímco řešení s výčtem bude třeba přepsat.
$obj = new Predmet('kulička', 'modrá');
$obj = new Predmet('kostka', 'bílá');
echo $obj;
Původní objekt byl nahrazen novým, atributy vloženy konstruktorem a getter nahrazen metodou __toString(), která udělá i potřebné výstupní formátování. Takový objekt se dá bez problémů místo echa přímo strčit do výstupní šablony.
Jednou definované objekty už zpravidla neměním. Je to jen příklad, jak se dá udělat elegantní viewer.
__set( $name , $value )
$this->foo = value; // zavolá __set('foo', value)
echo $this->foo; // zavolá __get('foo')
Tiskni
Sdílej: