Byl vydán Mozilla Firefox 146.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 146 bude brzy k dispozici také na Flathubu a Snapcraftu.
Před rokem převzala Digitální a informační agentura (DIA) vlastnictví a provoz jednotné státní domény gov.cz. Nyní spustila samoobslužný portál, který umožňuje orgánům veřejné moci snadno registrovat nové domény státní správy pod doménu gov.cz nebo spravovat ty stávající. Proces nové registrace, který dříve trval 30 dní, se nyní zkrátil na několik minut.
IBM kupuje za 11 miliard USD (229,1 miliardy Kč) firmu Confluent zabývající se datovou infrastrukturou. Posílí tak svoji nabídku cloudových služeb a využije růstu poptávky po těchto službách, který je poháněný umělou inteligencí.
Nejvyšší správní soud (NSS) podruhé zrušil pokutu za únik zákaznických údajů z e-shopu Mall.cz. Incidentem se musí znovu zabývat Úřad pro ochranu osobních údajů (ÚOOÚ). Samotný únik ještě neznamená, že správce dat porušil svou povinnost zajistit jejich bezpečnost, plyne z rozsudku dočasně zpřístupněného na úřední desce. Úřad musí vždy posoudit, zda byla přijatá opatření přiměřená povaze rizik, stavu techniky a nákladům.
Organizace Free Software Foundation Europe (FSFE) zrušila svůj účet na 𝕏 (Twitter) s odůvodněním: "To, co mělo být původně místem pro dialog a výměnu informací, se proměnilo v centralizovanou arénu nepřátelství, dezinformací a ziskem motivovaného řízení, což je daleko od ideálů svobody, za nimiž stojíme". FSFE je aktivní na Mastodonu.
Paramount nabízí za celý Warner Bros. Discovery 30 USD na akcii, tj. celkově o 18 miliard USD více než nabízí Netflix. V hotovosti.
Nájemný botnet Aisuru prolomil další "rekord". DDoS útok na Cloudflare dosáhl 29,7 Tbps. Aisuru je tvořený až čtyřmi miliony kompromitovaných zařízení.
Iced, tj. multiplatformní GUI knihovna pro Rust, byla vydána ve verzi 0.14.0.
FEX, tj. open source emulátor umožňující spouštět aplikace pro x86 a x86_64 na architektuře ARM64, byl vydán ve verzi 2512. Před pár dny FEX oslavil sedmé narozeniny. Hlavní vývojář FEXu Ryan Houdek v oznámení poděkoval společnosti Valve za podporu. Pierre-Loup Griffais z Valve, jeden z architektů stojících za SteamOS a Steam Deckem, v rozhovoru pro The Verge potvrdil, že FEX je od svého vzniku sponzorován společností Valve.
Byla vydána nová verze 2.24 svobodného video editoru Flowblade (GitHub, Wikipedie). Přehled novinek v poznámkách k vydání. Videoukázky funkcí Flowblade na Vimeu. Instalovat lze také z Flathubu.
Právě začíná dlouho slibovaný seriál pro programátory, kteří se chtějí
dozvědět něco více o tom, jak je AbcLinuxu napsáno a jak funguje. Kdoví,
pokud bude zájem, možná i zveřejním zdrojové kódy a umožním na něm
pracovat i případným dobrovolníkům. Nápadů na vylepšení mám spousty, ale
času málo
.
AbcLinuxu
je naprogramováno v Javě na základě
vybraných J2EE techologií za použití moderních programátorských přístupů.
Architektura je postavena na pull variantě MVC (Model-View-Controller)
patternu. MVC je léty prověřený přístup k vývoji GUI aplikací, kdy aplikace
je rozdělena na tři části. Model reprezentuje data, View slouží pro
interakci s uživatelem a Controller je zodpovědný za zpracování
uživatelských požadavků. Pull varianta je jeho rozšířením, ve kterém
Controller tlačí data do View, takže ve View máte přístup jen k těm datům,
které vám Controller zpřístupní.
Model je postaven na základě objektů majících společného předka -
GenericObject. Tato data jsou ukládána přes JDBC do databáze
MySQL. Pro zvýšení rychlosti je na vrstvu persistence navázána
transparentní cache.
Jako View v současnosti slouží knihovna Velocity, ale kvůli jejím nedostatkům a nulovému vývoji přecházím na FreeMarker. Obě knihovny definují svůj vlastní programovací jazyk, který se podobně jako PHP zapisuje přímo do html souborů. Jazyky jsou velice jednoduché, koneckonců šablony (jak se kombinaci html a těchto jazyků říká) by měli vytvářet designeři, nikoliv programátoři.
Konečně poslední zásadní částí architektury je Controller. Zde se jedná o několik desítek servletů. Ty mají na starost zkontrolovat vstup od uživatelů (HTTP request), zpracovat jej (například uložit komentář či vytáhnout článek z databáze), zvolit šablonu a vykonat šablonu. Její výstup je pak vrácen prohlížeči.
V dnešním díle se budeme hlouběji zabývat modelem. Nejdříve se pokusím vysvětlit své cíle a požadavky, aby bylo jasné, proč model vypadá zrovna takto.
Když jsem propgramoval AbcLinuxu, měl jsem již dostatek zkušeností s projektem Linux Hardware. Tento projekt umožňoval ukládat hardwarové záznamy do stromové struktury a později bylo přidáno diskusní fórum. Databáze byla naprogramována účelově a pro každou novou službu bylo nutno přidat nové tabulky. Vytváření vazeb mezi tabulkami bylo velmi obtížné. Neexistovala žádná separace do MVC a jedna php stránka měla na starost jak manipulaci, tak zobrazování dat. Proto přidávání nových služeb bylo prakticky nemožné.
Mým hlavním požadavkem tedy byla maximální flexibilita. Chtěl jsem mít
možnost vytvářet vazby mezi libovolnými objekty, snadno přidávat nové
služby a upravovat existující objekty. Mou noční můrou z časů Linux Hardware bylo, když po mně
někdo chtěl přidat další údaj k hardwarovým záznamům. Znamenalo by to
úpravu tabulky v databázi a kontrolu všech databázových příkazů. Proto jsem
se rozhodl, že vlastní data budou uložena v podobě XML, v tabulce
reprezentované jako BLOB. Takto mám zachovánu zpětnou i dopřednou
kompatibilitu
.
Z Linux Hardware se mi osvědčilo členění dat do stromu. Například
Procesory / Intel / Pentium III / Pentium III 750 MHz. Proto jsem chtěl
tuto vlastnost nejen zachovat, ale vytvořit ji univerzálněji. Abych mohl
vytvořit vazby mezi libovolnými objekty, i těmi, které ještě neexistují. V
Linux Hardware byly tyto vztahy natvrdo zapsány do tabulek. Například
záznam měl jako políčko číslo položky, položka zase obsahovala číslo
kategorie, ve které je umístěna. Ale co když jsem chtěl mít jednu položku
ve dvou kategoriích? Řešením je nový objekt Relation.
Každý objekt modelu je potomkem GenericObjectu. Proto
všechny objekty sdílejí jeho vlastnosti. GenericObject má dvě
hlavní vlastnosti (properties). Prvním z nich je id. Jedná se
o identifikátor objektu, který spolu s třídou jednoznačně objekt
identifikuje. Druhou vlastností je content, což je seznam
relací, ve kterých je objekt předkem. Relation je objekt
definující vztah mezi dvěma objekty. Každý objekt tedy může mít libovolný
počet libovolných potomků, stačí vytvořit mezi nimi relaci. Jedná se o
Composite pattern.
Na následujícím obrázku je zobrazen UML diagram tříd v AbcLinuxu.
Než se dostanu k detailnějšímu popisu jednotlivých tříd, měl bych se
zmínit o způsobu, jak je řešeno XML. Jak jsem se již zmínil, v databázi je
XML uložen jako blob data. Třídy, které jej používají, musí
implementovat rozhraní XMLContainer. Takto získávám uniformní
přístup ke stejným datům. Protože pětkrát implementovat stejnou
funkcionalitu je nesmysl, vytvořil jsem třídu XMLHandler a
zmíněné třídy (User, Relation,
Category, Item a Record) ji
používají (viz asociativita v class diagramu). XML je fyzicky realizováno
pomocí stromu knihovny DOM4J.
GenericDataObject je společný předek tříd
Category, Item a Record. Kromě
instance XMLHandleru obsahuje vlastnosti owner
(id vlastníka), type (dělení na podtypy) a datumy
created a updated (kdy byl objekt vytvořen,
respektive naposledy upraven). Category reprezentuje jednu
sekci stromu, Item zase položku (hlavička článku, položka
hardwaru apod). Konečně Record reprezentuje jeden záznam,
jedná se vždy o list stromu a je potomkem Item.
User uchovává uživatelské profily. Z důvodu lepší
efektivity a přehlednosti jsou některé jeho vlastnosti uloženy mimo XML.
Jedná se o login, name, email a
password. Vše ostatní je v XML. Relation obsahuje
dvě hlavní vlastnosti - parent a child. Náznak
obousměrného seznamu je vytvořen skrze vlastnost upper, která
obsahuje odkaz na rodičovskou relaci. Zbylá data (možnost předefinovat
ikonku či jméno potomka) jsou opět uložena v XML.
Poll je objekt obsahující ankety a v budoucnu i hodnocení
článků. Má dvě logické vlastnosti - multichoice a
closed. Ty určují, zda je povoleno dát hlas více možnostem,
respektive zda je vůbec možné ještě hlasovat. Položky jsou uloženy v
separátním objektu PollChoice. Není to optimální implementace,
ale nechtělo se mi ručně předělávat staré ankety z Linux Hardware. Teď toho
začínám litovat.
Server drží informace o cizích serverech, ze kterých
stahujeme aktuální články. Link obsahuje data o externí
informaci, například nejnovější článek na Rootovi. Můj původní záměr byl
však mnohem širší, chtěl jsem vám dát možnost přidávat URL do systému.
Konečně Data je další nedodělek. V Linux Hardware bylo možné
přidávat k položkám obrázky, například snímek scanneru. Data
byla určen právě pro tyto účely. Bohužel jiné věci měly prioritu.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Diskuse byla administrátory uzamčena
prvni clovek, ktery zacne psat diskusi, ji i vytvori (prazdnou). vsichni ostatni, kteri si pak prohlizeji stranky, uz maji ve formulari cislo diskuse a to se pak nemusi hledat ..
if (diskuze.isEmpty()) resp. prislusnej jspTag? ja vim, ten cas :)
)))
PHP sice neznam, ale myslim, ze nikdy nic :) nemuze nabidnout takovou modularnost, rozsiritelnost, cistej OO navrh a takovy mnozstvi 'standardu' a knihoven jako Java.
Nic mene blackhole.sk je taky velice pekne ;). De o to co obnasi udrzba a vylepsovani situ.
Nehlede na to, ze mam obcas pocit, ze kdyz neco udelam/navrhnu v Jave spatne, tak me po chvilce tak nakope, ze vlastne nakonec je vsecko naprogramovany/navrhnuty dobre :))
Mel jsem cest delat v Jave ale kdyz jsem poznal Python, za nic bych se nevratil. </flame>
Provozuje velky server, tak co na to rekne ???
PS. kazdy, kdo mi navrhuje php, se me dost dotyka. jako byste me nutili presedlat z jaguara do trabantu
po dalsim dile pochopite, ze funkce abclinuxu v php NIKDY nenapisete (aspon ne rozumne brzy).
Jirka> myslim, ze dost dulezita je ta infomace v zavorce - aspon ne rozumne brzy.
Predpokladejme stejne dobry ridice :)
"tlačení" je přece "push", nikoliv "pull. Napadlo mne že jde o pohled ze strany View, ale v té druhé větě je uvedeno explicitně že aktivní komponenta je Controller.