1Proximity to one end or the other of this list does not necessarily
2imply it will be done sooner or later than other items!
3
4Infrastructure
5--------------
6- Update mkdeb as per fracplanet's debhelper experiment
7
8Conventional Mode
9----------------
10- Commandline option/control for grid spacing.
11- Migrate to a stock threading/thread pool/futures lib.
12- Just make "fullscreen mode support" be the default (and remove text in USAGE).
13- Link on webpage to gallery http://gigrafx.110mb.com/evolvotron/index.html
14- ...also flickr stuff (xargs?)
15- Mouse manipulations: frame rate should be clamped to allow some time to produce a nice image
16- At least split out evolvotron_main_history.cpp, even if the class remains nested in .h
17- Smaller fragments for big enlargements; seeing unused processors.
18- More feedback on when enlargements are ready for saving (have split tasks count now... need more ? yes)
19- Triangles quantization mode (c.f hexes, pixels and voxels)
20- Linear and cubic interpolation for pixel and voxel mode quantizer
21- Enlargement menu: submenus for square, 4:3, 8:5, 16:9. 16x10.  5:4 SXGA 1024x1024 is a bit of an oddball.
22  And name them, see http://en.wikipedia.org/wiki/Computer_display_standard
23
24- Friezegroups:
25  Cut taken out for 0.5.0 release.
26  Want cut and blend for those that support it.
27  Blend should use two functions in some cases.
28  Can't see how to blend cuts; needs something more like old warp approach.
29- Work out how to add warping/blending to the (frieze) symmetry groups so they dont look so "cut".
30  Hop        - Basic, Blend and Cut done.  Cut needs attn to fit in with spinhop.
31  Jump       - Basic, Blend and Cut done.  (Is just Hop with y=0 reflection).    Cut needs attn to fit in with spinhop.
32  Sidle      - Basic. Can't be blended or cut as there are only reflection lines.  (Could be blended, but doesn't hide much).
33  Spinjump   - Basic. No blend or cut as there are only reflection lines.  (Is just Sidle with y=0 reflection).  (Again, could blend but not much point).
34  Spinhop    - Basic. Blend done. Cut done.
35  Spinsidle  - todo
36  Step       - todo
37
38- Not entirely convinced by separate thread pool for enlargements.
39  On the other hand, do need some mechanism to progress enlargements
40  while working on main grid.
41- Add functions for the 17 "wallpaper" symmetry groups.
42  ref: http://www.scienceu.com/geometry/articles/tiling/wallpaper.html
43  Wikipedia http://en.wikipedia.org/wiki/Wallpaper_group is good.
44  Presumably there are 3D versions too.
45  See also http://www.mi.sanu.ac.yu/vismath/ana/ana5.htm
46- The function properties dialog could construct a QListView instead of just displaying the XML.
47  But then you'd want full editing capabilities too (and why not?)
48- When mutating parameters, have a chance of a "special" reset to "interesting" values, and maybe even patterns of values.
49- Debian transitioning Apps to Applications (post Etch) see bug #361418
50- GPLv3 ?  Don't understand what else needs to be (e.g Qt3 etc)
51- Maybe icon setting could do with some more attention; probably there are more things which should set it
52  (e.g respawn coloured) and loading could set a flag defering icon setting until that view is ready.
53- MutatableImageComputer::push_todo could handle defer a bit better.
54  Actually, complete overhaul of queue/computer kill/defer/abort would be better.
55  Computers should check priority on head of queue periodically and switch if there's
56  something better to work on.
57- Move InstanceCounted out of useful.h (and #include <map> with it)
58- Changing lock state triggers a redisplay.
59  Lock state would be better associated with displays than MutatableImages,
60  but the history archive doesn't support anything but changing images; needs
61  additional abstraction of general notion of change of a display's state.
62  Can live with this for now.
63- Use reStructuredText instead of own python txt->html converter.
64  (Then use fracplanet htm->qml converter).
65- Mode (genesis mode?) which traverses grid, creating a new image every few seconds.
66  First click stops mode.  Useful for getting started.
67- Transform<->vector<real> should output basis vectors first, translation last.
68- is_constant not enough to avoid boring images.
69  Need to actually check amount of variation.
70- Get rid of heat/cool etc buttons cluttering up status bar
71  and just have (new) autocool tick, and reheat button ?
72- Functions with similar names probably do much the same
73  thing so reduce their weighting to avoid them dominating.
74- FriezeGroups should add an extra parameter for
75  repeat length rather than using 1 all the time.
76  Likewise for spheres.
77- Move LoadHandler out of mutatable image.
78- QFileDialog seems to support previewing; enable
79  it for file contents previewing in file dialog.
80- Internationalization.
81  Make it as easy as possible for contributors to submit new languages.
82- Ability to set animation mode from GUI (property of an image function ?)
83- Ability to set spheremap mode from GUI (property of an image function ?)
84- Keyboard shortcuts for all of reset/restart/remix
85- Display mutation parameters permanently on status bar.
86- Scripts entry on context menu; pipes XML to things in ~/.evolvotron/scripts directory
87- Make middle-mose-button adjustments work sensibly with -spheremap
88- Option for save function to also generate thumbnail at the same time ?
89  (Maybe not with previewing)
90- Look into mime-type registration and auto-thumbnailing in nautilus, KDE etc
91  (pipe through evolvotron_render)
92- Browse window to show thumbnails for all .xml files in  a directory.
93- DialogFunctions and DialogMutationParameters don't notice when the other dialog modifies MutationParameters.
94  Fortunately this doesn't matter because they (will) control completely disjoint aspects of it.
95  Could do with proper model update propagation/validation if things get any more complex though..
96- linz and -spheremap need rationalising before we add more projections
97- Ability to change linz and spheremap attributes on properties menu.
98- Supplement spheremaps with... what ?  Cubemaps ?  Volume output ?
99- Heat/Cool etc buttons in status bar not very interesting.
100  Replace with autocool controls, or have them actually fire off
101  a respawn from the last spawned image; would get more of an idea
102  of how much effect there is then.
103- MutationParameters should be held by EvolvotronMain with pointers passed
104  to dialogs.
105- Different projections for evolvotron_render, maybe main app (e.g spheremaps, cubemaps, volumes).
106- Display properties dialog should have small copy of image
107- "Evolvotron corpus"; publish mode & viewer app to see other users' creations
108  How ?  Jabber conference!  (It's all XML).
109- Quick 'n easy way of pushing to Flickr ?
110- Proper dependency and generation by qmake of libevolvotron/usage_text.h
111- Rationalise configure options: fs/nofs (doc/nodoc?)
112- -h & --help option.  Print version and functions supported.
113- man pages ?  Knock off something simple.
114- Window ordering (and whether fullscreen) should be an input to
115  compute priority.  Need to be able to change priorities once tasks
116  are in queue, and re-order queue.
117- Give some sort of control over pixel aspect ratio.
118  A nice circular image in a square display on the screen is
119  squished when rendered to a rectangular image.
120  Best solution probably to offer cropped modes e.g "640x480 from 640x640".
121  Alternative solution would be 4:3 mode for the whole app where the evaluation
122  range is changed.  Harder to explain though.
123- [Local] Clean up evolvotron_admin/evolvotron_gallery
124- Check qmake can be found by configure.
125  Check $(QTDIR)/bin first... RH seem to be unusual in copying it to /usr/bin
126- evolvotron_render default output (or with filename "-") should be to stdout.
127  (The problem is that Qt's image writing libs only support file output).
128  Could create a /tmp file behind the scenes, or write something simple like PPM.
129- File save dialogs should remember which directory they were last accessing.
130  (Maybe a Qt problem)
131- Replace FunctionNode::stub() with FunctionRegistry based code
132- Create registry of all function node types (done)
133  - Use to bring up a panel for setting relative frequencies (check for exploding branching ratios)
134    - Button to spawn images with a specific type of top level node (would be great for testing)
135  - Allow iterative/allow fractal would then become convenience buttons for quick-setting a whole group of frequencies
136  - Classification scheme for function types (basic, smooth, chooser, complex, expensive).
137- More types of mutation
138  - Substitute a node for a different type, retaining it's settings (expand/cull as necessary)
139  - Nodes near top level should have more chance of mutation ?
140- evolvotron_mutate standalone exe should provide more control
141  (heat/cool/irradiate/shield options, recolour/warp options, animation options).
142- Combining/breeding image pairs.
143  Use drag-and-drop
144  Either:
145    Create a new top level node with 2 or more args and add the parents to it.
146    Create a new random stub and insert the parents at random points.
147    Insert one image at a random point into the other.
148    Concatenate (function compose) the 2 images (probably not v. interesting)
149  Need to prune too to keep size under control.
150- Get rid of silly xyz and matrix dependence on general tuples and templates.
151  (Can be well optimised, but only with heavyweight compile options.)
152- Profile & optimise.
153- Spawn recoloured could be linear, quadratic (or generalised?) versions.
154- Undo needs to save more state to work properly (e.g state for respawn)
155  Make history know about "MutatableImageHolders" rather than Displays,
156  and have last spawned be held in such an object too.
157- Have a function type which can suck in random images from directories of images
158  (specified by environmental variable ?)
159  Filename would need to be retained in node and XML for reproducibility.
160- Optimise drag: just recompute new area (needs image subregions for tasks).
161- Option (default on) to automatitcally respawn boring constant images as soon
162  as they've been computed to a certain resolution.
163- Web front end to commandline tools: an evolvotron web-server.
164- Command line option for border around images... use space to indicate locked status.
165- Maybe add "view" menu: like warp but just applying to current image (like drag)
166  (would need explicit control over amounts: maybe drag approach better ?).
167- Last method used should point to an object encapsulating the behaviour
168  (so warp spawn method can encapsulate a transform factory).
169  Needed for breeding behaviour (so can keep 2 last images).
170- Undo needs to restore _last_spawned too (but do above first and keep hisory of spawn methods).
171- Command line option to enable/disable fractal and iterative types.
172- "Unlock all" on edit menu
173- Reset & Restart: combine and bring up modal "are you sure" dialog box which can also contain check boxes for what to reset:
174    mutation parameters
175    function freqencies (when implemented)
176    locked displays
177- Quit should bring up "are you sure" dialog.
178- Option to increase number of iterations of certain types of iterative node in an image (i.e "accuracy")
179  (probably makes sense for Mandelbrot/Julia or a sampling blur where it just increases the detail,
180  but less useful for repeated function mapping).
181- "Move all locked to start" on edit menu
182  (or move them to a "safe area", or save them in reloadable form).
183- Save whole grid as a single image (from File menu).
184- Save whole grid to an XML file.
185- Context menu option to bring up info about an image
186  (in particular number of nodes and max depth)
187- Reference counting for images
188  (far too much deepcloning currently; e.g to tasks and history).
189  But if it ain't broken don't fix it.
190- Use hourglass cursor over displays which haven't got final high resolution yet ?
191  (Really need combined hourglass/pointer cursor but Qt doesn't have one built in).
192- Computing zero co-ordinate sometimes gives unusual output (black lines across images).
193  Avoid by jittering co-ordinate (would break up jaggies), or just avoid exact zero ?
194- Why stop at screen resolution ? Antialiasing by supersampling.
195- Separate tool (?) to evolve images towards a given image.
196  How close would it get and how quickly ?
197  Would the process of getting there be interesting (e.g as an animation) ?
198- Compute farms on multiple remote machines.
199- Menu options to add/remove rows/columns from display grid
200- Autocool of mutation parameters
201  (probably shouldn't be on by default; control from command line).
202- Heat/cool etc should act in proportion to current values
203  (probably wanted for autocool).
204- Evolve other things
205  e.g parameters of celluar automata/reaction diffusion equations/iterated function systems.
206- Rationalise MutatableImageNode::stub so more work is done by Node constructors
207  (just pass in a MutationParameters).
208- Avoid misleading moire patterns by jittering samples
209- No low-res images option for when using remotely via X11 over slow link
210  (they take longer to display than compute) (running over compressed ssh helps a lot though).
211- Evolvotron_mutate should support -x/-X options.
212- Think of more functions:
213    Blending counterparts for switching/choosing functions.
214    Streaking version of windmill functions.
215    Generalised rotations
216    Square "Bhuddist mandala" versions of kaleidascope
217    Concentric rings
218    Iterative function generating a list of point co-ordinates... then test for blobs or make paths
219    (would be more efficient with a cached/precomputed element to functions).
220- Vector/SVG mode, using Qt SVG creation/rendering support
221- User defined functions using Qt's javascript engine
222- (Re)consider options for root node colour space transformations.
223- Builtin XML editor, or better still treeview of structure with all parameters tweakable by slider, wheel, data-entry etc, and nodes changeable by pull-down maybe.
224
225Animation
226---------
227- Could avoid bitBlt when reassembling fragmentary animation renders by fragmenting on
228  frame instead of by screen area.  Don't think this is a big enough deal (saves a bit
229  of copying in a little used feature) to be worth bothering with.
230- More warp types (rotate time into space etc)
231- More control over animation (frames & framerate) from edit/options menu
232  (or on a display by display basis ?  Then "big" images could have
233  more frames and higher framerates)
234- Ability to degrade temporal resolution with spatial resolution
235  at low-res render levels
236- Support animation in evolvotron_render
237- Sync animation to xmms beat somehow ?
238- Option to sweep z sinusoidally or linearly
239- Option to bounce or cycle z
240- Make frames, frame-rate, sine vs. linear, loop vs. bounce properties of the image.
241
242Extras
243------
244- evolvotron_match hasn't been seen to do much but converge
245  towards general overall color of target.
246  Try matching in edge-detected space or something ?
247
248Rejected
249--------
250- Add #ifdef INSTANTIATE_FN (or move to .cpp) around evaluate methods
251  implemented in .h ?  Only really justifiable for fn .h included in multiple
252  places (not that many of them; NB function registration doesn't see these).
253  Not worth bothering with.
254