Sometimes I do numerical calculations that also sometimes produce lots of output. Other times I do real-time sampling and I want to see the stream of data coming in (e.g., from a microphone).
With Emacs and SLIME, writing tons of junk to the terminal is usually very slow. You can mitigate this issue somewhat with the buggy
(defparameter *use-dedicated-output-stream* t)
by adding that to your
But even then, sometimes you don’t want to trash your REPL and have your line count turn into
With Stelian Ionescu’s IOLib and
netcat, we can open a stream to which data can be sent and printed.
netcat on a particular port in a terminal you’d like to get output from.
### OS X $ nc -k -l 6007 ### Linux $ nc -l -p 6007
In Lisp, now open a stream, first loading
> (ql:quickload :iolib.trivial-sockets) > (defvar *console* (iolib.trivial-sockets:open-stream "127.0.0.1" 6007)) *CONSOLE*
Now we can use
*console* like any other output stream.
> (dotimes (i 10) (format *console* "~D " (random most-positive-fixnum))) NIL
Whoops, nothing seems to show in our terminal. We need to flush the buffers.
> (finish-output *console*)
And we will see (something similar to)
1193941380623146742 2873853940934582137 2342493223442167775 3013752598065164257 2441597211547797803 1799302827895858725 525699342094945562 864811387508848656 3827825384193791716 3963993791726803706
in our terminal.
Very useful indeed.