Byla vydána (𝕏) květnová aktualizace aneb nová verze 1.101 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.101 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.
V Brně na FIT VUT probíhá třídenní open source komunitní konference DevConf.CZ 2025. Vstup je zdarma, nutná je ale registrace. Na programu je celá řada zajímavých přednášek, lightning talků, meetupů a workshopů. Přednášky lze sledovat i online na YouTube kanálu konference. Aktuální dění lze sledovat na Matrixu, 𝕏 nebo Mastodonu.
Vyloučení technologií, které by mohly představovat bezpečnostní riziko pro stát, má umožnit zákon o kybernetické bezpečnosti, který včera Senát schválil spolu s novelami navazujících právních předpisů. Norma, kterou nyní dostane k podpisu prezident, počítá rovněž s prověřováním dodavatelů technologií pro stát. Normy mají nabýt účinnosti od třetího měsíce po jejich vyhlášení ve Sbírce zákonů.
Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána v nové verzi 2025.6.
Po Red Hat Enterprise Linuxu a AlmaLinuxu byl v nové stabilní verzi 10.0 vydán také Rocky Linux. Přehled novinek v poznámkách k vydání.
Bylo vydáno Eclipse IDE 2025-06 aneb Eclipse 4.36. Představení novinek tohoto integrovaného vývojového prostředí také na YouTube.
Americká filmová studia Walt Disney a Universal Pictures podala žalobu na provozovatele populárního generátoru obrázků pomocí umělé inteligence (AI) Midjourney. Zdůvodňují to údajným porušováním autorských práv. V žalobě podané u federálního soudu v Los Angeles označují firmu za „bezednou jámu plagiátorství“, neboť podle nich bez povolení bezostyšně kopíruje a šíří postavy z filmů jako Star Wars, Ledové království nebo Já, padouch, aniž by do nich investovala jediný cent.
Ultra Ethernet Consortium (UEC), jehož cílem je optimalizace a další vývoj Ethernetu s důrazem na rostoucí síťové požadavky AI a HPC, vydalo specifikaci Ultra Ethernet 1.0 (pdf, YouTube).
Francouzský prezident Emmanuel Macron chce zakázat přístup na sociální sítě pro děti do 15 let. Francie podle něj tento krok udělá sama do několika měsíců, i pokud se na něm neshodnou další státy Evropské unie. Reaguje tak na úterní vraždu vychovatelky, kterou ve východofrancouzském městě Nogent pobodal 14letý mladík. Jednotlivé sociální sítě podle něj mají možnost věk ověřit a vymáhat zákaz pomocí systémů na rozpoznávání tváří.
Byl aktualizován seznam 500 nejvýkonnějších superpočítačů na světě TOP500. Nejvýkonnějším superpočítačem zůstává El Capitan od HPE (Cray) s výkonem 1,742 exaFLOPS. Druhý Frontier má výkon 1,353 exaFLOPS. Třetí Aurora má výkon 1,012 exaFLOPS. Nejvýkonnější český počítač C24 klesl na 165 místo. Karolina, GPU partition klesla na 195. místo a Karolina, CPU partition na 421. místo. Další přehledy a statistiky na stránkách projektu.
Víte že můžete odebírat mé blogy pomocí RSS? (Co je to RSS?)
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 :)
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.
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
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> ..
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 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í.
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..
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
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.
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.
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/á).
Co se licence týče, projekt používá BSD licenci.
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í.
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
Tiskni
Sdílej:
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.
To víš. Jdou s dobou.Nechápem ako je možné, že nič nefunguje poriadne, nič nie je poriadne dotiahnuté, všetko funguje ako by tak na oko.
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ě.
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í.
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
DSL ktery popisuje bezne pripadyJenž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
data pak můžeš transformovat pomocí XSLTWow, 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.
v některých ohledech je XSLT stále nepřekonané
Třeba v ukrutné syntaxi
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ů:
<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
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)
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
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
Kde se zastavit? To je jednoduche - predevsim oddelit jazyk a VM.+1