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 14:00 | Zajímavý článek

David Revoy, autor open source webového komiksu Pepper&Carrot nebo portrétu GNU/Linuxu, zveřejnil na svém blogu recenzi notebooku Librem 13 od společnosti Purism. Používá jej již sedm měsíců a s ním i jako umělec spokojen. Potřebu francouzské AZERTY klávesnice vyřešil přelepkami. Na displej se podíval kalibrační sondou, barvy vyladil pomocí open source softwaru DisplayCAL, v aplikaci Inkscape nastavil zvětšování na 170 % aby 1 cm v Inkscapu byl 1 cm v reálu. Webovou kameru, mikrofon, Wi-Fi a Bluetooth lze na Librem 13 hardwarově vypnout.

Ladislav Hagara | Komentářů: 1
21.4. 23:44 | Komunita

Několik posledních verzí GNOME Shellu obsahuje chybu způsobující memory leak (únik paměti). Viz například videozáznamy verzí 3.26 nebo 3.28. Nalezení chyby #64 a její opravě se věnuje Georges Basile Stavracas Neto v příspěvku na svém blogu [reddit].

Ladislav Hagara | Komentářů: 0
21.4. 10:33 | Komunita

V pondělí měl na YouTube online premiéru otevřený krátký 2D film Hero vytvořený v 3D softwaru Blender. Cílem stejnojmenného projektu Hero je vylepšit nástroj Grease Pencil (tužka) v Blenderu 2.8.

Ladislav Hagara | Komentářů: 4
20.4. 23:22 | Nová verze

Byla vydána verze 4.0 kolekce svobodného softwaru umožňujícího nahrávání, konverzi a streamovaní digitálního zvuku a obrazu FFmpeg (Wikipedie). Přehled novinek v Changelogu (GitHub).

Ladislav Hagara | Komentářů: 0
20.4. 17:22 | Komunita

Včera vydanou hru Rise of the Tomb Raider pro Linux lze do pondělí 23. dubna koupit na Steamu s 67% slevou. Místo 49,99 € za 16,49 €.

Ladislav Hagara | Komentářů: 0
20.4. 16:11 | Komunita

Na Humble Bundle lze získat počítačovou hru Satellite Reign (Wikipedie, YouTube) běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 5
20.4. 15:44 | Zajímavý software

Společnost Apple koupila před třemi lety společnost FoundationDB vyvíjející stejnojmenný NoSQL databázový systém FoundationDB (Wikipedie). Včera byl tento systém uvolněn jako open source pod licencí Apache 2.0. Zdrojové kódy jsou k dispozici na GitHubu.

Ladislav Hagara | Komentářů: 0
20.4. 15:00 | Nová verze

Po dva a půl roce od vydání verze 5.7 oznámila společnost Oracle vydání nové major verze 8.0 (8.0.11) databázového systému MySQL (Wikipedie). Přehled novinek v poznámkách k vydání. Zdrojové kódy komunitní verze MySQL jsou k dispozici na GitHubu.

Ladislav Hagara | Komentářů: 4
19.4. 14:44 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 151. brněnský sraz, který proběhne v pátek 20. 4. od 18:00 hodin v restauraci Benjamin na Drobného 46.

Ladislav Hagara | Komentářů: 0
19.4. 13:33 | Nová verze

Byla vydána verze 18.04.0 KDE Aplikací (KDE Applications). Přehled novinek v kompletním seznamu změn a na stránce s dalšími informacemi.

Ladislav Hagara | Komentářů: 0
Používáte na serverech port knocking?
 (3%)
 (7%)
 (46%)
 (27%)
 (17%)
Celkem 349 hlasů
 Komentářů: 29, poslední 5.4. 12:25
    Rozcestník

    Dotaz: Nahrazeni mezer znakem

    30.11.2005 18:54 Andrew
    Nahrazeni mezer znakem
    Přečteno: 738×
    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.