Posts tagged ‘introduction’

Introducing Prickle, a time tracking tool

I’ve been doing a lot of Django coding lately, and I’ve been doing it very well. But I’ve felt bit of stagnation settling in. I’ve only been coding what I know. I needed to explore, experiment.

So I picked a couple of technologies I’ve heard about but haven’t tried, and started coding. The goal wasn’t to make something useful, it was to learn some new APIs and frameworks. I accidentally made something useful.

So here I present Prickle. Prickle is a time tracking tool for freelancers written using Pylons, CouchDB, and Jinja2. (Those are the technologies I chose to play with.) I decided to write an app to replace Freckle, a stay-out-of-your-way time tracking tool that has been highly recommended to me by favorite alternate freelancer, Dan McGee. Freckle is a great service, but I have a couple problems with it: I hate hosting my data on other people’s machines, and I hate paying money to use a service. Granted, at $12 a month, it’s going to take me years to earn back the hours I put into developing Prickle, but that’s not the point. Replacing Freckle in my daily use was just a little bonus I got while studying Pylons and CouchDB.

All Prickle does is allow me to enter the number of hours I’ve worked on a project, along with a description. It makes entering hours as simple as possible; the date is selected semi-automatically. Hours can be entered in a variety of formats (0:30, 30, 0.5, and .5 all map to 30 minutes 1, 1:00 1.0 all map to 1 hour), so it tends to “just work”. Project names are autocompleted, so it’s just a few keypresses to get to the description box. Now I type a description, press and I’m done.

There are a bunch of views of the timesheets that allow me to see how much uninvoiced time has been spent on a particular project or during a particular month or day. If I set a rate for a project, I also get a summary of how much money I’ve earned on a given day or month, or how much I’m going to have to bill a client for a specific project.

And Prickle does invoicing. It’s very simple invoicing, but very simple is all that I need. It summarizes the hours since the last invoice was created, displays them in an invoice template (I currently use print to pdf to generate the invoice. Maybe later I’ll automate sending an e-mail to clients). Even here, Prickle has some handy helpers to speed up the process. It keeps track of billing addresses for a given project, so I don’t have to enter it each time, and it guesses what the next invoice number should be so I often don’t have to type it in.

Prickle doesn’t have all the fancy graphs and reports that Freckle has, but it quickly answers the primary questions that I ask of my data: How many hours have I billed today? How much money have I earned this month? Am I on target for this project’s budget?

Prickle is open source, and I’m hoping some people will find it useful enough to contribute back to it. I use it daily already, and don’t really have any complaints. Some things I intend to add include:

* A timer with a pause button. I hated this when I first tried Freckle, but it grew on me.
* improved historic view of invoices
* editing or deleting time entries

Some things I invite others to add include:
* authentication. I like to run things locally, so auth wasn’t important to me. It’s also confusing to implement in Pylons.
* styling. I applied some semi-random CSS rules, but I know it’s ugly.
* browser support. This thing works great in chromium, but I’m using some of the most experimental stuff: html 5 inputs, CSS 3, etc. It’d be nice to add some Javascript to make it work on other browsers.

So, Dusty, now that you’ve played with Pylons and CouchDB, what’s your take?

CouchDB is pretty cool to work with. Map/Reduce based queries take some getting used to, but once you’ve learned them, that’s all you have to know. There’s no tuning SQL, the ORM is a very thin layer, it just works. If CouchDB is as scalable as they say it is, I think I’d like to use it some more.

Pylons is kinda nice. Formencode sucks, but other than that, the libraries bundled with or suggested for pylons are pretty intuitive. I’m finding Django is a bit over-engineered these days, or maybe I’ve just been pushing its limits. I was hoping Pylons would be a less bossy solution, but I don’t think I’ll be switching to it or suggesting it to my clients anytime soon. It seems a bit rough around the center, and doesn’t seem any less complicated than Django, in practice.

Next on my list of tools to play with is node.js. I also want to play with web2py, and I may try a zope 3 app just for fun someday, too.

Hello blog

So apparently this is my first post. Actually, I’m editing the auto-generated first post.

I’ve been meaning to set up a blog on my domain ( for a while, but never got around to it, likely due to the fact that it seems pretty unimportant. Also, I am in strong agreement with a 2002 article on the topic: That link is bloody hard to find these days. But while searching for it, I came across this 2006 gem, which happens to explain why that link is hard to find:

The truth is, the internet landscape has changed, as usual, and I haven’t, as usual. I’m still a minimalist. I don’t need this fancy wysiwyg editor, I could just upload articles to a website somewhere and update them as needed. That’s what ESR does ( and it works. But my articles would never be discovered.

So when Dave Crouse, Arch Linux user and all round good guy (,,, and several other domains…) offered me a blog here on with the only work required being ‘change your password and e-mail address’, I just did it.

Judd Vinet ( has been suggesting I set up a blog for a while too. I should listen to him, as he’s the only famous person (He created Arch Linux – I am on an exchange e-mails basis (The modern equivalent of a First Name basis, of course) with. He says a few useful tech posts can go a long way to securing contracting positions. Since I still solicit the occasional contract, I might do just that.

I still have a few issue with blogs. They’re too chronological — by design. Often people post something and then a few weeks or months later post a new entry, an ‘update’ that cites results or new information in some way. They tie these together by editing the original post and linking to the new one. To me it would make sense to have only one article and update it to ensure it has the most complete and accurate information. Current blogging platforms (they’re just a CMS, really) don’t make it easy to do that. Tagging is, I think, supposed to alleviate this problem, but I have a feeling it doesn’t meet my standards.

Another issue is dates. In today’s world, information becomes obsolete within a year. In my field, it often becomes obsolete within a month.  (This morning I was searching for information on running Adobe Flash on the Android platform. The only info I can find is from November, 2008, its useless). When I’m searching for a solution to a problem, I often ignore any search results more than a few weeks old. Therefore the FIRST thing I look for on any article, web page, or blog post is the date. But its hard to find. I actually ranted about this a few months back (so the info is stale). I’d have put it on my blog if I had one, so here’s a link:

Next, I despise the way blog interlinking works. Its been said before (I’m in too much of a hurry to be doing other things to find a citation) that 90% of the info in the blogosphere is recycled content. Too many blog posts are “I found this solution and here’s the link.” Half the time the link is a link to somebody else who linked to the solution. Finding the information is a pain. Search engine page ranking is supposed to solve this by putting the most linked posts at the top of search results but it must fail or I wouldn’t have anything to complain about.

Finally, there was a book I read once (The Gospel according to Larry) which had a terrific quote I identified with. I can’t remember the exact wording, but the paraphrase was something like “(personally, I think if 50 thousand people are doing something that’s a good enough reason not to do it)”.  I’m very leery of bandwagon following.  I tried Facebook and the whole social network thing, but it didn’t suit me. I never tried twitter because I don’t WANT the world to know my every thought. But blogging isn’t like that anymore, its turned into a semi-interactive communication medium. It generally has more interesting, accurate, and useful information than standard broadcast mediums (news stations, sites, papers and the like). Plus, I’ve got ideas that need voicing, so lets try this.

This post indicates it also takes up a lot of time. Better be careful on that front.

BTW, if you’re wondering what topics I’ll cover here, Arch Linux and Python will be primaries, partially because that’s what I do best, but mostly because Crouse gave me a blog on the domain. Other topics that interest me and I feel I have enough authority to comment on include martial arts (Chinese, for the most part), web development, Hockey, dogs, Android, humour, and English grammar.

I imagine I’ll also post random useless information about random useless topics. I’ve had something on involuntary racism bouncing around in the back of my head just waiting to be authored.