• svanya

    ...in case you had not learned it already.

    If your patch freezes or hard crashes, two things you can do to debug the code:

    1. rename the offending files by adding a suffix

    2. using a text editor to rename the object-names by adding a suffix

    3. renaming the offending files:
      kill the patch
      go into your folder structure and rename (what may be) the offending .pd file by adding a suffix, ex. add "abs-hold", "abs-broken", etc.
      reopen the patch:
      Pure data will keep all the connections on the original file but won't actually reload the original file since it's really no longer there.
      If the patch no longer freezes or crashes, then you know that abs was the offending file and you can focus on debugging it.
      If the patch still freezes, remove the suffix and try renaming a different abs.
      Repeat this process until it stops freezing and you will know which abs is causing the problem and you can focus on fixing that one.

    4. renaming the object:
      kill the patch
      then open it in a text editor
      do a FIND in the editor for what you believe may be causing the problem, whether an abs or an object, ex. [sel], [route], [until], etc
      add the suffix at the end of the abs or object name, ex "until-hold"
      reopen the patch in PD
      if it now loads, then you know that object was causing the problem and can fix it inside PD since PD no longer is loading it.

    I hope this may make your life easier, work more fluid, or process more effective.

    Peace Thru Sharing.
    Love Thru Music.

    And if you've learned in effective techniques, do share them me.


    posted in tutorials read more
  • svanya

    Given the idx as a creatarg, one can then also use the dynamic sends to send msgs "across" the clones as well as down via

    abs idx

    [r absname-$1]

       [f $1]
       [+ 1]

    f [symbol absname-$1(
    | |

    posted in tutorials read more
  • svanya

    I found once and have been reminding myself ever since...

    When I start to get really bent out of shape as to whether I have "included all of the features" my app should have (self-talk),

    I take a second, remember to breathe, relax, and slow down.

    And remind myself that even Miller(!) is only at version 0.5x.

    And even he probably doesn't even know "where all this is going". :-)


    Don't beat yourself up to much, when your project comes toward its end and you start the "final" leg of the brainstorming, feature request part of the process.

    The project will include them in time, if it were meant that they should be included.

    And instead: get to work on what you Do know.

    p.s. There is Always version 2.0.

    p.p.s. on the other hand (:-)) as long as it's fun, just keep doing it.

    I hope this may help you in some way. Or ease the angst about whether your project is "as good as it should be".

    Peace Thru Sharing.
    Love Thru Music.
    And Fantasy...
    Thru Gem.

    peace through sharing love through music-f-small.jpg

    posted in Off topic read more
  • svanya

    If one organizes their abstractions in such a manner that [f $1] always refers to that abstractions "index", one can:

    1. more powerfully clone that object as

    [clone object 12]

    1. add both dynamic sends and receives based on that index:

    f $1
    [symbol objectname-$1(


    [r objectname-$1]

    So each object can then
    not only get its [all( and [by-idx( messages but also its [r & s] messages outside of the clone thread, ie external from the clone messages, ex. from a gui, hid, OSC, etc., as [s objectname-$1].

    Esp. because, I don't know if you've noticed, but working inside clones can be tricky and is prone to losing changes if you don't save the clone's changes before closing.

    1. further, one can then create "2nd level" objects at

    [clone parentobject 12 childobject]

    Such that inside parent is

    [f $1] and [symbol $2].

    and all $2's are instances of "childobject".

    The benefits of this are:

    1. greater cloning flexibility because one can swap out out which clone is used merely by changing the name.


    1. go into the clone
    2. open the child
    3. edit the child
    4. save it as "child2"
    5. exit the clone
    6. change [clone parent 12 child] to
      [clone parent 12 child2]
      and all of the clone thread will be updated accordingly.


    I have yet to find a way to send messages into the clone without editing it, though that feature would be enormously beneficial, esp. as it applies to changing the clone's objects and parameters.

    p.s. I hope this benefits your creative process in some way. Happy PD-ing!

    The more ideas there are to play with, the more fun there is to be had.

    posted in tutorials read more
  • svanya

    Thanks, alot for the pointer and lead. I really appreciate it.

    peace through sharing love through music-f-small.jpg

    posted in technical issues read more
  • svanya

    Thank you, @Jona and @whale-av for the pointers.

    Yes. I want to be able to change the operators, etc. . So for instance the multiply in [expr $f1*$f2] to a plus while the Gem stream is running.

    Two options I have tried are assembling an expr clone with all of its operators as type-selectable by idx, so an expr router of sorts. Where one could assemble the pieces by list(functypeID#) and variables. But that fails because it's just too clumsy.

    The option below is the best, I've come up with so far.

    And if, as you say whale-av, the expr itself is written at runtime (until the feature gets added sometime in the future :-)) probably the best way to go.

    Should say something, I learned there is no way to pass it in as a symbol [expr $1`], where $1 is a creationarg symbol because expr interprets it as a desire to create an array.

    One option may be using iemguts and dynamic patching. If I look into it, will try and let you know what I find out.

    Seems sending it a list is something that should be added.

    Would help a lot for patches where dynamically changing formulas in real-time streams (like a GEM or ~) best suit their design.

    Thanks, again, @jona and @whale-av. Really appreciate your response and the timeliness with which you replied,

    Happy PD-ing.

    Here's the way I will probably go with: Popping the subwindow where all the expressions are then closing it when I'm done,


    posted in technical issues read more
  • svanya

    At this point I think it just better if I ask.


    A [clone] where values inside each clone are calculated based on the index within the set of clones


    I would like for the user to be able to set (for all and per clone) what that function(clone-idx) /expr that calculates the value is.

    Would love your thoughts on the matter.

    Ran into dead-ends on all the fronts I have explored so far.

    Peace Thru Sharing.
    Love Thru Music...

    p.s. only within the last month, actually tried to learn GEM and am, at this point, what I feel like is only ankle-deep in all that it has to offer. ::smiley:

    posted in technical issues read more
  • svanya

    I have been feeling the itch to share something for a while and this just sort of came to me this morning.

    As to practical purposes? That's not for me to decide. :-)

    But I can say...The notion of binary operations has always sort of frustrated me. Limiting itself to only a duality.

    I hope this may serve some purpose to you. If nothing else, but to give you a giggle or put a smile on your face.

    May your day be a fantastic one. Keep caring.



    and inside the abs:


    peace through sharing love through music-f-small.jpg

    posted in abstract~ read more

Internal error.

Oops! Looks like something went wrong!