This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2024-04-11
Channels
- # announcements (2)
- # babashka (31)
- # beginners (31)
- # calva (30)
- # cider (23)
- # clerk (1)
- # clojure (46)
- # clojure-austin (5)
- # clojure-brasil (1)
- # clojure-europe (47)
- # clojure-nl (1)
- # clojure-norway (72)
- # clojure-uk (2)
- # clojurescript (39)
- # conjure (1)
- # cursive (16)
- # data-science (1)
- # datomic (35)
- # dev-tooling (4)
- # events (5)
- # introduce-yourself (2)
- # jobs-discuss (5)
- # missionary (3)
- # polylith (11)
- # releases (4)
- # scittle (4)
- # shadow-cljs (18)
- # spacemacs (16)
- # specter (2)
- # squint (27)
- # xtdb (6)
Morn, endte opp med å boote emacsd-reboot og mekke min egen basert på den og min gamle https://github.com/slipset/emacsd
Har dere lest https://lambdaisland.com/blog/2019-08-07-advice-to-younger-self av @plexus?
Jeg synes den er veldig bra. Skrev en super-kort oppsummering i #clojure-europe nettopp (hvis dere absolutt ikke ønsker å bruke 4 minutter på å lese originalen): https://clojurians.slack.com/archives/CBJ5CGE0G/p1712820756033009
> These are the olives of technology. Olives aren’t candy, and tasting them the first time isn’t always pleasant, but soon you will develop a taste for them. 😂 ❤️


det er da ikke nok enterprise, må gå dypere! https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpriseEdition
Det ser jo ut (fra annotasjonen) som at dette er en override fra superklassen. Jeg undrer veldig på hvordan superklassens impl av getThis
ser ut?
veldig kjekt å kunne overskrive oppførselen til getThis ja, og ikke bare ha en default-implementasjon som returnerer this
Min OO-fu har blitt så dårlig at jeg nå sitter her og er usikker på om @U0MKRS1FX er sarkastisk eller ikke, og om @U7DT92B9R mener at Jocko syns Christian burde ta ansvar for all open source Java-kode han ramler over. 🙈
For å kaste enda mer forvirring på bålet, jeg likte Extreme Ownership av Jocko Willink veldig godt da jeg først leste den. “Ikke skyfle ansvaret over på andre, ta ansvar for å fikse det du kan selv”.
Men jeg skjønner heller ikke helt parallellen inn i kode?
Hvis vi skal koble “jocko-ownership” med feks “rust-ownership”, blir det bare krøll i hodet mitt
Jeg har nok selvsikre amerikanere i monitor, orker ikke å oppsøke sånne folk eller skriveriene deres 😅
jeg trodde et øyeblikk at dette var fra mattilsynet sin kodebase. derfor kalte jeg Jocko. 😅
Jeg leste Extreme Ownership ei en periode da jeg var veldig interessert i å forstå hva jobben til en leder egentlig er, føler jeg fikk mye ut av det da. Jeg har ikke lest så mye av Jocko siden. Han har en podcast som har et par interessante episoder, feks én der han får besøk av en tidligere spesialsoldat som tjente under Vietnam-krigen. Mistet troppen sin, måtte hugge seg ut av jungelen på egen hånd, overlevde. Jeg vil kanskje si at den beste introduksjonen til Jocko er historien hans fra Ramadi: han hadde ansvar for en operasjon under https://en.wikipedia.org/wiki/Battle_of_Ramadi_(2006). Der ble en irakisk soldat skutt og drept av en alliert amerikansk soldat. Hvem tar da skylda? Det finnes en TEDx-talk hvor han snakker om den opplevelsen: https://www.youtube.com/watch?v=ljqra3BcqWM Jeg synes han snakker ganske godt om ydmykhet i Extreme Ownership og The Dichotomy of Leadership. Men jeg tror målgruppen hans er yngre folk som er usikre på hva det vil si å ha lederansvar.
Builder getThis()
men … finnes det egentlig noen tilfeller er man trenger dette i praksis? Unntatt å kalle
builder.getThis().getThis().getThis().getThis()
så mange ganger man vil for gøy?
(hvis jeg skal kverulere med meg selv finnes det jo steder der vi har bruk for clojure.core/identity
. Men vi slipper i det minste å skrive en ny versjon av identity
hver gang vi trenger en ny klasse. I så fall bør vi vel putte getThis
på Object
, så alle objekter får den! 😁)Jeg forstår ikke hva man skal med getThis, nei. Kanskje det er noe arv-fuckery? For å få rett type eller noe sånt?

Datomic-spørsmål: Hvis jeg skal sette opp en Valcache eller Memcached for caching, hvordan finner jeg ut hvor stor kapasitet den bør ha? Er det så enkelt som "helst så stor at du får plass til alle segmentene i storage"?
Vil tro det er det som gir deg best ytelse. Hvis det er for mye så vil jeg tro at "jo mer jo bedre" opptil det punktet.
Er ikke så mye, viser det seg:
datomic=> select pg_size_pretty(pg_relation_size('datomic_kvs'));
pg_size_pretty
----------------
1758 MB
Dette begynner å ta form: https://github.com/cjohansen/clj-nats Du kan nærmest høre tenners gnissel i denne koden 😅
Er grunnen til at du i navnet til biblioteket prefikser med "clj", å sitte igjen med cl*j-nats*? 😄 Er det egentlig noen konvensjon for "clj" som prefiks eller postfiks? Jeg merket meg at du har har andre biblioteker med postfiks, som fontawesome-clj og phosphor-clj.
Jeg tenkte egentlig på at alt dette kunne vært prefixa med ::nats/
men, så kunne man jo også tenkt seg :stream/name
og :consumer/name
Denne skjønte jeg ikke:
(def ack-policy->k
(into {} (map (juxt second first) ack-policies)))
Ække det bare ack-policies
da?Skjønner. Jeg driver og lurer på om jeg kanskje synes at ns’a keys gjør seg bra i sånne data-dsl’er
Men tror det vil gjøre ting tydeligere, så jeg prøver litt for å se hvordan det blir
(def conn (nats/connect ""))
(stream/create-consumer conn
{:nats.consumer/stream-name "test-stream"
:nats.consumer/name "test-consumer"
:nats.consumer/durable? true
:nats.consumer/filter-subject "test.work.>"})
Litt mer verbost, men samtidig helt åpenbart hva som hører til biblioteket(ns nats.stream
(:require [clojure.set :as set]
[nats.core :as nats])
(:import (io.nats.client ConsumeOptions ConsumeOptions$Builder IterableConsumer
JetStream Message PublishOptions PublishOptions$Builder
PurgeOptions PurgeOptions$Builder)
(io.nats.client.api AccountLimits AccountStatistics AccountTier AckPolicy
ApiStats ClusterInfo CompressionOption ConsumerConfiguration
ConsumerConfiguration$Builder ConsumerInfo ConsumerLimits
DeliverPolicy DiscardPolicy External PeerInfo Placement
ReplayPolicy Republish RetentionPolicy SourceBase
SourceInfoBase StorageType StreamConfiguration StreamInfo
StreamInfoOptions StreamInfoOptions$Builder StreamState
Subject SubjectTransform)
(io.nats.client.impl AckType)
(java.time Instant ZoneId)))
Hva er det som har to tomler og befinner seg langt inn i "kingdom of the nouns"? 😅Mulig at dette blir helt feil, men hva om du hadde hatt et ns nats.consumer
, så kunne du:
(consumer/create conn
{::consumer/stream-name "test-stream"
::consumer/name "test-consumer"
::consumer/durable? true
::consumer/filter-subject "test.work.>"})
Ettersom jnats har så hælvetes mange klasser har jeg forsøkt å lage det så flatt som mulig. Men et consumer-namespace er i tråd med ambisjonen om at det skal ligne mer på nats
CLI-et
https://github.com/cjohansen/clj-nats/blob/main/natsbyexample/nats/core_publish_subscribe.clj
Hvis UI-komponenter bør returnere data, bør de da returnere Hiccup eller et Ring-map med :headers
, :status
og :body
?
sant, begge kan jo returnere data. Og en side kan bruke flere komponenter. Og så lenge begge er rene funksjoner, er det vel ikke noe problem om en side kaller på funksjoner for å bygge opp HTML-en sin?