This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-10-24
Channels
- # announcements (1)
- # babashka (19)
- # beginners (10)
- # cherry (13)
- # cider (12)
- # clerk (10)
- # clj-kondo (5)
- # clojure (8)
- # clojure-europe (30)
- # clojure-norway (155)
- # clojure-uk (8)
- # clojurescript (27)
- # community-development (2)
- # conjure (8)
- # cursive (26)
- # data-science (7)
- # datalevin (58)
- # datomic (9)
- # deps-new (2)
- # hyperfiddle (19)
- # jobs-discuss (9)
- # missionary (27)
- # nbb (22)
- # off-topic (11)
- # polylith (59)
- # practicalli (10)
- # reitit (6)
- # releases (1)
- # sci (5)
- # scittle (23)
- # xtdb (37)
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å) 😄
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.
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.
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.
> Bruker du git til å bytte mellom repoer? :thinking_face: > Så... Litt ja? Men innser at det kanskje er uvanlig 😄
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
Jeg har en terminal oppe, men jeg bruker den langt mindre aktivt enn jeg gjorde før
• 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"
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.
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 -
.
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
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!
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.
Du burde teste ut dette ClojureScript-greiene en gang @slipset, da kan man kjøre frontenden i Emacs også :face_with_cowboy_hat:
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?
Jeg prøvde meg på det i fjor. Syns det var jævla artig, men det ble veldig tidkrevende etterhvert 😅
Amen. Pleier å falle av etter hvert. Dels fordi oppgavene blir mer tidkrevende, dels fordi virkeligheten (typisk førjulsaktiviteter) og familieforpliktelser innhenter meg.
Dessuten ble det også ganske vanskelig, det beveget seg over et algoritme-rike der ikke jeg er konge 😄
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
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…
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?!?»
Jeg er litt der som @U9MKYDN4Q er. Problemene er veldig langt utenfor ting jeg er sterk på.
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!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!
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.
❯ 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])
(comment
(-> "~/plot.json"
slurp
(cheshire.core/parse-string keyword)
:data
:values
(->> (map (juxt :x :y))))
)
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.Eksempelet mitt over kan auto-completes mye med Emacs, og lagres i en fil til senere bruk 🙂
Tanken med ,,
-greiene har også vært litt “jeg vil gjøre det lett å jobbe videre med dette fra en REPL”
Hvordan jobber folk med datoer osv. for tiden? Jeg ønsker å konvertere Unix time (e.g. 1698141295
) til formatet yyyy-MM-dd.
Jeg tror at man ikke har det. Har du en kort kodesnutt som jeg kunne ha testet det med?
(let [instant (java.time.Instant/ofEpochSecond 1698141295)]
(-> (java.time.format.DateTimeFormatter/ofPattern "yyyy-MM-dd")
(.format (.atZone instant (java.time.ZoneId/of "Europe/Oslo")))))
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")))))
Jeg bruker mye https://github.com/juxt/tick som wrapper java.time og gir litt mer snacks som cljs-kompabilitet
java.time har 100% korrelasjon mellom knotete API-er og knotete ting i virkeligheten. Ingen snarveier!
Hva synes dere om navngivningen her? Jeg liker godt ->-konvensjonen, men hm ... Har dere eventuelt andre forslag?

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")))
man skal alltid påpeke “more threading macro” der det går, selv om det ikke etterspørres!
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")))
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
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.
$ env CLOJARS_USERNAME=username CLOJARS_PASSWORD=clojars-token clj -X:deploy
Funker ikke?https://github.com/slipset/deps-deploy/blob/master/src/deps_deploy/deps_deploy.clj#L18
Så jeg har vel egentlig bare laget støtte for brukernavn og passord til clojars, ikke til vilkårlig repo?
Merk at det jeg skriver nå kan bare være vås, det er lenge siden jeg har sett på denne koden.
$ env CLOJARS_URL= CLOJARS_USERNAME=username CLOJARS_PASSWORD=password clj -A:deploy
Burde kanskje funke?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
så problemet er å sette url i deps.edn og username/password i systemvariabler ser det ut til
bruk clojars
heller enn sikt-maven
der tenker jeg så skal du se at Bob blir onkelen din.
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?
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)Jeg synes da at
env [email protected] CLOJARS_PASSWORD=xxx clj -X:deploy
burde ha virket dersom
hadde en konto der med passord xxx
skriver den ut "Deploying no.nsd/re-tool-0.0.9 to repository clojars as <mailto:[email protected]|[email protected]>" da ?
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)
Det punktumet der navnet skulle vært betyr vel at :username
er nil slik jeg leser koden
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]>"
Koden var i sin tid skrevet slik at det burde være mulig å gjøre alle bivirkningsfrie greier i et repl.
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