Fork me on GitHub
#announcements
<
2023-03-21
>
borkdude13:03:52

https://borkdude.github.io/clj2el/: a cute little tool to translate Clojure snippets to Emacs Lisp for those who don't know Emacs Lisp that well (like me) clojure-spin emacs

πŸ‘ 19
emacs-spin 30
πŸŽ‰ 16
2
mkvlr13:03:51

the borkdude way to enlightenment: I don’t understand this well, I’ll go ahead and implement it!

πŸ˜‚ 14
genmeblog13:03:55

mkvlr revealing some internals πŸ˜„

borkdude14:03:16

Now with CLI (thanks @U3X7174KS) and with C-u M-| you can replace a region :)

Benjamin10:03:49

If it is not Clojure, the Bork will make it Clojure.

πŸ”₯ 4
kennytilton19:04:29

Can it port Clojure to Emacs Lisp? thinking-face

borkdude19:04:49

oh you mean, the entirety of clojure? no

zalky14:03:16

New! https://github.com/zalky/cues provides low-latency persistent blocking queues, processors, and graphs via ChronicleQueue. For when distributed systems like Kafka are too much, durable-queue is not enough, and both are too slow (by orders of magnitude). Cues extends https://github.com/OpenHFT/Chronicle-Queue and https://github.com/mpenet/tape to provide: 1. Persistent blocking queues, persistent tailers, and appenders 2. Processors for consuming and producing messages 3. Simple, declarative graphs for connecting processors together via queues 4. Brokerless, fault-tolerant exactly-once graph message delivery 5. Message metadata 6. Microsecond latencies (sometimes even less) 7. Zero configuration defaults 8. Not distributed Hope it is helpful! :rightwards_hand: 🎁 https://github.com/zalky/cues

clapping 32
πŸŽ‰ 16
thomas15:03:39

Looks like I could use something like this for my MQTT broker. Thanks!!!

πŸ™Œ 2
zalky15:03:25

Happy to do it, hope it helps!

❀️ 2
thomas15:03:57

hmm... I just noticed it said that you can store clj maps... but I would need to store raw bytes (with some meta data together in a map)

mpenet15:03:44

Oh interesting!

zalky15:03:37

@U052852ES, I think I could make the encoder fully configurable with a single one liner. I'll have another look in the next day or two.

thomas15:03:19

Thank you. But I have to say I have no idea when (or if ever) I'll look into this.

πŸ‘ 2
thomas15:03:33

So don't feel pressured at all to do this.

zalky15:03:41

@U050SC7SV, could not have done it without Tape. πŸ™‚ Thanks for all the hard work on a great lib!

πŸ™‡ 2
mike_ananev02:03:26

@U0HJK8682 I've got some errors. How to fix it? I'm on JDK 19.0.2 Mac M1.

zalky03:03:38

Hi @U097654L8 , I'll have another look tomorrow but that initially looks like a Java version issue. ChronicleQueue does not support Java 19 yet: they https://github.com/OpenHFT/Chronicle-Queue/issues/1286, which are so far 8, 11 and 17.

βœ”οΈ 2
zalky12:03:04

@U052852ES, coming back to your question this morning, unless I've misunderstood it, I think the serialization layer already supports what you've described. You can wrap some bytes in a map with some metadata. Then write and read that back from the queue:

user> (def q (q/queue ::q))
user> (def a (q/appender q))
user> (def t (q/tailer q))
user> (def bytes-in (byte-array (map byte "data")))
user> (q/write a {:bytes bytes-in :metadata :meta})
83485574299648
user> (String. (:bytes (q/read t)))
"data"

thomas12:03:52

Cool, thank you @U0HJK8682! πŸ™

πŸ‘ 2
Lyn Headley00:03:39

Very cool.

πŸ™Œ 2
Ivan10:03:57

Are there any resources/docs/books on how people use and develop with queues? There is some material around queueing systems in relation with events, but especially for IPC I don't see a lot or I'm not searching correctly. I've only seen some very simple tutorials on how to build your own queue, how to use a queue API, etc, but nothing much around how to think and "architect" using queues. (sorry, I guess this is a diversion of the main discussion 😞 )

zalky20:03:32

@U8ZE1VBSS, not a diversion, that's a great question! It sounds like you're not asking about how queues are used in algorithms, so I'll focus on program/systems design instead. You also mention you've seen material on "queueing systems in relation to events", which I interpret to mean event messaging in distributed, or "big data" systems. So technologies like Kafka, and its use cases. If so, I think you're right that this tends to dominate the discussion nowadays. That said, many of the concepts that apply to distributed systems also generalize to IPC, or really any concurrent computing problem. So for example, things like: 1. Change capture 2. Event sourcing 3. Decoupling consumers and producers 4. Managing process overload/backlog 5. Pub-sub 6. Implementing MVCC and other resource sharing strategies 7. Fault tolerance All these things generalize to IPC, database design, and other scenarios that are not necessarily distributed, and are good jumping off points for your search on queue applications. I would also make sure to modulate your search to include "logs" since they are related, have similar design patterns, and are sometimes used interchangably with queues. As for resources, if you haven't already encountered it, I found that "Designing Data-Intensive Applications" touched on logs and queues in many different contexts. And while its focus is not really queue or log specific, it is frankly a great read regardless. Also, a long time ago I found https://engineering.linkedin.com/distributed-systems/log-what-every-software-engineer-should-know-about-real-time-datas-unifying to be a great introduction to how logs and queues fit into broader architectures like, databases, ETL, microservices, and distributed systems. It has supplemental links at the end. You also might want to post your question in the main #C03S1KBA2 channel. There's such a wealth of knowledge there, I'm sure you'll get some very non-distributed queue specific resources!

πŸ‘ 4
❀️ 4
lilactown16:03:16

Announcing https://github.com/lilactown/flex, a reactive signals library for Clojure(Script). β€’ It shares a conceptual lineage with reagent's reactions, hoplon/javelin, and SolidJS. β€’ It supports both Clojure (JVM) and ClojureScript (JS) runtimes. β€’ It's goal is to provide a robust, glitch free reactive runtime with a convenient syntax Current state: beta, ready for other people to try

😎 40
πŸ‘€ 22
clojure-spin 10
πŸ₯³ 4
πŸ†’ 4
❀️ 6
lilactown21:03:08

btw, conversation can be had in #C04H5DMM99S