[PD] Best practice for abstractions with many parameters
Hans-Christoph Steiner
hans at eds.org
Fri Oct 13 02:43:29 CEST 2006
I second that thought! I have recently begun to try to avoid send/
receive as much as possible and instead focus on encapsulation in
abstractions and subpatches. I think this makes for much cleaner,
more readable, and less buggy code.
.hc
On Oct 12, 2006, at 6:03 PM, Kyle Klipowicz wrote:
> Beware of NOT wiring enough.
>
> Of course, we've all seen what beautifully unintelligible spiderweb
> artwork people are capable of spewing out when they don't patch
> with the courtesy of showing their ideas methodically. But an
> invisible web of sends and recieves can be just as misleading.
>
> I like to use a combination, where there is a single [inlet] to a
> [route] that uses local [send]/[recieve] pairs within the
> abstraction. I really like this idea of Frank's to use one
> "master" send/recieve pair and then weed it all out with [route]
> objects: it makes it easier to remember what to type!
>
> ~Kyle
>
> On 10/12/06, Phil Stone <pkstone at ucdavis.edu> wrote:
> Pardon me for replying in this clumsy way, but I'm not sure how to
> maintain thread integrity on my replies, since I receive PD-list in
> digest mode. Since Kyle was kind enough to write me directly, I'm
> hoping replying to him and his cc of the list will preserve the
> thread.
> In reality, though, I'm replying to a few people at once here.
>
>
> Kyle Klipowicz wrote:
> > I can already anticipate what some might suggest: try using a
> single
> > inlet and then pipe that to [route] or [OSCroute].
> >
> > Then you can use descriptive messaging to both a) provide better
> > information about what data is going where, and b) cut down on
> having
> > a zillion inlets at the top of your abstractions.
> >
> > Using OSC style messaging is handy too--just look at RRadical for an
> > example.
> >
> > ~Kyle
>
> This does seem like a good idea, and Frank's follow-up is intriguing,
> too. My only objection to it is that you still have a lot of wiring
> that you wouldn't have with my second approach, i.e., you still
> have to
> patch the output of [route] or [OSCroute] to the various places the
> data
> is needed. Plus, you need to pack the sent information in one
> place on
> the parent patch -- another jumble of wires or an additional set of
> send-receives. I think symbolic routing is a good idea in general,
> though, so maybe these are not such important considerations.
>
>
> carmen writes:
> > >Now it occurs to me that I could eliminate the inlets entirely,
> and just write to send/receive pairs >directly
> >
> >
> > how do you find out which instance to send to. are you accessing
> the abstraction's $0 from outside the abstraction
>
> One idea, which I've used successfully on another patch, is to add a
> parameter to the abstraction which is a message prefix.
>
> So, if I called [a_grain~ env samp xyz] the third argument 'xyz'
> would
> be the message prefix (it could be anything one liked, even '$0' if
> you
> only needed to distinguish one set of messages for an abstraction).
> Senders in the parent patch would send to xyz-(whatever), as in [s
> xyz-pointerhop].
>
> The abstraction has [receive] objects of the form [r $3-pointerhop].
> Each instantiation of that abstraction will therefore only receive
> messages intended for it, and one can address as many copies as one
> likes.
>
> What I like about this is the lack of wires. In the parent patch,
> there's no wiring (!). I just assign appropriate sends, with the
> correct prefix, to my sliders, number boxes, etc. In the
> abstraction(s), there's an appropriately named (with the $3 prefix)
> receive object sitting right next to whatever needs the message.
>
> I do want to go to the next stage and learn how to persist presets, so
> Frank's tutorial is particularly appreciated. I'll probably adopt his
> system for its obvious advantages. I'm just trying to train myself to
> "think PD" in the most efficient way, in the meantime.
>
> Thanks for the responses,
>
>
> Phil Stone
> UC Davis
>
> >
> > On 10/12/06, *Phil Stone* < pkstone at ucdavis.edu
> > <mailto:pkstone at ucdavis.edu>> wrote:
> >
> > I've been playing with Jamie Bullock's 'a_grain' lately (see
> > http://www.puredata.org/Members/jb/a_grain%7E/view ), and in
> order to
> > understand it better, I've been refactoring it.
> >
> > A_grain has 14 inputs to control various parameters; my first
> > approach
> > to cleaning it up was to put all the inlets, in the correct
> order, at
> > the top of the patch -- I then connected those inlets to 'send'
> > objects
> > with $0 variables, placing matching 'receive's close by where
> they
> > are
> > needed. This really cleaned up the wiring quite a bit, and
> made it
> > easier to "read".
> >
> > Now it occurs to me that I could eliminate the inlets entirely,
> > and just
> > write to send/receive pairs directly (perhaps also passing in a
> > "prefix"
> > as an argument that is prepended to all receives inside the
> > abstraction,
> > which would allow multiple instantiations of the abstraction,
> with
> > independent control of each). At the UI-level patch, I could
> use
> > named
> > senders (from number boxes, sliders, whatever) just hovering
> > nearby the
> > a_grain abstraction; no wires, no mess.
> >
> > I'm wondering what experienced PD architects consider the best
> > practice
> > here; if the second approach is better, I begin to question the
> > advisability of wired inlets for more than two or three
> > arguments. The
> > left-to-right ordering of them, along with the rats-nest
> wiring caused
> > by high numbers of inputs, seem to argue against them. The only
> > downside I can see to the second method is that if it's not done
> > neatly,
> > i.e., the senders are placed indiscriminately and not
> necessarily near
> > the abstraction they're sending to -- it could become very
> hard to
> > understand/maintain the patch.
> >
> > I'll be interested to hear other PD user's thoughts on this.
> >
> >
> > Phil Stone
> > UC Davis
> >
> > _______________________________________________
> > PD-list at iem.at <mailto:PD-list at iem.at> mailing list
> > UNSUBSCRIBE and account-management ->
> > http://lists.puredata.info/listinfo/pd-list
> >
> >
> >
> >
> > --
> >
> > http://theradioproject.com
> > http://perhapsidid.blogspot.com
> >
> > (((())))(()()((((((((()())))()(((((((())()()())())))
> > (())))))(()))))))))))))(((((((((((()()))))))))((())))
> > ))(((((((((((())))())))))))))))))))__________
> > _____())))))(((((((((((((()))))))))))_______
> > ((((((())))))))))))((((((((000)))oOOOOOO
>
>
>
>
> --
>
> http://theradioproject.com
> http://perhapsidid.blogspot.com
>
> (((())))(()()((((((((()())))()(((((((())()()())())))
> (())))))(()))))))))))))(((((((((((()()))))))))((())))
> ))(((((((((((())))())))))))))))))))__________
> _____())))))(((((((((((((()))))))))))_______
> ((((((())))))))))))((((((((000)))oOOOOOO
> _______________________________________________
> PD-list at iem.at mailing list
> UNSUBSCRIBE and account-management -> http://lists.puredata.info/
> listinfo/pd-list
------------------------------------------------------------------------
"[W]e have invented the technology to eliminate scarcity, but we are
deliberately throwing it away to benefit those who profit from
scarcity." -John Gilmore
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puredata.info/pipermail/pd-list/attachments/20061012/bc2c83ef/attachment.htm>
More information about the Pd-list
mailing list