Nizozemská vláda ve snaze šetřit a zvyšovat efektivitu s využitím umělé inteligence (AI) hodlá zrušit asi 25.000 pracovních míst ve státní správě. Cílem je postupně dosáhnout ročních úspor až 3,5 miliardy eur (85,2 miliardy Kč). Na konci loňského roku ve státní správě pracovalo rekordních 160.000 lidí. „Nemůžeme pokračovat v tom, co jsme dělali dosud,“ uvedl státní tajemník pro efektivní fungování vlády Eric van den Burg. „Proto
… více »Příspěvek na blogu PRUSA 3D představuje fotoaparát CAIM1 (Counter Artificial Intelligence Machine 1). Uměle vytvořený obsah je každým dnem těžší rozeznat od skutečných záběrů či fotografií, což podrývá důvěryhodnost žurnalistiky, archivních materiálů i každodenní tvorby obsahu. Fotoaparát CAIM1 byl vyvinut právě k tomu, aby ověřoval původ fotografií a videí přímo během jejich pořizování. Uvnitř fotoaparátu se nachází hardwarová Web3 peněženka se zabezpečovacím čipem Tropic Square TROPIC01.
Jonathan Thomas oznámil vydání nové verze 4.1 video editoru OpenShot (Wikipedie). Zdrojové kódy OpenShotu jsou k dispozici na GitHubu. Ke stažení je i balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo na spouštění a spustit.
Při běžné migraci virtuálního stroje mezi hypervizory se jeho MAC adresa přesune na jiný leaf switch. EVPN tuto změnu distribuuje pomocí BGP Type-2 route a MAC mobility sequence number. Problém nastává, pokud útočník podvrhne zdrojovou MAC adresu jiného zařízení. Leaf může změnu interpretovat jako legitimní přesun MAC a rozšířit ji přes BGP do celé fabric. Výsledkem může být přesměrování provozu určeného původnímu zařízení. Autor článku rozebírá možnosti detekce pomocí sledování MAC moves, BGP route reflektorů a kontroly na přístupové vrstvě.
Vývojáři desktopového prostředí Enlightenment (Wikipedie) a souvisejících knihoven Enlightenment Foundation Libraries (EFL) vydali nové verze. Enlightenment byl vydán ve verzi 0.28.0 a Enlightenment Foundation Libraries ve verzi 1.29.
Cloudflare zjistil, že některé odpovědi modelu GLM-5.3 obsahovaly části dat z předchozích požadavků jiných zákazníků. Příčinou byla kombinace chybné konfigurace a chyby v inference enginu SGLang. Model podporoval kontextové okno 1 048 576 tokenů, ale GPU KV cache pool měl kapacitu pouze 681 280 tokenů. Při překročení kapacity docházelo k nesprávnému zpracování odmítnutého požadavku. Decode část systému následně pracovala se starými
… více »Vývojáři Knot Resolver vysvětlují, jak změnili rozhodování o tom, které DNS záznamy ponechat v cache a které odstranit. Článek obsahuje skutečná měření: devět hodin DNS provozu při 2 000 QPS, srovnání cache o velikosti 25 MB a 40 GB a také porovnání s BIND 9, kromě algoritmů obsahuje konkrétní doporučení pro konfiguraci a diagnostiku.
Největší kryptoměnová burza světa Binance se stala terčem útoku, při kterém podvodníci odcizili během několika minut kryptoměny v hodnotě přibližně 6,3 miliardy dolarů. Jedná se o největší kryptoměnovou krádež v historii, přibližně čtyřikrát větší než loňský útok na burzu Bybit. Binance se podařilo ve spolupráci s partnery zmrazit aspoň aktiva v hodnotě zhruba 3 miliard dolarů a slíbila, že veškeré ztráty pokryje z vlastních prostředků.
Zranitelnost CVE-2026-98432 s CVSS 9.8 odhalila AI od společnosti Anthropic. Jedná se o kritickou chybu v implementaci MPTCP (multipath TCP). Debian vydal patche 16.10. a 22.10., ale např. Ubuntu je zatím bez opravy. Více informací na The Hacker News.
Na Slovensku vznikla úplne nová rally hra, ktorá je zadarmo a funguje vo Windowse, Linuxe či na Macu. Greenie Rally má viac ako 50 tratí a vozidiel, šampionáty či turnaje. Má retro feeling a imituje automobilové hry z prelomu tisícročí. Vyskúšate prejsť všetky mapy na Škode 130RS?
V minulosti jsem psal článek o barvičkách v terminálu a o tom jak si nastavit vzhled promptu v Bashi. Tohle je tip, který s tím úzce souvisí – jak udělat, aby příkaz za promptem měl jinou barvu, než je výchozí barva textu v terminálu (aniž by to ovlivnilo výstup spouštěného příkazu).
UPDATE: S odstupen času jsem bohužel našel vedlejší efekt, kvůli kterému je to prakticky nepoužitelné. Článek tu nechám, ale nedoporučuji to nastavovat. V posledním odstavci vysvětluji o co jde.
Ten dodatek v závorce je klíčový, protože k té první části se dovtípí asi každý, už jen proto, že při počátečním experimentováním s barvami se to člověku může přihodit nechtěně – stačí, když se nenastaví výchozí neutrální barva pomocí speciální escape sekvence a další příkaz, který napíšete, včetně jeho výstupu (pokud sám nenastavuje barvy) má poslední nastavenou barvu / styl.
Pokud nevíte o čem mluvím, zkuste si v bashi spustit tohle:
unset PROMPT_COMMAND export PS1="\[\e[0m\]$PS1\[\e[36;1m\]"
a potom napište a spusťte třeba:
echo Test
Pokud nemáte nějaký speciálně nastavený terminál, tak byste měli vidět příkaz i jeho výstup zbarvený do tyrkysova.
Jenže záhada pro mě byla jiná věc – jak to udělat, aby se barva hned po potvrzení příkazu změnila na původní?
Našel jsem na to poměrně elegantní trik na superuser.com. Ano, je to oblezlička, ale funguje mi docela spolehlivě. Je potřeba nastavit, aby bash odchytával a reagoval na signál DEBUG, který sám vysílá při každém odenterování příkazu. A reagovat bude samozřejmě tím, že nastaví zase barvu na výchozí.
trap 'echo -ne "\e[0m"' DEBUG
Přidejte si do ~/.bashrc tohle:
trap 'echo -ne "\e[0m"' DEBUGa podle toho, zda si nastavujete PS1 sami dynamicky pomocí PROMPT_COMMAND, anebo používáte statický prompt, tak si upravte nastavení proměnné PS1. Pokud nevíte, co jsem to právě napsal, tak zkuste pod ten
trap do ~/.bashrc přidat ještě řádek:
export PS1="\[\e[0m\]$PS1\[$(tput bold)\]"
Spuštěním nové instance bashe ověřte, zda to funguje správně. Měl by být obarvený (resp. v tomto případě tučný) pouze příkaz, který zadáváte a ne jeho výstup.
Když máte barevný prompt, tak není problém najít v jednolitém výstupu místo, kde to celé začíná, tak proč se obtěžovat s obarvováním příkazu? Když často spouštíte dlouhé a komplikované příkazy, tak vyvstane nový problém – i když najdete začátek příkazu, tak je někdy obtížné najít jeho konec, protože ten může splývat s výstupem příkazu. Když si příkaz obarvíte či zvýrazníte, odlišíte jej pak na první pohled.
Přečtěte si i diskuzi, jsou tam další tipy. Např. je potřeba upravit i PS2 (tj. prompt druhé a další řádky příkazu, který se vypíše např. když odenterujete příkaz končící znakem \ anebo když neuzavřete text apostrofech/uvozovkách), nemá-li být její text zvýrazněný.
export PS2="\[\e[0m\]$PS2\[$(tput bold)\]"A ještě jeden poznatek:
tput sice zjednodušuje vkládání některých sekvencí, ale nepoužívejte ho v PROMPT_COMMANDu (resp. v souboru, který sourcuje), protože by to zbytečně forkovalo při každým zobrazení promptu.
Bohužel jsem našel jeden hodně nepříjemnej vedlejší efekt, když jsem si nějakým cyklem v bashi generoval výstup, který jsem pak přesměroval do souboru. V tomto souboru se pak objevila část barevné escape sekvence, která tam samozřejmě neměla co dělat. Takže to není tak skvělé, jak jsem si na začátku myslel.
Tiskni
Sdílej:
Pěkný hack, ale má to jednu drobnou vadu – když mačkám enter, aniž bych psal nějaký příkaz, mám tučně i prompt (nevyšle se DEBUG signál, který by nastavil písmo na normální).
Snadná oprava:
export PS1="\e[0m$PS1\[$(tput bold)\]" trap 'echo -ne "\e[0m"' DEBUG
$(), protože forkuje při každým zobrazení PS1, 2) PS2 je bold, ale ne že by to vadilo, dá se to samozřejmě pořešit...
export PS1="\e[0m$PS1\e[1m" export PS2="\e[0m$PS2\e[1m" trap 'echo -ne "\e[0m"' DEBUG
PROMPT_COMMAND se evaluuje (to je krásný češtin
) v původním procesu, takže pokud tam člověk nenacpe $(), tak by forkovat neměl...
GREEN="\e[1;32m"
RED="\e[1;31m"
WHITE="\e[m"
EXIT_COLOR(){
printf -- "$(_dir_chomp "$(pwd)" 40),"
[[ 0 == "$1" ]] && printf -- "$GREEN$1" || printf -- "$RED$1";
printf -- "$WHITE$"
}
_dir_chomp () {
local IFS=/ c=1 n d
local p=(${1/#$HOME/\~}) r=${p[*]}
local s=${#r}
while ((s>$2&&c<${#p[*]}-1))
do
d=${p[c]}
n=1;[[ $d = .* ]]&&n=2
((s-=${#d}-n))
p[c++]=${d:0:n}
done
printf -- "${p[*]}"
}
PS1='\u:$(EXIT_COLOR $?) '
PROMPT_COMMAND, kde se vyhneš těm subshellům. Mam to takhle:
_ret_ok=$(echo -e '\e[0;32m✔\e[0m')
_ret_bad=$(echo -e '\e[0;31m✖\e[0m')
PROMPT_COMMAND='[ $? -eq 0 ] && _ret="$_ret_ok" || _ret="$_ret_bad$?";'
PS1=' ${_ret} \D{%H:%M} \e[0;32m\u\e[0m \w \$ \e[1m'
PS2='\e[0m> \e[1m'
Screenshot.
Do _ret_ok bych ještě přidal mezeru, aby to bylo zarovnané. A chybí mi tam název stroje.
printf "%3d" $exitcode nebo něco takovýho.
Nebo to jde líp?
_ret_ok=$'\e[0;32m✔\e[0m' _ret_bad=$'\e[0;31m✖\e[0m'
GREEN="\e[1;32m"
RED="\e[1;31m"
WHITE="\e[m"
DIR_CHOMP(){
local IFS=/ c=1 n d
local p=(${1/#$HOME/\~}) r=${p[*]}
local s=${#r}
while ((s>$2&&c<${#p[*]}-1))
do
d=${p[c]}
n=1;[[ $d = .* ]]&&n=2
((s-=${#d}-n))
p[c++]=${d:0:n}
done
printf -- "${p[*]}"
}
EXIT_COLOR(){
DIR_CHOMP "$PWD" 40
printf -- ","
[[ 0 == "$1" ]] && printf -- "$GREEN$1" || printf -- "$RED$1";
printf -- "$WHITE$"
}
PS1='\u:`EXIT_COLOR $?` '
Zdá se mi to subjektivně rychlejší.
Proč funkce EXIT_COLOR() řeší adresáře? Minimálně bych ji přejmenoval na něco výstižnějšího, když už to má být takhle v jedné funkci.
Proč funkce EXIT_COLOR() řeší adresáře? Minimálně bych ji přejmenoval na něco výstižnějšího, když už to má být takhle v jedné funkci.Funkce
EXIT_COLOR() neřeší adresáře, řeší výpis $? + barvy. To volání adresářové funkce je nutné z EXIT_COLOR(), protože kdyby došlo k volání DIR_CHOMP() dříve, tak už by se nedostala k return value. Šla by tam přidat ještě třetí funkce, která to všechno poskládá dohromady, ale to už se mi zdá zbytečné.
Jinak to chce místo PS1='\u:`EXIT_COLOR $?` 'použít
PS1='\u:\[`EXIT_COLOR $?`\] 'jinak to silně blbne na konci řádku.
To volání adresářové funkce je nutné z EXIT_COLOR(), protože kdyby došlo k volání DIR_CHOMP() dříve, tak už by se nedostala k return value.
Však ona ta struktura může zůstat stejná, jen bych to prostě přejmenoval – když si čtu PS1 a vidím tam nějaký EXIT_COLOR $?, tak čekám, že to asi vypíše obarvený kód – a ejhle, ono to dělá ještě něco jiného. Tady na tom až tolik nesejde, protože je to kód na pár řádků resp. člověk to vidí hned nad tím, co to dělá, ale stejně…
\[blabla\] platí pro všechny barvy, i ty co máš definovaný výše, dělá to jinak nepředvídatelnej bordel (např. se nemůžeš vrátit kurzorem na začátek příkazu vytaženýho z historie a podobný prasečiny).
On by ale neměl počítat jen ty řídící sekvence, jiné znaky (text) ano.
Jak by mělo správně vypadat tohle?
export PS1="\e[0m$PS1\e[1m" export PS2="\e[0m$PS2\e[1m" trap 'echo -ne "\e[0m"' DEBUG
(to mi právě rozbilo editaci příkazů vytažených z historie)
GREEN="?\e[1;32m?"
RED="?\e[1;31m?"
WHITE="?\e[0m?"
DIR_CHOMP(){
local IFS=/ c=1 n d
local p=(${1/#$HOME/\~}) r=${p[*]}
local s=${#r}
while ((s>$2&&c<${#p[*]}-1))
do
d=${p[c]}
n=1;[[ $d = .* ]]&&n=2
((s-=${#d}-n))
p[c++]=${d:0:n}
done
echo -ne "${p[*]}"
}
EXIT_COLOR(){
DIR_CHOMP "$PWD" 40
echo -n ","
[[ $1 == 0 ]] && echo -ne "$GREEN$1" || echo -ne "$RED$1";
echo -ne "$WHITE"
}
COMMAND_PROMPT=
PS1='\u:`EXIT_COLOR $?`\$ '
Podstatná je změněná definice
GREEN="?\e[1;32m?" RED="?\e[1;31m?" WHITE="?\e[0m?"To sice může vypadá stejně, ale hned za/před uvozovkama jsou vložené znaky s ASCII kódem 1 a 2, které dělají to samé co \[ resp. \], které se ale nedají vložit do toho volání funkce (zkoušel jsem všechno možné, nedají - vypadá to, že PS1 unescapuje ty znaky ještě před tím, než zavolá tu funkci, takže tam potom už nejsou). Pokud se nepodaří HTML přenos, tak si je můžete vyrobit v interaktivním pythonu stylem:
>>> print ">%s<" % chr(1) >?< >>> print ">%s<" % chr(2) >?<Zkopírovat a potom ručně odmazat > a <.
export PROMPT_COMMAND='. ~/.prompt'v ~/.prompt:
#!/bin/bash
S=$?
END="\[\e[0m\]"
RED="\[\e[31;1m\]"
CYAN="\[\e[36;1m\]"
GREEN="\[\e[32;1m\]"
YELLOW="\[\e[33;1m\]"
if [[ $S -eq 0 ]]; then
DOLLAR="${YELLOW}\$"
else
DOLLAR="${RED}\$"
fi
PS1="${CYAN}\u${END}@${RED}\h${END} ${GREEN}\w${END} ${DOLLAR}${END} "
Vyhneš se subshellům a problémům s escapováním.
export PS1="\[\e[0m\]$PS1\[\e[1m\]" export PS2="\[\e[0m\]$PS2\[\e[1m\]"mezi \[ \] a včetně se nezeapočítívá, takže pokud to nemá šířku, musí se to mezi to zavřít…
Tak jsem narazil ještě na jeden problém:
$ echo ahoj ahoj $ (echo ahoj) ahoj $ (echo ahoj); ahoj $ time (date); echo ahoj So čen 7 21:26:45 CEST 2014 real 0m0.003s user 0m0.000s sys 0m0.003s ahoj
Výpisy po závorkách jsou tučně, i když by neměly.
Dík.
Mimochodem, ten, kdo vymejšlel escape sekvence, musel imho jet na nějakejch drogách (typuju nějaký amfetaminy), jsou totálně ulítlý.
Například nasledující sekvence přesune kurzor o 3 znaky doprava: \e[3C. Teď záludná otázka: O kolik přesune znak sekvence \e[0C? Správně tušíte, že nula není správná odpověď, protože 0 = "chci default" a pro sekvenci CSI C je default 1, takže to přesune znak o 1 doprava. Aby to bylo zábavnější, různé sekvence mají různé defaulty, někdy 0, někdy 1, myslimže nějaká sekvence má dokonce default 100.
Je ovšem možné vymyslet i mnohem zábavnější sekvence, např. tohle:
echo -e '\e7\e[2\e[?2l\eH\eC\e<\e[2K\e[7m\e+0\eo`\en HAHA \eo`\e8'
Jen tak vod voka říct, co tohle dělá, není úplně jednoduchý. Ale vyzkoušejte, nedělá nic špatnýho...
\e8 (GTK VTE-based terminály)