From ebmoluoc at gmail.com Sat Sep 1 08:03:17 2007 From: ebmoluoc at gmail.com (P C) Date: Sat Sep 1 08:03:19 2007 Subject: [javascript-dev] create a list of the last n values (or anything else) In-Reply-To: <46D7CDDD.6020908@addcom.de> References: <1bb18.46cd5549@www.cycling74.com> <46D7CDDD.6020908@addcom.de> Message-ID: <5ef5478d0709010703p1ff1b32ew8451d5cd8e19b0a7@mail.gmail.com> Hi, Here's one of the externals I'm developping for SIlex creations inc, a compagny specialized in speech synthesis and recognition. You need to put as argument the "n" in "the last n-elements". Works with float and int. Next version will work with symbols too. Our library of machine learning (useful for gesture recognition with the Wii) is coming quite soon. Stay tune... PC -------------- next part -------------- A non-text attachment was scrubbed... Name: silex.bucket.mxo.zip Type: application/zip Size: 4478 bytes Desc: not available Url : http://www.cycling74.com/pipermail/javascript-dev/attachments/20070901/438b08a4/silex.bucket.mxo.zip From c74-mailinglists at e--j.com Sat Sep 1 10:49:26 2007 From: c74-mailinglists at e--j.com (Emmanuel Jourdan) Date: Sat Sep 1 10:49:53 2007 Subject: [javascript-dev] create a list of the last n values (or anything else) In-Reply-To: <5ef5478d0709010703p1ff1b32ew8451d5cd8e19b0a7@mail.gmail.com> References: <1bb18.46cd5549@www.cycling74.com> <46D7CDDD.6020908@addcom.de> <5ef5478d0709010703p1ff1b32ew8451d5cd8e19b0a7@mail.gmail.com> Message-ID: On 1 sept. 07, at 16:03, P C wrote: > Hi, > Here's one of the externals I'm developping for SIlex creations inc, a > compagny specialized in speech synthesis and recognition. > > You need to put as argument the "n" in "the last n-elements". > > Works with float and int. Next version will work with symbols too. > > Our library of machine learning (useful for gesture recognition with > the Wii) is coming quite soon. Stay tune... I added this feature as long as few others to zl for the next release? ej From justaz1984 at o2.pl Mon Sep 3 09:25:48 2007 From: justaz1984 at o2.pl (justyna) Date: Mon Sep 3 09:25:49 2007 Subject: [javascript-dev] how to do sth like that?/javascript Message-ID: <1be58.46dc277a@www.cycling74.com> Hi! There is a nice feature that I've seen on data recovery services site. When you move mouse over the "Country", in the top on the right side of the page, then the frame pop ups, with he list of country to choose. I want o do sth like that on my page, but I've just started to learn javascript, and I have no idea how to do it...can enybody help me out? Here is a link to that site where I've seen these feature: http://www.salvagedata.com Thank for your help. From pdelges at radiantslab.com Mon Sep 3 09:59:06 2007 From: pdelges at radiantslab.com (Patrick Delges) Date: Mon Sep 3 09:59:09 2007 Subject: [javascript-dev] how to do sth like that?/javascript In-Reply-To: <1be58.46dc277a@www.cycling74.com> References: <1be58.46dc277a@www.cycling74.com> Message-ID: <66eaa97c117463e1873c237df89ab5e5@radiantslab.com> On 3 sept. 07, at 17:25, justyna wrote: > > Hi! > There is a nice feature that I've seen on data recovery services site. > When you move mouse over the "Country", in the top on the right side > of the page, then the frame pop ups, > with he list of country to choose. I want o do sth like that on my > page, but I've just started to learn javascript, This is a feature of the navigators, not of JavaScript itself. If you look at the html code of the page, you'll see how it's done. If you want to do the sth like that on your web page, you wrote on the wrong list, this one is focused on JavaScript for Max. p _____________________________ Patrick Delges Centre de Recherches et de Formation Musicales de Wallonie asbl http://users.skynet.be/crfmw/max From justaz1984 at o2.pl Mon Sep 3 10:22:33 2007 From: justaz1984 at o2.pl (justyna) Date: Mon Sep 3 10:22:34 2007 Subject: [javascript-dev] Re: how to do sth like that?/javascript In-Reply-To: <66eaa97c117463e1873c237df89ab5e5@radiantslab.com> Message-ID: <1be5d.46dc34c8@www.cycling74.com> thank you very much for your help :) have a nice day From pnyboer at slambassador.com Thu Sep 6 12:23:11 2007 From: pnyboer at slambassador.com (pnyboer) Date: Thu Sep 6 12:23:14 2007 Subject: [javascript-dev] [sharingisfun] js based change filter Message-ID: <1bf60.46e0458f@www.cycling74.com> A javascript and help file for a "change" style filter for any messsage, list, float, or int, rather than just ints or floats. http://www.yowstar.com/share/changeany.zip Enjoy, Peter. -- * * * * The Altamont 2 oz light rum 3/4 oz lime juice 1/2 oz orange cura?ao 1/4 oz orgeat splash of pernod handful of fresh mint leaves shake contents vigorously with ice. Strain well into a chilled cocktail glass. * * * * From keithmanlove at gmail.com Thu Sep 6 12:31:54 2007 From: keithmanlove at gmail.com (keith manlove) Date: Thu Sep 6 12:31:57 2007 Subject: [javascript-dev] [sharingisfun] js based change filter In-Reply-To: <1bf60.46e0458f@www.cycling74.com> References: <1bf60.46e0458f@www.cycling74.com> Message-ID: <64ab801a0709061131pc50208bvb9de82d1da9bd3f3@mail.gmail.com> I don't think you included the js. Keith On 9/6/07, pnyboer wrote: > > A javascript and help file for a "change" style filter for any messsage, list, float, or int, rather than just ints or floats. > http://www.yowstar.com/share/changeany.zip > > Enjoy, > > Peter. > > -- > * * * * > The Altamont > 2 oz light rum > 3/4 oz lime juice > 1/2 oz orange cura?ao > 1/4 oz orgeat > splash of pernod > handful of fresh mint leaves > shake contents vigorously with ice. > Strain well into a chilled cocktail glass. > * * * * > _______________________________________________ > javascript-dev mailing list > javascript-dev@cycling74.com > http://www.cycling74.com/mailman/listinfo/javascript-dev > From pnyboer at slambassador.com Thu Sep 6 13:39:19 2007 From: pnyboer at slambassador.com (pnyboer) Date: Thu Sep 6 13:39:21 2007 Subject: [javascript-dev] Re: [sharingisfun] js based change filter In-Reply-To: <1bf60.46e0458f@www.cycling74.com> Message-ID: <1bf6a.46e05766@www.cycling74.com> whoops, grabbed the .pat, not the .js, for the archive. .zip updated! -- * * * * The Altamont 2 oz light rum 3/4 oz lime juice 1/2 oz orange cura?ao 1/4 oz orgeat splash of pernod handful of fresh mint leaves shake contents vigorously with ice. Strain well into a chilled cocktail glass. * * * * From keithmanlove at gmail.com Thu Sep 6 14:04:56 2007 From: keithmanlove at gmail.com (keith manlove) Date: Thu Sep 6 14:05:00 2007 Subject: [javascript-dev] Re: [sharingisfun] js based change filter In-Reply-To: <1bf6a.46e05766@www.cycling74.com> References: <1bf60.46e0458f@www.cycling74.com> <1bf6a.46e05766@www.cycling74.com> Message-ID: <64ab801a0709061304pe141cccr9f6ca4ab4494e3f3@mail.gmail.com> alright... works like it claims to... nice. Thanks for that. One thing... and forgive me if this is obvious... what's the anything function for? Keith On 9/6/07, pnyboer wrote: > > whoops, grabbed the .pat, not the .js, for the archive. > .zip updated! > -- > * * * * > The Altamont > 2 oz light rum > 3/4 oz lime juice > 1/2 oz orange cura?ao > 1/4 oz orgeat > splash of pernod > handful of fresh mint leaves > shake contents vigorously with ice. > Strain well into a chilled cocktail glass. > * * * * > _______________________________________________ > javascript-dev mailing list > javascript-dev@cycling74.com > http://www.cycling74.com/mailman/listinfo/javascript-dev > From c74-mailinglists at e--j.com Thu Sep 6 15:17:15 2007 From: c74-mailinglists at e--j.com (Emmanuel Jourdan) Date: Thu Sep 6 15:17:23 2007 Subject: [javascript-dev] Re: [sharingisfun] js based change filter In-Reply-To: <64ab801a0709061304pe141cccr9f6ca4ab4494e3f3@mail.gmail.com> References: <1bf60.46e0458f@www.cycling74.com> <1bf6a.46e05766@www.cycling74.com> <64ab801a0709061304pe141cccr9f6ca4ab4494e3f3@mail.gmail.com> Message-ID: 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 From c74-mailinglists at e--j.com Thu Sep 6 17:02:23 2007 From: c74-mailinglists at e--j.com (Emmanuel Jourdan) Date: Thu Sep 6 17:02:29 2007 Subject: [javascript-dev] Re: [sharingisfun] js based change filter In-Reply-To: References: <1bf60.46e0458f@www.cycling74.com> <1bf6a.46e05766@www.cycling74.com> <64ab801a0709061304pe141cccr9f6ca4ab4494e3f3@mail.gmail.com> Message-ID: <22E2676F-FAB0-43A6-879B-C2D0CB43F3A1@e--j.com> 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 From keithmanlove at gmail.com Thu Sep 6 17:33:17 2007 From: keithmanlove at gmail.com (keith manlove) Date: Thu Sep 6 17:33:20 2007 Subject: [javascript-dev] Re: [sharingisfun] js based change filter In-Reply-To: <22E2676F-FAB0-43A6-879B-C2D0CB43F3A1@e--j.com> References: <1bf60.46e0458f@www.cycling74.com> <1bf6a.46e05766@www.cycling74.com> <64ab801a0709061304pe141cccr9f6ca4ab4494e3f3@mail.gmail.com> <22E2676F-FAB0-43A6-879B-C2D0CB43F3A1@e--j.com> Message-ID: <64ab801a0709061633t335d89fbvcffe82c57c31bbb6@mail.gmail.com> 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 > > > _______________________________________________ > javascript-dev mailing list > javascript-dev@cycling74.com > http://www.cycling74.com/mailman/listinfo/javascript-dev > From c74-mailinglists at e--j.com Fri Sep 7 09:55:02 2007 From: c74-mailinglists at e--j.com (Emmanuel Jourdan) Date: Fri Sep 7 09:55:10 2007 Subject: [javascript-dev] Re: [sharingisfun] js based change filter In-Reply-To: <64ab801a0709061633t335d89fbvcffe82c57c31bbb6@mail.gmail.com> References: <1bf60.46e0458f@www.cycling74.com> <1bf6a.46e05766@www.cycling74.com> <64ab801a0709061304pe141cccr9f6ca4ab4494e3f3@mail.gmail.com> <22E2676F-FAB0-43A6-879B-C2D0CB43F3A1@e--j.com> <64ab801a0709061633t335d89fbvcffe82c57c31bbb6@mail.gmail.com> Message-ID: <9117D761-DBB3-4CCF-B29F-011D33E9D5BF@e--j.com> 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 From cycling74forum at opuslocus.net Fri Sep 7 21:06:30 2007 From: cycling74forum at opuslocus.net (John Pitcairn) Date: Fri Sep 7 21:06:31 2007 Subject: [javascript-dev] Re: Re: [sharingisfun] js based change filter In-Reply-To: <9117D761-DBB3-4CCF-B29F-011D33E9D5BF@e--j.com> Message-ID: <1c00f.46e211b5@www.cycling74.com> 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); From c74-mailinglists at e--j.com Sat Sep 8 08:32:14 2007 From: c74-mailinglists at e--j.com (Emmanuel Jourdan) Date: Sat Sep 8 08:32:23 2007 Subject: [javascript-dev] Re: Re: [sharingisfun] js based change filter In-Reply-To: <1c00f.46e211b5@www.cycling74.com> References: <1c00f.46e211b5@www.cycling74.com> Message-ID: <8A8CBF79-9A99-4BE3-BF2E-B11C792F84EB@e--j.com> On 8 sept. 07, at 05:06, John Pitcairn wrote: > 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); There's no difference, except that it's built-in, so you don't even have to modify the array prototype. I always found it weird to have to use slice(0) to make a copy of an array? ej From jkc at musork.com Sat Sep 8 13:04:06 2007 From: jkc at musork.com (Joshua Kit Clayton) Date: Sat Sep 8 13:04:15 2007 Subject: [javascript-dev] Re: [sharingisfun] js based change filter In-Reply-To: <9117D761-DBB3-4CCF-B29F-011D33E9D5BF@e--j.com> References: <1bf60.46e0458f@www.cycling74.com> <1bf6a.46e05766@www.cycling74.com> <64ab801a0709061304pe141cccr9f6ca4ab4494e3f3@mail.gmail.com> <22E2676F-FAB0-43A6-879B-C2D0CB43F3A1@e--j.com> <64ab801a0709061633t335d89fbvcffe82c57c31bbb6@mail.gmail.com> <9117D761-DBB3-4CCF-B29F-011D33E9D5BF@e--j.com> Message-ID: <5458CC63-BC02-4A36-8CD4-35501AA47FF5@musork.com> 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 From pnyboer at slambassador.com Thu Sep 13 13:21:11 2007 From: pnyboer at slambassador.com (pnyboer) Date: Thu Sep 13 13:21:13 2007 Subject: [javascript-dev] Re: [sharingisfun] js based change filter In-Reply-To: <1bf60.46e0458f@www.cycling74.com> Message-ID: <1c1fc.46e98da7@www.cycling74.com> 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. -- * * * * The Altamont 2 oz light rum 3/4 oz lime juice 1/2 oz orange cura?ao 1/4 oz orgeat splash of pernod handful of fresh mint leaves shake contents vigorously with ice. Strain well into a chilled cocktail glass. * * * * From lists at asquare.org Sun Sep 16 12:52:41 2007 From: lists at asquare.org (Garrett Lynch) Date: Sun Sep 16 12:52:43 2007 Subject: [javascript-dev] horizontal slider Message-ID: <1c2e6.46ed7b77@www.cycling74.com> hi Trying to modify the vertical jsui slider in max as a horizontal slider. I think i am nearly there but I can't figure out the final math to get the mouse sensitivity to be correct. can anyone see where I am going wrong? Thanks in advance. a+ gar /* a simple slider arguments: fgred fggreen fgblue bgred bggreen bgblue linered linegreen lineblue mode foreground red (0 - 255), foreground green (0 - 255), foreground blue (0 - 255), background red (0 - 255), background green (0 - 255), background blue (0 - 255), line red (0 - 255), line green (0 - 255), line blue (0 - 255), use knob (1 - ellipse, 2 - triangle) */ sketch.default2d(); var val = 0; var vbrgb = [1.,1.,1.]; var vfrgb = [0.2,0.2,0.2]; var vrgb2 = [0.5,0.5,0.5]; var vmode = 0; var voutline = 1; // process arguments if (jsarguments.length>1) vfrgb[0] = jsarguments[1]/255.; if (jsarguments.length>2) vfrgb[1] = jsarguments[2]/255.; if (jsarguments.length>3) vfrgb[2] = jsarguments[3]/255.; if (jsarguments.length>4) vbrgb[0] = jsarguments[4]/255.; if (jsarguments.length>5) vbrgb[1] = jsarguments[5]/255.; if (jsarguments.length>6) vbrgb[2] = jsarguments[6]/255.; if (jsarguments.length>7) vrgb2[0] = jsarguments[7]/255.; if (jsarguments.length>8) vrgb2[1] = jsarguments[8]/255.; if (jsarguments.length>9) vrgb2[2] = jsarguments[9]/255.; if (jsarguments.length>10) vmode = jsarguments[10]; if (jsarguments.length>11) voutline = jsarguments[11]; draw(); function draw() { var width = box.rect[2] - box.rect[0]; var height = box.rect[3] - box.rect[1]; var aspect = width/height; with (sketch) { //scale everything to box size glmatrixmode("modelview"); glpushmatrix(); glscale(aspect,1,1); glenable("line_smooth"); // erase background glclearcolor(vbrgb); glclear(); //draw line //this is the slider background with border glcolor(vrgb2); shapeslice(1,1); moveto(0,0); plane(0.8,0.15); if (voutline) { glcolor(0,0,0); glpolygonmode("front_and_back","line"); plane(0.8,0.15); glpolygonmode("front_and_back","fill"); } // draw marker //the slider knob, there are three types, triangle / ellipse / rectangle glcolor(vfrgb); switch (vmode) { case 2: // triangle shapeslice(1,1); moveto(1.6*val-0.8,0.5); //on screen in range -0.8 to 0.8 plane(0.2,0.,0.2,0.1); //triangle if (voutline) { glcolor(0,0,0); glpolygonmode("front_and_back","line"); plane(0.2,0.,0.2,0.1); //triangle glpolygonmode("front_and_back","fill"); } break; case 1: // ellipse shapeslice(40,1); moveto(1.6*val-0.8,0); //on screen in range -0.8 to 0.8 ellipse(0.6,0.05); if (voutline) { glcolor(0,0,0); frameellipse(0.6,0.05); } break; default: // rectangle shapeslice(1,1); //moveto(1.6*val-0.7,0); //on screen in range -0.8 to 0.8 moveto(1.6*val-0.8,0.); //on screen in range -0.8 to 0.8 plane(0.05,0.8); if (voutline) { glcolor(0,0,0); glpolygonmode("front_and_back","line"); plane(0.05,0.8); glpolygonmode("front_and_back","fill"); } } //reset transformation matrix glmatrixmode("modelview"); glpopmatrix(); } } function bang() { draw(); refresh(); outlet(0,val); } function msg_float(v) { val = Math.min(Math.max(0,v),1); notifyclients(); bang(); } function fsaa(v) { sketch.fsaa = v; bang(); } function frgb(r,g,b) { vfrgb[0] = r/255.; vfrgb[1] = g/255.; vfrgb[2] = b/255.; draw(); refresh(); } function rgb2(r,g,b) { vrgb2[0] = r/255.; vrgb2[1] = g/255.; vrgb2[2] = b/255.; draw(); refresh(); } function brgb(r,g,b) { vbrgb[0] = r/255.; vbrgb[1] = g/255.; vbrgb[2] = b/255.; draw(); refresh(); } function mode(v) { vmode = v; draw(); refresh(); } function outline(v) { voutline = v; draw(); refresh(); } function setvalueof(v) { msg_float(v); } function getvalueof() { return val; } function onclick(x,y,but,cmd,shift,capslock,option,ctrl) { ondrag(x,y,but,cmd,shift,capslock,option,ctrl) } onclick.local = 1; //private. could be left public to permit "synthetic" events function ondrag(x,y,but,cmd,shift,capslock,option,ctrl) { var f,a; a = sketch.screentoworld(x,y); //detect horizontal movement f = ((a[0] + 0.8) / 2.0) + 0.2; //post(f); msg_float(f); //set new value with clipping + refresh } ondrag.local = 1; //private. could be left public to permit "synthetic" events function onresize(w,h) { draw(); refresh(); } onresize.local = 1; //private From c74-mailinglists at e--j.com Sun Sep 16 14:48:35 2007 From: c74-mailinglists at e--j.com (Emmanuel Jourdan) Date: Sun Sep 16 14:48:41 2007 Subject: [javascript-dev] horizontal slider In-Reply-To: <1c2e6.46ed7b77@www.cycling74.com> References: <1c2e6.46ed7b77@www.cycling74.com> Message-ID: <812CB4C7-6386-446F-8AFA-6763F8C897F6@e--j.com> On 16 sept. 07, at 20:52, Garrett Lynch wrote: > hi > > Trying to modify the vertical jsui slider in max as a horizontal > slider. I think i am nearly there but I can't figure out the final > math to get the mouse sensitivity to be correct. can anyone see > where I am going wrong? Thanks in advance. The x axis is between -aspect and +aspect which depends on the width/ height ratio. So you just have to calculate the aspect and scale your f value to be between 0 and 1: function ondrag(x,y,but,cmd,shift,capslock,option,ctrl) { var f,a, height, width, aspect; height = box.rect[3] - box.rect[1]; width = box.rect[2] - box.rect[0]; aspect = width/height; a = sketch.screentoworld(x,y); //detect horizontal movement f = (a[0] + aspect) / (2*aspect); msg_float(f); //set new value with clipping + refresh } HTH, ej From lists at asquare.org Mon Sep 17 12:34:21 2007 From: lists at asquare.org (Garrett Lynch) Date: Mon Sep 17 12:34:23 2007 Subject: [javascript-dev] Re: horizontal slider In-Reply-To: <812CB4C7-6386-446F-8AFA-6763F8C897F6@e--j.com> Message-ID: <1c358.46eec8ab@www.cycling74.com> Hi thanks for this, definitely seems to work better than mine but the slider itself doesn't seem to follow the cursor pixel for pixel at ether end of the slider - does it need some sort of offset?? a+ gar /* a simple slider arguments: fgred fggreen fgblue bgred bggreen bgblue linered linegreen lineblue mode foreground red (0 - 255), foreground green (0 - 255), foreground blue (0 - 255), background red (0 - 255), background green (0 - 255), background blue (0 - 255), line red (0 - 255), line green (0 - 255), line blue (0 - 255), use knob (1 - ellipse, 2 - triangle) */ sketch.default2d(); var val = 0; var vbrgb = [1.,1.,1.]; var vfrgb = [0.2,0.2,0.2]; var vrgb2 = [0.5,0.5,0.5]; var vmode = 0; var voutline = 1; // process arguments if (jsarguments.length>1) vfrgb[0] = jsarguments[1]/255.; if (jsarguments.length>2) vfrgb[1] = jsarguments[2]/255.; if (jsarguments.length>3) vfrgb[2] = jsarguments[3]/255.; if (jsarguments.length>4) vbrgb[0] = jsarguments[4]/255.; if (jsarguments.length>5) vbrgb[1] = jsarguments[5]/255.; if (jsarguments.length>6) vbrgb[2] = jsarguments[6]/255.; if (jsarguments.length>7) vrgb2[0] = jsarguments[7]/255.; if (jsarguments.length>8) vrgb2[1] = jsarguments[8]/255.; if (jsarguments.length>9) vrgb2[2] = jsarguments[9]/255.; if (jsarguments.length>10) vmode = jsarguments[10]; if (jsarguments.length>11) voutline = jsarguments[11]; draw(); function draw() { var width = box.rect[2] - box.rect[0]; var height = box.rect[3] - box.rect[1]; var aspect = width/height; with (sketch) { //scale everything to box size glmatrixmode("modelview"); glpushmatrix(); glscale(aspect,1,1); glenable("line_smooth"); // erase background glclearcolor(vbrgb); glclear(); //draw line //this is the slider background with border glcolor(vrgb2); shapeslice(1,1); moveto(0,0); plane(0.8,0.15); if (voutline) { glcolor(0,0,0); glpolygonmode("front_and_back","line"); plane(0.8,0.15); glpolygonmode("front_and_back","fill"); } // draw marker //the slider knob, there are three types, triangle / ellipse / rectangle glcolor(vfrgb); switch (vmode) { case 2: // triangle shapeslice(1,1); moveto(1.6*val-0.8,0.5); //on screen in range -0.8 to 0.8 plane(0.2,0.,0.2,0.1); //triangle if (voutline) { glcolor(0,0,0); glpolygonmode("front_and_back","line"); plane(0.2,0.,0.2,0.1); //triangle glpolygonmode("front_and_back","fill"); } break; case 1: // ellipse shapeslice(40,1); moveto(1.6*val-0.8,0); //on screen in range -0.8 to 0.8 ellipse(0.6,0.05); if (voutline) { glcolor(0,0,0); frameellipse(0.6,0.05); } break; default: // rectangle shapeslice(1,1); //moveto(1.6*val-0.7,0); //on screen in range -0.8 to 0.8 moveto(1.6*val-0.8,0.); //on screen in range -0.8 to 0.8 plane(0.05,0.8); if (voutline) { glcolor(0,0,0); glpolygonmode("front_and_back","line"); plane(0.05,0.8); glpolygonmode("front_and_back","fill"); } } //reset transformation matrix glmatrixmode("modelview"); glpopmatrix(); } } function bang() { draw(); refresh(); outlet(0,val); } function msg_float(v) { val = Math.min(Math.max(0,v),1); notifyclients(); bang(); } function fsaa(v) { sketch.fsaa = v; bang(); } function frgb(r,g,b) { vfrgb[0] = r/255.; vfrgb[1] = g/255.; vfrgb[2] = b/255.; draw(); refresh(); } function rgb2(r,g,b) { vrgb2[0] = r/255.; vrgb2[1] = g/255.; vrgb2[2] = b/255.; draw(); refresh(); } function brgb(r,g,b) { vbrgb[0] = r/255.; vbrgb[1] = g/255.; vbrgb[2] = b/255.; draw(); refresh(); } function mode(v) { vmode = v; draw(); refresh(); } function outline(v) { voutline = v; draw(); refresh(); } function setvalueof(v) { msg_float(v); } function getvalueof() { return val; } function onclick(x,y,but,cmd,shift,capslock,option,ctrl) { ondrag(x,y,but,cmd,shift,capslock,option,ctrl) } onclick.local = 1; //private. could be left public to permit "synthetic" events function ondrag(x,y,but,cmd,shift,capslock,option,ctrl) { var f,a, height, width, aspect; height = box.rect[3] - box.rect[1]; width = box.rect[2] - box.rect[0]; aspect = width/height; a = sketch.screentoworld(x,y); //detect horizontal movement f = (a[0] + aspect) / (2*aspect); msg_float(f); //set new value with clipping + refresh } ondrag.local = 1; //private. could be left public to permit "synthetic" events function onresize(w,h) { draw(); refresh(); } onresize.local = 1; //private From c74-mailinglists at e--j.com Mon Sep 17 14:21:18 2007 From: c74-mailinglists at e--j.com (Emmanuel Jourdan) Date: Mon Sep 17 14:21:31 2007 Subject: [javascript-dev] Re: horizontal slider In-Reply-To: <1c358.46eec8ab@www.cycling74.com> References: <1c358.46eec8ab@www.cycling74.com> Message-ID: <33602CAC-FF7B-483A-AA7A-29A36CA60FBC@e--j.com> On 17 sept. 07, at 20:34, Garrett Lynch wrote: > Hi > > thanks for this, definitely seems to work better than mine but the > slider itself doesn't seem to follow the cursor pixel for pixel at > ether end of the slider - does it need some sort of offset?? Then it's 80 % of the aspect ;-) function ondrag(x,y,but,cmd,shift,capslock,option,ctrl) { var f,a, height, width, aspect; height = box.rect[3] - box.rect[1]; width = box.rect[2] - box.rect[0]; aspect = width/height; aspect *= 0.8; // 80 % of the aspect a = sketch.screentoworld(x,y); //detect horizontal movement f = (a[0] + aspect) / (2*aspect); msg_float(f); //set new value with clipping + refresh } Cheers, ej From lists at asquare.org Mon Sep 17 15:08:11 2007 From: lists at asquare.org (Garrett Lynch) Date: Mon Sep 17 15:08:14 2007 Subject: [javascript-dev] Re: Re: horizontal slider In-Reply-To: <33602CAC-FF7B-483A-AA7A-29A36CA60FBC@e--j.com> Message-ID: <1c36d.46eeecbb@www.cycling74.com> that does the trick! :) thanks for your help. a+ gar From pnyboer at slambassador.com Fri Sep 21 09:06:19 2007 From: pnyboer at slambassador.com (pnyboer) Date: Fri Sep 21 09:06:25 2007 Subject: [javascript-dev] [sharingisfun] map and scale 16 midi controllers Message-ID: <1c484.46f3ddea@www.cycling74.com> The cc16 javascript can be used in an abstration to map and scale MIDI controllers to 16 outputs as desired. Used in an abstraction, it's very handy for quickly and neatly dropping your MIDI controller(s) into any patch. Why I didn't make this long ago, I dont' know! Peter N. -- * * * * The Altamont 2 oz light rum 3/4 oz lime juice 1/2 oz orange cura?ao 1/4 oz orgeat splash of pernod handful of fresh mint leaves shake contents vigorously with ice. Strain well into a chilled cocktail glass. * * * * -------------- next part -------------- A non-text attachment was scrubbed... Name: cc16.zip Type: application/zip Size: 4378 bytes Desc: not available Url : http://www.cycling74.com/pipermail/javascript-dev/attachments/20070921/ca29496c/cc16.zip From pnyboer at slambassador.com Fri Sep 21 09:07:48 2007 From: pnyboer at slambassador.com (pnyboer) Date: Fri Sep 21 09:07:50 2007 Subject: [javascript-dev] Re: [sharingisfun] map and scale 16 midi controllers In-Reply-To: <1c484.46f3ddea@www.cycling74.com> Message-ID: <1c485.46f3de44@www.cycling74.com> and for the sake of the archive, a version that I can update: http://www.yowstar.com/share/cc16.zip -- * * * * The Altamont 2 oz light rum 3/4 oz lime juice 1/2 oz orange cura?ao 1/4 oz orgeat splash of pernod handful of fresh mint leaves shake contents vigorously with ice. Strain well into a chilled cocktail glass. * * * * From Dynamicell at hotmail.com Sat Sep 22 21:32:25 2007 From: Dynamicell at hotmail.com (Nicholas C. Raftis III) Date: Sat Sep 22 21:32:26 2007 Subject: [javascript-dev] controller/lfo mapping slider Message-ID: <1c4d8.46f5de48@www.cycling74.com> I have an idea for something that I would really like to implement as a JSUI object, If someone has already created something like this I would love to get it. Heres the basic idea, which is very similar to native instuments massive synth method of controller mapping: there is a slider with two inputs, the left main input would control the "main controller" amount out, and the right input would control the "lfo/sequencer" variation that would apply to the slider, so the user can click, or have a slider driving the main center of the slider, and shift or option click and drag to create a range that the lfo would effect around that slider. Does this make sense? massive features drag and drop which is a bit too involved and not really worth it for what im working on, and I also prefer sliders to massive's knobs, but I feel like this would be a really great UI object because it allows multiple control methods in a small space. Ive made something that does this with max objects, using range, a gate for inverting, and a little drop down for receives from the lfos and step sequencers, but it would be great for space efficiency and user friendliness to have one object that does this. Also the range slider in max is a bit limited in its functionality and graphic style. I really know nothing of javascript, so if anyone else wants to step in and make this highly useful object, I would appreciate it. I will try some things on my own but type-coding in c and JS was never really something I enjoyed... thats why I like max! Heres the version I made with max, it doesn't feature a seperate "main" input for controlling the center of the slider once the stepsequencer is applied: #P window setfont "Sans Serif" 9.; #P window linecount 1; #P newex 122 191 27 196617 + 1; #P newex 125 215 38 196617 gate 2; #P newex 153 242 93 196617 scale 0 127 127 0; #P newex 125 302 93 196617 scale 0 127 0 127; #P user ubumenu 55 103 15 196617 0 1 1 0; #X setrgb 255 255 255 131 150 183 99 99 99 4 4 4 141 141 141 112 112 112; #X add none; #X add ______________; #X add 1_step_sequencer; #X add 2_step_sequencer; #X add 3_step_sequencer; #X add 4_step_sequencer; #X add 5_step_sequencer; #X add 6_step_sequencer; #X add 7_step_sequencer; #X add 8_step_sequencer; #X add 9_step_sequencer; #X add morph_ammt_x; #X add morph_ammt_y; #X add morph_ammt_z; #X add 1_trajectory_x; #X add 1_trajectory_y; #X add 2_trajectory_x; #X add 2_trajectory_y; #X add icubex_bang1; #X add icubex_bang2; #X add icubex_bend1; #X add icubex_bend2; #X add icubex_gforce1x; #X add icubex_gforce1y; #X add icubex_tilt1x; #X add icubex_tilt1y; #X prefix_set 0 0 0; #X pattrmode 1; #P toggle 69 104 15 0; #P message 50 69 26 196617 127; #P message 35 70 14 196617 0; #P newex 31 41 48 196617 loadbang; #P outlet 71 368 15 0; #P newex 70 345 95 196617 scale 0 127 $1 $2; #P user multiSlider 69 119 15 97 0. 127. 1 2665 47 0 0 5 0 50 1; #M frgb 121 130 178; #M brgb 255 255 255; #M rgb2 127 127 127; #M rgb3 124 124 124; #M rgb4 37 52 91; #M rgb5 74 105 182; #M rgb6 112 158 18; #M rgb7 149 211 110; #M rgb8 187 9 201; #M rgb9 224 62 37; #M rgb10 7 114 128; #P user rslider 56 118 14 97 128 1 0 11 0; #P user panel 53 100 35 119; #X brgb 109 118 189; #X frgb 0 0 0; #X border 1; #X rounded 5; #X shadow 5; #X done; #P newex 155 167 61 196617 prepend set; #P newex 156 190 43 196617 receive; #P connect 8 0 3 0; #P connect 8 0 10 0; #P connect 7 0 8 0; #P connect 7 0 9 0; #P fasten 12 0 10 0 130 332 104 332 104 93 74 93; #P connect 9 0 3 1; #P connect 4 0 5 0; #P connect 5 0 6 0; #P connect 14 0 12 0; #P connect 13 0 12 0; #P fasten 10 0 15 0 74 155 127 155; #P connect 15 0 14 0; #P connect 0 0 14 1; #P connect 14 1 13 0; #P fasten 11 1 1 0 62 143 160 143; #P connect 1 0 0 0; #P fasten 3 0 12 3 61 286 178 286; #P fasten 3 1 12 4 65 281 194 281; #P window clipboard copycount 16; -- -=ili!ili=- www.Axiom-Crux.net -=ili!ili=- From pnyboer at slambassador.com Sun Sep 23 10:28:14 2007 From: pnyboer at slambassador.com (pnyboer) Date: Sun Sep 23 10:28:16 2007 Subject: [javascript-dev] Re: controller/lfo mapping slider In-Reply-To: <1c4d8.46f5de48@www.cycling74.com> Message-ID: <1c4f8.46f6941d@www.cycling74.com> this WOULD be a nice way to do it....but my experience with jsui so far would recommend against this, as I assume the knob is going to animate w/ the lfo, and if you have a few of these, your cpu is suddenly going to be taken over by your nifty UI, rather than your beautiful sounds/images. JSUIs seem pretty inefficient, apparently becuase it is all software rendered OpenGL, even if you speedlim and turn fsaa off. If I'm wrong, I'd LOVE to hear about it, but I've had to avoid any animated jsuis in my patches becuase they tend to kill it...sad but true. -- * * * * The Altamont 2 oz light rum 3/4 oz lime juice 1/2 oz orange cura?ao 1/4 oz orgeat splash of pernod handful of fresh mint leaves shake contents vigorously with ice. Strain well into a chilled cocktail glass. * * * * From Dynamicell at hotmail.com Mon Sep 24 10:09:58 2007 From: Dynamicell at hotmail.com (Nicholas C. Raftis III) Date: Mon Sep 24 10:10:00 2007 Subject: [javascript-dev] Re: controller/lfo mapping slider In-Reply-To: <1c4f8.46f6941d@www.cycling74.com> Message-ID: <1c54b.46f7e156@www.cycling74.com> oh, sigh, oh well. Maybe without animation would still be functional -- -=ili!ili=- www.Axiom-Crux.net -=ili!ili=- From pnyboer at slambassador.com Mon Sep 24 11:54:57 2007 From: pnyboer at slambassador.com (pnyboer) Date: Mon Sep 24 11:54:59 2007 Subject: [javascript-dev] Re: controller/lfo mapping slider In-Reply-To: <1c4d8.46f5de48@www.cycling74.com> Message-ID: <1c55c.46f7f9f1@www.cycling74.com> you could do it by writing a js that sends commands to LCD, which is less taxing. My personal dislike of doing this (even though I still do it) is that it's not very progressive to write complex scripts that depend on quickdraw commands... -- * * * * The Altamont 2 oz light rum 3/4 oz lime juice 1/2 oz orange cura?ao 1/4 oz orgeat splash of pernod handful of fresh mint leaves shake contents vigorously with ice. Strain well into a chilled cocktail glass. * * * * From pnyboer at slambassador.com Tue Sep 25 14:19:24 2007 From: pnyboer at slambassador.com (pnyboer) Date: Tue Sep 25 14:19:26 2007 Subject: [javascript-dev] [sharingisfun] passing messages via pattrstorage Message-ID: <1c5df.46f96d4b@www.cycling74.com> I've long been craving a way to pass messages via pattrstorage to other parts of the patch. I finally realized a way to do it! For example if you have a pattrstorage with greedy on, and you want to pass some subpatch a "bang" message, I've had to rely on named number boxes and a "sel" or "t" object to convert the integer into a bang. So if I want to send the message: MovieModule::Reverse bang into pattrstorage and have it received in the MovieModule, I can do that with this small javascript: /* used to pass symbols (or anything else) to patches that are pattr-ized. name the js object that hosts this with a scripting name (such as "jim") then you can send messages like "Patch::SubPatch::jim hello" to the patch that contains this. js by Peter Nyboer pnyboer at slambassador dot com */ //begin "getset.js" autowatch = 1; var thevalue = "none"; var thevalue_ = "none"; function getvalueof() { return thevalue; } function setvalueof(v) { thevalue= v; if(thevalue != thevalue_) { outlet(0,thevalue); //post("SET",thevalue); } thevalue_ = thevalue; } function setthevalue(v){ thevalue= v; thevalue_ = thevalue; notifyclients(); } //end "getset.js" //begin "getset.help" #P window setfont "Sans Serif" 9.; #P window linecount 2; #P comment 33 148 211 196617 used for storing a symbol or arbitrary value for pattr; #P window linecount 1; #P newex 31 109 47 196617 print ??; #P newex 198 88 32 196617 print; #P objectname p[1]; #P message 195 44 73 196617 something jim; #P message 71 32 31 196617 hello; #P message 31 32 34 196617 jones; #P newex 31 58 100 196617 prepend setthevalue; #P newex 198 115 60 196617 autopattr q; #X prestore something 1 0 jim; #P objectname q; #P newex 198 65 75 196617 pattrstorage p; #X client_rect 288 399 661 627; #X storage_rect 0 0 640 240; #P objectname p; #P newex 31 79 62 196617 js getset.js; #P objectname something; #P comment 96 80 100 196617 named "something"; #P connect 7 0 2 0; #P connect 1 0 9 0; #P connect 4 0 1 0; #P connect 6 0 4 0; #P connect 5 0 4 0; #P window clipboard copycount 11; //end "getset.help" -- * * * * The Altamont 2 oz light rum 3/4 oz lime juice 1/2 oz orange cura?ao 1/4 oz orgeat splash of pernod handful of fresh mint leaves shake contents vigorously with ice. Strain well into a chilled cocktail glass. * * * * From jeremy at bootsquad.com Wed Sep 26 03:00:31 2007 From: jeremy at bootsquad.com (Jeremy Bernstein) Date: Wed Sep 26 03:00:39 2007 Subject: [javascript-dev] [sharingisfun] passing messages via pattrstorage In-Reply-To: <1c5df.46f96d4b@www.cycling74.com> References: <1c5df.46f96d4b@www.cycling74.com> Message-ID: <24746CA1-F396-4018-A27D-E6EA5513D3F0@bootsquad.com> I'm a little confused about the utility of this; what does this do that you can't do without JS? You can set the value of any pattr- compatible object via pattrstorage, even that of objects which aren't in the pattrstorage's client list. And for non-value messages to named objects, pattrforward. Am I missing something here? jb Am 25.09.2007 um 22:19 schrieb pnyboer: > I've long been craving a way to pass messages via pattrstorage to > other parts of the patch. I finally realized a way to do it! > For example if you have a pattrstorage with greedy on, and you want > to pass some subpatch a "bang" message, I've had to rely on named > number boxes and a "sel" or "t" object to convert the integer into > a bang. So if I want to send the message: > MovieModule::Reverse bang > into pattrstorage and have it received in the MovieModule, I can do > that with this small javascript: From sxa at whiterabbitdesign.co.uk Thu Sep 27 05:21:47 2007 From: sxa at whiterabbitdesign.co.uk (sean ahern) Date: Thu Sep 27 05:21:49 2007 Subject: [javascript-dev] Re: include statements possible? In-Reply-To: Message-ID: <1c6b5.46fb9249@www.cycling74.com> I know this is a -very- old thread, but, I was looking for a means of using include files, and wound up writing a basic DIY version. It basically relies on eval(), which -is- possibly inefficient, but it sucessfully allows me to use included files in my javascript code. The code needs to be pasted into one's own js code, and supports both 'local' and 'global' includes; the former live in the same directory as one's own js file, the latter live in a single central repository (defaulting to "\Cycling '74\jsincludes\" as Im using Windows). The syntax is derived from cpp, so include("lib") is a local file and include("") is a global file For ease of developing a library of includable routines, the include routine looks for a file suffixed '.h.js' -then- a file suffixed '.js'. I use the former filenaming convention for 'cleaned' libraries stripped of comments and whitespace (so there's less to read/eval), and the latter for 'development' libraries which might be heavily commented and indented. example usage -------------- //initialise buffer var includes = ""; // include various files include("local"); include(""); include(""); // merge included code eval(includes); // reclaim string buffer includes = ""; Hopefully its useful to someone. Ive used it to structure my code, as well as write 'support' libraries to do things like simplify inlet/outlet creation, and provide 'max-identical' attribute/argument declaration/handling. -include.js code attached- -------------- next part -------------- // include.js **************************************************** // VERSION 0.4 // //****************************************************************************** // history // ??/05/2007: v 0.1 : first version // 08/08/2007: v 0.2 : first proper reference version // 08/08/2007: v 0.3 : INCLUDEPATH and compiled/uncompiled handling // 27/09/2007: v 0.4 : minor tidying and better comments //****************************************************************************** // documentation // function : a standard javascript include handler (embed in js files) // can include file from local directory path or a global // directory path (default is set in INCLUDEPATH) // will search for a 'compiled' (ie stripped of whitespace/comments) // '.h.js' suffixed file first, then a raw '.js' suffixed file // // author : sean ahern (c) 2007 // // // usage example // var includes = ""; // set up include buffer // include("local"); // include local includefile 'local.h.js' or 'local.js' // include(""); // include global includefile 'global.h.js' or 'global.js' // eval(includes); // initialise included code // includes = ""; // clear buffer // //****************************************************************************** // --------------------------------------------------------- include function //---------------------------------------------- include.local = 1; function include(filename){ var INCLUDEPATH = ".\\Cycling '74\\jsincludes\\"; //or wherever suits length = filename.length; // determine full path for filename if ((filename.substring(0,1) == "<")){ //< indicates global library if ((filename.substring(length-1,length) == ">")){ // well-formed global base_filename = INCLUDEPATH + filename.substring(1,length-1); compiled_filename = base_filename + ".h.js"; raw_filename = base_filename + ".js"; }else{ //badly formed global post("ERROR in include; malformed filename '",filename, "'\n"); return; } }else{ if ((filename.substring(length-1,length) == ">")){//badly formed include post("ERROR in include; malformed filename '",filename, "'\n"); return; }else{ compiled_filename = filename + ".h.js"; raw_filename = filename + ".js"; } } // open file to copy into a string // prioritise the compiled version first file = new File(compiled_filename, "read"); file.open(); if (!(file.isopen)){ file = new File(raw_filename, "read"); file.open(); } if (file.isopen){ // read in lines of up to 120 chars at a time (compensates for strange filesize/buffer issue) // this is probably slower, but strings get weirdly truncated otherwise. fileposition = 0; while (fileposition < file.eof){ chunkread = file.readline(120); includes = includes + chunkread + "\n"; fileposition = file.position; } file.close(); }else{ post("ERROR in include; cannot open ", filename, "\n"); } }// end function include // ============================================================================= // end of code // ============================================================================= From pnyboer at slambassador.com Thu Sep 27 16:46:09 2007 From: pnyboer at slambassador.com (pnyboer) Date: Thu Sep 27 16:46:14 2007 Subject: [javascript-dev] Re: [sharingisfun] passing messages via pattrstorage In-Reply-To: <1c5df.46f96d4b@www.cycling74.com> Message-ID: <1c6e6.46fc32b0@www.cycling74.com> well, I could pass messages before to named objects or a receive, but it wouldn't be stored, then? I suppose referring to "bang" is a poor example, since I don't need to store the message "bang". I'm using pattrstorage as a hub for communication to everwhere else. I can assemble messages in a javascript somewhere, for example, and send them to pattrstorage: 1Channel::FileName "Macintosh HD:/Sounds/Drum Loop.aif" 2Channel::FileName "Macintosh HD:/Sounds/Bweep Boop.aif" 1EffectsGroup::1VST "super delay" With getset.js, I can just drop it in my patch, name it, and treat it the same as a number box. Additionally, the FileName or VST name gets stored to the preset. I haven't found another way to store symbols to a pattrstorage preset besides umenu/ubumenu. Maybe it is a bit specific for my needs and brain, but it is useful. I have a single receive hooked up to a global pattrstorage, and everything goes thru that. I guess I could use pattrforward to send my messages, but I didn't think of that long ago when I started using pattrstorage! Besides that, it is a decent example of getting js communicating with pattr. -- * * * * The Altamont 2 oz light rum 3/4 oz lime juice 1/2 oz orange cura?ao 1/4 oz orgeat splash of pernod handful of fresh mint leaves shake contents vigorously with ice. Strain well into a chilled cocktail glass. * * * * From Thinksamuel at yahoo.com Fri Sep 28 13:09:08 2007 From: Thinksamuel at yahoo.com (Samuel Van Ransbeeck) Date: Fri Sep 28 13:09:10 2007 Subject: [javascript-dev] experience with stockwatch anyone? Message-ID: <1c736.46fd5153@www.cycling74.com> Hello I tought it would be better to post this in the java forum I am wondering if anyone already used the stockwatch patch that is in the java libraies of maxmsp. I would like to use that patch to get numbers from the stock exchange but I dont know how to program in java.