mandulia

A zooming visualisation of the Mandelbrot Set as many Julia Sets. http://gitorious.org/maximus/mandulia

Latest on Hackage:0.7

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

GPL-3 licensed by Claude Heiland-Allen
Mandulia
========

Mandelbrot/Julia set explorer.


Invocation
----------

Multi-core CPU with lots of RAM recommended:

mandulia configuration

Currently there is one preset configurations available:
'main' -- keyboard navigation with randomized attract mode.

To render videos (see below):

mandulia configuration |
ppmtoy4m -S444 -F25:1 |
ffmpeg2theora -v 8 -f yuv4mpegpipe -o mandulia.ogv -


Controls
--------

'main' defines the following key bindings:

Escape -- quit
F11 -- toggle full screen
a -- enter attract mode immediately
r -- record for 10 minutes (assuming 25fps)
s -- record for 1 frame (aka screenshot)

Note that recording is via PPM images on 'stdout', so to avoid flooding
your terminal with binary data be sure to redirect it somewhere else.

As a side-effect, the following count as 'activity':

PageUp -- zoom in
PageDown -- zoom out
cursors -- move around
End -- stop moving
Home -- return to base
[ ] -- change speed
# -- reset speed
{ } -- change weight
~ -- reset weight

Attract mode is entered after 1 minute (assuming 25fps) of inactivity,
and left on any activity.

Other configurations may differ, check their sources for details.


Scripting
---------

Mandulia can be reconfigured without recompilation, using Lua scripts.
The first (non RTS) argument to 'mandulia' will be executed on startup.
First it will try to load it as a file, then via Lua's 'require()'.
See 'defaults.lua' to see the available interface, and 'main.lua' for an
example of keyboard navigation. Note that some variables only take
effect on startup, and later modification will be ignored.

Changes

ChangeLog exported from Git by claude@zebimus at 2010-08-14T18:06:44+0100

(HEAD, tag: v0.7, origin/master, master)

9e4e399 2010-08-14 18:04:35 +0100 v0.7 smooth-as
0e76ee2 2010-08-14 18:03:44 +0100 disable hardcore optimizations by default
94c746d 2010-08-14 17:59:32 +0100 use logarithmic mandelbrot escape time for smoother gradations
6c2699e 2010-08-01 08:01:52 +0100 log inter-frame timing statistics
reduce jitter by adding one frame latency to swapBuffers
b87cf23 2010-08-01 08:00:15 +0100 copy statistics from Haskell to Lua

(tag: v0.6)

21b1086 2010-07-25 17:22:39 +0100 v0.6 facepalm
1f9b042 2010-07-25 17:22:00 +0100 bump version
0a858a5 2010-07-25 10:15:26 +0100 update help screen with current configurations

(tag: v0.5)

7b5e311 2010-07-25 03:51:26 +0100 v0.5 neon in O(1) space
69ec357 2010-07-25 03:21:02 +0100 fix annoying disappearing/appearing julias at edge of window
cf6fb48 2010-07-25 02:42:00 +0100 fix aspect ratio to keep julias square
ac1f7be 2010-07-25 02:41:18 +0100 fix displaySize for aspect ratios other than 16:9
05a5e35 2010-07-25 02:23:22 +0100 fix screenshot
099b264 2010-07-25 02:12:40 +0100 bump version number
add note about SSE4 flag
98d09bb 2010-07-25 02:05:04 +0100 update to current code
a94f0e7 2010-07-25 02:04:43 +0100 update to current code
1baef1a 2010-07-25 02:00:51 +0100 fix screenshots/recording comments
9c350a8 2010-07-25 02:00:10 +0100 prune dead code
e59440e 2010-07-25 01:28:20 +0100 merge random and interactive configurations into one main configuration
c874936 2010-07-25 01:26:00 +0100 reduce heap limit as we can run in constant space now
c013ea2 2010-07-25 01:25:28 +0100 recompute tiling on instead of sharing to fix massive memory leak
get statistics for Lua interface
56edf21 2010-07-25 01:23:33 +0100 strictify to avoid memory leak
ebd2a33 2010-07-25 01:22:38 +0100 attempt to fix memory leak by pattern-matching on ()
177423a 2010-07-25 01:21:48 +0100 attempt to store statistics more strictly
b1f0293 2010-07-25 01:21:06 +0100 strict version of modifyIORef
74d8184 2010-07-23 05:56:43 +0100 additional file to distribute
2296642 2010-07-23 05:52:48 +0100 colour using Mandelbrot Set escape time in addition
1631f5b 2010-07-23 05:51:53 +0100 larger field for Julia Set renders
89e15fd 2010-07-23 05:50:13 +0100 improved escapetime to colour function
39aed4f 2010-07-23 05:46:21 +0100 remove unused includes
5f9aa1a 2010-07-23 05:40:33 +0100 background back to black
01bca99 2010-07-23 05:38:22 +0100 larger display size
8086318 2010-07-23 05:37:49 +0100 use filename for reinclusion defence macro
ccaf263 2010-07-23 00:06:25 +0100 ignore binary
bddc637 2010-07-23 00:05:52 +0100 avoid visiting near recent history to make attract mode more interesting
88647a8 2010-07-20 22:59:16 +0100 attract mode improvements: self-centering random walk for zoom level
target border of Mandelbrot set as more interesting
random walk near previous target
320e8ee 2010-07-20 22:57:04 +0100 exterior distance from Mandelbrot Set

(tag: v0.4)

9d98a8c 2010-07-12 20:17:15 +0100 v0.4 joining the cabal
3a4ccd5 2010-07-12 20:08:50 +0100 fix base dependency to allow successful compilation with ghc-6.10.4
d1a3fa8 2010-07-12 19:54:26 +0100 bump cabal version to use source-repository sections
bdae6a2 2010-07-12 19:51:16 +0100 include HACKING documentation
0b92db5 2010-07-12 19:36:15 +0100 document briefly what each source code file is for
5c07055 2010-07-12 19:22:45 +0100 rename files that might compile to files with indistinguishable names on case-insensitive file systems
8258297 2010-07-12 18:54:14 +0100 generate a prettier ChangeLog
ignore generated file
47aa7d6 2010-07-12 18:23:04 +0100 generate ChangeLog for sdist
796b3c3 2010-07-12 17:47:42 +0100 current bug status
e4144f4 2010-07-12 17:40:58 +0100 undo
74e0c4f 2010-07-12 17:29:06 +0100 zoomTo bug seems avoided, though scripts could be notified or check if a view is invalid
92abf65 2010-07-12 17:07:41 +0100 working fullscreen mode
8e125e7 2010-07-12 16:47:44 +0100 full screen support
a208772 2010-07-12 16:31:02 +0100 obey semantics of coding standards - NEWS is terse/user-centric while ChangeLog should be verbose/developer-centric
50e8acd 2010-07-12 16:29:17 +0100 slight attempt to fix that out of range ouch bug
a05ac37 2010-07-12 11:29:11 +0100 fix cabal sdist problems
6021078 2010-07-12 11:12:24 +0100 update ignores to the current state of the build system
a4db380 2010-07-12 11:00:29 +0100 explicit export list
comment out unused code
5402550 2010-07-12 10:49:06 +0100 explicit export list
comment out unused code
7cbd6ab 2010-07-12 10:48:49 +0100 explicit export list
d12905a 2010-07-12 10:44:36 +0100 explicit export list
comment out unused code
476b9d1 2010-07-12 10:37:32 +0100 categorize and annotate TODO list
8840d97 2010-07-12 10:36:18 +0100 fix it so it works
c3da0d2 2010-07-12 10:35:49 +0100 fix usage of namespace, add args example
fb4c59a 2010-07-12 09:55:36 +0100 update to use 'mandulia' namespace
0da882e 2010-07-12 09:54:59 +0100 support user app data dir and relative-to-file paths
support passing extra arguments to scripts
use 'mandulia' namespace/table for everything
c177115 2010-07-12 08:08:57 +0100 reduce heap size further
4bdfd0e 2010-07-12 07:51:17 +0100 limit GHC RTS heap size to 2GB
50059d1 2010-07-12 07:38:45 +0100 fix it so it works
7660f81 2010-07-12 07:24:08 +0100 simple command line arguments
help/usage text
version text
52eaf4d 2010-07-12 06:20:10 +0100 installation info moved (and expanded) from README to INSTALL
6c90f0f 2010-07-12 06:03:33 +0100 author info moved from README to AUTHORS
feb5039 2010-07-12 06:01:01 +0100 known issues moved from README to TODO
df859e8 2010-07-12 05:59:02 +0100 move ChangeLog out from README and expand it with text from tag annotations
2e08907 2010-07-12 05:48:55 +0100 simplify source statistics to print a summary only
725f532 2010-07-12 05:45:41 +0100 update source statistics script
474bfa3 2010-07-12 05:45:13 +0100 remove pre-cabal build system
0e76480 2010-07-12 05:41:42 +0100 update documentation with cabal info
749e96d 2010-07-12 05:13:16 +0100 loosen dependency versions until someone complains
508cb71 2010-07-12 05:12:48 +0100 support both explicit filenames for load and short names for require
92cf006 2010-07-12 04:41:28 +0100 try require() if loadfile fails
eb8a820 2010-07-12 04:29:23 +0100 use cabal's Paths_pkgname
pop Lua stack to avoid overflow
c350bb7 2010-07-12 03:54:30 +0100 fix syntax errors and missing depends, add more info
d859404 2010-07-12 03:52:59 +0100 use require() instead of dofile()
8749914 2010-07-12 03:27:11 +0100 first step at cabalization
b50cb4a 2010-07-12 02:07:55 +0100 update documentation
58e3c18 2010-07-12 02:01:44 +0100 the great renaming (part 1)

(tag: v0.3)

ded4465 2010-07-12 01:07:46 +0100 wc of source code files that discounts boilerplate
d0d538e 2010-07-12 01:06:20 +0100 boilerplate
defc8f5 2010-07-12 00:43:26 +0100 more documentation
4adc0e7 2010-07-12 00:22:33 +0100 generate random views and transition between them
54015e7 2010-07-12 00:21:58 +0100 generate a smooth transition between two viewports
f89f2b6 2010-07-12 00:21:18 +0100 prune dead code
c18f72e 2010-07-12 00:20:32 +0100 document scripting interface
saner defaults
5d5ac6c 2010-07-12 00:19:30 +0100 set the view directly
465dcb8 2010-07-10 19:06:30 +0100 more documentation
01d90fd 2010-07-10 19:06:06 +0100 use Lua interface
34c7061 2010-07-10 19:05:28 +0100 fix compiler warnings
31bdca1 2010-07-10 18:07:09 +0100 build the Lua interface
93610d7 2010-07-10 18:06:46 +0100 default configuration and interactive key bindings as Lua scripts
bb873c8 2010-07-10 18:05:49 +0100 Lua configuration scripting interface
156cdaa 2010-07-10 15:42:17 +0100 generalize type of clamp

(tag: v0.2)

6e22005 2010-07-10 08:18:16 +0100 notes about profiling
e3c7d2f 2010-07-10 08:10:24 +0100 ignore generated Sort.hs
4ec5f81 2010-07-10 08:09:40 +0100 more CAF
integrate logger
wrap long lines
update returns a score function
cleaner setting of detail levels / radius
don't recompute levels for Julia
split display callback into logical chunks
log timing statistics for display
use IO-based sort when computing jobs todo
more elegant background colour (orange not black)
home key resets
tweak configuration
prune dead code
d038ecf 2010-07-10 07:55:16 +0100 more CAFs
remove superfluous comments
neaten builder with intermediate strict structure for speed
strictify main tile structure for speed
decompose toTiles into smaller functions
levels store inner and outer (edge) tiles to speed up pruning
three-way partitioning for pruning
rejigged zoomTo and stepIn/Out functions for new pruning
tiles have a canonical id
212cd1f 2010-07-10 07:40:32 +0100 more aggressive optimisation
add new files to build
(commented) variants for threadscope and profiling
13d2b56 2010-07-10 07:37:24 +0100 correctness and speed fixes
a21a26a 2010-07-10 07:34:45 +0100 logger for runtime statistics computation
bced1b9 2010-07-10 07:33:48 +0100 twiddle either/pairs for new texturecache interface
log computation time statistics
77a79f9 2010-07-10 07:31:25 +0100 faster constructor
more foo-or-equal tests
faster transform for a subset of matrices
3edd321 2010-07-10 07:29:19 +0100 enable mipmap filtering for massive quality boost
a1b1593 2010-07-10 07:28:32 +0100 IO-based sorting using C qsort(), benchmarked to be cheaper on both time and space with lists around 2k elements
f573784 2010-07-10 07:24:28 +0100 use IO-based sort for speed boost
97e1088 2010-07-10 07:22:35 +0100 flip (a, E b c) to E (a,b) (a,c) for speed boost
use IO-based cache interface
type synonym for clarity
ede7574 2010-07-10 07:17:07 +0100 lazier first/second
4903b9f 2010-07-10 07:15:00 +0100 inline for speed
85e6e60 2010-07-10 07:13:48 +0100 back to black
9894854 2010-07-08 14:15:10 +0100 speed up drawQuad (thanks Deewiant/#haskell)
e2b5cb2 2010-07-08 14:13:50 +0100 speed up sortOn (thanks zygoloid/#haskell)
dc570da 2010-07-08 14:12:52 +0100 build with profiling
c6f55c2 2010-07-08 12:58:39 +0100 fix viewport so edges not truncated
tweak detail settings
547dc0b 2010-07-08 11:32:21 +0100 misc tweaks
2c48bf3 2010-07-08 11:30:46 +0100 release images even when not uploading them
expose cache status
12ef21b 2010-07-08 11:29:11 +0100 release images even when not uploading them
tweak score
4a24fdb 2010-07-08 11:27:04 +0100 make jobs pending as late as possible
20b141c 2010-07-07 11:56:09 +0100 correct attribution of original code
9335368 2010-07-06 13:15:30 +0100 use video recorder
951e29c 2010-07-06 13:15:08 +0100 build video recorder
88ded70 2010-07-06 13:14:51 +0100 video recorder

(tag: v0.1)

6edaf66 2010-07-06 12:03:41 +0100 spit version of GPL that applies
cfd949a 2010-07-06 11:49:51 +0100 GPLv3+ license boilerplate
2dac064 2010-07-06 11:45:04 +0100 GPLv3+ license
8c73640 2010-07-06 11:42:12 +0100 up to date docs
a42af45 2010-07-06 11:36:24 +0100 no longer needed
4553745 2010-07-06 11:34:32 +0100 not updated in sync with implementations
best be gone
3317777 2010-07-06 11:33:42 +0100 these have solved their purpose
af70796 2010-07-06 11:32:58 +0100 no longer used
bea1d4f 2010-07-06 11:32:18 +0100 remove old C version and script
d39f675 2010-07-06 11:30:34 +0100 build the ppmy4m thingy
7e2095b 2010-07-06 11:30:09 +0100 ignore main binary
31fa5fd 2010-07-06 11:28:14 +0100 tweak viewport/detail
tweak speed of movement
tweening (size fade) works
enqueue texture generation jobs while finding quads to draw
julia id/level normalization
quad rendering
remove wonky keyup handling
tweak configuration
(commented out) code to draw bounding boxes for debugging
4a3e1f0 2010-07-06 11:23:50 +0100 only upload textures when they won't immediately be discarded
a4be93d 2010-07-06 11:22:44 +0100 use utils
integer id for comparisons
better scoring
wrap done action in either
use safe foreign imports to not block threads
dca9129 2010-07-06 11:19:45 +0100 don't prescale alpha
d3c6842 2010-07-06 09:11:07 +0100 use utils
11da042 2010-07-06 09:10:50 +0100 build utils
1c46c3f 2010-07-06 09:10:18 +0100 use utils
7c102b2 2010-07-06 09:09:53 +0100 misc utility functions
b7d3a39 2010-07-06 07:38:15 +0100 fix typo (x x)
c159f72 2010-07-06 07:37:45 +0100 avoid repeating jobs needlessly
61c50f5 2010-07-06 07:37:05 +0100 bounds bugfix (was causing vanishing regions)
transform path identification
ef296d5 2010-07-05 23:32:06 +0100 build system
7b3a6ed 2010-07-05 23:30:46 +0100 the main program
57987fb 2010-07-05 23:30:23 +0100 texture cache is a priority cache that deletes textures when they are pushed out of the cache
602eb03 2010-07-05 23:29:24 +0100 done action returns the julia as well
de58b1d 2010-07-05 23:28:27 +0100 get a matrix for mapping between bounds
3f3136a 2010-07-05 23:27:39 +0100 prune dead code
1fd52dc 2010-07-05 19:52:51 +0100 store real level as well as depth (depth is the first level this tile was present in)
2344a30 2010-07-05 19:33:59 +0100 bounded prioritized cache
6d4770c 2010-07-05 19:32:53 +0100 julia renderer in C
render worker in Haskell
test the score mechanism
a1fe66c 2010-07-05 17:08:25 +0100 image buffer creation and texture upload
8e91878 2010-07-05 17:07:05 +0100 a pool of reusable resources allocated on demand up to a maximum bound
test file
359e61c 2010-07-05 17:03:33 +0100 use an additional MVar to wait for the next free job instead of sleeping for a bit
f24a18d 2010-07-04 21:54:43 +0100 job scheduler module with test
4e0c4b7 2010-07-04 15:05:52 +0100 multi-level tweening zoom
fix some warnings
4bc4767 2010-07-04 11:22:56 +0100 zooming in animation works
250b94e 2010-07-04 10:58:47 +0100 dirty svg output
4ef0c4a 2010-07-04 10:58:29 +0100 more functionality
ff029b1 2010-07-04 04:40:22 +0100 operations on bounding boxes
af72e37 2010-07-04 04:40:07 +0100 split long line
731ba01 2010-07-04 04:08:23 +0100 ignore compiled objects
87e7e31 2010-07-04 04:07:04 +0100 Ammann A3 substitution tiling
bde58f2 2010-07-04 04:06:08 +0100 real/vector/matrix computations
bb7bce9 2010-07-04 03:53:17 +0100 equations for Ammann A3 substitution tiling
87dc7c2 2010-07-04 03:52:47 +0100 brain-dead equation manipulator with test file
898e500 2010-07-02 08:14:45 +0100 quality presets
string quoting
case bracketing
sane indentation
success detection
typo fixes
798d35e 2010-07-02 08:12:17 +0100 make it work
1fc0553 2010-07-02 06:47:57 +0100 A video DVD exploring Mandelbrot/Julia sets.

(eof)
comments powered byDisqus