Hi Jose,
Yes, that's a solution, you're right. But I was trying to do everything in ChucK, also to avoid further bottlenecks due to conversions from UDP to TCP. But I'll consider this option in case I can't find better solutions.
Cheers,
Mario
Sent from my Wiko ROBBYOn Dec 3, 2018 17:33, José de Abreu
Just an idea, i know that you patch in puredata too Mario. How about making chuck send udp to puredata and making puredata send tcp from there? actually puredata could be any other software, just to make the bridge
Em Seg, 3 de dez de 2018 13:24, Mario Buoninfante
Hi Jordan,
Thanks for your reply. I got your points and I think you're right about the different design goals. In my case I simply need to talk with a piece of HW that 'speaks' TCP. But the 'netcat' solution doesn't seem to be the best one, for all the reasons you mentioned. Probably it's still the right direction, but it needs to be refined for sure. If I simple open a port using Std.system(), without immediately closing it, that'll take over the shell and my ChucK script won't proceed (the shell waits for some input). The idea of having 2 shells opened, and make 2 different scripts talking to each other, could be a solution and I want to give it a try. That said, having to convert from OSC/UDP, to TCP could further affect the performances. Anyway, I'll have a look and share with the mailing list in case I end up with something useful.
Cheers, Mario
On Sun, 2 Dec 2018 at 20:47, Jordan Orelli
wrote: I'm like ... 80% sure that there's no TCP-handling facilities built in, but I may be wrong here. If there is, I surely don't know about it.
Can you tell us a little more about your use case?
The design goals of TCP and ChucK are very different with respect to time. ChucK is designed around guarantees about time and timeliness. TCP is not designed around timeliness or latency in general: TCP is designed around guarantees about ordering (messages always appear in order) and delivery (messages are guaranteed to be delivered). Since every byte sent over a TCP socket has to be eventually acknowledged, and all bytes have to be processed in order, a stall in the network (a normal occurrence) could mean later messages being delayed, much like a traffic jam. It's not possible to have timing guarantees with TCP.
I'm not sure how to find it in the source code, but maybe someone else here knows: does calling Std.system create a new shell process for each invocation? That would be a fairly inefficient way to go about things. Also since you're piping to another process, that's a new netcat process for each invocation (so it's either one or two processes per invocation), and a new TCP socket for every invocation. TCP is especially slow at the very beginning of communication.
If I were in your shoes, I would probably write a separate program that acts as a server and serves an OSC-based protocol. This server would take your messages as OSC and translate them and then forward them to the intended recipient over just one TCP connection and continue to use that one connection the whole time. It may or may not respond to your ChucK program over OSC, depending on whether you want the ChucK program to get responses to its requests (probably not?).
On Sat, Dec 1, 2018 at 1:25 PM mario buoninfante
wrote: Hi,
It seems like accessing the shell and use "netcat" (on Unix) is a possible solution. Quite an exotic workaround but better than nothing I'd say.
Something like that seems to work:
// run ChucK with "--caution-to-the-wind"
"echo -ne '" => string prefix; "' | netcat 127.0.0.1 3333 " => string suffix; // netcat <target ip> <target port>
while(true) { Math.random2(0,127) => int r; prefix + Std.itoa(r) + suffix => string msg; Std.system(msg);
second => now; }
Please, let me know if anyone has a better solution.
Cheers,
Mario
On 01/12/2018 18:04, mario buoninfante wrote:
Hi,
I also tried opening a file in /dev/tcp/<target ip>/<target port>, but it didn't work. I'm on Ubuntu 16.04. Any idea?
Cheers,
Mario
On 30/11/2018 16:52, Mario Buoninfante wrote:
Hi,
Does anyone know if it's possible to use TCP instead of UDP in ChucK?
Cheers, Mario
--
Electronic Musician, Creative Coder, QA Engineer
https://vimeo.com/creativecodingsalerno
http://mbuoninfante.tumblr.com/
https://github.com/mariobuoninfante
https://bitbucket.org/mariobuoninfante/
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
Hey all!
Like Jordan, I'm about 80% sure of the following: while Chuck doesn't do
OSC over TCP, it does have the ability to run code on remote machines
by--get this--"chucking" it over the network to a machine running chuck
--loop. It's not technically OSC, but it does happen over TCP.
I believe the incantation on the command line goes like...
chuck myfile.ck @192.168.2.34
(Insert your remote machine IP)
But it sounds like the hardware you're running is not running chuck, is it?
Anyway, more hacky solutions ftw!
Mike
On Mon, Dec 3, 2018 at 16:23 mario.buoninfante
Hi Jose,
Yes, that's a solution, you're right. But I was trying to do everything in ChucK, also to avoid further bottlenecks due to conversions from UDP to TCP. But I'll consider this option in case I can't find better solutions.
Cheers, Mario
Sent from my Wiko ROBBY On Dec 3, 2018 17:33, José de Abreu
wrote: Just an idea, i know that you patch in puredata too Mario. How about making chuck send udp to puredata and making puredata send tcp from there? actually puredata could be any other software, just to make the bridge
Em Seg, 3 de dez de 2018 13:24, Mario Buoninfante < mario.buoninfante@gmail.com escreveu:
Hi Jordan,
Thanks for your reply. I got your points and I think you're right about the different design goals. In my case I simply need to talk with a piece of HW that 'speaks' TCP. But the 'netcat' solution doesn't seem to be the best one, for all the reasons you mentioned. Probably it's still the right direction, but it needs to be refined for sure. If I simple open a port using Std.system(), without immediately closing it, that'll take over the shell and my ChucK script won't proceed (the shell waits for some input). The idea of having 2 shells opened, and make 2 different scripts talking to each other, could be a solution and I want to give it a try. That said, having to convert from OSC/UDP, to TCP could further affect the performances. Anyway, I'll have a look and share with the mailing list in case I end up with something useful.
Cheers, Mario
On Sun, 2 Dec 2018 at 20:47, Jordan Orelli
wrote: I'm like ... 80% sure that there's no TCP-handling facilities built in, but I may be wrong here. If there is, I surely don't know about it.
Can you tell us a little more about your use case?
The design goals of TCP and ChucK are very different with respect to *time*. ChucK is designed around guarantees about time and timeliness. TCP is not designed around timeliness or latency in general: TCP is designed around guarantees about ordering (messages always appear in order) and delivery (messages are guaranteed to be delivered). Since every byte sent over a TCP socket has to be eventually acknowledged, and all bytes have to be processed in order, a stall in the network (a normal occurrence) could mean later messages being delayed, much like a traffic jam. It's not possible to have timing *guarantees *with TCP.
I'm not sure how to find it in the source code, but maybe someone else here knows: does calling Std.system create a new shell process for each invocation? That would be a fairly inefficient way to go about things. Also since you're piping to another process, that's a new netcat process for each invocation (so it's either one or two processes per invocation), and a new TCP socket for every invocation. TCP is *especially slow *at *the very beginning of communication.*
If I were in your shoes, I would probably write a separate program that acts as a server and serves an OSC-based protocol. This server would take your messages as OSC and translate them and then forward them to the intended recipient over just one TCP connection and continue to use that one connection the whole time. It may or may not respond to your ChucK program over OSC, depending on whether you want the ChucK program to get responses to its requests (probably not?).
On Sat, Dec 1, 2018 at 1:25 PM mario buoninfante < mario.buoninfante@gmail.com> wrote:
Hi,
It seems like accessing the shell and use "netcat" (on Unix) is a possible solution. Quite an *exotic* workaround but better than nothing I'd say.
Something like that seems to work:
*// run ChucK with "--caution-to-the-wind"*
*"echo -ne '" => string prefix;* *"' | netcat 127.0.0.1 http://127.0.0.1 3333 " => string suffix; // netcat <target ip> <target port>*
*while(true)* *{* * Math.random2(0,127) => int r;* * prefix + Std.itoa(r) + suffix => string msg;* * Std.system(msg);*
* second => now;* *}*
Please, let me know if anyone has a better solution.
Cheers,
Mario On 01/12/2018 18:04, mario buoninfante wrote:
Hi,
I also tried opening a file in /dev/tcp/<target ip>/<target port>, but it didn't work. I'm on Ubuntu 16.04. Any idea?
Cheers,
Mario
On 30/11/2018 16:52, Mario Buoninfante wrote:
Hi,
Does anyone know if it's possible to use TCP instead of UDP in ChucK?
Cheers, Mario
-- Electronic Musician, Creative Coder, QA Engineer https://vimeo.com/creativecodingsalernohttps://vimeo.com/creativecodingsalerno http://mbuoninfante.tumblr.com/http://mbuoninfante.tumblr.com/ https://github.com/mariobuoninfantehttps://github.com/mariobuoninfante https://bitbucket.org/mariobuoninfante/https://bitbucket.org/mariobuoninfante/
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
-- Michael Clemow Artist/Composer/Sound Designer http://michaelclemow.com
participants (2)
-
mario.buoninfante
-
mike clemow