This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-09-22
Channels
- # babashka (106)
- # beginners (29)
- # biff (29)
- # calva (9)
- # cider (6)
- # clj-kondo (24)
- # clojure (40)
- # clojure-europe (94)
- # clojure-japan (1)
- # clojure-nl (1)
- # clojure-norway (45)
- # clojure-uk (13)
- # clojuredesign-podcast (5)
- # clojurescript (12)
- # clr (4)
- # community-development (2)
- # conjure (13)
- # cryogen (4)
- # cursive (4)
- # deps-new (1)
- # fulcro (18)
- # hugsql (2)
- # hyperfiddle (67)
- # jobs (1)
- # malli (47)
- # meander (2)
- # missionary (34)
- # off-topic (1)
- # podcasts-discuss (1)
- # polylith (24)
- # reagent (19)
- # reitit (9)
- # sci (7)
- # shadow-cljs (3)
- # testing (28)
- # tools-deps (1)
- # xtdb (9)
Jeg stĂ„r opp 05:30 hver dag đ Men det er ikke alltid jeg roter meg inn her fĂžr jeg kommer pĂ„ kontoret.
Hvilke biblioteker bruker dere vanligvis for autentisering og autorisasjon? Jeg ser det finnes noen alternativer. For eksempel hvis jeg skal lage en web app der folk kan opprette en bruker med sin e-post, telefonnummer, eller andre kontoer (Google, Facebook, LinkedIn, Apple). Jeg tenker pÄ noe å la https://hexdocs.pm/guardian/introduction-overview.html som Elixir miljÞet har.
Har ikke pleid Ă„ bruke noe bibliotek utover http-klient og kryptering. Hadde vĂŠrt interessert i Ă„ hĂžre hvilke problemer som lĂžses av et eget bibliotek for dette!
Det er bare nesten riktig, for vi har brukt en av buddy-bibliotekene til JWT signering og verifisering đ
Bruker buddy-auth til session-hÄndtering i webappen. Ellers ikke noe. (Bruker ikke SSO eller OAuth, det skal sies.)
https://github.com/sikt-no/clj-jwt finst ogsÄ, me nyttar det eit par plassar til verifisering av tokens
Buddy fungerade bra och var enkelt att utöka dÄ det anvÀnder protokoll för allt viktigt
@U06BU6Z44 Sist jag tittade (för 3 Är sedan), sÄ fanns det inget i clj space för SAML. Vi anvÀnde ett java bibliotek istÀllet
I was lazy and used Google Login in my app. Using Buddy-jwt for the necessary pieces there. You could also offload it to a SaaS such as https://clerk.com/ âŠ
har du skrevet en clojure-snutt (kanskje ca 1-10 linjer) du synes var sĂŠrlig pen eller sĂŠrlig stygg i det siste?
Eg skreiv fĂžlgande greie (`future macro`) for Ă„ sjekka at alle threads fullfĂžrer i ein test:
(def ^:dynamic *active-futures* nil)
(def ^:dynamic *max-active-futures* nil)
(def ^:dynamic *fut-map* nil)
(defmacro future
[& body]
(let [info (assoc (meta &form) :file *file*)]
`(let [info# ~info
body-fn# (bound-fn []
(try
(when (some? *active-futures*)
(swap! *fut-map* update info# (fnil inc 0))
(let [new-cnt# (swap! *active-futures* inc)]
(swap! *max-active-futures* (fn [old#] (max old# new-cnt#)))))
~@body
(finally
(when (some? *active-futures*)
(swap! *fut-map* update info# dec)
(swap! *active-futures* dec)))))
f# (clojure.core/future (body-fn#))]
f#)))
(defn report []
(let [v @*active-futures*]
(if (not= 0 v)
(do
(doseq [[{:keys [line _column file]} cnt] @*fut-map*]
(when (not= cnt 0)
(log/error "Offending future" (str "(" (last (str/split file #"/")) ":" line ")"))))
(throw (ex-info (str "Still " v " active future(s)") {:count v})))
(log/debug "All futures exited. Max was:" @*max-active-futures*))))
(defn with-futures-check [f]
(let [cnt (atom 0)
max-count (atom 0)
fut-map (atom {})]
(binding [*active-futures* cnt
*max-active-futures* max-count
*fut-map* fut-map]
(f)
(report))))
Tipper ein del her vil synest det er stygt. Eg for min del var nĂžgd med Ă„ fĂ„ kontroll og "bevisbarheit" for/pĂ„ tester som fyrer opp mange trĂ„der. đ
Edit: 41 linjer er innafor? đ
Edit2: og eg nyttar dÄ (clojure.test/use-fixtures :each u/with-futures-check)
for Ă„ bruke dette for kvar test.
Kanskje nokon har forslag om betre mĂ„te Ă„ gjera dette pĂ„?> Edit: 41 linjer er innafor? đ Jeg vil si ja! Kanskje âĂ©n linje til Ă©n sidehĂžydeâ er bedre Ă„ si enn âca 1-10 linjerâ.
Jeg er imponert over at du fikk til Ă„ skrive makroen i det hele tatt! BĂ„de makroer og dynamiske variabler.
Janei, janei. Eg er generelt imot Ä skriva makroer, sÊrleg som skal leva i prod-kode, men dette fÄr vera eit unnatak.
For koden din var vel kun for Ă„ âgi observabilityâ og skulle kun brukes i tester?
Da tenker jeg i alle fall intuitivt at det er bedre Ă„ ha informasjonen enn Ă„ ikke ha den â uavhengig av om koden er skrevet med makroer eller ikke.
Ja, det er for observability ja. Koden vert verande der ogsÄ i prod, men desse variablane vil dÄ vera nil, sÄ det vert i praksis ein vanleg future (med bound-fn).
Jeg starter! Syggere: shelle ut til sha1sum
for Ä hashe. Kan oppfÞre seg forskjellig pÄ forskjellige systemer, og kan hende at den ikke er installert i det hele tatt:
(defn sha1sum-digest [s]
(-> (slurp (:out (babashka.process/process
["sha1sum"]
{:in s})))
(str/split #" ")
first))
Penere: bruke plattformen, hashing med SHA-1 er innebygget pÄ JVM-en:
(defn sha1-str [s]
(.encodeToString (java.util.Base64/getEncoder)
(.digest
(doto (java.security.MessageDigest/getInstance "SHA-1")
(.update (.getBytes s "UTF-8"))))))
Hadde aldri funnet ut av dette hvis jeg ikke hadde delt koden, og fĂ„tt spĂžrsmĂ„l om âhvorfor i all verden gjĂžr du dette?â. Det er mange batterier inkludert med JVM-en!synes det var litt mye metodekall i snutt 2. Men jeg skjĂžnner jo at dette skal funke pĂ„ alle binĂŠrfiler. Og jeg skjĂžnner at det gir mening Ă„ kjĂžre SHA-1-hashing i inkrementer, ikke nĂždvendigvis hashe hele binĂŠrfilen pĂ„ Ă©n gang.
Merk: dette er kode for Ä ilustrere hvordan man ikke skal gjÞre passord. Koden brukes til Ä lage regnbuetabeller for Ä slÄ opp passord fra SHA1(passord). SÄ man kan forklare hvorfor man trenger salts. Fulltekst: https://github.clerk.garden/teodorlu/lab/commit/12c6c2518c23bd9899f85cd456e22386c172a4f7/src/rainbow_tables_2.html
Har noen av dere brukt Missionary skikkelig? Det er et funksjonelt effektsystem, en mÄte Ä takle samtidighet. SpÞr fordi jeg er nysgjerrig, uten at jeg skjÞnner det helt. Leo Noel driver og Skriver dokumentasjon nÄ, og jeg prÞver Ä lese, men synes alltid det er vanskelig. Se feks her: https://clojurians.slack.com/archives/CL85MBPEF/p1695377276676789
All of https://github.com/hyperfiddle/electric is built on Missionary. I have never used it but it looks very interesting. F.ex. thx to handling both discrete events and continuous streams, and for avoiding FRP glitches which our RxJs suffers from. I bet it is rock solid by now.
Of course none of that means that it solves any problem you really have đ
> Of course none of that means that it solves any problem you really have đ > Nope! Sometimes learning new things require a leap of faith. But you're right - I've been trying to find something I want to build with missionary or Electric, but I've come up short.
Har folk meiningar / erfaringar med spec.alpha, alpha.spec og/eller malli? Kva fĂžretrekk dykk? Kva synest dykk? Eg synest malli ser lovande ut (utan Ă„ ha testa det), liker blant anna at ein kan generere swagger spec/dokumentasjon. Er det andre ting de nyttar for Ă„ laga dokumentasjon?
Jeg har prĂžvd spec.alpha og malli â men ikke gjort en stor innsats, og ikke fĂžlt at jeg har fĂ„tt noe ut av det ennĂ„. Liker at malli-spesifikasjoner bare er data. Hypotesen er at malli kan vĂŠre fint i kanten av applikasjonen min til validering og coercion.
Det Àr en nackdel att clojure.spec Àr macrobaserat. Gör det svÄrt att utöka. Metosin började med malli efter att ha försökt sig pÄ att förbÀttra spec utefter de behov de hade och till slut gav de upp. Att malli Àr databaserat Àr ocksÄ en fördel, dÄ du kan serialisera det och spara undan det
> malli Ă€r databaserat Ă€r ocksĂ„ en fördel Kan ogsĂ„ legge til at malli har to datanotasjoner, en https://github.com/metosin/malli#vector-syntax (ala hiccup) og en https://github.com/metosin/malli#map-syntax (ala cljfx). Vektorer er konsise Ă„ skrive, men maps kan vĂŠre enklere Ă„ generere / parse. Tror de har funksjoner for Ă„ konvertere mellom vektorer og maps. ⊠SĂ„ finner jeg denne: > NOTE: For now, Map syntax in considered as internal, so donât use it as a database persistency model. SĂ„ kanskje ikke lurt Ă„ gjĂžre seg for avhengig av maps helt ennĂ„.
Jeg sliter skikkelig med Ä like clojure.spec mÄ jeg si. Syns malli er generelt mye mer ergonomisk. Bruker det i det meste av smÄprosjekter jeg driver med for tiden (jobber tross alt ikke med Clojure)
Et nice triks med malli er at om man bruker malli-spec som metadata i funksjoner sÄ kan man faktisk legge til specs for validering av funksjonskall i tester uten Ä ha en malli-dependency i produksjon (det blir bare liggende noe vektorer og keywords i funksjonsmetadataen) Men litt av poenget med sÄnne libraries er vel Ä ha det i produksjon for Ä validere ting pÄ vei inn (og ut?), sÄ nÞyaktig hvor mye man blir Ä bruke funksjonsschema er vel diskutabelt.
Eksempel:
(defn jeg-liker-bare-seqs-med-tall
{:malli/schema [:=> [:cat [:sequential :int]] [:sequential :int]]}
[xs]
(map inc xs))
(jeg-liker-bare-seqs-med-tall [1 :a])
=>
-- Schema Error --------------------------------------------------------------- NO_SOURCE_FILE:18 --
Invalid function arguments:
[[1 :a]]
Function Var:
user/jeg-liker-bare-seqs-med-tall
Input Schema:
[:cat [:sequential :int]]
Errors:
{:in [0 1], :message "should be an integer", :path [0 0], :schema :int, :value :a}
Iâd say clojure.spec is out (as mentioned, not data based => not inspectable, modable). The âlessons learnedâ Spec 2 is still nowhere close to be finished, so IMO Malli is the best choice nowadays unless your needs are quite simple and thus spec 1 is good enough.
> Et nice triks med malli er at om man bruker malli-spec som metadata i funksjoner sÄ kan man faktisk legge til specs for validering av funksjonskall i tester uten Ä ha en malli-dependency i produksjon (det blir bare liggende noe vektorer og keywords i funksjonsmetadataen) Takk for tipset, nyttig! Kan vera greit for biblioteker ogsÄ. Og ... Gir det meining Ä setja opp "sladring" til/med clj-otel for dette? Kunne vore fint Ä kunna sjÄ f.eks. "funksjon X fÄr feil/ugyldig input <cnt> ganger per dag".
Det hadde jo vĂŠrt interessant Ă„ sette opp noe slikt!
Jeg har puslet litt med https://github.com/BrunoBonacci/mulog som er litt samme greie (mangler forelÞpig stÞtte for opentelemetry); det hadde jo vÊrt kult Ä fÄ instrumentert antall schema-feil
Kunne bedt https://github.com/metosin/malli/blob/master/docs/function-schemas.md#instrumentation til Ă„ bruke en custom report-funksjon som dytter ut telemetri-eventer for eksempel?