This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2024-02-29
Channels
- # announcements (6)
- # babashka (7)
- # beginners (24)
- # calva (2)
- # cider (21)
- # clj-kondo (49)
- # cljdoc (29)
- # clojure (56)
- # clojure-dev (2)
- # clojure-europe (15)
- # clojure-nl (6)
- # clojure-norway (27)
- # clojure-uk (3)
- # clojuredesign-podcast (6)
- # clojurescript (1)
- # conjure (1)
- # core-async (8)
- # cryogen (2)
- # cursive (6)
- # data-science (1)
- # datomic (12)
- # events (1)
- # fulcro (16)
- # graalvm (28)
- # hyperfiddle (2)
- # lambdaisland (4)
- # leiningen (20)
- # observability (1)
- # off-topic (24)
- # pathom (5)
- # pedestal (10)
- # portal (7)
- # practicalli (1)
- # reitit (5)
- # rewrite-clj (20)
- # shadow-cljs (18)
- # vim (8)
- # xtdb (9)
How do you get from a blank editor to a battle-tested application? Why is the Clojure way different than other languages? In our series finale, we highlight the highlights of the Sportify! series. https://clojuredesign.club/episode/113-highlightify/
I loved the recap, thanks for sharing that. When you mentioned that > The more pure data you have, the more visibility you have. The more pure functions you have, the more testability you have. I literally had to stop what I was doing, pause the episode and let then concept sink in. I noticed some fascinating questions emerging from that concept. For example, what is the role of logging, given that one has all the context readily available in the context map? As I observe what I use logging for at my current scala job, am I actually exploring the logs and the code to implicitly construct the context map in my head?
@U0609QE83SS I know that I have read through logs to try and reconstruct context in my head. It's pretty amazing when you can actually record every event and what context it lead to. I've played around with using https://github.com/mpenet/tape to do that. In production, I've used https://github.com/taoensso/nippy to serialize context and write it into Postgres and MongoDB too. That's pretty amazing when you can have that visibility.
When I haven't had enough space to record a full context, if it's a pure system, I've recorded the event stream. I can play out that event stream (via reductions
) to any state I want to see. That's pretty cool too.
Hi @U5FV4MJHG, thanks a lot for sharing that. I didn't know about tape, I will check it out, thanks. That approach of storing the event with the context is so intriguing, I feel I need to explore it much more. For the event streaming, what you are describing sounds like cqrs/event-sourcing. While I haven't build a system like that, I heard it comes with trade-offs as well, such as schema evolution, checkpoints, etc. Some years ago at a client, a fellow team was building such a system with Scala and EventStoreDb and it unfortunately didn't turned out as success. Not sure to what extent the technology was a factor though. Would love to hear your production experiences with this approach on the podcast.
> the events are structured to be useful for the game. I've just found that the more literal the events are about the information they represent, the more that information is "timeless". I see, that's interesting, thanks for sharing that. I'll keep this in mind when facing a similar problem.