@josh_tackett in a pub/sub model, you publish a message, but you don’t receive any response. Maybe you mean that you’d like to wait until the publish has completed before continuing. I’m not a redis expert by any means ,but I don’t think it’s possible to do this in redis (Kafka, by contrast, allows you to both pass in a callback function and also returns a Future that you can use to determine completion of the publish). Consider whether you actually need to know when the publish is complete, as one of the main benefits of a pubsub architecture is that the publisher really knows very little about who will consume its messages

So I'm making a clojure desktop app that relies heavily on plugins. I'm thinking about using pomegrante to load them on the classpath (from a specific directory). Is that a reasonable idea, or is it likely to break?

I'm looking to create a plugin system for my application that will allow me to distribute it as an uberjar and then load the plugins from the classpath, ideally as jar-files without the source but I'm willing to fudge on that. Does using pomegrante (https://github.com/cemerick/pomegranate) for dependency management seem reasonable? I get the impression that having the same libraries with different versions will usually wreak havoc.

My friend asked me to give him one resource link for him to start learning Clojure. I proudly gave him this https://clojure.org/guides/getting_started.
Shout out to everyone who involves in making it this great! Thank you!

given that you really don’t want to use stack-consuming recursion in general, so you’ll be calling from tail position most of the time anyway, you replace foo with recur in your call, and it’s quite literally the same, except you’re being explicit that this is TCO’d … implicit would be fine, but in most cases you quite literally gain nothing, IME anyway @lockdown-

What's the best way to add a directory to the classpath after a clojure program has started up? I found pomegrante (https://github.com/cemerick/pomegranate), but from the readme: "add-classpath and add-dependencies should be considered escape hatches to be used when necessary, rather than a regular part of your development workflow," which makes it seem like it would be unsuitable for a production program.

but if you are not experienced enough with the jvm to know how the classpath and classloaders work, I would suggest you find an alternative means to your ends. getting classloaders to both do what you want and behave correctly is non-trivial, and you will immediately be plunged in to the deep end

Transducers question: When combining functions with (comp), the functions end up being applied in right-to-left order. When combining transducers with (comp), the transducers end up being applied in left-to-right order. Is that intentional?

Anybody have tips or know of a write up or library for implementing fine grained role based permissions in a ring/compojure web app? I mean something like check that this particular user has a role with permissions to delete/modify this particular record.

all you really need to do is have some ring middleware that populates a session key containing a user-id in the ring request. then your controllers can take that user-id and build whatever authz (role-based, fine-grained permissions based on models, etc) that you want

So how do you provide high availability? Right now in prod we just have on JVM instance that handles our web traffic, datomic peer, and background jobs. It’s handling the load fine but we don’t want it to be a single point of failure. Also it’s been nice to reason about things by just having one process.
I figured we could take two approaches. The Datomic transactor approach, have a backup instance that just sits idle and takes over if the main instance dies. The other is to have a pool of instances that can operate independently, possible separate web workers from background job workers. Sort of like the way Rails does it.

Hi! I would like to metaprogrammingly define a bunch of tests (based on descriptions in an EDN file). Roughly speaking I want to loop over the content of an EDN file and define deftest blocks on the fly

Look at the implementation of deftest. You may not even need a macro. Most of the clojure.test interface is data driven, so it's possible to run a single function that does a ton of work, and reports results with custom report logic.

another approach I've used, which might work with smaller numbers of clients, is that you maintain a message queue for each connected websocket. When a user connects to the system they start receiving messages from their queue. That way if the websocket connection breaks, they can reconnect via a different server, and pick up where they left off by reading from the same queue, but on a different server.