Fork me on GitHub
#clojure-norway
<
2023-06-29
>
leifericf06:06:35

God morgen alle sammen! Ha en strålende dag 🌻

❤️ 4
mariuene07:06:16

God morgen til alle sammen, men spesielt til Leif fordi han var så hyggelig med meldingen sin!

🌸 4
magnars08:06:53

Leif er en trivelig type, vet du. God morgen, ja! ☀️

😇 2
slipset09:06:40

God lunch

🍱 2
leifericf10:06:17

Jeg har nå gjort et første forsøk på å dele opp mine shell utils i flere filer/namespaces: https://github.com/leifericf/leifs-utils/tree/main/src/leifs_utils Og det funker ganske greit egentlig. Men! Når jeg stenger VS Code/Calva eller starter REPL på nytt, så får jeg ikke automatisk lastet inn alle namespaces som er inkludert via :require. Så jeg må innom hver enkelt fil evaluere dem på nytt i REPL, som er tungvindt og sikkert dumt 😅 Hvordan "evaluerer man alle expressions i alle namespaces" når man starter et nytt REPL?

magnars10:06:24

Nå vet ikke jeg hvordan det fønker i babashka, men vanligvis kan man legge til requires i user.clj , så blir det dratt inn automatisk i replet. 🙂

💡 2
leifericf10:06:11

Ooooh, ja, det er kanskje en Babashka-spesifikk greie. løper til docs

Fredrik17:06:08

Fant du ut av det? Tror å slenge på {:paths ["src"]} i bb.edn bør funke. I tillegg er det en syklisk avhengighet som f.eks. kan fikses ved å fjerne leifs-utils.file-system/home og heller bruke babashka.fs/home direkte i leifs-utils.settings.

👍 2
leifericf19:06:39

Jeg prøvde det med bb.edn men fikk det ikke til å fungere. Kanskje jeg gjorde noe feil. Men @U3X7174KS har også gitt meg mange gode tips som jeg har tenkt å teste ut på kontoret i morgen hvis jeg får tid.

leifericf19:06:43

Er det forresten en funksjon eller et bibliotek man kan bruke for å avdekke sykliske avhengigheter programmatisk?

teodorlu19:06:34

Såvidt jeg kunne skjønne lastes ikke user.clj som default når du starter en REPL med bb. Men jeg er åpen for å bli motbevist, synes det var litt rart.

teodorlu19:06:25

> Sykliske avhengigheter > Jeg fikk en feilmelding som advarte meg mot sykliske avhengigheter rett i REPL. Kanskje du får noe likende i Calva når du prøver å importere et ns? https://github.com/leifericf/leifs-utils/pull/1#issuecomment-1613154093

💡 2
Fredrik20:06:51

Jeg får beskjed at clojure.core/load ikke finnes (brukes i leifs-utils.settings). Prøvde bytte ut med load-file, det funka bedre. Så når jeg 1. bruker load-file i stedet for load 2. legger {:paths ["src"]} i bb.edn 3. fikser syklisk avhengighet så virker bb og replet slike jeg forventer at det bør 🙂

😮 2
Fredrik20:06:52

Tipper grunnen til at load ikke fins er at den bruker kompilatoren til Clojure, som ikke finnes i Babashka.

leifericf08:06:38

Aha! Etter å ha restartet REPL ser jeg også feilmeldingen om sykliske avhengigheter, ja.

; clojure.lang.ExceptionInfo: Cyclic load dependency: [ leifs-utils.settings ]->leifs-utils.file-system->[ leifs-utils.settings ]

👍 2
leifericf08:06:11

Ahaaa, når det gjelder load var jeg ikke oppmerksom på at den fantes fra før av.

(ns leifs-utils.settings
  (:require [clojure.edn :as edn]
            [leifs-utils.file-system :as file]))

(def settings (load "settings.edn"))

(defn load [path]
  (edn/read-string (slurp path)))

(defn get-repo-root-path []
  (str (file/home) (:local/repo-root-dir settings)))

(comment
  (get-repo-root-path))
Her trodde jeg (def settings (load "settings.edn")) brukte min versjon av load og ikke clojure.core/load.

leifericf08:06:26

Jeg har visst også gjort samme feil her:

(ns leifs-utils.time
  (:import [java.time ZonedDateTime]
           [java.time.format DateTimeFormatter]))

(defn now []
  (ZonedDateTime/now))

(defn format [timestamp pattern]
  (.format timestamp (DateTimeFormatter/ofPattern pattern)))

(comment
  (-> (now)
      (format "yyyyMMdd-HHmmss")))
Hvor min funksjon format krasjer med clojure.core/format.

leifericf10:06:31

Nå funker det, ja! Jeg måtte bare fikse de dumme feilene mine, og putte {:paths ["src"]} i bb.edn.

augustl10:06:25

det er kanskje mere en REPL-greie? Alle (?) repls starter i namespacet user, så om du lager den fila så blir den evaluert når replet starter opp

💡 2
leifericf10:06:14

Ja, jeg ser dette i alle fall. Så det høres korret ut.

leifericf10:06:55

Også er det et hint her kanskje også:

Evaluating code from settings: 'calva.autoEvaluateCode.onConnect.clj'

leifericf10:06:52

Men kanskje det ikke er lurt med Calva-spesifikk kode hvis en ønsker å bruke andre editorer/REPLs også. (?)

oddsor12:06:29

https://clojure.org/reference/repl_and_main#_launching_a_repl > The REPL prompt shows the name of the current namespace (ns), which defaults to user.

oddsor12:06:14

Hvis jeg starter mitt lille hobby-prosjekt i kommandolinjen (`cli -X:dev`) så lastes user-namespacet. Så dine egne namespaces kan lastes via user-namespacet 😊

oddsor12:06:03

jeg har for eksempel user-namespacet mitt liggende i en dev-folder som kun legges til i “paths” når man bruker :dev-alias.

magnars10:06:21

høres sannsynlig ut, @augustl

leifericf10:06:50

Dette om bb.ednhttps://book.babashka.org/#_classpath virker relevant ved første øyekast.

slipset12:06:54

Ja, det kan sikkert settes opp på en eller annen måte, men antall ganger jeg har trykket b c (branch create) i Magit og skrevet inn navnet på den nye branchen min og så fått beskjed om at den naturlig nok ikke er et gyldig start sted….

cjohansen12:06:34

Hver eneste gang ja @U04V5VAUN 😅 det er nok magit som hinter om at brancher er noe dritt 😄

Jo Øivind Gjernes12:06:06

hva er galt med b s ?

🎉 2
cjohansen12:06:50

Den sitter ikke i fingrene mine 😄

leifericf12:06:40

Har fått mer hjelp i https://clojurians.slack.com/archives/CLX41ASCS/p1688035620542469 🙂 Skal nok klare å finne ut av det med litt mer fikling.

teodorlu12:06:04

> Men! Når jeg stenger VS Code/Calva eller starter REPL på nytt, så får > jeg ikke automatisk lastet inn alle namespaces som er inkludert via :require. > Så jeg må innom hver enkelt fil evaluere dem på nytt i REPL, som er tungvindt og sikkert dumt 😅 > Hvordan "evaluerer man alle expressions i alle namespaces" når man starter et nytt REPL? (edited) @leif.eric.fredheim hva er det du prøver å få til? Jeg skjønner ikke helt 😅 Ønsker du å ha alle funksjonene fra alle navnerommene dine tilgjengelig i ett navnerom (feks user eller repl? Eller ønsker du kun enkelte funksjoner? Eller vil du bare sørge for at du har lastet alle navnerommene én gang (med require) så du får med sideeffekter? feks noe sånt: https://github.com/leifericf/leifs-utils/pull/1 Men jeg støter på et problem med en syklisk avhengighet:

(ns leifs-utils.settings
  (:require [clojure.edn :as edn]
            [leifs-utils.file-system :as file]))
og
(ns leifs-utils.file-system
  (:require [babashka.fs :as file]
            [clojure.string :as str]
            [leifs-utils.settings :as settings]
            [leifs-utils.time :as time]))

❤️ 2
leifericf13:06:31

Problemet jeg opplever er at, når jeg skal jobbe på f.eks. git.clj i REPL, som avhenger av leifs-utils.shell og andre navnerom, så må jeg åpne de andre filene (`shell.clj` i eksempelet) og manuelt evaluere innholdet der, før jeg kan evaluere funksjoner i git.clj. Jeg ønsker å kunne åpne én fil i editoren og jobbe på den i REPL uten å måtte evaluere andre navnerom manuelt først. Beklager den noe klønete forklaringen min fra tidligere. Og takk for PR med eksempel! Mitt livs første PR 🙂

teodorlu13:06:31

> Jeg ønsker å kunne åpne én fil i editoren og jobbe på den i REPL uten å måtte evaluere andre navnerom manuelt først. Sånn jeg forstår det, burde det fungere ut av boksen! I PR-en min funker det fint med en JVM-repl, men jeg får problemer med en babashka-repl.

💡 2
teodorlu13:06:05

Jeg bruker ofte en JVM-repl til å jobbe med babashka-ting. Man kan starte med bb print-deps > deps.edn, så har man en JVM-repl med de samme avhengighetene som man har ut av boksen i babashka. Det er også det @U5H74UNSF anbefaler i babashka-conf-talken sin: https://www.youtube.com/watch?v=KKvancXJJJg

👀 2
teodorlu13:06:54

Jeg la noen eksempler i PR-en. Legger den til side for nå. Tror du kommer langt med en kombinasjon av https://clojuredocs.org/clojure.core/require (funksjonen) og https://clojuredocs.org/clojure.core/in-ns!

🙇 2