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í
×

včera 20:22 | Zajímavý článek

Nadace Raspberry Pi vydala již osmapadesáté číslo (pdf) stostránkového anglicky psaného časopisu MagPi věnovanému Raspberry Pi a projektům postaveným na tomto jednodeskovém počítači a druhé číslo (pdf) časopisu Hello World primárně určeného pro učitele informatiky a výpočetní techniky.

Ladislav Hagara | Komentářů: 0
včera 19:55 | Humor

Portál Stack Overflow informuje na svém blogu, že pomohl ukončit editor Vim už více než milionu vývojářů. V loňském roce například hledal odpověď na otázku Jak ukončit editor Vim v průměru 1 z 20 000 návštěvníků.

Ladislav Hagara | Komentářů: 4
včera 19:22 | Nová verze

Po pěti měsících od vydání verze 3.5.0 byla vydána nová stabilní verze 3.6.0, tj. první z nové řady 3.6, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie). Z novinek lze zmínit například podporu dvou nových 64bitových platforem little-endian POWER machines (ppc64le) a IBM z Systems (s390x) nebo nové balíčky Rust 1.17.0, Cargo 0.18.0, GHC 8.0.2 a Julia 0.5.2.

Ladislav Hagara | Komentářů: 0
24.5. 21:33 | Bezpečnostní upozornění

V Sambě byla nalezena a opravena bezpečnostní chyba CVE-2017-7494. Má-li útočník právo ukládat soubory na vzdálený server, může tam uložit připravenou sdílenou knihovnu a přinutit smbd server k jejímu načtení a tím pádem ke spuštění libovolných příkazů. Chyba je opravena v upstream verzích 4.6.4, 4.5.10 a 4.4.14. Chyba se týká všech verzí Samby od verze 3.5.0 vydané 1. března 2010.

Ladislav Hagara | Komentářů: 3
24.5. 20:44 | Nová verze

Byla vydána nová stabilní verze 4.3.0 integrovaného vývojového prostředí (IDE) Qt Creator. Z novinek lze zmínit například integraci editoru kódu do Qt Quick Designeru.

Ladislav Hagara | Komentářů: 1
24.5. 20:11 | Bezpečnostní upozornění

Společnost Check Point informuje na svém blogu o novém vektoru útoku. Pomocí titulků lze útočit na multimediální přehrávače VLC, Kodi, Popcorn Time, Stremio a pravděpodobně i další. Otevření útočníkem připraveného souboru s titulky v neaktualizovaném multimediálním přehrávači může vést ke spuštění libovolných příkazů pod právy uživatele. Ukázka na YouTube. Chyba je opravena v Kodi 17.2 nebo ve VLC 2.2.6.

Ladislav Hagara | Komentářů: 11
23.5. 15:18 | Zajímavý software

CrossOver, komerční produkt založený na Wine, je dnes (23. 5. 2017) dostupný ve slevě. Roční předplatné linuxové verze vyjde s kódem TWENTYONE na $21, resp. $1 v případě IP z chudších zemí. Firma CodeWeavers, která CrossOver vyvíjí, významně přispívá do Wine. Přidaná hodnota CrossOver spočívá v přívětivějším uživatelském rozhraní, integraci do desktopu a podpoře.

Fluttershy, yay! | Komentářů: 26
23.5. 15:11 | Zajímavý projekt

V únoru loňského roku bylo představeno několik útoků na celou řadu bezdrátových klávesnic a myší s názvem MouseJack. Po více než roce lze chybu opravit, tj. aktualizovat firmware, také z Linuxu. Richardu Hughesovi se podařilo navázat spolupráci se společností Logitech, získat od nich dokumentaci, přesvědčit je, aby firmware poskytovali přímo a ne jako součást .exe souboru, aby mohl být popis začleněn do služby Linux Vendor Firmware Service (LVFS) a aktualizace tak mohla proběhnou přímo z Linuxu pomocí projektu fwupd.

Ladislav Hagara | Komentářů: 2
23.5. 13:22 | Nová verze

Po roce a půl vydali vývojáři projektu SANE (Scanner Access Now Easy) (Wikipedie) novou verzi 1.0.27 balíku SANE-Backends. Nejnovější verze tohoto balíku pro přístup ke skenerům přináší například významná vylepšení v několika backendech nebo podporu pro více než 30 nových modelů skenerů. Verze 1.0.26 byla přeskočena.

Ladislav Hagara | Komentářů: 0
22.5. 20:55 | Komunita

Od 18. do 21. května proběhla v Saint-Étienne Linux Audio Conference 2017. Na programu byla řada zajímavých přednášek a seminářů. Videozáznamy přednášek lze zhlédnout na YouTube. K dispozici jsou také články a prezentace.

Ladislav Hagara | Komentářů: 0
Chystáte se pořídit CPU AMD Ryzen?
 (6%)
 (32%)
 (1%)
 (8%)
 (44%)
 (9%)
Celkem 616 hlasů
 Komentářů: 62, poslední 19.5. 01:57
    Rozcestník

    Dotaz: Nahrazeni mezer znakem

    30.11.2005 18:54 Andrew
    Nahrazeni mezer znakem
    Přečteno: 737×
    Hello,

    pls nevite nekdo cim resp. jak nahradit mezery v souboru (log file) nejakym znakem? Zadrhel je v tom, ze potrebuji nahradit mezery pouze te casti, ktera je uvozena uvozovkami-" ".

    Dik za tipy....

    Odpovědi

    David Watzke avatar 30.11.2005 19:12 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    $ cat log.file
    " "
    $ sed 's/" "/"_"/g' log.file
    "_"
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    David Watzke avatar 30.11.2005 19:13 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Oops, zřejmě jsem to špatně přečet. To co děláš bych udělal radši v grafickým editoru, vybral tu část a dal nahradit... Ale v shellu.. to ti musí poradit někdo jiný.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    30.11.2005 19:26 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
      #include <stdio.h>
    
      int main()
      {
        int c;
        int inside = 0;
    
        while ((c = getchar()) != EOF) {
          if (c == '"') inside = !inside;
          if (inside && c==' ') c = '_';
          putchar(c);
        }
    
        return 0;
      }
    
    Zpracování chyb a/nebo parametrů si doplňte za cvičení.
    30.11.2005 19:29 Andrew
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Dekuji, osetreni chyb provedu a odevzdam :)

    Ale ja mel na mysli realizace v shellu....
    1.12.2005 11:12 alex
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Reseni zalozene pouze na shellu bude v tomto pripade velice pomale. Jedina jeho vyhoda je v tom, ze nepotrebujete zadny externi program. Tak tady je reseni, pouzivajici jenom vestavene prikazy bash'e:
    #!/bin/bash
    
    ZAMENA="_"
    
    IFS=
    while read line ; do
    	quote=0
    	while read -n 1 char ; do
    		if [ "$char" == " " ] ; then
    			if [ $quote -eq 0 ] ; then
    				outchar=" "
    			else
    				outchar="$ZAMENA"
    			fi
    		elif [ "$char" == '"' ] ; then
    			quote=$((1 - quote))
    			outchar='"'
    		else
    			outchar="$char"
    		fi
    		echo -n "$outchar"		
    	done <<<"$line"
    	echo
    done
    
    Obecne v ulohach takoveho typu vynika Perl. Tady je reseni v Perl'u:
    $ perl -pe 's/".*?"/($s=$&)=~s: :_:g;$s/eg' soubor.log
    
    Na zaver uvedu srovnani rychlosti vsech 3 reseni (vcetne programu v C, napsaneho Michalem Kubeckem):
    $ ls -sh /var/log/messages
    716K /var/log/messages
    $ time uvozovky.sh < /var/log/messages > /dev/null
    real	2m12.561s
    user	1m57.610s
    sys	0m6.001s
    $ time perl -pe 's/".*?"/($s=$&)=~s: :_:g;$s/eg' /var/log/messages > /dev/null
    real	0m0.038s
    user	0m0.030s
    sys	0m0.008s
    $ time uvozovky_c < /var/log/messages > /dev/null
    real	0m0.071s
    user	0m0.059s
    sys	0m0.005s
    
    Muzete si vsimnout, ze reseni v Perl'u je dokonce rychlejsi nez v C.
    1.12.2005 13:34 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Obávám se, že vaše měření je něčím zkresleno. Zkoušel jsem si to na asi 5 MB vstupu a vychází mi přibližně 435 ms pro Perl a 155 ms pro C, což vypadá podstatně věrohodněji. Nezapomněl jste na optimalizace?
    1.12.2005 14:12 alex
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Mereni muze byt velice jednoduse zkresleno jeste tim, jestli uvazujeme prvni start programu nebo nasledujici (cache).
    [~]$ gcc -o uvozovky_c uvozovky.c -O2
    [~]$ time ./uvozovky_c < /usr/src/linux-2.6.14.2.tar.bz2  > /dev/null
    
    real	0m4.195s
    user	0m3.174s
    sys	0m0.201s
    [~]$ time ./uvozovky_c < /usr/src/linux-2.6.14.2.tar.bz2  > /dev/null
    
    real	0m3.492s
    user	0m3.112s
    sys	0m0.132s
    [~]$ time ./uvozovky_c < /usr/src/linux-2.6.14.2.tar.bz2  > /dev/null
    
    real	0m3.250s
    user	0m3.079s
    sys	0m0.132s
    [~]$ time ./uvozovky_c < /usr/src/linux-2.6.14.2.tar.bz2  > /dev/null
    
    real	0m3.301s
    user	0m3.098s
    sys	0m0.137s
    
    Podobne,
    [~]$ time perl -pe 's/".*?"/($s=$&)=~s: :_:g;$s/eg' /usr/src/linux-2.6.14.2.tar.bz2 > /dev/null
    
    real	0m2.278s
    user	0m1.806s
    sys	0m0.154s
    [~]$ time perl -pe 's/".*?"/($s=$&)=~s: :_:g;$s/eg' /usr/src/linux-2.6.14.2.tar.bz2 > /dev/null
    
    real	0m2.003s
    user	0m1.807s
    sys	0m0.154s
    [~]$ time perl -pe 's/".*?"/($s=$&)=~s: :_:g;$s/eg' /usr/src/linux-2.6.14.2.tar.bz2 > /dev/null
    
    real	0m2.004s
    user	0m1.814s
    sys	0m0.152s
    
    Samozrejme, prvni start Perlu muze byt i pomalejsi nez C, tady mu pomohlo to, ze ja jsem meril rychlost perlu az po c-ku. Neni nic divneho na tom, ze Perl muze byt rychlejsi nez C. Vzlast kdyz si uvedomite, ze pouzivate getchar() misto operaci cteni celeho bloku.
    1.12.2005 14:33 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Samozřejmě jsem používal průměr druhého až čtvrtého běhu programu, nejsem tak hloupý, jak vypadám. Perl v tomto případě není rychlejší než C, protože už z principu, kterým to děláte (vyhledávání regulárního výrazu) dost dobře ani nemůže. Takže tvrdím, že někde děláte chybu, pravděpodobně v těch optimalizacích.

    Vzlast kdyz si uvedomite, ze pouzivate getchar() misto operaci cteni celeho bloku.

    Zapomínáte na to, že streamové operace v libc mají vlastní bufferování, takže vkládat tam ještě druhý buffer by bylo zbytečné a program by to naopak zpomalilo. Není tam ani overhead na volání getchar(), protože to je ve skutečnosti makro. Samozřejmě by šel program trochu zrychlit načítáním celých bloků pomocí read() a jejich zápisem pomocí write(), pak by Perl neměl nejmenší šanci, ale to už by bylo na úkor přehlednosti.

    1.12.2005 15:10 alex
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Samozřejmě jsem používal průměr druhého až čtvrtého běhu programu, nejsem tak hloupý, jak vypadám.
    Nevypadate vubec hloupe, vase prispevky tady a na cz.comp.linux vzdy povazuji za velice duveryhodne. Ale stava se, ze i mistr tesar se utne, takze jsem nevedel, jestli jste nahodou nezapomel na ten cache.
    Takže tvrdím, že někde děláte chybu, pravděpodobně v těch optimalizacích.
    V minulem prispevku jsem uvedl prikaz, pomoci ktereho to prekladam. Optimalizaci mam nastavenou na level 2. Jak to mate vy?
    Zapomínáte na to, že streamové operace v libc mají vlastní bufferování, takže vkládat tam ještě druhý buffer by bylo zbytečné a program by to naopak zpomalilo.
    Plny souhlas.
    Samozřejmě by šel program trochu zrychlit načítáním celých bloků pomocí read() a jejich zápisem pomocí write(), pak by Perl neměl nejmenší šanci, ale to už by bylo na úkor přehlednosti.
    Tak tady nesouhlasim s tim, ze by to zrychlilo program jen trochu.
    [~]$ cat uvozovky_read_write.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define BUFSIZE 512
    
    int main()
    {
        char *buf_in = malloc(BUFSIZE);
        char *buf_out = malloc(BUFSIZE);
        char c;
        int  i, j, n;
        int inside = 0;
    
        j = 0;
        while (n = read(0, buf_in, BUFSIZE)) {
          for (i = 0; i < n; i++) {
    	      c = buf_in[i];
    	      switch (c) {
    		      case '\n': inside = 0; break;
    		      case '"' : inside = !inside; break;
    		      case ' ' : c = inside ? '_' : ' ';
    	      }
    	      buf_out[j++] = c;
    	      if ( j >= BUFSIZE ) {
    		      write(1, buf_out, BUFSIZE);
    		      j = 0;
    	      }
          }
        }
        if ( j ) {
    	    write(1, buf_out, j);
        }
    
        return 0;
    }
    [~]$ gcc -O2 -o uvozovky_read_write uvozovky_read_write.c
    [~]$ time ./uvozovky_read_write < /usr/src/linux-2.6.14.2.tar.bz2 > /dev/null
    
    real	0m0.641s
    user	0m0.326s
    sys	0m0.202s
    
    A skutecne Perl nema sanci.
    1.12.2005 15:28 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Používal jsem '-O3 -fomit-frame-pointer' plus optimalizaci pro procesor. Co se týká přechodu na 'read()' a 'write()', skutečně jsem ho hodně podcenil, rozdíl je v některých případech i řádový. Zdá se, že režie streamových funkcí v glibc je větší, než jsem si pod vlivem dřívějších testů myslel.
    1.12.2005 20:13 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Zdá se, že režie streamových funkcí v glibc je větší, než jsem si pod vlivem dřívějších testů myslel.
    Dost velký čas sežere zbytečné zamykání, při použítí getchar_unlocked() a putchar_unlocked() se to celkem zrychlí.
    1.12.2005 20:36 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Díky za upozornění, hlavně že zrovna včera jsem několik hodin strávil studiem chování glibc vůči multithreadovým aplikacím…
    1.12.2005 16:13 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Hmm, tak koukám, že tady je to samý C expert, aneb jak napsat co nejméně efektivní memcpy. Co třeba takhle?:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define BUFSIZE 65536
    
    int main()
    {
        char *buf = malloc(BUFSIZE);
        char *c, *end;
        int n;
        int inside = 0;
    
        while (n = read(0, buf, BUFSIZE)) {
            end = buf+n;
            for (c = buf; c < end; c++) {
                switch (*c) {
                    case '\n': inside = 0; break;
                    case '"' : inside = !inside; break;
                    case ' ' : if (inside) *c ='_';
                }
            }
            write(1, buf, n);
        }
    
        return 0;
    }
    Proč ty data přesýpat z jednoho místa na druhé fakt nechápu.
    $ time ./uvozovky_read_write </var/cache/apt/archives/openclipart-png_0.17+dfsg-1_all.deb >/dev/null
    
    real    0m1.716s
    user    0m0.580s
    sys     0m0.270s
    $ time ./uvozovky_read_write_orig </var/cache/apt/archives/openclipart-png_0.17+dfsg-1_all.deb >/dev/null
    
    real    0m1.926s
    user    0m0.800s
    sys     0m0.340s
    
    Krom toho ten půlkylovej buffer byl fakt dobrej vtip. Vůbec vám nevadí, že tráví v kernelu skoro stejně dlouhej čas jako v userspace? Ten uvozovky_read_write_orig má samozřejmě zvětšenej buffer taky, jinak by měl něco kolem 600ms v kernelspace. Toho času real si nevšímejte, nejsem na tom App Serveru sám :-)
    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é.
    1.12.2005 16:53 alex
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Tady uz neslo o nejefektivnejsi program v C. Slo o to, porovnat rychlost getchar() versus read(). Spravne jste poukazal na spoustu nedokonalosti, ale vsimnete si, ze po tech upravach cas se zkratil na 10%, kdyzto pri prechodu od getchar k read rozdil byl 5-nasobny. To prave vysvetluje, proc Perl s jeho pomalym regexpem muze byt skoro stejne rychly jako ten prvni program v C - vsechno sezere rezie vstupu/vystupu.
    1.12.2005 17:27 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Však doufám, že jsem se někoho nedotknul :-D
    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é.
    1.12.2005 17:36 alex
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Ale ne, jste vseobecne uznavan jako Velky Optimizator :-)

    Založit nové vláknoNahoru

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

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