Portál AbcLinuxu, 1. května 2025 05:47
Vlákno bylo přesunuto do samostatné diskuse.
To ja s tim nemam zadny problem, fakt nechapu co je smyslem toho povidani. Jde o nejaky novy , prevratny zpusob, jak navrhovat, vyrabet GUI?Ne. Smyslem je odpovědět na otázku položenou v diskuzi, na kterou vede odkaz z perexu. To že se tak dá dělat GUI je vedlejší efekt kombinace reflexe a prototype-based jazyka. Jinak Self není moderní, tyhle schopnosti má někdy od roku 1990 +- 3 roky.
Tak zajímavé to je, ale takové akademické.+1, vypadá to jako takové GUI pískoviště. Mohlo by to být dobrý na prototypování, pokud by se to dalo nějak vyexportovat do něčeho nativního / nečeho co není jako z jiného světa
Hmm, čo HTML5 aplikácie (electron)? Nie je to síce úplne to isté, ale úprava správania aplikácie počas behu je väčšinou možná.
Hmm, čo HTML5 aplikácie (electron)? Nie je to síce úplne to isté, ale úprava správania aplikácie počas behu je väčšinou možná.Já mám teda zkušenost jen s třemi aplikacemi tohohle druhu (Spotify klient pro linux, Visual studio code a Slack klient), ale nikde tam nemáš přístup k interním komponentám, ani nemůžeš změnit jejich reprezentaci perzistentně. Teoreticky to možné je, ale chybí nástroj, který by ti dovolil se dostat do zdrojáku za běhu (třeba JS konzole).
Ja som pár tých aplikácií skúšal a bežne som sa dostal do web inspectora s možnosťou meniť komponenty. JS konzola tam bola tiež. Perzistencia tam samozrejme chýba, ale ak hovoríme o reflexii nie je to až tak vzdialené od selfu.
Vždy zabralo ctrl + shift + I, ale neskúšal som to na väčších komerčných aplikáciách ako spotify, môžu to mať zablokované.
Teoreticky má v8 asi podobné možnosti keďže debugger je napísaný v javascripte. Nenašiel som však žiadne verejné API ktorým by sa dalo hrabať až na obsah jednotlivých uzáverov.
Tohle je na clanek!Jo, já vím. Původně jsem nad tím uvažoval, ale vadí mi ten proces kolem článků, kdy musíš HTML poslat někam do háje, pak to někdo upraví a publikuje tak za týden / dva rozřezané do několika dílů. Taky obrázky jsou tam vložené jinak a nemám možnost to potom upravovat. A to všechno, abych za to dostal tisícovku, nebo míň.
Doufám, že se nebude jednat jen o věc pro vývojáře a dokáži si představit systém, kde by uvedená funkcionalita byla v každé části grafického rozhraní a každé aplikaci.Čistě pro zajímavost: Změny v kódu se ukládají/by se měly ukládat do běžící instance či do systémového exáče? Když bude chyba v kódu tak se aplikace rovnou vrátí do posledního funkčního stavu nebo u se rovnou začne načítat debuger? Nápad zajímavý, občas dostat nějakou aplikaci s malou změnou do systému (stažení zdrojáků a všech potřebných závislostí, kompilace, instalace) je pomalu delší vlastní změna, ale zas tak úplně růžově bych to neviděl. Libovolné IDE je poměrně náročné na volné místo, paměť nehledě na to že častokrát jsem rád že můžu balík smazat a znovu rozbalit z taru…
Pak by již bylo možné je například uložit na disk a verzovat pomocí gitu, či je distribuovat dalším uživatelům Selfu.Na disku to pak vypadá jak? Je to čitelný text nebo se verzují bloby? Je to lepší než třeba GUI naklikané nějakým návrhářem typu Netbeans, Qt Creator nebo Glade? A co slučování dvou verzí (merge)? Dělat tohle s textovým zdrojákem je někdy dost opruz, ale naštěstí té informace bývá málo a je v celkem čistém tvaru (ručně psaný kód). Ale slučovat dva obrazy nebo prototypy? Jde to? Svým způsobem to může být snazší, protože nástroj může rozumět obsahu (nejsou to pro něj jen řádky, kterým nerozumí), ale té informace tam bude asi víc, než kdyby to psal ručně člověk. Existuje nějaký třícestný diff/merge pracující s objekty? P.S. trochu mi to připomíná web – např. ve Firefoxu můžu označit kus stránky, kliknout pravým tlačítkem a dát „Zobrazit zdrojový kód výběru“ – výsledek si vykopíruji do své stránky/aplikace a takto si ji složím z kousků webu, které jsem viděl jinde. Ještě by to mohlo automaticky vykopírovat obrázky, styly, skripty… současný Firefox vykopíruje jen HTML. Ale vedlo by to ke kvalitnějším programům nebo efektivnější práci?
Ale k čemu je to dobré?
Používal jsi někdy (trochu seriózně) Emacs včetně Elispu?
Ale k čemu je to dobré? Dokáži si představit, že bych si chtěl třeba upravit aplikaci tak, abych mohl nějaké akce vyvolat z příkazové řádky (v aplikaci by to „stisklo“ tlačítko) nebo bych si doplnil obsluhu nějakých událostí (např. přijde e-mail → rozbliká se mi LEDka), i když to aplikace/framework původně neumožňovala. Jenže pak se na to podívám z pohledu API a nedává mi to smysl. Buď budeme to uspořádání/strukturu GUI komponent považovat za veřejné rozhraní, a pak to zásadně omezuje autory aplikace v jejím vnitřním přepisováním a refaktoringu (něco změní a všem uživatelům rozbijí to, co si na aplikaci napojili) nebo to za veřejné API nepovažujeme, a pak je to dobré leda na jednorázové hacky, u kterých jsme smířeni s tím, že v příští verzi nejspíš přestanou fungovat.Definuj „to“, popisoval jsem víc konkrétních věcí. Třeba v Selfu nejde jen o úpravy, jde i o možnost zkoumat. Aplikace pro tebe není binární blob, ale kolekce objektů. Ten rozdíl je asi jako mezi 3D hrami, kde je všechno složené z textůr a voxelovými hrami, kde je všechno složené z malých kostiček. Rozdíl je, že pod texturu se nedostaneš, ale kostičky můžeš rozebírat a skládat různě. Co se týče toho API, tak žádné nepotřebuješ, protože se prostě dostaneš až přímo dovnitř do objektu, nad kterým bys v jiných jazycích musel stavět to API. Samotný objekt držící data je API.
A jak je to s aktualizacemi? Vydám opravu a pokud máme domluvené veřejné API, tak se na novou verzi můžou ostatní v pohodě napojit. Ale jak se napojí na nový prototyp nebo image?Zde to bude pravda dělat problémy, ale asi podobné, jako kdyby autoři změnili API. Prostě to budeš muset s novou verzí upravit, nebo zůstat u staré. Neříkám, že je to dokonalé, jen je imho (minimálně pro mě) lepší takovou možnost mít, než ne.
Na disku to pak vypadá jak? Je to čitelný text nebo se verzují bloby? Je to lepší než třeba GUI naklikané nějakým návrhářem typu Netbeans, Qt Creator nebo Glade?Je to trochu špatně čitelný text. Asi takhle (můj http klient pro Self). Problém je, že to není serializované jako kdybys psal zdroják jako člověk, ale jako jednotlivé části pro každý slot (property). Tzn že když má objekt 10 slotů, tak je tam prostě 10x kód, který říká „na tohle místo dej tenhle evaluovaný zdroják jako metodu / data“. Nevím, proč je to takhle pojaté, když by šlo i přímo definovat objekt vcelku a zdroják by pak byl čitelnější, ale asi to bylo takhle jednodušší na implementaci.
A co slučování dvou verzí (merge)? Dělat tohle s textovým zdrojákem je někdy dost opruz, ale naštěstí té informace bývá málo a je v celkem čistém tvaru (ručně psaný kód). Ale slučovat dva obrazy nebo prototypy? Jde to? Svým způsobem to může být snazší, protože nástroj může rozumět obsahu (nejsou to pro něj jen řádky, kterým nerozumí), ale té informace tam bude asi víc, než kdyby to psal ručně člověk. Existuje nějaký třícestný diff/merge pracující s objekty?Jde to dělat na úrovni zdrojáku, principielně i na úrovni objektů (smalltalk to tak tuším řeší), v Selfu to ale nikdo neimplementoval. Ta komunita kolem něj je docela minimální a hodně akademická.
P.S. trochu mi to připomíná web – např. ve Firefoxu můžu označit kus stránky, kliknout pravým tlačítkem a dát „Zobrazit zdrojový kód výběru“ – výsledek si vykopíruji do své stránky/aplikace a takto si ji složím z kousků webu, které jsem viděl jinde. Ještě by to mohlo automaticky vykopírovat obrázky, styly, skripty… současný Firefox vykopíruje jen HTML. Ale vedlo by to ke kvalitnějším programům nebo efektivnější práci?Je to trochu podobné, ale spíš než tímhle v tom, že můžeš prostě pustit JS konzoli a pracovat s DOMem a HTML a JS kódem z té konzole. Což je takový ekvivalent debuggeru, kdežto Self je celé prostředí, ne jen ekvivalent debuggeru. BTW: Javascript byl přímo inspirovaný Selfem. Jen se to moc nepovedlo, protože jeho objektový model je nedotažená zprasenina, kde je úplně brutálně vidět, že autor převzal jen půlku toho modelu. Časem chci o Selfu rozepsat seriál, kde toho vysvětlím víc. Bude to ale trvat relativně dlouho (minimálně měsíce, možná roky).
Definuj „to“, popisoval jsem víc konkrétních věcí.Ta reflexe GUI, možnost vstoupit do programu, zkoumat jeho objekty, upravovat je…
Aplikace pro tebe není binární blob, ale kolekce objektů.Svobodný software pro mne není blob. Zrovna jak jsem psal včera o tom Glade, tak jsem si ho schválně pustil a chtěl v něm naklikat nějaký hello world formulář, ale nevěděl jsem, jak na to (tedy aby to fungovalo správně, např. že textové pole se roztahuje při roztahování okna, tlačítko vpravo zůstává pořád u pravého okraje okna atd.), ale podíval jsem se do nastavení Glade a zjistil, že tento formulář se chová přesně tak, jak chci. Sice v tu chvíli nemůžu kliknout myší a zkoumat běžící program – musím na to zdlouhavěji, opsat kus textu z formuláře, grepnout zdrojáky, zjistit, kde se používá a otevřít si ten soubor – ale jde to a není to nějaká zásadní překážka. Nicméně souhlasím, že by bylo fajn mít možnost pustit program třeba v nějakém ladícím režimu a pak mít možnost zkoumat prvky jeho GUI.
Zde to bude pravda dělat problémy, ale asi podobné, jako kdyby autoři změnili API. Prostě to budeš muset s novou verzí upravit, nebo zůstat u staré. Neříkám, že je to dokonalé, jen je imho (minimálně pro mě) lepší takovou možnost mít, než ne.Ano, je fajn tu možnost mít, ale přemýšlel jsem nad praktickým využitím. To hledání inspirace a opisování z jiných programů je jedna věc, to se hodí. Pak by se mi líbilo mít možnost ovlivnit chování jiných programů, např. si tam jednoduše dopsat nějakou funkci nebo si program naparametrizovat. Např. mi nevyhovuje pořadí tlačítek, chci nějaké vyhodit a jiné přidat… a program to sám o sobě nepodporuje → udělám to přes reflexi nějakým skriptem, kterým si vždy patchnu program při jeho spuštění. To by bylo zajímavé, jenže nepříjemné na tom je, že v příští verzi programu by to dost možná přestalo fungovat. Z hlediska skládání programů a interakce mezi nimi je jednoznačně lepší mít jasně deklarované veřejné API, kde se drží zpětná kompatibilita, a pak interní kód, kde má autor programu volnou ruku a může si tam řádit jak chce, aniž by měl výčitky, že někomu něco rozbije.
Z hlediska skládání programů a interakce mezi nimi je jednoznačně lepší mít jasně deklarované veřejné API, kde se drží zpětná kompatibilita, a pak interní kód, kde má autor programu volnou ruku a může si tam řádit jak chce, aniž by měl výčitky, že někomu něco rozbije.Lepší asi jo, ale v případě desktopových aplikací ho nemáš skoro nikdy a i u webů je to spíš výjimka, než pravidlo.
V případě webů je to v první řadě otázka nikoli technologie, ale zda na tom má provozovatel zájem – pokud ten zájem je, tak i s poměrně primitivními technologiemi můžeš udělat dobře použitelné veřejné API.To ano. A většina webů zájem nemá (třeba abclinuxu).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.