Java má dnes 30. narozeniny. Veřejnosti byla představena 23. května 1995.
1. července Mozilla vypne službu Fakespot pro detekci podvodných recenzí v internetových obchodech. Mozilla koupila Fakespot v květnu 2023.
8. července Mozilla vypne službu Pocket (Wikipedie) pro ukládání článků z webu na později. Do 8. října si uživatelé mohou vyexportovat data. Mozilla koupila Pocket v únoru 2017. Několik měsíců byl Pocket integrovanou součástí Firefoxu.
Turris OS má aktuálně problém s aktualizací související s ukončením podpory protokolu OCSP u certifikační autority Let's Encrypt.
Nevidomý uživatel Linuxu v blogu upozornil na tristní stav přístupnosti na linuxovém desktopu (část první, druhá, závěr), přičemž stížnosti jsou podobné jako v roce 2022. Vyvolal bouřlivou odezvu. Následně např. Georges Stavracas shrnul situaci v GNOME. Debata o jiném aspektu přístupnosti, emulaci vstupu pod Waylandem, také proběhla na Redditu.
DevConf.CZ 2025, tj. open source komunitní konference sponzorovaná společností Red Hat, proběhne od 12. do 14. června v Brně na FIT VUT. Publikován byl program a spuštěna byla registrace.
Byla vydána nová major verze 28.0 programovacího jazyka Erlang (Wikipedie) a související platformy OTP (Open Telecom Platform, Wikipedie). Přehled novinek v příspěvku na blogu.
Český telekomunikační úřad zveřejnil Výroční zprávu za rok 2024 (pdf), kde shrnuje své aktivity v loňském roce a přináší i základní popis situace na trhu. Celkový objem přenesených mobilních dat za rok 2024 dosáhl dle odhadu hodnoty přibližně 1,73 tis. PB a jeho meziroční nárůst činí zhruba 30 %. Průměrná měsíční spotřeba dat na datovou SIM kartu odhadem dosáhla 12,5 GB – v předchozím roce šlo o 9,8 GB.
Z novinek představených na Google I/O 2025: Přehledy od AI (AI Overviews) se rozšiřují do dalších zemí. Užitečné, syntetizované přehledy od generativní AI jsou nově k dispozici i českým uživatelům Vyhledávače.
Šestice firem označovaných jako „MAMAAN“ – tedy Meta (Facebook, Instagram), Alphabet (Google), Microsoft, Apple, Amazon a Netflix – je zodpovědná za více než padesát procent světového internetového provozu. Dalšími velkými hráči jsou TikTok a Disney+. Společně tak zásadně určují podobu digitálního prostředí, spotřebitelského chování i budoucích trendů v oblasti technologií. I přesto, že se podíl těchto gigantů od roku 2023 o něco snížil, jejich dominantní postavení zvyšuje volání po regulaci.
Dnes to bude jen taková drobnost. Implementace basename a ověření platného jména proměné.
Basename je součástí coreutils a jeho binárka zpravidla nemá víc jak nějakých 13kB. Standardní použití v shelu většinou vypadá tak, že se zavolá v rámci subshellu a jeho výsledek použije přímo v parametru nějakého příkazu nebo pro přiřazení do proměné. Pokud to v příslušném scriptu uděláme jen párkrát, nic se neděje. Pokud se to však musí udělat třeba tisíckrát, tak už nás může zajímat, že se shell musí forknout a zavolat exec na binárku basename
. Přitom samotné vlastnosti bourne shellu dosažení stejného efektu umožňuje. Nejlepšího výsledku (nejrychlejšího provedení) lze samozřermě dosáhnout přímo v kódu.
purename="${1%/}" # bugfix pro adresáře s / nakonci purename="${purename##*/}" # odstranění adresáře purename="${purename%$2}" # odstranění přípony (může být třeba i v proměnné nebo parametru)
Pokud si někdo chce udělat funkci, která bude děla to samé jako basename, tak může
basename() { set -- "${1%$2}"; set -- "${1%/}"; echo ${1##*/}; }
Ale má to háček. Při použití této funkce ji stejně zpravidla použijete uvnitř $() a to je zase fork, i když si ušetříte exec(basename)
. Výjimkou jsou přesměrování typu basename bla/bla/bla.bla >>soubor.txt
I když tady by bylo před celým cyklem vhodné udělat exec >>soubor.txt
nebo do něj přesměrovat cyklus [for|while] ... done >>soubor.txt
Pro přiřazení do proměnné by bylo vhodnější si udělat speciální funkcičku, která by název proměnné dostala jako parametr, nebo to udělat přímo v kódu jak je uvedeno na začátku. Taková funkcička může vypadat třeba takto:
basenameset() { set -- "$1" "${2%$3}" set -- "$1" "${2%/}" case "$1" in [^a-zA-Z]*|*[^a-zA-Z0-9]*|case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while|time);; # špatné jméno proměnné ?*) eval $1=\"${2##*/}\";; # správné jméno proměnné (neprázdné) esac }
A tím jsme se dostali oslým můstkem k druhé úloze, ověření platného jména proměnné.
A když už se bavíme o rychlosti, tak pár testíků.
$ for((i=0;$i<10000;i++)); do touch zbytecne_dlouhej_prefix_$i; done $ cat basename.sh #!/bin/bash dir="${1:-.}" for i in "${dir%/}/"* do a="$(basename "$i")" done $ cat basename_in_shell.sh #!/bin/bash basename() { set -- "${1%$2}"; echo ${1##*/}; } dir="${1:-.}" for i in "${dir%/}/"* do a="$(basename "$i")" done $ cat basenameset.sh #!/bin/bash basenameset() { set -- "$1" "${2%$3}" case "$1" in [^a-zA-Z]*|*[^a-zA-Z0-9]*);; ?*) eval $1=\"${2##*/}\";; esac } dir="${1:-.}" for i in "${dir%/}/"* do basenameset a "$i" done $ time ./basename.sh real 0m17.545s user 0m5.410s sys 0m10.020s $ time ./basename_in_shell.sh real 0m10.081s user 0m3.120s sys 0m5.400s $ time ./basenameset.sh real 0m1.461s user 0m1.350s sys 0m0.010s $Myslím, že je to názorné tak akorát. Nakonec zas až tak moc mini ta laskonka není rozsahem, pouze obsahem.
Tiskni
Sdílej:
$ basename2() { set -- "${1%$2}"; echo ${1##*/}; } $ basename2 /usr/bin/ $ basename /usr/bin/ bin
$ basenameset /usr/bin/ $tedy prázdný řetězec.
$ basenameset a /usr/bin/ $ echo $a
$ cat basename.py #!/usr/bin/env python import os for file in os.listdir('.'): a = os.path.basename('./' + file) $ time ./basenameset.sh real 0m3.417s user 0m3.152s sys 0m0.096s $ time ./basename.py real 0m0.343s user 0m0.252s sys 0m0.076sTakže v Pythonu je to asi tak desetkrát rychlejší. O složitosti nemluvě. Ale je pravda, že to není úplně _přesně_ totéž.
basename_in_shell.sh
. Myslým, že se budete dost divit. Mimochodem perlivé #!/usr/bin/env perl use File::Basename; $a=basename($_) foreach (<.*>);je o 5% rychlejší :) (Což bude nejspíš stejně způsobeno o chlup rychlejším natažením perl interpretru než pythonu)
#!/usr/bin/env perl use File::Basename; $a=basename($_) foreach (<*>);což je jen o cca 2% rychlejší.