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 01:33 | Nová verze

Po šesti letech od vydání verze 1.0 byla vydána verze 2.0 multiplatformního editoru tagů MusicBrainz Picard (Wikipedie). Přehled novinek, vylepšení a oprav v changelogu.

Ladislav Hagara | Komentářů: 0
včera 16:22 | Nová verze Ladislav Hagara | Komentářů: 2
včera 15:00 | Komunita

Dnes končí podpora Ubuntu 17.10 Artful Aardvark. Uživatelům je doporučen přechod na Ubuntu 18.04 Bionic Beaver s prodlouženou podporou do roku 2023. Podpora standardních verzí Ubuntu je 9 měsíců. Verze 17.10 byla vydána 19. října 2017.

Ladislav Hagara | Komentářů: 9
včera 13:33 | Bezpečnostní upozornění

Společnost Oracle vydala čtvrtletní bezpečnostní aktualizaci svých softwarových produktů (CPU, Critical Patch Update). Opraveno bylo celkově 334 bezpečnostních chyb. V Oracle Java SE je například opraveno 8 bezpečnostních chyb. Všechny jsou vzdáleně zneužitelné bez autentizace. V Oracle MySQL je opraveno 31 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 7 z nich.

Ladislav Hagara | Komentářů: 0
včera 13:11 | Zajímavý software

Nick Clifton zveřejnil na blogu společnosti Red Hat věnujícímu se počítačové bezpečnosti nástroj, pomocí kterého lze ověřit, zda jsou binární spustitelné soubory odolné vůči variantě 1 bezpečnostní chyby Spectre v procesorech.

Ladislav Hagara | Komentářů: 0
včera 03:00 | Nová verze

Po více než roce vývoje od vydání verze 1.12 byla vydána nová verze 1.13 Java edice počítačové hry Minecraft (Wikipedie). Kódový název nejnovější verze je Update Aquatic. Přehled novinek v oficiálním oznámení o vydání. Detailní přehled novinek na Gamepedii a na YouTube.

Ladislav Hagara | Komentářů: 4
18.7. 23:55 | Nová verze

Společnost Epic Games vydala verzi 4.20 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Přehled novinek i s celou řadou obrázků a videi v oznámení na blogu.

Ladislav Hagara | Komentářů: 0
18.7. 15:55 | IT novinky

Evropská komise uložila (pdf) společnosti Google pokutu ve výši 4,34 miliardy eur za porušení antimonopolních předpisů EU. Společnost Google ukládala od roku 2011 výrobcům zařízení Android a provozovatelům mobilních sítí protiprávní omezení, aby upevnila dominantní postavení svých produktů zaměřených na všeobecné vyhledávání na internetu.

Ladislav Hagara | Komentářů: 25
18.7. 13:55 | Zajímavý software

Byl vydán REAPER (Wikipedie) ve verzi 5.93. Jedná se o proprietární digitální pracovní stanici pro práci s audiem (DAW). Novinkou je experimentální linuxový port [reddit].

Ladislav Hagara | Komentářů: 2
18.7. 13:11 | Zajímavý software

Příspěvek na blogu Qt informuje, že Qt pro Python aneb modul PySide2 je již k dispozici v PyPI (Python Package Index). PySide2 je portací PySide na Qt 5 [Hacker News].

Ladislav Hagara | Komentářů: 2
Jak čtete delší texty z webových stránek?
 (77%)
 (20%)
 (5%)
 (7%)
 (2%)
 (10%)
Celkem 370 hlasů
 Komentářů: 40, poslední 29.6. 10:21
    Rozcestník

    Dotaz: Čtení ze vstupu v Perlu

    7.3.2017 20:46 RM
    Čtení ze vstupu v Perlu
    Přečteno: 276×
    Najde se někdo Perlu znalý do té míry, že by mi dokázal vysvětlit, proč perl s přepínačem -p (tj. aktivní print interně) je pomalejší než s použitím přepínače -n a příkazem print.
    time perl -ne 'print $_' longlist.txt    #  0.36s
    time perl -pe ' ' longlist.txt    #  0.47s
    
    A také proč? :
    open FH, "<", "longlist.txt";
    print <FH>    # 0.5s
    print while (<FH>)   # 0.32s
    
    Logicky bych očekával v obou případech opak.

    Odpovědi

    wamba avatar 8.3.2017 00:12 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Čtení ze vstupu v Perlu
    v prvním případě nemůžu potvrdit u mě je to víceméně nastejno. Nicméně
    perl -pe ' ' longlist.txt
    
    lze zapsat pomocí -n přibližně takto
    perl -ne '} continue { print'
    
    V druhém případě, první varianta načte pole řádků a pak je vytiskne. Pravděpodobně očekáváš slurp, to lze následovně
    {local $/; print <> }
    
    nebo přepínačem -0777 (i při one-lineru).

    Záleží, co to ve výsledku má dělat. Někdy je užitečný File::Slurp.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    8.3.2017 10:00 RM
    Rozbalit Rozbalit vše Re: Čtení ze vstupu v Perlu
    Zkoušel jsem to na souboru, který měl 250k krátkých řádků, výstup byl přesměrovaný do /dev/null.

    Nee, slurp neočekávám. Jen mi vrtá hlavou, proč čtení a zápis v jednom kuse <FH> trvá déle než čtení a zápis každého řádku zvlášť. Logicky bych čekal, že ze vstupního bufferu bude perl rychlejší, pokud vše jen vyvrhne (v tomto případě několikrát), než když musí procházet buffer a každý řádek přečíst pomocí readline(), tj. na ukončovacím znak řádku.
    8.3.2017 15:35 RM
    Rozbalit Rozbalit vše Re: Čtení ze vstupu v Perlu
    K zamyšlení mne vedlo:
    print +(<FH>)[1..200_000];
    $. < 200_2002 && print while (<FH>);
    
    V tomto případě je výsledný čas téměř stejný, což je logické, protože se stejně musí v obou případech číst pomocí readline() a testovat.
    8.3.2017 15:49 RM
    Rozbalit Rozbalit vše Re: Čtení ze vstupu v Perlu
    ... možná právě to je důvod ;). Totiž že print (<FH>) tam má tuhle podmínku i pro plný rozsah a chová se tak stejně jako zápis s && vždy a žádná kouzla s rychlejším vyvrhnutím se nekonají, jak jsem si myslel. Čas by tomu i odpovídal.
    8.3.2017 07:56 Milan Straka
    Rozbalit Rozbalit vše Re: Čtení ze vstupu v Perlu
    Podle dokumentace obalí -p skript do následujícího cyklu:
    while (<>) {
        ...             # your program goes here
    } continue {
        print or die "-p destination: $!\n";
    }
    
    Když měřím -pe '' a -ne '} continue { print or die ""}' tak už mi to vychází stejně.
    8.3.2017 10:53 RM
    Rozbalit Rozbalit vše Re: Čtení ze vstupu v Perlu
    Skutečně je to tak a zdá se, že příčinou zpomalení je ten operátor or. Já jsem tomu modelu v manuálu moc nevěřil, ale tohle tedy sedí.

    (Ve skutečnosti je to uvnitř zadrátované asi trochu jinak, a ten buffer, který si představujeme pod <> se nějak obchází. Minimálně při nastavování vstupní vrstvy :utf8, kdy se nastaví flag jen u proměnné $_ a <> zůstane netknuté.)

    8.3.2017 11:20 RM
    Rozbalit Rozbalit vše Re: Čtení ze vstupu v Perlu
    Ještě k tomu nastavení flagu. Ono i to bude zřejmě odpovídat. Jenomže prostě open use open IO => ":encoding(utf8)", ":std" se v tomto případě nedá umístit před while a nastavení má platnost až od místa zavolání (není to pragma).
    8.3.2017 16:52 RM
    Rozbalit Rozbalit vše Re: Čtení ze vstupu v Perlu
    Ještě jsem provedl experiment s tím flagem: dal jsem uvedené use open ... do sekce BEGIN{}. Výsledek je stejný -- nastavení se dotkne jen proměnné $_. Já se tedy domnívám že one-linery s přepínači -ne a -pe vstupní buffer nepoužívají (nebo nějak skrytě) a čte se řádek po řádku do proměnné $_ (stejně jak to má awk). A protože není na výstupu už potřeba testovat pozici a pracovat s ukazatele, je one-liner rychlejší.

    U několika velkých souborů zpracovávaných současně se tedy vyplatí naforkovat několik one-linerů než část běžného kódu pracujícícho s <FH>. Samozřejmě pokud není potřeba předávat data rodiči, ale i to se případně dá provést přes roury; vyzkoušeno, je to pak rychlejší než běžné forky v rámci programu.

    Díky za rady. Myslím, že se mi to povedlo rozmotat.

    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.