Vlákno názorů k článku Parser bankovních výpisů aneb hrátky s Ragel od Tomas - Navrhuji autora clanku vyvlect na namesti a verejne...

  • Článek je starý, nové názory již nelze přidávat.
  • 16. 2. 2008 0:51

    Tomas (neregistrovaný)
    Navrhuji autora clanku vyvlect na namesti a verejne ho bicovat! OMG, to je uroven :(
  • 16. 2. 2008 20:51

    bez přezdívky

    :-)

    Regulární výrazy? Dokonce dva? Jde v nich určitě napsat hodně, ale pro tenhle případ je to IMHO kanón na vrabce. Proč používat složitou technologii, když úloha jde snadno převést na vyhledání podřetězce.

    Tak třeba v Ruby by to bylo (uvádím jen vnitřek té smyčky, která iteruje po řádcích):

      values << line[1..-4].split('","') 

    Pro ty, co nemluví Ruby: z řádku se odstraní první a poslední uvozovky, zbytek se řetězce se rozdělí v místech, kde je podřetězec uvozovky, čárka, uvozovky. To v Perlu nejde?

    Omlouvám se za rýpnutí. :-)

  • 16. 2. 2008 23:26

    Palo (neregistrovaný)
    Nemusis sa ospravedlnovat. Veci ako "kuku\",","kuku" by asi tvoj parser nerozdychal.
  • 17. 2. 2008 0:23

    tukan (neregistrovaný)
    Jo, to jde, ale první a poslední prvek bude mít na začátku resp. konci nechanou uvozovku, že? :) Takže po pravdě řečeno, to co já bych udělal jedním výrazem/řádkem, vy byste bůhvíjak obíhal ošetřováním výjimek, které na vaše řešení nepasují.

    Kanón na vrabce je třeba zmíněný kompilátor gramatik, ale RE jsou na tohle dělané. Jako kanón na vrabce je vidí jen člověk, který to s nimi podle mě (moc) neumí... V Perlu jsou RE integrované přímo do jazyka, takže není potřeba dělat žádné tanečky kolem jako v Ruby (inicializace, kompilace, provedení a rozhrabávání výsledků). Pro mě je vyjádření v RE zcela přirozené a hlavně mnohem přehlednější než několik větvících příkazů a podmínek. Je sranda vidět podobná řešení, když víte, jak elegantně by se to dalo udělat jednou RE. Ale jak říkám, ne každý umí psát RE bez přemýšlení a lovení v příkladech, nedejbože v dokumentaci. Na druhou stranu máte v něčem _obecně_ pravdu - lidé často používají RE tam, kde nejsou zapotřebí. Přesto je to menší prohřešek než vyhýbání se RE jen proto, že s nimi člověk není moc kamarád. Pokud totiž nemluvíme o vnitřní smyčce, kde se projeví každý spolknutý tik, je RE zpravidla mnohem přehlednější než klasický procedurální postup. Je to otázka okolností a osobních preferencí.

    Řešení není jen o tom něco polovičatě udělat a zapomenout, ale taky o rozšiřitelnosti, údržbě, modifikovatelnosti a hlavně odolnosti vůči (nepředpokládaným) variacím ve vstupních datech. Co když např. někde budou před/za čárkou mezery nebo jiné whitespace znaky? Nevím jak v Ruby, ale v Perlu je parametr splitu všeobecná RE, takže by to ještě šlo zaintegrovat záměnou "\s*,\s*" místo "," - to už by v Ruby ale tak snadné asi nebylo. Důsledek: i minimální změna ve vstupních datech by vaše řešení odrovnala a muselo by se dost přepsat. S RE to je otázka přidání 6 znaků.

    Nadhodil jste se proč dvě RE. To je jednoduché, pokud mluvíme o ŘEŠENÍ a ne jen výkřicích do tmy, myslíme tím kompletní řešení. Jedna RE na rozparsování tabulkového vstupu, druhá na zformátování všech uvedených možností reprezentace integeru. Hash na uložení celé struktury, jeden element o dvourozměrném poli hodnot (první řádek názvy sloupců) pro každou jednu tabulku na vstupu.

    Jak prosté, milý Watsone! :) Díky za konstruktivní připomínku k věci, v určité rovině jste měl pravdu.

    PS: pokud mám něco obětovat, tak ten cyklus: Perl umožňuje spuštění programu tak, že se jeho určitá část vykonává v cyklu přes zadaný vstup. Identicky, jako by na začátku programu bylo otevření souboru a zbytek napsaný v cyklu, který na začátku načítá řádek po řádku. :)
  • 17. 2. 2008 1:21

    Rejpal (neregistrovaný)
    "Nevím jak v Ruby, ale v Perlu je parametr splitu všeobecná RE, takže by to ještě šlo zaintegrovat záměnou "\s*,\s*" místo "," - to už by v Ruby ale tak snadné asi nebylo."
    Nepodceňujte Ruby (a zkuste v shellu ruby -e 'puts ("text , dalsitext".split /\s*,\s*/).inspect').
  • 17. 2. 2008 1:56

    bez přezdívky
    "Pro mě je vyjádření v RE zcela přirozené" -- no právě. Pro většinu lidí ne. Navíc regexpu nerozumí po nějakém čase mnohdy ani autor, natož kdokoliv jiný. Proto je dobré regexpy šetřit na případy, kdy jejich použití dává dobrý smysl.
  • 17. 2. 2008 3:58

    tukan (neregistrovaný)
    Víte co, není to takhle jednoduché. Používáte jednoduché algoritmy, protože většina lidí je nezná? Programujete GUI aplikace v PHP, protože je ho znají i začátečníci? Ne. RE jsou jedním z elementárních programovacích nástrojů. Pokud je většina neumí, jen to vypovídá o kvalitě současných programátorů. Nemůžete věci nepoužívat, protože se najde někdo, kdo by tomu nerozuměl. Nejdůležitější je řešení, dobré a efektivní řešení pomocí odpovídajících nástrojů. V shellu taky filtrujete pomocí grep/sed RE místo propojení osmi grep, cut, nl, tr, awk procesů. Já např. často grepuju místo 'grep -E' pomocí 'perl -pe', protože za to můžu napsat RE bez přemýšlení - s basic RE co má grep musím přemýšlet jak se vyjádřit v slabším jazyce, což je pruda, protože nemůžu psát na plný výkon a zpomaluje to.

    Že autor po čase nerozumí ani vlastním RE se říká spíš jako vtipná poznámka na úkor RE. Není to pravda. Stejně jako když se vracíte k zapomenutému úseku normálního kódu, musíte si RE znovu přečíst. Nikdo si nepamatuje z hlavy všechno co kdy napsal. Pokud ani potom _nerozumí_ vlastní RE nebo vlastnímu kódu, je něco v nepořádku. Znamená to totiž, že při psaní použil něco nad vlastní schopnosti, co se pro daný případ narychlo naučil a stejně rychle zapomněl. To se stát může, ale nevypovídá to o kódu ani RE, vypovídá to o něm.

    Mezi námi, RE jsou na programátorské poměry dost jednoduchá záležitost. Kdo je neumí, je jen líný se je naučit...

    Ten druhý komentář nakonec taky použil v tom splitu RE - byť jen jako demonstraci. Mohl by to udělat jinak, ale na úkor přehlednosti a jednoduchosti.
  • 17. 2. 2008 5:46

    bez přezdívky
    RE jsou důležitým nástrojem při parsování textu. Práce unixového admina odjakživa spočívala ve spouštění utilit, filtrování či parsování jejich textových výstupů, a krmení jiných utilit výsledkem toho filtrování či parsování. Na ostatních platformách se pracuje jinak, a parsování textů je okrajovou věcí. Proto se na věc díváme odlišně.

    Jako příklad viz Powershell a seznam servisů, které jsou zastavené:
    get-Service * | where {$_.Status -eq "Stopped"}
    Get-Service vrací objekty, nikoliv text. Where filtruje objekty, nic neparsuje (na konec by šlo připsat | $_.Start, když na to přijde). Obdobně to vypadá v případě použití .NET jazyků, Win32 API apod. Na unixech je to pravda složitější, protože pro servisy (deamony) neexistuje standardní interface. Nicméně kdybyste měl (a na některých unixech asi máte) seznam daemonů, zřejmě byste ho parsoval - viz první odstavec.

    Když se budeme bavit o aplikacích, tak ty opět typicky vystačí bez regexpů. Když dojde na stringy, zpravidla potřebujete ověřit délku, zjistit jestli je řetězec prázdný, jestli řetězec něco obsahuje, jestli je čistě numerický, a zbytek jsou spíše výjimky. Viz například fakt, že v DB dotazech regexpy běžně nepoužíváme. Přitom všechny popsané operace zvládnete pomocí pár metod, které jsou čitelné (IsEmpty, EndsWith, StartsWith, IndexOf, Split, Trim apod).

    Rozumět vlastnímu kódu v vlastnímu regexpu je rozdíl. U kódu je typicky při troše inteligence, znalosti angličtiny a byť jen základů daného jazyka zjevné, co dělá (a pokud ne, chybí komentář). Regexpy jsou na čtení daleko větší problém.

    Ale jak jsem psal už někdy dříve, kdybych celý život administroval unix, ovládal vi a psal v Perlu, zřejmě by mi to celé přišlo nejen normální, ale i velmi praktické.
  • 17. 2. 2008 7:20

    Rejpal (neregistrovaný)
    Vždyť i v tom PowerShellu píšete napůl v Perlu, viz to "$_" ... ;) A '|' a '-eq' jsou mi taky nějak povědomé. ;-) Ono to nakonec vyjde nastejno, každý podobný nástroj bude mít nějaké vlastní ne zcela intuitivní, ale zato zcela praktické zkratky, jinak bychom skriptovali v poměrně ukecané Javě a C#, což neděláme (doufám). :-)
  • 17. 2. 2008 13:33

    bez přezdívky
    Ano, PowerShell je moc pěkný koncept, ale trochu složitý. Obávám se, jestli si na něj admini zvyknou. Faktem je, že Powershell je jediný větší pokrok ve skriptování (bez ohledu na platformu) za dlouhou řadu let.
  • 17. 2. 2008 13:40

    tukan (neregistrovaný)
    Já bych to dál neroztahoval, co jsem chtěl napsat, napsal jsem - myslím, že si v podstatě rozumíme.

    Jen pár posledních poznámek - nejsem admin, ale programátor, takže to parsování a RE prostě používám víc než potřebuje průměrný admin. Ten si vystačí s grepem na celá slova, většinou úplně bez RE. Psal jsem to ze svého pohledu.

    Ta vaše ukázka PowerShellu je validní Unix shell výraz. :) Propojení pipama, princip fungování - to všechno MS převzal z osvědčeného Unix prostředí a udělal dobře. Pipe a přesměrování fungují už od dob DOSu, v PowerShellu to je jen okořeněné dodatečnými utilitami, které poskytují různé části Perlu, grepu, atd.

    Aplikace bez RE - to je otázka JAKÉ aplikace. Průměrná GUI aplikace, pravda, se bez RE může obejít. Ne všechny aplikace jsou GUI, ne všechna data jsou typovaná a vytahovaná z DB. Ne všem stačí parsování _textu_ pomocí zmíněných metod.

    Rozumět _vlastnímu_ RE - tady musím upozornit, že v první větě mluvíte o porozumění _samotného_autora_, k čemuž platí to co jsem napsal. Ve druhé větě jste ale odskočil a najednou mluvíte o porozumění někoho _jiného_, kdo má jen programátorské základy. V té větě máte pravdu, ale to nedokazuje nic z první věty. K této části jsem taky napsal své - tedy že nemůžeme používat primitivní programování jen proto, že jsou lidi, kteří by složitějším věcem nerozuměli. K té první větě pořád platí, že vlastní kód a vlastní RE jsou stejná věc - buď používám výrazivo (kód, RE), kterým rozumím nebo ne. Když jim dobře nerozumím, nemůžu čekat, že jim budu zázračně rozumět za rok lépe.

    Poslední odstavec - rozhodně. Dobrý programátor/admin zachází se všemi dostupnými prostředky. Časem zjistí co je na co nejlepší a pracuje efektivněji. Ale RE nejsou závislé na žádném OS, je to univerzální nástroj, stejně jako aritmetika, nebo string funkce.
  • 17. 2. 2008 12:10

    bez přezdívky
    No já nevím, když jsem ten svǔj kousek kódu pro jistotu vyzkoušel, tak všechny prvky (včetně prvního a posledního) byly OK :-).

    Rád bych těm RE a k vašim úvahám o (ne)vhodnosti použití Ragelu v daném případě napsal pár poznámek:

    1. Nevím, zda jste si všiml, ale zápis gramatiky Ragelu a RE je opravdu velmi, ale velmi podobný. V RE např. napíšete, že řetězec začíná znakem S nebo T a pak následuje alespoň jedna číslice jako /[ST]\d+/ , v Ragelu je to ('S' | 'T') digit+ (tedy, když budu úplně přesný, RE se dají použít i jako konstrukční element v Ragelu, takže zrovna tenhle jednoduchý by se tam dal napsat minimálně jako /[ST][0-9]+/). Je v tom ale nějaký rozdíl kromě syntaxe? RE mi to ale umožňují popsat jen na úrovní jednotlivých znaků, Ragel kromě toho úplně stejným přístup (nemusím se učit novou syntaxi/sémantiku) umožňuje popsat i abstraktnější úroveň - třeba řádky nebo sekce v souboru. Z toho důvodu je Vaše úvaha, že jsem nikdy neviděl RE, poněkud odvážná. Čímž samozřejmě nechci naznačit, že je umím lépe než Vy.

    2. Zmiňujete rozšiřitelnost a údržbu. To byl právě jeden z důvodů mé volby Ragelu v tomto případě (OK, vím, že RE v Perlu mají "extended" režim). Berte v úvahu, že ten článek z pochopitelných důvodů nepopisuje realitu, ale její podmnožinu. Uznávám, že to možná trochu vypadá, že jsem chtěl naparsovat jen ten jeden soubor s pár řádky z příkladu v článku - to byla asi má chyba, že jsem to dostatečně nezdůraznil. Nicméně jsem toho názoru, že se článek týká Ragelu, ne historie projektu a výběru nástrojů. Ve skutečnosti je několik verzí těch výpisů a můj pǔvodní jednoduchý přístup znamenal, že jsem musel udržovat více jednoduchých verzí skriptů (se všemi nevýhodami - jako třeba propagování oprav chyb do několika větví).

    Nemám zapotřebí sám sebe hodnotit, zda jsem programátor spravný nebo nesprávný (když jsem nepoužil ty RE :-), ale jsem programátor dostatečně líný, abych nezvolil Ragel bezdůvodně. Když mám parsovat CSV, tak jako první zvolim (kupodivu?) standardní knihovnu pro parsování CSV. Když narazím na problém, hledám jako další v pořadí lepší knihovnu pro parsování CSV. Když mi nevyhovuje a nechce se mi do ní lézt, abych ji opravil nebo rozšířil a mám případně i další důvody, hledám obecnější řešení. Když jsem uvážil všechny možnosti "standardního" formátu CSV (hodnoty mohou a nemusejí být v uvozovkách, uvozovky v hodnotě jsou zdvojené, různý zápis "prázdné" hodnoty mohou obsahovat oddělovač polí nebo (pokud jsou víceřádkové) i znak konce řádku), tak se mi do RE prostě nechtělo. No a když jsem ještě zvážil, že ta aplikace, co je teď v Ruby on Rails, by nejspíš chtěla přepsat do něčeho jiného (RoR je sice fajn, ale na tu aplikaci to prostě není ta nejvhodnější volba), že mám několik mírně odlišných formátů těch výpisů, tak jsem hledal nejjednodušší nástroj, který mi bude vyhovovat. Ragel byl (a stále myslím je) pro daný účel vhodný kompromis. Navíc váš přístup jednoduchého skriptu má jednu nevýhodu: hodnota a řekněme maximálně řádek je popsán gramatikou (v tomto případě RE), ale vyšší úroveň struktury souboru (popis sekce, jak jsou sekce v souboru řazeny apod.) nejsou vyjádřeny explicitně - popisuje je pouze implicitně zdrojový kód příslušného skriptu.
  • 17. 2. 2008 13:41

    polymorpheus (neregistrovaný)
    V Ruby se s RE pracuje uplne stejne pohodlne jako v Perlu, coz je dano tim, ze Ruby, stejne jako spousta jinych jazyku proste perlovske regexy beze zbytku prejima, v pripade Ruby vcetne operatoru =~, takze odpada vytvareni instanci a 'kompilovani', i kdyz i to v Ruby samozrejme take jde prosim opravdu Ruby nepodcenujte (o Ruby se rika, ze je to next generation Perl) - ma v podstate vsechno, co ma Perl a navic IMHO mnohem lepsi objektovy model, coz rozhoduje Osobne si myslim, ze az bude hotove Ruby 2.0, nastane takova mala revoluce, a ti, co budou Ruby uz znat, budou mit velkou vyhodu:)
  • 17. 2. 2008 14:48

    tukan (neregistrovaný)
    Ta revoluce začala před lety - Perl 6. :) Má i virtuální mašinu jako Java, jde spojovat s .NET jazyky, Javou a jako jazyk je úplně jinde než současnost (C#, Ruby, Python, atp). Dělá na tom tolik lidí tak dlouho, že pro rychlokvašky typu Python a Ruby by to nebyl fair souboj. ;-)

    Nepoužívám ho často, chci si počkat, až bude vše ustálené, ale z neosobního hlediska nic v jeho používání nebrání. TO je jazyk nové generace. Ruby 2.0 a revoluce? Že přetáhne lidi od Perlu? I don't think so. Přání otcem myšlenky? :) Python i Ruby jsou spíš kuriozity adoptované začátečníky, resp. Webovou komunitou. Ruby neznám, je to minoritní programovací jazyk a když jsem se na něj díval naposled, nenabízel nic, co by ospravedlňovalo opuštění Perlu (v této kategorii). To už bych spíš uvažoval o Pythonu, ale klasický interpret mi stačí jen jeden a to je Perl. Neznám jiný jazyk s tolika "magickými" možnostmi, které jsou přesně to, co člověk na rychlovky a parsery potřebuje nejvíc. Tied objekty, globy, introspekce, autoloading, XS a celý C interface pro rozšiřování nativním kódem, neomezeně strukturovtelná datová úložiště bez nutnosti cokoli deklarovat, unikátní princip fungování objektů - to co mnozí vidí jako bastl a slabou implementaci je ve skutečnosti mocný nástroj umožňující neuvěřitelné triky, perfektní debugger, ale i obrovská základna hotového kódu (modulů) ze všech oblastí - prostě špička.

    Kombinace C/Perl/Java mi dávají ze současných jazyků nejvíc - každý ve své kategorii. Momentálně prožívám postupný přechod od Javy k C#, v multiplat. se mi Mono+.NET osvědčily a C# 2.0 je moc pěkný jazyk. Jak vidíte, novým věcem se nebráním, ale Ruby je v mém seznamu až na úplném konci.

    Už si nepamatuju co a jak jsem hodnotil, když jsem Ruby asi 14 dní zvažoval, ale vím, že co jsem viděl, mě odradilo. Když budu mít čas, rád vám přednesu konkrétní důvody...
  • 17. 2. 2008 15:10

    bez přezdívky
    Spousta věcí je subjektivní věcí. Já bych třeba řekl, že PERL nenabízí nic, co by ospravedlňovalo opuštění .NETu.

    Říkáte, že máte zkušenosti s Mono. To by mě zajímalo. Jak vypadá situace? Co se pro něj dá dnes napsat, jak to v praxi vypadá s použitím kódu psaného pro .NET?
  • 17. 2. 2008 16:24

    tukan (neregistrovaný)
    Asi jsme si nerozuměli - Perl a .NET jsou pro mě dvě různé kategorie. Javu opouštím ve _prospěch_ .NETu. Perl je v kategorii Pythonu a Ruby. Mám tři kategorie, klasické (nejčastější) programování v C, pak relativně "platform independent" jazyky na business sračky - Java, C# a nakonec interprety pro parsování, tooly a rychlé a jednoduše modifikovatelné GUI aplikace v Gtk - Perl.

    O Monu by se dalo psát hooodně dlouho. Asi nemá smysl popisovat jazyk, toho je na netu až až, takže první a nejdůležitější věc je, že funguje teď(tm). :) Situace vypadá dost dobře, co napíšu v Monu prakticky bez problému funguje v .NET. Opačně to je složitější, protože win lidi často používají i v takto nezávislém jazyce nativní věci jako P/Invoke, DLLka, atp. Něco se dá obejít, něco se musí odseknout, něco přepsat. S tím ale moc problémy nemám, protože neportuju, ale dělám vlastní programy. Týká se to spíš C# knihoven. Nejpohodlnější ale je prostě deployovat Mono runtime s aplikací, a to i na win. Přece jen to dává větší volnost a člověk nemusí tolik testovat na rozdíly oproti .NET, které existují. Mono samo o sobě má skvělý runtime, všechny třídy jsou dostupné se zdrojáky, takže člověk může dělat zkratky a místo subclassování prostě upravit drobnost či dvě přímo v jejich kódu a použít to. Mono běží na plno platformách, takže i samo o sobě je dobré. Jen na serverové aplikace to nemám vyzkoušené. Tam bych asi pořád preferoval Javu, ale to není objektivní hodnocení.

    Jinak nemyslím, že .NET má nějaká omezení s ohledem na to, co se v něm dá napsat. Microsoft to prosazuje jako hlavní vývojovou platformu a je to ready. Jde s tím dělat i Web, ASP.NET je plnohodnotné ASP. Já s tím nedělám - pro web znám lepší technologie, ale známý si to chválil. :)
  • 17. 2. 2008 21:14

    Pavel Tavoda
    Spojit "platform independent" a C# do jednej vety aj ked v uvodzovkach chce dost silny zaludok. Poznam mono ale to je podla mna na "business sracky" nepouzitelne.
  • 18. 2. 2008 0:53

    tukan (neregistrovaný)
    > Spojit "platform independent" a C# do jednej vety aj ked v uvodzovkach chce dost silny zaludok.

    Vážně, anebo si pletete C# (jazyk) a .NET (platformu)? :) V C# můžete psát pro dost platforem, vč. Win i Unixů. Mono je na business sračky použitelné stejně jako .NET, mimochodem.
  • 18. 2. 2008 8:18

    Pavel Tavoda
    Isteze ako jazyk ano ale nakolko ani mono ani DotGNU neimplementuju kompletny .NET tak asi nie su pouzitelne rovnako. ECMA standard ohladom .NET nie je kompletny a naviac stale zostala otvorena otazka patentov a podpory. C# je z dlhodobeho hladiska komercne pouzitelny iba na Windows a kto mysli ze nie vystavuje sa roznym rizikam v buducnosti.
  • 17. 2. 2008 16:59

    polymorpheus (neregistrovaný)
    super prispevek, takhle ma vypadat flame o programovacich jazycich

    kdyz jsem naposledy zjistoval, v jakem stavu je Perl6 (http://perlbuzz.com/), videl jsem frustraci z nedostatku (casu) hlavnich vyvojaru. Nevypada to, ze Perl6 bude v nejblizsi dobe hotov, spise si jeste par (mnoho) let pockame. Na druhou stranu, na Perl6 se take velice tesim, ale mam obavu, ze bude prilis slozity i pro nadprumerne vyvojare

    Ruby ani Python rozhodne nejsou rychlokvasky, to je skoro urazka! :) Nikdo, kdo zna Ruby, to nemuze rict, to by totiz zaroven urazil vsechny vyznavace Lispu, Smalltaku, ale i Perlu!

    Je sice fakt, ze Ruby pomohl zajem webove komunity skrze RoR, ale prave na RoR je videt, jak je Ruby mocny jazyk. Na druhou stranu Ruby opravdu nepomaha nedostatek kvalitni dokumentace (knihy typu C Primer, C++ Primer Plus, apod.) a ne, Programming Ruby neni dobra kniha (je nekompletni). Nikde treba neni poradne vysvetlen objektovy model a moduly, coz je na povazenou (clovek musi do mailing listu) a nepomaha to adopci sirsi komunitou.

    Ovsem celkove lze IHMO rici, ze jedine Ruby ma v soucasnosti co nabidnout Java vyvojarum (ti predstavuji hlavni cilovou skupinu pro dynamicke jazyky) a je to predevsim diky jiz zminovanemu objektovemu modelu, ktery je (rovnez) velmi mocny, pritom je Java vyvojarum urcite blizsi nez objektovy model Perlu (i Pythonu). Dokud Perl nebude mit 'klasicke' objekty, dotud bude oproti Ruby v nevyhode

    Ostatni vlastnoti Ruby doporucuji Vasi ctene pozornosti (pro info viz treba The Ruby Way, Ruby Coobook, Ruby Quiz)

    Na C# 2.0 jsem se take dival, ale poravde receno, nelibil se mi - ty dynamicke prvky z toho jazyka delaji takovou divnou smesku. Kdyz uz dynamicky jazyk, tak se vsim vsudy (viz i moznost v Ruby znovu otevrit a libovolne menit definici trid) - takze Ruby!

    Larry Wall ve svem poslednim poslednim projevu kratce zminil i Ruby, a ze pry mu vadi jeho prilisna deklarativnost nebo co, a ze pristup Perlu (vsechno je text) je ten jediny spravny. Popravde nevim, co se Larrymu na Ruby nelibi a proc by mel byt pristup typu vsechno je text ten nejlepsi spravny... Zda se mi ale, ze Larry to s tema sigilama dost prehnal, coz urcite odrazuje znacnou cast mozna kvalitnich vyvojaru, kterym pak zustavaji utajeny jine super ficury (treba prave RE), coz je pro Perl asi skoda - na druhou stranu je to prilezitost pro Python, ale hlavne pro Ruby

    atd. atd.
  • 17. 2. 2008 14:11

    Tomas (neregistrovaný)
    Ty jsi me asi trochu nepochopil, to byla ironie. Byla to narazka na stupidni argumenty typy 'tenhle priklad bych dokazal napsat postupem xy 10x efektivneji na 1 radek'. Takze si dej mokry hadr na hlavu a trochu se zamysli nad tim, jestli se nahodou jednoduche priklady nepouzivaji schvalne. Treba aby to ostatni taky pochopili, vis?

    A i kdybys nahodou pravdu, tak se to da napsat slusne a ne timhle ego-masturbacnim zpusobem.
  • 16. 2. 2008 11:16

    Pavel Stěhule
    Nesmysl - clanek ukazuje dalsi technologii, a ta se neda ukazovat (ne vsichni na rootu jsou kovani programatori) na slozitem prikladu. Zrovna v tomto prikladu, a tak jak to autor podal ma smysl uvazovat o necem silnejsim nez jsou regulary - ty se take nehodi absolutne na vsechno, a nekdy je pouziti ucinnejsi technologie spolehlivejsi - odladit komplikovanejsi regular je urcite pracnejsi nez odladit jednodussi gramatiku. Prave, ze diky regularum ustupuji do zapomeni technologie jako je treba bizon, yacc a dalsi. Coz je trochu skoda - regulary jsou perfectni na adhoc psani, ale fakt se dost komplikovane udrzuji a rozsiruji, a v tomto ohledu je pouzivani gramatik vyhodnejsi (a zduraznuji i o neco pracnejsi).
  • 16. 2. 2008 15:26

    tukan (neregistrovaný)
    Jenže on ji ukazuje, _protože_ tím něco parsoval, nešlo mu primárně o "novou technologii". Kdyby uměl RE, tak ho ani nenapadne na proparsování tak jednoduchého výpisu použít kompilátor gramatiky. :)

    Všechno má své místo a s tím souhlasím. Yacc použiju, pokud budu chtít udělat parser vlastního typu konfiguráku, použiju ho na vlastní indentační utilitu, ale nepoužiju ho na parsování tabulkového výpisu. To není jen o náročnosti údržby, ale o efektivitě řešení. Udržovat gramatiku může být mnohem složitější, než upravit dobře napsaný RE. Pojďme nezevšeobecňovat diskusi o jeho řešení na všechna řešení, jen proto, že máte pocit, že málo lidí umí s Yacc a Bison...

    Je pravda, že udržovat velké RE může být pro někoho frustrující, ale tady mluvíme o dvou triviálních výrazech. Dobře napsaná RE to projede prakticky bez backtrackování. Pro mě je lepší řešení to, co rychleji napíšu, rychleji budu moci přizpůsobit novému formátu a hlavně co bude parsovat rychleji. Kdyby šlo o nějaký kompromis, tak prosím, ale tady - co se mě týče - mluví ve prospěch RE všechno...

    Já mu to neberu, ať si parsuje třeba v Pascalu (proč ne, když může v Ruby), ale nebral bych to jako souboj ideologií nebo důvod k dohadům co je na co lepší. Pravda je jako vždy velmi prostá, místo aby si jako správný programátor našel nejlepší nástroje pro dosažení svého cíle a naučil se s nimi (což se mu časem mnohokrát vrátí a je jedinou cestou k lepším schopnostem), šel cestou nejmenšího odporu a násilím napasoval prostředky řešení na to co umí, bez ohledu na kvalitu řešení. :)
  • 17. 2. 2008 13:03

    Václav Štěpán (neregistrovaný)
    Já bych to nedramatizoval - jasně, že ten soubor ze Spořitelny lze na pár řádcích v Perlu upravit a vyhodit do něčeho, co použijete dál (SQL, vstupy pro Ruby, cokoliv). Na druhou stranu pro mne to třeba zajímavý článek je, protože nejsa z FELu, o generátoru typu Ragel jsem posud neslyšel...
  • 17. 2. 2008 14:19

    Tomas (neregistrovaný)
    Ja to taky tak myslel. Na Roota (a obecne ceske diskuze) jsem zabrousil po hodne dlouhe dobe, takze tohle pro me byl opravdu sok. Ve snu by me nenapadlo, ze by to nekdo mohl pochopit jinak nez jako ironii. Trollum zmar a slunce v dusi
  • 18. 2. 2008 1:52

    tukan (neregistrovaný)

    Víme, to už jsi tu říkal. Ale ve skutečnosti jsem odpověděl na tvůj přínosný komentář čistě z pohodlnosti. Potom co jsem si přečet článek a pár příspěvků, potřeboval jsem tlačítko "Odpovědět". Tvoje reakce byla negativní a uprostřed obrazovky - použil jsem tě čistě jako ovládací prvek. Po pravdě - ani jsem to nečet, šlo mi jen o kontext a tvoje milé "OMG" na mě vykouklo.

    Možná by bylo lepší, kdyby ses vrátil na ta nečeská fóra. Neber si to osobně, ale lidí, co plní diskuse skřeky o ničem je tu až až. Jen pro upřesnění, já - zjevně na rozdíl od tebe - komentuju vždycky k věci. Stačí se podívat co jsi ze sebe dostal ty a o čem jsem se tu s pár schopnými lidmi bavil já. Je úplně jedno, jestli jsi kéroval do autora nebo čtenářů - pořád to je jen trollí kérování.

    Faktem zůstává, že autor je tupec a článek uvádí následovně:

    Nedávno jsem dostal nelehký úkol: parsovat bankovní výpisy České spořitelny. Formátování vstupních dat je ale velmi nestandardní a často se nedrží ani vlastních pravidel. Hledal jsem proto vhodný parser, který by si s problémem poradil.

    Načež se jal líčit, jak to nakonec vyřešil všeobecným parserem gramatik. Vstupní data jsou přitom v jednom z nejjednodušších formátů co existuje. Kdyby se to jmenovalo Úvod do Ragelu bla bla bla, tak je to něco jiného a docela bych to uvítal jako příjemnou změnu, ale i po tom jak je poslední rok dva root.cz na nic mě stále dostává, když tu vyvěsí článek nějakého začátečníka o tom, jak se pral s CSV formátem, který jinak rozparsuje i dítě. Vůbec nešlo o to, že bych to dokázal napsat líp nebo jinak, to by dovedl každý; bylo to prosté povzdechnutí nad kvalitou obsahu v souvislosti s tím, že se publikují články neschopných zelenáčů, kteří píší o něčem co se naučili při psaní článku. Tos nepochopil? Já fakt žasnu! Vážně jsi mě dostal. Nevěřil bych, že někdo může být tak natvrdlý a nepochopit jednu prostou poznámku k perexu.

    Nakonec se to v diskusi snažil zahrát do outu, jakože mu šlo hlavně o Ragel, ale vypadá to blbě, protože o pár odstavců výš píše něco jiného. Ty jsi na tom ale ještě hůř, ze 104 komentářů jsou tvoje 3 a všechny se týkají tvé vlastní poznámky a jak jsi ji vlastně myslel. Měl by sis přiznat pravdu: nikoho to nezajímá, takové plky většina lidí přeskakuje. Jsem ale rád, že jsem si teď přečet i ty plky (tvé tři výtvory mezi nimi). Přišel bych o kopec srandy.

  • 18. 2. 2008 17:22

    Tomas (neregistrovaný)
    Clanek lze ale pochopit i tak, ze vse az do casti Instalace Ragelu je uvod, zbytek pak stať venujici se zakladum Ragelu (svedci o tom napriklad nadpis Začínáme s Ragelem).

    Kdyz uz si chces hrat se slovicky, tak z celkovych 3 komentaru byly 2 k me poznamce. Navic 2 svymi komentari k dosud mym 3 popiras svuj vyrok o tom, ze to nikoho nezajima.

    Az budes rozdychavat muj dalsi zbytecny komentar, zkus se zamyslet nad tim, jak svymi hodnotnymi a neagresivnimi prispevky motivujes dalsi potencionalni autory k psani clanku a tim zvysovani urovne Roota.
  • 18. 2. 2008 18:17

    jsa
    Pro mne jako neprogramatora, ktery nezna pojem "parser gramatik" je tohle zajimavy clanek i diskuse.

    Bohuzel se ctenari typicky hadaji, ktery jazyk nebo nastroj je lepsi. Tukane, kdyz uz hovoris k veci, nemelo by vyznam se na to podivat z pohledu zacatecnika (pokud jsi profesional tak jsi schopen zmenit postoj) a uvest napriklad, ze tady schazi definice rozdilu mezi RE a parsery gramatik, co ze to vlastne je a tak vubec? Jaka je vhodna literatura, pouziti, nejaky ten prikladek z Tve praxe a nakonec ... jasne ... osobni hodnoceni, ze autor to mohl pojmout trosku jinak?

    Hergot, vzdyt diskuse na internetu obsahuji hromadu balastu prave proto, ze lide prosazuji sve Ego. Pripada Ti, ze root.cz je na prd? Fajn, tak treba napis nejaky opravdu sofistikovany clanek. Ale upozornuji, ze pro lidi jako jsem ja takovy sofistikovany clanek bude na dve veci. Abych to upresnil, takovy pekny sofistikovany clanek mi bude na nic a potom na prd. Root.cz chapu jako rozcestnik a ne vysoce profesionalni publikaci pro lidi s dlouholetou praxi a vystudovanym matfyz nebo jaderkou.

    Takze kdyz vidim uvod do bashe, tak to prolitnu a kdyby tam byla nejaka chyba nebo mne napadl nejaky pekny trik, tak ho vlepim do diskuse namisto toho, abych si ztezoval jaka banda zoufalcu asi tak muze takovy paskvil cist. Vzdyt je to pro totalni zacatecniky, ze?

    Z pozice kritika a komentatora bych se snazil nad tema trosku povznest a pomoci lidem, kteri to potrebuji. Misto toho se z komentaru dozvim, jaka ze jsem socka, ze tohle uz davno nevim.
  • 20. 2. 2008 10:29

    bez přezdívky
    Tady musím uznat, že ten perex se opravdu moc nepovedl. Je, řekněme, minimálně poněkud zveličený. Měl jsem ho raději napsat sám :-).