- Its visual austerity is a huge help to me in thinking clearly about patching and dataflow. It's amazing how often a geometrically elegant solution turns out to be an elegant solution full stop.
Coincidentally, I was thinking about counterexamples to this today. Consider a gate: float|v-----o <- gate!|v(copy of) float
One of the problems with C is that you must take care both in your conditions for opening the gate, and in avoiding many subtle bugs through spacing, scoping, etc. that could cause the gate to become ineffectual. Many of those subtle bugs are visual-- I mean, your variable's state is just waiting to be perused by any context inside the function that's willing to read it. It's amazing Linux works at all when you consider how few constraints there are on the code one must reason about. A dataflow language improves this by representing the gate as a visual barrier. You can't just blithely read "stuff" below the gate[1]. The gate has to pass the data down the line, and even if you made an additional connection from "float" to something below, you have to drag the line visually over the gate so that your violation of common sense and decency is visually obvious. But now we have a problem, because if we have anything more than "float" that we want to operate on below the gate, we have no way to read it. There are two possible solutions to this:1) store copies of the data below the gate, so that you can read them if you happen to be allowed through the gate.2) send some more expressive form of data like an object through the gate, and pack everything you want to have access to into that object. #1 is what I see in most patches (and what I end up patching when I just need to get something done). But think about how that complicates the dataflow. In the gate example it's especially apparent-- if you want to store some data below the gate you have to draw a line that does an end run around it to the right inlet of a [float] below the gate. That violates the very representation of a gate that the visual language was trying to provide for you. #2 pack your data into a list and use [route] as the gate. This restores visual clarity at the expense of anonymous positional arguments. So it works well for routing a list of, say, two or three values. But not so well for a larger amount of discrete data. An example of this downside would be a patch that does a good job of showing where a list flows or branches, but then seeing a big message box at the bottom with something like [voice $1-$3 $5 $2 $4(. It's a real pain to debug and extend patterns like that. I'd be interested to hear other approaches to this problem. -Jonathan
On Wednesday, March 2, 2016 8:20 PM, Matt Barber <brbrofsvl@gmail.com> wrote:
This is a great way to frame it, and it is indeed how I approach composition as well. It sometimes helps to think of a piece as a solution – maybe the only solution – to a set of constraints. Three limitations that I love in Pd off the top of my head:
On Wed, Mar 2, 2016 at 9:50 AM, Lorenzo Sutton lorenzofsutton@gmail.com wrote:
Trying to turn the Pd limitations thread, which eventually became the (usual) 'Pd vs foo" thread, into something possibly more constructive, interesting and inspiring.
Starting from the concept of "Creative Limitation" (I am primarily thinking of Stravinsky):
How do Pd's limitations enhance people's creativity?
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list