Managing Your Money with GnuCash
A refrain many Linux users and advocates hear again and again is “The only reason I keep Windows around is for Quicken.” Since 1997, the GnuCash Project (formerly known as xacc) has been working to provide an accounting solution for Linux. GnuCash 1.4, the current stable release, provides a simple, easy-to-use but powerful home accounting system. Development continues at a rapid rate, both through volunteers and employees of Gnumatic (http://www.gnumatic.com/), a company formed to support the continued development, marketing and productization of GnuCash and related projects.
GnuCash is GPL software, so you can download the source code, as well as RPMs, from the GnuCash web site (http://www.gnucash.org/). Several distributions, including Mandrake, SuSE, Debian and Red Hat, also include GnuCash as part of their systems. While GnuCash requires the GNOME libraries, it will run quite happily with any window manager, including KDE. The current stable version is 1.4.9, but that may have changed by the time you read this. Versions 1.5.x are the next development series. These are intended for those who wish to get involved with where GnuCash is going, rather than its use in production environments.
Building GnuCash can be a little problematic for some people as it requires the installation of a couple of uncommon build tools. In addition to a working GNOME development environment, you need Perl, guile, SWIG (available from http://www.swig.org/) and g-wrap, another tool now maintained by Gnumatic and available from the Gnumatic web site. The dependency on SWIG is likely to go away sometime in the next development series (1.5.x). GnuCash uses the standard GNU build environment, so compiling is just a matter of typing ./configure; make; make install.
While GnuCash's primary development environment is Linux on x86, it has been successfully compiled and run under virtually all the architectures Linux supports, as well as FreeBSD/x86 and Solaris/x86. It should also run on just about any platform to which GNOME has been ported.
While many other low-end accounting programs use a “cashbook” single-entry approach to accounting, GnuCash has always used a double-entry accounting system. While slightly more complex, double-entry accounting is a far more accurate accounting technique. You'll find that double-entry is a powerful way of organizing your finances. If you are already familiar with double-entry accounting, you probably can't imagine working any other way. While it's technically possible to use GnuCash for single-entry accounting, you'd be crazy not to take advantage of GnuCash's full abilities.
So, how does double-entry accounting work in GnuCash? Every time you spend, receive or transfer money is a “transaction”. When you write a check to pay your phone bill, that's a transaction. When your paycheck goes into your account—another transaction. When you go to the ATM to get some cash for a night out, that's a transaction. When you buy a burger with that cash...you guessed it, it's a transaction (whether it's practical to account for personal burger purchases is another question). In each case, money is transferred from one place to another, and the amount taken from one place must exactly equal the amount put somewhere else. Money never appears or disappears from thin air.
Similarly, in GnuCash every transaction involves money transferred from one account to another. “Huh? Two accounts?” I hear you saying. “Okay, for a bill payment one of those accounts might be a checking account, but what's the other?” Good question. The answer is that “accounts” can be much more than checking or credit card accounts. For instance, you can create an “expense account” for “Phone Bills”. Therefore, paying a phone bill would involve two entries, one in your checking account, and one in the “Phone Bill” expense account. These amounts must exactly match, something that GnuCash immediately checks. At this point, you might think that making two separate entries is a pain. GnuCash, however, lets you make both entries at the same time. More information on double-entry accounting is available in the GnuCash documentation (on-line at gnucash.org/docs/C/xacc-doubleentry.html).
So, let's create some accounts in GnuCash and record a $100 phone bill payment. Start up GnuCash. If you installed from a binary package there's probably a menu entry somewhere, but if that's not set up just type gnucash at a command-line prompt. You'll see the main window. First, we'll need to create some accounts. One way to do so is to click on the “New” button in the toolbar, which brings up a dialog box for creating accounts.
We'll create an account to represent our checking account. In the dialog box, enter the account's details. Most of the fields are self-explanatory, but there are a few that could use some explanation. The “Account Code” is used to determine the order of display in the main window and has no other effect on the account. If you don't care what order they are displayed in, you can safely leave it blank. “Account Type” is where things start to get interesting. GnuCash has 11 different account types. Our checking account is a “bank” account. Finally, you must select a “parent account”. What's that? All will be revealed later, but for now just select “new top level one too”.
Next, we'll create the “Phone Bill” expense account. Click on the “new” button, and repeat the process. The currency for the new account must be the same as for the bank account (transferring between different currencies is performed using special “currency” accounts). Make sure you set the type of the account as “expense”. You should also select “new top level account” for this account.
If you're going to pay a phone bill, you've already got some money in your bank account. According to the rules of double-entry accounting, that money had to come from somewhere, right? Therefore, we create a special “equity” account. Repeat the process you used to create the previous accounts, but call this one “My Equity” and make it of type “equity”.
Now, enter the initial bank account balance. Open the register for the newly created bank account by double-clicking on the entry in the main window. The register shows all the transactions and a running balance for the current account. At the bottom of each register there is always a blank line to enter new transactions. The column headings display transaction fields: date, number, description, transfer (which account the transaction involves transfer from/to), deposit, withdrawal and balance.
Let's say that your current balance is $1,000.00, and we'd like to record that. The date is already set to today's date, so there's no need to modify that field. Use the tab key or the mouse to move to the next field, the description field, where we type Opening Balance. Next, we select the account where we're transferring money from—the special “My Equity” account. Enter the amount ($1,000.00) into the deposit field, and press enter to record the transaction. A new blank transaction will be created, and the balance will change to record the current account balance.
Finally, enter the phone bill. Enter the appropriate information in each field: check number, description of the transaction and the other account involved in the transaction. The transaction is recorded, the new balance for the account is calculated and a new blank transaction is recorded.
|Designing Electronics with Linux||May 22, 2013|
|Dynamic DNS—an Object Lesson in Problem Solving||May 21, 2013|
|Using Salt Stack and Vagrant for Drupal Development||May 20, 2013|
|Making Linux and Android Get Along (It's Not as Hard as It Sounds)||May 16, 2013|
|Drupal Is a Framework: Why Everyone Needs to Understand This||May 15, 2013|
|Home, My Backup Data Center||May 13, 2013|
- RSS Feeds
- Dynamic DNS—an Object Lesson in Problem Solving
- Making Linux and Android Get Along (It's Not as Hard as It Sounds)
- Designing Electronics with Linux
- Using Salt Stack and Vagrant for Drupal Development
- New Products
- A Topic for Discussion - Open Source Feature-Richness?
- Drupal Is a Framework: Why Everyone Needs to Understand This
- Validate an E-Mail Address with PHP, the Right Way
- What's the tweeting protocol?
- Kernel Problem
9 hours 18 min ago
- BASH script to log IPs on public web server
13 hours 45 min ago
17 hours 21 min ago
- Reply to comment | Linux Journal
17 hours 53 min ago
- All the articles you talked
20 hours 17 min ago
- All the articles you talked
20 hours 20 min ago
- All the articles you talked
20 hours 22 min ago
1 day 46 min ago
- Keeping track of IP address
1 day 2 hours ago
- Roll your own dynamic dns
1 day 7 hours ago
Enter to Win an Adafruit Pi Cobbler Breakout Kit for Raspberry Pi
It's Raspberry Pi month at Linux Journal. Each week in May, Adafruit will be giving away a Pi-related prize to a lucky, randomly drawn LJ reader. Winners will be announced weekly.
Fill out the fields below to enter to win this week's prize-- a Pi Cobbler Breakout Kit for Raspberry Pi.
Congratulations to our winners so far:
- 5-8-13, Pi Starter Pack: Jack Davis
- 5-15-13, Pi Model B 512MB RAM: Patrick Dunn
- 5-21-13, Prototyping Pi Plate Kit: Philip Kirby
- Next winner announced on 5-27-13!
Free Webinar: Hadoop
How to Build an Optimal Hadoop Cluster to Store and Maintain Unlimited Amounts of Data Using Microservers
Realizing the promise of Apache® Hadoop® requires the effective deployment of compute, memory, storage and networking to achieve optimal results. With its flexibility and multitude of options, it is easy to over or under provision the server infrastructure, resulting in poor performance and high TCO. Join us for an in depth, technical discussion with industry experts from leading Hadoop and server companies who will provide insights into the key considerations for designing and deploying an optimal Hadoop cluster.
Some of key questions to be discussed are:
- What is the “typical” Hadoop cluster and what should be installed on the different machine types?
- Why should you consider the typical workload patterns when making your hardware decisions?
- Are all microservers created equal for Hadoop deployments?
- How do I plan for expansion if I require more compute, memory, storage or networking?