<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Regdel</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/" />
    <link rel="self" type="application/atom+xml" href="http://www.regdel.com/atom.xml" />
    <id>tag:www.regdel.com,2008-09-16://290</id>
    <updated>2011-09-11T12:03:09Z</updated>
    <subtitle>Ruby Powered Bookkeeping Software - Demo</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.34-en</generator>

<entry>
    <title>Regdel Demo Now Using Rails 3.1</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2011/09/regdel-demo-now-using-rails-31.html" />
    <id>tag:www.regdel.com,2011://290.22936</id>

    <published>2011-09-11T11:56:03Z</published>
    <updated>2011-09-11T12:03:09Z</updated>

    <summary>I&apos;ve been completely revamping Regdel to use Rails 3.1 for quite some time now, but all the while, the Regdel demonstration was featuring the Sinatra branch.
</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="demo" label="demo" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rails" label="rails" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="xsl" label="xsl" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>I&#8217;ve been completely revamping Regdel to use Rails 3.1 for quite some time now, but all the while, the Regdel demonstration was featuring the Sinatra branch.</p>

<p>I&#8217;d been holding off until I could find the time to make the switch, and yesterday was that day.</p>

<p>Without further ado: <a href="http://www.regdel.com/demo/regdel/accounts">Regdel Demo, the Rails version</a></p>

<p>While I was deploying the demo, I was also able to remove the XSL dependency. That should definitely help adoption - its been a hurdle in the past.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Currency, Money, and Rails 3.1</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2011/09/currency-money-and-rails-31.html" />
    <id>tag:www.regdel.com,2011://290.22930</id>

    <published>2011-09-04T21:11:26Z</published>
    <updated>2011-09-04T21:19:24Z</updated>

    <summary>I recently added a rake task to generate large amounts of random entries so that I could start to test out Regdel in a more real-world scenario.</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Data Model" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Regdel Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="currency" label="currency" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="money" label="money" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rails" label="rails" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>I recently added a rake task to generate large amounts of random entries so that I could start to test out Regdel in a more real-world scenario.</p>

<p>So far adding a hundred or so entries is fine, but in the process I ran into some minor issues regarding floats. For example, an amount like &#8220;$187.67&#8221; might display like &#8220;187.6700000001&#8221;, or something like that.</p>

<p>I had tried to avoid this by storing the entry amount as an integer and overriding the accessors to multiple the amount entered by 100 when writing and dividing by 100 when reading. That worked OK, but when I would sum the amounts, since they were already floats, things would get a bit messed up.</p>

<p>I did some research to find out if there are any tools for Rails 3.1 to handle this type of stuff and thankfully I found the number_to_currency helper. I also discovered that Rails supports decimals as a primitive data type. I decided against that for portability.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Regdel on Ruby on Rails is Coming Right Along</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2011/08/regdel-on-ruby-on-rails-is-coming-right-along.html" />
    <id>tag:www.regdel.com,2011://290.22914</id>

    <published>2011-08-14T15:34:45Z</published>
    <updated>2011-08-14T15:53:13Z</updated>

    <summary>Remember, at this time, Regdel is seriously unstable. I make changes to existing migrations on the reg, then trash my db, migrate and seed it again, so don&apos;t expect any upgrade compatibility for quite some time.</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bookkeeping" label="bookkeeping" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="changelog" label="changelog" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rubyonrails" label="ruby on rails" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>I&#8217;m really pleased with Ruby on Rails 3.1&#8230; its my favorite version of Rails yet! And I&#8217;m pleased to report that progress of Regdel upon it is coming along very nicely.</p>

<p>Here are a few parts I&#8217;ve been working on lately:</p>

<ul>
<li>A memcached interface for caching certain parts of the logic during development mode. What I&#8217;ve done so far won&#8217;t be necessary in production as the classes get cached, but I&#8217;ll probably add something that will benefit from getting cached in production at some point. (<a href="http://www.ruby.code-experiments.com/blog/2011/08/memcached-and-undefined-modules-classes.html">See this interesting post about undefined module / classes when using Memcached</a>).</li>
<li>Better user interface! A lot of work was done on the user interface of the Sinatra version of Regdel, and some of that is working now. I&#8217;m changing the way entries will get displayed so that they are more contextual, like checks and transfers, and I plan to port the old general journal entry form to the new version, too. I had to make some changes in the regdel.sass file, but nothing major. I actually really like the updated sass syntax.</li>
<li>Tests! I actually setup Regdel to be continuously tested with <a href="http://www.ruby.code-experiments.com/blog/2011/08/travis-ci-is-awesome.html">Travis</a> and while I was able to get it to pass last night, I don&#8217;t think it will regularly - only because of problems with gems - specifically Rails 3.1 is pulled from github and AFAIK Travis can&#8217;t do that yet.</li>
<li>Integration with awesome gems! I&#8217;m using state_machine, nested_set, and inherited_resources. They are all amazing gems and so far are working quite well with Rails 3.1.</li>
<li>Organization of models. Wow - this took a long time, too. Sort of related to the issue I mention with memcached, putting some models in a sub-folder without making them namespaced was a serious PITA. To make it happen, I added this in config/application.rb:</li>
</ul>

<pre class="sh_ruby">
config.autoload_paths += Dir["#{config.root}/app/models/accounts"]
</pre>

<p>That, plus the loader in the application controller I mention <a href="http://www.ruby.code-experiments.com/blog/2011/08/memcached-and-undefined-modules-classes.html">here</a> seem to do the trick.</p>

<p>Remember, at this time, Regdel is seriously unstable. I make changes to existing migrations on the reg, then trash my db, migrate and seed it again, so don&#8217;t expect any upgrade compatibility for quite some time.</p>

<p>If you are interested in collaborating, please let me know on gituhub!</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Mega Validations, State Machine, and Accounting Tests</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2011/08/mega-validations-state-machine-and-accounting-tests.html" />
    <id>tag:www.regdel.com,2011://290.22908</id>

    <published>2011-08-09T20:34:56Z</published>
    <updated>2011-08-09T22:22:50Z</updated>

    <summary>One of my favorite things about Ruby on Rails is the amazing validation capabilities. So it should come as no surprise that I am leveraging them heavily in Regdel.</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
    <category term="statemachines" label="state machines" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="testing" label="testing" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="validation" label="validation" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>One of my favorite things about Ruby on Rails is the amazing validation capabilities. So it should come as no surprise that I am leveraging them heavily in Regdel.</p>

<p>For example, I want to make sure that entries balance, but they can&#8217;t balance all the time - especially when they are works in progress, i.e. they are not posted. The model has a posted attribute, so I&#8217;m doing something like this:</p>

<pre class="sh_ruby">
validate :credits_and_debits_must_balance, :if => :posted?
</pre>

<p>The problem is that the posted attribute must be set before the validation is run. As such, I&#8217;m planning on changing the posted attribute to be a part of the state machine setup. I&#8217;ll have to create a posted? accessor to check the state, not a problem.</p>

<p>The issue with that is that I&#8217;m planning to use the state machine differently for different classes, and the entry model uses single table inheritance (STI). I wonder if its possible to have more than one status column for different states on different classes. Not sure if I want to do that though.</p>

<p>UPDATE: Whoa - looks like state_machine supports namespaces. AWESOME! So for the base Entry class:</p>

<pre class="sh_ruby">
  state_machine :initial => :draft do

    event :post do
      transition :draft => :posted
    end 

    event :reconcile do
      transition :posted => :reconciled
    end 

  end 
</pre>

<p>and for the Invoice class:</p>

<pre class="sh_pre">
  state_machine :initial => :open, :namespace => :invoice_state do

    event :issue do
      transition :matched => :sent
    end 

    event :reconcile do
      transition :posted => :reconciled
    end 
  end 
</pre>

<p>After reviewing these factors, another great aspect of Rails comes to mind: the testing frameworks!</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Regdel on Rails</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2011/07/regdel-on-rails.html" />
    <id>tag:www.regdel.com,2011://290.22896</id>

    <published>2011-07-12T22:35:18Z</published>
    <updated>2011-07-17T15:41:23Z</updated>

    <summary>I&apos;m pleased to report that my work with Regdel on Rails is coming along steadily. While I can&apos;t say I was an absolute fan of ActiveRecord in the past, I am really digging it now.</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Data Model" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bookkeeping" label="bookkeeping" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>I&#8217;m pleased to report that my work with Regdel on Rails is coming along steadily. While I can&#8217;t say I was an absolute fan of ActiveRecord in the past, I am really digging it now.</p>

<p>Here&#8217;s a sneak peak at the account model:</p>

<pre class="sh_ruby">
  1 class Account < ActiveRecord::Base
  2   include AccountMethods
  3 
  4   ACCOUNT_TYPES = ["Asset", "Liability", "Equity", "Revenue", "Expense"]
  5 
  6   serialize :attrs
  7 
  8   validates :name,
  9             :presence => true,
 10             :uniqueness => true
 11 
 12   validates :type,
 13             :presence => true
 14 
 15   has_many :entries, :through => :entry_amounts
 16   has_many :entry_amounts
 17 
 18   acts_as_nested_set
 19   state_machine :initial => :active do
 20   end
 21   
 22   def destroy
 23     raise ActiveRecord::IndestructibleRecord
 24   end
 25   
 26   def as_base
 27     self.becomes(Account)
 28   end
 29   
 30   def balance
 31     entry_amounts.sum(:amount_in_cents)
 32   end
 33 end
</pre>

<p>I&#8217;d rather not depend on Rails too much though, instead I plan to abstract out some of the functionality I&#8217;m aiming for into gems or raw code. For instance, instead of leveraging the Rails callback API, I plan to instead use the state_machine gem as much as possible.</p>

<p>Take an invoice, for example. It can have the following states:</p>

<ul>
<li>new</li>
<li>issued</li>
<li>mailed</li>
<li>paid</li>
<li>partially paid</li>
<li>overdue</li>
</ul>

<p>The transitioning of the invoice from one state to another to trigger events, just like Rails callback events. Why? I think its a cleaner and more precise API, and hopefully the gem maintainer would manage the interface to Rails as Ruby on Rails version 3 evolves - so I don&#8217;t have to!</p>

<p>Not that gems are completely stable, though, or without bugs / unexpected behavior&#8230;</p>

<p>UPDATE: I have merged the rails3 branch into the master branch,  after tagging the sinatra spot!</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Regdel is Alive!</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2011/07/regdel-is-alive.html" />
    <id>tag:www.regdel.com,2011:/blog//290.22876</id>

    <published>2011-07-02T15:12:14Z</published>
    <updated>2011-07-02T15:14:13Z</updated>

    <summary>I&apos;m back working on Regdel again - this time on Rails 3!</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="activerecord" label="activerecord" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>I&#8217;m back working on Regdel again - this time on Rails 3!</p>

<p>For the ORM I&#8217;m planning on using ActiveRecord, but I&#8217;m not crazy about how it implements single table inheritance (STI), but I am very pleased with how it chains scopes together.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Ruby 1.8 and 1.9; Ruby Class Variables</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2010/01/ruby-18-and-19-ruby-class-variables.html" />
    <id>tag:www.regdel.com,2010:/blog//290.20164</id>

    <published>2010-01-28T14:20:55Z</published>
    <updated>2010-01-28T14:33:13Z</updated>

    <summary>I&apos;m using Ruby 1.8 to develop Regdel with and Ruby 1.9 to demonstrate Ruby with. Its been an interesting experience and I usually feel that supporting varied runtime environments results in higher quality code. The most recent hurdle involved Ruby...</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="18" label="1.8" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="19" label="1.9" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="accessors" label="accessors" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="classvariables" label="class variables" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ruby" label="ruby" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>I'm using Ruby 1.8 to develop Regdel with and Ruby 1.9 to demonstrate Ruby with.</p>

<p>Its been an interesting experience and I usually feel that supporting varied runtime environments results in higher quality code.</p>

<p>The most recent hurdle involved Ruby class variables. I'm not sure why, but Ruby 1.9 did not like how I was using class global variables. You know, the ones like:</p>

<pre class="sh_ruby">
@@something = "else"
</pre>

<p>Instead, I've switched to using attr_accessors, like this:</p>

<pre class="sh_ruby">
this.something = "else"
</pre>

<p>Thankfully, both Ruby 1.8 and 1.9 are cool with attr_accessors.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Thinking About Git</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2010/01/thinking-about-git.html" />
    <id>tag:www.regdel.com,2010:/blog//290.20147</id>

    <published>2010-01-27T04:19:28Z</published>
    <updated>2010-01-27T04:21:42Z</updated>

    <summary>After experimenting with the alternative database model I posted about recently, I&apos;ve thought more about involving git and the ledger-cli file format. I like this idea, and took a step in this direction today simply by adding grit as a...</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="database" label="database" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="git" label="git" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ledgercli" label="ledger-cli" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>After experimenting with the <a href="http://www.regdel.com/blog/2010/01/an-alternate-db-model.html">alternative database model</a> I posted about recently, I've thought more about involving git and the ledger-cli file format.</p>

<p>I like this idea, and took a step in this direction today simply by adding grit as a requirement. It is only being used to display some information about the repository, but its a start!</p>
]]>
        

    </content>
</entry>

<entry>
    <title>An Alternate DB Model</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2010/01/an-alternate-db-model.html" />
    <id>tag:www.regdel.com,2010:/blog//290.20019</id>

    <published>2010-01-14T04:43:59Z</published>
    <updated>2010-01-14T04:52:12Z</updated>

    <summary>I&apos;m experimenting with a new data model, inspired by ledger-cli and datamapper single table inheritance. Take a look: # Xact = transaction class Xact include DataMapper::Resource property :id,Serial property :posted_on,Integer property :memorandum,String has n, :assets has n, :liabilities has n,...</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Data Model" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="datamapper" label="datamapper" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ledgercli" label="ledger-cli" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>I'm experimenting with a new data model, inspired by ledger-cli and datamapper single table inheritance.</p>

<p>Take a look:</p>

<pre class="sh_ruby">
# Xact = transaction
class Xact
  include DataMapper::Resource

  property :id,Serial
  property :posted_on,Integer
  property :memorandum,String
  has n, :assets
  has n, :liabilities
  has n, :equities
  has n, :expenses
  has n, :revenues
  has n, :banks

end


# Postings are the individual account changes
class Posting
  include DataMapper::Resource

  property :id,Serial
  property :type,Discriminator
  property :xact_id,Integer
  property :commodity,String
  property :quantity,BigDecimal, :scale => 2, :precision => 5

  belongs_to :xact
end

# Single table inheritance for every account
class Asset < Posting; end
class Liability < Posting; end
class Equity < Posting; end
class Revenue < Posting; end
class Expense < Posting; end
class Bank < Asset; end
</pre>

<p>The idea here is that each account is an object. The code above has the account types and then a bank account. This is obviously pre-alpha code, but the idea is there.</p>

<p>Its a big departure away from the way I've traditionally modeled accounting databases, so why bother?</p>

<p>I like this model because its super simple, and because it leverages some quality work that's already been done with datamapper, and it supports the sort of quick, instant reporting that is core to ledger-cli, especially the balance feature.</p>

<p>I'm interested in aligning Regdel with ledger to add to the traction its established. Open source accounting and bookkeeping software could use a little unity in my humble opinion. For awhile I felt that the single plain text file was a serious limitation, but those limitations might be alleviated with the combination of a SQLite and git, but that's a topic for another day.</p>

<p>Feedback about this new data model is much appreciated!</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Planning for Regdel Beta</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2010/01/planning-for-regdel-beta.html" />
    <id>tag:www.regdel.com,2010:/blog//290.19976</id>

    <published>2010-01-10T09:23:28Z</published>
    <updated>2010-01-10T09:49:33Z</updated>

    <summary>Quick Review I&apos;m very pleased with how the alpha version of Regdel has developed. I didn&apos;t have a concrete plan as I was pretty much dabbling in, experimenting with, and learning about the Ruby and Rack-based Sinatra web development framework....</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="planning" label="planning" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="regdel" label="regdel" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p><strong>Quick Review</strong> <br />
I'm very pleased with how the alpha version of Regdel has developed. I didn't have a concrete plan as I was pretty much dabbling in, experimenting with, and learning about the Ruby and Rack-based Sinatra web development framework.</p>

<p>In the process, I've come to realize how much I like developing with Ruby, and some Ruby libraries are incredibly helpful. Concurrently, I've been focusing on managing my time better and trying to get more done in less time by automating repetitive tasks, planning my work, and setting goals.</p>

<p>For instance, I've started to use Rake for organizing tasks, more specifically running tests, generating documentation, and automating the deployment of redgel to the demo.</p>

<p>Now I need to start doing some planning, but I'm a little hesitant. I get frustrated with plans because they often don't happen as I expected. If I don't update my written plans, events diverge and the plan becomes totally out-of-date. Frustrations aside, I recognize the value of planning, so I'll start with a broad stroke.</p>

<p><strong>Planning the Regdel Plans</strong> <br />
I'm not going to jump directly into the plans just yet! I want to put a little planning into how I will approach the process. I'd like to have a simple plan reference so that it will be easy to keep updated, but where should it be?</p>

<p>Options:</p>

<ul>
<li>In the repository, alongside the README.md and CHANGELOG.</li>
<li>A page in this blog.</li>
<li>Github.com wiki</li>
</ul>

<p>I like the idea of keeping it in a plain text file in the repository, but then again I'm concerned it won't get enough visibility. I'm experimenting with the automation of publishing documents like these that occasionally and irregularly update. If that works well, maybe keeping Regdel plans in the repository is the right choice.</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Ledger-CLI, Git, and Relational Databases</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2010/01/ledger-cli-git-and-relational-databases.html" />
    <id>tag:www.regdel.com,2010:/blog//290.19959</id>

    <published>2010-01-07T06:11:33Z</published>
    <updated>2010-01-07T06:43:02Z</updated>

    <summary>While working on Regdel, I&apos;ve again come across ledger-cli, a C++ software command line application which uses a text file for bookkeeping information. Ledger-cli is primarily a reporting system, i.e. it is not used for data entry, data manipulation, or...</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="git" label="git" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="gnucash" label="gnucash" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ledger" label="ledger" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rdbms" label="rdbms" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>While working on Regdel, I've again come across ledger-cli, a C++ software command line application which uses a text file for bookkeeping information. Ledger-cli is primarily a reporting system, i.e. it is not used for data entry, data manipulation, or similar. This was done on purpose, and in many cases that's a good thing.</p>

<p>I've dabbled with ledger in the past, but this time I took a serious look at it, and I'm actually starting to use it to some degree. Not for my main bookkeeping database, but when I want to quickly make a note of a transaction. I simply jot down the transaction into a text based ledger file. I'd considered doing this before but was concerned about managing the file(s), and instead added a feature to PBooks for entering simple notes. Nowadays, however, thanks to git I'm feeling a lot more comfortable with basic file management.</p>

<p>The significance of all this to me is that ledger-cli and its use of static file formats make it easy for a single person to quickly enter a couple of transactions without fear of being able to summarize the contents. The ledger-cli parser and memory model of the data can output the entire dataset as XML, which really liberates the entire kit-and-caboodle. That is really awesome when you think about it, and its importance should not be underestimated.</p>

<p>While ledger-cli can easily handle the processing of hundreds of thousands (millions?) of entries, I loathe to think of the work involved in the data entry. The ledger file format attempts to support faster entry of data with the use of xacts, but I can't comment on those as I've actually never tried using them. With PBooks, I developed a method of importing data from CSV files, but before I get into that, let me explain a tiny issue I have with the name and terminology of ledger-cli.</p>

<p>I find it ironic that ledger calls itself ledger, because in bookkeeping terms, I'd consider the file its centered on a journal. In my experience, a journal is the point of initial data entry, and journal entries contain multiple accounts. Conversely, ledgers are account focused, with references back to the original journal entry.</p>

<p>Not a big deal, but relevant. With PBooks, I wrestled with workflow for awhile because traditionally, data is entered into the journal as transactions take place, but in our technological world, I found it easier to leverage the CSV formatted data  exports of my online bank accounts - ledger data.</p>

<p>The solution I came up with was to import CSV account data into the ledger as "unmatched", and then give the user the ability to match each transaction to one or more corresponding account(s). It works well for me in practice, and it was possible to created shortcuts using the transaction memos. I consider that workflow solution to be similar in some ways to how ledger-cli uses xact statements.</p>

<p>While the philosophy of ledger is truly solid, reliable, and even elegant (and its starting to really build momentum and traction in the open source world), I'm not sure how realistic it is for the majority of small businesses to use for their bookkeeping and accounting purposes. True, its possible to use something like GnuCash to manage a ledger file in XML, but I don't think that makes much of a difference for reasons I won't get into right now.</p>

<p>Instead, let me write about Regdel. I've been considering a lot of different ideas but haven't come up with a clear direction. I'm thinking about: </p>

<ul>
<li>graphical user interfaces</li>
<li>data storage</li>
<li>access controls</li>
<li>work flow</li>
<li>reporting</li>
<li>data management</li>
<li>automation</li>
<li>revisions</li>
<li>backups</li>
</ul>

<p>More to come...</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Alpha Demo</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2009/12/alpha-demo.html" />
    <id>tag:www.regdel.com,2009:/blog//290.19921</id>

    <published>2009-12-28T01:37:39Z</published>
    <updated>2009-12-28T01:38:50Z</updated>

    <summary>I&apos;ve deployed an alpha demo of Regdel: Redgel Demo There are several things broken at the moment, but its nice to have something public!...</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="alpha" label="alpha" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="demo" label="demo" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>I've deployed an alpha demo of Regdel:</p>

<p><a href="http://www.regdel.com/demo/regdel/">Redgel Demo</a></p>

<p>There are several things broken at the moment, but its nice to have something public!</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Regdel on Ruby 1.9.1</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2009/12/regdel-on-ruby-191.html" />
    <id>tag:www.regdel.com,2009:/blog//290.19919</id>

    <published>2009-12-27T23:43:00Z</published>
    <updated>2009-12-27T23:44:52Z</updated>

    <summary>I&apos;m pleased to report that Regdel runs on Ruby 1.9.1! The hardest part was the getting ruby-xslt to compile, but thanks to Radar, it was possible. :-)...</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="19" label="1.9" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="regdel" label="regdel" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ruby" label="ruby" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="xslt" label="xslt" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>I'm pleased to report that Regdel runs on Ruby 1.9.1!</p>

<p>The hardest part was the getting ruby-xslt to compile, but thanks to <a href="http://github.com/radar/ruby-xslt">Radar</a>, it was possible. :-)</p>
]]>
        

    </content>
</entry>

<entry>
    <title>Single Table Inheritance for Accounts?</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2009/12/single-table-inheritance-for-accounts.html" />
    <id>tag:www.regdel.com,2009:/blog//290.19904</id>

    <published>2009-12-24T05:53:08Z</published>
    <updated>2009-12-24T06:04:18Z</updated>

    <summary><![CDATA[Currently Regdel takes advantage of DataMapper's ability to extend object classes with "single table inheritance". I've considered also using it for Accounts, something like this: class Asset &lt; Account; end class Liability &lt; Account; end class Equity &lt; Account; end...]]></summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Data Model" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="accounts" label="accounts" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="amounts" label="amounts" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="assets" label="assets" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="datamapper" label="datamapper" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="regdel" label="regdel" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>Currently Regdel takes advantage of DataMapper's ability to extend object classes with "<a href="http://datamapper.org/docs/misc.html">single table inheritance</a>".</p>

<p>I've considered also using it for Accounts, something like this:</p>

<pre class="sh_ruby">
class Asset &lt; Account; end
class Liability &lt; Account; end
class Equity &lt; Account; end
class Expense &lt; Account; end
class Revenue &lt; Account; end
</pre>

<p>And even further:</p>

<pre class="sh_ruby">
class BankAccount &lt; Asset; end
</pre>

<p>I'm not sure its the right way to go though. There is an incredibly possibility here though: with deep inheritance, account groups would be built defined in the class  "family tree", and generating reports based upon account type would be super easy.</p>

<p>The limitation would be, as the name suggests, single inheritance. With <a href="http://www.pbooks.org/">PBooks</a>, Account Groups can have multiple parents, though accounts can only belong to a single account group. Its an interesting implementation. Is it overly flexible? Maybe... </p>
]]>
        

    </content>
</entry>

<entry>
    <title>Regdel on Github</title>
    <link rel="alternate" type="text/html" href="http://www.regdel.com/blog/2009/12/regdel-on-github.html" />
    <id>tag:www.regdel.com,2009:/blog//290.19900</id>

    <published>2009-12-23T23:38:49Z</published>
    <updated>2009-12-24T00:41:46Z</updated>

    <summary>I&apos;ve decided to move the Regdel code base to Github, this will make it easier to collaborate with other developers. Fork it up, y&apos;all! http://github.com/docunext/regdel Oh yes, its now officially Affero GPL licensed, too!...</summary>
    <author>
        <name>Albert</name>
        
    </author>
    
        <category term="Regdel Development" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="github" label="github" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="license" label="license" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="regdel" label="regdel" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://www.regdel.com/">
        <![CDATA[<p>I've decided to move the Regdel code base to Github, this will make it easier to collaborate with other developers.</p>

<p>Fork it up, y'all!</p>

<p><a href="http://github.com/docunext/regdel">http://github.com/docunext/regdel</a></p>

<p>Oh yes, its now officially Affero GPL licensed, too!</p>
]]>
        

    </content>
</entry>

</feed>

