Sign in to follow this  
  • entries
    191
  • comments
    861
  • views
    116946

New Product

Sign in to follow this  
Mithrandir

96 views

I had an... unexpected... burst of productivity over the weekend and programmed a robust financial transaction manager.


Microsoft Money is overkill. I mean, god. It's so complex it's stupid. Hell, half the time when I enter all my debits into it, for some reason it can't compute it correctly (Hello, it's just adding numbers!!!) (And yes, I entered the numbers right, I quadruple-checked it). Pretty much the only thing I really love about MS Money is the graphs it generates. Those are awesome.


My other choice was Excel... which is underkill. It doesn't have enough of what I want in it to be useful.


So... I rolled my own solution, and after 2 days, it's actually pretty cool. I'm not done yet, but the base is there and working properly.

Features:

* 256 bit password-based encryption of data files
* Flexible category system that doesn't limit you to one category (unlike MS-Money)
* Customizable searches based on date, transaction amount, category, and others.
* Eventually it will have pretty graphs.



Screenshots!


This one shows a sample database sorted by date.

Image hosting by Photobucket

And one that sorts by account:
Image hosting by Photobucket

You can choose to filter transactions by account, date, category, and value, so you don't get spammed with 5 billion transactions after you've been using it for a while.


Here's the transaction data entry screen:
Image hosting by Photobucket

And the category system:
Image hosting by Photobucket


I'm considering moving the category system to some sort of tree-based hierarchy, so that when you select "Car Insurance", the "Car" category is automatically selected as well. This will take some reworking, but it will make the program 100% more user friendly.

At the moment, the category dialog filters the search by what you type in the box. In the screenshot, 'a' is typed in, so every category that has the letter 'a' in it is shown. If you typed 'Car', it would show everything that is related to cars.

I think I may end up trying to sell this online for $10-$20. Comments, opinions?


Other notes:

I got bored and wrote a program to solve John Hattans Voracity game. I'll stop using it now, because I'm bored of it and that's not really fair to everyone else. It took me less than an hour to write the solver in C#, and it can go through about 10 billion game states per day. It will eventually find a maximum solution, but so far I've never had the patience to run it that long. There's really no way to tell how many solutions there are overall, because the game is mutable, and changes the playing field with every move. This little fact makes the "Longest Path" algorithm even more difficult, since I wasn't able to divide and conquer, by using previously known longest-segments to shorten the search.

In a standard longest-path-scenic-tour algorithm, you can start at the endpoint and figure out which nodes take the longest to reach it, and work backwards from there. This doesn't work for two reasons, though; we don't know the endpoint until we reach the end of a solution, and even then, it's not garanteed to be the longest solution. So we've got 625 possible endpoints. Secondly, not all paths work their way back to the start anyways.

So the major problem exists with the mutability. Let's say the algorithm landed on X,Y in game state A and found that there are 20 possible paths from that point. Of those 20, we find that path B is the longest, so we can store "At X,Y, path B is the solution". In an unmutable game, this would greatly reduce the search space, but in Voracity, this can't be done. If another search reaches point X,Y again, we can't just say that B is the longest path, because the board can be totally different! In fact B may not even be a valid path anymore!

So any divide and conquer method is out.


I even experimented with some heuristic searches, but pretty much every heuristic search that doesn't closely follow a depth-first search will generate so many intermediate game states that you'll very quickly fill the entire memory of your computer.


For example: "search paths that consume the most squares per move first" generated so many child moves that I ran out of memory in 30 minutes.

"for each search, compute the value of the squares that are consumed, divide that by the number of squares that were consumed, and favor search paths that minimize this value"... this would have been a great search, if not for the fact that I ran out of memory in 4 minutes. (ie: if we have a choice between a path that consumes 5 squares that hold the number 9, or a path that consumes one square containing the number 1, we'd choose the second one first, since it only removes 1 potential consumption from the game, whereas the first path removes 45 possible consumptions from the game).


I ended up using "favor the longest immediate path first" heuristic.


This is still kind of inadequate though. This is because out of the first 8 initial moves, it takes over a day to compute just one of those paths, and if the first move is stupid, you'll never find a better path. For example, there was one case where I had a choice of a 9, and a bunch of lower numbers. The LIPF search chooses to search the 9 path first, since 9 is the longest, but it turns out that after the first move, the rest of the moves are disappointingly small. But we never would have found that out, because it would have spent the rest of the day searching subpaths of the first move.

So, I decided to combine the depth-first with a limited breadth-first search, and I compute the first 3 moves of the game (somewhere in the vicinity of 200-400 states, depending on the game). From those states, each one has its own queue, and it does a depth first search on each one, iteratively.


So, from my experimenting, I've found that it is computationally simple to find a good path (55-60%), and almost computationally impossible to find a perfect path.



By the way John, the bad news is that your randomizer will start repeating games. The good news is that this won't happen until the year 2643. :)
Sign in to follow this  


5 Comments


Recommended Comments

The bad news is also that it assumes a 365-day year, so the 12/31 and 1/1 puzzles will be identical when going from a leap to a non-leap year.

I am counting on the bot-writers and cheaters to bore quickly, and thus-far I've been correct.

Share this comment


Link to comment
Hm, I used MS-Money for a long time and never found it the least bit limiting or unable to add correctly. I stopped using it when I switched my laptop (the machine I do accounts on) to Linux several years back though. Even then I was using a pretty ancient (relatively speaking) version of Money anyway - the newer ones kept trying to web-ize everything and do all sorts of Internet integration which just made everything more complex and harder to use so I never upgraded. I can certainly see it getting even worse.

I use GnuCash now. It works really well although it has some quirks I don't like. I really wish it had an option to double-line just the line I'm on so I can easily see and edit the notes field but don't have to look at it the rest of the time. If there's a way to do that I can't figure it out. Anyway, you might give it a try although there doesn't seem to be a Windows port.

Share this comment


Link to comment
Quote:

I am counting on the bot-writers and cheaters to bore quickly, and thus-far I've been correct.



pfff, it's not cheating, it's 'Creative Problem Solving'. Really though, don't you think that with the amount of thought I put into designing a good solving algorithm, that's more difficult than actually playing the game? :)

I mean, seriously, Voracity is a really tough game to solve. It's almost like an Eulerian Path, except that since the board is mutable, the solution isn't even verifiable in polynomial time!!


I don't consider that cheating :P. It's the Captain Kirk method of winning.


d'oh. Star Trek reference. Kill me.

Share this comment


Link to comment
Quote:

Hm, I used MS-Money for a long time and never found it the least bit limiting or unable to add correctly. I stopped using it when I switched my laptop (the machine I do accounts on) to Linux several years back though. Even then I was using a pretty ancient (relatively speaking) version of Money anyway - the newer ones kept trying to web-ize everything and do all sorts of Internet integration which just made everything more complex and harder to use so I never upgraded. I can certainly see it getting even worse.


Exactly, it's terribly overcomplex and bloated nowadays.


Quote:

I use GnuCash now. It works really well although it has some quirks I don't like. I really wish it had an option to double-line just the line I'm on so I can easily see and edit the notes field but don't have to look at it the rest of the time. If there's a way to do that I can't figure it out. Anyway, you might give it a try although there doesn't seem to be a Windows port.


I'll look into it, thanks!

Share this comment


Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now