Max Leiter v roce 2019 zkusil zprovoznit X server na iPadu (iOS). Nyní se k tématu vrátil a s pomocí LLM a balíčkovacích nástrojů Procursus rozběhl desktop s X11 i Waylandem. Jeho balíčky jsou dostupné v repozitáři xiOS.
Společnost Google Cloud dnes oznámila, že její infrastruktura a služby byly oficiálně zařazeny do Katalogu cloud computingu vedeného Digitální a informační agenturou (DIA). Tato certifikace potvrzuje, že infrastruktura a služby Google Cloud splňují přísné bezpečnostní a regulační požadavky České republiky pro provoz cloudových služeb ve veřejném sektoru.
Vůbec poprvé v historii se stát při testování digitálních služeb obrací na širokou veřejnost. Digitální a informační agentura (DIA) a Ministerstvo vnitra zvou občany k zapojení do zátěžového testu eDokladů, které od loňského podzimu prošly optimalizací aplikace a posílením infrastruktury. Test proběhne 13. srpna ve 13:00 a pro jeho úspěch bude potřeba zapojení několika desítek tisíc občanů. Zapojení do testu je zcela dobrovolné a úkol
… více »FireDragon je webový prohlížeč, doposud založený na Floorpu, jednom z forků Firefoxu s větším důrazem na ochranu soukromí a přizpůsobení uživatelského rozhraní. Spravuje ho člen komunity distribuce Garuda Linux. Nové vydání verze 13 opouští Floorp a přechází přímo na Firefox s patchi z LibreWolfu a vlastními úpravami. Dostupný je také na Flathubu.
picogame (GitHub) je malý 2D herní engine pro mikrokontroléry jako RP2040, čip uvnitř kapesní konzole Picopad. Hru napíšeš v Pythonu a vyzkoušíš ji v prohlížeči nebo desktopovém simulátoru. Až bude hotová, zkopíruješ ji na podporovanou desku. Na začátku nepotřebuješ C, sestavení firmwaru ani hardware.
Multiplatformní prohlížeč elektronických knih KOReader byl vydán ve verzi 2026.07 "Sailing Walrus". U PDF souborů s SMask lze vyčistit pozadí. Přibyla podpora Kobo v5 nebo základní podpora OPDS 2.0.
Společnost Valve sponzoruje a společnost Collabora portuje RADV (open source Vulkan ovladač pro AMD GPU z projektu Mesa) na Windows.
Starling (GitHub) je desktopové prostředí vytvořeno umělou inteligencí (s dohledem jednoho vývojáře během šesti měsíců).
Dne 30. června 2026 byla završena fyzická realizace projektu Czech National Quantum Communication Infrastructure (CZQCI), tedy České národní kvantové komunikační infrastruktury. Projekt byl realizován od 1. března 2023 a financován z Národního plánu obnovy částkou 121,6 milionu Kč. Cílem podpořeného projektu bylo vybudovat základy národní kvantové komunikační infrastruktury a ověřit možnosti jejího praktického využití. Mezi
… více »Město Šumperk se stalo terčem kybernetického útoku, chod úřadu je omezen. Zjišťuje se, jestli unikla nějaká data. Cílem hackerů byla městská datová síť. První útoky zaznamenali odborníci na informační technologie již v pondělí večer, závady se ale plně projevily až dnes ráno. Město událost nahlásilo Národnímu úřadu pro kybernetickou a informační bezpečnost (NUKIB).
JavaScript si za dobu své existence nevydobyl zrovna nejlepší pověst a jen pozvolna se začíná prosazovat jako plnohodnotný samostatný programovací jazyk (viz projekty jako node.js). Existuje však celá řada důvodů, proč JavaScript začít brát vážně.
Při pohledu na výsledky syntetických benchmarků (http://shootout.alioth.debian.org/u32/which-language-is-best.php#about) je zjevné, že válka mezi výrobci prohlížečů o co nejrychlejší engine pro JavaScript přináší konkrétní ovoce. Už dnes jsou implementace JavaScriptu rychlejší než u většiny nejpoužívanějších dynamicky typovaných jazyků a pokud se najdou ještě nějaké rezervy, což je při míře prostředků a energie, která se do tohoto výzkumu vynakládá, více než pravděpodobné, může se JavaScript začít používat i v oblastech, kde by to dříve bylo nemyslitelné.
Už dnes existuje poměrně elegantní a jednoduchý způsob, jak s pomocí JavaScriptu docela snadno a rychle vytvořit multiplatformní desktopovou aplikaci s konvenčním vzhledem a chováním a přitom se nevzdát vymožeností, které přináší webový prohlížeč. Konkrétně například nechat zobrazit část aplikace pomocí HTML kódu či třeba pomocí SVG. Tou možností je použití XULRunneru od Mozilly, který v sobě integruje Gecko.
Taková jednoduchá aplikace vypadá tak, že si vytvoříte základní adresářovou strukturu s metadaty, do ní vložte popis GUI pomocí značkovacího jazyka XUL a okořeníte nějakým tím JavaScriptem (https://developer.mozilla.org/en/getting_started_with_xulrunner). V kombinaci například s CouchDB, u které se díky použítí JSONu pro komunikaci s databází v podstatě můžete vyhnout nepříjemnostem s objektově-relačním mapováním, to tvoří lákavý základ pro řadu aplikací.
Na rozdíl od běžných webových aplikací má lokální XULRunnerovská JavaScriptová aplikace řadu možností a bezpečnostních privilegií navíc. Může pomocí Ajaxu komunikovat s webovými servery v jiných doménách, spouštět lokální procesy (pomocí nsiProcess), pracovat s lokálními soubory, používat nativní souborové dialogy, otevírat nová samostatná okna, má bohatší možnosti v používání klávesových zkratek atd. Navíc XULRunner má v sobě integrován přímo Firefox, což znamená, že se můžete obejít bez jeho distribuce s prográmkem.
Tahle varianta mě zaujala a řekl jsem si, že by nebylo špatné se zamyslet nad možností vytvořit si nějaký elegantní framework, který by tvorbu takových jednohubek usnadnil. Začal jsem tedy zvažovat, jaká architektura by se pro něj hodila. Hlavní potíž spočívá v tom, že stejně jako u webového prohlížeče je JavaScript zpracováván v jednom vlákně. To přijímá události od uživatele (např. stisknutí tlačítka), zpracuje kód, který je jim přidělen a poslouchá dále. Krom možnosti vyhodnotit daný kód po určitém čase (či asynchronního přijetí HTTP požadavku) programátor žádné možnosti nemá.
To ale bohužel nestačí. Představte si situaci, kdy potřebujete vytvořit nějakého průvodce (wizzard), nějakou posloupnost formulářů. Teď trochu neférově pominame fakt, že XUL takovou komponentu definuje - zde mi jde o obecný problém.
V elegantním frameworku byste předpokládali, že při otevření průvodce by byla definována metoda vypadající nějak takto:
show(page1); show(page2); show(page3);
Jenže to by předpokládalo, že metoda show() zobrazí nový formulář, ukončí provádění aktuálního kontextu, spustí nové přijímání a zpracovávání událostí a v případě, že jedna z nich by byla stisknutí tlačítka “next” na formuláři, předala by řízení zpět do této metody na místo, kde naposledy přestala.
To by šlo provést tak, že při zavolání metody show() se zobrazí nový formulář, vytvoří se kontinuace a pomocí vyvolání výjimky se ukončí vykonávání tohoto úkolu a vlákno JavaScriptu přejde opět do režimu přijímání událostí. Při stisknutí tlačítka “next” by se obnovil aktuální kontext z uložené kontinuace a pokračuje se vesele dalším show().
Bylo by to hezké, ale bohužel JavaScript kontinuace nemá a asi mít jen tak nebude. Přesněji řečeno, Rhino kontinuace má, jenže to je pro XULRunner aplikace jen pramalá útěcha. A autoři V8 o implementaci kontinuací vůbec neuvažují.
Bohužel i ostatní možnosti, jak tento problém nějak vyřešit, Gecko úspěšně sabotuje. JavaScript není dostatečně reflektivní, aby měl tak bohatý přístup ke stacku, aby dokázal informace aktuálního stavu stacku uložit a zpětně rekonstruovat. I když se vzdáme přímo myšlenky použít kontinuace, které jsou pro tento případ stejně asi zbytečně komplexní, JavaScript nenabízí použitelné řešení. Nemá výjimky s návratem na místo vyvolání, nemá žádné uspání procesu atd. Mozilla sice umožňuje vytvářet nová vlákna (Worker), ale ta jsou silně oddělena a pro tento účel je nejde bohužel použít.
Jediná zdánlivě použitelná varianta je použít uzávěr nad zbytkem metody po každém show, bohužel to selhává především na faktu, že takový uzávěr může ovlivnit pouze aktuální kontext a kontexty se tedy nesmí zanořovat.
Bohužel nezbývá tedy než takovou aplikaci nechat plně řidit událostmi prostřednictvím nějakého MVC/MVP vzoru, kde se tok řízení aplikace ztrácí.
Krom problémů s absencí kontinuací je ještě spousta jiných věcí, co by se daly JavaScriptu vytknout a většina z nich souvisí s tím, že pro tento jazyk byla zvolena C-like syntaxe. Oddělení výrazů od příkazů (a s tím např. související dvojí možnost zapsání alternativy), indexování od nuly u jazyka bez ukazatelů, naprosto příšerný základní cyklus for, poměrně ukecaný zápis uzávěrů atd.
Navíc JavaScript trpí tím, že si v něm konkuruje několik přístupů, jak např. nahradit třídy, přičemž žádná z hlavních takto vzniklých knihoven není natolik obecná, že by předpokládala spouštění JavaScriptu bez vazby na prohlížeč. Samozřejmě nelze tvrdit, že taková konkurence je úplně špatná, ale život to komplikuje.
Přes výhrady, které bych k JavaScriptu měl, nemyslím, že je to jazyk zavrženihodný. Ale i věkem je to puberťák kterému by neuškodilo dospět.
Tiskni
Sdílej:
Ja som kedysi na Javascript dosť nadával pretože som nerozumel ECMA-Script-u. S ECMA-Scriptom robím momentálne takmer denne a po tom, čo som začal chápať jeho filozofii sa mi zdá aj celkom fajn.
Ćo sa týka samotného webového javascriptu ten pravdu povediac moc nemusím. Podľa mňa samotné prehliadače mali mať od začiatku niečo ako JS framework namiesto súčasných trápnych volaní ako insertHTML. V čistom JS bez frameworkov som istého času písal (a aj napísal) funkčného jabber klienta (ktorý bežal v Opere, IE >= 6, Gecko, Webkit, Konqueror >= 3.5). Ani si neviete predstaviť množstvo bugov v implementácii DOM.
Ako užívateľ JS nemám rád, často surfujem z mobilu a 10s záseky na weboch používajúcich JS frameworky sa mi nepáčia. Hlavne keď väčšina vecí by sa dala poriešiť cez CSS. Zvyšok (dynamické prvky) cez JS, ale chcelo by to pridať do browserov niečo ako framework, aby nebolo potrebné linkovať obrovské na parsovanie náročné hrúzy.
Podľa mňa samotné prehliadače mali mať od začiatku niečo ako JS frameworkIMHO by prohlížeče dneska měly povinně obsahovat posledních pár verzí jQuery, nějaký meta tag pro zvolení verze a nějaký fallback. Ale už za tuhle myšlenku mne místní XHTMListi nejspíš sežerou
Ja som kedysi na Javascript dosť nadával pretože som nerozumel ECMA-Script-u.Tak ono je to de facto to samý, že :). Ale teď, když už to znáš, tak je zbytečné ti připomínat rozlišení jazyka a objektového modelu.
a nemal som cas sa rozpisovatTak snad příště :).
page1.accepted.connect(page2.exec); page2.accepted.connect(page3.exec); page3.accepted.connect(wizzard.mameHotovo); page1.exec();Co víc si přát?