clojure-norway

michele mendel 2020-09-11T09:26:03.020300Z

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.

2020-09-11T10:40:18.020500Z

ah, interessant!

2020-09-11T10:40:31.021Z

det viktigste er kanskje ikke at GUI-et har null kjennskap til domenet - men at domenet har null kjennskap til GUI-et!

2020-09-11T10:51:36.021400Z

holder på og implementere denne arkitekturen i prosjektet mitt nå

2020-09-11T10:51:53.021800Z

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

michele mendel 2020-09-11T11:33:31.024200Z

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.

mokr 2020-09-11T12:59:25.029Z

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.

slipset 2020-09-11T13:07:29.029800Z

Mener å huske at maintaineren av re-frame sa noe om dette på the clojurescript podcast (men husker ikke hva han sa 🙂

2020-09-11T13:15:50.033900Z

@slipset something something balsansering av parenteser

slipset 2020-09-11T13:16:24.034700Z

meep, jeg kan vel ikke noe for at slack velger å rendre :) som en emojii?

mokr 2020-09-11T13:16:25.034800Z

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.

ingesol 2020-09-11T14:14:55.035600Z

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

✔️ 1
slipset 2020-09-11T14:41:42.036400Z

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…

isak 2020-09-11T14:45:24.036700Z

Ja, pga. async rendering

mokr 2020-09-11T14:51:34.038700Z

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?

isak 2020-09-11T14:58:24.040Z

Sikkert da også, men enkleste repro er vel hvis brukeren piler tilbake, og prøver å skrive i midten av en tekst

2020-09-11T14:58:35.040300Z

skjer når som helst når du ikke synkront oppdaterer verdien til et input-element

2020-09-11T14:58:57.040800Z

eller, skjer vel når som helst når du med JS setter verdien til et input-element?

2020-09-11T14:59:08.041200Z

asykront eller ikke

2020-09-11T14:59:17.041600Z

sånn fra et rent DOM-api-perspektiv

isak 2020-09-11T15:01:17.043800Z

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

mokr 2020-09-11T15:01:33.044300Z

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.

isak 2020-09-11T15:01:44.044700Z

Og det får man ikke via reagent, AFAIK

mokr 2020-09-11T15:02:05.045300Z

Har jo selv opplevd dette i diverse tjenster og det er jo helt håpløst.

2020-09-11T15:02:20.045900Z

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

2020-09-11T15:02:46.046700Z

men gjør man noe asynkront mister react muligheten til å tracke det skikkelig

isak 2020-09-11T15:03:23.047400Z

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.

isak 2020-09-11T15:03:57.048Z

Ja

mokr 2020-09-11T15:05:29.049Z

Er lett å ta for gitt alt man slipper å frustrere seg over når man lever i Clojure(script) land 🙂

mokr 2020-09-11T15:20:06.056100Z

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)?

2020-09-11T15:22:54.056600Z

har laget ett system som fortsatt kjører på free 🙂

2020-09-11T15:22:59.056900Z

en ulempe nå er at pro har flere features

2020-09-11T15:23:10.057500Z

husker ikke på stående fot hva det er, men free virker ikke å bli oppdatert lengere

mokr 2020-09-11T15:23:26.058100Z

Oh, det gjør det jo enda verre.

2020-09-11T15:23:32.058300Z

datomic sin lisensmodell har blitt ganske grei nå da, du betaler vel bare "per system" eller noe sånt, ikke per CPU/instans

2020-09-11T15:24:05.058700Z

og så har de jo starter edition som er gratis for alltid, men bare får oppdateringer det første året

mokr 2020-09-11T15:24:31.059100Z

Mulig jeg må oppdatere meg på lisensene.

2020-09-11T15:24:38.059300Z

de gjorde en større revamp for noen år siden 🙂

mokr 2020-09-11T15:24:53.059600Z

Da er jeg nok oppdatert 🙂

2020-09-11T15:25:03.059800Z

mokr 2020-09-11T15:25:34.060600Z

Problemet slik jeg ser det er at “Starter” ikke er “no cost”.

mokr 2020-09-11T15:25:57.061100Z

Du investerer nå, men utsetter betalingsforpliktelsene et år

2020-09-11T15:26:09.061700Z

ish, det er jo "bare" å la være å oppdatere til siste versjon

2020-09-11T15:26:23.062200Z

og så kan du betale 50k når du oppdatere

2020-09-11T15:26:47.062700Z

kommer veldig an på prosjektet selvfølgelig, om 50k er en stor eller liten kostnad

mokr 2020-09-11T15:26:58.063Z

Tenker at jeg i hvert fall må forankre det med sjefen før jeg går for den løsningen 🙂

mokr 2020-09-11T15:29:54.065100Z

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.

2020-09-11T15:31:13.065400Z

nei, domenetid er ikke en greie med datomic desverre

2020-09-11T15:31:22.065700Z

utover at du kan gjøre backup/restore osv, altså lage en helt ny database

2020-09-11T15:31:43.066Z

dvs, du kan sette T selv, men den må være større enn forrige tx

2020-09-11T15:31:58.066400Z

så du kan ikke sette inn "gammel" data hvis du får noe fra en sensor med litt latency elns

emil0r 2020-09-11T15:45:35.067100Z

Är väl en av orsakerna till att crux blev skrivet

emil0r 2020-09-11T15:49:11.068900Z

@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

emil0r 2020-09-11T15:49:31.069400Z

Just nu så använder vi https://ant.design vilket funkar någorlunda

emil0r 2020-09-11T15:49:59.070300Z

Största problemet där att det är svårt att ändra på stylingen då de mixar styling med javascript i en salig soppa 😞

emil0r 2020-09-11T15:50:17.070600Z

ref Cursor hopping. Stötte på problemet när jag skrev https://github.com/emil0r/ez-wire

emil0r 2020-09-11T15:50:56.071500Z

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

emil0r 2020-09-11T15:51:27.072100Z

Sättet du kan ungå det är via att använda :default-value som grundläggande värde

emil0r 2020-09-11T15:52:09.073Z

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

emil0r 2020-09-11T15:52:48.073800Z

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

emil0r 2020-09-11T16:30:04.076100Z

Cursor hopping är också ett problem om du använder react komponenter

mokr 2020-09-11T16:41:13.085600Z

@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.

slipset 2020-09-11T16:41:19.085800Z

Hans Hübner hadde en bra talk (kritisk) on Datomic for noen år siden. https://youtu.be/0y6QK813new

mokr 2020-09-11T16:42:03.086400Z

@slipset Takk, seiler fort opp som dagen fredagsunderholding. 🙂

slipset 2020-09-11T16:44:37.088700Z

En ting (som @augustl og @emil0r ) har tatt opp m Datomic er at du får tx-time, men må selv modelere domene-tid.

mokr 2020-09-11T16:50:51.092400Z

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.

mokr 2020-09-11T16:51:50.092900Z

Så er jeg usikker på om jeg er avhengig av tx-tid eller domene-tid for å kunne svare på det

2020-09-11T17:46:14.093100Z

det du beskriver høres ut som database-tid, ja

2020-09-11T17:46:22.093600Z

Datomic kan svare på "når sa du X til databasen"

2020-09-11T17:46:32.093900Z

og "i hvilken rekkefølge skjedde ting i databasen"

2020-09-11T17:47:01.094500Z

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

2020-09-11T17:47:19.094900Z

nå husker jeg ikke hva jeg skjønte var ulempen med Crux.... hadde en a-ha-opplevelse en gang som jeg har glemt

2020-09-11T17:47:26.095100Z

ah, nemlig. Crux er ikke relasjonell 🙂

2020-09-11T17:47:47.095500Z

eller, relasjonell er feil ord, for datomic er vel ikke relasjonell.. Men, crux har ikke noe for "ting som peker på annen ting"

😱 1
emil0r 2020-09-11T17:47:54.095800Z

Dokument db

2020-09-11T17:47:54.096Z

det må du fikse sjæl eventuelt (integritet, ...)

emil0r 2020-09-11T17:48:15.096400Z

Den har inte schema

2020-09-11T17:48:19.096600Z

nei, nemlig

emil0r 2020-09-11T17:48:42.097Z

Ibland vad man vill ha, ofta inte

emil0r 2020-09-11T17:49:05.097600Z

Graph db med. Vilket är intressent

2020-09-11T17:51:02.098Z

hmm, var ikke klar over det - så du har muligheten for "ting som peker på ting"?

emil0r 2020-09-11T17:52:23.099800Z

Du kan ha refs till ett annat dokument, och det kan sökas i en oändlig kedja ner som en graf

2020-09-11T17:52:36.100500Z

ah, nemlig, men du kan ikke referere til verdier i et dokument?

emil0r 2020-09-11T17:52:51.101200Z

Men du har inte relations som exempelvis neo4j

2020-09-11T17:53:01.101400Z

I see

emil0r 2020-09-11T17:53:27.102200Z

Jo. Värden, men ett värde kan också vara en ref

emil0r 2020-09-11T17:54:11.103400Z

Så du kan köra en query som letar sig neråt i grafen av dokument

2020-09-11T17:54:23.104100Z

ah, så da er det noe "peker-greier" ihvertfall

2020-09-11T17:54:32.104400Z

men du kan sikkert peke på ting som ikke finnes og sånn, da?

emil0r 2020-09-11T17:55:05.105100Z

Hmmm... Lite osäker på vad du menar med pekar på

2020-09-11T17:55:37.105400Z

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

2020-09-11T17:55:46.105800Z

og fjerner du den ene, fjerner du den andre

emil0r 2020-09-11T17:57:06.106200Z

Tror nog inte det är så strikt

emil0r 2020-09-11T17:57:09.106400Z

Crux is a document-oriented database that makes your data available for graph-like Datalog queries without the need for an upfront schema.

emil0r 2020-09-11T17:57:40.107200Z

Från vad juxt skriver

emil0r 2020-09-11T17:57:58.107600Z

Så I huvudsak dokument

2020-09-11T18:23:19.109700Z

ja, ikke sant

2020-09-11T18:23:26.110100Z

du gjør vel typisk en "PUT" på hele dokumentet?