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: