Fork me on GitHub
#clojure-norway
<
2023-10-24
>
teodorlu06:10:02

Om ,,-scriptene mine over - ja, hvis man kun lever i editor og REPL, trenger man sjelden en terminal. Så selv git clone kjører dere fra Margit? Så dypt ned i Emacs-hullet har ikke jeg kommet (ennå) 😄

cjohansen06:10:25

Hva har Margit med dette å gjøre? 😄

😂 1
leifericf06:10:39

Haha! Nå har jeg lyst til å lage et Git-relatert bibliotek bare for å kunne kalle det Margit, som for øvrig var min kjære bestemors navn: Margit Juliane (Sørlie) Fredheim.

😁 2
teodorlu06:10:34

Jeg starter gjerne opp en terminal for å klone ned repoer, for å starte å kode, og for å bytte mellom repoer. Så terminalen min kommer ofte fra at jeg trenge å gjøre noe Git-greier! Tenker at hvis jeg hadde kunnet mer Magit (Margit), hadde jeg holdt meg lenger i Emacs.

cjohansen06:10:21

Bruker du git til å bytte mellom repoer? :thinking_face:

teodorlu06:10:24

Jeg har skrevet shell-kommandoer som kobler de to. $ ,git-clone-cd cjohansen/portfolio kloner repoet ned i dev/cjohansen/portfolio og CD-er inn. Hvis jeg allerede har klonet repoet er operasjonen kun CD. $ p gir meg alle repoene jeg har klonet, og lar meg velge repo med fzf, så CD-er jeg dit.

cjohansen06:10:58

Skjønner 😄

teodorlu06:10:17

> Bruker du git til å bytte mellom repoer? :thinking_face: > Så... Litt ja? Men innser at det kanskje er uvanlig 😄

cjohansen07:10:32

Jeg har i praksis samme greie i Emacs, bare at den ikke gjør clone:

cjohansen07:10:21

Den bytter perspektiv til en av prosjektene Emacs kjenner til - som basically er alle prosjekter med en .git som jeg har vært innom minst én gang før

👍 1
magnars08:10:49

M-! er shell-command , så ja, M-! git clone ...

👍 1
cjohansen06:10:50

Akkurat clone gjør jeg i terminalen. Men git init har jeg flytta til magit 😊

👍 1
cjohansen06:10:17

Jeg har en terminal oppe, men jeg bruker den langt mindre aktivt enn jeg gjorde før

teodorlu06:10:09

Kan jeg spørre hva slags ting du feks gjør i den?

cjohansen06:10:58

Ja, jeg starter datomic-transactoren

cjohansen06:10:23

Skavvisjå, får bla litt

cjohansen06:10:28

• ngrok • git clone • gcloud-greier Jeg tror mesteparten av det som er i historikken min nå kan beskrives med "teste at bygg-greiene jeg har laget fungerer"

cjohansen06:10:37

Typ, noe docker-greier, make, gcloud osv

teodorlu06:10:42

Jaaa. Så mye one-off-kommandoer? De vil du kanskje bare se output på umiddelbart. Jeg tenker på scriptene mine, de er jo laget mer for å kunne kna data.

cjohansen06:10:02

Nettopp. Det har jeg basically slutta med - det skjer i REPL-et

cjohansen06:10:09

Og så bruker jeg ripgrep i emacs

teodorlu06:10:41

Jeg har begynt å få godfølelsen når jeg bruker Dired selv, elsker å gå rundt med en vanlig editor, ikke måtte ls-e hele tiden, og å kunne gå raskt opp med -.

cjohansen06:10:32

Hvis du ikke bruker dem allerede vil jeg anbefale å sjekke ut projectile og perspective til Emacs, de hjelper med prosjekt-isolasjon https://github.com/bbatsov/projectile https://github.com/nex3/perspective-el

teodorlu06:10:23

Bruker projectile! Velg-prosjekt-så-fil var en del av inspirasjonen for min greie. Det er ikke alltid jeg har hatt Emacs oppe, har brukt litt andre editorer, særlig når jeg jobber i andre språk enn clojure. Perspective har jeg aldri hørt om!

teodorlu06:10:50

Perspective ser spennende ut. Takk!

slipset06:10:09

Selvom Margot tilbyr kloning (`M-x magit-clone`) så pleier jeg å gjøre det i terminalen, ja. Jeg bruker terminalen til å kjøre frontend, logge meg inn på div maskiner, men er stort sett i Emacs, ja.

👍 1
cjohansen06:10:13

Du burde teste ut dette ClojureScript-greiene en gang @slipset, da kan man kjøre frontenden i Emacs også :face_with_cowboy_hat:

cjohansen06:10:53

Min terminal kjører datomic, og sporadisk make

slipset06:10:56

Det er ikke den veien Ardoq går

😢 2
augustl06:10:44

god morgen!

infosophy07:10:02

Nå som dagene blir mørkere og kaldere, trekkes tankene i retning av de viktige årstidsvalgene: Er det flere her er stemt for å være med på Advent of Code (#adventofcode) i år?

cjohansen07:10:33

Jeg prøvde meg på det i fjor. Syns det var jævla artig, men det ble veldig tidkrevende etterhvert 😅

infosophy07:10:35

Amen. Pleier å falle av etter hvert. Dels fordi oppgavene blir mer tidkrevende, dels fordi virkeligheten (typisk førjulsaktiviteter) og familieforpliktelser innhenter meg.

infosophy07:10:51

Men er veldig gøy så lenge det varer!

cjohansen07:10:10

Ja, den komboen ble ganske brutal etterhvert

cjohansen07:10:41

Dessuten ble det også ganske vanskelig, det beveget seg over et algoritme-rike der ikke jeg er konge 😄

augustl07:10:52

hadde vært gøy med en “advent of practical programming” 😄 Dag 18, få denne gamle oracle-databasen til å kjøre spørringa på mindre enn 10 sekunder

😂 1
👍 1
infosophy07:10:16

Jeg prøver hvert år å komme lenger i å finne/lære idiomatiske (eller i hvert fall funksjonelt heller enn proseduralt programmerte) løsninger på de vanskeligere datasett- og algoritmeproblemene. Og forhåpentligvis løse senere lukers oppgaver, selv om det ikke blir på samme dag som luka åpnes…

infosophy07:10:54

Er masse ny løsningstenkning som må læres.

infosophy07:10:27

Hard doktrine: Ikke tillatt å studere andres løsning på en oppgave før jeg har en riktig løsning på plass selv, eller har kastet inn håndkleet for året. Dermed får jeg to læringsrunder for hver oppgave. Først en full av voksesmerter, og så en runde med «Ahaa!», «wow…!», «Selvfølgelig!» og «går det an å gjøre det?!?»

infosophy07:10:35

Serveres hver dag en dose innsikt «with a side order of humble pie».

2food07:10:45

llllllllllllllllllllllll'

2food07:10:49

'''''''''''

2food07:10:18

ånei haha

cjohansen07:10:19

@U03E3JVKLRF hva slags alve-morsekode er dette? 😄

😂 2
cjohansen07:10:30

Har nissen mistet lasten sin i skogen igjen?

2food07:10:48

Lar det stå for humorens skyld 😆

👏 2
infosophy08:10:27

Katt på tastatur?

cjohansen08:10:43

Da ville jeg forventet mer variasjon i valg av tegn

💯 1
2food08:10:10

Nei, flyttet meg til møterom og bar pc-en på en rar måte

2food08:10:12

Men jeg er forøvrig gira på advent of code!

slipset09:10:55

Jeg er litt der som @U9MKYDN4Q er. Problemene er veldig langt utenfor ting jeg er sterk på.

infosophy10:10:49

Samme. Er mye av grunnen til at jeg prioriterer å delta.

cjohansen10:10:29

Ja, jeg lærte en del ifjor. Fikk brukt noen kjente algoritmer for første gang 🙂

oddsor13:10:36

Jeg blir med i år også 👍 Kom nesten i mål med fjorårets oppgaver, men de tok tid 🙈

teodorlu08:10:14

Et siste ,,-eksempel før jeg gir meg:

$ cat ~/plot.json                                                                      
{
  "mark": "point",
  "data": {
    "values": [
      {"x": 0, "y": 1}, {"x": 1, "y": 10},
      {"x": 2, "y": 100}, {"x": 3, "y": 1000},
      {"x": 4, "y": 10000}, {"x": 5, "y": 100000},
      {"x": 6, "y": 1000000}, {"x": 7, "y": 10000000}
    ]
  },
  "encoding": {
    "x": {"field": "x", "type": "quantitative"},
    "y": {"field": "y", "scale": {"type": "log"}}
  }
}
$ cat ~/plot.json | ,,from-json | ,, :data :values | ,,thread-last '(map (juxt :x :y))'
([0 1]
 [1 10]
 [2 100]
 [3 1000]
 [4 10000]
 [5 100000]
 [6 1000000]
 [7 10000000])
Så får vi se hva som skjer neste gang jeg får et jq-liknende problem!

cjohansen08:10:41

Veldig kult!

cjohansen08:10:47

Regner med at du kjenner til jet også?

teodorlu08:10:53

Jepp! Mulig eksempelet over hadde blitt mer kompakt med jet. Men jeg har aldri klart å lære meg verken jet eller jq godt nok til at syntaksen sitter skikkelig i fingrene. Har tenkt at jeg heller vil lene meg på Clojure-funksjoner!

teodorlu08:10:36

babashka har også noen interessante CLI-argumenter for å ta EDN på input, og gi EDN på output. De husker jeg heller aldri helt. Men et lite bb-kall passer jo da godt inn sammen med ,,-kommandoene.

cjohansen08:10:15

Digg å bare forholde seg til vanilla Clojure

1
terjesb08:10:58

❯ cat ~/plot.json | jet -k -i json -t ':data :values (map (juxt :x :y))'
([0 1] [1 10] [2 100] [3 1000] [4 10000] [5 100000] [6 1000000] [7 10000000])

💯 1
teodorlu09:10:22

Færre bokstaver med jet. Nice!

cjohansen09:10:39

(comment
  (-> "~/plot.json"
      
      slurp
      (cheshire.core/parse-string keyword)
      :data
      :values
      (->> (map (juxt :x :y))))
)

👍 1
teodorlu09:10:55

Her er en litt kortere variant av mine verktøy over:

$ cat ~/plot.json | ,,from-json | ,,thread-last :data :values '(map (juxt :x :y))' 
([0 1]
 [1 10]
 [2 100]
 [3 1000]
 [4 10000]
 [5 100000]
 [6 1000000]
 [7 10000000])
Fremdeles noen bokstaver lenger enn jet.

👍 1
cjohansen09:10:18

Eksempelet mitt over kan auto-completes mye med Emacs, og lagres i en fil til senere bruk 🙂

👍 1
teodorlu09:10:56

Tanken med ,, -greiene har også vært litt “jeg vil gjøre det lett å jobbe videre med dette fra en REPL”

Zeniten10:10:46

Hvordan jobber folk med datoer osv. for tiden? Jeg ønsker å konvertere Unix time (e.g. 1698141295) til formatet yyyy-MM-dd.

Zeniten10:10:10

Jeg er i Babashka-land.

cjohansen10:10:30

Vil det si at du ikke har Java time?

Zeniten10:10:45

Jeg tror at man ikke har det. Har du en kort kodesnutt som jeg kunne ha testet det med?

cjohansen10:10:20

(java.time.Instant/now)

Zeniten10:10:52

Ok, jeg har Java time.

cjohansen10:10:28

(let [instant (java.time.Instant/ofEpochSecond 1698141295)]
  (-> (java.time.format.DateTimeFormatter/ofPattern "yyyy-MM-dd")
      (.format (.atZone instant (java.time.ZoneId/of "Europe/Oslo")))))

👍 1
cjohansen10:10:27

Eventuelt

(import [java.time Instant ZoneId])
(import [java.time.format DateTimeFormatter])

(let [instant (Instant/ofEpochSecond 1698141295)]
  (-> (DateTimeFormatter/ofPattern "yyyy-MM-dd")
      (.format (.atZone instant (ZoneId/of "Europe/Oslo")))))

👍 1
Zeniten10:10:56

👌 Takk, det fungerer fint!

magnars10:10:01

java.time er bra greier

2food10:10:01

Jeg bruker mye https://github.com/juxt/tick som wrapper java.time og gir litt mer snacks som cljs-kompabilitet

👀 1
augustl11:10:23

java.time har 100% korrelasjon mellom knotete API-er og knotete ting i virkeligheten. Ingen snarveier!

🎯 2
😁 1
Zeniten10:10:41

Hva synes dere om navngivningen her? Jeg liker godt ->-konvensjonen, men hm ... Har dere eventuelt andre forslag?

mr-burns-excellent 1
magnars10:10:56

Jeg syns navnet er helt supert.

anders10:10:50

Bifalles 👍

cjohansen10:10:36

Vi bruker også ofte -> for konverteringer

augustl11:10:34

her kan man også slippe unna å navngi instant og bare bruke threading macro hele veien 😄

(-> (java.time.Instant/ofEpochMilli 1698145907000)
    (.atZone (java.time.ZoneId/of "Europe/Oslo"))
    (.format (java.time.format.DateTimeFormatter/ofPattern "yyyy-MM-dd")))

👌 4
cjohansen11:10:22

Jaggu! Sløvt av meg 🙈

😂 2
augustl11:10:30

man skal alltid påpeke “more threading macro” der det går, selv om det ikke etterspørres!

msolli12:10:30

Her kan man til og med bruke .. :

(.. (java.time.Instant/ofEpochMilli 1698145907000)
    (atZone (java.time.ZoneId/of "Europe/Oslo"))
    (format (java.time.format.DateTimeFormatter/ofPattern "yyyy-MM-dd")))

🚀 1
schmandle13:10:33

gjør du support på deps-deploy her @slipset?

schmandle13:10:03

jeg får den ikke til å plukke opp brukernavn/passord hverken fra systemvariabler eller fra ~/.m2/settings.xml . Hvis jeg legger dem rett inn i deps.edn fungerer det. Jeg publiserer til en privat artifactory

schmandle13:10:07

uten navn/passord i deps.edn skriver den ut "Deploying no.nsd/re-tool-0.0.9 to repository sikt-maven ." som vel betyr at :username ikke er definert.

slipset13:10:36

$ env CLOJARS_USERNAME=username CLOJARS_PASSWORD=clojars-token clj -X:deploy
Funker ikke?

slipset13:10:26

Det er nok fordi det ikke kan funke 🙂

slipset13:10:27

Så jeg har vel egentlig bare laget støtte for brukernavn og passord til clojars, ikke til vilkårlig repo?

schmandle13:10:53

ah. det forklarer nok ting ja

slipset13:10:15

Merk at det jeg skriver nå kan bare være vås, det er lenge siden jeg har sett på denne koden.

slipset13:10:08

$ env CLOJARS_URL= CLOJARS_USERNAME=username CLOJARS_PASSWORD=password clj -A:deploy
Burde kanskje funke?

slipset13:10:08

dvs at du forteller deps deploy at clojars er et annet sted?

schmandle13:10:34

nei, plukker fortsatt ikke opp username:

env CLOJARS_URL= [email protected] CLOJARS_PASSWORD=****** clj -X:deploy
Deploying no.nsd/re-tool-0.0.9 to repository sikt-maven .
Sending no/nsd/re-tool/0.0.9/re-tool-0.0.9.pom (1k)
    to 

schmandle13:10:06

men hvis jeg fjerner :repository fra deps.edn fungerer det

schmandle13:10:35

så problemet er å sette url i deps.edn og username/password i systemvariabler ser det ut til

schmandle13:10:36

jeg kunne prøvd meg på en pr. men er maven føles som et minefelt. skumle greier 😕

slipset13:10:46

No shit 🙂

slipset13:10:32

Hvordan ser :repository ut i din deps.edn?

schmandle13:10:50

{"sikt-maven" {:url ""}}

slipset13:10:14

bruk clojars heller enn sikt-maven der tenker jeg så skal du se at Bob blir onkelen din.

schmandle13:10:39

det hjalp ikke

schmandle13:10:57

men, ok, dette er gjerne ikke riktig forum. Jeg oppretter en issue og ser om jeg klarer å lage en fiks. Akkurat å sette sammen denne options mapen foregår vel stort sett i et komfortabelt clojure landskap?

slipset13:10:56

erik@keep deps % cat deps.edn
{:aliases {:deploy {:extra-deps {slipset/deps-deploy {:mvn/version "RELEASE"}}
          :exec-fn deps-deploy.deps-deploy/deploy
          :exec-args {:installer :remote
                       :sign-releases? false
                       :repository {	"clojars" {:url ""}}
                       :artifact "deps-deploy.jar"}}}}
erik@keep deps %
Jeg har denne nå, har ikke gjort så mye mer, men ser nå at den forsøker å laste opp til (et sted jeg ikke har konto)

slipset13:10:31

Jeg synes da at

env [email protected] CLOJARS_PASSWORD=xxx clj -X:deploy
burde ha virket dersom hadde en konto der med passord xxx

slipset13:10:48

Og jeg synes vel at det er en bug dersom det ikke virker 🙂

schmandle13:10:03

skriver den ut "Deploying no.nsd/re-tool-0.0.9 to repository clojars as <mailto:[email protected]|[email protected]>" da ?

slipset13:10:35

Deploying deps/deps-0.1.0 to repository clojars .
Sending deps/deps/0.1.0/deps-0.1.0.pom (1k)
    to 
Could not transfer artifact deps:deps:pom:0.1.0 from/to clojars (): Transfer failed for  401 Unauthorized
Sending deps/deps/0.1.0/deps-0.1.0.jar (1k)

schmandle13:10:03

Det punktumet der navnet skulle vært betyr vel at :username er nil slik jeg leser koden

schmandle13:10:16

Når jeg la inn navn og passord rett i :repository i deps.edn skrev den "Deploying no.nsd/re-tool-0.0.9 to repository sikt-maven as <mailto:[email protected]|[email protected]>"

schmandle13:10:22

og da ble den lastet opp

slipset13:10:13

Koden var i sin tid skrevet slik at det burde være mulig å gjøre alle bivirkningsfrie greier i et repl.

slipset13:10:07

dvs, det burde være mulig å fikle md dette i et repl evt test.

slipset13:10:14

(hvis du har lyst til å leke med det)

schmandle13:10:15

her er ditt forsøk i artifactory loggen:

2023-10-24T13:27:40.432Z [a1d64d6c6ce62a39] [DENIED DEPLOY] maven-public-releases-local:deps/deps/0.1.0/deps-0.1.0.pom  for client : NA / 88.92.248.217
client: NA tyder på at du ikke har sendt brukernavn

slipset13:10:30

er problemet (tror jeg)

schmandle13:10:31

jeg gjør et forsøk. Skal ihvertfall klare å lage en issue 🙂

schmandle13:10:50

ja, det virker sansynlig

slipset13:10:00

hvis du spesifiserer et repository tar vi ikke hensyn til env-vars.

schmandle13:10:27

og heller ikke .m2/settings.xml

slipset13:10:40

PR welcome, som vi sier 🙂

schmandle08:10:15

Det var ganske rett fram. PR sendt

slipset11:10:09

Skal se om jeg ikke kan få releaset en gang i løpet av dagen også.

slipset11:10:25

Takk for hjelpen!

schmandle11:10:28

takk for deps-deploy 🙂

slipset18:10:22

0.2.2 er ute.

💯 1