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 13:33 | IT novinky

    Před 25 lety, ve čtvrtek 29. dubna 1999, byla spuštěna služba "Úschovna".

    Ladislav Hagara | Komentářů: 0
    dnes 01:00 | Nová verze

    Byla vydána nová verze 24.04.28 s kódovým názvem Time After Time svobodného multiplatformního video editoru Shotcut (Wikipedie) a nová verze 7.24.0 souvisejícího frameworku MLT Multimedia Framework. Nejnovější Shotcut je vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.

    Ladislav Hagara | Komentářů: 0
    včera 16:33 | Nová verze Ladislav Hagara | Komentářů: 0
    včera 03:22 | Zajímavý článek

    V aktuálním příspěvku na blogu počítačové hry Factorio (Wikipedie) se vývojář s přezývkou raiguard rozepsal o podpoře Linuxu. Rozebírá problémy a výzvy jako přechod linuxových distribucí z X11 na Wayland, dekorace oken na straně klienta a GNOME, změna velikosti okna ve správci oken Sway, …

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

    Rakudo (Wikipedie), tj. překladač programovacího jazyka Raku (Wikipedie), byl vydán ve verzi #171 (2024.04). Programovací jazyk Raku byl dříve znám pod názvem Perl 6.

    Ladislav Hagara | Komentářů: 6
    27.4. 17:44 | Nová verze

    Společnost Epic Games vydala verzi 5.4 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    26.4. 17:11 | Nová verze

    Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.

    Ladislav Hagara | Komentářů: 12
    26.4. 13:33 | Nová verze

    Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.

    Pavel Křivánek | Komentářů: 9
    26.4. 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 48
    25.4. 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 15
    KDE Plasma 6
     (75%)
     (8%)
     (2%)
     (15%)
    Celkem 880 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník
    Alternativně viz také můj osobní blog (RSS pro anglické články, RSS pro české články), kde toho hlavně v angličtině vychází mnohem víc.

    Víte že můžete odebírat mé blogy pomocí RSS? (Co je to RSS?)


    A kdo neumí použít RSS, tak je tu twitter: @Bystroushaak.

    Od určité doby jsou všechny texty které zde publikuji verzované na Githubu.

    Jestliže najdete chybu, nepište mi do diskuze a rovnou jí opravte. Github má online editor, není to skoro žádná práce a podstatně mi tím usnadníte život. Taky vás čeká věčná sláva v commit logu :)

    Aktuální zápisy

    Brython

    5.3.2013 00:49 | Přečteno: 1920× | Obecné IT | Výběrový blog | poslední úprava: 5.3.2013 01:38

    Rád bych tímto blogpostem trochu přiblížil projekt nazvaný Brython. Jedná se o python běžící v prohlížeči, který je dynamicky za běhu transformován do JavaScriptu, jehož engine má pak na starosti interpretaci.

    Jak to funguje

    Technicky

    Brython se na rozdíl od podobných projektů (LLVM cPython) nesnaží o překlad intepreteru. Naopak je založen na podobnosti JavaScriptu s pythonem. Brython tedy funguje jako transformátor (nevím zda tomu říkat crosscompiler, metacompiler, či jak vlastně), který vezme python kód a přeloží ho na JavaScript. Ten je poté vykonán JavaScriptovým enginem v browseru, díky čemuž dosahuje podstatně většího výkonu než zmiňovaný LLVM cPython, kde je emulován celý interpreter.

    V praxi to vypadá nějak takto:

    def foo(bar, baz):
    	return str(bar) + str(baz)

    Kód po překladu Brythonem:

    function foo(){
            document.$func_info=["__main__","foo"] 
            $ns=$MakeArgs("foo",arguments,['bar','baz'],{},null,null) 
            for($var in $ns){eval("var "+$var+"=$ns[$var]")} 
            return str(bar).__add__(str(baz))
    }

    Brython má několik tisíc řádek v JavaScriptu a můžete ho stáhnout z SVN repozitáře projektu na google code:

    svn checkout http://brython.googlecode.com/svn/trunk/ brython-read-only 

    Uživatelsky

    Z uživatelského hlediska je použití velmi jednoduché. Stačí jen do vaší HTML stránky vložit soubor brython.js (127kB) a následně zavolat v příhodný okamžik funkci brython(), která ho inicializuje. Pak vám již nic nebrání používat python scripty v definované v příslušném tagu <script type="text/python">.

    Celé to může vypadat následovně:

    ..
    <script src="./brython.js" type="text/javascript"></script>
    ..
    <body onLoad="brython()">
    ..
    <script type="text/python">
    # .. váš python script, který pracuje se stránkou a případným JavaScriptem na ní použitým
    </script>
    ..
    </body>
    ..

    doc

    Jakmile začnete s Brythonem koketovat, narazíte velice rychle na potřebu hrabat se v DOMu konkrétní stránky, kde ho spouštíte.

    K tomu přesně slouží objekt doc, který se do jisté míry chová jako slovník (key:val storage), jenž je možné indexovat id atributy html tagů. Pokud si necháte pomocí pythonní funkce dir() vypsat jeho vnitřnosti, zjistíte, že se jedná o přemapovaný document z JavaScriptu.

    Rada:
    Z nějakého důvodu není možné používat samotný document. Pokud tedy z Brythonu chcete přistupovat k položce document.$object, alternativa by měla být doc.$object (nikoliv doc["$object"], protože $object není id, ale název objektu). To bohužel nefunguje, protože $ není validní název, takže vám to Brython zarazí SyntaxErrorem.

    Nebudu vás dále napínat - stačí k tomu použít python metody, které se uplatňují jako settery a gettery:

    doc.__setattr__("$object", val)
    doc.__getattr__("$object")

    <=

    Autor Brythonu se rozhodl přetížit operátor <= tak, aby sloužil jako přidávátko HTML tagů do DOMu. Stále se s ním dá porovnávat, ale pokud použijete jako operand jednu z vyhrazených funkcí, nedochází k porovnání, ale k přidání prvku do DOMu dle následujícího schématu:

    TAG([content,[attributes]])

    Přičemž za TAG si můžete dosadit následující funkce:

    A ABBR ACRONYM ADDRESS APPLET AREA ARTICLE ASIDE AUDIO B BASE BASEFONT BDO BIG BLOCKQUOTE BODY BR BUTTON CANVAS CAPTION CENTER CITE CODE COL COLGROUP COMMAND DATALIST DD DEL DETAILS DFN DIR DIV DL DT EM FIELDSET FIGURE FONT FOOTER FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HEADER HGROUP HR HTML I IFRAME IMG INPUT INS ISINDEX KBD LABEL LEGEND LI LINK MAP MARK MENU META METER NAV NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION OUTPUT P PARAM PRE PROGRESS Q RP RT RUBY S SAMP SCRIPT SECTION SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD TEXTAREA TFOOT TH THEAD TIME TITLE TR TT U UL VAR VIDEO

    Ukázka:

    doc <= DIV("Obsah divu", id="id_divu")

    import

    import funguje skoro tak, jak by jeden čekal. Můžete importovat jak JavaScriptové zdrojáky, tak pythonní, problém ovšem je, že se tak děje pomocí Ajax requestu do složky /libs. To je sice pěkné, ovšem díky SOP (Same Origin Policy) vám browser zabraňuje stahovat zdrojáky z cizích webů.

    To je možné částečně obejít přidáním nového <script src=".."> tagu do DOMu, což způsobí načtení zdrojového souboru z jiného serveru. Bohužel, takto načtený soubor nemůžete jednoduše importnout jako modul, řešení je tedy načíst ho jako řetězec (což musí být provedeno přímo v daném souboru) a ten pak prohnat importovací funkcí.

    print

    Je možné, že časem narazíte na potřebu použít funkci print() pro výpis výsledků. K tomu aby je vypisovala tam kam chcete je zapotřebí provést přesměrování stdout a stderr, které jsou definovány v modulu sys:

    class StdOut:
    	def __init__(self, target):
    		self.target = doc[target]
    	def write(self, data):
    		self.target.innerHTML += str(data)
    class StdErr(StdOut):
    	def __init__(self, target):
    		self.target = doc[target]
    	def write(self, data):
    		self.target.innerHTML += "<font color='red'>" + str(data) + "</font>"
    
    sys.stdout = StdOut("id_tagu_kam_chceme_vystup_presmerovat")
    sys.stderr = StdErr("id_tagu_kam_chceme_vystup_presmerovat")

    Pokud z nějakého důvodu (SOP) nemůžete importnout modul sys, dá se to udělat i takhle:

    doc.__setattr__("$stdout", StdOut("id_tagu_kam_chceme_vystup_presmerovat"))
    doc.__setattr__("$stderr", StdErr("id_tagu_kam_chceme_vystup_presmerovat"))

    Třídy je nutné nadefinovat, protože print() očekává metody .write(). Čistě teoreticky by na to mohly stačit funkce, ale takhle se dá kód rozšiřovat až jednou budete potřebovat cosi jako .flush() atd..

    local_storage

    Pokud chcete uložit data trvalejšího rázu, můžete je nacpat do proměnné nazvané local_storage. Je to HTML5 výmysl a většina uživatelů se dat sem umístěných nebude umět zbavit, což se nedá říct o cookies a sessions.

    Používá se to jako slovník, s tím že v momentální implementaci neumí metodu .keys(), která normálně vrací seznam položek ve slovníku uložených.

    local_storage["foo"] = 1 # set
    local_storage["foo"]     # get

    Callbacky

    Kód generovaný Brythonem je možné zaměňovat za JavaScript. Díky tomu není problém navěsit si na příslušné HTML tagy různé callbacky, které povedou na váš python kód, jako je třeba onload, onclick a další, běžně používané v JavaScriptu.

    Prakticky

    Z praktického hlediska se nejedná tak úplně o python. Píši záměrně více/méně, protože je zde několik změn (operátor <=) a hlavně obrovský počet položek na TODO listu.

    V současnosti neexistuje podpora dědičnosti (před cca měsícem nebyla ani podpora tříd), vyjímky fungují jen v základním režimu, kdy se nedají odchytávat konkrétní instance. Ve chvíli kdy jsem na projekt poprvé narazil například neuměl Brython používat k odsazení tabulátory, nebo do nedávna nebyla u stringu přítomna metoda .splitlines().

    Přítomny jsou tisíce bugů. Pokud vám kus kódu vrátí do pythonu JavaScriptovou hodnotu <undefined>, máte se na co těšit, protože se jedná o z pythonu neporovnatelný Cthulhu typ, se kterým je skutečně sranda pracovat. Zábavné je také chování .replace(), pokud mu dáte replacovat znak $ či ?.

    Pokud na podobnou chybu nebo nedostatek narazíte, doporučuji jí nahlásit. Tohle bylo poprvé kdy jsem se takto zapojoval, takže mě docela překvapila jednoduchost postupu, kdy prostě popíšete co vás trápí a autoři projektu to do pár dní či hodin vyřeší.

    Nic vám samozřejmě nebrání v hlubším zapojení se do vývoje a v zaslání patche jenž chybu přímo opraví, tedy samozřejmě pokud ovládáte JavaScript na dostatečné úrovni.

    pyjamas

    Na světě existuje podobný projekt, nazvaný pyjamas, který před nějakou dobou vyvíjel google. Těžko říct co se mu stalo, protože jsem o něm dlouho neslyšel.

    Naposledy když jsem si s ním zkoušel hrát, tak jsem nebyl schopný ho nějak kloudně zprovoznit. Nakonec se mi tenkrát tuším povedlo vygenerovat Hello world příklad, ze kterého vypadl blob o desítkách kB a jeho použitelnost byla silně diskutabilní.

    Abych to shrnul: Všechno to čím Brython vyniká (jednoduchost, komunita, přehledný kód) pyjamas dle mého názoru postrád(alo/á).

    Licence

    Co se licence týče, projekt používá BSD licenci.

    Slovo závěrem

    Ačkoliv poslední kapitola může vypadat docela pesimisticky a stavit Brython do pozice nepoužitelné hračky, nerad bych vzbuzoval tento dojem.

    Brython se rozhodně dá používat na jednodušší projekty a pokud jste tak jako já programátoři, pro které je python přirozeností, uvidíte, že se vám bude líbit víc než JavaScript. Jen to nechce očekávat revoluci která vytlačí JS, ale spíš zajímavou technologickou alternativu ve stádiu vývoje.

    Možná je to dáno tím, že v poslední době tíhnu k poněkud hipsterským projektům, možná jednoduchostí, či přátelskou a zatím nezkurvenou komunitou kolem celého projektu, ale Brython mi přijde jako skvělý projekt, který rozhodně stojí za prozkoumání.

    Odkazy

    http://brython.info - stránky projektu
    http://brython.info/doc/en/index.html - nějaká ta základní dokumentace
    http://brython.info/tests/console_en.html - cosi jako brython konzole - momentálně mám rozepsaný použitelnější kousek
    http://brython.info/gallery/gallery_en.html - ukázky a příklady

    https://groups.google.com/forum/?fromgroups=#!forum/brython - mailová konference (pokud se chcete zapojit bez použití hnusného webového rozhranní, pošlete mail na brython+subscribe@googlegroups.com).

    http://code.google.com/p/brython/ - projekt na google code
    http://code.google.com/p/brython/issues/list - seznam nahlášených chyb

           

    Hodnocení: 100 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    Bystroushaak avatar 5.3.2013 00:54 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Brython
    Ani nevím proč jsem to vlastně nepublikoval už dřív, teď jsem byl nějak líný to po sobě znova číst, tak doufám že to za ten měsíc a půl není moc outdated.
    Jendа avatar 5.3.2013 01:42 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: Brython
    Proč tak složitě? Nestačí si prostě spustit ve stránce počítač s Linuxem a Python provádět v něm?
    Bystroushaak avatar 5.3.2013 01:54 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Brython
    Rychlost..

    BTW; Zkoušel jsi do něj někdy dostat python? :) Já jo a moc sranda to není.
    xkucf03 avatar 5.3.2013 18:53 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Brython
    Hlavně bych uvítal, kdyby se konečně začaly psát pluginy pro nativní podporu „alternativních“ skriptovacích jazyků. Tohle překládání z jednoho do druhého je šíleně neefektivní, v podstatě se staví akorát další a další vrstvy abstrakce a systém se akorát zesložiťuje. Překlad do JS může zůstat jako náhradní řešení pro případ, že bude chybět nativní interpret.
    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
    Jendа avatar 5.3.2013 19:07 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: Brython
    Vždyť v tom linuxovém počítači si můžeš spustit libovolnou aplikaci v libovolném jazyce.

    (pozn.: vlákno jsem začal jako vtip, ale přijde mi, že se to tak fakt dělá)
    Bystroushaak avatar 5.3.2013 19:16 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Brython
    Jenže to je plugin, tedy něco, co musíš uživatele donutit nainstalovat. Osobně jsem třeba k pluginům velmi skeptický a jen tak něco si do počítače nenainstaluji, už vůbec ne proto, že se v tom někomu chtělo programovat víc než v javascriptu.

    Brython na druhou stranu funguje tak, že si toho uživatel ani nevšimne a jede slušně i na slabších strojích, jako je moje 5 let staré EEE.
    5.3.2013 07:24 xxxxxxxxxxx | skóre: 13 | blog: rhrtshrth
    Rozbalit Rozbalit vše Re: Brython
    dík, bude se hodit. :-)
    mirec avatar 5.3.2013 08:49 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Brython

    Ako myšlienka pekné ... ale ja neviem. Vývoj webov ma pomaly zabíja ... všetko je tu kompletne zlé. Jazyky sú zlé, ich použitie je zlé a ťažko sa niečo zmení prevodom python kódu na javascript. Nechápem ako niekto môže robiť weby. Nechápem ako je možné, že na obyčajnom google.com mi občas nefunguje história (majú tam riadenie back / forward pomocou js a občas to jednoducho nefunguje). Nechápem ako je možné, že nič nefunguje poriadne, nič nie je poriadne dotiahnuté, všetko funguje ako by tak na oko.

    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    5.3.2013 09:10 Aleš Kapica | skóre: 51 | blog: kenyho_stesky | Ostrava
    Rozbalit Rozbalit vše Re: Brython

    Nechápem ako je možné, že nič nefunguje poriadne, nič nie je poriadne dotiahnuté, všetko funguje ako by tak na oko.

    To víš. Jdou s dobou.
    5.3.2013 10:44 xxxxxxxxxxx | skóre: 13 | blog: rhrtshrth
    Rozbalit Rozbalit vše Re: Brython
    Nic není dokonalé a nikdy nebude. Všechno je to neustálý hon za dokonalým cílem, "fatamorgánou"...
    mirec avatar 5.3.2013 11:15 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Brython
    Nejde o to, aby to bolo dokonalé, ale aby to aspoň nesmerovalo k horšiemu. Žiaľ ako tak sledujem vývoj webov tak to k horšiemu ide ...
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    5.3.2013 13:21 JS
    Rozbalit Rozbalit vše Re: Brython
    I kdyz priklon k webaplikacim chapu (je pro to mnoho praktickych duvodu), mate naprostou pravdu. HTML/CSS/Javascript jsou na psani slozitejsich aplikaci nevhodne. Data, ktera by v tlustem klientovi byla ulozena v pameti, se musi ve webove aplikaci serializovat/deserializovat a posilat po siti; a vymenou za tuto praci navic (ktera stoji pomerne drahou mobilni energii) dostanete bezpecnostni rizika a nutnost pripojeni k internetu.

    Dale, desktopove aplikace scheduluje operacni system; na to, aby se browser stal rovnocennym operacnimu systemu zatim doba nedozrala. Vsechno, co uz v OS existuje leta, se na urovni browseru vynaleza znovu - bezpecnost, filesystem, izolace procesu..
    5.3.2013 17:53 Kvakor
    Rozbalit Rozbalit vše Re: Brython
    Občas si říkám, že by minimálně u některých webů, co obsahují spousty Javascriptu, bylo opravdu výhodnější nechat běžet každý tab jako samostatn0 vlákno, protože potom by ho už plánoval systém a ne prohlížeč, kterému to jde jako kočce pastva. Nejhorší to je, když nějaký tab spotřebuje sto procent času jádra, na kterém prohlížeč běží, zatímco ostatní jádra jsou nevyužitá a přesto se nedá koukat na jiné taby.
    Bystroushaak avatar 5.3.2013 18:41 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Brython
    Mě spíš zaráží, že to tak není. Mám úplně nový 6 jádrový počítač a stejně se firefox dokáže sekat na pitomé webovce, což je dost smutné.
    Jendа avatar 5.3.2013 19:08 Jendа | skóre: 78 | blog: Jenda | JO70FB
    Rozbalit Rozbalit vše Re: Brython
    S webovkou, která dokáže vytížit i jen jedno jádro, je něco špatně.
    5.3.2013 13:14 JS
    Rozbalit Rozbalit vše Re: Brython
    Podle me je to beznadejne. Javascript nema poradne knihovny, a hlavni sila Pythonu je prave v nich. I kdybychom si odmysleli vsechny problemy s prekladem, tohle zustane zasadnim problemem. Daleko uzitecnejsim a jednodussim projektem by bylo proste napsat (nebo slozit z uz existujicich) JS knihovny podobne Pythonu.
    Bystroushaak avatar 5.3.2013 13:20 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Brython
    Vtip je tak nějak v tom, že můžeš vzít python zdroják a prostě ho importnout. Druhá věc je, že spousta z nich ti teď nepůjde importnout kvůli vnitřním bugům, další spousta pak bude k ničemu, protože práce s diskem, sockety atd.. se v prohlížeči nekoná.
    5.3.2013 13:24 JS
    Rozbalit Rozbalit vše Re: Brython
    No prave, me prijde, ze dost podstatna a zajimava cast Python knihoven je napsana nativne v C, nebo na nich zavisi. Co treba pouzivam dost v posledni dobe je zabudovane sqlite. Takze je opravdu namiste otazka, kolik zdrojaku se takto da importovat.
    5.3.2013 13:25 JS
    Rozbalit Rozbalit vše Re: Brython
    Navic, zase - nebylo to tu uz s Javou, pokus napsat skoro vsechno v Jave? Nakonec to bylo pomale, a proto je JVM tak velke. U noveho jazyka se tento pristup da pochopit. Ale nakonec se stejne bez nejake formy kompilace JS do nativniho kodu patrne neobejdeme.
    Bystroushaak avatar 5.3.2013 13:29 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Brython
    No, já od toho neočekávám světovou dominanci, ani nic zázračného. Je to pro mě prostě jen zajímavý projekt.

    Jinak velká výhoda pythonu je snadná manipulace s řetězci. Vždy když mám kus pythonu, ve kterém dělám různou řetězcovou magii přepisovat do něčeho jiného s vyjímkou D, tak bych brečel.
    5.3.2013 15:34 JS
    Rozbalit Rozbalit vše Re: Brython
    No, k te manipulaci s retezci - nevim, jak je to treba v Perlu, ale s regularnimi vyrazy je nekdy docela opruz. Ale mozna opravdu patri k tem lepsim, co ja vim. Ale dokazal bych si predstavit, ze i Python na tom bude lepe - napriklad by mohl byt ve standardni knihovne nejaky parsovaci/lexerovaci modul, neco jako pyparsing.

    Co konkretne se ti v Pythonu tak libi na praci s retezci?
    Bystroushaak avatar 5.3.2013 15:55 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Brython
    Ale dokazal bych si predstavit, ze i Python na tom bude lepe - napriklad by mohl byt ve standardni knihovne nejaky parsovaci/lexerovaci modul, neco jako pyparsing.
    Jo, pyparsing je fajn.
    Co konkretne se ti v Pythonu tak libi na praci s retezci?
    Slices, různé metody, jako .replace() atd.. Celkově prostě jednoduchost a intuitivnost, kdy píšu subjektivně polovinu toho, co třeba v javě.
    5.3.2013 17:21 JS
    Rozbalit Rozbalit vše Re: Brython
    No me treba konkretne u regularnich vyrazu vadi, ze se porad musi testovat, jestli match == None. To je trochu nesikovne, ale mozna to pisu spatne.

    Jinak standardni metody Pythonu (a slicy) na retezcich mi chybi v mnoha jazycich. Treba v .NETu. :-)
    Bystroushaak avatar 5.3.2013 17:41 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Brython
    No me treba konkretne u regularnich vyrazu vadi, ze se porad musi testovat, jestli match == None. To je trochu nesikovne, ale mozna to pisu spatne.
    Mně u nich vadí, že je vždy do příště zapomenu, navíc je to nepřehledná slitá prasárna.

    BNF u pyparsing mi přijde jako mnohem čistější řešení.
    pavlix avatar 5.3.2013 15:59 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Brython
    Nějaké ty pythoní parsery jsem zkoušel, ale momentálně je mým naprostým favoritem Augeas.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    5.3.2013 17:16 JS
    Rozbalit Rozbalit vše Re: Brython
    Tenhle Augeas? To jsem neznal.. Moc popisu tam neni, ale jestli to chapu spravne, ma to vlastni DSL jazyk na parsovani.. Docela pekne zda se, nevis, jestli existuje neco podobneho i na binarni soubory?
    pavlix avatar 5.3.2013 19:01 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Brython
    Jo, tenhle. Na binární soubory netuším. Ale většinou se zpracovávají líp a pokud by byly komplikovanější, tak by možná stálo za to zkusit, zda by Augeas nakonec nešel i na ně, popřípadě ho upravit tak, aby šel.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    6.3.2013 10:55 JS
    Rozbalit Rozbalit vše Re: Brython
    Ja myslim, ze mezi textovymi a binarnimi soubory jsou znacne rozdily, takze je tezko predstavitelne, ze muze DSL na popis jednech bude fungovat na ty druhe. Napr. v binarnich souborech je bezne, ze velikost nebo pozice zaznamu je ulozena ja binarni cislo (zatimco u textu se pouziva oddelovac). Nedovedu si predstavit, jak by tohle rozumne mohl cist textovy parser.
    pavlix avatar 6.3.2013 11:06 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Brython
    Je fakt, že ty velikosti budou peklo. Ale stejně bych se jich zkusil zeptat, třeba budou vědět o nějakém jiném projektu.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    xkucf03 avatar 6.3.2013 15:08 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Brython
    Viz co jsem psal ve vedlejší diskusi – IMHO nemá cenu dělat na koleně nějaké vlastní parsování zvlášť u binárních formátů – binárních formátů či protokolů je už celkem dost a nemá valný smysl vymýšlet další – rozumné řešení je si vybrat nějaký existující* (meta)formát a k němu si dopsat vlastní slovník – řešit pouze tu sémantiku, názvy polí, struktury, datové typy… ale už ne, jak se to zakóduje (to už bylo vyřešeno a mnohokrát).
    Nedovedu si predstavit, jak by tohle rozumne mohl cist textovy parser.
    souhlas – binární a textové formáty jsou úplně jiné světy

    *) tudíž k němu jsou i parsery a knihovny
    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.3.2013 15:32 JS
    Rozbalit Rozbalit vše Re: Brython
    Ale ty jsi nepochopil, proc to chci - prave proto, ze jich je mnoho, by se hodil parsovaci DSL ktery popisuje bezne pripady. To neni o tom vymyslet vlastni format, ale byt schopen uniformne cist existujici formaty.

    K cemu by takova vec mohla byt dobra? Napr. k inteligentnimi porovnavani, vyhledavani rozdilu, kompresi, atd.
    xkucf03 avatar 9.3.2013 12:53 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Brython
    DSL ktery popisuje bezne pripady
    Jenže co jsou to běžné případy? Obávám se, že takový popisný jazyk by musel* být natolik bohatý, že by to byl běžný programovací jazyk… Spíš bych to řešil jako framework, do kterého by se daly psát moduly pro různé formáty – vstupem by byl proud bajtů a výstupem DOM, SAX nebo něco podobného. Framework by poskytoval funkce pro běžné úlohy (parsování různých číselných formátů, různé dekódování atd.), které by modul mohl volat a tím si ušetřit práci – ale kdyby na něco funkce nebyla, bylo by možné si ji v modulu napsat zcela bez omezení.

    S tímhle si trochu hraju** v Javě: abys mohl načítat různé formáty, abstrahovat od nich a pracovat s těmi daty jednotným způsobem – data pak můžeš transformovat pomocí XSLT nebo nad nimi dělat XPath dotazy, i když to původně byly třeba INI soubory, JSON nebo třeba ASN.1.

    *) jinak asi nepokryješ dost formátů, ale jen nějakou nezajímavou podskupinu (samozřejmě záleží, za jakým účelem to děláš – třeba máš vyhlídnuté formáty, pro které by to šlo – ale jako zcela obecné řešení mi to přijde utopie)

    **) už je to nějakou dobu, teď to leží rozpracované v šuplíku
    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 9.3.2013 15:25 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Brython
    data pak můžeš transformovat pomocí XSLT
    Wow, on někdo XSLT skutečně používá? Nedávno jsem se o to trochu zajímal a podle toho co jsem našel to působilo jako technologie, která nějak nenápadně umřela.
    xkucf03 avatar 9.3.2013 15:31 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Brython
    To má být vtip? Je tu sice XQuery, ale v některých ohledech je XSLT stále nepřekonané.
    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
    9.3.2013 15:35 Radek Miček | skóre: 23 | blog: radekm_blog
    Rozbalit Rozbalit vše Re: Brython
    v některých ohledech je XSLT stále nepřekonané

    Třeba v ukrutné syntaxi :-)

    xkucf03 avatar 9.3.2013 16:06 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Brython

    Je fakt, že nutnost psát if+else* pomocí tří elementů může některé slabší povahy odradit :-) (ale má to svoje důvody a i něco do sebe…)

    XSLT považuji za nepřekonané ze dvou důvodů:

    • XSLT šablonu lze pojmout mj. tak, že odpovídá výslednému dokumentu (např. XHTML stránce, konfiguráku, ISDOC, SVG, LaTeX, TXT atd.) a sem tam obsahuje příkazy pro doplnění dynamických dat nebo nějaké větvení a cykly. Je to podobné jako původní myšlenka PHP – ale udělané lépe. Díky tomu se používá velice jednoduše – nízká vstupní bariéra, a XSLT šablony si tak může začít psát nebo upravovat i administrátor nebo obecně neprogramátor.
    • Na elementy ze vstupu se aplikují šablony <xsl:template match="…">. Těch může být více a vybere se ta s nejlepší shodou (XPath dotazem). Šablona si udělá, co potřebuje, a pak může zase předat řízení dál pomocí <xsl:apply-templates/>. To, co by se v jiných jazycích muselo řešit pomocí spousty ifů, switchů a cyklů, máš tady bez práce.

    *) nebo if, else if…, else – zatímco samotný if je jen na jeden element

    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 9.3.2013 21:19 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Brython
    Tak jsem na to teď koukal a začíná se mi to čím dál tím víc líbit. Máte někdo tip na dobrý tutoriál?
    xkucf03 avatar 9.3.2013 22:38 xkucf03 | skóre: 49 | blog: xkucf03
    Rozbalit Rozbalit vše Re: Brython
    :-)

    XSLT v příkladech od Jirky Koska. A taky se můžeš inspirovat u zdrojáků mého XML Web generátoru. Až se prokoušeš úplnými základy (celkem brzy) a začneš řešit konkrétní otázky, tak je stejně nejlepší STFW a většinu odpovědí najdeš na Stackowerflow nebo podobných webech.

    Co se týče verzí XSLT: nejpřenositelnější je 1.0, ta funguje všude (např. xsltproc). Pak jsou obvykle podporovaná rozšíření EXSLT. Verze 2.0 je toho umí ještě víc, ale potřebuješ procesor, který ji podporuje – třeba Saxon (aptitude install libsaxonb-java, licence: Mozilla Public License version 1.0).

    Taky koukni na knihovnu XSLT Standard Library.

    Jako IDE se dá použít jEdit (spuštění transformace na jedno kliknutí) nebo cokoli na příkazové řádce (stačí zavolat xsltproc nebo saxon). V neposlední řadě můžeš použít běžný webový prohlížeč® jako např. Firefox a mít na začátku XML souboru:
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="šablona.xsl"?>
    a prohlížeč udělá transformaci sám a není potřeba ji dělat do souboru – stačí mačkat F5 v prohlížeči. (příklad BTW: takhle by podle mého měly vypadat konfigurační soubory – uživatel by k nim měl dostat schéma, aby vědět co tam psát, a taky šablonu, aby si mohl konfigurák zobrazit v prohlížeči v lidsky čitelné podobě a s výkladem)
    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 10.3.2013 14:05 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Brython
    Touto fází jsem si taky prošel. A pak jsem začal přepisovat stromy rovnou z Pythonu. Výsledek byl méně standardizovaný, ale mnohem dříve hotový.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Bystroushaak avatar 9.3.2013 17:08 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Brython
    Nevím, to je jen můj dojem, který jsem získal po chvíli googlení před pár týdny.
    mirec avatar 9.3.2013 17:09 mirec | skóre: 32 | blog: mirecove_dristy | Poprad
    Rozbalit Rozbalit vše Re: Brython
    Ja používam bežne (hlavne keď mi niekto mieri zbraňou na hlavu a chce po mne nejaký importný / exportný plugin pre libreoffice calc). No dobre, tú zbraň som si vymyslel ;-)
    LinuxOS.sk | USE="-fotak -zbytocnosti -farebne_lcd +vydrz +odolnost +java" emerge telefon
    Josef Kufner avatar 5.3.2013 13:50 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Brython
    O knihovny nejde. Vem si napŕíklad, že máš na serveru kus kódu, který přepočítává nějaké datové struktury a pak je zobrazí do HTML. Udělá se HTTP GET, spustí se na serveru kus Pythonu, přepočítá se, pošle se klientovi vísledek. No a v okamžiku, kdy chceš udělat suprmoderní Javascriptovou aplikaci (třeba jen kvůli tomu, že server nestíhá), tak musíš tenhle kus Pyuthonu přepsat do Javascriptu, aby se klient nemusel ptát na každou blbost serveru, ale mohl si to spočítat sám. A to je přesně okamžik, kdy ti takovýto nástroj přijde vhod.

    Další pěkným použitím je validace formulářů, kdy máš funkci, které dáš data z formuláře a ona řekne, co je špatně. To musí být bezpodmínečně na serveru, ale je velmi žádoucí to mít i na klientovi, aby to rovnou ukazovalo, co uživatel podělal. Nyní se taková pravidla píšou dvakrát, obvykle se použije knihovna se sadou běžných pravidel a speciality se řeší jen na serveru.

    Další ukázkou je náhled komentáře před odesláním tady na AbcLinuxu. Kdyby bylo možné snadno vzít kód ze serveru a spustit ho na klientovi, tak bychom nemuseli mačkat čudlík "Zopakuj náhled komentáře" ;-)
    Hello world ! Segmentation fault (core dumped)
    5.3.2013 15:42 JS
    Rozbalit Rozbalit vše Re: Brython
    Uznavam, ze tohle je asi dobry use case. Otazka ale je, jak moc to takhle pujde, pokud s tim nebudu dopredu pocitat..

    Ono o tohle se snazila uz Java.. Jenom o duvod vic proc jsou webove aplikace krok zpet.
    7.3.2013 00:49 __dark__
    Rozbalit Rozbalit vše Re: Brython
    node.js :)
    Josef Kufner avatar 7.3.2013 13:42 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Brython
    Jo, tohle jsem čekal ;-)
    Hello world ! Segmentation fault (core dumped)
    5.3.2013 21:50 diverman | skóre: 32 | blog: život s tučňáčkem
    Rozbalit Rozbalit vše Re: Brython
    To, že prohlížeče neumějí nativně python, případně perl, ruby, apod. považuji největší handikep současného webu. Jen si představte programovat pro prohlížeč ve svém oblíbeném jazyce.
    from jquery import jQuery
    
    if __name__ == '__main__':
        jQuery('input[type="button"]').click(lambda but: but.css('display', 'none'))
    
    
    deb http://ftp.cz.debian.org/debian jessie main contrib non-free
    Bystroushaak avatar 5.3.2013 22:52 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Brython
    Jo, to by bylo dost dobré, jenže pak by byla otázka, kde se vlastně zastavit. U pythonu? U ruby? U c? U bashe? Výsledný prohlížeč by pak mohl být krapet nekonečně veliký :)
    5.3.2013 23:44 diverman | skóre: 32 | blog: život s tučňáčkem
    Rozbalit Rozbalit vše Re: Brython
    Osobne by mi stacil ten python.
    deb http://ftp.cz.debian.org/debian jessie main contrib non-free
    Josef Kufner avatar 6.3.2013 00:07 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Brython
    Jo, pak přijde někdo další, že chce Ruby, pak další, že PHP, pak další... bleeee.
    Hello world ! Segmentation fault (core dumped)
    6.3.2013 05:16 JS
    Rozbalit Rozbalit vše Re: Brython
    Kde se zastavit? To je jednoduche - predevsim oddelit jazyk a VM. Takova reseni uz tu byla - JVM, Flash (i kdyz ani jedno neni idealni). A nakonec obe padla z politickych duvodu.
    Acci avatar 6.3.2013 08:55 Acci | skóre: 3 | blog: Jen na chvíli…
    Rozbalit Rozbalit vše Re: Brython
    Něco takového se chystá: asm.js.
    6.3.2013 10:56 JS
    Rozbalit Rozbalit vše Re: Brython
    Jenze to neresi ten politicky duvod.. Pokud ten standard nepodpori MS, Apple a Google, nema to sanci.
    Acci avatar 6.3.2013 19:52 Acci | skóre: 3 | blog: Jen na chvíli…
    Rozbalit Rozbalit vše Re: Brython
    Právě že řeší: program přeložený do asm.js dokáže zpracovat jakýkoliv JavaScriptový engine – jen Mozilla Firefox tyto aplikace bude zpracovávat rychleji.
    Acci avatar 6.3.2013 19:53 Acci | skóre: 3 | blog: Jen na chvíli…
    Rozbalit Rozbalit vše Re: Brython
    A až se začnou objevovat benchmarky na webech, kde bude Firefox dvakrát rychlejší než Chrome, Google jej bude muset implementovat též.
    Grunt avatar 6.3.2013 19:54 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Brython
    Petr Tomeš si změnil nick?
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    pavlix avatar 6.3.2013 09:53 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Brython
    Kde se zastavit? To je jednoduche - predevsim oddelit jazyk a VM.
    +1
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Grunt avatar 6.3.2013 16:31 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Brython
    Pamatujete operační systém EMACS? Tohle je dost podobné. Není nad to vypadnout s mobilem do přírody a při spuštění kalkulačky dostat hlášku o nepřipojení k síti a nebo naopak si nepřečíst kus textu v linksu, protože musí být ten text u klienta vygenerován (o pokročilých úkonech jako je třeba ebaniking z konzole nemluvím vůbec, to je víceméně vlhký sen).
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!

    Založit nové vláknoNahoru

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