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.
Odkazy
Počiatky vývoja ZSH siahajú až do roku 1990. ZSH sa zo štandardných shellov najviac podobá Korn shellu (ksh). Oproti originálu však prináša množstvo vylepšení. V súčasnosti je stále vyvíjaný a v čase písania blogu je aktuálna verzia 5.0.0 vydaná 24. 7. 2012.
Komunita okolo ZSH je veľmi aktívna. Na internete je možné nájsť množstvo hotových konfiguračných súborov. Na internete sú dokonca dostupné celé balíky nastavení pre ZSH. Obrázok je niekedy lepší než tisíc slov, zdĺhavý text nahradím radšej odkazom na wiki stránky tém
Najjednoduchším spôsobom inštalácie v Linuxe bude použitie balíčkovacieho systému. Po inštalácii môžme voliteľne nastaviť štandardný užívateľský shell na zsh príkazom usermod -s /bin/zsh login_užívateľa. Pre vyskúšanie však nemusíme nič nastavovať, stačí zo štandardného shellu spustiť príkaz zsh.
Pri prvom spustení sa zobrazí sprievodca úvodným nastavením. Pre pre nastavenie shellu zvolíme možnosť 1 (Continue to the main menu.). Následne máme možnosť pomocou jednoduchého menu nakonfigurovať základné funkcie zsh:
Po nastavení môžme uložiť konfiguráciu klávesou 0.
Kódy špeciálnych kláves (F1-F12, kurzorové klávesy …) nie sú na všetkých *nix-och rovnaké. Aby bola zaistená kompatibilita ZSH s takmer akýmkoľvek terminálom používa tento shell nástroj zkbd. Pred jeho spustením musíme povoliť automatické načítanie skriptu (autoload zkbd). Až potom môžme spustiť zkbd, ktorý nás prevedie nastavením klávesnice. Zároveň tento nástroj vypíše kód, ktorý by sme mali vložiť do .zshrc:
source ~/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}
# etc.
Vždy pri novom type terminálu, alebo pod iným sedením X by sa mal spustiť nástroj zkbd. Táto činnosť sa dá zabezpečiť automaticky vložením nasledujúceho kódu pred príkaz source.
autoload zkbd
[[ ! -f ${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE} ]] && zkbd
Príkaz autoload oproti source načítava skripty až pri prvom volaní, takže v .zshrc nemá takmer žiadnu réžiu. Skript zkbd sa spúšťa len v prípade, že neexistuje nastavenie pre aktuálny emulátor terminálu a display.
Vo väčšine prípadov nastavenie premennej DISPLAY nebude mať žiaden vplyv na riadiace znaky terminálu. Ak nechceme spúšťať zkbd pre každý DISPLAY zvlášť (čo je obzvlášť nepríjemné u ssh -X) môžme pred spustením zkbd nastaviť DISPLAY na pevnú hodnotu a potom obnoviť pôvodné nastavenie.
_DISPLAY=$DISPLAY
DISPLAY=
autoload zkbd
[[ ! -f ${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE} ]] && zkbd
source ${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}
DISPLAY=$_DISPLAY
unset _DISPLAY
Po nastavení klávesnice sa môžme pustiť do nastavenia klávesových skratiek zle (zle je skratka pre zsh line editor
). Skratky sa priraďujú príkazom bindkey klávesa príkaz. Dostupné príkazy zle sa dajú vypísať pomocou automatického dopĺňania: zle<medzera><tab>. Podrobné informácie o zle je možné nájsť v používateľskej príručke. Nasledujúci kód mám ja v .zshrc za nastavením klávesnice:
[[ -n ${key[Backspace]} ]] && bindkey "${key[Backspace]}" backward-delete-char
[[ -n ${key[Insert]} ]] && bindkey "${key[Insert]}" overwrite-mode
[[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line
[[ -n ${key[PageUp]} ]] && bindkey "${key[PageUp]}" up-line-or-history
[[ -n ${key[Delete]} ]] && bindkey "${key[Delete]}" delete-char
[[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line
[[ -n ${key[PageDown]} ]] && bindkey "${key[PageDown]}" down-line-or-history
[[ -n ${key[Up]} ]] && bindkey "${key[Up]}" up-line-or-search
[[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char
[[ -n ${key[Down]} ]] && bindkey "${key[Down]}" down-line-or-search
[[ -n ${key[Right]} ]] && bindkey "${key[Right]}" forward-char
bindkey "^R" history-incremental-search-backward
Hlavný prompt sa v ZSH nastavuje podobne ako v iných shelloch nastavením premennej PS1, alebo PROMPT.
Pre "hranie" sa s promptom stačí priamo do shellu exportovať premennú PS1. Pre zapamätanie nastavenia promptu sa musí do .zshrc zapísať riadok PS1="…" (kľúčové slovo export tu nie je povinné). Nasledujúci príkaz nastaví prompt na meno@host adresár $ pre aktuálne sedenie.
$ export PS1="%n@%m %~ $ " mirec@kofola ~ $
Kompletný zoznam sekvencií, ktoré pozná ZSH je možné nájsť v manuáli.
Farbu písma je možné zmeniť v ZSH sekvenciou %F{farba} napr. %F{green}. Štandardná farba shellu sa dá obnoviť sekvenciou %f. Tučný rez sa nastavuje sekvenciou %B a zrušiť sa dá sekvenciou %b. Farba pozadia sa nastavuje / obnovuje sekvenciou %K/%k. Nasledujúci kód nastaví prompt podobný štandardnému promptu Gentoo:
export PS1="%B%F{green}%n@%m %F{blue}%~ $%b%f "
Nasledujúci súbor je ukážkový .zshrc, ktorý som vytváral počas písania tohto blogu.
# Lines configured by zsh-newuser-install
HISTFILE=~/.histfile
HISTSIZE=5000
SAVEHIST=5000
setopt appendhistory autocd extendedglob notify
unsetopt beep nomatch
bindkey -v
# End of lines configured by zsh-newuser-install
# The following lines were added by compinstall
zstyle :compinstall filename '/home/kde4/.zshrc'
autoload -Uz compinit
compinit
# End of lines added by compinstall
_DISPLAY=$DISPLAY
DISPLAY=
autoload zkbd
[[ ! -f ${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE} ]] && zkbd
source ${ZDOTDIR:-$HOME}/.zkbd/$TERM-${DISPLAY:-$VENDOR-$OSTYPE}
DISPLAY=$_DISPLAY
unset _DISPLAY
[[ -n ${key[Backspace]} ]] && bindkey "${key[Backspace]}" backward-delete-char
[[ -n ${key[Insert]} ]] && bindkey "${key[Insert]}" overwrite-mode
[[ -n ${key[Home]} ]] && bindkey "${key[Home]}" beginning-of-line
[[ -n ${key[PageUp]} ]] && bindkey "${key[PageUp]}" up-line-or-history
[[ -n ${key[Delete]} ]] && bindkey "${key[Delete]}" delete-char
[[ -n ${key[End]} ]] && bindkey "${key[End]}" end-of-line
[[ -n ${key[PageDown]} ]] && bindkey "${key[PageDown]}" down-line-or-history
[[ -n ${key[Up]} ]] && bindkey "${key[Up]}" up-line-or-search
[[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char
[[ -n ${key[Down]} ]] && bindkey "${key[Down]}" down-line-or-search
[[ -n ${key[Right]} ]] && bindkey "${key[Right]}" forward-char
bindkey "^R" history-incremental-search-backward
PS1="%B%F{green}%n@%m %F{blue}%~ $%b%f "
Dúfam, že som nikoho neunavil konfiguráciou až príliš
Na dnes si už s konfiguráciou dáme pokoj a poďme sa ponoriť do používania ZSH.
Podobne ako väčšina shellov aj ZSH poskytuje históriu posledných príkazov. K tým sa môžme dostať obyčajne pomocou kurzorovej klávesy up. Posledné príkazy je možné editovať buď podobným spôsobom ako v Emacs-e, alebo ako vo vim-e.
V histórii je možné vyhľadávať podobne ako v iných shelloch klávesovou skratkou <Ctrl+r> za predpokladu, že táto skratka bola priradená funkcii history-incremental-search-backward (bindkey "^R" history-incremental-search-backward).
Príkazy sa doplňujú klávesou <tab>. ZSH podporuje aj doplňovanie parametrov podobne ako bash-completion.
kofola% dd <TAB> bs -- block size cbs -- conversion buffer size conv -- specify conversions to apply count -- number of input blocks to copy files -- specify number of input files to copy and concatenate ibs -- input block size if -- specify input file obs -- output block size of -- specify output file seek -- output blocks initially skipped skip -- input blocks initially skipped
Na rozdiel od bash-u si zsh výsledky vyhľadávania po sebe pekne „uprace“ a po pustení príkazu nebude doplňovanie nikde v histórii terminálu.
Doplňovať príkazy je možné aj pomocou jednoduchého menu, stačí pred doplňovaním spustiť príkaz:
zstyle ':completion:*' menu select=0
Príkaz cd je jedným z najpoužívanejších príkazov. ZSH umožňuje úplne eliminovať písanie tohto príkazu svojou funkciou autocd. Aktivuje sa príkazom setopt autocd. Používanie je veľmi jednoduché, stačí do shellu napísať či už lokálnu, alebo absolútnu cestu a stlačiť enter (bez akéhokoľvek cd).
Na začiatku som písal, že som si ZSH vybral hlavne kvôli možnosti zmeny vzhľadu a úpravy správania. Táto téma je príliš rozsiahla na to aby sa vošla do jediného blogu. V nasledujúcom blogu sa pokúsim ukázať ako do ZSH integrovať zvýrazňovanie syntaxe počas písania podobne ako to má fish. Ďalej sa budem venovať použitiu skriptov z projektu oh-my-zsh. Pozrieme sa na niekoľko zaujímavých trikov s promptom ako napr. integráciu VCS, alebo zobrazenie posledného návratového kódu. Zároveň by som rád napísal zopár slov o funkciách ako integrovaný ftp klient, hry …
Tiskni
Sdílej:
Ďakujem za tip.
Jdu se shánět pro z shellu.
Na rozdiel od bash-u si zsh výsledky vyhľadávania po sebe pekne „uprace“ a po pustení príkazu nebude doplňovanie nikde v histórii.
Nevšiml jsem si, že by mi bash při použití autocompletion ukládal do historie něco jiného než příkaz, který jsem nakonec opravdu odeslal.
time (i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done)
atd.
$ time (i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done) real 0m3.343s user 0m3.200s sys 0m0.080s $ time (i=0; while [[ $i -lt 100000 ]]; do i=$((i+1)); done) real 0m1.847s user 0m1.780s sys 0m0.060s $ time (i=0; while [[ $i -lt 100000 ]]; do ((i++)); done) real 0m1.566s user 0m1.490s sys 0m0.070sTo posledne len pre zaujimavost, ze rozne sposoby zapisu nie su uplne rovnake, ale maju vplyv na rychlost. Samozrejme vacsinou to vyznam nema, ako som sa naucil v praci - co sa vykonava konstantny pocet krat je rychle a co sa alokuje na konstantnu velkost je male. Pri realnych obrovskych casoch a obrovskych datach je nejaka rychlost inicializacie a velkost konstatnych struktur doslova zanedbatelna. Ale uz som programoval v bashi vascie veci, kde mi tento suborovo-textovy nastroj tak ulahcoval zivot, ze sa mi to prepisovat do C nechcelo. A tam ma vyznam pouzit o o znak viac alebo menej a opvlyvnit rychlost o citelu dobu. A uvazovat, ze spustanie noveho procesu je az posledna moznost ako nieco vyriesit.
Ale uz som programoval v bashi vascie veci, kde mi tento suborovo-textovy nastroj tak ulahcoval zivot, ze sa mi to prepisovat do C nechcelo.
Na tieto prípady skôr používam python / perl. Malý benchmark tu:
time perl test.pl real 0m0.014s user 0m0.010s sys 0m0.003s time python test.py real 0m0.049s user 0m0.040s sys 0m0.007s time (i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done) #bash real 0m1.940s user 0m1.850s sys 0m0.057s time (i=0; while [[ $i -lt 100000 ]]; do i=$((i+1)); done) #bash real 0m1.004s user 0m0.953s sys 0m0.043s
$ time (i=0; while [[ $i -lt 100000 ]]; do i=$((i+1)); done) real 0m0.889s user 0m0.830s sys 0m0.040sJeste rychlejsi varianta:
$ time (i=0; while (( i < 100000 )); do ((i++)); done) real 0m0.811s user 0m0.760s sys 0m0.040s
time for((i=0; i < 100000;)); do ((i++)); donetrva cca polovicu z toho, co
time (i=0; while [ $i -lt 100000 ]; do i=$((i+1)); done)ale slo mi o porovnanie co najpodobnejsieho prikazu, aby z toho sla vyvodit rychlost shellu a nie optimalizacia programatora. Pretoze fakt optimalizacia je
i=100000
).
Ale presto diky za testiky na vasich masinkach - asi zsh vyzkousim (to reverse case-insensitive hledani v historii me vazne zajima). Jinak na me starsi masince bash 0m1.030s a zsh 0,610 (vybrane nejlepsi casy ze 4 mereni).
Aspoň sa tak dokopem k tomu aby som skutočne rozumel tomu čo konfigurujem
${?/#0/}, takze nerusi, ak bolo vsekto OK. A je to bez spustania noveho procesu. Niekde tu by mala byt v historii diskusia, kde som bol tymto osvieteny, ale uz ju neviem dohladat.
Takze moj prompt riesi hodne veci:
PS1='\[\033[01;32m\]\u@\h \[\033[01;36m\]\W \[\033[01;31m\]${?/#0/}\[\033[01;36m\]\$ \[\033[00m\]'
a samotna idea bez farbiciek:
PS1='\u@\h \W ${?/#0/}\$ '
PS1='%n@%m %~ %0(?..%?)$ '
PS1='%B%F{green}%n@%m %F{cyan}%~ %F{red}%0(?..%?)%F{cyan}$ %f%b'
ls **/foo*.cpp # ** matchuje rekurzivne do libovolne hloubky adresaru; btw ** je podporovan i ve vim-u ls **/foo*(.) # (.) na konci globu znaci jenom regulerni soubory ls **/foo*(/) # (/) na konci globu znaci jenom adresare ls (#i)*foo* # (#i) je case-insensitive match ls foo*~foo*bar # ~ je vyjimka - vsechny foo*, ale ne ty, ktere matchuji foo*barzmv je prejmenovavaci utilita s zsh globbingem a capture groups (do ~/.zshrc pridat na zapnuti 'autoload zmv'):
zmv 'DSCN([0-9]).jpg' 'Tajny_plan_na_dobyti_mesice_$1.jpg' # veci v zavorkach se substituuji za $1, $2, ...
zmv '(*)' '${(L)1}' # vyraz ${(L)} lowercasuje operand - vhodne pri mixu souboru pochazejicich z ruznych OS
Perlicka - automaticke parsovani optionu z ./configure i se zobrazenim napovedy k optionum. Napr. kdyz si nepamatuji --with or --enable:
./configure --with<TAB>
)? A proce maji takovehle "advanced" shelly jako zsh tendenci vymyslet nove speciality namisto pouziti ERE?
shopt -s globstar a 4. chce shopt -s nocaseglob
<pre class="brush: ..."> s jazykem, který ten udělátor nezná. Asi si napíšu GreaseMonkey skript, který všechny ty "brush: ..." nahradí starým dobrým "kod", stejně mi to přijde přehlednější než ty barvičky.