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 13:33 | Pozvánky

    Byl zveřejněn program konference Installfest 2026. Konference proběhne o víkendu 28. a 29. března v Praze na Karlově náměstí 13. Vstup zdarma.

    Ladislav Hagara | Komentářů: 1
    dnes 03:55 | Nová verze

    Byla vydána Java 26 / JDK 26. Nových vlastností (JEP - JDK Enhancement Proposal) je 10. Odstraněno bylo Applet API.

    Ladislav Hagara | Komentářů: 8
    včera 23:55 | Nová verze

    Byla vydána nová verze 260 správce systému a služeb systemd (Wikipedie, GitHub). Odstraněna byla podpora skriptů System V. Aktualizovány byly závislosti. Minimální verze Linuxu z 5.4 na 5.10, OpenSSL z 1.1.0 na 3.0.0, Pythonu z 3.7.0 na 3.9.0…

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

    Byla vydána nová verze 5.1 svobodného 3D softwaru Blender. Přehled novinek i s náhledy a videi v poznámkách k vydání. Videopředstavení na YouTube.

    Ladislav Hagara | Komentářů: 0
    včera 04:55 | Nová verze

    Bylo oznámeno vydání nové verze 8.1 "Hoare" kolekce svobodného softwaru umožňujícího nahrávání, konverzi a streamovaní digitálního zvuku a obrazu FFmpeg (Wikipedie). Doprovodný příspěvek na blogu Khronosu rozebírá kódování a dekódování videa pomocí Vulkan Compute Shaders v FFmpeg.

    Ladislav Hagara | Komentářů: 12
    včera 04:33 | Zajímavý projekt

    Byl představen open-source a open-hardware prototyp nízkonákladového raketometu kategorie MANPADS, který byl sestaven z běžně dostupné elektroniky a komponent vytištěných na 3D tiskárně. Raketa využívá skládací stabilizační křidélka a canardovou stabilizaci aktivně řízenou palubním letovým počítačem ESP32, vybaveným inerciální měřicí jednotkou MPU6050 (gyroskop a akcelerometr). Přenosné odpalovací zařízení obsahuje GPS,

    … více »
    NUKE GAZA! 🎆 | Komentářů: 42
    16.3. 14:22 | IT novinky

    Vědci z univerzity La Sapienza v Římě vyvinuli systém, který dokáže identifikovat jednotlivce pouze na základě toho, jak narušují signály Wi-Fi. Autoři tuto novou technologii nazvali WhoFi. Na rozdíl od tradičních biometrických systémů, jako jsou skenery otisků prstů a rozpoznávání obličeje, nevyžaduje tato metoda přímý fyzický kontakt ani vizuální vstupy. WhoFi může také sledovat jednotlivce na větší ploše než kamera s pevnou polohou; stačí, je-li k dispozici Wi-Fi síť.

    Ladislav Hagara | Komentářů: 11
    16.3. 04:22 | Nová verze

    SuperTux (Wikipedie), tj. klasická 2D plošinovka inspirovaná sérií Super Mario, byl vydán v nové verzi 0.7.0. Videoukázka na YouTube. Hrát lze i ve webovém prohlížeči.

    Ladislav Hagara | Komentářů: 7
    16.3. 03:11 | Zajímavý projekt

    Ageless Linux je linuxová distribuce vytvořená jako politický protest proti kalifornskému zákonu o věkovém ověřování uživatelů na úrovni OS (AB 1043). Kromě běžného instalačního obrazu je k dispozici i konverzní skript, který kompatibilní systém označí za Ageless Linux a levné jednodeskové počítače v ceně 12$ s předinstalovaným Ageless Linuxem, které se chystají autoři projektu dávat dětem. Ageless Linux je registrován jako operační

    … více »
    NUKE GAZA! 🎆 | Komentářů: 9
    15.3. 15:33 | Humor

    PimpMyGRC upravuje vzhled toolkitu GNU Radio a přidává alternativní barevná témata. Primárním cílem autora bylo pouze vytvořit tmavé prostředí vhodné pro noční práci, nicméně k dispozici je nakonec celá škála barevných schémat včetně možností různých animací a vizuálních efektů (plameny, matrix, bubliny...), které nepochybně posunou uživatelský zážitek na zcela jinou úroveň. Témata jsou skripty v jazyce Python, které nahrazují

    … více »
    NUKE GAZA! 🎆 | Komentářů: 6
    Které desktopové prostředí na Linuxu používáte?
     (16%)
     (7%)
     (1%)
     (11%)
     (29%)
     (2%)
     (5%)
     (1%)
     (13%)
     (24%)
    Celkem 1104 hlasů
     Komentářů: 27, poslední včera 19:26
    Rozcestník

    Bash a UTF-16LE

    20.6.2005 23:11 | Přečteno: 1462× | Linux

    Práve som vyhral súboj nad bashom. Kamarát potreboval prekódovať divný textový súbor. Divný bol preto, že používal dve kódovania iso-latin-1 a utf-16. A teraz si predstavte, že takýchto súborov potrebujete spracovať veľa a v práci mu tvrdili, že to v bashi nejde :) samozrejme, že sa to dá napísať v perle, ale ak sa to nedá, tak je to slušná výzva, nie?

    Predstavte si súbor, ktorý je až na jeden riadok v iso latin 1. Ten jeden riadok má v UTF-16LE len reťazec v úvodzovkách, ktorý je potrebné vyparsovať. Keďže som typickým predstaviteľom lineárneho programovania (čítaj program píš postupne za seba; nemá to súvis s lineárnym programovaním vyučovanýn na univerzitách), tak som sa do toho pustil nasledovne. Najprv nájdi ako rozdeliť súbor na tri časti, takže som našiel číslo riadku na ktorom je UTF-16. Následne som cez head/tail našiel tie latin1 časti a vznikli mi tmp.head a tmp.tail.

    Odborník si určite povie, že som blbý a je hlúposť hladať tento riadok cez for a grep, keď na to stačí grep sám. Áno dá sa použiť grep --binary-files=text -n PHRASE foo , ale bohužiaľ sa mi už z toho nepodarilo získať číslo riadku. UTF-16LE má totiž tú vlastnosť, že pred normálnym ASCII znakom máte ešte 8bitový s hodnotou nula a tým pádom z toho sed zmagorí.

    Keď už máme požadovaný riadok, tak ho rozdelíme na časť pred úvodzkami, časť v UTF-16LE a časť za nimi. Opäť musíme riešiť problém, že štandardné nástroje nefungujú tak ako majú. A tak odstránime pred-úvodzovkú časť a získame reťazec začínajúci na UTF-16. Pozor nemôžeme ho uložiť do premennej shellu pretože stratíme tie nuly a už to nebude UTF-16 [kým som to zistil :(]. A necháme to prekódovať cez recode do latin2. Recode spadne za posledným UTF-16 znakom (na kombinácii medzera+cifra), ale to čo prešlo máme na štandardnom výstupe. To vezmeme a odstránime z neho diakritiku pomocou cstocs (iconv a recode je na toto nepoužiteľné) a teraz to uložíme do premennej (už to nie je utf-16). Prednú a zadnú časť nemôžeme vysedovať priamo, ale musíme celý riadok uložiť do premennej shellu, čím nám zmiznú tie nulové znaky a začne fungovať sed. Potom to je už bezproblémové. A len na konci zase reťazec z tých úvodzoviek prekódujeme do UTF-16LE (tentokrát je tam zakódovaný bez diakritiky).

    A teraz na možné skracovanie ešte kód. Viem, že sa dá nahradiť bc za matematickú expanziu v shelli, ale tú si nikdy nepamätám, takže to by som až tak nebral. Nie je to formátované, je to tak ako som s tým pracoval ja :)

    subor="line1014_col.lip"; IFS=$'\n'; (i=0; problem=0; for line in `cat $subor`; do if [ `echo $line | grep PHR &> /dev/null; echo $?` -eq '0' ]; then problem=$i; else i=`echo "$i+1" | bc`; fi ; done; head -n $problem < $subor > tmp.head; tail -n `echo \`wc -l $subor | sed 's/\(.*\) .*/\1/'\`-$problem-1 | bc ` $subor > tmp.tail; stred=`head -n \`echo $problem+1 | bc\` < $subor | tail -n 1 | sed 's/^\(PHRASE unicode [0-9]*\) \(".*\).*/\2/' | recode utf-16le..latin2 2> /dev/null | cstocs il2 ascii`; zaciatok=`head -n \`echo $problem+1 | bc\` < $subor | tail -n 1`; zac1=`echo $zaciatok | sed 's/^\(PHRASE unicode [0-9]*\) \(".*\).*/\1/'`; zac2=`echo $zaciatok | sed 's/^\(.*".*"\) \(.*\)$/\2/'`; cat tmp.head; echo -n "$zac1 "; echo -n $stred | recode ascii..utf-16le; echo " $zac2"; cat tmp.tail) > $subor.tmp

           

    Hodnocení: -

    zatím nehodnoceno
            špatnédobré        

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

    Komentáře

    Vložit další komentář

    20.6.2005 23:20 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše zamyšlení
    Jako cvičení v používání shellu a utilit je to krásné, ale mám neodbytný pocit, že kdyby se ten program napsal v C/C++, bude

    • rychleji napsaný
    • podstatně přehlednější
    • řádově rychlejší
    20.6.2005 23:37 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
    Rozbalit Rozbalit vše Re: zamyšlení
    Mně to příjde tak nějak nastejno :o)

    int system(char*); int main(void) { return system("subor=\"line1014_col.lip\"; IFS=$'\\n'; (i=0; problem=0; for line in `cat $subor`; do if [ `echo $line | grep PHR &> /dev/null; echo $?` -eq '0' ]; then problem=$i; else i=`echo \"$i+1\" | bc`; fi ; done; head -n $problem < $subor > tmp.head; tail -n `echo \\`wc -l $subor | sed 's/\\(.*\\) .*/\\1/'\\`-$problem-1 | bc ` $subor > tmp.tail; stred=`head -n \\`echo $problem+1 | bc\\` < $subor | tail -n 1 | sed 's/^\\(PHRASE unicode [0-9]*\\) \\(\".*\\).*/\\2/' | recode utf-16le..latin2 2> /dev/null | cstocs il2 ascii`; zaciatok=`head -n \\`echo $problem+1 | bc\\` < $subor | tail -n 1`; zac1=`echo $zaciatok | sed 's/^\\(PHRASE unicode [0-9]*\\) \\(\".*\\).*/\\1/'`; zac2=`echo $zaciatok | sed 's/^\\(.*\".*\"\\) \\(.*\\)$/\\2/'`; cat tmp.head; echo -n \"$zac1 \"; echo -n $stred | recode ascii..utf-16le; echo \" $zac2\"; cat tmp.tail) > $subor.tmp"); }
    20.6.2005 23:26 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
    Rozbalit Rozbalit vše Obrazce
    Zajímavé je měnit šířku okna prohlížeče a sledovat, jaké ten kód vytváří obrazce :-)
    21.6.2005 00:31 .
    Rozbalit Rozbalit vše Re: Obrazce na X
    :-D
    elviin avatar 20.6.2005 23:32 elviin | skóre: 29 | blog: elviin | Plzeň-Praha
    Rozbalit Rozbalit vše ASCII Art
    Ja si myslím, že autor s chutí vytvořil tenhle oneliner. Zajimavý postřehy. Kód bych zařadil mezi "ASCII art". Pokud by se to správně "sedlo", "greplo" a "recodovalo", možná bychom viděli tvář autora:)
    20.6.2005 23:48 doubleZ | skóre: 24 | blog: smazano
    Rozbalit Rozbalit vše Re: ASCII Art
    každopádně teď vidíme hov... :-) nechce se mi to číst, ale zajímá mě to...
    .. avatar 21.6.2005 11:24 .. | skóre: 4 | blog:
    Rozbalit Rozbalit vše Re: ASCII Art
    Kazdopadne neco v tom bude, ale jenom "...." vi co to je
    21.6.2005 11:40 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Uáááááá
    Tak to je síla.
    1. for line in `cat $subor`; do ... done
      while read line; do ... done <$subor
    2. if [ `echo $line | grep PHR &> /dev/null; echo $?` -eq '0' ]
      if [ "$line" == *PHR* ]
    3. i=`echo "$i+1" | bc`
      let i++
    4. A dál už nemám sil ...
    P.S.: To se někde vyučuje, nebo je to lidová tvořivost?
    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é.
    21.6.2005 11:55 Marek 'marx' Grác | skóre: 21 | blog: Paralelný blog | Brno / Bratislava
    Rozbalit Rozbalit vše Re: Uáááááá
    Trojka je jasná o tom som písal :) Problém s jednotkou a dvojkou je že tam sú tie nulové znaky (0x00) a preto mi štandardné postupy nefungujú. Jednotka by zrejme fungovala, ale príde mi, že ušetríš tak jeden znak.
    21.6.2005 13:13 unchallenger | skóre: 69 | blog: unchallenger
    Rozbalit Rozbalit vše Re: Uáááááá
    Nepočítáme znaky, ale procesy.
    21.6.2005 13:44 Marek 'marx' Grác | skóre: 21 | blog: Paralelný blog | Brno / Bratislava
    Rozbalit Rozbalit vše Re: Uáááááá

    Ok, na procesy moje riešenie skutočne exceluje. Kebyže rátame procesy (réžiu), tak musí vyhrať Cčkové riešenie, to bude mať zrejme aj najmenšiu réžiu. Ja si pamätám len zopár vecí a tak ich používam dokola. Také bc má tú výhodu, že nemusíš rozmýšlať nad syntaxou pre konkrétny shell. Stačí ti pamätať ako sa priraďuje do premennej. A keďže zátvorkovanie a escape-ovanie je všade rôzne, tak sa snažím používať veci o ktorých viem, že fungujú.

    A ako píšem veci o ktorých si myslím, že fungujú bez problémov sú často komplikovanejšie. Napr. to strácanie znakov zadaných do premennej, keby to skončilo pri prvej nule, tak si myslím, že by som tomu celkom rozumel. Takto bohužiaľ nie.

    Založit nové vláknoNahoru

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