Fork me on GitHub
#clojure-norway
<
2023-06-02
>
teodorlu06:06:46

Jeg storkoste meg også! Tusen takk, alle sammen!

teodorlu06:06:57

nå blir mer Datomic!!!

😄 4
datomic 2
teodorlu06:06:36

(burde egentlig sette meg ned å kode noe med Datomic i stedet for å prate her :))

teodorlu06:06:30

Satte særlig pris på alle de praktiske aspektene dere kom med hvordan man bruker Datomic, og hva man gjør i praksis. • At Datomic er bra for data som mennesker bryr seg om • At Datomic er bra for data som skal endres • At Datomic er ment å brukes orientert rundt atributtene Visste heller ikke før i går hva det faktisk ville si at man man kan ha metadata på alt, og hva det vil si at "created at" / "updated at" er førsteklasses. Veldig kult med eksemplene som dro ut funksjoner for created at og last updated at. Kult med info om alle oppdateringer også. Jeg likte også særlig godt at alt kan løses med kode som kan kjøres. Ikke yaml, ikke andre config-filer et annet sted. Tror jeg skjønte litt men ikke alt om hvordan man migrerer skjemaet over tid. Hørtes spennende ut at man kan lage en "redirect" på attributtnavn, hvis jeg forsto det rett. Spennende hvordan man kan løse constraints med funksjoner man putter i databasen også. Så man kan ha flere constraints enn det Postgres/SQL-designere "tenkte på" da de lagde CONSTRAINT. Mye å tygge på nå! 🧑‍🎓

👍 4
teodorlu06:06:12

Jeg har sett mange Datomic-talks tidligere, men følte at mange ting "løsnet" i går.

teodorlu06:06:36

Likte formatet veldig godt. Mange gode spørsmål fra salen.

teodorlu06:06:47

Gøy når man kan svare ved å vise det i REPL!

augustl07:06:02

og modellen med at writes skjer i én tråd gjør at alle transaksjoner blir som en slags reduce, så å skrive disse database-funksjonene er nokså overkommelig og (i motsetning til å skjønne seg på constraints og MVCC i sql-land)

💯 2
teodorlu07:06:45

Jaaa, godt poeng! En constraint kan være en funksjon fra hele databasen til true/false. :thinking_face::thinking_face::thinking_face:

teodorlu07:06:45

Søren, da kan du jo implementere et vilkårlig typesystem for databasen. Hvis du vil.

teodorlu07:06:11

"typesjekk etter en spekulativ transaksjon. Hvis ok, kjør"

augustl07:06:58

dersom det “kun” er en typesjekk som ikke er avhengig av tilstanden ellers i databasen men opererer på dataene som sendes inn alene, kan man også kjøre en “what if” ved å kjøre transaksjonen i klienten i stedet for å sende den til transactoren

augustl07:06:12

Datomic sine valg fører til et nydelig sammensurium av wins 😄

😁 4
teodorlu07:06:20

Sant! ❤️❤️

teodorlu07:06:32

Kanskje du får blitt med på neste meetup :)

augustl07:06:46

håper det! Skulle gjerne vært med om det ikke var for at jeg har det også helt OK på bryllupsreise i Italia denne uka 😄

❤️ 6
teodorlu07:06:13

Åh, gratulerer!!

augustl07:06:22

tyvm!

🎉 2
teodorlu07:06:37

Hvis noen har lyst til å dytte reaktivitet fra en Datomic-database helt ut til klienten, går det an å se på Electric Clojure. De holder på å skrive om "kom i gang-eksempelet" sitt til Datomic nå. Det ble lettere å argumentere for at Datomic burde være goto-databasen etter at den ble gratis. https://electric.hyperfiddle.net/ @dustingetz lager Electric, og henger på #hyperfiddle. Han ser ut til å svare veldig fort på alle spørsmål!

💯 2
leifericf07:06:10

Jeg er nå inspirert til å sette opp Datomic for å teste litt, men jeg er dessverre nødt for å bruke Microsoft Azure. Hvis jeg forstår rett må jeg sette opp tre ting: 1) en storage service, 2) en transactor, og 3) koble disse sammen. Trenger jeg da to forskjellige VM-er? Dette må gjøres "manuelt," typ jeg må sette opp og konfigurere én databaseserver og lage én tabell som Datomic kan bruke med korrekte brukerrettigheter, osv. Og jeg må sette opp en VM eller noe sånt for transactor. Så vidt jeg kan se, er det fleste offisielle guidene AWS-spesifikke, og jeg finner ikke så mange ressurser for Microsoft Azure. Er det noen som har erfaring med å sette opp Datomic i Azure, eller vet om en guide for det? Finnes det et eller flere Docker images som kan gjøre alt oppsettet automagisk?

💪 2
leifericf08:06:24

Jeg ser at Cassandra finnes som en "one-click installer" dings i Azure Marketplace i alle fall, så det er cool.

magnars08:06:04

Hvis du har storage'n klar, så er bør det være en relativt smal sak å finne en Dockerfile for Datomic et sted på nett som du kan tweake. Den jeg har er gammal og grå, så ville sett om det var noen litt mer moderne der ute!

👍 2
leifericf08:06:48

Egentlig interessant at Cognitect/Nubank ikke legger litt innsats i å lage en slik "one-click installer dings" i Azure Marketplace. De kunne sikkert fått mange nye brukere på den måten. Men Azure er ikke så veldig stort utenfor Europa, i andre deler av verden hvor AWS og Google Cloud har en større market share. Så de ser kanskje ikke på det som veldig viktig.

cjohansen08:06:20

Det letteste er å starte med “dev”-protokollen. Da trenger du bare en maskin med disk, så kjører du opp transactoren på den, og så lagrer den data på lokal disk.

💡 2
leifericf08:06:20

Ja, kanskje jeg skal gjøre det først, bare for å teste det ut. Jeg tenkte å stappe all produktdata vi har inn i Datomic (flere millioner produkter) via en Azure Service Bus eller Kafka-strøm som allerede finnes i Azure med tilgangsstyring via Azure Active Directory. Men jeg kan kanskje gjøre den delen "manuelt" lokalt på min egen laptop for å teste.

cjohansen08:06:25

Det er ihvertfall det letteste. Du kan jo kjøre en sånn maskin opp i Azure også. Dersom du ender opp med noe du vil bruke videre kan du migrere storage senere (enten ved å laste inn dataene på nytt, eller bruke backup/restore)

👍 2
leifericf08:06:28

Godt poeng det med å migrere storage senere. Kanskje jeg ikke skal ta alle infrastrukturutfordringene på forskudd bare for å teste ut ting.

cjohansen08:06:01

Det høres lurt ut 🙂 Bedre å komme raskt igang med å få fingrene på interfacet til Datomic

🙌 2
leifericf08:06:46

Tusen takk for tipsene!

augustl08:06:00

har kjørt i dev-protokoll i ca et tiår i prod forøvrig uten at det har bydd på problemer 🥳 (tror det er byttet ut nå da)

💡 2
cjohansen08:06:44

Husk at du i prinsippet kan kjøre backup i en tight loop, så selvom dev-protokollen skulle skjære seg helt (noe jeg ikke har opplevd) så kan du tømme dataene inn i en ny database og fortsette 🙂

terjesb10:06:54

Takk for veldig bra meetup i går! Saga-videoen fant jeg igjen embedded på https://docs.datomic.com/pro/learning/videos.html#reified-transactions, ca 28 min inn på Understanding and Using Reified Transactions:) %%% Jeg måtte hive meg i bilen før Skråplanet, vet ikke om dere snakket noe mer om On-Prem vs. Cloud der? Etter at det ble gratis å kjøre transaktor-systemer er kanskje on-prem (igjen) enda mer aktuelt også for nye installasjoner, vi har kjørt on-prem en stund og har noe på gang med cloud. Cloud har enkelte viktige forskjeller/“mangler” fra hva som ble vist i går, selv om selve datamodellen er akkurat den samme og at det også er et par punkter i pluss-kolonnen:) Uansett, on-prem mot sql-storage gjør det enkelt å komme i gang på eksisterende infrastruktur. Enig i at ‘dev’ er pragmatisk:) Btw, en av Conj 23-presentasjonene snakker om at Presto-laget ikke er helt optimalt likevel (dessverre litt utdatert), og at en løsning som https://github.com/lambdaisland/plenish kanskje kan være et ok substitutt for å synke BI-data over til PG. Dette er foreløpig bare name-dropping, ikke noe jeg har prøvd selv ennå. Ellers tracker jeg XTDB i en bakgrunnsprosess. Avventer nok ytterligere eksperimentering til XTDB2 har kommet lenger (men gøy å prøve quick-starten med SQL og insert uten først å definere tabell). Før jeg faktisk har prøvd å lage noe med XTDB er det vanskelig å si om deres valid-time ville løse noen/mange/alle problemene mine, om det er feil eller helt riktig av Datomic å overlate dette til applikasjonen.. [*] Mye vil nemlig ha mer og aller helst en sølvkule: Kunne per nå ønske at Datomic også var bitemporær og ikke kun hadde txInstant. Vi har knyttet litt business-logikk til txInstant (ikke nødvendigvis en best practice og kanskje noe de advarer mot i en av videoene jeg har sett, samtidig som det føles genialt ift. as-of og history-spørringer!), og da får man ikke inn nye gamle data uten å kjøre replay/dekantering. Unitemporær (?) gir heller ikke noe ferdig støtte for at man legger inn data som blir (u)gyldige i fremtiden. Så en mulig gotcha kan være om/når man må tenke på “hvis vi skal fusjonere inn et selskap, hvordan får vi inn deres historiske data”. Løsningen kan være at man drar dette inn i separate historikk-databaser og har en felles db kun for nye data. Ikke nødvendigvis at man gjenoppbygger en felles timeline, selv om det også går. (Merk, det er ikke noen standard migrering mellom on-prem og cloud, det er også basert på at man selv må ta ansvar for replay mellom databasene.) [*] Og i så fall hva som blir mulig når https://www.postgresql.org/message-id/CA+renyUApHgSZF9-nd-a0+OPGharLQLO=mDHcY4_qQ0+noCUVg@mail.gmail.com en gang blir merget i PG:) Ser den ikke nevnt i 16-beta heller..

💯 6
cjohansen11:06:59

Vi snakket ikke om Cloud-løsningen i noe organisert fora ihvertfall. Jeg har bare såvidt sett på den, har ikke erfaring med den. Ei heller Ions.

cjohansen11:06:02

Såvidt jeg skjønner har du ikke samme lokalitet med Cloud - og støttet heller ikke excision (ihvertfall sist jeg så på det), så den har ikke interessert meg videre. Ions løser lokalitet ved å ta fra meg lokalitet på koden min 😅

cjohansen11:06:39

Fra mitt ståsted er pro den feteste pakka, men med en enorm anmerkning på at jeg strengt tatt ikke har jobbet med alternativene.

leifericf12:06:13

Boom, så var første Clojure repo på plass på jobben 🙂 Starter template og guide for å skrive Babashka scripts.

❤️ 12
leifericf12:06:48

Driver med "snikclojurefisering" på jobb 😛

2
Ivar Refsdal12:06:08

Eg skulle gjerne vore der i går (men bur i Bergen og er i pappaperm) 🙂 Tillater meg til å dumpe eit par lenker til diverse Datomic-ting eg har bygd: Historikk/replay/"avansert" excision (dvs. GDPR for oss): https://github.com/ivarref/rewriting-history Eit stykke nedi står det om korleis ein kan "løysa"/jobbe rundt txInstant-begrensing. Det har fungert for oss (men vær varsam!). https://github.com/sikt-no/datomic-testcontainers/ for køyring av remote on-prem transactor i tester. Her er det ei Dockerfile @leif.eric.fredheim https://github.com/ivarref/gen-fn/blob/main/test/com/github/ivarref/remote_vs_local_test.clj#L61 (og som dermed kan vera greit å testa med remote transactor i unit-tester): https://github.com/ivarref/gen-fn freistar å vøla slike skilnader for dine databasefunksjonar runtime for deg. Og så til slutt https://github.com/ivarref/yoltq. ala @msolli sin https://github.com/msolli/proletarian, men "Datomic-native" (utan skip locked og alt det der diverre...) edit: ops kom borti enter for snøgt.

❤️ 8
👍 8
teodorlu12:06:25

Her var det mye spennende! Digger at du putter bilder i README 😁

Ivar Refsdal12:06:36

Takk! Det er inspirert av kodemaker-folka sine repo, blant anna @U07FCNURX https://github.com/magnars/confair 😺 Her er double-trouble repoet (også datomic): https://github.com/ivarref/double-trouble Nokon som tek "referansen"? "Logikken"?

💯 2
teodorlu12:06:20

Confair hadde en spennende tilnærming til secrets. Takk for referansen!

cjohansen12:06:33

Confair er chef_kiss

👍 2
cjohansen12:06:43

Vi bruker det på alle våre repoer

👍 4
teodorlu12:06:37

Jeg har vært borti kodebaser hvor secrets og config er skikkelig ille. Fra "her er masse greier du må putte i bokser i Intellij" til "du må spørre $PERSON for å få noe greier på DM" og "oida, du har visst ikke tilgang til dette, du, [og et par runder for å faktisk få det man trenger]". "Secrets skal ikke sjekkes inn i Git" er noe folk tolker på forskjellige måter!

cjohansen12:06:02

Ja, det lages mye jævlig klønete systemer for det

✔️ 2
leifericf12:06:06

Nice, takk for at du deler!

teodorlu12:06:31

> The dream is a world where developers can change configuration options, even secret ones, without coordinating updates with every other developer on the team. The dream is easily switching between environments locally, without commenting in and out bundles of related config options. The dream is checking in the prod config in a single readable EDN-file, instead of passing it piecemeal via ENV-vars in Kubernetes secrets. The dream is not accidentally sending all your secrets to Datadog. > > Welcome to the dream. ❤️

💜 4
cjohansen12:06:06

Vi brukte SOPS tidligere, som var ålreit, men filene er kryptert, og du trenger tooling for å jobbe med dem. Løsningen Magnar kom opp med er helt nydelig og veldig utvikler-sentrert. Vi trenger kun én secret fra delt 1password i en fil på disk, så er du good to go.

👍 2
teodorlu12:06:53

Og den integrerer ergonomsk med programmeringsspråket! Ikke noe YAML eller JSON.

cjohansen12:06:17

Og så har vi et config-admin namespace i prosjektet som vi går i for å bytte ut krypterte verdier osv

👍 2
leifericf13:06:41

Jøss, det var en kul og smooth måte å håndtere secrets på! Jeg skal ikke ødelegge stemningen ved å beskrive situasjonen her med 300 microservices og et lass med secrets i Azure Key Vault 😅

😄 4
teodorlu13:06:41

Jeg synes faktisk Google Secrets Manager var en helt OK måte å gjøre ting. Antar Azure Key Vault blir litt av det samme? I et tidligere prosjekt lagde vi en shell-wrapper så vi kunne kjøre ./dev.sh dev som gjørte masse export SOME_SECRET=$(gcloud secrets ....) og til slutt go run main.go. Synes det var helt OK. Én kommando for å gjøre alt. Men jeg hadde foretrukket EDN og Clojure! Da hadde vi beskyttet hemmelighetene med Google-innlogging, men kunne fremdeles kjøre én kommando for å starte ting lokalt etter at man har logget inn.

👍 2
leifericf15:06:50

Ja, det er ikke så ille egentlig når ting funker. Rammeverket vi har laget tar seg av det meste automatisk, opprette og hente secrets, osv. Mye skjer via pipelines i Azure DevOps. Det er når ting går galt det kan bli litt komplisert å finne ut av 😅 God idé med én command! Det må jeg undersøke litt videre. Mulig Babashka script! 😄

😄 2