Byla vydána nová stabilní verze 6.11 (YouTube) multiplatformního frameworku a GUI toolkitu Qt. Podrobný přehled novinek v poznámkách k vydání.
Ubuntu 26.04 patrně bude ve výchozím nastavení zobrazovat hvězdičky při zadávání hesla příkazu sudo, změna vychází z nové verze sudo-rs. Ta sice zlepší použitelnost systému pro nové uživatele, na které mohlo 'tiché sudo' působit dojmem, že systém 'zamrzl' a nijak nereaguje na stisky kláves, na druhou stranu se jedná o možnou bezpečnostní slabinu, neboť zobrazování hvězdiček v terminálu odhaluje délku hesla. Původní chování příkazu sudo
… více »Projekt systemd schválil kontroverzní pull request, který do JSON záznamů uživatelů přidává nové pole 'birthDate', datum narození, tedy údaj vyžadovaný zákony o ověřování věku v Kalifornii, Coloradu a Brazílii. Jiný pull request, který tuto změnu napravoval, byl správcem projektu Lennartem Poetteringem zamítnut s následujícím zdůvodněním:
… více »Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 163 (pdf).
Eric Lengyel dobrovolně uvolnil jako volné dílo svůj patentovaný algoritmus Slug. Algoritmus vykresluje text a vektorovou grafiku na GPU přímo z dat Bézierových křivek, aniž by využíval texturové mapy obsahující jakékoli předem vypočítané nebo uložené obrázky a počítá přesné pokrytí pro ostré a škálovatelné zobrazení písma, referenční ukázka implementace v HLSL shaderech je na GitHubu. Slug je volným dílem od 17. března letošního
… více »Sashiko (GitHub) je open source automatizovaný systém pro revizi kódu linuxového jádra. Monitoruje veřejné mailing listy a hodnotí navrhované změny pomocí umělé inteligence. Výpočetní zdroje a LLM tokeny poskytuje Google.
Cambalache, tj. RAD (rapid application development) nástroj pro GTK 4 a GTK 3, dospěl po pěti letech vývoje do verze 1.0. Instalovat jej lze i z Flathubu.
KiCad (Wikipedie), sada svobodných softwarových nástrojů pro počítačový návrh elektronických zařízení (EDA), byl vydán v nové major verzi 10.0.0 (𝕏). Přehled novinek v příspěvku na blogu.
Letošní Turingovou cenu (2025 ACM A.M. Turing Award, Nobelova cena informatiky) získali Charles H. Bennett a Gilles Brassard za základní přínosy do oboru kvantové informatiky, které převrátily pojetí bezpečné neprolomitelné komunikace a výpočetní techniky. Jejich protokol BB84 z roku 1984 umožnil fyzikálně zaručený bezpečný přenos šifrovacích klíčů, zatímco jejich práce o kvantové teleportaci položila teoretické základy pro budoucí kvantový internet. Jejich práce spojila fyziku s informatikou a ovlivnila celou generaci vědců.
Firefox 149 dostupný od 24. března přinese bezplatnou vestavěnou VPN s 50 GB přenesených dat měsíčně (s CZ a SK se zatím nepočítá) a zobrazení dvou webových stránek vedle sebe v jednom panelu (split view). Firefox Labs 149 umožní přidat poznámky k panelům (tab notes, videoukázka).
WML jazyk Wesnothu je dost podivný, špatně zdokumentovaný a proto obtížně použitelný, je to jen pro silné povahy. Podivná je i práce s proměnnými, které se věnuje tento zápisek. Vzhledem k mlhavým informacím roztroušených náhodně po celé wiki wesnothu se může stát, že zde budu psát bludy.
Proměnnou lze nastavit pomocí elementu [set_variable]. Například to co se v ostatních jazyích udělá takto:
promenna = "hodnota"
se ve WML dělá takto:
[set_variable]
name=promenna
value="hodnota"
[/set_variable]
Protože je to dlouhé, existuje i předdefinované makro, které to trochu zjednodušuje. Pomocí makra se to samé udělá takto:
{VARIABLE promenna "hodnota"}
Pozor, nastavení proměnné funguje jen v eventu, jinde se proměnné nastavit nedají. Tahle veledůležitá informace není nikde napsaná, takže klidně strávíte několik hodin rvaním si vlasů, jak to že vám nic nefunguje. Tohle a podobné špeky způsobuje, že se do tohoto obskurního jazyku snažím proniknout už asi po třetí s tím, že se vždycky naštvu, že na tohle nemám nervy a čas se dá ztrácet i příjemnějším způsobem.
Ve WML je možno proměnné jakoby objektově skládat, protože proměnná může fungovat i jako kontejner pro další proměnné. Lze tak mít například proměnou souradnice, která obsahuje proměnné x a y.
[set_variable]
name=souradnice.x
value=10
[/set_variable]
[set_variable]
name=souradnice.y
value=20
[/set_variable]
Pole je ve WML proměnná, která obsahuje jiné proměnné s číselným indexem, podle kterého pak lze procházet v cyklu. Ukázka definice pole:
[set_variable]
name=pole[0].x
value=10
[/set_variable]
[set_variable]
name=pole[1].x
value=12
[/set_variable]
[set_variable]
name=pole[2].x
value=14
[/set_variable]
[set_variable]
name=pole[2].y
value=10
[/set_variable]
Pozor, na rozdíl od jiných jazyků pole[1] nemůže obsahovat hodnotu, je to jen kontejner pro jednu nebo více dalších proměnných. Nelze tedy mít jen "name=pole[1]".
Každé pole má speciální atribut lenght, v kterém je uveden počet prvků pole.
Proměnnou je možno měnit, předávat, odstranit a nebo použít její hodnotu.
Proměnná se mění stejně jako se definuje nová.
Proměnnou je možno předat například jako parametr makru nebo některým speciálním atributům pro práci s proměnnou místo její hodnotou. Proměnná se předává svým názvem. Například předání proměnné promenna makru MAKRO:
{MAKRO promenna}
Pro smazání proměnné je k dispozici element [clear_variable]. Protože všechny nesmazané proměnné se musí ukládat do sejvů a zabírají místo v paměti, je velmi vhodné všechny pomocné a dočasné proměnné po použití smazat. Příklad smazání proměnné promenna:
[clear_variable]
name=promenna
[/clear_variable]
Mimochodem, tohle je i příklad předání proměnné atributu.
K této akci je pro zkrácení zápisu rovněž předdefinováno makro CLEAR_VARIABLE:
{CLAER_VARIABLE promenna}
Obecně se hodnota proměnné získá použitím znaku $. Tedy asi nějak takto:
{VARIABLE text "Hello world!"}
[message]
speaker=narrator
message="Text je $text"
[/message]
{CLEAR_VARIABLE text}
Použití $ se ve WML také říká substituce. Aby to nebylo jednoduché, WML rozlišuje tři různé druhy substituce. Jaký druh substituce se použije nezávisí na uživateli, ale je dán atributem u kterého se proměnná používá, tudíž je nutno to konkrétně o každém atributu vědět. Tyto tři substituce jsou: literal, simple a complex.
Literal znamená žádná substituce. U takového atributu se proměnná hodnotou nenahradí. Atribut získá hodnotu názvu proměnné i se znakem $, nikoli její hodnotu. Jinými slovy, u takového atributu nejde proměnnou použít.
Tato substituce je použita v elementu [set_variable] u atributu literal.
Simple znamená, že proměnná se rozezná a nahradí hodnotou jen když není v řetězci nebo je na jeho začátku. Tedy znak $ následuje hned za znakem ".
Tato substituce je použita všude, kde se nepoužívá literal ani complex.
Complex znamená, že proměnná se rozezná a nahradí hodnotou kdekoli v řetězci, jako je tomu u výše uvedené ukázky.
Tato substituce se používá:
Je-li u nějakého atributu simple substituce a vy potřebujete complex substituci, pak si musíte vypomoci pomocnou proměnnou vytvořenou pomocí [set_variable] a atributů name a format.
Pokud potřebujete substituovat proměnnou tak, aby za ní mohl hned následovat text, je si možno vypomoci znakem | a ukončit jím název proměnné. Například takto:
[message]
message="Pozor, právě jsem zahlédnul $rasa|!"
[/message]
Když ho budete používat vždycky, nemusíte se učit pravidla, ktará říkají, kdy ho potřeba je a kdy není, tj. před kterými znaky se rozezná konec proměnné automaticky. S tím souvisí i možnost vloření samotného znaku $ do řetězce, provede se to takto: "Upgrade stojí 100 $|".
WML umožňuje, aby název proměnné byl vytvořen pomocí jiné proměnné. Například mějme proměnné rasa, zlato_elfova a zlato_trpaslici. Pak je možno použít syntaxe "$zlato_$rasa||" k získání obsahu druhé nebo třetí proměnné podle toho, zda proměnná rasa má hodnotu etfove nebo trpaslici.
Procházení polem je trochu složitější, ale naštěstí pro to existují dvě předdefinovaná makra FOREACH a NEXT, která to zjednodušují. S jejich pomocí lze realizovat procházení polem takto:
{FOREACH pole i}
[message]
message="X a Y je $pole[$i].x $pole[$i].y"
[/mesage]
{NEXT i}
Nedefinovaná proměnná se rovná nedefinovanné proměné, nebo proměnné s hodnotou prázdný řetězec.
{VARIABLE def_a ""}
{VARIABLE def_b 0}
# TRUE
[if]
[variable]
name=undef
equals=$none
[/variable]
[then]
[message]
speaker=narrator
message="undef"
[/message]
[/then]
[/if]
# TRUE
[if]
[variable]
name=def_a
equals=$none
[/variable]
[then]
[message]
speaker=narrator
message="def_a"
[/message]
[/then]
[/if]
# FALSE
[if]
[variable]
name=def_b
equals=$none
[/variable]
[then]
[message]
speaker=narrator
message="def_b"
[/message]
[/then]
[/if]
Tiskni
Sdílej: