Fork me on GitHub
#clojure-norway
<
2023-09-29
>
teodorlu06:09:14

Har dere hørt noen clojure-podkastepisoder dere har likt i det siste?

👂 1
teodorlu06:09:03

Jeg skrev ned noen favoritter https://www.teodorheggelund.com/posts/getting-started-with-clojure-podcasts. Nå skal jeg inn og høre på https://ericnormand.me/podcast/the-3-levels-of-functional-thinking av Eric Normand på nytt. Husker jeg likte den godt - uten at jeg synes at den helt ga mening.

oddsor08:09:37

Morn! Jeg lagde en liten todo-app i et slags “rammeverk” jeg har satt opp for meg selv for rest-baserte applikasjoner (en slags Biff!) og har i den forbindelse testet å bruke Integrant/Clip. Det kom jo egentlig ikke som en overraskelse, men det blir litt vanskeligere å vite hva som skjer når en applikasjon starter opp når man bruker slike bibliotek. Så spørsmålet mitt er egentlig om noen har en slags fornemmelse eller tanke om når det “betaler seg” å bruke Component og lignende, fremfor å i stedet bare ha en litt stor main-funksjon?

👂 1
💯 1
magnars08:09:37

Jeg er glad i en stor main-funksjon, men havner ofte på Integrant litt tidligere enn kanskje strengt tatt nødvendig for å få en god repl-opplevelse, særlig når det gjelder reset. 🙂

magnars08:09:29

Ellers syns jeg det er greit å få oversikt over systemet med integrant takket være det store config-mappet.

oddsor08:09:11

En stor main-funksjon er også fin om man har lyst til å gå veien med native-image i graal også, selv om det er et nisje-case

oddsor08:09:19

(da må imports av nødvendige namespaces helst være gjort eksplisitt om jeg husker rett)

cjohansen08:09:58

Integrant med system-config og alle implementasjonene i ett namespace er jo basically en "stor main-funksjon" med god tooling. Jeg liker det veldig godt.

💡 3
👍 1
kolstae08:09:54

Hm har du alle ig/init-key i samme namespace :thinking_face: Noe av grunnen til at jeg flyttet fra integrant til clip var at jeg mislikte alle ig/init-key rundt omkring, tenkte ikke på å samle dem engang 😞

😅 2
oddsor09:09:22

Har ikke brukt clip så lenge, men syns det fungerer ganske greit også. De er jo ganske like 🤷 Er det noe fra integrant du savner i clip, @U55V0HZMJ?

cjohansen09:09:42

@U55V0HZMJ du kan ha dem alle på ett sted, ja 😅

cjohansen09:09:48

Aldri hørt om clip, jeg

cjohansen09:09:03

Jeg bytta fra mount av samme grunn som deg @U55V0HZMJ, men den strør jo faktiske globals rundtom

kolstae09:09:35

Synes clip funker fint har, ikke noe å utsette på det (kommer ikke til å bytte tilbake selv om integrant er liksom mer mainstream). Jeg har en app jeg starter med flere forskjellige configs, så litt dynamisk lasting er det.

oddsor09:09:18

https://github.com/juxt/clip Forskjellen er vel egentlig i hovedsak at man ikke bruker defmethods, men skriver litt mer kodete konfigurasjonsfil. Den største nedsiden er kanskje at man kan være litt udisiplinert på hvor kodete konfigen blir 🙈

kolstae09:09:22

Jeg bruker EDN for config da og kaller funksjoner med fullt namespace.fn derfra. Kombinerer med https://github.com/juxt/aero/ for environment og passord fra aws-ssm osv

👍 1
oddsor09:09:58

Litt morsomt å se den sammenligningen med andre bibliotek i dokumentasjonen til Clip. Føles som om man kan se Clojure-miljøet sin dialog med seg selv. 😅 “Dette er fortsatt ikke ‘just data’ nok!”

oddsor09:09:26

Kommer til å pusle med Clip en stund til, men jeg er fortsatt ikke sikker på om jeg liker at det føles som man ikke lenger tydelig ser “inngangene” til appen slik som man gjør med integrant sine defmethods 🤷

msolli10:09:36

Hvordan integrerer du data fra AWS SSM med resten av Aero-konfigen, @U55V0HZMJ?

kolstae10:09:45

Jeg utvider aero/reader som dette

(defmethod aero/reader 'aws-param [_ _ param]
  (aero/deferred (aws/get-param param)))
også bruker jeg #aws-param "secret.name" i EDN fila (språkforvirra)

msolli10:09:00

Fiffig, takk! Bruker SSM her, men henter alle parameterene under en path (f.eks. ‘/vilect/production’) og setter dem sammen til et map, som jeg merger sammen med resten av konfigen. Aero virker jo veldig smooth og utvidbart.

kolstae11:09:44

Blir kanskje ikke den helt store forskjellen, men kanskje litt mer eksplisitt? Typisk har jeg ikke bare passord men også bruker som hører sammen med passordet. Eller private og public keys

msolli11:09:02

Ja, enkelte konfigverdier hører sammen med andre. Jeg pleier å validere at hver enkelt komponent har fått sine konfigverdier i det komponenten starter.

magnars11:09:48

confair har dette fint håndtert syns jeg 🙂

kolstae11:09:09

Synes ikke det virker nødvendig om du har

(connect #was-param "service.1.username" #was-param "service.1.password")
om noen av dem ikke finnes, så feiler jo den spesifikt

kolstae11:09:01

Ser at det (confair) kanskje løser et litt mer komplekse greier ja 😅

msolli11:09:12

@magnars I Readme-en beskriver du hvordan man kan sjekke inn en kryptert dev-konfig i Git. Tar du denne praksisen helt ut og sjekker inn produksjonskonfig også?

magnars11:09:13

Ja, vi har gjort det på lukkede repoer.

👍 1
magnars11:09:10

@U55V0HZMJ det er også hyggelig å få en ålreit feilmelding under oppstart, og ikke når man forsøker å connect'e på et vilkårlig senere tidspunkt.

kolstae11:09:41

Absolutt! I mitt tilfelle får du da vite at det parameteret ikke finnes under oppstart

leifericf08:09:30

God morgen! Dagens tanke… Er det bare jeg som føler git merge er litt unaturlig?

git checkout feature
git merge main
Her "går man inn i feature" og "flekker main inn i feature." Eller det kan gjøres på én linje:
git merge feature main
Jeg vet ikke hvor mange ganger jeg har tenkt feil og kjørt merge i feil retning 😅 For meg føles det mer naturlig å sette source før target, typ:
git checkout main
git merge feature
Eller:
git merge main feature
"Ta main og døtt den inn i feature." Typ "push-tankegang" vs. "pull-tankegang." Det er egentlig mye med Git sitt CLI som føles uintuitivt og klønete for meg, selv om jeg har brukt det i mange år.

1
cjohansen08:09:57

Git har en helt fantastisk datamodell og et nokså ræva designet "porselen" over. Bruk magit 😄

👀 1
😄 1
magnars08:09:52

fetch først, ta en titt på nye commits, så rebase

👍 2
leifericf08:09:41

Ja, det er vel på tide at jeg lærer meg å bruke rebase. Det var faktisk sånn jeg kom på dette nå, fordi jeg satt og leste https://www.atlassian.com/git/tutorials/merging-vs-rebasing 🙂

leifericf08:09:49

@U9MKYDN4Q For å bruke Magit må jeg vel først lære meg å bruke Emacs? 😅

leifericf08:09:53

Jeg har kjørt gjennom de interaktive guidene til Emacs, men kløner og fikler fortsatt fælt, og ender som regel tilbake i VS Code med Calva. Det er vel på tide å gi Emacs et mer helhjertet og langsiktig forsøk for å komme over nybegynnerhumpene.

magnars08:09:10

Det er også mulig å bare bruke magit, slik som @U0MKRS1FX gjør.

😮 1
💡 1
augustl08:09:24

haha jepp, can confirm, det er uslåelig 😄 Bruker faktisk magit i vscode litt og, den er nesten like bra (dvs, like bra og logisk bygget opp, men har ikke emacs-magi som masse keyboard shortcuts for å redigere i rebase-bufferet osv osv)

leifericf08:09:20

Haha! Jeg trodde Magit var en "eksklusiv Emacs greie" pga. tag line "A Git Porcelain inside Emacs."

leifericf08:09:25

Men da skal jeg sjekke det ut!

augustl08:09:40

ja, den i vscode er en reimplementasjon av emacs sin

augustl08:09:23

Option-x og g og så åpner et herlig magit-buffer seg 😄 Trykk spørsmålstegn når du er der for å se hvilke keyboard shortcuts som kan brukes

💡 1
augustl08:09:07

eller bare kjøre magit status manuelt

leifericf08:09:30

Jøss, den VS Code extension er jo laget av en nordmann til og med.

msolli10:09:14

Du må bare lese manualen godt nok: https://git-man-page-generator.lokaltog.net

😂 1
emil0r11:09:47

https://hackernoon.com/how-the-creators-of-git-do-branching Ett annorlunda sätt att bruka git på, som jag har funnit mycket nytta i. Kör en anpassad version av den

👀 1
leifericf12:09:18

Populariteten av https://stackoverflow.com/questions/18126297/when-to-use-the-no-ff-merge-option-in-git (10 år siden) vitner også om at enkelte ting er forvirrende.

augustl12:09:37

haha samme, jeg har fått overlord-status på stackoverflow ved å være tidlig ute med denne

😂 1
leifericf12:09:07

I 2013 eller 2014 leste jeg faktisk hele https://git-scm.com/book/en/v2, men jeg har glemt det meste av de mer avanserte tingene 😂 Hos forrige arbeidsgiver hadde jeg ansvaret for å migrere ~100 repos fra TFS (pre-DevOps) til Git på en fysisk server inne på kontoret (før vi brukte GitHub) og bevare all commit-historikken. Da støtte jeg på mye rart av problemer. Men i dag bruker jeg stort sett bare pull, checkout, add, commit, push, config, status og log, fordi vår CI/CD påtvinger feature branches med automatisk squashed merge uansett.

leifericf12:09:40

@U0MKRS1FX, våre Stack Overflow cake days er ganske nære hverandre da, hehe!

🚀 1
augustl12:09:31

husker ikke helt kilden min til git-forståelsen, men ganske tidlig grokka jeg “datamodellen” til git og klarer å se forbi det rare CLI-et

augustl12:09:35

tror jeg så en av Linus sine egne talks elns

augustl12:09:00

hva i “pekere til commits (brancher, tags, …) som igjen peker på en kjede med tidligere commits som har SHA-en til tidligere commit som parameter til seg selv” er det nå denne kommandoen gjør. Eller noe sånt 🙂

😂 1
augustl12:09:23

å prøve å bygge git-forståelsen sin på CLI-et blir jo som å prøve å forstå hvorfor en baby gråter, masse skjulte variabler i en black box

👶 1
leifericf13:09:15

Den artikkelen du delte var svært interessant, @U0545PBND! Interessant at utviklerne av Git bruker 4 langlevde branches, og merger topic branches til flere av dem, etc.

emil0r13:09:40

Och när vi ändå är inne på git

emil0r13:09:07

Följ den artikeln. Du kommer tacka dig själv ett år senare när du undrar vad det var du gjorde

cjohansen10:09:46

Apropos kode man er fornøyd med. @magnars og jeg løste nettopp følgende problem: Sjekk om en vilkårlig nøsta datastruktur bruker en av noen navngitte keys inne i et sett. Eksempelvis: sjekk om :dont-use/this forekommer inne i et sett i disse dataene:

[{:title "Title"
  :things #{{:stuff {:dont-use/this 32}}}}]
Løsningen:
(let [data ,,,
      attrs #{:dont-use/this}]
  (when (->> (tree-seq coll? identity data)
             (filter set?)
             (tree-seq coll? identity)
             (filter attrs)
             seq)
    "Naughty!"))
Det syns jeg var en herlig liten snutt. Clojure ❤️

🙌 4
slipset12:09:14

Kult, jeg hadde nok strukket meg etter en eller annen walk og et atom :melting_face:

augustl12:09:15

tree-seq er 11/10

augustl12:09:11

kan også være et 🚩 til at man kan undersøke om man kan jobbe med mindre nøsta data, men når det ikke er et alternativ så er tree-seq gull (for den gjør jo på sett og vis at man kan behandle nøsta data som flat data)

Jakub Holý (HolyJak)15:09:59

En veldig sent god morgen! (Jeg ble suget inn i feilsøking rundt #sci og #shadow-cljs for å havne, som vanlig, i min egen kode 😅. Men https://blog.jakubholy.net/2023/interactive-code-snippets-fulcro/#_demo er verdt det.

👍 1
👀 1
cjohansen18:09:54

Veldig kult!

❤️ 1
Jakub Holý (HolyJak)18:09:27

Min neste drøm er å få støtte for #C68M60S4F i Portfolio, men vet ikke om jeg noensinne for tid for det…

cjohansen19:09:31

Jeg kan sikkert bistå litt 😊 hva er det som kreves?

Andreas Flakstad18:09:56

https://www.youtube.com/watch?v=c4T5b_pgPUE > Fear not. Programming in Clojure will not give you a lisp. ❤️ Takk for alt innhold dere har laget!

🙏 2
1