<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Feb 14, 2016 at 11:27 PM, Jonathan Wilkes <span dir="ltr"><<a href="mailto:jancsika@yahoo.com" target="_blank">jancsika@yahoo.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="color:#000;background-color:#fff;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"><div>Ivica,</div><div>The point is that with control objects one could make an object that <br></div><div>maps "n" abstraction inlets to a single object.  That single object can <br></div><div>just prepend incoming messages with an index.  Same with dispatching <br></div><div dir="ltr">objects to "n" outlets.</div><div dir="ltr"><br></div><div dir="ltr">Doing it that way allows the user to create abstractions with variable xlets <br></div><div dir="ltr">without relying at all on dynamic patching.  Thus the patches end up more <br></div><div dir="ltr">maintainable and easier to reason about.</div></div></div></blockquote><div><br></div><div>Perhaps but this is not a case of multiple nlets. Rather it is a way to sidestep multiple nlets limitation that does not map 1:1 to the other solution as it requires prepending (or providing data for all nlets in a form of a list).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="color:#000;background-color:#fff;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"><div dir="ltr"><br></div><div dir="ltr">You can't do the same with signal connections.  So you'd have to sprout <br></div><div dir="ltr">as many outlets from your object as you have inlets, in which case it's nearly <br></div><div dir="ltr">the same complexity as dynamic patching with [inlet~].</div></div></div></blockquote><div><br></div><div>True.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="color:#000;background-color:#fff;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"><span class="HOEnZb"><font color="#888888"><div dir="ltr"><br></div><div dir="ltr">-Jonathan<br> </div></font></span><div><div class="h5"><div><br><br></div><div style="display:block"> <div style="font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"> <div style="font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"> <div dir="ltr"><font face="Arial" size="2"> On Sunday, February 14, 2016 7:26 PM, Matt Barber <<a href="mailto:brbrofsvl@gmail.com" target="_blank">brbrofsvl@gmail.com</a>> wrote:<br></font></div>  <br><br> <div><div><div><div dir="ltr">I asked for something like Antoine's design back in 2007. I think it's a great idea, because it behaves like a signal inlet in compiled objects.</div>
<div>On Feb 14, 2016 6:48 PM, "Ivica Bukvic" <<a rel="nofollow" shape="rect" href="mailto:ico@vt.edu" target="_blank">ico@vt.edu</a>> wrote:<br clear="none"><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div dir="ltr"><div><br clear="none"><div>On Sun, Feb 14, 2016 at 5:54 PM, Jonathan Wilkes via Pd-list <span dir="ltr"><<a rel="nofollow" shape="rect" href="mailto:pd-list@lists.iem.at" target="_blank">pd-list@lists.iem.at</a>></span> wrote:<br clear="none"><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="color:#000;background-color:#fff;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"><div>Hi Antoine,</div><div dir="ltr">We're talking about two different kinds of "dynamic" nlets.  Yours seems to <br clear="none"></div><div dir="ltr">set a value for the signal based on whether or not there is a connection to that <br clear="none"></div><div dir="ltr">inlet.  What I'm talking about is a future object that would elegantly handle <br clear="none"></div><div dir="ltr">the creation of a variable number of inlets(~) or outlets(~) inside an abstraction.</div><div dir="ltr"><br clear="none"></div><div dir="ltr">I'm pressing Ivica specifically on variable signal nlets because there's no way <br clear="none"></div><div dir="ltr">to flexibly handle them.</div></div></div></blockquote><div><br clear="none"></div><div>Why not? First of all, we need to agree that such an object would be mostly useful at instantiation time (e.g. a silly example would be an abstraction that mimics selector~ behavior) and in dynamic patching where after creation one would need to connect bunch of stuff to this object and ensure that inside the abstraction additional inlets actually do something. Second, let's assume the dynamic nlet creation object is the rightmost object (otherwise user is asking for potential problems if something is already connected to the second inlet and then suddenly first inlet grows a couple more inlets before the second one--even this could be potentially handled, with adequate changes inside the pd core, or in this case pd-l2ork core). Now, if new nlets are generated, they will not autoconnect to anything--this is user's responsibility likely through some sort of live or scripted patching at instantiation time which could be driven from the same argument. Once that is all taken into an account, the last thing is to consider:</div><div><br clear="none"></div><div>suspend dsp</div><div>instantiate new object</div><div>rebuild dsp graph (as you would with instantiation of any new signal object</div><div>resume dsp</div><div>redraw object and parent object on its parent canvases</div><div><br clear="none"></div><div>One lingering concern is that this would effectively make the abstraction dirty which could be either seen as a good thing or handled as something that does not trigger the dirty flag.</div><div><br clear="none"></div><div>Best,</div><div><br clear="none"></div><div>Ico</div><div><br clear="none"></div><blockquote style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="color:#000;background-color:#fff;font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"><div dir="ltr"><span><font color="#888888"><br clear="none"></font></span></div><span><font color="#888888"><br clear="none"></font></span><div dir="ltr">-Jonathan<br clear="none"></div><div><div><div><span></span></div> <div><br clear="none"><br clear="none"></div><div style="display:block"> <div style="font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"> <div style="font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"> <div dir="ltr"><font face="Arial" size="2"> On Sunday, February 14, 2016 5:34 PM, Antoine Rousseau <<a rel="nofollow" shape="rect" href="mailto:antoine@metalu.net" target="_blank">antoine@metalu.net</a>> wrote:<br clear="none"></font></div>  <br clear="none"><br clear="none"> <div><div><div><div dir="ltr"><div><div>I've only partially followed all this discussion (not using Max myself), but maybe an object I wrote could help you building such abstractions : <br clear="none"><br clear="none">[moonlib/dinlet~] is an [inlet~] with an init float value (constant signal) as an argument.<br clear="none">This default value is overloaded when a signal is connected to the inlet, but restored when the signal is disconnected. A float sent to it would overwrite the default constant value.<br clear="none"><br clear="none"></div>Of course the init default value could be one of the abstraction's arguments ($xxx)...<br clear="none"><br clear="none"></div>BUT : <br clear="none"><br clear="none">- there is a very little hack (which could be called a bugfix...) that has to be made to pd source (this change is written in comment in the source file of dinlet~). I should open a ticket for that in the sourceforge repo. The involved bug is mixing the different float values up when [dinlet~] is used together with normal [inlet]s.<br clear="none"><br clear="none"><div>- I should add a missing feature in dinlet~, which would add an inlet to the [dinlet~] object itself, to allow changing the default value inside of the abstraction.<br clear="none"><br clear="none"></div><div>If anyone think this would be helpful, I could do this (open a ticket and update moonlib about this missing inlet).<br clear="none"><br clear="none"><br clear="none"></div><div><div><br clear="none"><div>2016-02-14 20:29 GMT+01:00 Jonathan Wilkes via Pd-list <span dir="ltr"><<a rel="nofollow" shape="rect" href="mailto:pd-list@lists.iem.at" target="_blank">pd-list@lists.iem.at</a>></span>:<br clear="none"><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div><div style="color:rgb(0,0,0);background-color:rgb(255,255,255);font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"><div><div><div style="color:rgb(0,0,0);background-color:rgb(255,255,255);font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"><span></span><div dir="ltr">> Why not simply have an inlet that can handle both inside an
    abstraction and route signal one way and number the other and then
    sprinkle that with dynamic nlet creation and you're done? Then you
    can simply abstract most cases.</div><div><br clear="none"></div><div dir="ltr">I read (and like) your spec on dynamic nlet creation, but I have a problem with section 2.1 Signals:</div><div dir="ltr"><br clear="none"></div><div dir="ltr">"To handle the dynamic creation of signal inlets and their routing within the abstraction, the implementation must"</div><div><br clear="none"></div><div>It looks like the rest of the section is missing. :)<span><font color="#888888"><br clear="none"></font></span></div><span><font color="#888888"></font></span><div dir="ltr"><br clear="none"></div><div dir="ltr">-Jonathan<br clear="none"></div> <div><br clear="none"><br clear="none"></div></div></div></div><div><div><div> <div style="font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"> <div style="font-family:HelveticaNeue,Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:16px"> <div><br clear="none"><br clear="none"></div><div><div dir="ltr"><font face="Arial" size="2"> On Sunday, February 14, 2016 1:51 PM, Matt Barber <<a rel="nofollow" shape="rect" href="mailto:brbrofsvl@gmail.com" target="_blank">brbrofsvl@gmail.com</a>> wrote:<br clear="none"></font></div>  <br clear="none"><br clear="none"> <div><div><div><div dir="ltr"><div style="font-family:verdana,sans-serif">​I tried coding that once, but it seemed like it needed some big change in architecture. Technically it's only the main signal that accepts both messages and signals in this way, where you would want to route the message. Floats should almost always be promoted to signals.​</div></div><div><div><br clear="none"><div>On Sun, Feb 14, 2016 at 1:18 PM, Ivica Ico Bukvic <span dir="ltr"><<a rel="nofollow" shape="rect" href="mailto:ico@vt.edu" target="_blank">ico@vt.edu</a>></span> wrote:<br clear="none"><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    Why not simply have an inlet that can handle both inside an
    abstraction and route signal one way and number the other and then
    sprinkle that with dynamic nlet creation and you're done? Then you
    can simply abstract most cases.<div><div><br clear="none">
    <br clear="none">
    <div>On 2/14/2016 11:36 AM, Matt Barber
      wrote:<br clear="none">
    </div>
    <blockquote type="cite">
      <div dir="ltr">
        <div style="font-family:verdana,sans-serif">[gt~] is a great
          example of something that could work as an abstraction, except
          for the pesky right inlet which should take a signal if
          there's no creation argument, but float otherwise.</div>
      </div>
      <div><br clear="none">
        <div>On Sun, Feb 14, 2016 at 10:50 AM, Ivica
          Bukvic <span dir="ltr"><<a rel="nofollow" shape="rect" href="mailto:ico@vt.edu" target="_blank">ico@vt.edu</a>></span>
          wrote:<br clear="none">
          <blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
            <div dir="ltr">What I am also trying to do eventually in
              pd-l2ork is weed out redundant objects and only keep the
              ones that do the said task the best while still supporting
              other objects' idiosyncrasies (if any). There is
              absolutely no reason to have multiple objects of the same
              kind. Ultimately, one could keep all the externals in the
              same folder and completely do away with all the declares,
              imports, and other things that make learning pd
              unnecessarily harder.</div>
            <div dir="ltr">-- <br clear="none">
              Ivica Ico Bukvic, D.M.A.<br clear="none">
              Associate Professor<br clear="none">
              Computer Music<br clear="none">
              ICAT Senior Fellow<br clear="none">
              Director -- DISIS, L2Ork<br clear="none">
              Virginia Tech<br clear="none">
              School of Performing Arts – 0141<br clear="none">
              Blacksburg, VA 24061<br clear="none">
              <a rel="nofollow" shape="rect">(540) 231-6139</a><br clear="none">
              <a rel="nofollow" shape="rect" href="mailto:ico@vt.edu" target="_blank">ico@vt.edu</a><br clear="none">
              <a rel="nofollow" shape="rect" href="http://www.performingarts.vt.edu/" target="_blank">www.performingarts.vt.edu</a><br clear="none">
              <a rel="nofollow" shape="rect" href="http://disis.icat.vt.edu/" target="_blank">disis.icat.vt.edu</a><br clear="none">
              <a rel="nofollow" shape="rect" href="http://l2ork.icat.vt.edu/" target="_blank">l2ork.icat.vt.edu</a><br clear="none">
              <a rel="nofollow" shape="rect" href="http://ico.bukvic.net/" target="_blank">ico.bukvic.net</a></div>
            <div>
              <div>
                <div>On Feb 14, 2016 8:40 AM, "Fred
                  Jan Kraan" <<a rel="nofollow" shape="rect" href="mailto:fjkraan@xs4all.nl" target="_blank">fjkraan@xs4all.nl</a>>
                  wrote:<br clear="none">
                  <blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi
                    Alexandre,<br clear="none">
                    <br clear="none">
                    <blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                      guess some of it is in:<br clear="none">
                      <a rel="nofollow" shape="rect" href="http://fjkraan.home.xs4all.nl/digaud/puredata/cyclone/cycloneToDo.html" target="_blank">http://fjkraan.home.xs4all.nl/digaud/puredata/cyclone/cycloneToDo.html</a><br clear="none">
                    </blockquote>
                    <br clear="none">
                    This list is also becoming a list of what has been
                    done.<br clear="none">
                    <blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                      <br clear="none">
                      As with _nettles_<br clear="none">
                      <br clear="none">
                      "try to resurrect as independent object library"<br clear="none">
                      <br clear="none">
                      Anyway, tell me if this gets includes on this
                      file.<br clear="none">
                    </blockquote>
                    <br clear="none">
                    Yes, the nettles-objects are part of the latest
                    cyclone versions. They are part of the nettles
                    library, which can be loaded with [declare]. Not all
                    operating systems like the '<' and '>' in the
                    object names and there is overlap with other library
                    objects, so only loading them when needed is
                    cleaner.<br clear="none">
                    <blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                      <br clear="none">
                      cheers<br clear="none">
                      <br clear="none">
                      ps. count me in for help with the help files<br clear="none">
                    </blockquote>
                    <br clear="none">
                    Great!<br clear="none">
                    <br clear="none">
                    Greetings,<br clear="none">
                    <br clear="none">
                    Fred Jan<br clear="none">
                    <br clear="none">
                    <blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                      <br clear="none">
                      2016-02-11 22:18 GMT-02:00 Alexandre Torres Porres
                      <<a rel="nofollow" shape="rect" href="mailto:porres@gmail.com" target="_blank">porres@gmail.com</a><br clear="none">
                      <mailto:<a rel="nofollow" shape="rect" href="mailto:porres@gmail.com" target="_blank">porres@gmail.com</a>>>:<br clear="none">
                      <br clear="none">
                          Howdy, it's a known fact brazilians will start
                      the year only after<br clear="none">
                          carnival, so here I am.<br clear="none">
                      <br clear="none">
                          I'd like to share my list of things to do with
                      existing Cyclone<br clear="none">
                          Objetcs. Obviously there might be other issues
                      with other objects<br clear="none">
                          that would make them up to date with the
                      current version of Max (Max<br clear="none">
                          7). Nonetheless, this is what I find relevant,
                      and I've been really<br clear="none">
                          checking it through.<br clear="none">
                      <br clear="none">
                          It's only about 11 objects, some has already
                      been discussed here and<br clear="none">
                          might have been fixed or in the process to be
                      taken care of, forgive<br clear="none">
                          me if so.<br clear="none">
                      <br clear="none">
                          I have it attached and also as a link to a
                      google doc<br clear="none">
                      <br clear="none">
                          <a rel="nofollow" shape="rect" href="https://docs.google.com/document/d/1L_dUNgznfhaZHPKMJ3jJ_p9uIXRVP6Rs9-3nXy2Qlk8/edit?usp=sharing" target="_blank">https://docs.google.com/document/d/1L_dUNgznfhaZHPKMJ3jJ_p9uIXRVP6Rs9-3nXy2Qlk8/edit?usp=sharing</a><br clear="none">
                      <br clear="none">
                          Next, I will get together a list of new
                      objects I think should be<br clear="none">
                          included, many of which I've already made as
                      abstractions (kind of<br clear="none">
                          to show how it works like I did with [teeth~],
                      cause I really think<br clear="none">
                          they should all be done as externals).<br clear="none">
                      <br clear="none">
                          Cheers<br clear="none">
                      <br clear="none">
                      <br clear="none">
                    </blockquote>
                    <br clear="none">
                    _______________________________________________<br clear="none">
                    <a rel="nofollow" shape="rect" href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a>
                    mailing list<br clear="none">
                    UNSUBSCRIBE and account-management -> <a rel="nofollow" shape="rect" href="http://lists.puredata.info/listinfo/pd-list" target="_blank"></a><a rel="nofollow" shape="rect" href="http://lists.puredata.info/listinfo/pd-list" target="_blank">http://lists.puredata.info/listinfo/pd-list</a><br clear="none">
                  </blockquote>
                </div>
              </div>
            </div>
            <br clear="none">
            _______________________________________________<br clear="none">
            <a rel="nofollow" shape="rect" href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a>
            mailing list<br clear="none">
            UNSUBSCRIBE and account-management -> <a rel="nofollow" shape="rect" href="http://lists.puredata.info/listinfo/pd-list" target="_blank"></a><a rel="nofollow" shape="rect" href="http://lists.puredata.info/listinfo/pd-list" target="_blank">http://lists.puredata.info/listinfo/pd-list</a><br clear="none">
            <br clear="none">
          </blockquote>
        </div>
        <br clear="none">
      </div>
    </blockquote>
    <br clear="none">
  </div></div></div>

</blockquote></div><br clear="none"></div></div></div></div><br clear="none"><div>_______________________________________________<br clear="none"><a rel="nofollow" shape="rect" href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a> mailing list<br clear="none">UNSUBSCRIBE and account-management -> <a rel="nofollow" shape="rect" href="http://lists.puredata.info/listinfo/pd-list" target="_blank">http://lists.puredata.info/listinfo/pd-list</a><br clear="none"></div><br clear="none"><br clear="none"></div></div>  </div> </div>  </div></div></div></div></div></div><br clear="none">_______________________________________________<br clear="none">
<a rel="nofollow" shape="rect" href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a> mailing list<br clear="none">
UNSUBSCRIBE and account-management -> <a rel="nofollow" shape="rect" href="http://lists.puredata.info/listinfo/pd-list" target="_blank">http://lists.puredata.info/listinfo/pd-list</a><br clear="none">
<br clear="none"></blockquote></div><br clear="none"></div></div></div></div></div><br clear="none"><div>_______________________________________________<br clear="none"><a rel="nofollow" shape="rect" href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a> mailing list<br clear="none">UNSUBSCRIBE and account-management -> <a rel="nofollow" shape="rect" href="http://lists.puredata.info/listinfo/pd-list" target="_blank">http://lists.puredata.info/listinfo/pd-list</a><br clear="none"></div><br clear="none"><br clear="none"></div>  </div> </div>  </div></div></div></div></div><br clear="none">_______________________________________________<br clear="none">
<a rel="nofollow" shape="rect" href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a> mailing list<br clear="none">
UNSUBSCRIBE and account-management -> <a rel="nofollow" shape="rect" href="http://lists.puredata.info/listinfo/pd-list" target="_blank">http://lists.puredata.info/listinfo/pd-list</a><br clear="none">
<br clear="none"></blockquote></div><br clear="none"></div></div></div>
<br clear="none">_______________________________________________<br clear="none">
<a rel="nofollow" shape="rect" href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a> mailing list<br clear="none">
UNSUBSCRIBE and account-management -> <a rel="nofollow" shape="rect" href="http://lists.puredata.info/listinfo/pd-list" target="_blank">http://lists.puredata.info/listinfo/pd-list</a><br clear="none">
<br clear="none"></blockquote></div></div></div><br><br></div>  </div> </div>  </div></div></div></div></div></blockquote></div><br></div></div>