

Easily plot realtime data (via Perl and GnuPlot) - ttsiodras
http://users.softlab.ntua.gr/~ttsiod/gnuplotStreaming.html

======
kgtm
Line 5 just made me spill my coffee (or I need to drink some more). Since
STDOUT is the default filehandle, there is no need to muck around with that
anachronism. A simple $| = 1 would suffice. This idiom was once useful for
setting autoflush for a filehandle _other_ than STDOUT, but this is not the
case here. For a lengthier discussion on this, including the apologies of
Randal Schwartz for coming up with it (when admittedly other facilities were
not available for the very specific use case it addresses) see [0].

[0] [http://stackoverflow.com/questions/196754/what-does-
selectse...](http://stackoverflow.com/questions/196754/what-does-
selectselects-10-do-in-perl)

~~~
simcop2387
A nicer way to do it that's not as obtuse, since 5.6 is to do

    
    
      use IO::Handle;
      *STDOUT->autoflush(1);
    

This ends up far clearer than either example, and the idiom even extends
easily to all file handles, lexical or otherwise.

EDIT: That being said,

    
    
      system("sleep 0.02") == 0 or last
    

is even worse. There is no need to go out to a shell or even an external
program for that.

    
    
      use Time::HiRes;
      ...
      sleep(0.02);
      ...
    

Not only will that work on far more systems, it will use less resources and is
available to all perl's since 5.7.3 (development release from March 2002,
first in stable release from July 2002).

~~~
ttsiodras
Thanks for this. Note that the "sleep" is not part of the plotting script -
it's just an example that generates data for plotting. I updated the page with
your suggestion.

------
supar
Perl/shell utilities to drive gnuplot come over and over on HN and Reddit.
Gnuplot is _slow_. There's a better (and easier) way to deal with realtime
data:

<http://www.thregr.org/~wavexx/software/trend/>

It's already been used for all kind of stuff
(<https://projects.ardrone.org/boards/1/topics/show/491>, ECG, etc).

------
bradleyland
Very cool! I use gnuplot and a simple Ruby script [1] to plot my ab results. I
may take a crack at adapting this technique to a Ruby script so I can see my
results in real time.

1 - <https://github.com/bradland/apache-bench-grapher>

------
dddima
Got a better one for you: <https://github.com/dkogan/feedgnuplot>

As the script from the OP, this is a tool to plot STDIN. This one has been
refined far more, so it's trivial to use and very powerful.

~~~
ttsiodras
"This program is originally based on the driveGnuPlots.pl script from
Thanassis Tsiodras. It is available from his site at
[http://users.softlab.ece.ntua.gr/~ttsiod/gnuplotStreaming.ht...](http://users.softlab.ece.ntua.gr/~ttsiod/gnuplotStreaming.html)

:-)

------
sqrt17
How is that simpler than, e.g., Python's matplotlib?

~~~
wladimir
What is simpler depends on which method you know. I'd also use matplotlib in
this case, if you already know Python it's great for some quick plotting.

------
veyron
Have you tried using tcl/blt?

------
vrode
Perl is like a corpse of a beautiful woman. Tempting, but still so very wrong.

