mathr / blog / #

ruff-0.2 and gruff-0.2 released

ruff-0.2 and gruff-0.2 released

1 3/7 8 9 10 12 14 17 20 23 27 31 35 40 45 50 56 62 68

After several months of research and implementation I finally polished up my current project fit for release, squashing the last bugs at Openlab London this weekend (which also featured high voltage arcs, hyperbolic crochet, mobile phone gaming, magnetic levitation, plane radio tracking, and lots more!).

ruff (relatively useful fractal functions) is a library for exploring fractals (currently concentrating on the Mandelbrot Set). It does such things like converting between external angles and angled internal addresses, locating features by tracing external rays and describing features by reverse tracing external rays. Lots of Newton's numerical root finding method is involved. It also has some simple image rendering, but that might be removed in the next version as it's neither fast nor pretty.

gruff (GUI for ruff) is a program for exploring the Mandelbrot Set using the facilities of ruff. Beyond the usual browser window features (mouse clicks to zoom in or out or move sideways), you can type in an angled internal address (which describes which branches to travel down to get to a particular feature) and press the Go button and it'll use ruff to find it and show you. Also useful are the Scan and Scan+ buttons, the first goes to the biggest feature in the window (actually the feature with the smallest period, which is usually the largest in size) while the second also computes its address (slowly).

gruff caches all the tiles it renders on disk, so if you visit places you've been before it will load them quickly instead of recalculating. It stores the raw data, so you can change colouring later (the next release will hopefully add multiple colouring modes for more colourful images). This has the potential cost of consuming many GB, so symlink your ~/.gruff/cache to somewhere with lots of free space. The highest priority item for the next release is adding scripting support so you can render animations without having to type in address after address manually.

ruff is implemented in Haskell with minimal dependencies, and is number-type agnostic (though you will probably want to use something with more bits of precision than Double). gruff is also implemented in Haskell, with the raw image renderer written in C-style C++ for speed. gruff has heavier dependencies, using GTK and OpenGL (with GLSL shaders), and likes machines with lots of RAM and many CPU cores. gruff prefers MPFR for high precision floating point maths, but can use QD as a fallback because current versions of hmpfr require recompiling GHC to use integer-simple instead of integer-gmp. You can get gruff (and ruff) from Hackage with:

cabal install gruff -f-mpfr

(omit the -f-mpfr if you have a GHC with integer-simple)

ruff on hackage (including API documentation)

gruff on hackage (including usage information)

ruff-0.2.tar.gz (source code tarball)

gruff-0.2.tar.gz (source code tarball)

ruff and gruff on gitorious (development repositories)

ruff on code.mathr.co.uk

gruff on code.mathr.co.uk