This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2024-03-26
Channels
- # announcements (9)
- # babashka (36)
- # beginners (13)
- # biff (24)
- # calva (12)
- # clj-kondo (18)
- # clojure (65)
- # clojure-brasil (1)
- # clojure-europe (11)
- # clojure-nl (1)
- # clojure-norway (87)
- # clojure-uk (4)
- # clojurescript (28)
- # datahike (25)
- # fulcro (12)
- # hyperfiddle (16)
- # malli (74)
- # missionary (1)
- # music (2)
- # off-topic (24)
- # polylith (4)
- # releases (3)
- # tools-deps (23)
Dagens bloggpost slår nok ned åpne dører (evt slår en død hest) her inne, men jeg drister meg til å dele lenka allikevel: https://parenteser.mattilsynet.io/historiske-data/

Setter veldig pris på de håndfaste eksemplene på bruk av d/q
med (d/history ,,,)
som argument. Synes ofte det er litt vanskelig å skjønne sånt fra å lese datomic-dokumentasjonen.
verden trenger en datomic-talk som itererer seg frem til forståelse via en som gjør seg vanskelig med vilje
“men det går jo ikke an å si hvordan databasen så ut på et gitt tidspunkt, siden det skjer masse ting samtidig i databasen”
det jeg synes er skikkelig rart oppi det hele er at caching blir mye lettere når man har en dartabaseversjon. Så i mange tilfeller, (A) sparer man på historikken, og (B) får bedre ytelse.
Korleis løyser de GDPR / personvern / sletting av sensitive data? Eg synest Datomic ikkje har eit veldeg godt "svar" på det (eg kjenner til excision og https://github.com/ivarref/rewriting-history#rationale)
ser kanskje ut som buggen ligger i en potensiell misforståelse av sync-excise. Den returnerer en db som ser ut som den ville gjort som om alle excisions har kjørt, sier dokumentasjonen
> Retrieve a database value that is aware of all https://docs.datomic.com/pro/reference/excision.html up to a https://docs.datomic.com/pro/glossary.html#t. > Does not communicate with the transactor, so the future may be available immediately. The future can take arbitrarily long to complete. Waiters should specify a timeout.
Vi lagrer sensitive data i en egen database og joiner på tvers av databaser. Vi har lite sensitive data.
Excision vil være godt nok for oss, det har fungert for meg før. Alternativt kan man gjøre en decant.
> Alternativt kan man gjøre en decant. Kva tyder dette? At ein "køyrer" heile Datomic på nytt (historikken)? Korleis gjer ein det?
Du oppretter en ny database, og så kopierer du over transaksjonsloggen fra en gammel database, men filtrerer ut data du ikke lenger ønsker å ha.
Du kan tilbakedatere transaksjoner når du har en ny database, så du kan beholde alle timestamps osv
Okey, eg meiner å ha sett eit script for noko slikt ei gong (og det var ikkje trivielt fritt etter hugsen), men finn det ikkje att. Har de eit slikt script?
Har ikke noe for hånden akkurat nå. Hvor vanskelig det er kommer an på hvor sammenvevd dataene du vil fjerne er. Prosessen er som følger: Loop gjennom transaksjonsloggen fra første transaksjon. Sjekk om transaksjonen skal være med eller ikke. Skriv til ny database. Sjekken på om noe skal med eller ikke er den som kan være knotete, altså mulig du må se på referanser osv. Men veldig vanskelig har jeg vanskelig for å se for meg at det skal være. Dette kan du sågar gjøre mens den gamle databasen står og går. Når du er ferdig stopper du den gamle, kjører prosessen en gang til for å få med transaksjoner som har kommet inn i mellomtiden, og så starter du opp med ny database.
Einig i at det høyrest ganske rett fram ut. (Og så når eg tenker noko kjem til å ta 5 minutt, så tek det typisk 35 minutt minst. Orsak om eg ranter litt...)
På forrige prosjektet gjorde vi excision ca en gang i måneden, det fungerte også greit.
Eg meinte heller ikkje å seia at det tek nøyaktig 5 minutt eg heller, berre at eg har ein tendens til å tekna at "kor vanskeleg kan dette vera?" og så viser det seg at det er ein heil del ting eg ikkje hadde tenkt på som tek tid (og difor eg etterspurde eit script om de har gjort dette før). Irriterer meg at eg ikkje finn det skriptet eg meiner å ha sett for lenge sidan ...
jeg ble litt nysgjerrig på dette med at excision har en bug som gjør at retractions blir hengende igjen - stemmer det faktisk?
Det stemte iallefall for 3 år sidan 🙂 https://github.com/ivarref/rewriting-history/blob/main/test/no/nsd/rationale_test.clj
den ser ut til å lene seg på at sync-excise snakker med transactoren, som den ikke gjør
den returnerer en db som ser ut sånn db ser ut når excise har kjørt ferdig, men den venter ikke til den faktisk er kjørt ferdig. Og db-verdien som returneres fra den brukes ikke i sjekkene som etterfølger
Okei, takk. Du meiner den testen der kan ha annleis oppførsel enn ekisterande kode? Ikkje heilt ueinig i det. Skal me sjå ...
stemmer, ved første øyekast ser jo sync-excise ut til å vente til en sync faktisk er gjennomført i transactor/storage, men det er egentlig en “fake” as if som gir deg et db-view som om det har skjedd. Så når koden under henter ut en ny conn, og ikke bruker db returnert av sync-excise, blir ikke testen “reell”
Eg forstår poenget ditt. Merk at testen både sjekker at data forsvinn og at data "heng igjen". Den testen har ikkje feila for meg, men det er vel ein sjanse for at den kunne ha gjort ja. Same resultat forøvrig med dine endringar: https://github.com/ivarref/rewriting-history/blob/main/test/no/nsd/rationale_test.clj (den nyttar datomic-testcontainers, så den spinner opp ein faktisk transactor + pgsql for testen) Edit: ny commit no altså: https://github.com/ivarref/rewriting-history/commit/0d397f4dbe3f569e76debe5c2e955af4ae7e641b
mao. buggen finst framleis i 1.0.7075
ville ikke overrasket meg med “random” oppførsel etter en excision. Men se der ja, lik oppførsel, ville hørt med Datomic-folket og sjekket at det ikke er en bug
Eg skreiv om det på #C03RZMDSH ei gong i tida
Flott. Takk! 🧡
Disclaimer(har aldri brukt datomic). Men i og med at man bruker andre databaser som backend for datomic, vil det være veldig vanskelig å snike seg inn bakveien å slette data rett i backenden? Tror jeg skal leke litt med datomic i påsken ❤️
Kan man organisere dataene på en slik måte at hver blob bare vil ha informasjon om en spesifikk prosess/bruker?
usikker, man kan spesifisere partitions når man lagrer facts for å få relaterte data til å lagres nære hverandre i storage, men inntrykket mitt er at det er for domene-nivå og ikke data-nivå
Datomic bruker “storage”-databasen som et filsystem. Det blir som å begynne å rote rundt og trikse med filene under .git/objects
Ja, kanskje er du heldig og treffer noe riktig, men det er garantert å gi deg sorg i lengden.
i systemet jeg jobber på nå hadde det vært veldig fordelaktig med historikk, isteden ender vi opp med masse kode og skrot for å støtte det
Jeg er generelt imot å slette fortiden. Enten det dreier seg om retroaktiv omskriving av andres tekster, brenning av bøker, eller kasting av historikk! 😁
Selv om jeg fremdeles synes at PostgreSQL og SQLite er skikkelig kul og imponerende teknologi.
Det er få ting som føles så "jobbe i det offentlige" som å interagere med Java API-er!
Det var forøvrig Google som leverte API-et. De lager de mest byråkratiske API-ene av dem alle
Velkommen! Og gratulerer med jobb hos Ardoq 😊 Har du erfaring med Clojure fra før, eller skal du igang å lære?
Jeg har jobbet hos Ardoq for en liten stund som intern så jeg har litt erfaring
Har også gjort Racket før
Tok en klasse om funksjonelt programmering på UiO
Jeg sitter med et React project nå med masse rot, state og hooks. Vi har funnet ut at det er trøbbel med ytelsen hvis man har lastet opp mange bilder (~100). Lurer på å kanskje refaktorere siden (eller undersiden) til top down "stateless" ui. Har dere noen tanker eller fiff til hvordan dette kunne gjøres trinnvist? Tenker på å trekke ut alle hooks og states fra barna til foreldre-noden og så endre barna til ui-komponenter. Og da lage en prepare-funksjon (hvis jeg trenger det) som sender videre props til ui-komponentene. Det er mange hooks som da kan merges og slettes, og da får vi all staten og logikken samlet i én komponent. Hva tenker dere? Er dette helt på sida?
Som du sier: 1. flytt state mot roten av komponent treet. 2. Fjern hooks evt flytt dem også til roten av komponent treet.
Dette har atpåtil @U04V5VAUN mye erfaring med å gjøre! 🙂
Det er (minst) et tilfelle der jeg mener det er greit å bruke useState
og det er hvis du har en form som du skal samle inn verdier før du trykker Submit
Det er også (tror jeg) fordelaktig å utvikle ens komponenter i portfolio eller storybook sånn at det er begrenset hvor mye feil man kan gjøre.
Og, hvis jeg hadde vært konsulent, så hadde jeg gjerne gitt deg en time eller to for å se på koden 🙂
men nå må jeg tilbake til resultUtils
som jeg akkurat konverterte fra js til ts og ser at den ikke i det hele tatt snakker godt sammen med de typene som jeg allerede visste var løgnere!