En intressant sak i artikeln är prepare-funktionen. Detta påminner om semantisk model i DSL (Fowler), där man inte kodar i text som parsars, men mot en model. Fördelen med att ha en model istället för data, är att man kan ha andra prepare-funktioner mot samma model, t.ex. en som genererar PDF.
ah, interessant!
det viktigste er kanskje ikke at GUI-et har null kjennskap til domenet - men at domenet har null kjennskap til GUI-et!
holder på og implementere denne arkitekturen i prosjektet mitt nå
er mest usikker på det med navn, enn så lenge har GUI-et mitt navn fra domenet. Men strukturen på dataene er totalt annerledes i domene og GUI
Teknisk sett är det prepare-funktionen som har kunskap till bägge sidor, men vi (programmerare) kan ju inte slänga vad som helst på domenet och GUIt, och hoppas att detta bara kommer att fungera, så vi har också den kunskapen.
Ref den bloggen og generiske komponenter. Er det noen som har erfaringer med https://github.com/day8/re-com (https://re-com.day8.com.au/#/introduction)? Er litt skeptisk til lock-in-effekten (utvalget tilgjengelige komponenter + Bootstrap), men når det kommer ut av samme sfære som re-frame, så heller jeg mot å gi det en sjanse fremfor å fortsette å lage generiske komponenter fra scratch.
Mener å huske at maintaineren av re-frame sa noe om dette på the clojurescript podcast (men husker ikke hva han sa 🙂
@slipset something something balsansering av parenteser
meep, jeg kan vel ikke noe for at slack velger å rendre :)
som en emojii?
Hørte på den. Om jeg ikke husker feil så brukte han det vel mest til bedriftsinterne GUIs der man fyller inn diverse info. Da er kanskje ikke fokus at det skal se så sexy ut :) Jeg får vel bare teste litt i et eget prosjekt og se om det gir mersmak.
I det minste er de veldig gode å bruke som referanse for best practice på komponenter. Tror flere av komponentene inneholder eksempler for å løse text input uten cursor-hopping og slikt
Mener å huske at han finnen sa på clojurescript podcast at det var en liten mengde hack som måtte til for å fikse hopping i text-input…
Ja, pga. async rendering
Når er det man typisk støter på cursor-hopping? Er det f.eks. når man forsøker å “pretty printe” input ala kredittkortnr med mellomrom?
Sikkert da også, men enkleste repro er vel hvis brukeren piler tilbake, og prøver å skrive i midten av en tekst
skjer når som helst når du ikke synkront oppdaterer verdien til et input-element
eller, skjer vel når som helst når du med JS setter verdien til et input-element?
asykront eller ikke
sånn fra et rent DOM-api-perspektiv
Mulig du vet mere om dette, men jeg tror det er litt spesielt hvis man har en "Controlled Component": https://reactjs.org/docs/forms.html#controlled-components
Min context er at jeg sitter og hamrer løs på et input felt i egen re-frame app, uten å klare å trigge noe som gir dårlig sluttbrukeropplevelse. Jeg filtrerer der bort ugyldig input, men forsøker ikke å pretty printe.
Og det får man ikke via reagent, AFAIK
Har jo selv opplevd dette i diverse tjenster og det er jo helt håpløst.
det React gjør er vel å ikke sette value hvis man synkront i en onChange setter value til det samme som den allerede er - for å unngå at cursoren hopper
men gjør man noe asynkront mister react muligheten til å tracke det skikkelig
Vel hvis du lager komponenten via Reagent/re-frame har de jo den workaround. I dag tror jeg man bare opplever det hvis man bruker en js component som man ikke kan legge den hacken til.
Ja
Er lett å ta for gitt alt man slipper å frustrere seg over når man lever i Clojure(script) land 🙂
Noe helt annet. Får dere brukt Datomic på en fornuftig måte uten å måtte betale lisens? Datomic gir så fullstendig mening når jeg leser doc, ser videoer osv, men jeg sitter igjen med følelsen av at man enten må betale, gå for betalingsutsettelse (starter lisens) eller bruke extra-light versjonen (in memory). Jeg skulle ideelt sett hatt en on-prem versjon som krever betaling ved gitte backends, redundans, scale eller annet som kommer etterhvert, men som lar meg bruke alle konseptene fra dag én for å kunne introdusere teknologien og vise at den har noe for seg, før man så evt betaler. Er jeg helt på viddene, eller gir dette et greit bilde av situasjonen (gitt at de ikke har oppdatert lisensbetingelsene i det siste)?
har laget ett system som fortsatt kjører på free 🙂
en ulempe nå er at pro har flere features
husker ikke på stående fot hva det er, men free virker ikke å bli oppdatert lengere
Oh, det gjør det jo enda verre.
datomic sin lisensmodell har blitt ganske grei nå da, du betaler vel bare "per system" eller noe sånt, ikke per CPU/instans
og så har de jo starter edition som er gratis for alltid, men bare får oppdateringer det første året
Mulig jeg må oppdatere meg på lisensene.
de gjorde en større revamp for noen år siden 🙂
Da er jeg nok oppdatert 🙂
Problemet slik jeg ser det er at “Starter” ikke er “no cost”.
Du investerer nå, men utsetter betalingsforpliktelsene et år
ish, det er jo "bare" å la være å oppdatere til siste versjon
og så kan du betale 50k når du må oppdatere
kommer veldig an på prosjektet selvfølgelig, om 50k er en stor eller liten kostnad
Tenker at jeg i hvert fall må forankre det med sjefen før jeg går for den løsningen 🙂
Har du forresten noen gang “manipulert” tiden (i mangel av et bedre ord) i Datomic slik at “T” ikke er tiden man la inn data i Datomic, men timestamp fra en logfil? Datomic sine features må kunne løse enkelte problemer veldig elegant om man får til det på en god måte.
nei, domenetid er ikke en greie med datomic desverre
utover at du kan gjøre backup/restore osv, altså lage en helt ny database
dvs, du kan sette T selv, men den må være større enn forrige tx
så du kan ikke sette inn "gammel" data hvis du får noe fra en sensor med litt latency elns
Är väl en av orsakerna till att crux blev skrivet
@mokr Har använt re-com till tidigare projekt. Funkar OK, men jag är inte så förtjust i att de inte har en map för properties, utan istället dynamiskt sätter samman det. Det gör det svårare att sätta ihop vad du vill ha programmatiskt när du behöver det. Utöver det så är det lite begränsat med komponenter
Just nu så använder vi https://ant.design vilket funkar någorlunda
Största problemet där att det är svårt att ändra på stylingen då de mixar styling med javascript i en salig soppa 😞
ref Cursor hopping. Stötte på problemet när jag skrev https://github.com/emil0r/ez-wire
Säg att du har en komponent som är en textarea, och du uppdaterar mitt i. Då hoppar cursorn till, vilket är extremt irriterande om du sitter och skriver på en längre mening
Sättet du kan ungå det är via att använda :default-value som grundläggande värde
Funkar rätt bra, till dess att du behöver tvinga en revert till ursprungligt state. Tittade på problemet, men kom inte fram till en lösning pga tidsbrist
Tror jag kommer behöva göra en helt ny form för att tvinga en re-render som börjar ifrån origin state
Cursor hopping är också ett problem om du använder react komponenter
@augustl Jeg var ikke spesifikk nok. Jeg tenkte på scenario der man har en tom database og populerer den med kronologiske loggdata i en gjennomkjøring. Jeg forstår det som at Datomic kan takle. Loggene jeg forholder meg til er typisk sprett på flere noder, så jeg må i tilfelle flette de før innlegging. @emil0r Takk, både begrensing mht antall komponenter og args (map destructuring) fremfor faktisk map i input plaget meg litt. Han skrev vel litt om hvorfor det siste ble valgt, uten at jeg husker hvorfor eller om jeg i det hele tatt leste den delen. Jeg tenker det er lett for at det blir en salig suppe når man prøver å lage generiske komponenter som skal passe for mange. Spesielt når det skal styles mye eller bygge på f.eks. Bootstrap. For meg synes det som en suksessfaktor at det er lett å definere overrides eller tillegg. Eksempelvis legge til eksta klasser eller overstyre de helt og tilsvarende for tooltips og annet.
Hans Hübner hadde en bra talk (kritisk) on Datomic for noen år siden. https://youtu.be/0y6QK813new
@slipset Takk, seiler fort opp som dagen fredagsunderholding. 🙂
Nå er det litt for lenge siden jeg leste Datomic docs og kjapp googling gav ikke umiddelbart svaret. Det jeg håper å få “gratis” fra Datomic er svaret på slikt som “hva var min favorittrett 2020.09.11 12:00:02" uten å måtte finne siste endring av attributtet før det tidspunktet. Verdiene attributtet har har hatt i et tidsrom er også av interesse.
Så er jeg usikker på om jeg er avhengig av tx-tid eller domene-tid for å kunne svare på det
det du beskriver høres ut som database-tid, ja
Datomic kan svare på "når sa du X til databasen"
og "i hvilken rekkefølge skjedde ting i databasen"
er jo et klassisk "time series"-problem dette her. Skulle Datomic støttet noe annet, måtte man ha bygget databasen på nytt fra punktet du ønsker å sette inn, ingen vei utenom
nå husker jeg ikke hva jeg skjønte var ulempen med Crux.... hadde en a-ha-opplevelse en gang som jeg har glemt
ah, nemlig. Crux er ikke relasjonell 🙂
eller, relasjonell er feil ord, for datomic er vel ikke relasjonell.. Men, crux har ikke noe for "ting som peker på annen ting"
Dokument db
det må du fikse sjæl eventuelt (integritet, ...)
Den har inte schema
nei, nemlig
Ibland vad man vill ha, ofta inte
Graph db med. Vilket är intressent
hmm, var ikke klar over det - så du har muligheten for "ting som peker på ting"?
Du kan ha refs till ett annat dokument, och det kan sökas i en oändlig kedja ner som en graf
ah, nemlig, men du kan ikke referere til verdier i et dokument?
Men du har inte relations som exempelvis neo4j
I see
Jo. Värden, men ett värde kan också vara en ref
Så du kan köra en query som letar sig neråt i grafen av dokument
ah, så da er det noe "peker-greier" ihvertfall
men du kan sikkert peke på ting som ikke finnes og sånn, da?
Hmmm... Lite osäker på vad du menar med pekar på
i Datomic så kan en fact peke på en annen fact - og du får ikke lov til å peke på en fact som ikke finnes
og fjerner du den ene, fjerner du den andre
Tror nog inte det är så strikt
Crux is a document-oriented database that makes your data available for graph-like Datalog queries without the need for an upfront schema.
Från vad juxt skriver
Så I huvudsak dokument
ja, ikke sant
du gjør vel typisk en "PUT" på hele dokumentet?