[sharingisfun] js based change filter


    Sep 06 2007 | 6:23 pm
    A javascript and help file for a "change" style filter for any messsage, list, float, or int, rather than just ints or floats.
    Enjoy,
    Peter.

    • Sep 06 2007 | 6:31 pm
    • Sep 06 2007 | 7:39 pm
      whoops, grabbed the .pat, not the .js, for the archive.
      .zip updated!
    • Sep 06 2007 | 9:17 pm
      On 6 sept. 07, at 22:04, keith manlove wrote:
      > One thing... and forgive me if this is obvious... what's the anything
      > function for?
      anything allows you to receive any message. For example, if you send
      an integer and the msg_int method is not defined, the anything
      function will be triggered. This is espacially useful for symbols as
      it's not possible to think about every symbol you could send.
      ej
    • Sep 06 2007 | 11:02 pm
      On 6 sept. 07, at 23:17, Emmanuel Jourdan wrote:
      > anything allows you to receive any message. For example, if you
      > send an integer and the msg_int method is not defined, the anything
      > function will be triggered. This is espacially useful for symbols
      > as it's not possible to think about every symbol you could send.
      Maybe an example will make it clearer, to achieve the changeany you
      could have only use the anything method:
      var lastThing = new Array();
      function anything()
      {
      var i;
      var tmp = arrayfromargs(messagename, arguments); // make an array
      from the message
      var isDifferent = false;
      if (lastThing.length == tmp.length) {
      for (i = 0; i < tmp.length; i++)
      if (lastThing[i] != tmp[i]) {
      isDifferent = true;
      break;
      }
      } else
      isDifferent = true;
      if (isDifferent) { // it has changed
      outlet(0, tmp);
      lastThing = arrayfromargs(messagename, arguments); // it's easier
      to call arrayfromargs again to make the copy of the array
      }
      }
      ej
    • Sep 06 2007 | 11:33 pm
      Thanks a lot for both of these. I've been learning javascript and
      seeing examples like these really enlighten things for me. Very
      slick. The use of arrayfromargs is especially nice.
      Thanks again,
      Keith
      On 9/6/07, Emmanuel Jourdan wrote:
      > On 6 sept. 07, at 23:17, Emmanuel Jourdan wrote:
      >
      > > anything allows you to receive any message. For example, if you
      > > send an integer and the msg_int method is not defined, the anything
      > > function will be triggered. This is espacially useful for symbols
      > > as it's not possible to think about every symbol you could send.
      >
      > Maybe an example will make it clearer, to achieve the changeany you
      > could have only use the anything method:
      >
      > var lastThing = new Array();
      >
      > function anything()
      > {
      > var i;
      > var tmp = arrayfromargs(messagename, arguments); // make an array
      > from the message
      > var isDifferent = false;
      >
      > if (lastThing.length == tmp.length) {
      > for (i = 0; i < tmp.length; i++)
      > if (lastThing[i] != tmp[i]) {
      > isDifferent = true;
      > break;
      > }
      > } else
      > isDifferent = true;
      >
      > if (isDifferent) { // it has changed
      > outlet(0, tmp);
      > lastThing = arrayfromargs(messagename, arguments); // it's easier
      > to call arrayfromargs again to make the copy of the array
      > }
      > }
      >
      > ej
      >
      >
      >
    • Sep 07 2007 | 3:55 pm
      On 7 sept. 07, at 01:33, keith manlove wrote:
      > Thanks a lot for both of these. I've been learning javascript and
      > seeing examples like these really enlighten things for me. Very
      > slick. The use of arrayfromargs is especially nice.
      Sure. arrayfromargs is really cool in that particular case, because
      it's an easy way to copy the array, which is usually a lame is
      JavaScript.
      ej
    • Sep 08 2007 | 3:06 am
      Quote: Emmanuel Jourdan wrote on Sat, 08 September 2007 03:55
      ----------------------------------------------------
      > it's an easy way to copy the array, which is usually a lame is
      > JavaScript.
      I don't see any practical difference between a hypothetical array copy method like:
      newarray = oldarray.copy();
      and using the slice method:
      newarray = oldarray.slice(0);
      But in any case, you can always add a copy method to the Array object prototype:
      Array.prototype.copy = function()
      {
      return this.slice(0);
      }
      a = new Array(1, 2, 3, 4, 5);
      b = a.copy();
      post(b);
    • Sep 08 2007 | 2:32 pm
    • Sep 08 2007 | 7:04 pm
      On Sep 7, 2007, at 8:55 AM, Emmanuel Jourdan wrote:
      > Sure. arrayfromargs is really cool in that particular case, because
      > it's an easy way to copy the array, which is usually a lame is
      > JavaScript.
      FWIW, the real reason that arrayfromargs() exists is that the
      arguments object is *not* an array, even though it can be accessed
      with array syntax. More info below:
      http://developer.mozilla.org/en/docs/
      Core_JavaScript_1.5_Reference:Functions:arguments
      -Joshua
    • Sep 13 2007 | 7:21 pm
      ej,
      thanks for the more elegant version. I suspected there was a way to leverage anything() to take care of, well, everything, but I was getting hung up on it for reasons i can't recall.
      and thanks for the slice reminder - i always forget about that!
      Peter.