aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO.md155
-rw-r--r--TODO/2.1.md38
-rw-r--r--TODO/build-options.md33
-rw-r--r--TODO/documentation.md41
-rw-r--r--TODO/easy.md16
-rw-r--r--TODO/installation.md14
-rw-r--r--TODO/new-feature-ideas.md30
-rw-r--r--TODO/parser.md13
-rw-r--r--TODO/refactoring.md28
-rw-r--r--TODO/testing.md24
-rw-r--r--TODO/webapp.md19
11 files changed, 256 insertions, 155 deletions
diff --git a/TODO.md b/TODO.md
deleted file mode 100644
index 16e547c..0000000
--- a/TODO.md
+++ /dev/null
@@ -1,155 +0,0 @@
1# TODO list
2
3This is a list of things that I would like to add or change at some point.
4It's more of a personal reminder than anything else.
5
6## After symcoord
7### Fixing stuff + completing new optimal solver
8- clean up fst, check if more can be improved
9### generic:
10* all files should have an init function, calling the ones
11 of the files includes + doing more stuff. A static "initiliazed"
12 variable is probably needed too.
13### testing!
14* generic test util: function taking an array of tests, an array of testnames
15 (or maybe tests should be their own type?) and running them
16* separate "commands" for testing different parts (e.g. ./test coord)
17* test coordinate (needed anyway to test fst)
18* other tests (start from bottom: utils.c)
19* move test_coord to the testing folder
20### Solving standard coordinates
21* add Void * extradata to DfsArg and a custom move function
22* add optional custom pre-process for generating special table (nx)
23* copy_dfsdata should copy extra too!
24### Solving simplification / refactor
25* Split solve in solve_coord, solve_generic, solve_singlethread...
26* Rework choicesteps: simplify, remove one type of rotation...
27### nx.c
28* implement nxopt with all tables and all tricks
29 (maybe compile time variable for maximum memory to use?)
30* is_valid should also unniss / cleanup the alg
31### Other easy refactor
32* split cubetypes.h into other files
33
34## For version 2.1
35### Changes to Step and Solve
36* remove cube from dfsarg? (i still need to save the scramble somewhere,
37 but I really only use it in dfs_niss)
38* coord.c: all old coordinates (WIP...)
39* steps.c: checkers (use coordinates), all stepalt and steps (WIP...)
40* commands gen and freemem
41* commands.c: twophase, ...?
42### Rotate, not transform, before solving
43* solve should re-orient first if needed and not just give up if centers are off
44### Documentation
45* Document how coordinates and pruning tables work now
46* Write an examples.md file
47* More screenshots!
48### Tables management
49* Check files in tables directory automatically remove old / extraneous files
50* Add checksum to check that tables are generated / downloaded correctly
51### Conditional compiling
52* Option to avoid large tables at compile time
53* option to avoid multithreading (write a simpler solve for t=1, and also
54 check if found enough solutions before checking pruning values)
55### Technical
56* generic option parser
57* scan system to get best number of threads
58### Commands
59* Easy: add option -I (inverse) and -L (linear, like inverse + normal)
60 to do only linear NISS
61* message for -N ignored say -n (lowercase)
62
63## Commands
64
65### Commands that are available in nissy 1.0, but not in this version (yet):
66* drcorners (solve corners after dr)
67* search and improve non-optimal subsequences
68* save and edit algs as "variables"
69 (or just use a "logging system" to keep info about previously run commands,
70including e.g. solutions that were not shown because -c)
71
72### More steps for `solve`
73* QTM optimal solving
74* 5-side solve (for robots)
75* Block-building steps (cross, roux blocks, ...)
76* Other common steps (LSE, ...)
77* Larger table for drudfin (include epe)? About 1Gb uncompressed,
78 500Mb compressed (fallback to noE), 250 compressed + parity trick
79 (is it doable?)
80
81### Improvements to currently implemented commands
82* solve multidfs: do multithread by step, not by alternative (this way
83 if there are multiple alternatives it can make use of more threads)
84* solve should try up to a small bound without loading the large pruning table
85 (maybe this is not necessary if loading the table is fast enough)
86* silent batch mode without >>>
87* Optimal solver: when asking for only one solution, scan for upper bound in
88 parallel using a two-phase solver.
89
90### New features
91* EO analysis (and also DR and HTR analysis): group similar EOs together
92 and such (suggested by Jay)
93* configurability: add an `alias` command, run config file at startup
94* command notation to list available moves
95* make multi-step solve much more general and create command
96* input directly cube status instead of moves
97 (graphical: maybe there is a cubing.js function; command line: ???)
98
99## Distribution
100* webapp (cgi)
101
102## Technical stuff
103
104### Memory management
105* free pruning table after solve is done? if I do this I need to deafault to a
106 small table for < 8 moves solutions or smth
107* improve multi-threading when solving multiple scrambles
108* nissy -M maxmem option for running with at most maxmem memory; if exceeded
109 when loading a pruning table, return failure (or make every solve command
110 use tiny tables instead?); if maxmem is very 600Mb or
111 less do not use invtables (the performance loss is minimal anyway). If the
112 limit is really tiny, do not use mtables or ttables (but this would be
113 very slow and probably nobody will ever use it)
114* Check if memory is enough for loading pruning tables; if not, abort
115* For optimal solver: choose largest that fits in memory between nxopt and light
116
117### Structural changes
118* client/server architecture: run a server process in the background so that
119 multiple client processess can send it queries and get results; this would
120 open up the door for a web-based version or graphical clients
121
122### Cleanup
123* sort again functions alphabetically in their files
124* change some function and variable names to make everything consistent
125* more stuff to load at start (or when suitable command is called) rather
126 than when called directly, to avoid nasty problems with threading
127* parse command args: one function per arg type, then each command has
128 a list of options that it accepts (as a string)
129
130### Style
131* do not declare all variables at the beginning of a function
132* remove var names from prototypes
133* various stuff from style(9)
134
135### Random
136Collect random info like this somewhere:
137
138Table pt_nxopt31_HTM
139Base value: 9
1400 1
1411 6
1422 29
1433 164
1444 1433
1455 16772
1466 205033
1477 2513871
1488 30329976
1499 342440769
15010 2815191126
15111 6147967200
15212 524918774
15313 3546
15414 0
15515 0
diff --git a/TODO/2.1.md b/TODO/2.1.md
new file mode 100644
index 0000000..e35016a
--- /dev/null
+++ b/TODO/2.1.md
@@ -0,0 +1,38 @@
1# TODO-list for version 2.1 (or is it 3.0 at this point?)
2
3## Rework solver
4
5* Split solve in solve_coord, solve_generic (and maybe solve_singlethread, see
6 notes about build options).
7* Add a void * extradata to DfsArg.
8* remove cube from dfsarg? (i still need to save the scramble somewhere,
9 but I really only use it in dfs_niss)
10* Re-work prepare_step process for solve_generic (nxopt table is special).
11* is_valid should also unnis and / or cleanup the alg.
12
13## New optimal solver (use fst)
14
15* Implement nxopt31 with fst_cube. Remember that the function
16 move_check_solved() should do one axis at the time, so that we don't move
17 everything before checking.
18
19## Simplify steps
20
21* Remove one type of rotation.
22* Change steps to choicestep and stepalt to step (or was this already done?).
23
24## Add missing coordinates and steps
25
26* Check the old file for a list. Many are missing.
27* Checkers in steps.c should use coordinates.
28
29## Missing and new commands
30
31* gen
32* freemem
33* twophase
34
35## Easy improvements
36
37* Solve should re-orient the cube if centers are off
38* Solve: add options for -I (inverse only) and -L (linear = normal + inverse).
diff --git a/TODO/build-options.md b/TODO/build-options.md
new file mode 100644
index 0000000..83b8a34
--- /dev/null
+++ b/TODO/build-options.md
@@ -0,0 +1,33 @@
1# Build options for memory and multithreading
2
3## Investigate
4
5* Check exactly how much memory is needed for everything.
6* Take note of which parts use threading (solving, genptable, other?).
7
8## Prepare code
9
10* Use define / ifdef or similar to compile and build tables only for the
11 parts to be used.
12* If threads = 1, use a much simpler version of the solve method. Remember
13 that checking if enough solutions have been found is the first thing to
14 do in singlethread (no locking).
15* Do not include pthread if threads = 1.
16* Only one optimal solver should be compiled.
17* Some simple steps may also need alternatives with smaller tables
18 (e.g. for staying sub 1Gb). For example dr and drfin.
19* If necessary, work out alternatives to "twophase" for low-resource versions.
20
21## Makefile
22
23* Figure out how to change these options via makefile. For example: one
24 variable for the maximum allowed ram and one for the number of threads.
25* (Optional) use a configure script?
26* (Optional) interactive installation script?
27
28## Automate
29
30* Scout for resources during installation and choose best configuration
31 automatically.
32* How to do this in Linux / POSIX?
33* How to do this in Windows?
diff --git a/TODO/documentation.md b/TODO/documentation.md
new file mode 100644
index 0000000..050a854
--- /dev/null
+++ b/TODO/documentation.md
@@ -0,0 +1,41 @@
1# Documentation
2
3## Big documentation file on nissy's internals
4
5* Coordinates
6* Symcoordinates
7* Pruning tables
8* Coordinate solving
9* fst cube
10* Optimized solver
11* Multithreading
12* Commands etc...
13* Code architecture
14
15## examples.md
16
17* Example file for nissy's website and documentation folder
18* With screenshots!
19
20## Random info
21
22Where to collect random information like this table?
23
24Table pt_nxopt31_HTM
25Base value: 9
260 1
271 6
282 29
293 164
304 1433
315 16772
326 205033
337 2513871
348 30329976
359 342440769
3610 2815191126
3711 6147967200
3812 524918774
3913 3546
4014 0
4115 0
diff --git a/TODO/easy.md b/TODO/easy.md
new file mode 100644
index 0000000..7d780e2
--- /dev/null
+++ b/TODO/easy.md
@@ -0,0 +1,16 @@
1# Easy things to improve or add
2
3## Improvements
4
5* Silent batch mode without >>>
6* Solutions should be shown sorted: by length first, then by normal moves
7 (no niss) first, then it depends on the step (e.g. EO by axis).
8
9## Old commands and steps
10
11* drcorners (solve corners after DR)
12* Search and improve suboptimal subsequences
13
14## New commands
15
16* notation: show valid moves
diff --git a/TODO/installation.md b/TODO/installation.md
new file mode 100644
index 0000000..7f632c2
--- /dev/null
+++ b/TODO/installation.md
@@ -0,0 +1,14 @@
1# Simplify and improve installation
2
3## Tables
4
5* Make install should generate tables, or add a "make tables" target to
6 generate tables.
7* Make tables should also check for existing files and remove old ones
8 (maybe more for nissy's command than for makefile).
9
10## Correctness
11
12* Add checksum for all generated files.
13* Hard-code results? Check for compatibility problems between different OSes
14 and filesystems - but there should not be any, since we use stdint.h.
diff --git a/TODO/new-feature-ideas.md b/TODO/new-feature-ideas.md
new file mode 100644
index 0000000..b619e36
--- /dev/null
+++ b/TODO/new-feature-ideas.md
@@ -0,0 +1,30 @@
1# Possible new features and improvements
2
3This file contains non-refined ideas. Once an idea gets refined, it will
4get its own file and more details.
5
6## Steps
7
8* QTM solver
9* 5-side solver (for robots)
10* Other steps (cross, blocks, LSE...)
11
12## UX features
13
14* Save algs as variables and edit them (like in old nissy)
15* Use a logging system for previously run commands, info, results...
16 (e.g. when solving with -c solutions are not shown, they can be logged here)
17* Configurability: add an "alias" command, run config file at startup
18* Input cube state directly instead of moves (ugly from command line / file)
19
20## Improvements
21
22* Optimal solver: when asking only for one solution, scan for upper bound in
23 parallel using a non-optimal (but fast) solver (e.g. twophase).
24* Optimal solver: up to a small bound, try with a small pruning table.
25* Multi-step solver: make more general
26
27## New features
28
29* EO analysis (and also DR and HTR analysis): group similar EOs (Jay)
30* HTR "maze" analysis?
diff --git a/TODO/parser.md b/TODO/parser.md
new file mode 100644
index 0000000..134f0d7
--- /dev/null
+++ b/TODO/parser.md
@@ -0,0 +1,13 @@
1# Improve command parser
2
3First, expand this TODO file to be more precise.
4
5## Refactor
6
7* The syntax of a command's options should be described by data, not by a
8 parser function.
9* A single parser function can then parse options for all commands.
10
11## Usability
12
13* Better error messages!
diff --git a/TODO/refactoring.md b/TODO/refactoring.md
new file mode 100644
index 0000000..eedbd20
--- /dev/null
+++ b/TODO/refactoring.md
@@ -0,0 +1,28 @@
1# Refactoring
2
3## Init functions
4
5* All .h files should have a single init function.
6* This function should initialize everything that this module needs, including
7 calling the init functions of the modules it depends on.
8* To avoid multiple initialization of the same module, each should have a
9 static bool initialized variable.
10* Everything that a module needs should be initialized by init(), avoid
11 initializing stuff when solving. Exception: pruning tables, move tables.
12* Most functions should generate some tables and save them to disk.
13* Init functions should have a consistent structure (e.g. the way they check
14 if the tables are already generated should be the same).
15
16## Cube types
17
18* Get rid of cubetype.h, split type definitionss into the other modules.
19* Every type definition should be in the most fundamental module that needs it.
20
21## Code style
22
23* Stop declaring all variables at the beginning of a function.
24* Remove variable names from prototypes.
25* Sort function implementations alphabetically, ignore static vs non static.
26* Rename functions and variable to have a consistent naming scheme.
27* Functions that copy data: swap src and dest, follow memcpy standard.
28* Read style(9) and decide what to implement.
diff --git a/TODO/testing.md b/TODO/testing.md
new file mode 100644
index 0000000..9b6f23a
--- /dev/null
+++ b/TODO/testing.md
@@ -0,0 +1,24 @@
1# Testing
2
3## Architecture
4
5* Folder structure: each module (.h file) has a corresponding test/module_name
6 folder containing the important tests.
7* How to test pre / post -init()?
8* Makefile: one target for each module with correct dependencies.
9* Makefile: perhaps write a specific makefile for testing in test folder.
10
11## Test sttructure
12
13* Make consistent
14* Little output for success
15* Stop on first failed? (automatic with makefile)
16
17## Write tests
18
19* Pretty much all are missing, except fst.
20* Start from bottom (utils.c)
21
22## Other
23
24* Move test_coord from coord.c to test folder.
diff --git a/TODO/webapp.md b/TODO/webapp.md
new file mode 100644
index 0000000..4f8eddf
--- /dev/null
+++ b/TODO/webapp.md
@@ -0,0 +1,19 @@
1# Towards a nissy webapp
2
3## Architecture
4
5* Split in client / server.
6* Server can load and keep in memory all the tables, client(s) send messages to
7 the server to run commands.
8* Use UNIX sockets only first, maybe later try WinSock.
9
10## Simple webapp
11
12* Investigate how to use fastcgi, try simple program first.
13* Decide what limits to put in terms of resources and write a "filter" script
14 to block big requests (maybe use a timeout).
15
16## Advanced webapp
17
18* Use cubing.js for nice graphics.
19* Port it to a graphical desktop version too.

Generated with cgit - Back to sebastiano.tronto.net