clojure-czech 2016-04-18

dival jsem se na zacatek ale dlouho jsem nevydrzel; Stuart miva dlouhe prednasky o malych knihovnach

mluvi tam o necem jinem nez component pripadne tools.namespace?

o jejich kombinaci simple_smile

jak je používat dohromady, aby byla lepší dev experience

component knihovna je fajn, dava to smysl, bohuzel prepsat existujici kod do tohoto modelu je dost pruda, clovek musi propagovat kontext parametr i do tech nejmensich funkci, pokud si chteji sahnout na ten stav

a kdyz ma clovek knihovny, ktere ho nerespektuji, tak je to taky tezky

kdykoliv nekdo udela (def my-state) tak je to game over

což by slušný knihovny dělat neměly

pak je to framework simple_smile

no, je to tezky, protoze (def state) je defaultni vec, ktera kazdeho napadne

bylo by fajn mit moznost “instancovat” cele namespaces na urovni jazyka, takze clovek takto napsany kod porad muze "rozinstancovat"

ja na to narazil v re-frame, bohuzel autori re-frame tomu neprikladaji moc velkou prioritu

to jen potvrzuje to, co si o re-frame myslím simple_smile

ale neni v mych silach ten fork dlouhodobe udrzovat

a clovek by rekl, ze om, datomic & spol uz vsechny nalezite poucil a stav komponent se do promennych proste neuklada

je pravda, ze namapovani namespacu na mutabilni java(scriptove) objekty je dost nestastne

oni mají vlastní představu jak to dělat líp...

podobny problem jsem uz 2x resil; component je pekny, ale nevyhoda je, ze na komponentach pouziva protokoly

a nevyhoda protokolu je, ze nejdou komponovat a jsou vlastne take globalni stav

protokol je definovany tride, ktera je soucasti stavu namespace

(podobny problem je pouziti multimetod v om/nextu)

@skardan: takze jak bys to resil? jako obycejne mapy, ktere maji domluvene klice?

@darwin mapa, ktera nesla jak stav tak middleware, ktery nad ni operoval

ma to velke vyhody (napr pro ladeni, testovani atd)

tak nevyhody (domluvene klice)

@darwin: ten game over jsi myslel pro cokoli co má (def state) nebo pro použití componemt?

pro pouziti component

@darwin vlastne tou mapou, klicemi a funkcemi jsme nahradili namespacy a multimetody/protokoly (udelali je spravne - tj immutable a composable)

@pepe ve vlastni aplikaci to klidne delat muzes (protoze vis, ze ta vec bude singleton), ale jako autor knihovny omezis pouziti v pripadech kdy ta vec singleton neni

napriklad v re-frame by se hodilo mit vice re-frame instanci v jednom javscript contextu

@darwin zkousel jsem to napr na om/next a tam tenhle pristup zapadnul jako ruka do rukavu (lepsi nez multimetody, ktere pouziva v prikladech david nolen)

@skardan: chapu, ze mapama muzes celou vec nahradit - problem pak ale muze byt reloadovatelnost kodu pro interaktvni development, protoze vsechny funkce pak zapeces do map, ktere se stanou stavem tve aplikace

@darwin: pro vyvoj / neprodukcni prostredi tam muzes davat #'var

@darwin: já si to právě pamatuji, jak si to řešil ma GH a i když chápu (zvláště pak v kontextu věci jak je plastic) to nutkání, nějak mi stále nedochází jaké výhody by to pro mě jako tvůrce malých až středních (jednotky KLoc) app mělo.

Na které podle mě reframe míří 😉. A nechci to nijak bagatelizovat, tvůj názor má u mne respekt. Jen víš jak: není zkušenosti bez zkušenosti.

@pepe: jeden relevantni usecase je testovani, treba devcards, kde chces vytvorit spoustu instanci svoji aplikace v ruznych stavech a videt je vsechny naraz

@darwin to je úplná pravda, o tom se ostatně sem tam v #re-frame mluví.

muzes to obejit vytvarenim iframu, ale to neni to prave orechove

jj, díky zase mám o čem přemýšlet 😉

kdyz budes psat knihovnu, tak nech uzivatele vytvaret a predavat jeji stav (kontext), a pak nad timto api, muzes udelat old-school zjednodusene rozhrani, ktere vytvori jeden globalni stav a preda ho do vsech techto funkci

99% lidi puzijou zjednodusene api, a to 1% si muze pouzit to slozitejsi primo, nebo si ho zabalit do component, nebo do cehokoliv jineho

rozhodne nenutit lidi pouzivat component, rika to i Sierra v jedne z jeho prednasek (to by bylo zase zbytecne omezeni)

@darwin: To 99/1% mi pripomnelo tenhle clanek (byt z F# sveta): http://tomasp.net/blog/2015/library-layers/index.html