Thursday, April 10, 2008

Kicking the tires on jGnash

Money has never been anything but an illusory concept to me. Even when the Hamiltons were in my pocket it was as though they had no mass. Money was nothing but an electromagnetic phenomenon, no more concrete than light itself. My relationship with money is like this: I do what other people want me to do for awhile, and I get paid. Note that it is not I get paid for doing what other people want. Two things happen, but there's no visible connection.

When I was younger this was exemplified by picking up walnuts in the backyard. After picking up the offending seeds I was given a number of coins, made of such rare metals as nickel and copper. Later iterations added complexity; I would do things and was given a piece of paper which was exchanged for money, and later still for a digital facsimile of money. The most recent versions have brought the abstraction to a startling extent. Now I do things, get a piece of paper, and my "balance" online says I have more "funds" than the day before. Further, the piece of paper which is central to this process for other people may arrive days before or after money appears in my bank account, so it's very difficult to correlate the two events. For years, I have believed that I earned money essentially through voodoo. My works did not even represent alchemy, transubstantiating motion into money; there was simply no connection in my mind.

Spending money often suffered from the same abstraction. I would "pay" by swiping a plastic chit in some machine, and I could do that as long as the numbers in my bank account stayed high enough. It wasn't money; I rolled to check against stamina, and if I made my roll I got a new video card. Or tires.

It is with great trepidation that I face budgeting. Previous attempts have suffered from disorganization, inexperience, and apathy. I aim to change that with jGnash, a free double-entry home finance program written in Java. The documentation for jGnash is almost non-existant, so I set it up and used my usual method to figure everything out. My usual method is to click things and see what happens.

Say you build a button. The button gives you an electrical shock when you push it. You leave the button unmarked, because telling people not to do something is a sure way to get someone to do it. And who pushes random buttons that they know nothing about anyway? Now say I find the button. I'll think, I wonder what that does, and push the button and get shocked. A normal person would say I shouldn't do that again, but I'll wonder if it does that every time. So I'll push the button again. I'll try weighing the button down to see if the shock is persistent or if it times out or if it pulses. I'll try pushing it with one foot raised, with one arm raised, with one foot and one arm raised. Then I'll find someone else to push the button to see if it shocks everyone or just me. These things happen to me. The lady at Barnes and Noble had to run a demagnetizing plate on my ass because the alarms went off when I walked into the store. And at the Target. I'm not being colloquial, she rubbed the plate on my cheeks before I stopped tripping the alarm.

The jGnash wiki has a new user page, but that's the only sign of usage help outside of the forums and it's woefully inadequate. So I said, I wonder what that does. Thumbnails are linked to larger versions.


When jGnash is started you're immediately asked to create a new file. Click yes, and you're asked to choose a name and place for the file. See that area on the right that says "Use Encryption?" DON'T CLICK THAT. Crypto won't be standard in future versions. The devs recommend using environmental crypto.




After making the new file, you're given a three-step dialog to set currency options. These can be changed later if needed. Now you're shown the main screen.


The accounts list shown here is where most of your operations will be done. The three buttons down the left side take you to the register, which shows the transactions for each account, and the reminders where you can set repeating transactions and alarms. The accounts list starts with bank, expense, and income accounts that can be modified but not deleted. Clicking the New button brings up the creation dialog.


In addition to the default account types, you can create asset, cash, credit, equity, investment, liability, and mutual fund accounts. It's mostly a semantic difference, though investment and mutual fund accounts have a significantly different register, and the liability register has an amortize function for your loans. Once an account has been created, you can't change the type but everything else can be modified. And of course an account can't be deleted if a transaction for it has been recorded.

The locked option removes the account from the account list and prevents transactions involving it and any accounts nested under it. Placeholder does the same but only to itself, not to any children accounts. Hide account means the account won't be displayed in the accounts list if the option is selected in the display filter is chosen. The filter button on the accounts list has four options: bank, expense, income, and hidden. Hidden accounts are only those with this attribute set. Income accounts are income accounts, expense accounts are expense accounts, bank accounts are everything else.

The parent button is used to decide what the new account is nested under. Root makes a top-level account. Checking and savings accounts would be nested under "bank accounts." Truly deep hierarchies can be created:



At the accounts list, if you select an account and click the zoom button you're given a register window for that account. Double-clicking the account also brings up a register window. Clicking the register button on the left slides a register pane next to an account list. It's not THE accounts list; there's no balance or transaction count displayed, just the name.



The register window is substantially the same for each account; the major difference is the terms used on the first two tabs. Deposit/withdrawal for bank accounts, receive/spend for cash accounts, payment/charge for credit accounts, etc. Here's the thing to remember: in each register window the first tab is money coming into the selected account and the second tab is money going out of that account. There's an option to use accounting terms, which turns all of these tabs into credit and debit. In the shot below, money would be moving from the credit account to the bank account.



Transfer is for moving money among your own accounts (there's no payee field), and adjust is for single-entry adjustments to an account. The adjust tab has a button to make the selected transaction double-entry, in case you used an adjustment to correct an imbalance and eventually found out where that money went to or came from.

The number list is used to enter a check number or transaction type, and has a few special entries. These are Next #, Print, EFT, and Trans by default. The dropdown entries can be customised through an options dialog from the Tools menu; you can also type any value into the field as you enter the transaction. If a number value has already been entered in the register, selecting Next # will set the value to the next number in sequence. Print is used to mark a transaction for printing a check of it; more on that debacle below.

Highlighting a double-entered transaction and clicking the Jump button opens the register for the other account. The reconciled checkbox is used to mark a transaction that has cleared.



The splits button is used when a single transaction involves three or more accounts. This may happen when your paycheck is divided between a checking and a savings account, or if you deposit part of a check and receive part in cash. Select one account, enter the amount, and click enter. Do the same for each account involved. When you're done, click OK to return to the register screen, fill out the rest of the form and click enter to place it in the register. In the transaction list, the Account column will say "[# splits]" rather than listing the accounts involved. The Jump button will not function at this end of the transaction, but jumping from any of the other accounts will take you to the originating register.

The date field allows you to enter the date of the transaction in m/d/yy format. Clicking the "..." button next to the field brings up a nearly-usable calendar view. The calendar will almost always show days from the end of the previous month and beginning of the next month. Depending on which theme you are using, these extra-month days may be shaded to separate them from the current month's dates.



In the above picture, the left is using the "Metal" decoration; the right uses "JGoodies Plastic."



From the main screen, clicking the Reminders button opens an alarm scheduler. A reminder can be used to automate a recurring transaction or let you know that a bill is coming due.



The creation screen is fairly straightforward. The transaction field can be left blank if you're creating a dummy alarm, e.g. the electric bill will be due at the same time each month but with varying costs. Clicking the edit button opens a deprecated version of the register entry screen. The money-in/money-out tabs are there, but not the transfer or adjust tabs; Split transactions can also be entered here.



The payee field will be displayed in the reminder creation screen as the transaction, but the description field is what will be displayed in the reminder list.

Back to the reminder creation screen. The date field is for the first date you should be alerted about the reminder. The enabled check box turns the reminder on in the scheduler, so leaving it unchecked is pretty useless. You can set the cycle time for recurring alerts with or without end dates.

You can set a reminder to alert you a number of days before the date you entered above in the Frequency area. In this example, you would be reminded on April 9th. Again, if you activate the checkbox.

The "Last Occurrence" and "Days past due" boxes are filled in by jGnash. Last occurence is when the reminder was previously triggered. Days past due is how far past the "Date of first payment" you are, if you haven't approved the transaction.

When you start jGnash for the first time on a given day, it pops up a window with any reminders set for that date or that are past due.



Clicking the "Approve" checkbox marks a reminder for completion and its counter resets. If any reminders are let unapproved you can choose an interval before you are reminded again. There is a range of intervals from five minutes to one day, and an entry to be alerted the next time jGnash is started. If you approve some transactions but not others, or none at all, you can select an interval and click the Acknowledge button; the outstanding reminders will come up in a window at the specified time.

I haven't dealt with the menu bar yet, but there are quite a few special functions there. Under the File menu there are the encryption options I warned against earlier, and commands to import data from other accounting programs.

The Archive command will clean out old entries and archive them in a separate file, keeping your register uncluttered. To use the Archive functions, create an Equity account. Archive will move transactions before your specified date into the selected Equity account, save them in an external file, and remove the transactions and the Equity account from your current register. It also seems to have the side effect of clearing the hidden attribute from any of your other accounts. So it's got that going for it.

The Reports menu has commands to produce and export reports in a number of formats. The Accounts submenu has two particularly useful commands, Account register and Balance sheet. These are the only two reports I managed to get any useful data from, but I've only worked at this for a few hours with a limited data set. They may be more useful to someone who knows what he's doing. From the report viewer, you can choose a new account report to view from the dropdown list and click the Refresh button, and there's a checkbox to show split transaction details. No need to refresh for those. The report viewer can also save as PDF, HTML, or comma-separated data.



The Tools menu has commands for entering commodities and securities, adding currencies in case you invest in Rupees, and running BeanShell scripts. jGnash uses BeanShell to create report modules; Highly motivated users can examine the default modules and hack custom report formats. The Recurring Transactions command opens a Reminders pop-up window.

Remember the Print value next to EFT and check numbers in the transaction entry screen? The Design/edit checks dialog is why you'll never use it. There's no default layout for checks and the layout designer is unusable as it is. Don't bother with this unless you (A) absolutely need it, (B) have a lot of time and printer ink, and (C) hate yourself. Unless you fit all three, there's a better solution, probably involving BeanShell and an undocumented API.

The options panel has an autosave setting; do yourself a favor and turn it on. jGnash can also support multiple users concurrently over a network. I haven't tried this yet, but I intend to soon.

jGnash looks feature-complete for the majority of home users, which is why the small design flaws stand out so much. The reminder enable boxes should either be on by default or removed, and autosave should certainly be on initially. The check layout designer desperately needs reworked. For all of that, it seems like a solid application. I wouldn't say I'm looking forward to recording where my money goes, but jGnash is more inviting than a spreadsheet.

Good talk.

No comments: