AltME: Liquid

Messages

Maxim
in theory, liquid allows circular references, but by default they are verified and prevented.  the reason is that when a dependency is modified, it will run in circles indefinitely telling its observers they should adapt.

Maxim
for differenciating input *plug* types, at processing that is not something you should be doing.  plugs should not behave differentely based on what type of plug they are linked to but what type of data is comming in.     There are a few philosophical and a few technical reasons for this.  all of them concerned with your well being in the future.  
its funny, my co-worker asked me the same exact thing today and I showed him that it was better to find a different way to link his stuff ... which did in fact solve the problem he had created in the first place.
its a bit like function parameters.  their order is significant, you don't react based on which other function called you, only to the data which comes in.  in Liquid you have the extra option to have variable number of inputs.  it makes it tempting to try and figure out what type of plug sent you each item of data, but its better to just make sure the data items are of the type you expect and put extra effort into linking your stuff properly.   the network is as significant as the data flowing through it.
in the examples I wrote, you'll notice how I inspect the input data within the '!AVAILABLE plug type.  that is the proper way of filtering out input.  also, since you'll be setting the plug/liquid to none, and each node will likely ignore any none input, it just fails gracefull, until one node in the graph decides its can recover from bad input and reset part of the graph below it.
Josh
I see a few things I was doing improperly,  The data plugs don't need to be the !available plug type.  You set them as containers.  Is the PICK DATA 1 just getting the first linked plug?  If so, iss that a common practice? (The order of linking is important?)
Maxim
yep, you got everything right  :-)
the linking order is guaranteed to be preserved (until you change it)
Josh
Which is why I was worried about !plug type to begin with, but using containers is just data, unless it isn't a leaf
Maxim
containers are always leafs... anything you use  'FILL on becomes a leaf (or more precisely can be or contain, a leaf)
when you fill a plug, it bypasses the normal dependency system.  but you can setup a plug so it uses both the filled data and the links.  
When you set it up like so, the filled data acts just like a link, which you can decide to be always the first or last item in the process data you receive.
Josh
If I dynamically create a lot of plugs/containers with random data and linked them to a plug, what would be the best way to unlink them if necessary?
I guess I need to read through the code comments to see all the functionality
Maxim
Regarding cycles...   usually, when a cycle is required in your data, you can relink it differently to create a different graph which doesn't require a cycle.  some things require to take a value and modify it, for example adding to a leaf.  that can't be done within liquid easily.   it CAN be done, but requires advanced understanding of all the messaging and processing so that you replace some of the low-level code within !plug.
if you look at the !LATCH plug type in the glue.r module, you'll see that you can play around with messaging and allow for some cycling... since that plug will only allow ONE cycle in the second link until you change the value of the first link.
Josh
I think this is a pretty interesting way to program.   I appreciate all your help and hopefully I can get this whole application up and running.
Maxim
unlinking is done in one of two ways depending on what end of the plug you want to stop looking at.
its either the unlink function, a plug stops looking at (depending on) another one, or the insubordinate function which unlinks all the plugs depending on it.
Maxim
the fluid dialect makes it sooo much simpler now.
there will be a new release of it today.
Josh
You are really on a roll these days!  Just hope to have some documentation.  Wish i could have seen your presentation at RECODE.
Gregg
For docs, what we need to do is take Max's posts here, format as blog entries, and publish. :-)
Maxim
I'm releasing or updating stuff just about every week... if you look on my stats on github... there is quite a bit of green.  :-)
for now, I was thinking of using github's wiki:
https://github.com/moliad/liquid-libs/wiki
though I haven't had a lot of time to put on documentation... lately, I'm using unit tests more and more as documentation.   my next big project release (Steel is comming back) will have a few tools (those shown at devcon) and a few odds and ends.
if you want to contribute stuff on the wiki... be my guest AFAIK its public, so any github user should be able to add stuff.
Gregg
Wiki = good. :-)

Last message posted 308 weeks ago.