This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-11-08
Channels
- # babashka (18)
- # beginners (35)
- # biff (15)
- # cider (24)
- # clj-commons (26)
- # clj-kondo (12)
- # clojure (18)
- # clojure-austin (1)
- # clojure-dev (2)
- # clojure-europe (15)
- # clojure-losangeles (1)
- # clojure-nl (1)
- # clojure-norway (88)
- # clojure-seattle (2)
- # clojure-spec (14)
- # clojure-uk (27)
- # clojuredesign-podcast (5)
- # clojurescript (25)
- # cursive (3)
- # datahike (26)
- # datalevin (13)
- # datomic (39)
- # etaoin (19)
- # events (1)
- # fulcro (12)
- # graphql (1)
- # hyperfiddle (40)
- # introduce-yourself (3)
- # joyride (8)
- # lsp (53)
- # missionary (7)
- # nyc (1)
- # off-topic (31)
- # overtone (10)
- # reitit (6)
- # shadow-cljs (9)
- # slack-help (9)
- # thejaloniki (1)
- # tools-deps (12)
>> If the program produces the correct output after 20 minutes, then one has the rest of the day to play the benchmark game. Often, this beats an attempt in a 'faster' language where fights so hard to get any correct answer that there's never time to try enough different strategies to really find the fastest.
Jeg jobber nÄ med en oppgave hvor jeg trenger en Blob Storage i Azure for en mikrotjeneste som er skrevet i C# .NET. Vi bruker Pulumi (IaC) og scriptene (for eldre mikrotjenester) er skrevet i TypeScript. IaC er nice fordi alt kan versjoneres sammen med koden, men det er en kostnad forbundet med indirekte tilnÊrminger hvor en mÄ lÊre seg en nye verktÞy og bruke et annet programmeringssprÄk for Ä opprette noe som tar 3-4 museklikk i web portalen til Azure. Men det er mange ulemper hvis en gjÞr det manuelt. Bruker folk IaC for Clojure prosjekter? Har dere noen tanker og meninger om IaC generelt og nÄr verdien overveier kostnaden? :thinking_face:
jeg beveger meg i retning mot at man enten drifter sine egne servere, eller bruker et eller annet âproduktâ i mellom seg selv og clouden, som https://arc.codes eller https://sst.dev eller noe lignende. Har for det meste brukt AWS skal sies, men det fĂžles som en platform for Ă„ lage noe pĂ„, ikke et deployment target direkte for folk som skriver businesslogikk
kontekst: hvor âcloudenâ er nĂ„r man bruker alle mulige features i clouden med diverse serverless-greier osv osv, ikke EC2 o.l. Der funker CloudFormation bra
Jeg bruker Terraform pÄ AWS. Tidligere brukte jeg pek-og-klikk pÄ AWS, men jobber med Ä importere infrastrukturen bit for bit til IaC. Skal vÊre den fÞrste til Ä innrÞmme at det mye greier Ä sette opp fÞr man kommer til Ä fÄ appen ut pÄ internettet. VPC, subnets, routing, internet gateways, security groups, etc. Men sÄ er det mulighetene, da! Alt AWS har Ä by pÄ er tilgjengelig med noen fÄ linjer Terraform.
ikke rart Vercel har blitt populĂŠrt! Gi oss git-repoet ditt, great success, alt bare ordner seg
> som https://arc.codes eller https://sst.dev eller noe lignende. Jeg angster for at man lÄser seg inn i noe halv-proprietÊrt og ikke fÄr tilgang til alt skyen har Ä by pÄ. Er det ubegrunnet?
ja, vurderte Ă„ skrive en liten follow up pĂ„ detâŠ. Skummelt med potensiale for churn i fremtiden. https://vier.live bruker Serverless Framework og det byr pĂ„ sitt eget lille sett med utfordringer. Men, om man har lyst til Ă„ vĂŠre serverless, sĂ„ er det i praksis ikke et alternativ Ă„ gjĂžre det 100% manuelt
sÄ et annet godt alternativ der er kanskje AWS SAM, siden det er Amazon sin egen greie. Vil tro det er alternativet med lavest sjanse for churn
Vi bruker dette, som er open source: https://www.pulumi.com Men vi betaler vel for "Cloud" versjonen tror jeg.
Med Pulumi kan man ogsÄ skrive "IaC-scriptene" i Clojure (eller et hvilket som helst annet sprÄk).
Hvis man har tiden Ä bruke pÄ det, sÄ er det Ä lÊre seg plattformen man opererer pÄ en god investering. Kommer som vanlig an pÄ sÄ mye.
enig - egentlig er det en fin syretest pĂ„ oppsettet sitt at man kan lage ting manuelt i konsollet, og sĂ„ âta det overâ med IaC-en sin. F.eks Serverless Framework er dĂ„rlig der, den mĂ„ lage og eie sine egne ting, den kan ikke bruke en dynamodb-instans du har laget selv osv osv
terraform import
er digg! Man kan eksperimentere litt i konsollet, som du sier, og sÄ fÄ litt orden i systemet nÄr man ser hva som funker.
enig, Ä bruke terraform er fint om du ikke skal vÊre serverless. PrÞvde Ä bruke cloudformation (aws sin egen terraform) pÄ et serverless-prosjekt, det blir aaaalt for mye boiler plate. Hver route handler du legger til (lambda) trenger 4-5 ressurser i cloudformation-filene
Pulumi ser interessant ut. Du skriver i et âvanligâ programmeringssprĂ„k, og sĂ„ genereres definisjonene?
I vÄrt tilfelle har vi mellom 400-500 mikrotjenester i tre miljÞer (dev, test og prod) og et relativt komplekst infrastruktur oppsett pga. sikkerhet, brukertilganger, etc. Alt kjÞrer i Kubernetes. Det er Þnskelig at infrastruktur skal gjÞres likt pÄ tvers at mikrotjenestene, og at man ikke skal kunne slette noe i skyen ved uhell, etc. Vi Þnsker ogsÄ Ä kunne migrere fra Azure til f.eks. GCP eller AWS i fremtiden hvis det gir mening Þkonomisk eller av andre Ärsaker. Det er vel hovedrasjonale bak Ä gÄ all-in pÄ IaC.
Ja, @U06BEJGKD â Det stemmer. Man skriver "oppskriftene" som vanlig kode i valgfritt sprĂ„k.
enig igjen, Pulumi ser ut som en interessant middelvei hvor du kanskje kan lage din egen serverless-magi for Ä slippe Ä bruke noen andre sin, og fÄ det beste fra begge verdener
(skal slutte Ă„ bable om serverless nĂ„, det er vel et sĂ„ godt som irrelevant tema for clojure-prosjekter đ)
En annen ting som er litt kult (og fryktelig skummelt) med Pulumi: Den har AI-features som autogenererer oppskriftene. Den er overraskende bra, men kan resultere i ting en ikke forstÄr og som er vanskelig Ä endre pÄ senere av et menneske.
Har faktisk et par AWS Lambda-er kjÞrende med Clojure (for noe Slack-greier). KjÞrer med Serverless (stor S). Funker det - har ikke rÞrt dem pÄ et par-tre Är.
poeng, for batch-jobber og sÄnt funker det jo sikkert fint, er vel mere for webapp-routing man vil unngÄ cold starts
Jeg har kun erfaring med Azure fra jobb, og GCP privat (men kun for PHP, WordPress og Archive Storage for min hjemme-NAS). Er det noen som har noen formening om Azure, GCP eller AWS er mer "Clojure-friendly" public cloud?
tror ikke programmeringssprÄk utgjÞr sÄ stor forskjell, men jeg er overbevist om at det er kvalitative forskjeller pÄ disse cloudene pÄ tjeneste-nivÄ
De fleste stÞrre "Clojure-sjappene" jeg hÞrer om pÄ podkasts, Slack, etc. ser ut til Ä foretrekke AWS.
Jeg har ogsÄ hÞrt flere skryte av at AWS er mye bedre pÄ stabilitet og bakoverkompatibilitet.
@U0MKRS1FX i hvilke tjenester? utover node-versjon pÄ lambda kan jeg bare komme pÄ et par ting de har lagt ned
Vi er pÄ GCP pÄ jobb, jeg sitter nÊrmest og venter pÄ at Google legger ned halvparten av tingene vi bruker
er node-versjoner i lambda vi sliter med ja, og tilhĂžrende endringer i node-SDK (v2 og v3 er heeeelt annerledes og krever rewrites)
Og jeg har aldri brukt Azure, men jeg har nok erfaring med Microsoft-software til Ä vÊre helt overbevist om at det er den dÄrligste lÞsningen
Jeg har samme erfaring med andre Google produkter, f.eks. Google My Business. API-ene endret seg hele tiden, sÄ mine Python scripts brakk annenhver mÄned.
skal sies at serverless framework er delvis kilden, egentlig kan man jo bare bygge inn v2 av SDK-et i lambdaene, men det er vanskelig Ä fÄ til der⊠Rammeverk-syke ftw. SÄ mulig det er FUD jeg sprer om AWS her
HĂžres ut som det er en viss lĂžs konsensus om at AWS sannsynligvis er det minst smertefulle Ă„ bruke.
AWS er utelukket for oss fordi det er Amazon⊠Vi Ăžnsker ikke Ă„ betale mange millioner i Ă„ret til en konkurrent-eid selskap đ (Jeg er ikke overbevist om at det er et godt argument egentlig, i og med at AWS er et separat selskap fra Amazon (nettbutikken), men, menâŠ)
Det har vĂŠrt en klar preferanse for AWS hos Cognitect i hvert fall. Se Datomic Cloud og https://github.com/cognitect-labs/aws-api.
For Þvrig ser jeg at https://world.hey.com/dhh/why-we-re-leaving-the-cloud-654b47e0. StÞrre selskaper som Basecamp gÄr tilbake til on-prem for Ä spare penger. Men nÄ er vel ogsÄ Mr. Hansson relativt kontroversiell. Jeg vet ikke om han har tenkt pÄ alle kostnadene rundt det Ä drifte egen infrastruktur.
Ved en viss skala gir den mening. Hvis du kan spare noen prosent av mange millioner i Äret er det i alle fall verdt Ä tenke pÄ.
ForelÞpig er AWS-regningen her sÄ liten at det ikke gir mening Ä optimalisere den noe sÊrlig.
Jeg fĂ„r nok ikke lov til Ă„ dele tallene, men det kan gi Ăžkonomisk mening hos oss ogsĂ„ đ
ForĂžvrig er jeg overbevist om at Amazon hadde knust ElkjĂžp under skoen sin om de ville - det er neppe midler fra ElkjĂžp til AWS det stĂ„r pĂ„ đ
Men en ting en mÄ tenke pÄ er forsikring ogsÄ: Nedetid hos oss pÄ f.eks. betalingslÞsningen eller nettbutikken, sÊrlig under kampanjeperioder, er ekstremt dyrt. Hvis vi har egen infrastruktur og kÞdder det til er det vÄr feil. Men hvis vi bruker Microsoft sÄ har de SLA-garantier, forsikringer, 24/7 support, kompensasjonsordninger, etc.
Jeg tror Hansson er tidlig ute pÄ noe som blir en viktig trend fremover. Og alt arbeidet med orkestreringslÞsninger til cloud-systemer vil i Þkende grad gi gode verktÞy for folk som skal drifte sine egne maskiner
Japp! Og vi har egentlig "egne" folk hos Microsoft ogsÄ som stÄr parat 24/7. De er inkludert i avtalen.
Public cloud er basically leie av maskiner med 24/7 support. Det er klart at det er dyrere enn Ă„ eie.
Hvis Basecamp kan spare sjukt mye penger sÄ kan jeg ikke skjÞnne annet enn at ElkjÞp ogsÄ kan spare sjukt mye penger
noen bĂžr begynne Ă„ selge âserverforsikringâ nĂ„r man kjĂžrer pĂ„ metallet, sĂ„ man kan spare penger pĂ„ cloud, men fortsatt fĂ„ den SLA-garantien osv đ Har ikke Hetzner et al noe sĂ„nt? Dedikerte men âmanagedâ servere?
Noen ganger tenker at det hadde vÊrt digg Ä bare kjÞpe en svÊr server og sette den i hjÞrnet pÄ kontoret, som i gamle dager. Mer enn nok datakraft, svÊrt billig, full kontroll. Men sÄ kommer jeg pÄ risikoene, og da blir det med tanken.
MarkdsobservatÞrer har kommentert pÄ hvordan Amazon floppet med sitt inntog i Sverige, og tok ingen nevneverdige markedsandeler. De klarer ikke Ä levere like godt her som i USA. En kan se det samme i England og Tyskland ogsÄ. Det kan vÊre mange Ärsaker til det, men geografien, vÊret, rettferdig lÞnn til sjÄfÞrer, stÞrre fagforeninger, konsumenter med en annen mentalitet, etc. gjÞr det mye vanskeligere for en "pure player" Ä levere like godt i de nordiske landene som i USA.
@tormod GjĂžr du support pĂ„ broch her? đ Jeg lurer pĂ„: Dersom jeg summerer en del enheter av samme type, er det en enkel mĂ„te Ă„ konvertere svaret til mest mulig fornuftig enhet? Jeg har summert opp en del masser, og sitter nĂ„ med 17945468.5 ”g
- men det finnes mer leselige mĂ„ter Ă„ gjĂžre det pĂ„? đ
Jepp, det kan jeg godt! âșïž
Du konverterer til hvilken enhet du vil med Ă„ kalle "konstruktĂžr"-funksjonene. SĂ„, f.eks. b/kilograms
altsÄ, om jeg har noe hvor b/num er > 1000 sÄ vil jeg ha neste enhet i samme measure
Ahh, skjĂžnner. Da er det ikke helt like rett fram. API-et eksponerer ikke noen "liste" over registrerte enheter, men det er i broch.impl
. SÄ du kan gjÞre noe sÄnt som dette:
(->> @broch.impl/composition-registry
(filter (fn [[k v]]
(and (= (set (keys k)) #{:mass :broch/scaled})
(= (:mass k) 1)))))
Men dette use-caset er kanskje ikke sÄ dumt Ä ha litt bedre stÞtte for. MÄ tenke litt pÄ beste mÄten Ä gjÞre det pÄ
Her er en ganske stÞgg mÄte Ä gjÞre det pÄ:
(def roundings ["”g" "mg" "g"])
(def conversions
{"”g" b/micrograms
"mg" b/milligrams
"g" b/grams})
(defn convert-to-suitable-unit [quantity]
(cond
(< 1000 (b/num quantity))
(let [idx (.indexOf roundings (b/symbol quantity))]
(if (< -1 idx (count roundings))
(convert-to-suitable-unit ((get conversions (get roundings (inc idx))) quantity))
quantity))
(< (b/num quantity) 1)
(let [idx (dec (.indexOf roundings (b/symbol quantity)))]
(if (<= 0 idx)
(convert-to-suitable-unit ((get conversions (get roundings idx)) quantity))
quantity))
:else quantity))
Skulle kunne generaliseres ved Ă„ bruke lista jeg fĂ„r av koden du ga meg đ
Benytter anledningen til Ă„ skryte av broch, sabla bra greier @tormod :smiling_face_with_3_hearts:
(defn power-of-ten? [x]
(let [n (Math/log10 x)]
(= (Math/floor n) n)))
(def mass-units
(->> @bi/composition-registry
(filter (fn [[k _v]]
(and (= (set (keys k)) #{:mass :broch/scaled})
(= (:mass k) 1))))
(sort-by (comp :broch/scaled first))
(filter (comp power-of-ten? :broch/scaled first))
(mapv second)))
(defn get-unit-idx [symbol]
(.indexOf (map b/symbol mass-units) symbol))
(defn convert-to-readable-unit [quantity]
(let [registry @bi/symbol-registry
conversion-idx (cond
(< 1000 (b/num quantity))
(inc (get-unit-idx (b/symbol quantity)))
(< (b/num quantity) 1)
(dec (get-unit-idx (b/symbol quantity))))]
(if-let [conversion (get mass-units conversion-idx)]
(-> (b/symbol conversion)
registry
(bi/quantity quantity)
convert-to-readable-unit)
quantity)))
(comment
(convert-to-readable-unit (b/grams 1023)) ;;=> #broch/quantity[1.023 "kg"]
(convert-to-readable-unit (b/grams 1023012)) ;;=> #broch/quantity[1.023012 "t"]
(convert-to-readable-unit (b/grams 0.1023)) ;;=> #broch/quantity[102.3 "mg"]
(convert-to-readable-unit (b/grams 0.0001023)) ;;=> #broch/quantity[102.3 "”g"]
)
La til et par ting i broch.core
nÄ (versjon "2023.11.09") som gjÞr at du kan skrive eksempelet ditt uten Ä bruke impl
:
(defn power-of-ten? [x]
(let [n (Math/log10 x)]
(= (Math/floor n) n)))
(def mass-units
(->> (b/compatible-units (b/kilograms))
(filter (comp power-of-ten? :broch/scaled b/composition))
(sort-by (comp :broch/scaled b/composition))
(vec)))
(defn get-unit-idx [quantity]
(.indexOf (map b/symbol mass-units) (b/symbol quantity)))
(defn convert-to-readable-unit [quantity]
(let [conversion-idx (cond
(< 1000 (b/num quantity))
(inc (get-unit-idx quantity))
(< (b/num quantity) 1)
(dec (get-unit-idx quantity)))]
(if-let [conversion (get mass-units conversion-idx)]
(b/quantity conversion quantity)
quantity)))