off-topic

https://github.com/clojurians/community-development/blob/master/Code-of-Conduct.md Clojurians Slack Community Code of Conduct. Searchable message archives are at https://clojurians-log.clojureverse.org/
2021-02-23T17:14:53.032300Z

I know it's in the midst of a major hype cycle, but anyone here attempt any ethereum development with clojure?

jlmr 2021-02-23T17:23:19.032500Z

I was hoping to use the collective knowledge in this channel to find some inspiration. I’m looking for some platform or framework (doesn’t have to be in Clojure) similar to workflow engines such as Apache Airflow or Azkaban, but subtly different. The workflow engines I mentioned seem really focussed on batch processing, whereas I am looking for something more “reactive”. A bit more context: • We are developing an application where we receive events about new/updted/deleted “records” from somewhere upstream. • When we receive such an event we (usually) have to update our own data based on a complex set of rules and dependencies: • Say just the title of a “record” has changed upstream, then we just have to update our own database and search index. • But if an URL has changed, we will probably initiate a download, after which several new jobs might start that need the downloaded file. These completed jobs might kick-off even more processes. In essence our job is to keep a dataset that is in some way “derived” from the upstream data up to date. All upstream events will trigger some process in our application and the faster our derived data reflects that, the better. That’s why the batch-based workflow engines I find seem like a bad fit. Maybe I’m wrong and these existing workflow engines can be adapted to suit our needs, maybe a more suitable platform already exists but I just haven’t found it yet. Or maybe we will have to build it ourselves. Would be great to hear your thoughts or ideas about this!

ldinh 2021-02-24T17:40:00.043200Z

I have not. Only read about it. It seems like a great solution to MVs though.

2021-02-23T17:47:04.035900Z

have you seen aws step functions? big disclaimer I've never used them for work, but I am a fan, and they are sort of my go to example for workflow kinds of things. one of the things I like about it is they have a spec for the json dsl they use for defining workflows (https://states-language.net/spec.html), which if you decide nothing existing fits your needs may be a good jumping off point for writing your own workflow system

2021-02-23T17:50:52.036500Z

but structurally, re-reading your description, it sounds like you need a state machine per record, not a state machine per task

2021-02-23T17:51:58.037600Z

so like, if a given record is already doing a download, and a new event comes in for the record, it seems unlikely you want to spin up another concurrent task for that record

ldinh 2021-02-23T18:18:26.037700Z

Have you looked into Materialize? I think what you’re trying to do sounds exactly up their alley: https://materialize.com/about/

ldinh 2021-02-23T18:18:48.038Z

There is also a rust library that does this sort of MV maintenance: https://github.com/TimelyDataflow/timely-dataflow

jlmr 2021-02-23T18:55:43.038300Z

@louiedinh thanks for the tips, I will look at them!

jlmr 2021-02-23T18:56:00.038500Z

You’re right about needing a state machine per record I think

jlmr 2021-02-23T18:56:17.038700Z

Haven’t seen them yet, will take a look thanks!

jlmr 2021-02-23T18:59:42.038900Z

I’m now reading the step functions docs, but those would be state machines per task I guess…

2021-02-23T19:17:21.039100Z

in my mind a state machine per record is much more like an actor based system. each record has an inbox of events and a little loop (a state machine) processing that inbox

2021-02-23T19:17:42.039300Z

(vs. a workflow parallel task kind of system)

jlmr 2021-02-23T19:35:11.039600Z

A bit like an agent in clojure?

2021-02-23T19:42:55.040100Z

Is this issue with Tether falsely claiming USD parity going to affect the BTC price?

2021-02-23T19:48:05.040200Z

sure

seancorfield 2021-02-23T19:49:16.040700Z

There's a #bitcoin channel...

2021-02-23T20:06:46.041100Z

Man, the rain here is like sideways, noah get the boat, apocalyptically heavy. There are 3 directions the wind can blow, and I'm fine. BUt one direction if it blows water comes into my home....

blak3mill3r 2021-02-23T21:39:53.041500Z

kafka streams... although it might be overkill

blak3mill3r 2021-02-23T21:40:13.041700Z

In essence our job is to keep a dataset that is in some way "derived" from the upstream data up to date. <-- kafka streams (and maybe kafka connect) are built for this purpose

phronmophobic 2021-02-23T22:19:15.042Z

@jlmr, check out https://github.com/oakes/odoyle-rules. it sounds pretty close to your description

blak3mill3r 2021-02-23T22:39:30.042300Z

@louiedinh Have you used Materialize? I just read about it for the first time. Sounds interesting... differential dataflow compatible with Postgresql