Rhythmbox Stuff
rhythmbox is my music manager of choice. It has a nice interface (which is readable, unlike xmms!). One problem in the current version (0.8.8) is that there is no way to increase the buffer size for playing streaming audio. This patch fixes this by defining a key in the Gconf schema called buffer_size which is used to set the buffer size in the player.

If you need to change the buffer size, start up gconf-editor from the command line and then navigate to apps->rhythmbox->state->iradio. Double click on the buffer_size key and set it to however many kilobytes you like.

A proper configuration UI would be nice :)

Stochastic Proximity Embedding
This is a C implementation of the SPE algorithm described by Agrafiotis et al. (Proc. Nat. Acad. Sci., 2002, 99, 15869-15872 & J. Comp. Chem., 2003, 24, 1215-1221) . All it requires is a set of input 'coordinates' in a file. The format is n x m matrix where there are n observations and m 'coordinates'. Note that 'coordinates' can be descriptor values (corresponding to a m dimensional descriptor space). Currently the code does not implement the pivot SPE method (J. Mol. Graph. Model., 2003,22, 133-140). Most of the variables in the algorithm can be set on the command line.

The algorithm requires proximity values which are caluclated by default as Euclidean distances. If you have some other measure of similarity, you can provide a daat file with the proximity values in upper triangular form. Note that for large datasets this file is going to be big and reading it in will take some time!
(You can get an R package that wraps the C implementation in R, providing eas of use along with speed, here

A C++ Interface to Gnuplot
(Tested with g++ 3.2, 3.0.2, 3.2.2, 3.3.6, 3.4.2, 4.0.0 & 4.03 and gnuplot 3.7, 4.0 & 4.2, runninng on RH 7.2, RH 9.0, FC 3, FC 4 , Gentoo 1.4rc2, Ubuntu 7.0.2 & OS X Tiger. It has also been tested on Windows with Visual C++ and MinGW)

This is a small peice of code which is based on the C interface to gnuplot written by N. Devillard. The original code was pure C and though it compiled with a C++ compiler I felt that it could be rewritten in an OO fashion. Hence this project. Like the original interface, it depends on the system having POSIX pipes.

You can get the tarball here. It contains the source for the interface as well as an example program (which is simply a C++ version of the original example program). The code is licensed under the LGPL

Right now there is'nt any documentation - you need to look through the header file. However all the function names are identical to the original C version and the example program pretty much uses all the functions.

UPDATE: Removed the OS X specific example code from the tarball, since it's no longer required

UPDATE: Thanks to Markus Burgis for several updates that allow you to choose the standard terminal, choose columns to plot, enable interpolation and several new function wrappers (replot, reset_all, contour, surface)

UPDATE: Thanks to Mojca Milavec and Arthur Reutenauer for pointing out the use of the x11 and aqua terminals. The code has been updated so that each constructor takes an extra argument indicating whether to check for the presence of X11 (via the DISPLAY variable). This argument only has effect on OS X and is ignored on other platforms. If true the code will use the x11 terminal and if false it will use the aqua terminal. Note that if you use the default constructor (no arguments) the terminal is set to x11. A version of example.cc (named example_osx.cc) makes use of the aqua terminal. On OS X, do make osx to generate the executable

UPDATE: Thanks to Jeremy Conlin for pointing out some missing define statements that would prevent it working on OS X

UPDATE: Thanks to Markus Burgis for provide corrections for Win32 and Linux compatibility as well as a number of member functions

UPDATE: Thanks to Martin Ettl for providing functions to set the X,Y and Z ranges as well as provide a function make plots using image data. Note that the plot_image function will not work with versions of gnuplot below 4.2. In such cases, the example program will hang with an error message.

INFO: Thanks to Olaf Booji for pointing out that if a command sent to gnuplot via the pipe based mechanism includes a % sign, it should be escaped by a % sign. That is, to send the command string

set format "%s"
to gnuplot you should do
g.cmd("set format \"%%s\"");

UPDATE: Thanks to Martin Ettl for providing a function that generates 3D plots.

BUGFIX: Thanks to Keizo Gates for pointing out a mistake in the set_ylabel() method which was sending a 'set xlabel' rather than a 'set ylabel'.

BUGFIX: Thanks to Jari Hakkinen for supplying a patch to remove compiler warnings and a more serious error in which the pipe to gnuplot wsa closed before data was plotted

BUGFIX: Thanks to Jean-Bernard Hayet for pointing out a mistake in the plot_xy() method.

BUGFIX: Thanks to Ken Cecka for pointing out a small bug and supplying the fix.

BUGFIX: Thanks to Peter Cock for pointing out a compile time warning regarding the use of va_start. Its now fixed.

gtkcdlabel - GUI for cdlabelgen
This is a GTK2 and Glade based program written in C and acts as a GUI interface to cdlabelgen which is used to create CD tray covers (normal, slim, envelope with images, tracks lists).

gtkcdlabel (you can download here) can get track names and album names via the FreeDB service, parse ID3 tags in the case of MP3 collections, handles UTF8 and locales and is generally a nice way to create CD covers :)