I have always had a hard time remembering just about everything, including, when to pay my bills. First, my wife and I tried using a calendar. As bills came in, their due date was posted on the calendar. But, then we’d forget to send the bill off days ahead so the bill arrived on time. So, we decided to put it on the calendar 7 days ahead (or, whatever the average time bills took to go through our postal system). This failed also. We’d forget to write something down.
Next, we bought a little desktop organizer. The bills would be set in their due dates, and as we were paid, we’d pay all the bills due before the next pay period. This actually worked quite well. This system became the foundation upon the eventual spreadsheet software I wrote. But, this system had some flaws. Our house is small and cluttered. We had nowhere to put this bulky organizer.
Then, I setup a spreadsheet system in Excel, but being the Linux user I am, this required a virtual machine to run Windows. I then imported my spreadsheet to Google Docs Spreadsheet. Which worked fine, but I needed a little bit more control than the complicated spreadsheet formulas could give. My formulas where getting so long and out of control, I had to decipher them a month later.
I looked into different languages that worked with Google Docs. Well, that sounds easy, until you realize, Google changed the API about every 3-4 months for different languages, such as Python and Java. So, I settled on Javascript. I’ve been writing Javascript professionally for some time, but I knew Javascript had one big flaw that would haunt me, especially Googles restricted version.
Javascript does a very poor job with time. Time seems like an easy concept, until you start digging into it. I didn’t need to become a physicist, I just wanted to manipulate time in my algorithms for forecasting due dates. Sounds easy, until midnight on a day that time changes, and Google’s servers are in some unknown location (the “cloud”).
After a week of pounding my head against the wall because of this very important shortcoming of Javascript (still, to this day, professionally I face the Javascript time issue. Many libraries exist to help with this failure, but they cannot be used on Google Docs), I decided to find alternative avenues.
I started searching for Open Source Software that would meet my needs. While the choices are abundant, none of them really did what I want. Most financial software track paid expenses to help decided future forecasts, but were more complex than I needed. I don’t need to track every dollar I spend, I just want a reminder so that I can pay my bills on time. If such a software exists, I couldn’t find it.
I had been writing some software in Python for some time. I love the powerful, yet simple Pythonic way of developing. Though, I do miss my curly brackets. So, I set out to find a Python friendly spreadsheet. I found pySpread, but that software had errors everywhere. It failed miserably. It’s a fine piece of code to show the power of Python, but just didn’t work for me too well.
Next, I looked at Open Office’s spreadsheet. To write external methods for it was even more complicated than inline methods. I also find Open Office to be poor software. I have used it since Star Office and over the years grew less and less interested in it. While I’m not a fan of Microsoft, I do have to say they have taken a lot of time to understand their customer needs and applied that to their Office product. I prefer to use MS Office over any Open Source option.
Finally, I found Gnumeric. A simple spread sheet that interfaced with full Python. I could write my methods, build a small interface for Gnumeric and was good to go. I translated my Javascript methods over (which were translated from my Excel spreadsheet formulas). Within a few hours, I had my planner going. Over the next couple of months, I refined my methods and interfaces. I have used this for over a year with great success.
The spreadsheet knows when bills are due and shows the amount due under the best payday. I just go into my banks bill pay area and setup the bills on that columns payday. As I setup the bills, I marked them with some highlight color, such as orange. When I noticed the bank paid the bill, I would then mark the bill green. When all bills in that payday column were paid, I marked that entire column green.
As stated above, this has successfully worked for over a year. Not one late payment. But now, I have the bug. How can I make this better? Well, now, that’s the next article.