abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 02:11 | IT novinky

    Byla oznámena beta verze nového video kodeku Pyrowave pro streamování her v Steam Remote Play. S vysokou propustností a nízkou latencí. S podporou HDR a YUV 4:4:4.

    Ladislav Hagara | Komentářů: 1
    dnes 01:11 | Nová verze

    Byl vydán Sublime Text 4 Build 4213. Sublime Text (Wikipedie) je proprietární multiplatformní editor textových souborů a zdrojových kódů. Ke stažení a k vyzkoušení je zdarma. Pro další používání je nutná licence v ceně 99 dolarů. Spolu se Sublime Merge je cena 168 dolarů.

    Ladislav Hagara | Komentářů: 1
    včera 21:55 | Zajímavý článek

    Firma Anthropic, tvůrce AI modelu Claude, začala v oblasti Sanfranciského zálivu v tichosti provozovat vlastní biotechnologickou laboratoř. Anthropic prý chce pomocí AI urychlit hledání léků na nemoci, jimž farmaceutický průmysl dle názoru firmy věnuje příliš málo pozornosti. Firma tvrdí, že laboratoř se zatím soustředí především na základní biologii, nikoli přímo na vývoj léčiv. Farmaceutický výzkum je pro generálního ředitele Daria Amodeie velice osobní téma, jeho otec zemřel na hepatitidu C několik málo let před objevením účinné léčby.

    AfD 💙 | Komentářů: 2
    včera 21:44 | Humor

    Vědci z Googlu dokončili mapu všech neuronových spojení v mozku (tzv. konektom) samečka mušky octomilky obecné (drosophila melanogaster), hlavním cílem je komparativní analýza s již zmapovaným mozkem samičky. S tímto veřejně dostupným modelem, čítajícím přibližně 160 000 neuronů, se začali bavit nadšenci. Mozek mouchy pohání experimentálního kryptoburzovního bota Stonkfly, případně si zahrál počítačové hry Beat Saber, Mario64 a samozřejmě DOOM (gameplay videa). Ani mozek samičky nezůstal stranou, vyzkoušel si Minecraft.

    AfD 💙 | Komentářů: 1
    včera 16:22 | Nová verze

    Alibaba Cloud je dalším sponzorem nadace Omacom Foundation stojící za linuxovou distribucí Omarchy. Přislíbená částka je 3 miliony dolarů, tj. 1 milion dolarů ročně po dobu tří let. Stejná částka jako u DigitalOcean.

    Ladislav Hagara | Komentářů: 5
    včera 16:11 | Nová verze

    Byla vydána nová verze 262 správce systému a služeb systemd (Wikipedie, GitHub).

    Ladislav Hagara | Komentářů: 0
    včera 02:33 | IT novinky

    Canonical oznámil vydání Zephyr 26.04 LTS. Jedná se o komerční distribuci operačního systému pro mikrokontroléry Zephyr (Wikipedie) s podporou až 15 let.

    Ladislav Hagara | Komentářů: 0
    včera 02:00 | Zajímavý projekt

    Gravity Linux je linuxová distribuce určená pro Apple Silicon s čipy M4 a novějšími. Vydána byla alfa verze pro M4 Mac mini. Gravity Linux je fork Asahi Linuxu.

    Ladislav Hagara | Komentářů: 0
    21.9. 22:22 | Zajímavý projekt

    Hister je osobní soukromý vyhledávač, který lze provozovat na vlastním stroji. Umí prohledávat lokální soubory, importovat historii a záložky z webových prohlížečů, procházet vybrané weby a pomocí rozšíření pro Firefox a Chrome indexovat obsah právě navštívených stránek. Nad vytvořeným indexem pak nabízí vyhledávání prostřednictvím webového rozhraní, příkazové řádky a díky podpoře MCP i nástrojům umělé inteligence. Tento

    … více »
    AfD 💙 | Komentářů: 9
    21.9. 13:33 | IT novinky

    Ministerstvo dopravy uznalo prozatímní schválení asistenčního systému Tesla FSD Supervised vydané nizozemským schvalovacím orgánem RDW. Připojilo se tak k Nizozemsku a dalším pěti evropským státům. Systém je díky tomuto rozhodnutí možné používat za podmínek prozatímního schválení také na území České republiky. Tesla FSD Supervised je asistenčním systémem úrovně 2 podle klasifikace SAE (částečná automatizace řízení). Řidič se

    … více »
    Ladislav Hagara | Komentářů: 22
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (21%)
    Celkem 2716 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník
    Štítky: není přiřazen žádný štítek

    Bešová minilaskonka

    7.6.2005 10:00 | Přečteno: 2112× | BASH | poslední úprava: 8.6.2005 06:40

    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.        

    Hodnocení: 100 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    7.6.2005 10:08 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
    Rozbalit Rozbalit vše To samé?
    $ basename2() { set -- "${1%$2}"; echo ${1##*/}; }
    $ basename2 /usr/bin/
    
    $ basename /usr/bin/
    bin
    
    7.6.2005 10:11 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
    Rozbalit Rozbalit vše Re: To samé?
    Ještě doplním:
    $ basenameset /usr/bin/
    $
    
    tedy prázdný řetězec.
    7.6.2005 10:13 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
    Rozbalit Rozbalit vše Re: To samé?
    Sorry, nepřečet jsem si to pořádně :-).
    $ basenameset a /usr/bin/
    $ echo $a
    
    
    7.6.2005 10:16 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: To samé?
    OK. Big bug. Snadný fix.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    7.6.2005 10:24 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: To samé?
    Když tak nad tím přemýšlím, tak to není až zas takový bug. Používat basename na jména adresářů není až zas tak typické použití a strkat tam ještě navíc lomítko je vyložený naschvál :-). Když už to někdo chce takto použít, tak si to může fixnout. Pro běžné použití je to zbytečné.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    7.6.2005 10:49 Michal Čihař | skóre: 61 | blog: Bláboly | Praha
    Rozbalit Rozbalit vše Re: To samé?
    No pokud o něčem tvrdíš, že to dělá to samé jako basename a nedělá, tak to je bug, o opaku mě nepřesvědčíš :-). Kdybys to nazval něco jako basename, tak klidně :-).

    A čím jiným vykuchat název adresáře než pomocí basename?
    7.6.2005 11:30 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: To samé?
    Fixnutou verzí :-)
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    7.6.2005 21:30 VícNežNic | skóre: 42 | blog: Spáleniště | Ne dost daleko
    Rozbalit Rozbalit vše :-(
    Tedy, dočíst se ,,standartní`` už i u nich, to zamrzí :-(
    Copak toho není dost?
    8.6.2005 06:40 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: :-(
    Už i u nich? Oni tohle vynalezli. Oni si to možná nechají patentovat :-)
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    13.10.2005 23:09 Jan Martinek | skóre: 43 | blog: johny | Brno
    Rozbalit Rozbalit vše pokus v Pythonu
    Zkusil jsem zhruba totéž v Pythonu. Tady jsou výsledky:
    $ 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.076s
    
    
    Takže v Pythonu je to asi tak desetkrát rychlejší. O složitosti nemluvě. Ale je pravda, že to není úplně _přesně_ totéž.
    14.10.2005 12:35 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: pokus v Pythonu
    Ano, jinými slovy, basename implementované v tom samém jazyce jako je spracovávaný script, ve kterém to potřebujete je vždycky rychlejší než volat něco externě a python je rychlejší než bash. Zkuste si napsat script, který udělá basename ze svého parametru a použijte ho místo bashového basename ve scriptu 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)
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    14.10.2005 12:44 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: pokus v Pythonu
    Safra, chybička se vloudila. Správně má být
    #!/usr/bin/env perl
    use File::Basename;
    $a=basename($_) foreach (<*>);
    což je jen o cca 2% rychlejší.
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.