Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za duben (YouTube).
Provozovatel čínské sociální sítě TikTok dostal v Evropské unii pokutu 530 milionů eur (13,2 miliardy Kč) za nedostatky při ochraně osobních údajů. Ve svém oznámení to dnes uvedla irská Komise pro ochranu údajů (DPC), která jedná jménem EU. Zároveň TikToku nařídila, že pokud správu dat neuvede do šesti měsíců do souladu s požadavky, musí přestat posílat data o unijních uživatelích do Číny. TikTok uvedl, že se proti rozhodnutí odvolá.
Společnost JetBrains uvolnila Mellum, tj. svůj velký jazykový model (LLM) pro vývojáře, jako open source. Mellum podporuje programovací jazyky Java, Kotlin, Python, Go, PHP, C, C++, C#, JavaScript, TypeScript, CSS, HTML, Rust a Ruby.
Vývojáři Kali Linuxu upozorňují na nový klíč pro podepisování balíčků. K původnímu klíči ztratili přístup.
V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
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:
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
${?/#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 OSPerlicka - automaticke parsovani optionu z ./configure i se zobrazenim napovedy k optionum. Napr. kdyz si nepamatuji --with or --enable:
./configure --with<TAB>
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.