Cloudflare, tj. společnost poskytující "cloudové služby, které zajišťují bezpečnost, výkon a spolehlivost internetových aplikací", má výpadek.
Letos se uskuteční již 11. ročník soutěže v programování Kasiopea. Tato soutěž, (primárně) pro středoškoláky, nabízí skvělou příležitost procvičit logické myšlení a dozvědět se něco nového ze světa algoritmů – a to nejen pro zkušené programátory, ale i pro úplné začátečníky. Domácí kolo proběhne online od 22. 11. do 7. 12. 2025 a skládá se z 9 zajímavých úloh různé obtížnosti. Na výběru programovacího jazyka přitom nezáleží – úlohy jsou
… více »Byla vydána nová verze 2.52.0 distribuovaného systému správy verzí Git. Přispělo 94 vývojářů, z toho 33 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.
VKD3D-Proton byl vydán ve verzi 3.0. Jedná se fork knihovny vkd3d z projektu Wine pro Proton. Knihovna slouží pro překlad volání Direct3D 12 na Vulkan. V přehledu novinek je vypíchnuta podpora AMD FSR 4 (AMD FidelityFX Super Resolution 4).
Poštovní klient Thunderbird byl vydán v nové verzi 145.0. Podporuje DNS přes HTTPS nebo Microsoft Exchange skrze Exchange Web Services. Ukončena byla podpora 32bitového Thunderbirdu pro Linux.
U příležitosti státního svátku 17. listopadu probíhá na Steamu i GOG.com již šestý ročník Czech & Slovak Games Week aneb týdenní oslava a také slevová akce českých a slovenských počítačových her.
Byla vydána nová verze 9.19 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Vypíchnout lze například nový balíček BirdNET-Go, tj. AI řešení pro nepřetržité monitorování a identifikaci ptáků.
Byla vydána nová verze 3.38 frameworku Flutter (Wikipedie) pro vývoj mobilních, webových i desktopových aplikací a nová verze 3.10 souvisejícího programovacího jazyka Dart (Wikipedie).
Organizace Apache Software Foundation (ASF) vydala verzi 28 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.
Byl vydán Debian 13.2, tj. druhá opravná verze Debianu 13 s kódovým názvem Trixie. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
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.