[PD-dev] namespaces for send/receive
Hans-Christoph Steiner
hans at at.or.at
Tue Nov 17 02:09:29 CET 2009
On Nov 16, 2009, at 5:55 PM, Claude Heiland-Allen wrote:
> Hans-Christoph Steiner wrote:
>> I am in the process of working on my 'framesync' library, and I
>> just had a thought that I am not sure has come up before. Lots of
>> times, we want
>> to use send/receives in reusable code, but with a global namespace,
>> there is the potential for nameclashes. So I propose that for
>> libraries, we make it a 'best practice' to use the same namespace
>> prefix as you would for loading an object.
>> For example, this 'framesync' library, I need to send the FPS
>> (Frames Per Second) to all the objects, so it needs to be a global
>> send. So just like I could do [framesync/fstabplay~]
>
> Why not call it [framesync/tabplay~]?
I think that relying on the namespaces alone could make for confusion
if you want to use tabplay~ along with fstabplay~.
> Is [import] not yet good enough?
[import foo] just loads a lib as if you did "pd -lib foo" or however
you do it with [declare].
> Missing a feature like [import framesync as fs] to use [fs/tabplay~]?
I think that python's import is much too complicated for Pd. I spent
a long time wading thru all of the relevant discussions, code, and
docs that I could find and put it in my PdCon3 paper. I would love to
have feedback on the details of that paper rather than just
reiterating bits of what's there.
http://at.or.at/hans/Let's_Make_Libraries_-_PdCon3.pdf
>
>> the internal send/receive would be [send framesync/fps] and
>> [receive framesync/fps].
>> .hc
>
> Personally I'm not a fan of globals(*) - better for the user to tell
> the objects explicitly what name they should use to share
> information, thus letting more than one instance of the library
> functionality be used in the same instance of Pd.
>
> So, my suggestion would be to use the first argument (or other easy
> to remember convention) to be the namespace to use for
> communication: if the user really wants a global they can use
> [framesync/fstabplay~ fs] and if they don't they can use [framesync/
> fstabplay~ $0].
>
> The three extra characters " $0" are hardly a huge burden, but the
> benefits can be large imho.
>
> But yes, if globals *must* be used, then using a global name closely
> related to the name of the library seems sensible.
>
> (*) Pd has no non-globals, just obfuscated names..
Yeah, I also try to avoid globals as much as possible. With this
library, its kind of mirroring the audio clock of tilde objects, so
[fps] is like [samplerate~] and the frameclock is transparent, just
like you don't have to tell tilde objects which audio clock to use. I
am trying to address situations when you are scoring to a video. I
can't see a time when you would have to deal with multiple video
framerates within the same project.
I want to avoid having all this as arguments, since some of the
objects already have 4 arguments. But I am open to suggestions to how
else to deal with this. It would be nice to have the frame clock and
fps within a project namespace, I just can't think of a way to do it
without making things too complicated.
.hc
----------------------------------------------------------------------------
I have always wished for my computer to be as easy to use as my
telephone; my wish has come true because I can no longer figure out
how to use my telephone." --Bjarne Stroustrup (creator of C++)
More information about the Pd-dev
mailing list