Fork me on GitHub
#clojure-norway
<
2023-09-23
>
oddsor12:09:44

Fortsetter initiativet til @teodorlu jeg da! https://clojurians.slack.com/archives/C061XGG1W/p1695372852109279 Har et lite babashka-skript som jeg bruker for å slå opp organisasjonsnavn i Brønnøysundsregisteret (som jeg må gjøre overraskende ofte):

(ns brreg
  (:require [clojure.string :as str]
            [babashka.curl :as curl]
            [cheshire.core :as json]))

(defn hent-orgnavn [orgnr]
  ; 
  (let [res (curl/get (str "" orgnr)
              {:throw false})]
    (if (= 200 (:status res))
      (-> res
          :body
          (json/parse-string true)
          :navn)
      (str "ERROR: "
           (or (-> res :body (json/parse-string true) :valideringsfeil first :feilmelding)
               (:status res))))
    ))
(defn -main [& args]
  (doseq [arg (distinct args)]
    (println (str arg ": " (hent-orgnavn arg)))))
Blir seende slik ut:
> brreg 124 889640782 911719037 911719030
124: ERROR: Organisasjonsnummer må være et nummer med nøyaktig 9 siffer
889640782: ARBEIDS- OG VELFERDSETATEN
911719037: ARBEIDS- OG VELFERDSDIREKTORATETS PENSJONISTFORENING
911719030: ERROR: 404
Usikker på om jeg syns det er særlig pent eller særlig stygt jeg :thinking_face: Men jeg tenker det slår bash-ekvivalenten!

💯 2
oddsor12:09:58

Shell-skriptet som kaller brreg.clj ser enkelt og greit slik ut og ligger i en bin-mappe:

> cat brreg
#!/usr/bin/env bash
bb --init "$(dirname $0)/brreg.clj" -m brreg "$@"

🎉 1
teodorlu12:09:09

Kult at du bruker HTTP-responskoder og feilmeldinger fra HTTP-body direkte som feilmeldinger i scriptet!

😊 1
teodorlu12:09:00

> Men jeg tenker det slår bash-ekvivalenten! Jeg prøver å se for meg sjekk av responskoder og graving ned i JSON med bash-conditionals og jq. Får vont i magen av tanken 😄

😁 1
oddsor12:09:22

Hvis jeg skulle hatt en 10-minutters intro til Clojure for folk som kan javascript eller java, men ikke Clojure; hva er et eksempel på noe kult med språket som man kan vise frem? thinking-face Makroer er kule, datatransformasjon med walk og lignende… Annet?

Zeniten12:09:25

REPL-drevet utvikling, kanskje?

2
teodorlu13:09:18

jeg tror det hadde vært spennende å se deg jobbe på brreg-koden din direkte i en REPL! Definere et sted å starte, så kna det til du har informasjonen du trenger.

teodorlu13:09:04

(spørs veldig på publikumet ditt)

stefanvstein14:09:49

Effekten av att vara immutable rakt igenom. Att påvisa historik, och rulla tillbaka, utan komplicerad kod kan vara effektfullt.

👍 1
Jakub Holý (HolyJak)10:09:55

Macros er ikke noe man bruker til vanlig. For meg, det viktigste er REPL-drevet dev, og det ville jeg vise frem (som jeg gjør i https://github.com/holyjak/interactive-dev-wshop). Ellers kanske “alt er data” - fra jdbc output til både request og dens body (som er også synlig i 👈 ). Da kan man lett få data fra et sted til et annet, med noen transformasjoner, uten masse pakke ut/pakke inn i forskjellige klasser. Og alt det utviklet stegvis med repl…

❤️ 1
stefanvstein06:09:45

Jag nämnde effekten av att vara immutable, för att jag tycker att tämja komplexitet är det viktiga. Jag tror det är grundbulten till att göra program som är lätta att leva med över tid. Men det här uppnår vi med funktionell programmering. Sen finns massor med fördelar med Clojure, som enkla datatyper, kod som data, programmering av levande system, som kanske gör Clojure bättre, effektivare, än andra funktionella språk. Om publiken är en samling imperatister med erfarenhet, skulle jag nog välja effekten av att vara immutable rakt igenom. Ska man föreläsa för en samling F# programmerare är saken en helt annan.