February: Flow layout, Echoes, Flow push-UI, Conditional Pathing, Map Pulling, Flow Views

February: Flow layout, Echoes, Flow push-UI, Conditional Pathing, Map Pulling, Flow Views
Did we stumble backwards into new mixed media? (half-kidding)

Been hard at work and haven't been posting - but I wanted to give a quick round up of some of the things that I've been working on. As always, forgive the Twitter videos, but it's my "go to" for stream of consciousness dev stuff these days.

So here is a bunch of neat stuff that I've been working on.

But first - you might say, "But Ryan, why all this flow nonsense, I thought this was a dashboard tool?". Oh yes, it is - but if your dashboard (or data board) is a handsome duck on the water, the flows are the little orange feet paddling like hell underneath.
...or if you want to be a handsome wooden duck with no feet (a la Tableau), that's cool too - whatever your fancy. Flows are totally optional, but I think you'll choose to use them.
More on this in a future blog post.
Image
DASHBOARDS?!?!?

Anyways, in no particular order...

Changed the default flow layout to vertical, seems to be more space efficient when blocks actually have data in them...

A bit easier to have more content in blocks - things with multiple ports can expand wide instead of tall - closer to something like Max/MSP.

Also, some cool "live" Gantt chart action...

"Is this new mixed media / hyper media?"

Strange way to stumble upon it, from dashboard land, if true. Interesting thought though.

Dynamic theme params now extend to syntax highlighted surfaces / codemirror themes.

Small thing but it really "ties the room together" aesthetically (here my image-gen flow sets them automatically, based on the background image). Basically the "Data type" colors you assign to the theme will apply to those same data types in the syntax highlighter - IF you use the "dynamic" code theme.

Proper "optional" function inputs for custom functions.

This is mostly for Clojure people and those people who will be building flow primitives for others to build upon (at the moment, me) - many of you won't see or use this, but it's a very nice to have thing for the rest of us (again, me).

Flow blocks that can push UI dialog to the user.

Now this is an odd one that I've wanted in a tool for a long time...

Ask a question, verify something, create a chat bot, basically anything. Forces the flow to pause until it gets some return. Very powerful and flexible. Simple demo below.

Remember, all flows execute on the server, NOT on the client - but they can still find an operator and "ping them" regardless if they are "running" that flow or not. You can set up some pretty interesting interaction loops this way - far beyond what we think of as traditional ETL or dash action user flows.

Fun little video too, couldn't help myself with the :click-speak rabbit blocks. ;)

Flow "Map Pulling"

Just an easy way to pull apart large maps / JSON structures, super helpful when dealing with a rats nest of REST payloads, etc. Just creates a "GET" block for the keypath you drag. This is something that once I started building it, I can't be without it - and you shouldn't either!

Conditional Paths and Looping

Not something you're going to use all the time, but for complex interaction loops, etc - it can be really handy. I'd rather a system be able to do it and not need it then... you know, need it and not have it baked into the design...

A similar demo (dare I say - better?), but louder.

Echoes - "last seen" snapshots of entire working sessions

Very handy, inspired by tmux sessions + Smalltalk "images". I guess if Rvbbit is a "data desktop" this is like... multiple desktops?

This is another case of something I wanted to help me test various save files without losing my sanity - and it turns out to be a banger of an idea all around, and I take snapshots of the screen to make it sexy.

Flow Views (non-intrusive flow UI elements)

Putting it all together...

"But why would I want bits of UI in my backend flow anyways?"

Because any part of your flow can be put on a "surface", while the rest of the flow (heavy lifting + logic) runs below the "water line" (on the server) & only pushes + pulls from the surface as needed...