clojure-europe

simongray 2025-10-07T07:00:03.166319Z

good morning

2025-10-07T07:23:42.836339Z

morning

2025-10-07T07:24:23.409599Z

Morning

mpenet 2025-10-07T07:24:26.198499Z

bonjour

teodorlu 2025-10-07T07:43:10.105409Z

morning! 🌧️

Ludger Solbach 2025-10-07T07:59:20.447899Z

Good morning!

thomas 2025-10-07T08:52:53.576779Z

morning (third time lucky)

reefersleep 2025-10-07T09:04:10.416329Z

Good morning!

simongray 2025-10-07T09:12:43.910299Z

I feel like there should have been a built-in predicate in Clojure that covers all collections except maps. You can roughly use sets, vectors, and lists in the same way despite their different semantics. You can conj anything to those other Clojure collections, but for maps specifically (and exclusively) it always needs to be a pair and will throw an exception when it isn't.

simongray 2025-10-07T09:14:31.525019Z

And it's not like people even bother writing (conj m [:a 1]) in real code. It's always assoc.

simongray 2025-10-07T09:14:59.800089Z

I feel like it makes coll? a much less useful predicate.

Thomas Moerman 2025-10-07T09:15:17.199549Z

(complement associative?) perhaps?

Thomas Moerman 2025-10-07T09:15:43.245199Z

ah damnit no, vectors are associative

simongray 2025-10-07T09:16:08.963759Z

yeah

((complement associative?) []) ; false, but should be true
((complement associative?) 123) ; true, but should be false

🧡 2
daveliepmann 2025-10-07T09:30:11.841059Z

(complement map?) ? Return true if x implements IPersistentMap

simongray 2025-10-07T09:33:10.683219Z

((complement map?) 123) => true It should cover collections only. I think the shortest way to write the predicate I am talking about would be (every-pred coll? (complement map?))

πŸ‘ 1
daveliepmann 2025-10-07T09:34:46.129759Z

I love me an every-pred. Super handy

simongray 2025-10-07T09:37:48.054979Z

Indeed, but I am not a fan of the naming of that fn either since there is really nothing that ties it to some . They are related functions, but seem totally discrete. They should have called those and-pred and or-pred instead or something to that effect.

simongray 2025-10-07T09:38:35.316579Z

of those two, some is definitely the most weirdly named one, though

simongray 2025-10-07T09:40:11.264359Z

I always need to look up whether I need some? or some

daveliepmann 2025-10-07T09:40:19.873979Z

I don't see the need for a connection to some ... there's already some-fn

simongray 2025-10-07T09:41:28.825509Z

sorry, you're right... yeah, but that whole space is just not as consistent with the naming as the rest of Clojure IMO

daveliepmann 2025-10-07T09:41:38.206339Z

My rule of thumb is that some? is only what I want if I'm asking for any value at all (i.e. "some value, any value")

reefersleep 2025-10-07T09:46:41.158489Z

With all of the Clojure dialects around, I wonder if anyone ever took the time to try and do a better (or just different!) version of just the names.

simongray 2025-10-07T09:48:44.586629Z

I think there is an experimental Clojure fork somewhere on Github where they author did a bunch of renaming. I stumbled into it years ago, forgot what it was called.

daveliepmann 2025-10-07T09:49:14.002219Z

dunaj?

reefersleep 2025-10-07T09:49:58.098409Z

There's certainly some room for improvement. The Clojure core is generally great, but I agree that the naming is a little odd and inconsistent in places.

simongray 2025-10-07T09:50:00.369669Z

right @daveliepmann, that's it, but it seems dead now

πŸ‘ 1
daveliepmann 2025-10-07T09:50:32.843179Z

I've seen a claim that Rich would change the some name if he had the chance https://www.reddit.com/r/Clojure/comments/cijg22/some_some_every/ev9iplh/

πŸ€” 1
daveliepmann 2025-10-07T09:57:13.687969Z

In the mid-2010s I started a list of "changes if Clojure ever had a v2" and I've been surprised by how sparse it is. I had a feeling of "OK, once contains? is has-key?...what else?" Similar to how short this list from Arne Brasseur is: https://github.com/piglet-lang/piglet/blob/d65d598a341f82d060c7ba86ef850a3c07b1e3ad/doc/porting_clojure_code.md?plain=1#L7

simongray 2025-10-07T10:03:57.827599Z

Some pretty good suggestions

simongray 2025-10-07T10:04:19.466259Z

even if short

plexus 2025-10-07T11:30:08.400849Z

I renamed a few things in Piglet (https://github.com/piglet-lang/piglet), maps are dicts, so map? becomes dict? (can confuse beginner to have map vs map?), and contains? becomes has-key?

plexus 2025-10-07T11:30:48.907629Z

uh sorry my reading comprehension isn't very high today πŸ™‚ what Dave said

πŸ˜ƒ 1
plexus 2025-10-07T11:31:15.977329Z

upcase/downcase is the rubyist in the me speaking

plexus 2025-10-07T11:32:31.181389Z

the class/type stuff is to lean into the semantics of the JS substrate, so class creates a class value, like the JS keyword does

grav 2025-10-07T16:35:14.569899Z

Clojure v2 is intriguing to me. But then I think about how exhausting Python 2 vs 3 was for that community, and I hold my horses πŸ˜…

πŸ˜… 1
ray 2025-10-07T12:34:55.100599Z

M Good Morning

maleghast 2025-10-07T12:50:43.140159Z

Good Morning / Madainn mhtath!

maleghast 2025-10-07T12:50:49.776129Z

How'e everybody doing?

lread 2025-10-07T12:51:09.348849Z

N Good Morning

maleghast 2025-10-07T12:52:44.321099Z

I guess that this is a question that rocks around pretty regularly, but does anyone have any production experience with Open Telemetry in Clojure and if so are you using / did you use - https://github.com/steffan-westcott/clj-otel ?

teodorlu 2025-10-08T07:36:54.449189Z

(I wrote half of this yesterday, passing it along today!). β€”β€”β€” We (mostly Christian) have some of our own stuff on top of the Java OTEL libraries. I would't recommend using either our Clojure stuff or the Java libraries below. Lots of Java versions to manage. Extra many java versions if you want to use GRPC instead of HTTP, with potential dependency conflicts with other Java libraries from Google. I haven't tried clj-otel, but from what I can tell, it relies on the same OTEL Java libraries I'd like to avoid (https://github.com/steffan-westcott/clj-otel/blob/9a1017e90f0b2e9d4668e3db33b4d0af2a245160/clj-otel-api/deps.edn). Mulog has experimental support for OTEL, see https://github.com/BrunoBonacci/mulog/tree/master/mulog-opentelemetry. Currently only available as a -SNAPSHOT release.

teodorlu 2025-10-08T07:37:19.366289Z

So no definite answers from our camp, other than "Java Otel libraries has caused some pain".

maleghast 2025-10-08T09:15:25.545679Z

Oh… I read this after a bunch of other pro OTEL posts, particularly people being positive about clj-otel…

maleghast 2025-10-08T09:15:51.673699Z

I will proceed with caution, bearing in mind your warnings - πŸ™ thanks

Ben Sless 2025-10-08T13:22:38.686349Z

Used otel extensively at previous work on top of Java, lots of hand rolled parts I can say it was extremely painful and I hate otel with a passion. Changing specifications, dependencies, just a ball of yuck.

maleghast 2025-10-08T13:24:32.822479Z

Oh boy... That is more worrying

Ben Sless 2025-10-08T13:44:14.887149Z

I haven't tried it but my hunch is this is less of a pain in a monorepo as all your services will end up using the same semantic versions and dependencies

maleghast 2025-10-08T13:45:33.517699Z

Hmmm... The project that I am working on is a monorepo, so perhaps that is an up-side.

maleghast 2025-10-08T13:52:57.878559Z

I have to be honest I am locked in the headlights of decision paralysis. All the reading I've been doing and all the comments on here have got me no closer to making a decision. NewRelic is a great tool / service, but I am aware of a serious cost implication that is not going to be an option. I have used Sentry in the past and I am tempted by it, but again the cost could potentially be a sticking point. Open Telemetry seems to perform very similar if not functionally identical role in terms of being able to see "under the hood" of an application and that is appealing, but I don't want to massively over-complicate the solution that I am working on while potentially damaging performance to only show myself that what I see working because of side-effects that I can measure already is true at runtime in the code.

maleghast 2025-10-08T13:54:37.266399Z

I am a firm believer in being accountable and making code / software observable, but I can observe this code's effectiveness already and I am wondering if I am just over-thinking the whole thing.

maleghast 2025-10-08T13:58:07.888539Z

I have had a good steer from @steffan with regard to figuring out if OT is a good fit for what I am trying to achieve, so I am going to go and look at it from that angle. Thanks everyone for your thoughts / comments.

Ben Sless 2025-10-08T14:16:46.484179Z

OTEL's cost is not just technical, it can be the cardinality of attributes you're indexing so keep that in mind too

Ben Sless 2025-10-08T14:17:13.469749Z

OTEL is not BAD, I just wish to use it in ten years from now

maleghast 2025-10-08T14:22:12.026239Z

I think that I get what you mean, in that if I were to observe too many "things" with too much uniqueness based around the traces there is a maintenance implication AND a storage and usage risk along with that, all of which merits consideration, right?

maleghast 2025-10-08T14:23:38.489419Z

> "OTEL is not BAD, I just wish to use it in ten years from now" This does seem to be a big part of a lot of people's response(s) - do you think that using a solution like Sentry, which is less of a moving target, makes more sense at this point in time?

Ben Sless 2025-10-08T14:27:05.949379Z

I have no experience with it so I cannot say

maleghast 2025-10-08T14:36:28.137179Z

I have used it in the past, really before OT was a thing, back in 2019 and I liked the experience, but the bean-counters didn't like the cost, even though I felt it was invaluable, and a LOT cheaper than New Relic was at the time. New Relic appears to have altered their pricing structure, and Sentry seems very reasonable to me at $26 / month for unlimited projects and users, so really Open Telemetry's USP is no up-front monthly or annual bill, but it will clearly alter the cost of maintaining and ongoing development, not to mention the cost of maintaining the data back end which are all burdens that are lessened by simply paying someone else to handle them, and using a stable library / API to interact with it.

maleghast 2025-10-07T12:54:25.088629Z

...or is there a more commonly used library / approach?

2025-10-07T18:05:09.200119Z

Other approaches: #telemere or #mulog

2025-10-07T18:09:30.844869Z

I only have experience using mulog, works great and you can have lots of other publishers to send data to. But all three are viable solutions from what I gather in the respective channels (#clj-otel has one too).

maleghast 2025-10-07T18:29:34.739379Z

Thanks very much

danieroux 2025-10-07T20:51:07.649769Z

Using #clj-otel, works very well

maleghast 2025-10-07T21:36:13.343759Z

That is good to know, as I am heading that way.

simongray 2025-10-08T06:12:23.038559Z

I recently started using telemere, since that seems to be a catch-all solution, though I haven't really used it for anything other than basic logging

danieroux 2025-10-08T08:42:25.286049Z

It seems (I am 40% certain of this), that telemere does https://opentelemetry.io/docs/concepts/signals/logs output only. We primarily need https://opentelemetry.io/docs/concepts/signals/traces clj-otel only had traces when we started using it (before Telemere existed), and now has logs as well We export to AWS XRay via https://github.com/aws-observability/aws-otel-collector

maleghast 2025-10-08T09:12:22.204659Z

Thanks πŸ™ that seems definitive to me clj-otel it is…