Fork me on GitHub
#clojure-norway
<
2024-03-13
>
Ivar Refsdal08:03:15

God morgon og gratulerar med vel overstått til @christian767 🎉 🍰

🙏 2
🎁 2
teodorlu08:03:52

(let [state (atom "")
      set-state (partial reset! state)
      get-state #(deref state)
      append-str #(set-state (str (get-state) %))]
  (append-str "Morn")
  (dotimes [_ 10]
    (append-str "!"))
  (get-state))

🥶 2
😂 3
augustl08:03:13

god morgen!

augustl08:03:55

Du er i et prosjekt. Du får bare lov til å ta ett dristig teknologivalg. Du velger: 1️⃣ Kotlin og Datomic 2️⃣ Clojure og PostgreSQL

1️⃣ 4
2️⃣ 15
💥 2
teodorlu08:03:27

Grunn: REPL-dreven utvikling!!

augustl08:03:31

i en web-backend er nesten all tilstanden i databasen, så jeg vil heller at den skal være immutable enn dataen i koden som uansett stort sett er ganske flyktig

2
cjohansen08:03:16

Falsk dikotomi. Begge de valgene er mer obskure enn Clojure og datomic

teodorlu08:03:08

@U0MKRS1FX at man har skrevet en Kotlin-bok om fornuftig webprogrammering i Kotlin — og derfor kjenner Kotlin ganske greit — har kanskje noe med bildet også? Jeg synes det er (mye) lettere å komme i gang med noe som kjører på nett med http-kit, compojure og ring. Mens med Kotlin måtte jeg lest meg opp først. Pluss at jeg trives i Emacs, og har aldri fått til å jobbe effektivt med Java/Kotlin i Emacs. (Et par kollegaer havnet nettopp i Kotlin-prosjekt, men her brukes det rammeverk for alle penga — en kollega har uttalt at han ikke har skrevet en linje Kotlin ennå, kun Quarkus.)

leifericf08:03:29

Bare si at Datomic er en del av Clojure på en måte :face_with_hand_over_mouth: Så Clojure + Datomic teller egentlig bare som ett "dristig valg."

💯 6
slipset10:03:16

Får du ikke med deg clojure.jar når du bruker datomic?

😁 2
😂 2
augustl10:03:51

jeg er ikke fremmed for drakoniske løsninger, har brukt clojure.jar sine datastrukturer i et Groovy-prosjekt en gang

cjohansen11:03:30

Jeg ville uansett valgt Clojure. Det er lettere å hente inn datomic senere enn å bytte ut Kotlin med Clojure

💡 2
magnars08:03:55

(go (<! (timeout 200)) (print "n"))
(go (<! (timeout 50)) (print "M"))
(go (<! (timeout 250)) (println "!"))
(go (<! (timeout 150)) (print "r"))
(go (<! (timeout 100)) (print "o"))

🕗 2
😸 2
troll 2
😂 2
teodorlu08:03:28

søren, jeg trodde jeg hadde gjort det vanskelig 😄

leifericf08:03:03

Fun news: Jeg har nå integrert meg i LispFlavouredErlang community, vist dem nREPL og Calva, og inpirert dem til å https://github.com/lfe/xrepl. Veldig kult miljø altså. Så nå kan man snart:tm: gjøre Clojure-style interaktiv utvikling på BEAM med Lisp også 🙂 Og Robert Virding (co-inventor av Erlang/OTP) har allerede implementert deler av clojure.core i LFE.

💯 10
teodorlu08:03:30

Kult! Er det mulig å koble en editor til REPL ennå? Finnes det noen som har prøvd og tatt opp video?

leifericf08:03:17

Nope! Ikke enda.

leifericf08:03:47

LFE er sykt undervurdert. Virding har gjort veldig mye jobb der (han har jobbet med LFE i 16 år). Det er en fullverdig Erlang-erstatning med dårlig markedsføring. Egentlig ganske sykt at de ikke har REPL-dreven utvikling enda, med tanke på hvor mye mer dynamisk BEAM er enn JVM. De kan gjøre utrolig mye fett.

leifericf08:03:50

For eksempel, BEAM har out-of-the-box support for hot code reloading, og den holder alltid på forrige versjon av en modul automatisk. Så kan man gradvis migrere trafikk over fra en modul til en annen i produksjon. Typ innebygget støtte for "blue/green deployment" per modul. Alt dette skjer stort sett automagisk på tvers av alle fysiske maskiner i et nettverk.

💯 1
teodorlu08:03:27

Jeg så en talk av Christin Gorman hvor hun skisserte ut en framtid der vi hadde satset på BEAM (VM-en til Erlang), ikke JVM-en. "vi" som i "alle", ikke bare Clojure-folk. Det så ganske spennende ut. Da hadde vi i dag kanskje jobbet mer live mot produksjon, og kanskje klart oss uten Docker.

😮 3
leifericf08:03:18

Den har jeg ikke sett! Skal se om jeg finner den på YouTube.

teodorlu08:03:08

Jeg kan eventuelt prøve å grave den fram selv også, men akkurat nå er jeg på farta :)

slipset10:03:03

Det artige/triste er at det prosjektet likevel deployet med nye docker dingser heller enn å benytte seg av elixirs hot reload.

😂 2
😔 2
leifericf10:03:08

Hvilket prosjekt tenker du på, @U04V5VAUN?

slipset10:03:14

Elixirprosjektet til Christin. Husker ikke hvem/hva/hvor? Det var en sånn shoppinggreie hvis jeg ikke husker helt feil. Noe på A?

💡 2
👀 2
leifericf10:03:21

Og ja, Erlang/BEAM er nesten som å ha Docker + Kubernetes som lavnivå/førsteklasses greier i selve språket.

leifericf10:03:11

Erlang/BEAM har også ganske unike kapabiliteter hva gjelder https://www.erlang.org/doc/efficiency_guide/binaryhandling og bitstreams/bytestreams. Det har jeg ikke sett i noe annet språk. Det er ganske nyttig hvis man f.eks. vil validere/strømme video, lyd, eller et annet fancy binærformat. https://github.com/lfe/lfe/blob/develop/doc/src/lfe_guide.7.md#binariesbitstrings

slipset13:03:59

amoi, var det ja.

leifericf08:03:57

En modul/prosess er nesten som et eget isolert program/en "mikrotjeneste." Når man koder i Erlang og LFE føles det som man oraniserer og orkestrerer en haug miniprogrammer uten shared og mutable state, som kun får lov til å prate med hverandre via meldinger. Jeg synes modellen er veldig enkelt og intuitiv å forholde seg til. Så blir alt distribuert, parallellisert og concurrent uten at man må gjøre noe mer enn å deploye modulene til et nettverk av noder som automatisk gjør seg kjent med hverandre.

leifericf08:03:08

En av de største utfordringene med Erlang/BEAM er at en må stole på all kode. Det er designet for å kjøre i et "trusted environment." Så man må være litt forsiktig med hvor/hvordan man deployer og eksponerer ting. Alle BEAM-noder har en delt "nøkkel" som gjør at de kan oppdage- og prate med hverandre automatisk på tvers av N antall fysiske maskiner.

👍 2
magnars11:03:10

Etter å ha portet en betydelig mengde dumdom-kode til replicant, så må jeg si at det har blitt veldig bra. Særlig er det utrolig flott med både event-handlere og life-cycle-hooks som data. Kjempekos.

💯 6
❤️ 3
👍 3
augustl11:03:07

kanskje litt teit spørsmål, men tar sjansen: har du merka noen bonus-effekter av å øke mengden data og få ned mengden state i render-steget? Fordeler, ulemper, overraskelser, osv?

magnars11:03:43

Jeg er ikke helt ferdig med portingen enda, så har ikke fått følt noe særlig på det annet enn hvor koselig koden ser ut. 😅 Det var jo også dumdom fra før, så mye var på plass fra før også. Det jeg koser meg mest med nå er at jeg har fått flyttet ut "det siste" maskineriet fra hiccup'en min, altså :on-mount hooks og slikt.

augustl11:03:23

håper fortsettelse følger! Ser for meg det kan komme uante og uforutsette fordeler ut av å ha GUI som 100% data

slipset13:03:38

Jeg synes jo det er kjempeflott å ikke måtte forholde seg til skumle makroer og nye konsepter, selvom defcomponent kanskje ikke er av de verste.

slipset13:03:00

Det gjør alt litt mindre magisk.

odinodin13:03:26

Endelig har man UI-utvikling hvor View = F(Data) :star-struck:

lambdalove 4
odinodin13:03:41

Det er så vanvittig kult at det er mulig, men også trist at nesten ingen kommer til å ta det i bruk 😂

cjohansen13:03:35

Litt trist at det aldri når massene, men jeg sier meg fornøyd med at ihvertfall jeg får et kult verktøy 😄

🎯 6
slipset14:03:33

Du må bare lage det samme i ts 🙂

slipset14:03:41

replicant.ts liksom

augustl14:03:03

the world will be conquered by replican.ts

cjohansen14:03:58

Hadde jeg bare hatt spor av interesse for Typescript 🙃

slipset14:03:39

glem Typescript, tenk verdensherredømme!

cjohansen14:03:06

"Jeg skulle ønske at mange mennesker rundt verden stilte krav til meg om å jobbe på dette open source prosjektet som jeg ikke en gang bruker selv" 😅

cjohansen14:03:07

Det er du som er TS-utvikleren her @U04V5VAUN, så jeg overlater all æren til deg 😊

augustl14:03:30

lett, bare bruk AI til å porte cljs-koden til typescript!

cjohansen14:03:09

Da får du et produkt med akkurat den fingerspissfølelsen jeg forventer av det miljøet

slipset14:03:21

Disser du miljøet mitt?

cjohansen14:03:21

Ja, jeg gjør vel det

magnars14:03:05

No respect intended!

😂 5