clojure-norway

hypirion 2025-11-14T06:36:07.353259Z

Morn!

odinodin 2025-11-14T07:01:55.796719Z

morn

2025-11-14T07:02:30.644549Z

Hva gjelder det?

odinodin 2025-11-14T07:44:48.302619Z

tenkte det var en spesielt god morgen, sola skinner og det er blå himmel 😂

😂 5
cjohansen 2025-11-14T07:48:20.674659Z

I så fall syns jeg du kunne kosta på deg et utropstegn @odinodin

😂 1
odinodin 2025-11-14T07:50:34.951669Z

😅

2025-11-14T08:10:40.521909Z

Jeg mistenker at Terje har flyttet sin SoMe-strategi til en agentisk AI. 😂

😂 4
2025-11-14T08:12:20.700039Z

Forrige melding fra meg var vel en YubiKey-kode som kom feil.. har vi en kanal hvor jeg kan øve litt på Slack?;)

😂 4
leifericf 2025-11-14T08:26:54.056169Z

Her sier alle god morgen. Men kun én får refs. Sånn er det noen ganger.

😂 1
boosja 2025-11-14T07:03:01.781479Z

Morn!

cjohansen 2025-11-14T07:04:46.343869Z

Morn!

2025-11-14T07:47:24.104409Z

mårn

msolli 2025-11-14T07:48:41.321379Z

Morn!

2025-11-14T08:10:56.791519Z

👋

leifericf 2025-11-14T08:25:43.713729Z

Morn!

cjohansen 2025-11-14T08:27:48.739479Z

Hva gjelder det?

1
😂 3
leifericf 2025-11-14T08:40:04.512459Z

Jeg har prøvd å nå deg ang. forsikringen din. Hva betaler du i dag?

😂 4
cjohansen 2025-11-14T08:40:39.325439Z

Er det dette som er Pig butchering?

🔪 1
🐷 1
leifericf 2025-11-14T08:43:10.886489Z

Ja, egentlig er jeg forsikringsmegler. De siste 5~6 årene med Clojure-læring har kun vært for å vinne deres troverdighet og tillit. Nå føltes tiden riktig. #VerdensMestLidenskapeligeForsikringsselger

😂 5
Olav 2025-11-14T08:37:54.501559Z

morn!

teodorlu 2025-11-14T08:40:43.150629Z

morn!

gunnar 2025-11-14T08:51:03.212589Z

Morn!

Zeniten 2025-11-14T08:57:55.840589Z

Morn!

2025-11-14T12:13:06.100079Z

god morgen!

leifericf 2025-11-14T14:52:13.283869Z

Jeg mistenker at dette kan gjøres på en mer elegant måte, men jeg vet ikke hvordan. Denne funksjonen sjekker om et map-verdi inneholder visse termer:

(defn field-contains?
  [map key terms]
  (some #(str/includes?
          (str/lower-case (key map))
          (str/lower-case %))
        terms))
Eksempel på hvordan jeg bruker den:
(->> employees
     (filter #(field-contains? % :jobTitle ["architect"
                                            "devops"
                                            "engineer"
                                            "programmer"
                                            "programming"
                                            "scripter"
                                            "systems"
                                            "tech"
                                            "technical"]))
     (map :workEmail)
     (map str/lower-case)
     (distinct)
     (sort)
     (dump-to-file "emails.txt" "output"))
Det er denne biten jeg synes ser ganske stygg/uleselig ut:
(filter #(field-contains? % :jobTitle ["architect"
                                            "devops"
                                            "engineer"
                                            "programmer"
                                            "programming"
                                            "scripter"
                                            "systems"
                                            "tech"
                                            "technical"]))
Hvordan hadde dere gjort dette?

leifericf 2025-11-17T09:15:39.108619Z

Min dump-to-file ser slik ut:

(defn dump-to-file
  "Dump data as plain text to file in specified directory."
  [file-name dir-name data]
  (let [path (fs/path (fs/cwd) dir-name)]
    (when-not (fs/exists? path)
      (fs/create-dirs path))
    (spit (str (fs/path path file-name))
          (str/join "\n" data))))
Jeg bruker den slik:
(->> employees
       (map :jobTitle)
       (distinct)
       (sort)
       (dump-to-file "job-titles.txt" "output"))

slipset 2025-11-17T09:27:51.728969Z

Jeg ville helt sikkert påstått at det å regne ut hvor noe skal skrives er ortogonalt fra det å skrive det ut.

leifericf 2025-11-17T10:34:44.674949Z

True!

msolli 2025-11-14T15:07:48.348349Z

Jeg hadde ekstrahert en mer fokusert funksjon:

(defn has-job-title?
  [job-titles]
  #(field-contains? % :jobTitle job-titles))

(->> employees
     (filter (has-job-title? ["architect"
                              "devops"
                              "engineer"
                              "programmer"
                              "programming"
                              "scripter"
                              "systems"
                              "tech"
                              "technical"]))
     #_osv.)
Og kanskje også lista med titler:
(def tech-jobs ["architect" "devops" "engineer" "programmer" "programming"
                "scripter" "systems" "tech" "technical"])

(->> employees
     (filter (has-job-title? tech-jobs))
     #_osv.)
(`tech-jobs` kan også være i en let rundt uttrykket ditt, litt avhengig av hvordan koden er organisert.)

👍 1
👀 1
leifericf 2025-11-14T15:16:29.617059Z

Det gir mening! Takk for tips. Det var faktisk mer slik i starten, så gikk jeg antagelig for langt i den «generelle/abstrakte» retningen 😅

leifericf 2025-11-14T15:17:58.411199Z

Merker jeg ofte tenker at jeg har for mange små domenespesifikke funksjoner istedenfor å bruke innebygde funksjoner «utenfor» når jeg kombinerer dem.

leifericf 2025-11-14T15:19:13.318059Z

Jeg må bli flinkere til å finne riktig abstraksjonsnivå å legge meg på.

msolli 2025-11-14T15:20:33.083159Z

Altså, det er ingenting i veien med det du viste først heller. Man må nesten velge selv ut fra situasjonen hvor man vil legge seg på abstraksjons-spekteret. 🙂 Jeg pleier å begynne ikke-abstrakt men domene-nært. Tiden viser om det er lurt å abstrahere.

👍 1
slipset 2025-11-15T02:29:04.559079Z

Det første jeg hadde tenkt her, var å putte alle stillingstitlene i et set fordi set er funksjoner. Så:

(def titles #{"devops" "engineer" "programmer"})
;;
(titles "devops") ;;=> "devops"
(titles "wizard") ;;=> "null"
Da kan du golfe litt:
(filter (comp titles str/lower-case :jobTitle) employees)

💡 1
😮 1
slipset 2025-11-15T02:29:41.203059Z

(dump-to-file) høres ut som spit