Good progress writing a #ruby SDK for Datastar. This is a simple Rack app streaming UI updates to the browser from two different threads.
=> View attached media | View attached media
=> More informations about this toot | View the thread
Haven't had much time for OSS, but I renamed the main "Decider" class to "Actor" in my #ruby #eventsourcing project. I think it brings clarity and distinguishes the role these objects plain in systems. Names guide and clarify thought.
=> More informations about this toot | View the thread
Was assisting someone using my Plumb #ruby gem today. Pretty happy about how it turned out so far. "Types" are just composable functions https://github.com/ismasan/plumb/blob/main/examples/concurrent_downloads.rb
=> More informations about this toot | View the thread
Bit more progress on this: events and commands are grouped (using Mermaid) by the modules that handle them, which in Sourced also map to concurrency boundaries. So this gives you a basic idea or what parts of a workflow are run linearly or concurrently from each other.
=> More informations about this toot | View the thread
Very simple flowchart generated off this
=> More informations about this toot | View the thread
end-of-year hack: Sourced Deciders track command => event => command definitions. The idea is to use this to a). guard state machine transitions and b). generate documentation and diagrams, for example with a Mermaid integration #eventsourcing #ruby
=> View attached media | View attached media
=> More informations about this toot | View the thread
Rolled out a new API to help explore workflow patterns in Sourced #eventsourcing #ruby
=> More informations about this toot | View the thread
Where I ramble about Event Sourcing, commands, and wrong assumptions https://ismaelcelis.com/posts/what-do-commands-do-in-event-sourcing/
=> More informations about this toot | View the thread
Which makes me think that both Decide and React are terrible names for what they actually do.
=> More informations about this toot | View the thread
Rethinking the roles of commands and reactions in the Decide, Evolve, React pattern. Decide really is just about invariants and nothing else. React is the real brains of the system.
=> More informations about this toot | View the thread
Added some more documentation today
=> More informations about this toot | View the thread
Sketching out more #eventsourcing and #ruby patterns. This is a (simplified!) Holiday Booking modelled as a single stream ("Decider"). The infrastructure makes sure these steps are run sequentially.
=> More informations about this toot | View the thread
Today in #eventsourcing and #ruby, I merged the first stab at a more concise DSL, and continued to flesh out the README.
Loads still undocumented, and loads more features to go, but this now has a semblance of something useful. https://github.com/ismasan/sourced
=> More informations about this toot | View the thread
Today in #eventsourcing and #ruby I did more refactoring and testing to support this terse DSL for defining entire command => event => reaction flows inline
=> More informations about this toot | View the thread
The collaboration between actors leaves a trail in the form of events in a log. You can leverage that log to build materialised views, A.K.A projections
=> More informations about this toot | View the thread
So yeah, Event Sourced applications really are just the Actor Model and deterministic state machines. With the extra feature of being replayable. That's it, that's the mental model.
=> More informations about this toot | View the thread
Which means that distributed state machines and durable execution engines are around the corner :)
=> More informations about this toot | View the thread
The more I explore concurrency patterns in #eventsourcing and #ruby, the more I realise what I'm really building is a durable Actor model.
=> More informations about this toot | View the thread
Another #ruby #eventsourcing pattern: a workflow is split into two concurrent "tracks" by modelling Leads and Webhooks as separate "actors". Webhooks react to Leads events and start their own concurrent lifecycle. Concurrency is not configuration, it's built into the model.
=> More informations about this toot | View the thread
Time-traveling a lead.
=> More informations about this toot | View the thread
=> This profile with reblog | Go to ismasan@ruby.social account This content has been proxied by September (3851b).Proxy Information
text/gemini