Added library for easy cloning later. I hate .jar hunting.

I ignore .jars in the .gitignore. That was causing me so much
confusion; I couldn't figure out why adding libs/this.jar
wouldn't show any change in git status. That's why there's a
premature merge there..
Hot dang it 80.3%!

All it took was tweaking some values. I thought I learned a lesson
with the neural network requiring lower learning rates to avoid
getting stuck in local minima, but I guess the more complicated
functions -- like handwriting -- require even lower rates. I made
them extra small and hit a huge benchmark; 80% successful
recognition.

This warrants some real investigation to figure out the ideal
learning rates.

BTW, hitting 80% with these constants only took ~10 minutes.
Experimenting and recording performance of different configs.

Run through network sizes and learning, momentum rates and
record their performances.
Got experiment running. Minor changes in logging/records.
Added a script to generate a nice graph of progress.

Using the performance log generated by the network trainer,
graph how well all the different networks do overtime.

Matplotlib needed.
Made a nicer graph to visualize performance.

Lots going on, so added line markers, color coding.

Also a temporary bug fix in here, since app.py adds
an extra point a (0, y) when it's finished with the file.
Should matter when the original is fixed though.
Write float percents to performance log.

Also minor changes with what rates/sizes being tested.
Just added a comment to explain goofy logic.
Fixed bug that cause extra point to be mapped after file read.

Also erased the silly fix in the graph that worked around that
data point.
Big refactoring. Reorganized project in a cleaner, more reliable way.

Was just hacking away before to get things to work. Now making
it nice and maintainable and pretty.
Organized into a proper app to run experiment and training.

I'm really excited about this actually, it's gonna be great.
The various functions are differentiated via command line
parameters. The experiment can run in its entirety and generate
a graph immediately following (versus a separate app before).

Training will automatically look for the best known weight
configuration and load it, or start from scratch if it doesn't
exist. Whenever it bests itself, it will save the weights and
record the improvement.

This was probably too much change to properly put in a single
commit, but... it's awesome now so it's OK. I think awesome
anyway, testing was kinda half-assed so far.
Added some output and sped up learning.

I found myself wanting more output watching, so
it prints more status updates to stdout. There's no
more spam in the log though.

I also cut the sample rate for learning down by a lot,
it just took SO LONG and I don't think the benefit
(if any, 3,000 is still a lot of samples) is
worth the time. I'm impatient.
I didn't like that file name.
shelve module does not read/write databases between 2.7 and 3.x.

I don't like it, but euclid runs 2.7. So train.py and anywhere
else the discrepencies are bothersome I will accomodate 2.7.
Added a site to which the Android app will make requests.

It is simple and will be improved upon. The immediate issue, though,
is permissions. I can't properly test it because I apache user
doesn't have permissions to load weights, log, etc. (So I'm not
sure it actually works.)
Should work now, trouble debugging on euclid cause I can't see logs.

So just committing to check out on a server where I can play sudo.
euclid used tabs, not soft tabs.
Want to run in background and needed verbose to not keep talking.

And more variety for momentum rates.
Works! Returns JSON representation of the answer.

Still have permissions issues. Learned that Python shelve
module insists on opening with write permission. Not sure
how to best work around that yet.