Momo je fenka cavapoo, která svými náhodnými stisky kláves bezdrátové klávesnice vytváří jednoduché počítačové hry. Technicky to funguje tak, že Raspberry Pi s připojenou bluetooth klávesnicí posílá text do Claude Code, který pak v Godotu píše hry a sám je i testuje pomocí screenshotů a jednoduchých simulovaných vstupů. Za stisky kláves je Momo automaticky odměňována pamlsky. Klíčový je pro projekt prompt, který instruuje AI, aby i
… více »GNU awk (gawk), implementace specializovaného programovacího jazyka pro zpracování textu, byl vydán ve verzi 5.4.0. Jedná se o větší vydání po více než dvou letech. Mezi četnými změnami figuruje např. MinRX nově jako výchozí implementace pro regulární výrazy.
Internetový prohlížeč Ladybird ohlásil tranzici z programovacího jazyka C++ do Rustu. Přechod bude probíhat postupně a nové komponenty budou dočasně koexistovat se stávajícím C++ kódem. Pro urychlení práce bude použita umělá inteligence, při portování první komponenty prohlížeče, JavaScriptového enginu LibJS, bylo během dvou týdnů pomocí nástrojů Claude Code a Codex vygenerováno kolem 25 000 řádků kódu. Nejedná se o čistě autonomní vývoj pomocí agentů.
Byl vydán Mozilla Firefox 148.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Nově lze snadno povolit nebo zakázat jednotlivé AI funkce. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 148 bude brzy k dispozici také na Flathubu a Snapcraftu.
Byla vydána nová verze 22.1.0, tj. první stabilní verze z nové řady 22.1.x, překladačové infrastruktury LLVM (Wikipedie). Přehled novinek v poznámkách k vydání: LLVM, Clang, LLD, Extra Clang Tools a Libc++.
X86CSS je experimentální webový emulátor instrukční sady x86 napsaný výhradně v CSS, tedy bez JavaScriptu nebo dalších dynamických prvků. Stránka 'spouští' assemblerovový program mikroprocesoru 8086 a názorně tak demonstruje, že i prosté CSS může fungovat jako Turingovsky kompletní jazyk. Zdrojový kód projektu je na GitHubu.
Po šesti letech byla vydána nová verze 1.3 webového rozhraní ke gitovým repozitářům CGit.
Byla vydána nová verze 6.1 linuxové distribuce Lakka (Wikipedie), jež umožňuje transformovat podporované počítače v herní konzole. Nejnovější Lakka přichází s RetroArchem 1.22.2.
Matematický software GNU Octave byl vydán ve verzi 11.1.0. Podrobnosti v poznámkách k vydání. Vedle menších změn rozhraní jsou jako obvykle zahrnuta také výkonnostní vylepšení a zlepšení kompatibility s Matlabem.
Weston, referenční implementace kompozitoru pro Wayland, byl vydán ve verzi 15.0.0. Přehled novinek v příspěvku na blogu společnosti Collabora. Vypíchnout lze Lua shell umožňující psát správu oken v jazyce Lua.
Potřeboval bych v cyklu načítat hodnoty oddělené nulovým bajtem do proměnných.
Funguje mi tohle -- na každý řádek to vypíše jednu proměnnou:
printf 'a\0b\0c\0d\0' | while read -d '' x; do echo ">$x<"; done(případně
-d $'\0' se chová stejně)
V dokumentaci se ale píše:
-d oddělovač pokračuje, dokud není načten první znak ODDĚLOVAČE namísto nového řádku
Takže pomocí -d to zjevně nepůjde udělat. Zkoušel jsem nastavovat $IFS, ale to nepomohlo. Tohle nefunguje:
printf 'a\0b\0c\0d\0' | while IFS='' read x y; do echo ">$x< >$y<"; done printf 'a\0b\0c\0d\0' | while read -d '' x y; do echo ">$x< >$y<"; done
Potřeboval bych dosáhnout něčeho jako:
printf 'a\0b\0c\0d' | xargs -0 -n2 echo
Tzn. ze vstupu se vezmou dva prvky a ty se zpracují jedním příkazem. Ale chci to mít ve while cyklu, abych tam mohl napsat blok kódu. Proběhly by dva cykly a v každém bych měl naplněné dvě proměnné.
Jde toho nějak dosáhnout pomocí read nebo jiného příkazu? Ano, můžu si to napsat v C jako Bash built-in příkaz :-) ale tohle snad už musel někdo řešit, ne?
P.S. pak je ještě problém, že bez koncového \0 načte read jen tři prvky a čtvrtý zahodí, ale to je relativně detail, mohl bych na konec přidávat \0, i když lepší by bylo, aby to bralo i EOF.
Řešení dotazu:
printf 'a\0b\0c\0d' | xargs -0 -n2 echo | while read x y; do echo "$x" "$y"; done
O tomhle vím (resp. jde to jednodušeji i přes tr \\0 \\n), ale problém je v tom, že když hodnota bude obsahovat znak konce řádku, tak se to rozbije. Proto právě chci pracovat s těmi nulovými bajty, aby tam jinak kromě nich mohlo být cokoli.
No, do jednoho pole asi ne, protože co když má vstup 10 EB…
Každopádně se dá vstup postupně načítat do polí se dvěma prvky.
Tak jsem to už skoro vyřešil :-)
Definuji si funkci:
read_zero() { for v in "$@"; do export $v; read -r -d $'\0' $v; done }
a následně ji použiji místo read:
printf 'a\0b\0c\0d\0' | while read_zero x y; do echo ">$x< >$y<"; done
Jediný problém je, že za poslední hodnotou musí být \0.
Tak se mi pravděpodobně povedlo vyřešit i ten poslední problém:
read_zero() { for v in "$@"; do export "$v"; read -r -d '' "$v" || [ ! -z "${!v}" ]; done }
printf 'a\0b\0c\0d' | while read_zero x y; do echo "x='$x' && y='$y'"; done
# vypíše:
# x='a' && y='b'
# x='c' && y='d'
GNU Bash je hodně mocný nástroj :-)
A z něj by šlo nastavit proměnnou ven?
Jinak v Perlu jsem to dělal také -- přes xargs šlo do Perlu vždy X proměnných a tam se to přes perl -ne '...tady je perlovský skript, klidně i na víc řádků...' zpracovalo (příklad). Ale teď se právě snažím najít způsob, jak to napsat i celé jen v Bashi a aby tam člověk mohl mít blok kódu, ale šlo to napsat i na jeden řádek. Řešení s vlastní funkcí na jeden řádek není, ale zase tu funkci stačí načíst jednou a pak už ji jen používáš.
Nakonec jsem tam ještě nějakou chybu našel: je problém, když poslední hodnota chybí (tzn. byly by tam dva nulové bajty po sobě) a zároveň chybí ten poslední nulový bajt... ale to už budu řešit tak, že poslední nulový bajt prostě chybět nebude :-)
Mně přijde nejjednodušší readarray.
printf 'a\0b\0c\0d' | for ((;;)); do
readarray -d $'\0' -n 2 -t array
((! ${#array[@]})) && break
echo "${array[@]@A}"
done
Nulu na konci to toleruje v pohodě, kdyby tam náhodou byla.
Ještě by to mohlo umět hlásit, když počet záznamů není sudý, něco jako ((1 == ${#array[@]})) && echo 'Ultra-fatal error.' 1>&2.
Díky, tohle je zajímavé řešení. Sice budu používat asi spíš tu svoji funkci, která to naplní do pojmenovaných proměnných, ale tohle je taky užitečné -- ukládám si to do poznámek pro pozdější použití :-)
Tiskni
Sdílej: