abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 06:11 | Zajímavý článek

    Man Yue Mo z GitHub Security Lab se podrobně rozepsal o již opravené zranitelnosti CVE-2023-6241 v Arm Mali GPU umožňující získání roota na telefonu Pixel 8 s povoleným MTE (Memory Tagging Extension).

    Ladislav Hagara | Komentářů: 0
    dnes 04:44 | IT novinky

    V San José probíhá vývojářská konference NVIDIA GTC 2024. CEO společnosti NVIDIA Jensen Huang měl dvouhodinovou keynote, ve které představil celou řadu novinek: NVIDIA Blackwell platform, NVIDIA NIM microservices, NVIDIA Omniverse Cloud APIs, Project GR00T, …

    Ladislav Hagara | Komentářů: 0
    včera 14:33 | Komunita

    Byly zpracovány a na YouTube zveřejněny videozáznamy jednotlivých přednášek z letošního Installfestu.

    Ladislav Hagara | Komentářů: 9
    včera 13:33 | Pozvánky

    Od 21. do 23. března proběhnou Arduino Days 2024. Sledovat bude možné oficiální streamy. Zúčastnit se lze i lokálních akcí. V Česku jsou aktuálně registrovány dvě: v Praze na Matfyzu a v Poličce v městské knihovně.

    Ladislav Hagara | Komentářů: 0
    včera 12:11 | Pozvánky

    Letošní ročník konference LinuxDays se uskuteční o víkendu 12. a 13. října, opět se potkáme v pražských Dejvicích na FIT ČVUT. Také během letošního ročníku nás budou čekat desítky přednášek, workshopy, stánky a spousta doprovodného programu. Aktuální dění můžete sledovat na Twitteru, Facebooku nebo na Mastodonu, přidat se můžete také do telegramové diskusní skupiny.

    Petr Krčmář | Komentářů: 3
    včera 09:00 | Nová verze

    Byla vydána nová major verze 2.0.0 a krátce na to opravné verze 2.0.1 open source online editoru Etherpad (Wikipedie) umožňujícího společné úpravy v reálném čase.

    Ladislav Hagara | Komentářů: 0
    včera 08:00 | IT novinky

    Elonem Muskem založena společnost xAI otevřela pod licencí Apache 2.0 svůj AI LLM model Grok-1.

    Ladislav Hagara | Komentářů: 3
    včera 00:44 | Nová verze

    Matematický software GNU Octave byl vydán ve verzi 9.1.0. Podrobnosti v poznámkách k vydání. Nově je preferovaný grafický backend Qt a preferovaná verze Qt 6. V tomto vydání byly přepracovány funkce pro převod čísel z desítkové soustavy. Jako obvykle jsou zahrnuta také výkonnostní vylepšení a zlepšení kompatibility s Matlabem.

    Fluttershy, yay! | Komentářů: 0
    17.3. 22:33 | Zajímavý článek

    Společnost PINE64 stojící za telefony PinePhone nebo notebooky Pinebook publikovala na svém blogu březnový souhrn novinek. Vypíchnout lze, že pracují na virtuálním asistentu PineVox a zatím bezejmenných sluchátkách na lícní kosti (bone conduction).

    Ladislav Hagara | Komentářů: 0
    17.3. 18:33 | Nová verze

    Hyprland, kompozitor pro Wayland zaměřený na dláždění okny a zároveň grafické efekty, je již dva roky starý. Při té příležitosti byla vydána verze 0.37.0 (a záhy opravná 0.37.1 řešící chybu ve vykreslování oken). Nově závisí na knihovně hyprcursor, která poskytuje škálovatelné kurzory myši.

    Fluttershy, yay! | Komentářů: 3
    Steam
     (25%)
     (28%)
     (13%)
     (10%)
     (25%)
    Celkem 310 hlasů
     Komentářů: 4, poslední 11.3. 21:45
    Rozcestník

    Larry Wall 60

    Dnes, 27.9.2014, slaví životní jubileum Larry Wall, jeden z největších programátorů historie. Evropské oslavy tohoto významného jubilea se konají dnes v obci Perl, která sousedí s městečkem Schengen na hranici mezi Sárskem a Lucemburskem. Laudatio pronesou pánové Guido van Rossum a Yukihiro Matsumoto. :-)

    27.9.2014 22:02 | m-bi | Humor


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

    Komentáře

    Vložit další komentář

    Petr Tomášek avatar 27.9.2014 22:07 Petr Tomášek | skóre: 39 | blog: Vejšplechty
    Rozbalit Rozbalit vše Re: Larry Wall 60
    jeden z největších programátorů

    největších? na výšku nebo na šířku?

    multicult.fm | monokultura je zlo | welcome refugees!
    27.9.2014 23:14 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Na délku, konkrétně na délku regexpu...
    rADOn avatar 29.9.2014 09:33 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    rofl
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    Bedňa avatar 29.9.2014 11:06 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Čo proti regexpom stále máte chlapi. Regulárne výrazy sú úžasná nenahraditeľná vec a ďakujem Larrymu za ne. Read only len pre toho kto sa odmieta naučiť syntax ;-)

    Nebyť Perlu, nevznikly by ani ezoterické programovacie jazyky :-)
    KERNEL ULTRAS video channel >>>
    Bystroushaak avatar 29.9.2014 14:40 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Úžasný, složitý, nečitelný patter-matching jazyk, kterým je peklo parsovat cokoliv zdánlivě jednoduchého, jako je emailová adresa, nebo html tag. Jejich jediná a imho silně pochybná výhoda je, že jsou (většinou) krátké na zápis, v tom je skutečně nic jiného nepřekonává.
    xkucf03 avatar 29.9.2014 14:47 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Když řešíš složitou úlohu, tak si zkompiluj nějakou gramatiku, vyrob si speciální parser… ale na spoustu věcí je to zbytečnost nebo je to i v daném kontextu nepoužitelné – a tam se právě hodí regulární výrazy.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    29.9.2014 19:43 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Problém je, že regexpy v podstatě obsahují veškerou komplexitu parseru, ale přitom používají zhuštěný, ne moc flexibilní způsob definice...
    xkucf03 avatar 29.9.2014 19:59 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Já to prostě neberu jako problém – ale jako šikovný nástroj, který mi na jednom řádku nebo v pár znacích umožňuje udělat dost práce – což by se jinde řešilo mnohem složitěji. Samozřejmě to má svoje limity a ne všechno jde pomocí regexů vyřešit nebo vyřešit dobře.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    29.9.2014 23:16 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Můžeš dát nějaký příklad (pokudmožno konkrétní), na co je regexp dobrý? Já teda regexpy taky používám, ale v podstatě jen kvůli tomu, že v dané situaci/prostředí není k dispozici nic lepšího a/nebo vím, že se jedná o hack, ale stačí to...
    30.9.2014 07:51 TM
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Vy tady jen nadáváte a nemáte žádnou alternativu. Jestli vám regulární výrazy připadají moc složité, je to jen váš problém. Stejně je to s Perlem - nejvíc na něj nadávají ti, kteří mu nerozumí nebo jsou líní jej pochopit.
    30.9.2014 09:44 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    :-D Regexpy na pochopení složitý nejsou, v tom to není...

    Imho jsou dobrý na grepování v příkazové řádce, hledání v editoru, různé rychlé skripty-hacky a takové podobné věci. kde člověk potřebuje rychle něco složitějšího najít/validovat ale robustnost, přehlednost nebo flexibilita ho v té chvíli nezajímá...

    Ale jako regulérní součást zdrojového kódu programu? Děkuji, nechci. Na to jsou regexpy IMHO mizerný. Jestli někdo nesouhlasí, může uvést konkrétní příklad, na co je regexp při programování opravdu vhodný.
    30.9.2014 10:28 TM
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Je v hodný k tomu, k čemu je určen. Když např. píšu v Perlu, bashi apod. script, který prolézá vstupní text a má tam cosi podle nějakých kritérií hledat/nahrazovat/analyzovat ...., byl bych blázen, pokud bych vymýšlel nějaký parser úplně od začátku, protože bych stejně asi dospěl k nějaké regulární gramatice a matlal tam ručně pro tento účel konečný automat.
    V reálu je to často složitější, ale přesně pro takové účely byly regulární výrazy navrženy.
    30.9.2014 11:24 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Cosi podle nějakých kritérií? Tomu říkám konkrétní příklad...
    pavlix avatar 30.9.2014 10:45 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Používám regulární výrazy v kódu běžně na celou škálu účelů. Neříkám, že je to všelék, ale pokud bych měl místo každého použití regexu v kódu psát specializovaný parser, je to jen další potenciální zdroj chyb.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    30.9.2014 11:21 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Zajimave je, ze o odstavec niz v podstate stejny pristup komentujes jako "rozumny". Navic opravdu by mohla konecne vzniknout kultura, kdy se aspon casti parseru sdileji (treba jako soucast knihoven), misto toho, aby si to kazdy psal po svem.

    Bohuzel ale, syntaxe regexpu prirozene vede na copy/paste metodiku prace s nimi, a znovuvynalezani kola (psani dokolecka neuplnych parseru veci, ktere uz byly milionkrat predtim naparsovany).
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    pavlix avatar 30.9.2014 11:36 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Zajimave je, ze o odstavec niz v podstate stejny pristup komentujes jako "rozumny".
    Uniká mi, co je na tom tak zajímavé.
    Bohuzel ale, syntaxe regexpu prirozene vede na copy/paste metodiku prace s nimi, a znovuvynalezani kola (psani dokolecka neuplnych parseru veci, ktere uz byly milionkrat predtim naparsovany).
    Obávám se, že copy/paste je vlastností člověka, nikoliv nástroje.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    30.9.2014 10:56 frm
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ale jako regulérní součást zdrojového kódu programu
    my delamne s perlem od roku 1997 a skutecne jsme meli zpocatku regularni vyrazy ve zdojacich primo v kodu. Zkusenosti nas naucily, ze je vhodnejsi uz jen trochu komplikovanejsi nahrazovani dat do samostatnych subroutin, protoze ne kazdy okamzite na prvni pohled rozezna, co regexp vlastne dela. Takze dnes mame vlastni moduly, ktere obsahuji odzkousene regexpy a to uz i napr. odriznuti blanku zleva nebo zprava je regexp v subroutine. Ve zdrojovem kodu zustava jen skutecne zcela jasne nahrazovani neceho za neco.
    pavlix avatar 30.9.2014 11:00 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Zkusenosti nas naucily, ze je vhodnejsi uz jen trochu komplikovanejsi nahrazovani dat do samostatnych subroutin, protoze ne kazdy okamzite na prvni pohled rozezna, co regexp vlastne dela.
    Jo, to zní velice rozumně.

    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    30.9.2014 11:20 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    +1 to beru...
    Bedňa avatar 30.9.2014 17:11 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ukladanie Regexp do premenných používam štandartne, rovnako spolu s "if" kde si vyberám časti regexp. Ako som písal už vyššie, vždy je to o prístupe a využívaní technológií ktoré môžeme použiť.
    KERNEL ULTRAS video channel >>>
    pavlix avatar 30.9.2014 17:20 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tak hlavně když třeba používám regexy v Pythonu, tak je nechávám jednou zkompilovat a v proměnných už mám hotové objekty.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Bedňa avatar 30.9.2014 20:03 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Dík za typ, ale rozmýšľal som nad tým, že prečo niekto odmieta jednoznačne dobrú technológiu. Asi preto že hľadá univerzálne riešenie na všetko. Viem to pochopiť, chalani vychádzajú zo zlých skúseností a ako sa hovorí len blbec sa opáli o tie isté kachle dva krát.

    Je to škoda, ale pre nich :) Veľa krát dokážem ustúpiť argumentom proti mojim, ale prácu s Regexp mám overenú rokmi.
    KERNEL ULTRAS video channel >>>
    30.9.2014 20:21 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Dík za typ, ale rozmýšľal som nad tým, že prečo niekto odmieta jednoznačne dobrú technológiu.
    Už asi dvakrát jsem se ptal, na konkrétní příklad, kdy je teda tahle technologie jednoznačně dobrá...

    Bedňa avatar 30.9.2014 20:59 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tak ja neviem, napr, v hneď druhom komentári som dal Bistrouškovi domácu úlohu. Teraz si ju môžeš doplniť o OR "|" pridať si tam ďalšie možnosti. Môžeš použiť obmedzenú sadu znakov z množiny [abc] a to niekoľko krát spomínané parsovanie HTML tiež nieje problém, tak napr. pomocou tohoto resamplujem obrázky a funguje to spoľahlivo '/<img.*src="([^"]*)">/'.
    KERNEL ULTRAS video channel >>>
    mirec avatar 30.9.2014 21:05 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Larry Wall 60
    <img src="..." alt="nefunguje">
    <img src='nefunguje'>
    <img src="nefunguje" />
    <img src="nefunguje"><img src="idelendruhy">

    ...

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    Bedňa avatar 30.9.2014 21:13 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Dík za nahrávku na smeč. Presne kvôli tomu dovolím len tento jediný zápis obrázku. Takže sa budem opakovať, je to o štýle písania a použitia technológií.
    KERNEL ULTRAS video channel >>>
    xkucf03 avatar 30.9.2014 21:40 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Tak nějak. Buď vím, co je na vstupu a že mi regex bude fungovat → pak je jeho použití v pohodě, přináší hodně užitku. Nebo hledám univerzální a neprůstřelné řešení a pak použiji již hotový parser + XPath nebo XSLT.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Bedňa avatar 30.9.2014 21:48 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Presne tak, za roky som aj tak nedospel k univerzálnemu riešeniu, ale naučil som sa púšťať dnu len to čo viem rýchlo a efektívne pársovať. Nikdy to nebude nejaké nekonečné RFC, ale napríklad MarkDown s tým dokážem obsiahnuť. Výhoda je že to čo chcem pustiť dnu a von môžem použiť ten istý Regexp a nezhodu môžem oznámiť užívateľovi aj so vzorom.
    KERNEL ULTRAS video channel >>>
    mirec avatar 30.9.2014 21:58 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Larry Wall 60

    XPath / XSLT by na tento prípad nebolo použiteľné. Na korektné parsovanie HTML sa používa skutočná knižnica na HTML (HTML != XML).

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    xkucf03 avatar 30.9.2014 22:05 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Nikoliv. Libovolný formát (klidně i binární nebo třeba ten HTML hnůj) můžeš s vhodným parserem převést na SAX události, postavit z toho DOM a nad tím pustit XPath nebo XSLT. Ostatně přijď na OpenAlt konferenci ;-)

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    mirec avatar 30.9.2014 22:42 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Veď práve o to ide, že treba použiť ďalší nástroj pretože HTML5 má k xml na míle ďaleko (neviem čo požrali tí, čo ho navrhovali ale chcem aj ja). OpenAlt sa mi prekrýva s fotografickým workshopom.

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    pavlix avatar 30.9.2014 22:56 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Veď práve o to ide, že treba použiť ďalší nástroj
    Ani to nemusí být vždy pravda, používal jsem nějakou XML knihovnu, která v sobě měla i HTML parser.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    pavlix avatar 30.9.2014 22:54 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    +1

    To, že něco nejde parsovat jako XML (třeba protože to není XML), ještě neznamená, že to nejde zpracovávat jako XML.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Bystroushaak avatar 1.10.2014 00:04 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Já používám jako zkoušku ohněm pro parsery web polarisu. Ten který zvládne pár měsíců parsovat tu jejich stránku s novinkama, tak už asi zvládne všechno.
    mirec avatar 1.10.2014 07:51 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Aký nástroj zvláda parsovať toto? Však to nezvládam ani ja.

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    1.10.2014 10:00 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tak třeba browser, ne?
    xkucf03 avatar 1.10.2014 09:20 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    LOL: </HTML></head>
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    1.10.2014 09:59 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    To, že něco nejde parsovat jako XML (třeba protože to není XML), ještě neznamená, že to nejde zpracovávat jako XML.
    Teď nevím, jestli to myslíš vážně, nebo jestli to je černý humor :-D
    pavlix avatar 2.10.2014 17:24 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Teď mám úplně stejný dojem z tvého komentáře. V čem je strom elementů přečtený z HTML dokumentu tak odlišný od toho přečteného z XML dokumentu, že je potřeba ho dále zpracovávat odlišně?
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    2.10.2014 22:39 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Aha, tak jestli se jedná o HTML, tj. skoro-XML, tak to jo...
    xkucf03 avatar 2.10.2014 23:52 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Na tom už nesejde – i jiné formáty se dají převést na SAX/DOM…

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    1.10.2014 09:58 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Dík za nahrávku na smeč. Presne kvôli tomu dovolím len tento jediný zápis obrázku. Takže sa budem opakovať, je to o štýle písania a použitia technológií.
    Je to hack a prasárna. Ano, podobné regexpy používám čas od času taky, ale "jednoznačně dobrou" technologii bych to teda rozhodně neoznačil...
    little.owl avatar 1.10.2014 10:42 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Po 30s scanovani diskuze moc zdejsim vyhradam nerozumim.

    Regularni vyrazy jsou technologie pro "pattern matching", v tomto pripade v textu, kde hledany pattern je popsan prave regexp stringem. Tedy, abych chapal: (a) mate vyhrady vuci technologii pattern matching jako takove nebo (b) vuci [perlovske] implementaci popisu textovych patternu, tedy regexp?
    A former Red Hat freeloader.
    1.10.2014 14:28 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Pravděpodobně nemá výhrady proti technologii, ale ptá se, kdy se tato technologie hodí, aby to nebyl jednoúčelový hack, ale systémové řešení. A dostává odpověď, že třeba na naleznutí tagů <img> v HTML kódu, což příklady dokazuje, že není pravda. A já s ním souhlasím - regexpy taky používám, ale vždy je beru jako rychlé adhoc řešení (ovšem často naprosto dostatečné pro daný účel - systémové řešení není třeba, nebo mi ho prostě nezaplatí), které často pokryje jen určitou množinu vstupů. Když píšu nějaký systémovější parser, obvykle je tam vůbec nepotřebuji ;-).

    Takže můžu souhlasit s předřečníky, že jsou oblasti, kde se regexpy hodí, ale také můžu souhlasit s kralykem, že ta oblast je od "jednoznačně dobré technologie" docela vzdálena. Ale i rychlá adhoc řešení jsou potřeba, takže ať žijí regexpy :-P.
    Baník pyčo!
    1.10.2014 15:26 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Asi tak, dík za shrnutí ;-)
    little.owl avatar 1.10.2014 21:00 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Zalezi na kontextu pouziti, ale nevidim duvod, proc by regexp nemohl byt rozumne systemove reseni - za predpokladu, ze jeho uzivatele presne vedi co delaji - a nekdy mi to tak skutecne neprijde.
    A former Red Hat freeloader.
    Bedňa avatar 1.10.2014 21:46 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Keď rozmýšľam ako by mal nejaký projekt vyzerať, tak si to napríklad zjednoduším tým že povolím len určitý vstup, je to hlavne kvôli bezpečnosti a pri nezhode sa snažím vyhodiť nápovedu, aby užívateľ neostal mimo.

    Vždy je to korektnejšie správanie pokiaľ spracuješ len to čo chceš ako Bistrouškove nedefinované stavy pri konverzií z eBook do eBook čo má v blogu. Za prasárnu považujem to keď je tam vedome možnosť dosiahnuť nedefinované stavy.
    KERNEL ULTRAS video channel >>>
    1.10.2014 22:21 Václav HFechs Švirga | skóre: 26 | blog: HF | Kopřivnice
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Samozřejmě že je správné, ba i dokonce nutné, validovat vstupy. O tom se nikdo nepře. Ale tohle jde dělat různými způsoby a regexp je pouze jeden z nich a často nedostatečný ;-).
    Baník pyčo!
    Bedňa avatar 1.10.2014 22:41 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Dúfam že som sa nikde neuklepol aby to vyznelo že Regexp je to jediné správne, ale to že je to dobrá technológia.
    KERNEL ULTRAS video channel >>>
    Bystroushaak avatar 2.10.2014 00:24 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Vždy je to korektnejšie správanie pokiaľ spracuješ len to čo chceš ako Bistrouškove nedefinované stavy pri konverzií z eBook do eBook čo má v blogu. Za prasárnu považujem to keď je tam vedome možnosť dosiahnuť nedefinované stavy.
    Tam imho nejsou nedefinované stavy, ale XML v rozporu s tím, co definuje EPUB standard. Samozřejmě, pokud bych to dělal nějak komerčně, či nad tím stavěl produkt, tak implementuji vše tak jak se má. Já ale nechtěl dokonalý nástroj, chtěl jsem ten web korektně v epubu a i tak jsem na tom zabil až moc času (odpoledne a kus večera).
    Bystroushaak avatar 2.10.2014 00:26 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Keď rozmýšľam ako by mal nejaký projekt vyzerať, tak si to napríklad zjednoduším tým že povolím len určitý vstup, je to hlavne kvôli bezpečnosti a pri nezhode sa snažím vyhodiť nápovedu, aby užívateľ neostal mimo.
    Jo, oblíbenou zábavou je potom pustit na to fuzzer a snažit se ten regexp zbořit. Rozhodně by to nebyl první ani poslední regexp použitý k bezpečnosti, který někdo znásilnil a proklouzl přes něj jak nic.
    Bedňa avatar 2.10.2014 06:53 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jasne chápem že si to robil pre seba, vytiahol som to len ako príklad ktorý som mal hneď po ruke.

    Fuzzer je určite dobrá pomôcka a nie len na Regexp.
    KERNEL ULTRAS video channel >>>
    xkucf03 avatar 30.9.2014 21:37 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Můžeš dát nějaký příklad (pokudmožno konkrétní), na co je regexp dobrý?

    Z praxe? Třeba směrování SMSek na základě regulárních výrazů nebo provádění různých akcí na základě toho, co regulární výraz našel. Uživatel ti tam nebude psát žádný kód parseru v Pythonu, prostě zadá regulární výraz.

    Další věc jsou různé validace – na ty základní stačí zadat regulární výraz, není potřeba nic programovat. Složitější můžeš udělat tak, že regexem vytáhneš z textu skupiny a zvaliduješ vztahy mezi nimi. A až ty nejsožitější budeš řešit procedurálně nebo tvorbou vlastní gramatiky. Třeba když potřebuješ během validace posílat DNS dotazy nebo se dívat do databáze, to fakt regexpy nesvedou. Nebo když je vstupem složitý jazyk.

    A pak takové běžné transformace textu nebo hledání – všechny ty grepy a sedy, které se každý den používají. Nebo jednořádkové „skripty“ v Perlu – vytahat z textu skupiny a nějak je přeskládat na výstup, sem tam něco spočítat nebo prohnat nějakou funkcí.

    Případně prasárny typu transformace/úprava HTML – na to jsou obecně lepší nástroje (parser + XPath nebo XSLT), ale když máš ten vstup pod kontrolou a používáš jen podmnožinu HTML/XML, tak se to dá zpracovat i tím regulárním výrazem – nedávno jsem např. převáděl seznamy literatury ve tvaru nečíslovaných seznamů a odkazů na SQL INSERTy. Jako univerzální řešení by to bylo nepoužitelné, ale pro ad-hoc poloautomatickou konverzi je to hodně užitečný nástroj.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    1.10.2014 10:25 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Další věc jsou různé validace – na ty základní stačí zadat regulární výraz, není potřeba nic programovat. Složitější můžeš udělat tak, že regexem vytáhneš z textu skupiny a zvaliduješ vztahy mezi nimi.
    No, na tohle se regexpy dost používaj, ale přitom jsou v podstatě k tomuhle naprosto nevhodný. Co zvaliduješ regexpem? V podstatě pouze triviální případy jako třeba přirozené číslo nebo něco takového. Ale jakmile potřebuješ validovat cokoli jen trošku složitějšího (např. IP adresu nebo něco podobného), už potřebuješ netriviální regexp + obslužný kód nebo rovnou jiný řešení...

    Ve výsledku je mnohem lepší nesnažit se vynálézat kolo krkolomnýmy regexpy a jejich ohýbáním a místo toho použít nějakou knihovnu na validaci různých věcí (existují pro všemožné jazyky/platformy).
    ale když máš ten vstup pod kontrolou a používáš jen podmnožinu HTML/XML, tak se to dá zpracovat i tím regulárním výrazem – nedávno jsem např. převáděl seznamy literatury ve tvaru nečíslovaných seznamů a odkazů na SQL INSERTy. Jako univerzální řešení by to bylo nepoužitelné, ale pro ad-hoc poloautomatickou konverzi je to hodně užitečný nástroj.
    To souhlas...
    xkucf03 avatar 1.10.2014 11:55 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    místo toho použít nějakou knihovnu na validaci různých věcí (existují pro všemožné jazyky/platformy).

    Jenže která z nich je obecně uznávaný standard?

    Ono když děláš obecné řešení, tak potřebuješ ten validační předpis zadat jako parametr, ne tam psát kód a volat metody nějaké knihovny. A na tohle se mnohem víc hodí regex:

    • je to jeden textový parametr, případně dva u nahrazování
    • je to platformně nezávislý jazyk resp. nezávislý na programovacím jazyku daného programu (základy jsou všude stejné, je snazší si dostudovat drobné odlišnosti než se učit úplně jiný jazyk, a pak tu jsou PCRE)
    • tenhle jazyk umí dostatečné množství uživatelů

    Validace se stejně obvykle dělají ve více krocích – nejdřív jednoduché, které probíhají klidně na klientovi, zkontroluje se počet znaků, zda je to číslo, text, mezery, povinné předpony atd. A v druhém kroku se řeší složitější věci jako vztahy mezi jednotlivými atributy (třeba políčka formuláře), referenční integrita, dohledávají se věci v relační databázi nebo třeba DNS, volají se nějaké procedury atd. Na ten první krok jsou regulární výrazy dobré řešení.

    Když to shrnu, jaké máme možnosti:

    • regulární výrazy
    • podobný jazyk, ale lepší
    • gramatika, parser
    • procedurální přístup

    Ten lepší jazyk je spíš v hypotetické rovině, konkrétní použitelné řešení jsem tu neviděl. Udělat gramatiku a parser bude často kanón na vrabce. Rozhodně to není nic, co bys zadal jako jeden krátký textový parametr. Procedurální přístup je někdy nevyhnutelný, ale dá se kombinovat s předchozími možnosti – pomocí regulárních výrazů nebo gramatiky dostaneš ze vstupu nějaké části, uzly atd. a ty procedurálně zpracuješ (třeba dohledáš v databázi).

    Regulární výrazy nejsou vše-spásné nebo univerzální řešení, ale přesto je to dost užitečný nástroj a pro hodně úloh nejlepší řešení.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Bystroushaak avatar 1.10.2014 13:43 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    ABNF je imho obecně uznávaný standard, používaný například v RFC. Nedávno jsem docela koukal, když jsem ho dostal i v definici MD5 souborů pro jeden formát používaný u nás v práci.
    1.10.2014 15:24 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jenže která z nich je obecně uznávaný standard?
    Nejspíš žádná, ale to regexp taky není. Zaprvý to není jazyk pro specifikaci validátorů a zadruhý každá implementace má své nuance.
    Ono když děláš obecné řešení, tak potřebuješ ten validační předpis zadat jako parametr, ne tam psát kód a volat metody nějaké knihovny.
    A proč by ne? Když píšu aplikaci, tak je mnohem lepší udělat něco jako validator.validateIPAddress(userInput); než tam sr*t nějakej regexp, kterej bude na 99% a) hůř čitelnej a b) nebude dobře fungovat. A je celkem jedno, jestli se jedná o serverside nebo client side, to řešení s odladěnou knihovnou bude lepší skoro vždy...
    xkucf03 avatar 1.10.2014 16:04 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jenže ty třeba nepíšeš, software – máš nějaký nainstalovaný a jen ho parametrizuješ. Nebo Přidáváš nějakou funkcionalitu. Konkrétní příklad z praxe: validace jsme měli rozdělené do dvou úrovní/kroků:

    1) základní validace, třeba že něco musí být číslo, text o určité délce nebo text vyhovující regulárnímu výrazu, atd. Co validátor, to třída implementující nějaké rozhraní. Použití těchto validátorů je deklarativní – jen řekneš, jaké pole validovat jakým validátorem + jeho parametry (u toho regulárního je to regulární výraz, u číselného třeba minimum a maximum), nic neprogramuješ, jen parametrizuješ. Někdy si vystačíš s číselným rozsahem nebo s požadováním řetězce určité délky, jindy použiješ regulární výraz – určitě je dobře, že tu ta možnost je, regulární výrazy jsou hodnotná část toho systému, nezavrhoval bych je.

    2) Komplexní validace, kde kontroluješ vazby mezi různými atributy nebo voláš nějaký další kód. Tady už se programovat musí, pracuješ procedurálně.

    Když to jinak nejde, tak samozřejmě implementuješ validátor na míru. Ale když na to stačí regulární výraz, tak proč něco programovat? Stačí parametrizovat obecný validátor. Metody jako validator.validateIPAddress(userInput) by se tam spíš neměly objevit. Lepší návrh je rozhraní, které validuje, má metodu validate(…) a až jedna z implementací tohoto rozhraní bude třeba IPAddressValidator. A pak jenom řekneš, na která políčka se tenhle validátor má použít.
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    1.10.2014 20:29 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jenže ty třeba nepíšeš, software – máš nějaký nainstalovaný a jen ho parametrizuješ. (...) Stačí parametrizovat obecný validátor.
    Obecný validátor asi těžko půjde parametrizovat regexpama.
    nic neprogramuješ, jen parametrizuješ
    Ve chvíli, kdy píšeš regexp na validaci něčeho, v podstatě programuješ, navíc nástrojem IMHO ne moc vhodným pro daný úkol...
    Ale když na to stačí regulární výraz, tak proč něco programovat?
    V případě toho kroku 1) asi celkem o nic nejde, vzhledem k tomu, že skutečná validace je v kroku 2), nicméně použití nějaký hotový knihovny mi přijde jednoduší... Věc názoru...
    Metody jako validator.validateIPAddress(userInput) by se tam spíš neměly objevit. Lepší návrh je rozhraní, které validuje, má metodu validate(…) a až jedna z implementací tohoto rozhraní bude třeba IPAddressValidator. A pak jenom řekneš, na která políčka se tenhle validátor má použít.
    To už mluvíš o implementačních detailech v konkrétním jazyce (asi v Javě). Jinak obecně je samozřejmě dobrý mít možnost říct, co se má validovat čím, to souhlasím...
    xkucf03 avatar 1.10.2014 22:03 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Obecný validátor asi těžko půjde parametrizovat regexpama.

    Obecný v tom smyslu, že není pro konkrétní aplikaci nebo políčko formuláře – prostě obecný regexový validátor, kterým můžeš validovat PSČ, telefonní čísla, datum atd. to už je na tobě.
    Ve chvíli, kdy píšeš regexp na validaci něčeho, v podstatě programuješ, navíc nástrojem IMHO ne moc vhodným pro daný úkol...

    Vhodný nástroj to IMHO je, protože plní účel, uživatel ten jazyk ovládá a je to o zadání jednoho textového řetězce (který nemusí být nijak složitý a přesto je k užitku).

    Padly tu nějaké výhrady, třeba že mezera je doslovně mezera a ne oddělovač tokenů v tom jazyce nebo, že se obecně většina znaků bere doslovně a jen \některé mají speciální význam – tzn. že by možná bylo lepší opačně, doslovné řetězce psát třeba do uvozovek, zatímco řídící znaky a operátory bez… Tyhle výhrady celkem beru, ale: kde je takový jazyk? Kde jsou knihovny pro něj, pro většinu platforem? Kde jsou uživatelé, kteří s tím budou umět pracovat?
    V případě toho kroku 1) asi celkem o nic nejde, vzhledem k tomu, že skutečná validace je v kroku 2), nicméně použití nějaký hotový knihovny mi přijde jednoduší...
    A tu knihovnu si představuješ jak? Že v ní bude zrovna podpora pro typ atributu xyz, který je specifický pro tvoji aplikaci/firmu/obor a má mít 8-10 znaků, začínat na XY nebo ZW a nesmí obsahovat mezery, ale může obsahovat pomlčky?
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    1.10.2014 22:26 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Obecný v tom smyslu, že není pro konkrétní aplikaci nebo políčko formuláře – prostě obecný regexový validátor, kterým můžeš validovat PSČ, telefonní čísla, datum atd. to už je na tobě.
    Jj, však jo. Jak říkám, obecný validátor asi těžko definuješ regexpem. Například validátor data by měl přijmout datum 2000-02-29 a odmítnout 2100-02-29. Moc nevidím, jak takový validátor definovat regexpem. Regexp by v tomhle případě pomohl nejspíše jen s tokenizací.
    A tu knihovnu si představuješ jak? Že v ní bude zrovna podpora pro typ atributu xyz, který je specifický pro tvoji aplikaci/firmu/obor a má mít 8-10 znaků, začínat na XY nebo ZW a nesmí obsahovat mezery, ale může obsahovat pomlčky?
    Tyhle knihovny většinou obsahují nejčastěji používané typy, pro nějaké specifické typy/formáty vstupu většinou poskytují prostředky pro implemetaci validátoru, takže pro běžné věci nevynalézáš kolo a pro speciality si sice musíš napsat kód, ale ta knihovna to typicky ulehčuje.
    xkucf03 avatar 1.10.2014 22:40 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Například validátor data by měl přijmout datum 2000-02-29 a odmítnout 2100-02-29.

    To už je spíš úkol pro to druhé kolo validace. V tom prvním stačí eliminovat překlepy nebo třeba úplné nesmysly typu „nikdy“, „vloni“, „21. lenda“ atd. V tom druhém kole zjistíš, jestli ten den vůbec existuje, nebo jestli byl pracovní, pokud je to potřeba, nebo třeba jestli je v nějakém intervalu (třeba po datu vzniku uživatelského účtu – kvůli čemuž se musíš dívat do databáze a s tím ti žádný jednoduchý validátor nepomůže).

    takže pro běžné věci nevynalézáš kolo a pro speciality si sice musíš napsat kód, ale ta knihovna to typicky ulehčuje.

    Ano, a jedním ze způsobů, kterým ti to moje knihovna ulehčuje, je to, že má regexový validátor, který si snadno parametrizuješ :-) + možnost napsat si validátor úplně vlastní, procedurálně.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    2.10.2014 00:23 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ok, ok, akorát bych ten pojem regexový validátor poupravil na regexový odfiltrovávač zjevně špatných vstupů :-D
    xkucf03 avatar 2.10.2014 01:10 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    To už je otázka, jak daleko chceš jít. Třeba u e-mailu:

    • je vyplněn neprázdný řetězec
    • obsahuje zavináč
    • obsahuje nějaký text před i za zavináčem
    • je to syntakticky platná e-mailová adresa
    • TLD je existující TLD
    • celá doménová část ukazuje na existující doménu
    • ta doména má MX záznamy
    • na adresách z MX záznamů naslouchá SMTP server
    • ten SMTP server přijímá poštu pro danou adresu
    • poslali jsme tam e-mail a přišla nám doručenka nebo uživatel klikl na odkaz v e-mailu či opsal kód
    • a navíc prošel přes CAPTCHu
    • a navíc poslal podepsaný e-mail s certifikátem od důvěryhodné CA nebo má PGP klíče podepsané někým důvěryhodným
    • s tím člověkem jsme mluvili ještě po telefonu nebo osobně a on nám potvrdil, že ta adresa je fakt jeho

    Je jen na tobě resp. na požadavcích na aplikaci, co všechno budeš kontrolovat. Regulární výrazy hodně z toho nesvedou – ale hodně z toho neřeší ani běžně používané procedurální validátory nebo třeba gramatiky.

    Mj. taky záleží, proč validuješ – jestli chceš mít v databázi jen 100% pravdivá data nebo proto, abys tam měl data zadaná uživateli, která nemusejí být úplně pravdivá, ale jsou to, co uživatel chtěl zadat. Buď uživatelům věříš nebo nemůžeš/nechceš řešit, co je „pravda“ a realita a prostě v tom systému připustíš hodnoty, které tam uživatelé vědomě chtějí. Ale nepřipustíš zjevně nesmyslné hodnoty, které tam uživatelé nechtějí a jen se spletli – např. když se vrátíme k těm e-mailům: hodně lidí si splete tečku a čárku nebo třeba tečku vynechají a v doménové části mají třeba gmailcom nebo seznamcz, což regulární výraz odhalí.

    Další věc je formátování – např. můžeš podporovat různé formáty data a pomocí regulárního výrazu a skupin z toho vytáhnout rok, měsíc, den a následně převést na datum a pak třeba zkontrolovat, že je to existující datum. Regulárních výrazů můžeš mít víc, projdeš je v cyklu, zjistíš, který vyhovuje – a dál už ten kód bude stejný, protože všechny ty výrazy ti extrahují stejné pojmenované skupiny.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    pavlix avatar 2.10.2014 18:00 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Regulárních výrazů můžeš mít víc, projdeš je v cyklu, zjistíš, který vyhovuje – a dál už ten kód bude stejný, protože všechny ty výrazy ti extrahují stejné pojmenované skupiny.
    +1

    I když je pravda, že alternativy gramatikou bez problémů pokryješ.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    2.10.2014 22:40 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Z těch všech bodů co jsi napsal, je regexp-based validátor vhodný na ten třetí.
    1.10.2014 22:49 tacoberu | skóre: 5
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jj, však jo. Jak říkám, obecný validátor asi těžko definuješ regexpem. Například validátor data by měl přijmout datum 2000-02-29 a odmítnout 2100-02-29. Moc nevidím, jak takový validátor definovat regexpem. Regexp by v tomhle případě pomohl nejspíše jen s tokenizací.
    Jen?!
    pavlix avatar 2.10.2014 17:58 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Například validátor data by měl přijmout datum 2000-02-29 a odmítnout 2100-02-29. Moc nevidím, jak takový validátor definovat regexpem.
    Taky ze sebe dokážu sypat příklady věcí, které regexp neumí, nakonec skončíme u vaření kafe. Zní to jako špatné přirovnání, ale ty si stěžuješ, že nástroj, který umí jakž takž validovat a parsovat nějaký formát, nemá v sobě integrovaný kalendář.
    Tyhle knihovny většinou obsahují nejčastěji používané typy, pro nějaké specifické typy/formáty vstupu většinou poskytují prostředky pro implemetaci validátoru, takže pro běžné věci nevynalézáš kolo a pro speciality si sice musíš napsat kód, ale ta knihovna to typicky ulehčuje.
    Docela vágní (náznak) specifikace. Na tom bych asi kritiku pro jiné užitečného a užívaného nástroje nestavěl.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    2.10.2014 22:47 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Zní to jako špatné přirovnání, ale ty si stěžuješ, že nástroj, který umí jakž takž validovat a parsovat nějaký formát, nemá v sobě integrovaný kalendář.
    Ale vůbec ne. Já si jen stěžuju, když se na validace používají nástroje, které nejsou na validaci ani určené, ani vhodné... (Do toho nepočítám situaci, kdy validátor používá regexp(y) pro tokenizaci...)
    pavlix avatar 3.10.2014 09:37 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Pak si můžeš ale stěžovat na milion jiných špatných použití tisíce jiných nástrojů.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    pavlix avatar 2.10.2014 17:48 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    IP adresa asi není ideální adept na kontrolu nebo parsování regexpem.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    xkucf03 avatar 2.10.2014 18:03 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Opět záleží, proč a jak důkladně chceš validovat případně parsovat.

    Např. když budeš hledat potenciální IPv4 adresy v textu, tak v pohodě stačí:
    ([0-9]{1,3}\.){3}[0-9]{1,3}
    Stejně tak když chceš odhalit nesmysly a překlepy. Nebo když chceš odfiltrovat nebezpečný vstup, abys tu hodnotu mohl předat někam dál. Stále jsou případy, kdy někdo neprovádí ani takovouhle kontrolu – ten regex by bezpečnostní problém vyřešil. Někdy se o tom rozepíšu víc…

    A že ti někam proleze IP adresa 123.456.789.123? To zase není takový problém – pořád lepší, než aby tam prolezlo 127.0.0.1; wget -O - http://example.com/… | sh -s :-)
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    2.10.2014 22:49 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    IP adresa asi není ideální adept na kontrolu nebo parsování regexpem.
    Ano. Stejně jako řada dalších uživatelských vstupů...
    pavlix avatar 3.10.2014 09:51 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ano, stejně jako řada dalších uživatelských vstupů a narozdíl od řady jiných uživatelských vstupů. Záleží jen na tom, jaké vlastnosti od toho vstupu požaduješ.

    Pokud bys třeba uznával všechny klasické zápisy IPv4 adresy a zároveň všechny uznávané zápisy IPv6 adresy, může být komplikovanější regulární výraz docela vhodným nástrojem pro první vázi parsingu a zároveň způsobem jak relativně přehledně rozepsat jednotlivé uznávané formáty ještě než se pustíš do sestavení bajtstringu z jednotlivých částí. Značně by se tím zjednodušil i následný kód, který by pak využíval kontroly velikostí pole a následné iterace.

    Já jako céčkař bych se asi držel parsování po znacích, kdy dokud mám číslice, nafukuju dočasné číslo, pak ho přenáším do bajtstringu, a na základě oddělovače se rozhoduju, co dál. Ale asi bych nikomu nenadával, kdyby to nejdřív nakrmil do skupin pomocí regexu a pracoval už jen s těmi skupinami. Sám bych asi použil buď regexy nebo nějaký jednoduchý symbolický zápis v komentáři, aby bylo vidět, co ten kód vlastně má zpracovávat.

    Teď odhlíším od toho, že ve skutečnosti bych použil funkce z libc či jejich obdoby.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    xkucf03 avatar 8.10.2014 12:04 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Ještě jeden pěkný příklad – soubory, které se mají ignorovat při verzování:

    $ cat .hgignore 
    syntax: glob
    
    *~
    
    syntax: regexp
    
    ^java/[^/]+/dist/
    ^java/[^/]+/build/
    ^java/[^/]+/nbproject/private/
    
    ^documentation/.+\.(svg|png|ps|eps|pdf)$

    V čem jiném bys to chtěl psát?

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    1.10.2014 19:58 tacoberu | skóre: 5
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Vstup je string, který obsahuje definici typové deklarace.

    Například:
    a:int
    a*:int
    a+:int, b:float
    
    Udělám na to regexpr pro popis vzoru: ~([\w]+)([\+\*\?\.]?)\:([\w]+)~

    a vzor pro oddělovače: ~[,;\s]+~

    Každý vstup projdu nejdřív na oddělovače, a pak každý ten klíč rozeberu na potřebné sekce, ze kterých dál udělám objekt.

    Toto celé otestuju, páč vám to tu píšu z hlavy, a zabalím do funkce, která přijímá string a vrací definici té typové deklarace.

    Tento přístup mi přijde nejjednodužší, a přitom nejodolnější proti chybám.

    V čem vidíte problém?
    1.10.2014 21:30 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jj, tohle beru, zejména, když je to zapozdřeno. Ty typový deklarace jsou, jestli se nepletu, regulární. Něco podobného jsem před časem napsal v JavaScriptu, funguje to, nicméně problémy v tom taky nějaký vidim, hlavně v tom, že to je nečitelný a ne moc rozšiřitelný (tj. pokud by bylo v budoucnu potřeba syntaxi něčim obohatit, mohly by potenciálně regexy narazit).

    Takhle by to zhruba mohlo vypadat v Ragelu:

    name = [a-zA-Z_0-9]+  @{ defObj.setName(p); }
    flag = [+*?.]?        @{ defObj.setFlag(p); }
    type = [a-zA-Z_0-9]+  @{ defObj.setType(p); }
    
    def = name flag ':' type
    delim = ([,;] | space)+
    
    main := (def delim)+
    

    V těch složených závorkách je jen pseudokód, přišel by tam host code pro zpracování tokenu. Ragel ale bohužel nepodporuje žádné skriptovací jazyky krom Ruby... Jinak samozřemě i Ragel má své limitace/problémy...
    1.10.2014 22:58 tacoberu | skóre: 5
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Použij správné kladivo.

    Zapouzdřenost je základ. Pak, když přijde požadavek, že je třeba syntaxi obohatit, tak ty střeva klidně smažu, a napíšu na to složitější parser. Ale do určitého okamžiku je regulár právě tak akorád.

    Ten Ragel je dobrej hint, díky.

    29.9.2014 14:48 LS_999
    Rozbalit Rozbalit vše Re: Larry Wall 60
    No a jake jsou teda lepsi alternativy?
    29.9.2014 14:52 tacoberu | skóre: 5
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Monády ;-)
    Bystroushaak avatar 29.9.2014 15:00 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    No a jake jsou teda lepsi alternativy?
    To co píše xkucf03 nademnou - vyrobit si (třeba) BNF parser.
    29.9.2014 21:57 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Napriklad pyparsing nebo PPCRE. Taky existuji parser kombinatory.. ale to jsem jeste moc nezkoumal.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    xkucf03 avatar 29.9.2014 22:09 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Vtip je mj. v tom, že regexpy jsou jakýsi společný jazyk, nejsou specifické[jasně, odlišnosti se najdou, ale ten základ je stejný] pro Perl, Javu, Python, Lisp atd. navíc PCRE jsou v různých jazycích. Takže se to dá použít i pro konfiguraci – administrátor prostě zadá regex, což umí a nemusí zadávat nějakou speciální gramatiku v jazyce, v kterém je psaná daná aplikace.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    29.9.2014 22:27 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    V tomto pripade jde o tu syntaxi. Escapy, cislovane skupiny, absence komentaru, hungry by default, silena rozsireni syntaxe pro "modernejsi" vlastnosti jako pojmenovane skupiny, promenne.. Proste hruza, 70. leta vraci uder.

    K tomu by se dalo pripocitat spatne ladeni. Nekde se clovek malicko splete a uz to nic nenajde.

    Sam regexpy pouzivam, ale skutecne by bylo lepsi, kdyby je nahradilo neco citelnejsiho. Kolikrat jen clovek musi definovat treba cislo nebo identifikator v regexpu - pritom by to typicka standardni knihovna mohla umet.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    xkucf03 avatar 29.9.2014 22:32 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Zrovna ty pojmenované skupiny jsou šikovná věc – dá se tím dobře dělat konfigurace/parametrizace – pomocí výrazu vytaháš z textu skupiny a ty se nějak použijí – administrátor jen napíše ten výraz (regexpy obvykle umí na rozdíl od programování v jazyce XY).

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    29.9.2014 23:14 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ano, vzdyt jsou, ale ten zapis je katastrofa! Mely by byt jako default, ale to nejde, kvuli syntaktickym omezenim regexpu.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    29.9.2014 23:55 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Sam regexpy pouzivam, ale skutecne by bylo lepsi, kdyby je nahradilo neco citelnejsiho.

    Ja treba regualarni vyrazy pouzivam denne ve ViMu. V 99% jsou to jednorazove vyrazy, takze ukecanejsi syntaxe by jen zdrzovala a standardni knihovna by moc nepomohla. Hodne zalezi na tom, kde to potrebujes pouzivat.
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    30.9.2014 08:09 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    A pouzivas v takove situaci vselijaka ta Perlova rozsireni, nebo jen klasiku operatory .,?,* ? Prave u tech jednorazovych vyrazu mi prijde, ze slozitejsi/specifictejsi vyrazy davaji rychle klesajici vynosy - nez to clovek vyladi, zda to hleda spravne to co chce, vyjde mu rychleji se vyporadat s nekolika vyjimkami, ktere to najde.

    Nekdo tady mluvil o esoterickych jazycich; ja myslim, ze prirovnani regexpu k Brainfucku by celkem sedelo. Puvodni regexpy obsahovaly (vicemene) minimum operatoru (matematicky nutnych pro definici regularniho jazyka), a byly zalozene na stejnem formalismu. Je to v podstate analog "Turing tarpit" pro FSM. A Perl ten tarpit zacal rozsirovat. Je to asi jako kdyby nekdo pridal do Brainfucku konstanty, navesti a par dalsich operatoru. Bude to pohodlnejsi, ale porad to bude sileny jazyk zalozeny na Brainfucku.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    30.9.2014 18:18 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Larry Wall 60
    A pouzivas v takove situaci vselijaka ta Perlova rozsireni, nebo jen klasiku operatory .,?,*
    Kdyz se divam do historie, tak pouzivam v drtive vetsine pripadu ., *, ?, +, [], [^], {,}, (), |.
    nez to clovek vyladi, zda to hleda spravne to co chce, vyjde mu rychleji se vyporadat s nekolika vyjimkami, ktere to najde.
    Tohle nepozoruju.
    A Perl ten tarpit zacal rozsirovat.
    Perl je by design slozity. Larry Wall ho navrhoval s tim, ze jeho vyjadrovaci schopnosti maji byt podobne beznemu jazyku, tj. muzes vyjadrit jednu vec ruznymi zpusoby. Vedlejsi efekt je, ze naucit se ten jazyk je stejne slozite, jako naucit se bezny jazyk.
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    30.9.2014 08:21 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    I kdyz je pravda, ze na to hledani to muze byt (v krajnich pripadech) uzitecne, i tak si myslim, ze by se dal vymyslet lepsi jazyk. Casto v praxi staci (k definici te mnoziny hledanych vyrazu) skladani mensich vyrazu pomoci logickych operatoru, coz se v regexpech zapisuje zbytecne neprehledne.

    Vetsinou kdyz jsem v shellu sahl k regularnim vyrazum (a mel jsem je slozitejsi nez by stacily wildcardy, navic Bashova rozsireni pro sekvence znaku jsou taky super), bylo to proto, ze jsem potreboval vytahnout neco z HTML. Na coz existuji lepsi mechanismy - treba BeautifulSoup. Tvuj use case ve VIMu je predpokladam programovani, coz by melo byt resitelne lepe, jelikoz vetsinou editory zdrojak uz automaticky parsuji.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    30.9.2014 18:40 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Vetsinou kdyz jsem v shellu sahl k regularnim vyrazum (a mel jsem je slozitejsi nez by stacily wildcardy, navic Bashova rozsireni pro sekvence znaku jsou taky super), bylo to proto, ze jsem potreboval vytahnout neco z HTML.
    Parsovat HTML pomoci reg. vyrazu je blbost vzhledem ke slozitosti gramatiky, proto chapu, ze ti to prislo neohrabane a pouzil jsi radsi specializovany nastroj.
    Tvuj use case ve VIMu je predpokladam programovani
    Ne nezbytne. Typicky problem jsou konverze dat mezi formaty. Napr. mam vystup z programu, vypis v podobe hodnot odsazenych taby, potrebuju z toho udelat SQL. Nebo mam poznamky v LaTeXu a potrebuju predelat \item na <li> a dalo by se pokracovat... Ano, mohl bych treba v tom druhem pripade napsat makra pro TeX, ktere to provedou taky, ale proc, kdyz muzu pouzivat mne zname prostredi na vsechno.

    Kdesi niz pises:
    IMHO regexpy jsou klasickym pripadem "Worse is better"
    IMHO reg. vyrazy jsou "good enough". IMHO je to neco jako duct tape. Pro vetsinu problemu to neni idealni reseni, ale je to naprosto dostacujici reseni.
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    1.10.2014 01:48 g.g
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ona "ukecanější syntaxe" snad nevadí, pokud lze používat buď "ukecanou" nebo "kompaktní" podle potřeby, ne?
    Bedňa avatar 29.9.2014 21:22 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Aby si zistil že sa im zbytočne brániš, spravím ti rýchlokurz.
    • Regexp podporuje aj POSIXové znakové sady napr. alnum, alpha, digit... to hádam nepotrebuje ani vysvetlenie. Takto som písal keď som začínal. Tak napr. /[[:digit:]]{5,}/ vyhovuje hocijaký číselný kód minimálne s piatimi číslami. Domáca úloha napíš toto rovnako čitateľne a efektívne bez Regexp.
    • Väčšinou ale aj tak používam zástupné znaky. Ono to má jednoduchú logiku. Zástupný znak je vždy začiatočné písmeno anglického názvu (prípadne zavedené skratka napr \r). \d => digit (číslo) a veľké písmeno robí negáciu, čiže \D je non digit (nečíslo). \s => space \S non space atď, atď.
    • Možno to už začína byť jasnejšie ;)
    • Začiatok reťazca ^ a $ koniec reťazca.
    • Kvantifikátory označujú koľko krát sa má niečo opakovať. * => [0,∞], + => [1,∞], ? => [0,1].
    • Bodka zastupuje hocijaký znak
    • Množiny znakov, napr. [abc] vyhovuje zna a, b, alebo c. Negácia množiny [^abc], tomuto výrazu vyhovuje hocijaké písmeno mimo a, b, c.
    • Prepínače na nastevenie, hľadný, nehľadný, riadkový atď, s týmto vždy bojujem a ladím až pri testoch.
    • Podmienky tak toto sa už dostávame do formy v ktorej sa už dajú písať oneline programy a toto môže odstrašiť a osobne sa tomu snažím vyvarovať. (?(A)X)
    KERNEL ULTRAS video channel >>>
    Bystroushaak avatar 29.9.2014 22:20 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Snahu oceňuji, ale regulární výrazy znám už asi 8 z 10 let, co se pohybuji po internetu. To není o tom, že bych je nezvládal, nebo dokonce neuměl (přiznám se že zapomínám, ale tyhle základy si pořád pamatuji). Je to o tom, že jsem je používal, pak jsem psal vlastní parsery s cyklickými buffery, pak jsem se začal učit rebol, poznal BNF. Pak jsem stále párkrát sáhl po regexpech, než mi finálně došlo, jak strašně debilní regulární výrazy jsou, resp. snaha s nimi dělat cokoliv složitějšího*.

    Vezměme si jako příklad třeba emailovou adresu (která je přesně tím příkladem složitosti). To vypadá jednoduše, že? Na to přece stačí něco jako
    [a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]
    Pak to pustíš, ono si to vesele běží a za půl roku zjistíš, že to nefunguje jak má. Tak to hackuješ a přidáváš.
    ^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$
    A ono se to zase rozbije. Tak se na to vykašleš, googlíš a zjistíš, že pokud to chceš dělat správně (což chceš, protože už máš dost toho se s tím pořád babrat) dle RFC 5322, tak potřebuješ tuhle obludu:
      (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*
      |  "(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]
          |  \\[\x01-\x09\x0b\x0c\x0e-\x7f])*")
    @ (?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
      |  \[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}
           (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:
              (?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]
              |  \\[\x01-\x09\x0b\x0c\x0e-\x7f])+)
         \])
    Najít se ovšem dají i zábavnější:
    (?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
    )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
    \r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
    ?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ 
    \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
    31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
    ](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
    (?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
    (?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
    |(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
    ?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
    r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
     \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
    ?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
    )*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
     \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
    )(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
    )+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
    *:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
    |\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
    \n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
    \r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
    ]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
    ]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
    ?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
    :(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
    :\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
    :(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
    [ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] 
    \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
    \\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
    @,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
    (?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
    )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
    ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
    :[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
    \]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
    \031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
    ?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
    :\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
    ^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
    .\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
    ]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
    [\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
    r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] 
    \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
    |\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
    00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
    .|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
    ;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
    :[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
    (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
    \[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
    ^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
    ]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
    ?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
    ".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
    ?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
    \["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
    ])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
    ])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
    :\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
    \Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
    [^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
    ]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
    ?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
    ()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
    ?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
    @,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
     \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
    ;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
    )*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
    ".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
    (?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
    \[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
    \r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
    "()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
    *))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
    +|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
    .(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
    |(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
    ?:\r\n)?[ \t])*))*)?;\s*)
    Když se na to podíváš, tak vůbec není vidět co to dělá. Potřeboval bych aspoň 30 minut, než bych tu sračku nastudoval a to by mi za tu dobu asi 7x přetekly nervy.

    Největší zábava ovšem je, pokud narazíš někde v knihovním kódu na někoho, kdo si myslí že regexpům rozumí, implementuje tím něco kritického a ty přijdeš na to, že je to rozbité, v nějakém procentě případů. Takový evergreen je třeba parsování HTML, což je ještě 10x komplikovanější, než kód nahoře. Ale kdo by to kdy nezkusil, vždyť jde přece o jeden jediný znak a kolik to ušetří výkonu, když se nemusí startovat parser! A ty se v tom pak máš hrabat a opravovat to, hledat chybu někde uprostřed té přerostlé sekvence náhodných znaků. Fuck this shit.

    Schválně si to srovnej s ABNF verzí a rozmysli si, jestli je pro tebe skutečně tak důležité šetřit místo na disku kompilováním do write-only jazyka, nebo nervy svoje a všech co to kdy budou číst po tobě:
       addr-spec       =   local-part "@" domain
    
       local-part      =   dot-atom / quoted-string / obs-local-part
    
       dot-atom        =   [CFWS] dot-atom-text [CFWS]
    
       CFWS            =   (1*([FWS] comment) [FWS]) / FWS
    
       FWS             =   ([*WSP CRLF] 1*WSP) /  obs-FWS
                                              ; Folding white space
    
       WSP             =   SP / HTAB          ; white space
    
       obs-FWS         =   1*WSP *(CRLF 1*WSP)
    
       ctext           =   %d33-39 /          ; Printable US-ASCII
                           %d42-91 /          ;  characters not including
                           %d93-126 /         ;  "(", ")", or "\"
                           obs-ctext
    
       obs-ctext       =   obs-NO-WS-CTL
    
       ccontent        =   ctext / quoted-pair / comment
    
       comment         =   "(" *([FWS] ccontent) [FWS] ")"
    
       dot-atom-text   =   1*atext *("." 1*atext)
    
       atext           =   ALPHA / DIGIT /    ; Printable US-ASCII
                           "!" / "#" /        ;  characters not including
                           "$" / "%" /        ;  specials.  Used for atoms.
                           "&" / "'" /
                           "*" / "+" /
                           "-" / "/" /
                           "=" / "?" /
                           "^" / "_" /
                           "`" / "{" /
                           "|" / "}" /
                           "~"
    
       specials        =   "(" / ")" /        ; Special characters that do
                           "<" / ">" /        ;  not appear in atext
                           "[" / "]" /
                           ":" / ";" /
                           "@" / "\" /
                           "," / "." /
                           DQUOTE
    
       quoted-string   =   [CFWS]
                           DQUOTE *([FWS] qcontent) [FWS] DQUOTE
                           [CFWS]
    
       qcontent        =   qtext / quoted-pair
    
       qtext           =   %d33 /             ; Printable US-ASCII
                           %d35-91 /          ;  characters not including
                           %d93-126 /         ;  "\" or the quote character
                           obs-qtext
    
       obs-qtext       =   obs-NO-WS-CTL
    
       obs-NO-WS-CTL   =   %d1-8 /            ; US-ASCII control
                           %d11 /             ;  characters that do not
                           %d12 /             ;  include the carriage
                           %d14-31 /          ;  return, line feed, and
                           %d127              ;  white space characters
    
       quoted-pair     =   ("\" (VCHAR / WSP)) / obs-qp
    
       VCHAR           =   %x21-7E            ; visible (printing) characters
    
       obs-qp          =   "\" (%d0 / obs-NO-WS-CTL / LF / CR)
    
       obs-local-part  =   word *("." word)
    
       word            =   atom / quoted-string
    
       atom            =   [CFWS] 1*atext [CFWS]
    
       domain          =   dot-atom / domain-literal / obs-domain
    
       domain-literal  =   [CFWS] "[" *([FWS] dtext) [FWS] "]" [CFWS]
    
       dtext           =   %d33-90 /          ; Printable US-ASCII
                           %d94-126 /         ;  characters not including
                           obs-dtext          ;  "[", "]", or "\"
    
       obs-dtext       =   obs-NO-WS-CTL / quoted-pair
    
       obs-domain      =   atom *("." atom)
    
    NB For SMTP mail, the domain-literal is restricted by RFC5321 as follows:
    
       Mailbox        = Local-part "@" ( Domain / address-literal )
    
       address-literal  = "[" ( IPv4-address-literal /
                        IPv6-address-literal /
                        General-address-literal ) "]"
    
       IPv4-address-literal  = Snum 3("."  Snum)
    
       IPv6-address-literal  = "IPv6:" IPv6-addr
    
       Snum           = 1*3DIGIT
                      ; representing a decimal integer
                      ; value in the range 0 through 255
    
       IPv6-addr      = IPv6-full / IPv6-comp / IPv6v4-full / IPv6v4-comp
    
       IPv6-hex       = 1*4HEXDIG
    
       IPv6-full      = IPv6-hex 7(":" IPv6-hex)
    
       IPv6-comp      = [IPv6-hex *5(":" IPv6-hex)] "::"
                      [IPv6-hex *5(":" IPv6-hex)]
                      ; The "::" represents at least 2 16-bit groups of
                      ; zeros.  No more than 6 groups in addition to the
                      ; "::" may be present.
    
       IPv6v4-full    = IPv6-hex 5(":" IPv6-hex) ":" IPv4-address-literal
    
       IPv6v4-comp    = [IPv6-hex *3(":" IPv6-hex)] "::"
                      [IPv6-hex *3(":" IPv6-hex) ":"]
                      IPv4-address-literal
                      ; The "::" represents at least 2 16-bit groups of
                      ; zeros.  No more than 4 groups in addition to the
                      ; "::" and IPv4-address-literal may be present.
    Ano, je to delší, ale zase kompletní (včetně například podpory IPv6 jako domény) a krásně čitelné i s komentáři. Cílem programu, speciálně v případě parseru, by nemělo být snažit se kód zkrátit na úkor čitelnosti. Od toho máme interpretry a kompilátory.

    *Přičemž složitost se podobně jako v umělé inteligenci nepočítá podle toho jak ti to přijde složité než se do toho pustíš, ale jak je to skutečně složité poté co to implementuješ, někdo to zboří, pak to třikrát ohackuješ, někdo to zboří, pak sepíšeš formální gramatiku a po roce to konečně funguje.

    PS: Všechny kódy slouží jen jako ilustrace, jejich korektnost jsem netestoval. Jedná se o reprodukci mých historických osobních zkušeností, kterou jsem dal dohromady na základě krátkého googlení.
    Bystroushaak avatar 29.9.2014 22:22 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    xkucf03 avatar 29.9.2014 22:30 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    V tomhle nejsme ve sporu, psal jsem, že na složitější věci si člověk udělá gramatiku… Ale to neznamená, že by regexpy byly na nic – na spoustu věcí se skvěle hodí.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    29.9.2014 22:34 Zopper | skóre: 15
    Rozbalit Rozbalit vše Re: Larry Wall 60
    +1 Nejčastěji někde v kombinaci s GREP či jinou utilitou. Psát gramatiku na tohle by bylo trochu moc. :-)
    "Dlouho ještě chcete soudit proti právu, stranit svévolníkům?" Ž 82,2
    29.9.2014 23:13 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Predevsim, utility jako grep by mely mit k dispozici sirokou knihovnu preddefinovanych vyrazu, ktere se typicky hledaji (veci jako cislo, identifikator, slovo, email, url, ..)

    Lidi, myslete trochu mimo to co uz existuje! Jasne, ze to jde udelat daleko lip..
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    30.9.2014 16:26 Zopper | skóre: 15
    Rozbalit Rozbalit vše Re: Larry Wall 60
    A jak by to asi fungovalo a skládalo se dohromady, když chci například najít něco jako \d{3}[a-c]? U emailu nebo url by se nějaké built-in řešení hodilo, ale většina výrazů by stejně byla ad-hoc lepení základních bloků (nějaký znak) dohromady, stejně jako teď s regexpy. Jen v jiné syntaxi.
    "Dlouho ještě chcete soudit proti právu, stranit svévolníkům?" Ž 82,2
    30.9.2014 17:12 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Zrovna u takoveho regexpu bych se bal, ze mi to najde spousta veci, co nechci.. V jakem kontextu jsi ho pouzil?
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    1.10.2014 01:50 g.g
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Když máte pojmenované podvýrazy, tak už máte gramatiku. :-)
    1.10.2014 08:27 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    V tom nevidim problem, mam totiz za to, ze Perlove regularni vyrazy muzou definovat i neregularni gramatiky (protoze umoznuji referenci na predchozi definovanou skupinu). Ale mozna se pletu; kazdopadne, omezit to lze myslim stejnym zpusobem.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    Bystroushaak avatar 29.9.2014 22:53 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    V tomhle nejsme ve sporu, psal jsem, že na složitější věci si člověk udělá gramatiku… Ale to neznamená, že by regexpy byly na nic – na spoustu věcí se skvěle hodí.
    Tahle odpověď nebyla pro tebe ;)

    O tomhle už jsme se bavili (dával jsem tenkrát příklad, že na jednoduché věci radši používám .split() a indexování polí, než regexpy). Takže v podstatě souhlasím a skutečně nejsme ve sporu.
    pavlix avatar 30.9.2014 10:58 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    dával jsem tenkrát příklad, že na jednoduché věci radši používám .split() a indexování polí, než regexpy
    Jaký smysl má srovnávat nástroje postavené nad regexy a split() postavený nad konstantními řetězci?
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Bystroushaak avatar 30.9.2014 11:03 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    dával jsem tenkrát příklad
    Tím jsem chtěl připomenout tu (imho vyčerpávající) diskuzi, ne argumentovat v téhle.
    Bedňa avatar 29.9.2014 23:26 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Larry Wall 60
    OK, ale keby si si nakreslil diagram obsahujúci všetky možnosti emailovej adresy, tak by zrovna triviálny nebol. Poďalšie niesu tam využité možnosti použitia komentárov (pri regex). Nakoniec aj tak stačí /^.+@.+%/ a pokiaľ chceš istotu musíš si email aj tak overiť.

    Otázkou je tiež, aký výkon pársovania pri tomto štýle zápisu to dokáže dosiahnuť.

    Trafil som vedľa a dostali by sme sa do diskusie čo je lepšie Java, alebo Python?

    Beriem že ti vyhovujú ABNF a podal si o tom dostačujúce argumenty.
    KERNEL ULTRAS video channel >>>
    Bystroushaak avatar 29.9.2014 23:51 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    OK, ale keby si si nakreslil diagram obsahujúci všetky možnosti emailovej adresy, tak by zrovna triviálny nebol.
    No, jenže takhle je to skoro se vším. Prakticky pokaždé, když někdo použije regexp, tak to má nějakou mouchu, která ti prostě nedojde (částečně kvůli nepřehlednosti), v 99% to funguje dobře a pak najednou v 1% ti spadne na nohu kovadlina z čistého nebe. Ne že by se to nemohlo stát jinde, ale tam většinou není problém to bezbolestně opravit.
    Otázkou je tiež, aký výkon pársovania pri tomto štýle zápisu to dokáže dosiahnuť.
    Klidně ti to může vygenerovat parser v C, který si pak zkompiluješ do nativního kódu.
    čo je lepšie Java, alebo Python?
    Pak by jsme museli definovat význam slova lepší a bylo by to celé nudné a zdlouhavé.
    Bedňa avatar 30.9.2014 12:01 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Je to o rozdielnom prístupe k riešeniu problémov. Pre mňa sú Regexp neoddeliteľnou súčasťou pri práci s reťazcami.
    KERNEL ULTRAS video channel >>>
    pavlix avatar 30.9.2014 13:09 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Prakticky pokaždé, když někdo použije regexp, tak to má nějakou mouchu
    Prakticky pokaždé, když někdo napíše kus kódu, má to nějakou mouchu. Nelze soudit regex (nástroj) podle kontroly mailových adres (častého leč nepříliš užitečného užití) nebo podobných nesmyslů. Podle mě je zkopírovaný regex z netu asi stejně užitečný nebo nebezpečný jako zkopírovaný kód z netu.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Bystroushaak avatar 30.9.2014 14:04 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Podle mě je zkopírovaný regex z netu asi stejně užitečný nebo nebezpečný jako zkopírovaný kód z netu.
    Podle mě ne. Pokud je to nepochopený kód z netu, tak ano, ale většinou platí, že kód v programovacím jazyce je podstatně předvídatelnější a přehlednější, než regexp.
    pavlix avatar 30.9.2014 14:08 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    V tom se zřejmě neshodneme.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    30.9.2014 13:45 prqek | blog: prqek
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ono je dobré tušit, kde je ta hranice složitosti, za kterou se to už nevyplatí používat. Pokud mě pamět neklame, tak regulární výrazy (tedy podle chomského hierarchie) nezvládají závorky. Tudíž snažit se s jejich pomocí parsovat html nemůže fungovat, leda bych se mohl spolehnout na nějaké šikovné, ale hlavně neměnné formátování.
    Bystroushaak avatar 30.9.2014 14:05 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tudíž snažit se s jejich pomocí parsovat html nemůže fungovat, leda bych se mohl spolehnout na nějaké šikovné, ale hlavně neměnné formátování.
    Ve většině případků, které jsem viděl se lidi snaží vytáhnout jen jeden tag, například <title>.
    pavlix avatar 30.9.2014 14:14 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Když už z této oblasti, tak jako mnohem zajímavější použití vidím vytažení dat ze skriptem generovaných struktur (tabulek apod), kdy člověka vůbec nezajímá struktura z hlediska nějakého formátu či standardu, takže je vcelku zbytečné používat parser pro daný formát, ale je mnohem lepší zafixovat formát podle skutečného výstupu (navíc to funguje bez ohledu na korektnost formátu). Takto jde třeba tahat odkazy a tokeny z různých webových služeb (jako je třeba youtube).

    Zůstává starou pravdou, že je dobré vybírat si nástroje i podle úlohy, kterou je třeba řešit.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    30.9.2014 15:07 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Driv jsem delaval s HTML to, co popisuje Bystroushaak, pres regexpy, dneska bych to ale delal jedine pres BeautifulSoup. Je to daleko pohodlnejsi a mnohem lepe se to i ladi. Je to sice trochu kanon na vrabce, ale na rychlosti vetsinou v tech one-off aplikacich nezalezi.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    30.9.2014 15:10 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Driv jsem delaval s HTML to, co popisuje Bystroushaak, pres regexpy, dneska bych to ale delal jedine pres BeautifulSoup.
    Dík za tip.
    pavlix avatar 30.9.2014 15:12 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Driv jsem delaval s HTML to, co popisuje Bystroushaak, pres regexpy, dneska bych to ale delal jedine pres BeautifulSoup.
    S tím souhlasím, pokud se z toho časem nevyklube spíše úloha v té oblasti, kterou jsem popisoval já.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    xkucf03 avatar 30.9.2014 21:45 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    XPath: /html/head/title
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Bystroushaak avatar 30.9.2014 21:56 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    1.10.2014 20:10 Ivan
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Zrovna regularni vyrazy v Perlu nejsou uplne regularni, tzn. k jejich vyhodnoceni je potreba zasobnikovy automat. Regularni automat je neprijme. Podle me jsou RE v Perlu maximum toho ceho jde pomoci RE (respektive RE gramatiky) dosahnout. Pro slozitejsi pripady uz jsou tu veci zalozene na BNF, ty ale casto vyzaduji ruzne generatory kodu (bison/antlr/...) anebo jsou divoke jinym zpusobem(boost::spirit).

    PS: zatimco klon RE v Lispu je vice-mene mrtvej a malo kdo ho zna. Perlovske extenze probublaly do Pythonu, grepu anebo i do Oracle.
    Bystroushaak avatar 2.10.2014 00:29 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    PS: zatimco klon RE v Lispu je vice-mene mrtvej a malo kdo ho zna.
    Co tam používají místo toho?
    2.10.2014 10:50 Ivan
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Pouzivaji se tam porad, akorat se muzou zdat lidem divny, protoze Lispovsky extenze skoro nikdo nezna. Zatimco Perlovska syntaxe se dostala i do jinych jazyku.
    29.9.2014 22:24 Zopper | skóre: 15
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tohle moc nepomůže. Co jsem se s odporem k regexpům setkal, tak to je hlavně o nepochopení principu činnosti. Občas pomůže vysvětlení základů stavových automatů a názorná ukázka, jak ten regexp vlastně funguje jako FSM.

    Pozn.: že to tak úplně neplatí a věci jako look-ahead v tom dělají bordel v tu chvíli nezmiňovat. Na někoho, kdo se učí trojčlenku, taky nebude nikdo vytahovat diferenciální počet.
    "Dlouho ještě chcete soudit proti právu, stranit svévolníkům?" Ž 82,2
    Bystroushaak avatar 29.9.2014 22:56 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tohle moc nepomůže. Co jsem se s odporem k regexpům setkal, tak to je hlavně o nepochopení principu činnosti. Občas pomůže vysvětlení základů stavových automatů a názorná ukázka, jak ten regexp vlastně funguje jako FSM.
    Nevím čemu by to mělo pomáhat. Já principu činnosti rozumím a asi by mi ani nedělalo problém napsat si jejich interpretr. Jen to prostě vůbec nepovažuji za správný způsob řešení složitých problémů. Přitom platí to co jsem psal - složitost není určována pocitem, ale implementací korektního parseru gramatiky (třeba podle RFC), což je v regexpech většinou k zblití. Viz ten příklad s emailovou adresou.
    29.9.2014 23:18 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tohle moc nepomůže. Co jsem se s odporem k regexpům setkal, tak to je hlavně o nepochopení principu činnosti. Občas pomůže vysvětlení základů stavových automatů a názorná ukázka, jak ten regexp vlastně funguje jako FSM.
    Jenže přesně na tyhle věci (FSM) regexp právě moc dobrý není.

    Zájemcům o FSM doporučuji Ragel.
    30.9.2014 13:53 prqek | blog: prqek
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jak to myslíš? Myslím, že Zopper nechtěl vyrábět FSM, tak že začne regexpem, ale chtěl říct, že pochopení vztahu FSM a regexpů a toho, jak to funguje, člověku pomůže v tom, aby regexpy správně používal a nesnažil se tím dělat něco, co to z principu nemůže umět (např. parsovat HTML).
    30.9.2014 15:03 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ja z tehle diskuse mam pocit, ze vsichni tady vedi, co jsou regexpy, regularni jazyky, a tak. Nema smysl se tu takto prsit - neni to dobra forma diskuse.

    Odpurci regexpu maji proste dobre duvody, proc se jim nelibi, a neni v tom, ze by jim nerozumeli. Ja mam pocit, ze spis proto, ze prave znaji nejakou jinou alternativu.

    Mozna se ale pletu, a najde se tady nejaky obhajce regexpu, ktery zna nejakou ze zminenych alternativ (bylo jich asi 6). Bylo by to pekne, protoze by se ale aspon diskuse stala vecnejsi.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    30.9.2014 15:37 prqek | blog: prqek
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Nečet jsem tu diskuzi celou, s Perlem jsem se nikdy nenaučil (resp. pro nepoužívání několikrát zapoměl), ale většína argumentů odpůrců mi přijde jako kdyby si stěžovali, že tím kladivem se jim špatně šroubuje. Příčinu vidím právě v tom, že neví, co to vlastně regulární výrazy jsou. Alternativy jsem si nevšim žádné, např. třeba BeautifulSoup nepovažuju za alternativu, protože řeší jinou třídu problémů. Ale možná na to koukám moc akedemicky :)
    Václav 30.9.2014 16:09 Václav "Darm" Novák | skóre: 26 | blog: Darmovy_kecy | Bechyně / Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Problém spousty lidí je mimojiné to, že se regexpy využívají stylem „Když umím s kladivem, každý problém vypadá jako hřebík“
    Cross my heart and hope to fly, stick a cupcake in my eye!
    30.9.2014 17:08 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    IMHO regexpy jsou klasickym pripadem "Worse is better". Nemyslim, ze existuje siroce prijimana 100% alternativa, ale ruzna pouziti regexpu se celkem temi alternativami daji pokryt.

    Navic, ja nejsem konceptualne proti regularnim vyrazum (jazykum), ale proti jejich zpusobu zapisu, ktery je neprehledny.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    30.9.2014 19:00 Ondrej Santiago Zajicek
    Rozbalit Rozbalit vše Re: Larry Wall 60
    +1
    30.9.2014 21:35 prqek | blog: prqek
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Zápis je nepřehledný, to se shodnem. Zvlášť když se k tomu přidají různé syntaxe (dál-li se to tak říct) - někde se escapuje to, jinde ono, existují různé zkratky. Otázka jak to udělat lépe...
    1.10.2014 01:27 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    No uz to tady bylo naznaceno, ale lidem se to nelibilo.. Myslim, ze zakladni problem je v tom, ze regexpy jsou retezce, tj. ze vsechno je znak textu, pokud nejde o vyjimku, tj. operator, a ty je vetsinou treba nejak uvozovat. Ja bych to obratil - retezce doslovneho textu bych dal do uvozovek, a operatory (a promenne) bych naopak syntakticky uprednostnil (tedy se vyhnul jejich escapovani), jako to treba typicky delaji prave ty definice gramatik, co zminil Bystroushaak. No a po tehle "inverzi" bych pridal daleko vetsi mnozstvi ruznych dalsich operatoru (napr. uzitecne by byly logicke spojky, operator kontextu, moznost definovat flagy pro jednotlive podvyrazy, moznost podvyrazy parametrizovat.. to jen tak narychlo par napadu) a standardnich podvyrazu (jak uz jsem rikal - slovo, identifikator, cislo, email, url, datum..).

    Ale jinak se mi libi pristup, ktery prosazuje Augeas (a je dnes myslim dost moderni) - pokud mozno vsechen text nejdriv naparsovat do stromove struktury, a pracovat s tou strukturou, a pak to zase vyplivnout zpracovane zpatky v pozadovanem formatu. To mi pripada daleko lepsi nez strilet do tmy pomoci regexpu.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    1.10.2014 01:34 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    A mimochodem: Dalsi vyznamna vyhoda definice takoveho jazyka by spocivala v tom, ze by bylo mozne ho pak aplikovat nejen na text (posloupnost znaku), ale na libovolne posloupnosti dat. Coz regexp, prave kvuli tomu, ze je zalozen syntakticky na textu, nedokaze.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    1.10.2014 12:32 Ondrej Santiago Zajicek
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Myslim, ze zakladni problem je v tom, ze regexpy jsou retezce, tj. ze vsechno je znak textu, pokud nejde o vyjimku, tj. operator, a ty je vetsinou treba nejak uvozovat.

    Souhlasim, souvisejici problem je ten, ze whitespace je chapan take jako matchovany znak a ne jako whitespace v gramatice regularniho vyrazu, v dusledku toho jsou regularni vyrazy typicky necitelne chrchle. Druhy problem vidim v chybejici 'abstrakci a aplikaci', tedy nemoznosti snadno pojmenovat a odkazovat se na pomocne parametrizovane regularni vyrazy a ty pouzit pro skladani finalniho vyrazu. Myslim ze uz jenom techto par uprav by citelnost regularnich vyrazu podstatne zlepsilo.
    slovo, identifikator
    Problem je v tom, ze prakticky kazdy jazyk ma lehce jinou syntax pro identifikatory, takze univerzalni syntax pro ne neexistuje.

    Podobne taky pro cislo - ma zahrnovat unarni minus? unarni plus? desetinnou tecku? carku? tecku/carku podle locale? oddelovace tisicu podle locale? To vse zavisi na kontextu, ve kterem to hledam.
    Ale jinak se mi libi pristup, ktery prosazuje Augeas (a je dnes myslim dost moderni) - pokud mozno vsechen text nejdriv naparsovat do stromove struktury
    To je ale pristup, ktery s problematikou regularnich vyrazu souvisi jen velmi okrajove.
    pavlix avatar 2.10.2014 18:08 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Souhlasim, souvisejici problem je ten, ze whitespace je chapan take jako matchovany znak a ne jako whitespace v gramatice regularniho vyrazu, v dusledku toho jsou regularni vyrazy typicky necitelne chrchle.
    To je ale problém toho, kdo to takto používá, minimálně pythoní implementace whitespace umí.
    Druhy problem vidim v chybejici 'abstrakci a aplikaci', tedy nemoznosti snadno pojmenovat a odkazovat se na pomocne parametrizovane regularni vyrazy a ty pouzit pro skladani finalniho vyrazu.
    Nad tím už jsem taky párkrát přemýšlel a na druhou stranu nevidím úplně důvod, proč bych si nemohl v pythonu ty regexy poskládat. Navíc jsem to viděl jako dílčí řešení v nějakém generátoru parserů.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    1.10.2014 08:31 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Navic, ja nejsem konceptualne proti regularnim vyrazum (jazykum), ale proti jejich zpusobu zapisu, ktery je neprehledny.
    A co re.VERBOSE v Pythonu?
    When your hammer is C++, everything begins to look like a thumb.
    1.10.2014 09:23 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    To je trochu lepsi, ale moc to nemeni na tom, ze to je "FSM tarpit", jak jsem zminil vys.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    29.9.2014 23:51 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Občas pomůže vysvětlení základů stavových automatů a názorná ukázka, jak ten regexp vlastně funguje jako FSM.
    Pomoci FSM jde vysvetlit cokoliv, ale nevim, jak moc to pomuze k pochopeni regularnich vyrazu. ;-]
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    5.10.2014 10:20 kolcon | skóre: 15 | blog: kolcon
    Rozbalit Rozbalit vše Re: Larry Wall 60
    emailova adresa je jednoducha zalezitost?
    Bystroushaak avatar 5.10.2014 14:21 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Vidíš tam někde takové tvrzení?
    5.10.2014 17:00 kolcon | skóre: 15 | blog: kolcon
    Rozbalit Rozbalit vše Re: Larry Wall 60
    pochopil jsem tvuj vyrok tak, ze jsou regexpy naprd a jejich jedina vyhoda je, ze jsou kratke. Je teda fakt, ze to slovo zdanlive v te prvni casti nedava moc smysl... nebo to byla cele ironie?
    Bystroushaak avatar 5.10.2014 17:39 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    pochopil jsem tvuj vyrok tak, ze jsou regexpy naprd a jejich jedina vyhoda je, ze jsou kratke
    Správně.
    Je teda fakt, ze to slovo zdanlive v te prvni casti nedava moc smysl... nebo to byla cele ironie?

    Co ti na tom nedává smysl?
    cokoliv zdánlivě jednoduchého, jako je emailová adresa
    Viděl jsem desítky případů, kdy se lidi pouštěli přesně do toho, co popisuji, pomocí regexpů, protože si mysleli, že je to lehké. Ve skutečnosti to lehké není, proto jsem psal "zdánlivě lehké".
    5.10.2014 19:20 kolcon | skóre: 15 | blog: kolcon
    Rozbalit Rozbalit vše Re: Larry Wall 60
    jo tak... no ten regexp existuje, ale neni pravda moc hezky.

    Jak to tedy parsovat jinak, nez pres regexp?
    Bystroushaak avatar 5.10.2014 19:59 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jak to tedy parsovat jinak, nez pres regexp?
    Co třeba dočíst zbytek diskuze?
    5.10.2014 20:05 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Byl by nějaký nástroj, který mi vygeneruje parser s ABNF?
    xkucf03 avatar 28.9.2014 00:16 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Má super web a fotky :-)
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    murzim avatar 28.9.2014 17:31 murzim | skóre: 12 | blog: murzim
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jo :) Ta žlutá zabijí... :D
    Bůh stvořil člověka a opice vznikly evolucí "o pár let později" z blbých lidí.
    xkucf03 avatar 28.9.2014 17:52 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Já v tom tedy vidím zelenou. A každopádně je to mnohem lepší než třeba žluté písmo na bílém pozadí (viděl jsem v jednom programu, nebo spíš neviděl.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    30.9.2014 16:39 koudy
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Žlutá na bílé? Kdo to probůh navrhoval?

    Zato žlutá/zelená na černé, takhle ve 3 hodiny ráno po 8 hodinovém čumění do monitoru, to je přímo balzám pro oči. :)
    28.9.2014 13:46 kolcon | skóre: 15 | blog: kolcon
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Long Live Larry :)
    jiri.one avatar 29.9.2014 07:08 jiri.one | skóre: 19 | blog: Jiriho blog
    Rozbalit Rozbalit vše Re: Larry Wall 60
    +1
    www.jiri.one - Můj blog o Linuxu, hrách, životě, ...
    29.9.2014 11:24 Honza
    Rozbalit Rozbalit vše Re: Larry Wall 60
    No, programátor to bude určitě velmi schopnej, ale kdybych já vymyslel a (přímo nebo nepřímo přes následníky) prosadil Perl, tak bych do konce života chodil kanálama. Nemám nic proti jednoduchému výkonnému skriptovacímu jazyku, nemám nic proti základní céčkové syntaxi, nemám nic proti procedurálnímu programování... ale Perl mi fakt přijde jako úchylnost. To nemohl navrhnout třeba nějakou interpretovanou podmnožinu C, kde by se všechno složitější řešilo přes funkce standardní knihovny (jako v C)?
    Ruža Becelin avatar 29.9.2014 11:32 Ruža Becelin | skóre: 40 | blog: RuzaBecelinBlog
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Prasit se da ve vsem, sila Perlu je v moznosti udelat jednu vec ruznymi zpusoby.
    egg avatar 29.9.2014 15:15 egg | skóre: 20 | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jen pro srovnání: Jedno z pravidel filosofie Pythonu je, že jedna věc se nemá dělat různými způsoby. :-)
    6.10.2014 20:54 forom
    Rozbalit Rozbalit vše Re: Larry Wall 60
    no a preto niektori programatori maju radsej perl. v perle piseme tak ako myslime, neradi ohybame svoje myslenie na jediny spravny sposob ktory nam niekto predpise.
    pavlix avatar 6.10.2014 21:39 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    A proto když někdo napíše v diskuzi, že v Pythonu se všechno dělá jen jedním způsobem, sežereme mu to i s navijákem.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    pavlix avatar 6.10.2014 21:38 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jedno z pravidel filosofie Pythonu je, že jedna věc se nemá dělat různými způsoby.
    To má být vtip?
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Bystroushaak avatar 7.10.2014 00:28 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Imho tím byla myšlena relativně atomická (to není to správné slovo, ale lepší mě teď nenapadá) operace. Protipříklad je pak PHP, kde se často jedna věc dá udělat pomocí 10 různých náhodně pojmenovaných fůnkcí (včetně různých konvencí a parametrů), které jsou nablity všude možně po celém API.
    egg avatar 7.10.2014 00:30 egg | skóre: 20 | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    rADOn avatar 7.10.2014 00:59 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ne, to je část zenu. Ale doslova je to tak že má existovat pokud možno jeden zřejmý způsob jak věc udělat. "There should be one-- and preferably only one --obvious way to do it." O tom že se dá najít deset dalších "non-obvious" způsobů nikdo nepochybuje…
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    pavlix avatar 7.10.2014 09:43 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Srovnej:
    Jedno z pravidel filosofie Pythonu je, že jedna věc se nemá dělat různými způsoby.
    There should be one-- and preferably only one --obvious way to do it.
    První mi stále připadá jako vtip, o druhém jsem ochotný se bavit. Ale jeden příklad za všechny, když chci aby objekt generoval nějakou posloupnost nebo iteroval přes nějaká data, můžu ho udělat jako třídu nebo jako generátorovou funkci. Mám za to, že se obojí prezentuje jako obvious way, takže si nejsem jistý, zda si pythonisti tak trochu nelžou do kapsy.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    egg avatar 7.10.2014 09:53 egg | skóre: 20 | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ale jeden příklad za všechny, když chci aby objekt generoval nějakou posloupnost nebo iteroval přes nějaká data, můžu ho udělat jako třídu nebo jako generátorovou funkci.
    Pokud tomu v konkrétním případě něco nebrání, na tohle je IMHO právě určený generátor. Třída může dělat totéž, ale obvykle tato cesta vede na boilerplate kód, ve kterém se ztratí jednoduchá myšlenka.
    rADOn avatar 7.10.2014 11:42 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Přesně tak. Psát iterátor má smysl jen když potřebuju něco co generátor neumí (třeba držet více stavových informací než co protlačím z yieldu), jinak je to zbytečná práce. A co může být více "obvious" než ušetřit si práci?
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    pavlix avatar 7.10.2014 15:49 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Psát iterátor má smysl jen když potřebuju něco co generátor neumí (třeba držet více stavových informací než co protlačím z yieldu)
    Tady se zjevně neshodneme. Já osobně povětšinou spíše zastávám better explicit than implicit, pokud to není vyloženě hezky napsatelné jako generátorová funkce.
    A co může být více "obvious" než ušetřit si práci?
    Více obvious než ušetřit si práci se psaním může být ušetřit si práci se čtením a vyznáním se v tom. Tady asi zase budu ten špatný pro všechny, protože pro frantu nejsem dost javista, pro vás nejsem dost pythonista a pro další nejsem dost perlista.

    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    rADOn avatar 7.10.2014 17:02 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Pokud explicitně vyjádříš nějakou _myšlenku_ tak jsem všema deseti pro. Pokud jen explicitně opisuješ boilerplate kód tak nepřidáváš myšlenku ale syntaktický cukr. Třeba ten tvůj příklad je v mojí knize naprosto košer (kromě toho že je to kontext manger a ne iterátor :-) pacz dělá užitečnou práci v konstruktoru.

    "čtení a vyznání se" je natolik subjektivní že budeš vždycky špatnej. Mě tady zase brblaj céčkaři když napíšu list comprehension…
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    29.9.2014 19:04 prqek | blog: prqek
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Síla? Právě na tom ztroskotaly moje snahy se Perl naučit...
    29.9.2014 12:15 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Nikdo ti nebrání používat jen funkce z modulu POSIX. Ale nějak nevidím důvod vymýšlet kvůli tomu Perl.
    29.9.2014 15:05 Honza
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Možnost prasit je špatná, i když se dá i neprasit, protože můžou prasit kolegové, autoři knihoven nebo prostě jiní programátoři, s jejichž kódem se setkáte. Nejsem nějaký krasoduch, zastávám názor, že na jednoduché věci (třeba malý CGI script) se mají používat jednoduché nástroje (třeba jednoduchý skriptovací jazyk syntaxí podobný C). Akorát si prostě myslím, že parametry do funkcí se mají předávat "normálně", že třaba operace se soubory nebo přístup k regulárním výrazům se mají dělat přes knihovní funkce atd. atd. (Nejsem znalec Perlu, ale určitě by se dalo najít dost jiných prasáren.)
    xkucf03 avatar 29.9.2014 15:16 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    že třaba operace se soubory nebo přístup k regulárním výrazům se mají dělat přes knihovní funkce

    Ono to, že se ti v programu magicky objeví proměnné $0, $1, $2 … a v nich máš skupiny z regulárního výrazu, to trochu prasárna je, ale na druhou stranu to umožňuje psát dost elegantně a úsporně – navíc zrovna tohle je věc, kterou se naučíš celkem snadno a je to takový standard.

    Jinak souhlas, když se všechno dělá přes metody/funkce, tak je to srozumitelnější a je v tom větší pořádek. Tohle se mi právě líbí na Javě – všechno je metoda, třída nebo rozhraní, všude se proklikáš na JavaDoc resp. zdroják dané metody… a ten jazyk samotný je jednoduchý.

    Na druhou stranu skript na pár řádků radši napíšu v Perlu.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    6.10.2014 20:58 forom
    Rozbalit Rozbalit vše Re: Larry Wall 60
    no ono hlavne v jave ked chce clovek urobit "jednoduchu" operaciu ako otvorit subor pre citanie tak sa upise cez vytvaranie niekolkych objektov, etc... ak chcem urobit jednoduchu vec a nekomplikovat ju tak by mal byt aj kod jednoduchy. ak to chcem rozviest a riesit napr. spomenute otvorenie suboru s detailnym definovanim systemovych suvislosti, urobit to async, tak potom ano. ale v 99% pripadov potrebuje len clovek otvorit handler, precitat obsah, zavriet.
    xkucf03 avatar 6.10.2014 22:17 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    no ono hlavne v jave ked chce clovek urobit "jednoduchu" operaciu ako otvorit subor pre citanie tak sa upise cez vytvaranie niekolkych objektov

    Objekty tam sice jsou, ale není to žádná tragédie:

    try (BufferedReader vstup = new BufferedReader(new InputStreamReader(new FileInputStream("/etc/passwd")))) {
    	for (String řádek = vstup.readLine(); řádek != null; řádek = vstup.readLine()) {
    		System.out.println("PASSWD: " + řádek);
    	}
    }

    Na počet řádků to není o moc horší než ten Perl.

    Případně, pokud to potřebuješ častěji, není problém to zabalit do vlastní třídy a volat to takhle jednoduše:

    try (ČtečSouboru vstup = new ČtečSouboru("/etc/passwd")) {
    	for (String řádek : vstup) {
    		System.out.println("Passwd: " + řádek);
    	}
    }
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    6.10.2014 23:26 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Na otevření souboru je potřeba vytvořit tři objekty. Komu se to nelíbí, může si vytvořit čtvrtý a ty tři do něj zabalit. Javovská filosofie v kostce :-D
    xkucf03 avatar 7.10.2014 00:20 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Ano, je na tom vidět, že složitější věci se skládají z jednodušších a že od implementačních detailů můžeš abstrahovat a pracovat na vyšší úrovni – tohle Java dobře podporuje. A hezké na tom je, že se to řeší pomocí standardních prostředků (rozhraní, třídy, metody…) a ne nějakých speciálních jazykových konstrukcí – takže si takovou knihovnu může napsat kdokoli, ne jen autor jazyka/platformy. A do všeho je dobře vidět, minimum magie a šamanismu :-)

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    7.10.2014 01:08 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ano, je na tom vidět, že složitější věci se skládají z jednodušších a že od implementačních detailů můžeš abstrahovat a pracovat na vyšší úrovni – tohle Java dobře podporuje.
    Stejně jako řada dalších OOP jazyků... Ale abych byl fér, tak ten kód výše není žádná vada jazyka, spíš jen IMHO ne moc šikovný návrh knihovny...
    A do všeho je dobře vidět, minimum magie a šamanismu :-)
    Wat? Myslíš jako např. do správy paměti, struktury objektu, způsobu volání metod apod.? :-D
    pavlix avatar 7.10.2014 09:46 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tak hlavně ta věta, takto interpretována, je oxymorón...
    A do všeho je dobře vidět, minimum magie a šamanismu :-)
    Vynutit minimum magie a šamanismu na straně uživatele je možné právě jen když do ničeho dobře nevidí.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    xkucf03 avatar 7.10.2014 09:57 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ale abych byl fér, tak ten kód výše není žádná vada jazyka, spíš jen IMHO ne moc šikovný návrh knihovny...

    To bude nejspíš tím, že standardní knihovna v Javě nevzniká, jako když pejsek s kočičkou vařili dort. Nejde tam vrazit všechno, co se někomu líbí. Od toho jsou další knihovny/frameworky, které se běžně používají.

    Ostatně když si čtu o Pythonu, tak hodně těch zajímavých věcí taky není ve standardní knihovně a člověk by si kvůli tomu musel doinstalovat nějaké obskurní rozšíření od někoho třetího.

    Wat? Myslíš jako např. do správy paměti, struktury objektu, způsobu volání metod apod.?

    Tím myslím, že když si v IDE klikneš na ČtečSouboru nebo si u něj zobrazíš kontextovou nabídku, tak vidíš kromě zdrojáku, že implementuje rozhraní AutoCloseableIterable<String>, takže ho můžeš bezpečně použít jako zdroj v try bloku a sám se nakonec zavře, nebo že přes něj můžeš iterovat ve for cyklu.

    Tzn. jazyk jako takový je jednoduchý, je tam minimum jazykových konstrukcí, které se musíš naučit, a všechno ostatní se řeší standardními prostředky (rozhraní/třídy/metody…), u kterých snadno zjistíš, co dělají, ve chvíli, kdy na ten kód narazíš.

    Co se týče správy paměti atd. – Java není nízkoúrovňový jazyk jako C, takže programátor od těchto věcí normálně abstrahuje, ale pokud tě to zajímá, tak si přečti specifikaci a zdrojáky JVM. Nicméně třeba struktura objektu v paměti je věc, která by aplikačního programátora zajímat neměla – ten má řešit obchodní logiku aplikace a tyhle technické detaily nechat na nižších úrovních a jejích programátorech.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    7.10.2014 11:32 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tím myslím, že když si v IDE klikneš na ČtečSouboru nebo si u něj zobrazíš kontextovou nabídku, tak vidíš kromě zdrojáku, že implementuje rozhraní AutoCloseableIterable<String>, takže ho můžeš bezpečně použít jako zdroj v try bloku a sám se nakonec zavře, nebo že přes něj můžeš iterovat ve for cyklu.
    V tom ale Java opět není nijak výjimečná, tohle je běžné pro celou tuhle skupinu jazyků (ie. OOP staticky typované kompilované jazyky). To, že v Perlu, Pythonu nebo JS tohle obvyklé není, je dané tím, že to jsou dynamicky typovaná* skriptovátka...

    *) Ten pojem není ani v jednom případě úplně korektní, ale snad víš, co mám na mysli.
    Nicméně třeba struktura objektu v paměti je věc, která by aplikačního programátora zajímat neměla
    To není pravda. Vědět, kolik paměti objekt zabere nebo jaký overhead má volání jeho metod, je věc, která se občas programátorovi hodí, bez ohledu na to, jak moc se JAvisti snaží přesvědčit svět, že je to jedno a že by lidi upgrade museli dřív nebo později provést tak jako tak, tak proč čekat 2 roky a nenakoupit další RAM rovnou...
    xkucf03 avatar 7.10.2014 11:41 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Možná tě to překvapí, ale výkonnostní optimalizace nebo jak psát úsporně, se řeší i v Javě. Ale tam jde spíš o to, kolik a jakých objektů (třeba v proměnných dané třídy) máš a ne jakou mají fyzickou strukturu v paměti, jak jsou uspořádané.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    7.10.2014 12:01 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jasný, nicméně to se od toho low-level uspořádání odvíjí...
    pavlix avatar 7.10.2014 15:51 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Možná tě to překvapí, ale výkonnostní optimalizace nebo jak psát úsporně, se řeší i v Javě.
    Takto konstruované věty mi značně připomínají poměřování penisů.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    7.10.2014 23:53 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Stejně jako řada dalších OOP jazyků... Ale abych byl fér, tak ten kód výše není žádná vada jazyka, spíš jen IMHO ne moc šikovný návrh knihovny...
    Java je plna uletu, ale toto je zrovna cast, ktera je navrzena dobre. Smysl tech objektu ti uz byl vysvetlen..

    Logika je podobne jako v pripade rour v unixech, mas jednu komponentu, ktere dela jednu vec a dela ji poradne.

    Ale jdou s tim velice elegantne delat dalsi kousky. Obvykle jednotlive metody pracuji s obecnym InputStreamem a je jedno, jestli to mas jakou sobour, TCP/IP spojeni nebo pole bytu v pameti, coz hodne dulezita vlastnost pro testovani. Dal muzes treba pridat objekt GzipInputStream nebo CihperInputStream a hned naprosto transparentne pracovat s komprimovanymi nebo sifrovanymi daty.
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    8.10.2014 22:43 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Já to chápu, jak to funguje a proč to je tak navrženo. Celkem i souhlasím, že v těch 5% případů, kdy to potřebuješ, se to bude hodit. Ale ve zbývajících 95% bude neexistence jednoduššího rozhraní PITA.
    Ale jdou s tim velice elegantne delat dalsi kousky. Obvykle jednotlive metody pracuji s obecnym InputStreamem a je jedno, jestli to mas jakou sobour, TCP/IP spojeni nebo pole bytu v pameti, coz hodne dulezita vlastnost pro testovani (...)
    Jako by tohle nebylo i všude jinde. Viz třeba QIODevice v Qt atd. atd...
    8.10.2014 23:56 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Larry Wall 60
    5% případů, kdy to potřebuješ, se to bude hodit
    Vazne je to 5%?

    V pripade, ze chces testovat, jestli ti funguji funkce pro IO spravne, je oddeleni od fyzickeho souboru naprosto nutna vlastnost, ergo je to API navrzene dobre.

    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    pavlix avatar 7.10.2014 09:44 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Na otevření souboru je potřeba vytvořit tři objekty. Komu se to nelíbí, může si vytvořit čtvrtý a ty tři do něj zabalit. Javovská filosofie v kostce :-D
    LOL.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    xkucf03 avatar 7.10.2014 10:22 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    To je ale potřeba všude (ať už třídy nebo třeba funkce):

    • otevřít proud bajtů, odkud čteš (soubor, TCP, pole bajtů v paměti atd.)
    • převést tyto bajty na text podle určitého kódování
    • přidat mezipaměť a umožnit číst celé řádky, ne jen znaky nebo bajty

    Tahle komplexita tam prostě je vždycky, nelze se jí vyhnout. Jde jen o to, jestli si ji zabalíš do nějaké jedné funkce/třídy – tím získáš pohodlí a kratší zápis a zase ztratíš flexibilitu (bude to jednoúčelové).

    Je jen otázka, jestli tahle abstrakce má být přímo ve standardní knihovně (nebo pro ni dokonce má existovat nějaká speciální jazyková konstrukce) nebo jestli se implementuje v jiné knihovně. Není to věc jazyka.

    Někdy potřebuješ číst ze souboru, jindy zdroj z CLASSPATH, jindy ze sítě… někdy čteš text ve standardním kódování své platformy, jindy v jiném (protože jsi ten soubor třeba stáhl ze sítě z jiného systému)… někdy potřebuješ číst po řádcích, jindy po slovech, regulárních výrazech, po blocích s fixní délkou nebo podle nějakých jiných oddělovačů… někdy budeš mít ty oddělovače už na úrovni bajtů a na text budeš převádět až ty jednotlivé části…

    Java je v tomhle mnohem věrnější unixové filosofii – jeden nástroj dělá jednu věc, dělá ji dobře a nástroje můžeš skládat. A nic ti nebrání si udělat shellovský skript (třídu/metodu), který zabalí víc nástrojů dohromady, a můžeš je tak pohodlně zavolat jedním příkazem.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    7.10.2014 11:14 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tahle komplexita tam prostě je vždycky, nelze se jí vyhnout.
    S tím určitě souhlasím, ale o to mi nešlo, šlo mi o ty objekty jako takový. Jednak se mi moc nelíbí kód, kde je X-krát new Foo, ale hlavně objekty v Javě mají docela slušnou řežii, každý má nějaké meta-informace, metody se volají přes vtable nebo nějaký takový mechanismus, musí se o něj starat GC, atd. Bohužel řada i dobrých programátorů v Javě na tohle zcela zvysoka kašle a balí objekty do objektů ad infinitum...
    7.10.2014 23:38 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
    Rozbalit Rozbalit vše Re: Larry Wall 60
    hlavně objekty v Javě mají docela slušnou řežii, každý má nějaké meta-informace, metody se volají přes vtable nebo nějaký takový mechanismus, musí se o něj starat GC
    Proc lzes? ;-] Vtip je v tom, ze prekladac dela "Escape analysis" (alespon od verze 7 AFAIK) a pokud uzna za vhodne, muze pripadne prevest alokaci na zasobnik, prime volani metod, atd.
    Bohužel řada i dobrých programátorů v Javě na tohle zcela zvysoka kašle a balí objekty do objektů ad infinitum
    Co z toho, kdyz si s tim prekladac udela, co uzna za vhodne?
    Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
    Bystroushaak avatar 8.10.2014 00:03 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Příloha:
    objekty v Javě mají docela slušnou řežii, každý má nějaké meta-informace, metody se volají přes vtable nebo nějaký takový mechanismus, musí se o něj starat GC, atd.
    To mi něco připomnělo :)
    xkucf03 avatar 8.10.2014 00:48 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    $ find -name '*.java' | grep -o '[^/]*\.java' | sort
    ArrayListFactory.java
    GenericFactory.java
    HashMapFactory.java
    KeyExtractor.java
    LineSourceTokenizerFactory.java
    LineSourceTokenizer.java
    LineSourceTokenizerNGTest.java
    LoadableMapImpl.java
    LoadableMap.java
    LoadException.java
    LoadRuntimeException.java
    RegexKeyExtractor.java
    SourceTokenizerFactory.java
    SourceTokenizer.java
    SqlLoadableMap.java
    SqlLoadableMapNGTest.java
    StringCopyTranslator.java
    StringValueAppenderFactory.java
    StringValueAppender.java
    Translator.java
    ValueAppenderFactory.java
    ValueAppender.java
    :-P
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    little.owl avatar 7.10.2014 10:54 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    +1 :-D :-D :-D
    A former Red Hat freeloader.
    egg avatar 7.10.2014 08:52 egg | skóre: 20 | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    with open('/etc/passwd') as f:
        for line in f:
            print('passwd:', line.strip())
    
    xkucf03 avatar 7.10.2014 09:30 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60

    A co s tím? Java tam má navíc:

    • dva řádky s uzavírajícími závorkami bloků – tohle je spíš estetická záležitost
    • datové typy – což považuji za výhodu
    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    egg avatar 7.10.2014 09:43 egg | skóre: 20 | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jednak vidím výrazně stručnější syntaxi (krom závorek i třeba for cyklus), která je ale zároveň čitelná, žádný chrchel typu regexp. A kromě toho nemusím pro tak jednoduchý úkol explicitně vytvářet tři objekty. Jeden objekt je soubor, druhý objekt je řádka, simple as that. Ale souhlasím, že toto je spíš problém standardní knihovny než jazyka.
    pavlix avatar 7.10.2014 09:53 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    U pythonu je zase legrační, jak se nemůžeš spolehnout na vyčištění objektu při jeho dropnutí a musíš používat konstrukce typu with, které se špatně kombinují s čímkoliv jiným, uvažuj:
    do_something([line.split() for line in open("/etc/passwd")])
    
    Versus:
    with open("/etc/passwd") as stream:
        do_something([line.split(":") for line in stream])
    
    To, že každé blbosti musíš dát jméno, bylo vždycky doménou céčka, kde podle starších norem navíc to jméno muselo být vytvořeno na začátku bloku. Ale tady musím v Pythonu dávat jméno file objectu, který mě vlastně vůbec nezajímá a je tam jenom od toho, aby mi z něj vypadly řádky.

    Ale nebýt toho with, kdybych to musel dělat pomocí finally, to bych to asi psal rovnou v C pomocí goto.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Bystroushaak avatar 7.10.2014 10:38 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    U pythonu je zase legrační, jak se nemůžeš spolehnout na vyčištění objektu při jeho dropnutí
    Jak to? Já žiju dlouhá léta v domnění, že to jde. Dokonce to čas od času používám v interaktivních shellech.
    pavlix avatar 7.10.2014 11:18 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    A proč si teda myslíš, že ten with existuje a musíš ho implementovat pomocí __exit__ a nikoliv __del__. Jedna ze základních vlastností pythonu pokud vím je, že negarantuje zavolání __del__ ani jiné speciální metody při ztrátě poslední reference.

    Moc rád bych se v tomto případě nechal vyvést z omylu a dozvěděl se, že současné verze pythonu garantují úklid objektu při ztrátě poslední reference. Je jen málo věcí týkajících se pythonu, které by mě potěšily víc. Teď mě napadá, že jse blbec, že jsem nenapsal RFE rovnou do jejich bugtrackeru.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    egg avatar 7.10.2014 10:39 egg | skóre: 20 | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ale tady musím v Pythonu dávat jméno file objectu, který mě vlastně vůbec nezajímá a je tam jenom od toho, aby mi z něj vypadly řádky.
    Souhlasím, dokonalé to není.
    29.9.2014 14:09 lmbot
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Sorry, ale tvůj dojem z Perlu a jak by se měl za něj stydět není víc než plácnutí do vody. Co chybí na dovednostech a zkušenostech se dohání přehnaným sebevědomím.

    Nechci tady dělat advokáta, ale je nutné vzít do úvahy dobu vzniku a tehdejší situaci na "trhu" programovacích jazyků. Perl přinesl převratný přístup v práci s textem a snadném a rychlém prototypování. Na rozdíl od rozšířených urban myths v něm lze psát přehledně a čitelně, štábní kultura je na programátorovi.

    Perl má už asi svoje období slávy za sebou, ale pořád patří z trojice Perl, Python, Ruby k jednoznačně nejúspěšnějším. Python(3) i Ruby jsou celkově na ústupu a nevím co by se muselo stát aby Perl o prvenství připravily.
    29.9.2014 14:26 trekker.dk | skóre: 72
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Python(3) i Ruby jsou celkově na ústupu
    Citation needed
    Quando omni flunkus moritati
    Salamek avatar 29.9.2014 14:43 Salamek | skóre: 22 | blog: salamovo
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Python na ustupu, lol
    Skutečně nemám v plánu zničit Microsoft. Bude to jen zcela neúmyslný vedlejší efekt.
    Bystroushaak avatar 29.9.2014 14:57 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    .. ale pořád patří z trojice Perl, Python, Ruby k jednoznačně nejúspěšnějším. Python(3) i Ruby jsou celkově na ústupu a nevím co by se muselo stát aby Perl o prvenství připravily.
    Pobavilo. V podstatě jediné místo, kde se ještě používá Perl je unixové scriptování, všude jinde to už (naštěstí) vymřelo. Ani tam to ale imho není přílivem nových developerů, ale konzervativností těch starých.

    Podle TIOBE, PYPL, RedMonku, trendyskills, langindexu i langpop je perl daleko za pythonem a ve 3 z 5 případů i za ruby. Když se podíváme na grafy z githubu, tak je myslím trend docela výstižný. Python je před perlem i co do počtu nabídek na jobs.cz, což už je co říct, vzhledem k tomu že má v ČR asi tak o 10-15 (kritických, unixových) let větší tradici, než python.

    U nás v práci se na pár místech taky používá, ale většinou jsou to scripty co někdo před 20 lety napsal a od té doby se na ně nešahá. Až se jednou rozbijí (pravděpodobně po smrti stoletého unixáka, který je před 20 lety psal), tak se to nikdo nebude snažit přepisovat, ale prostě to napíše odznova.
    xkucf03 avatar 29.9.2014 15:02 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    U nás v práci se na pár místech taky používá, ale většinou jsou to scripty co někdo před 20 lety napsal a od té doby se na ně nešahá. Až se jednou rozbijí (pravděpodobně po smrti stoletého unixáka, který je před 20 lety psal), tak se to nikdo nebude snažit přepisovat, ale prostě to napíše odznova.

    Tohle je víc o stylu než o jazyce – tentýž problém můžeš mít i v Pythonu nebo třeba C++. A na druhou stranu: v Perlu se dá psát slušně, jednoduše, tak aby to kdekdo přečetl.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Bystroushaak avatar 29.9.2014 16:20 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tohle je víc o stylu než o jazyce – tentýž problém můžeš mít i v Pythonu nebo třeba C++.
    Tak dát do jedné věty o prasáckém zdrojáku python a C++, to už chce pořádný koule :D

    V pythonu jsem se s tím setkal, ale vždy bez vyjímek od programátorů, co přišli z javy/C a tahali si tam s sebou různé idiomy, které python řeší podstatně jednodušeji. Ten nejprasáčtější kód co jsem během dlouhé doby řešil měl hlavní problém v tom, že byl psaný moc lowlevel. Autor byl očividně zvyklý na C/C++ a tak si definoval vlastní struktury, se kterými pracoval pomocí co nejvíc lowlevel řešení. Když jsem to po něm přepisoval, tak se to smrsklo na 1/10 kódu, protože jsem použil tady slovník, támhle trochu funkcionální magie a z programu skoro nic nezbylo.
    xkucf03 avatar 29.9.2014 16:27 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    tady slovník

    Místo struktury/třídy? Takže je tam příliš volná vazba, textové řetězce-klíče místo polí. Tohle jsou právě ty prasárny, které se špatně udržují – na jednom místě něco změníš a jinde se to rozpadne, ale není to na první pohled vidět.

    támhle trochu funkcionální magie

    to se bude taky moc dobře číst…

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    29.9.2014 16:58 grc
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Javistické lamy neovládají funkcionální programování?
    xkucf03 avatar 29.9.2014 17:15 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    támhle trochu funkcionální magie

    Programy – pokud mají být udržovatelné – tak by té magie měly obsahovat co nejméně, měly by být na první pohled čitelné, přímočaré.

    Jestli tím byl myšlen princip map/reduce, tak budiž (a ten se netýká jen funkcionálních jazyků).

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Bystroushaak avatar 29.9.2014 17:28 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Programy – pokud mají být udržovatelné – tak by té magie měly obsahovat co nejméně, měly by být na první pohled čitelné, přímočaré.
    Magie neznamená nutně "hacků". Je to prostě o featurách pythonu, které člověku umí ušetřit spoustu práce. Samotný jazyk obsahuje tak vysokoúrovňové koncepty, že si programátor připadá jak v bavlnce, která ho odstiňuje od nutnosti zbytečně pořád vymýšlet vlastní idiomy a struktury.

    Umím si představit, že v nějakém lispu to může být ještě pohodlnější.
    xkucf03 avatar 29.9.2014 17:37 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Je to prostě o featurách pythonu, které člověku umí ušetřit spoustu práce.

    Totéž platí u toho Perlu nebo C++. Potíž je v tom, když ten jazyk těch featur má moc a každý programátor ovládá jinou podmnožinu.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    Bystroushaak avatar 29.9.2014 18:14 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Totéž platí u toho Perlu nebo C++. Potíž je v tom, když ten jazyk těch featur má moc a každý programátor ovládá jinou podmnožinu.
    S tím právě souvisí to, že tyhle jazyky na rozdíl od pythonu přímo podporují filosofii, že k jednomu výsledku vede mnoho cest. Pak je v tom taková roztříštěnost, kdežto v pythonu když už se něco takového používá, tak je to skutečně komunitní standard. Samozřejmě že i tady by se našly vyjímky, ale obecně z toho mám lepší pocit.
    Bystroushaak avatar 29.9.2014 16:59 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    textové řetězce-klíče místo polí
    Jako klíč se dá použít cokoliv, co má definováno __hash__ imho.
    Tohle jsou právě ty prasárny, které se špatně udržují – na jednom místě něco změníš a jinde se to rozpadne, ale není to na první pohled vidět.
    Tohle platí ve velkých programech, kde je rozumnější samozřejmě předávat třídu, jenž strukturu dat popisuje poněkud očividněji. Pokud ale předáváš data, která už sama o sobě jsou key:val charakteru (s unikátním keyem), tak nemá smysl si na to definovat vlastní datové typy, ani to cpát skrz pole.
    to se bude taky moc dobře číst…
    To jsem rád, že se shodneme. Podle me je použití filter()/map() 100x čitelnější, než když se to rozepisuje do for smyček, které nedělají nic jiného, než jen nějak upraví procházená data. To že se to někomu zdá nečitelné je dané většinou jen tím, že s podobným konceptem přichází do styku poprvé.
    xkucf03 avatar 1.10.2014 09:42 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jako klíč se dá použít cokoliv, co má definováno __hash__ imho.

    To by mělo smysl třeba v Javě nebo jiném jazyce s generiky, kde ti kompilátor zkontroluje, že do klíčů necpeš nesmysly – měl bys mapu, kde je klíčem enum (nebo instance jiné třídy) a nešlo by tam cpát nesmysly, neexistující klíče nebo překlepy.

    Pokud ale předáváš data, která už sama o sobě jsou key:val charakteru (s unikátním keyem), tak nemá smysl si na to definovat vlastní datové typy

    A ta množina klíčů je předem neznámá? Pokud ano a pracuji s tím všude jen obecně, aniž bych jednotlivým klíčům přikládal nějaký zvláštní význam, tak nemám nic proti, je to prostě normální mapa. Ale pokud jsou třeba na druhém konci programu zadrátované určité klíče a ty vytahuji z té mapy, tak už to dost možná bude chyba návrhu. Když už existují nějaké předem známé klíče s určitým významem, tak je lepší tomu dát řád – udělat z toho třídu s atributy, strukturu, nebo třeba enum, který použiji jako klíče mapy (v jazyce, který vynutí typovou kontrolu). A ne že v jedné části programu použiji klíč "xyz" a v jiné části si budu číst "xyz" a budu doufat, že se trefím a že tyhle textové řetězce na sebe budou pasovat.

    Když máš nějaký framework, který definuje obecné rozhraní a jednotlivé implementace se mají nějak parametrizovat, tak se někdy používají URI/URN/URL jako klíče (tzn. globálně jedinečný identifikátor) a dávají se věci do mapy, je to hodně volná vazba. Ale to jsou spíš výjimečné případy – je to daň za unioverzálnost, abstrakci a jednoduchost rozhraní. Díky té globální unikátnosti v tom nebude úplný bordel, ale správné hodnoty klíčů si musí programátoři ohlídat sami (třeba přes nějakou třídu s konstantami, dobrou dokumentaci…). Ale to bych použil, jen když to nejde jinak – když můžeš mít typovou kontrolu, tak je to lepší.

    ani to cpát skrz pole.

    Polem bylo myšleno field, ne array. Tzn. atribut třídy/instance.

    Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-DK, Relational pipes
    29.9.2014 21:30 MarSik
    Rozbalit Rozbalit vše Re: Larry Wall 60
    To nic.. chce se to trošku dovzdělat a najít třeba namedtuple nebo __slots__, které problém se strukturovanými daty elegantně řeší.

    Funkcionální magie typu list comprehension nebo map/reduce/apply je taky poměrně prudce čitelná (a obzvláště pro matematiky :)

    A to nemluvím o vychytávkách typu indexování polí [od:do:step], které šetří hodně kódu. (A umí to i přiřazení a indexovat odzadu).

    Jelikož typicky je v každém jazyce při psaní tak jedna chyba na řádek kódu, tak se ty vysokoúrovňové konstrukce sakramentsky vyplatí.
    Bystroushaak avatar 29.9.2014 22:23 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    namedtuple
    Pravdu díš, v práci je používáme docela často. Mají ale jednu potenciální vadu - jsou immutable.
    mirec avatar 29.9.2014 23:36 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Celkom nepríjemná vlastnosť, ale na nejaké menšie úpravy sa dá použiť _replace

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    1.10.2014 02:26 g.g
    Rozbalit Rozbalit vše Re: Larry Wall 60
    To je jako stěžovat si, že elektromobil s přímým náhonem má jednu potenciální vadu, totiž že se mu nemůže rozbít převodovka. :-D
    Bystroushaak avatar 1.10.2014 13:46 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Spíš že v něm nemůžeš zařadit, když potřebuješ/chceš. Pokud s tím ale dopředu počítáš, tak to vada není, proto píšu to "potenciální".
    1.10.2014 02:22 g.g
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tou "funkcionální magií" máte na mysli kusy kódu, které polykají vstupy, přehledně generují výstupy (vysokoúrovňovými operátory, žádnými divokými smyčkami) a nemají žádné ošklivé vedlejší účinky? No tak takovou "magií" by žádný programátor s aspoň kusem funkčního mozku pohrdnout rozhodně neměl.
    Bystroushaak avatar 1.10.2014 13:48 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Více/méně ano. Jde i o použití různých funkcí jako je enumerate()/sum(), místo aby to člověk psal ručně.
    29.9.2014 17:12 pavel
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Neni to az takovy nesmysl:

    TIOBE Index for Python Vrchol 2011, pokles ze 7% na necela 3% (sestupny trend 2011 az 2014)

    TIOBE Index for Ruby Vrchol 2009, pokles ze 4% na cca 1,5% (sestupny trend 2009 az 2014)

    TIOBE Index for Perl Vrchol 2005, pokles z 11% na cca 1,5% (sestupny trend 2005 az 2014)

    Bystroushaak avatar 29.9.2014 17:24 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    To sice ano, ale pořád z toho perl nevychází nějak super (naopak).

    Co se pythonu týče, subjektivně mi přijde že zažívá renesanci a vidím ho všude možně, i tam kde bych ho předtím nečekal. Například ve školství se docela prosazuje. To vše navzdory Py3, který vnesl mezi komunitu rozkol.

    Hodně si toho imho ukousl taky javascript, který je poslední dobou až nepochopitelně populární.
    29.9.2014 18:02 pavel
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Perl je sice evidentne na ustupu, ale tech skoro 11% z 2005 ty dva zatim nemeli.

    Popularita JS je zajimava a zrejme souvisi s podporou velkych firem, porad lepsimi interprety i JIT kompilatory a rozsirenim i mimo webove klienty (jako Node.js a silenstvi kolem). Holt kvalita navrhu jazyka ho sama o sobe neprosadi.

    Bystroushaak avatar 29.9.2014 18:20 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Perl je sice evidentne na ustupu, ale tech skoro 11% z 2005 ty dva zatim nemeli.
    Tak určitě se nebudu hádat o tom, že perl byl populárnější než je python. V současnosti ale chcípá někde více/méně na okraji zájmu, částečně (prý) vlastní vinou (perl 6?).
    Popularita JS je zajimava a zrejme souvisi s podporou velkych firem, porad lepsimi interprety i JIT kompilatory a rozsirenim i mimo webove klienty (jako Node.js a silenstvi kolem). Holt kvalita navrhu jazyka ho sama o sobe neprosadi.
    Tohle je právě docela zarážející, protože javascript sám o sobě je poměrně hodně dementní. Wat už viděl asi každý. Na druhou stranu, co taky čekat od jazyka napsaného za 10 dní.
    29.9.2014 19:52 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Perl 6 nemá s Perlem 5 nic společného. Jestli se chceš pobavit, tak naposledy se na p5p probíral návrh na zavedení unicodových operátorů ( jako !=).

    JavaScript je o tom, že máte hromadu programátorů webových stránek, z kterých si výrobci toolkitů chtějí udělat zákazníky. Podívejte se, co se stalo Qt. GTK+ tam směřuje taky. XUL a všechny „web OS“ (Chrome OS, Firefox OS, Tizen) tam už jsou. Zcela paradoxně dnes nejžádanější platformy Android a iOS nejsou javascriptové. Proto ten hon na JavaScript. Web není moderní, moderní jsou mobilní aplikace, kde ale vzít vývojáře? Proto je v poslední době snaha všechno zjednodušit a přiblížit průměrnému webaři. Je snaha z programování udělat komoditu, nikoliv výlučnou doménu přeplacených geeků. Kvalita už nikoho nezajímá. Nahradit ji má kvantita. (To samé platí o nasazování serverových částí, proto ten šrumec kolem OpenStacku a Dockeru.)

    29.9.2014 22:16 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Snaha zjednodusit je dobra, a ze se z nekterych typu programovani dela komodita je take dobra vec. I kdyz zrovna cestou HTML/CSS/JS to jit nemusi.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    mirec avatar 30.9.2014 09:56 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Larry Wall 60

    Javascript nie je až tak zlý. No síce vlastne keď tak rozmýšľam, že už 5 dní vkuse robím drag & drop sortovanie tak no ehm ... ale to je blbou knižnicou ktorá sa nejako nevie vysporiadať s CSS (premýšľam či by som to nemal skôr keby som si to písal sám namiesto blbého jquery nested sortable). Teda no knižnice sú úplne naprd (väčšinou) ale zato samotný jazyk je no síce zlé navrhnutý ale niektoré veci sa vydarili napr.

    ['10','10','10','10','10'].map(parseInt)
    
    [ 10, NaN, 2, 3, 4 ]
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    little.owl avatar 30.9.2014 10:25 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    TIOBE index je jedna z nejhorsich mer mereni popularity jazyka, staci se kouknout na to, jak je pocitan:
    The ratings are calculated by counting hits of the most popular search engines.
    Statistiky GitHub jsou mnohonasobne vice vypovidajici, nebot sleduji realny kod.
    A former Red Hat freeloader.
    30.9.2014 08:54 TM
    Rozbalit Rozbalit vše Re: Larry Wall 60
    To mě opravdu pobavilo, jak tady vlastní subjektivní dojmy vydáváte za standard.
    "U nás v práci" bychom bez Perlu ani nezbuildovali projekt, protože tam máme dost užitečných scriptů, které efektivně automatizují veškeré generování textových výstupů včetně určité části zdrojového kódu v C.
    Pochopitelně jsou aktivně vyvíjené - "u nás v práci" na to máme celý tým a tak nějak jsem si nevšiml, že by jim bylo 100 let - jsou většinou daleko mladší než já.
    "U nás v práci" mám kromě práce na kódu vlastního projektu na starosti ještě průběžný vývoj toolu v Perlu, kde se to regexpy jen hemží...
    "U nás v práci" je Python dobrý leda tak k psaní testovacích sekvencí pro simulátor :-)

    O co méně zkušeností a nadhledu, o to více sebevědomí, ale z toho vyrostete ;-)
    Bystroushaak avatar 30.9.2014 09:35 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    To mě opravdu pobavilo, jak tady vlastní subjektivní dojmy vydáváte za standard.
    Myslíš ty subjektivní dojmy podložené 6 odkazy na weby zabývající se popularitou programovacích jazyků?
    "U nás v práci" bychom bez Perlu ani nezbuildovali projekt, protože tam máme dost užitečných scriptů, které efektivně automatizují veškeré generování textových výstupů včetně určité části zdrojového kódu v C. Pochopitelně jsou aktivně vyvíjené - "u nás v práci" na to máme celý tým a tak nějak jsem si nevšiml, že by jim bylo 100 let - jsou většinou daleko mladší než já. "U nás v práci" mám kromě práce na kódu vlastního projektu na starosti ještě průběžný vývoj toolu v Perlu, kde se to regexpy jen hemží... "U nás v práci" je Python dobrý leda tak k psaní testovacích sekvencí pro simulátor :-)
    Co to vlastně děláš? Psal jsem jak to chodí u nás v práci a ty mi na základě toho jak to chodí u vás dokazuješ, že to tak není?

    Nikde jsem netvrdil, že perl nikdo nepoužívá, ani že to stejně jako u nás funguje všude. Jediný výraz kde jsem psal něco o tom jak se perl používá bylo tvrzení, že se využívá jen k scriptování na unixu, což jsi částečně potvrdil. Takže tu poslední ani první větu fakt nechápu.
    30.9.2014 10:43 TM
    Rozbalit Rozbalit vše Re: Larry Wall 60
    No, "u nás v práci" právě ten projekt někteří vývojáři buildují i na Windows a i tam by byli bez Perlu ztraceni... Prostě Perl je multiplatformní a tak se i používá k tomu k čemu je určen.
    Já v něm, mimochodem, píšu objektově :) Původně jsem za to člověka, po kterém jsem to převzal proklínal, ale ono to v Perlu jde docela dobře.
    Co se týče Pythonu, ten je tady brán jako nástroj k rychlému prasení.
    Bystroushaak avatar 30.9.2014 10:56 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Já v něm, mimochodem, píšu objektově :) Původně jsem za to člověka, po kterém jsem to převzal proklínal, ale ono to v Perlu jde docela dobře.
    Tohle myslím vypovídá o perlu (a jeho typických uživatelích) víc, než tisíc slov.
    30.9.2014 11:57 TM
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Došly nápady, dojde k urážkám?
    Bystroushaak avatar 30.9.2014 12:18 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Pokud to bereš jako urážku, tak ses ale urazil sám. Já tě jen citoval.
    30.9.2014 12:25 TM
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tak se holt smiřte s tím, že ten Perl neumíte no... Jsou horší věci na světě, které mohou člověka potkat :-)
    Bystroushaak avatar 30.9.2014 12:52 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Tohle jako odpověď na předchozí příspěvek ani nedává smysl.
    pavlix avatar 30.9.2014 11:02 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Co se týče Pythonu, ten je tady brán jako nástroj k rychlému prasení.
    To je hezké, zrovna mezi perlisty ;).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    30.9.2014 11:49 d.c. | skóre: 30
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ja myslim, ze hlavni chyba spociva v nepochopeni, proc PERL vzniknul!

    Bezne se traduje, ze jde puvodne o jazyk na zpracovani dat/formularu. Pravy duvod byl ovsem v tom, vytvorit (o dekadu drive nez jiz pomerne frustrovany - ackoliv jinak skvely - Brainfuck) jazyk, ve kterem lze perlit!
    30.9.2014 19:03 Ondrej Santiago Zajicek
    Rozbalit Rozbalit vše Re: Larry Wall 60
    o nemohl navrhnout třeba nějakou interpretovanou podmnožinu C
    AWK? Pike?
    1.10.2014 20:30 Ivan
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Ja kdybych dokazal vymyslet Perl tak bych byl na sebe pysnej. Bohuzel ale vim, ze nic takovyho vymyslet nedokazu. Larry je lingvista, tzn. on je expert nejen na programovaci jazyky, ale i na ty formalni, kterymi bezne mluvime my lide. Proto se Perl neda parsovat pomoci bisonu, a trida jazyku do ktere patri je nadmnozinou vsem ostatnim programovacim jazykum. V dobe kdy Perl vzniknul se predpokladalo, ze brzo budou lide komunikovat s pocitacem "prirozene" a proto vzniknul i Perl. Jako jazyk ktery ma pripominal anglictinu, tzn. jazyk s volnym slovosledem. (Podobne je na tok treba i SQL).

    Proto v Perlu muzete napsat:
    if ($i) { $i++ };
    $i++ if $i;
    $i++ unless $i == 0;
    
    Perl je zaroven objektovy, funkcionalni i proceduralni jazyk. Ccko nema map/reduce, neumoznuje ani spustit virtualni masinu unitr virtualni masiny (eval), nema paralelismus, nema reflexi a samozrejme nema ani dedicnost.
    1.10.2014 22:07 d.c. | skóre: 30
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Nemluvime formalnimi jazyky. Ja aspon ne, ani neznam nikoho takoveho.
    6.10.2014 21:17 forom
    Rozbalit Rozbalit vše Re: Larry Wall 60
    musim absolutne suhlasit. preto mam rad perl. preto lebo mozem pisal presne tak ako mi to v hlave mysli. jazyk sa ma nesnazi ohnut do nejakej paradigmy, ani ja sa nesnazim ohybat jazyk, ale vyuzivam jeho vlastnosti.
    29.9.2014 20:47 Tyf
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Kdyz uz tu k sedesatinam piseme nekrolog, tak by bylo zahodno zminit nejvyznamnejsi prinos Dejinam.

    V osmdesatych letech napsal utilitku patch. Jak predtim mohl vypadat distribuovany vyvoj software, kdy do mailove konference asi bylo zvykem posilat cely upraveny soubor, si radsi nepredstavuju.

    (Druhy logicky krok, celemu svetu otevreny verzovaci system, pochazi az z pulky devadesatych let, predpona open z OpenBSD.)

    Tim byl polozen zaklad vyvoji software tak jak ho dnes zname.
    29.9.2014 22:19 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Dad?

    Ale tipoval bych, ze analog patche existoval uz na MVSu v podobe IEBUPDTE...
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    little.owl avatar 29.9.2014 22:59 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Jak predtim mohl vypadat distribuovany vyvoj software, kdy do mailove konference asi bylo zvykem posilat cely upraveny soubor, si radsi nepredstavuju.
    Ale prd. Utilita diff je tu od 70.let, patch to jen zefektivnil.
    A former Red Hat freeloader.
    2.10.2014 18:52 podlesh | skóre: 38 | Freiburg im Breisgau
    Rozbalit Rozbalit vše Re: Larry Wall 60
    diff byl, ale patch chyběl

    Dnes to tak nevypadá, ale skutečně to předtím nikoho nenapadlo a byla to revoluce. Alespoň to píše ESR v The Art of Unix Programming
    little.owl avatar 2.10.2014 21:32 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    diff byl, ale patch chyběl
    Pouzival se diff a ed.
    A former Red Hat freeloader.
    pavlix avatar 3.10.2014 09:52 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    To asi chtělo trochu rozvést, případně popsat čím přesně tedy Larry přispěl v teoretické i praktické rovině.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    little.owl avatar 3.10.2014 21:44 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Pred prichodem patch v podstate jedina cesta jak to cele zautomatizovat bylo vytvorit ed skript:
    diff -e old_file new_file > diff_file
    A potom ho aplikovat:
    (cat diff_file && echo w) | ed - old_file
    Larry prisel s lepsim resenim, ktere pouzivalo unifikovany format, napsane v C a ktere se pozdeji prosadilo jako standard, hlavne diky GNU. Davam mu za to body, ale rozhodne to nebylo tak, ze by lide museli posilat cele soubory a mergovat neco rucne, zejmena kdyz navic existovali skripty, ktere se chovali podobne jako patch. O tom svedci fakt, ze diff tu byl o trinact let drive nez patch, takze to asi nebyl az takovy problem.
    A former Red Hat freeloader.
    pavlix avatar 4.10.2014 08:40 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Larry prisel s lepsim resenim, ktere pouzivalo unifikovany format
    Nikde se to moc nepíše, ale myslel jsem si to z nějakých náznaků, že aplikoval patch i na změněný soubor.
    O tom svedci fakt, ze diff tu byl o trinact let drive nez patch, takze to asi nebyl az takovy problem.
    Zase na druhou stranu pokud používali diff -e a následně aplikovali pomocí ed, nemohli dost dobře aplikovat na změněný soubor.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    4.10.2014 10:26 JS1 | skóre: 2 | blog: intuition_pump
    Rozbalit Rozbalit vše Re: Larry Wall 60
    Sice historii neznam, ale v tom skutecne nejspis byla ta inovace, ze se pouziva kontext k nalezeni mista, kam aplikovat zmenu, a tudiz bylo mozne zmenit i soubor, ktery vypada trochu jinak nez ten, pro ktery byl patch vytvoren. Driv to nejspis bud vubec neslo, nebo se pouzivala cisla radek (ci jine kody) primo uvnitr samotneho souboru.
    Lidstvo čelí v tomto století hrozbě civilizačního kolapsu. Podpořte hnutí klimatickakoalice.cz!
    little.owl avatar 4.10.2014 16:55 little.owl | skóre: 22 | blog: Messy_Nest | Brighton/Praha
    Rozbalit Rozbalit vše Re: Larry Wall 60
    že aplikoval patch i na změněný soubor ... nemohli dost dobře aplikovat na změněný soubor.
    To je pravda. Fungovalo to rozumne jen s context diff, ktery v 1984 nebyl standard a s RCS/SCCS verzovanim, takze nakonec nejednodussi bylo stale poslat ed script. Pokud na danem radku kontext nedpovidal, pozice se posouvala a kontext opet porovnaval; reseni chytre, nikoliv nove, obdobne to slo delat [i interaktivne] v Emacs. IMHO, jestli neco bylo nove, soude podle vyjadreni jednoho byvaleho Unix programatora Stallmanovi generace, byla to moznost reverse, ktera umoznovala delat snadno regresni testy.
    A former Red Hat freeloader.

    Založit nové vláknoNahoru


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