May 17, 2012

Decent Small Business Accounting Package for Mac? Anyone?

questioning Decent Small Business Accounting Package for Mac?  Anyone?I spent almost the entire afternoon yesterday researching accounting packages for the Mac. There really weren’t that many serious competitors.

The Contenders

QuickBooks Pro 6: I really loathe Intuit, so I start very prejudiced against this package. They did such a terrible job on TurboTax 2005 for Mac, and they actually drove me away from my decade-long use of Quicken with their awful product for the Mac. That said, I am actually thinking of trying this product, mostly because many small-business accountants are comfortable accepting Quickbooks files, and there are a lot of books explaining how to use it. That’s a pretty strong pair of reasons, but I think their Mac products stink so badly that I might have to set it up on a Windows computer, and that’s a whole can of worms right there.

MYOB Accountedge: Much more Mac-friendly, from what I read. Yet sort of quirky, and not highly rated at all by the users at Amazon. It seems like a love/hate rating war at Amazon, actually. I’m thinking that if I do go with a Mac product, I will definitely try this one first, or perhaps its little brother MYOB Firstedge, which is only $99 and can later be upgraded to the full Accountedge product. The problem is that apparently there is no “best practices” book for me to work from when using this software.

Checkmark Multiledger: This is very complete, and from what I read elsewhere, it is favored by many accountants. I think that is because it so bare and to-the-bone. Unfortunately, that makes it not all that useable for me. I don’t want to be an accountant, I just want to run my ecommerce store, and send the books to an accountant who’ll perform his black arts upon them. This is too raw for me. I downloaded the demo and was, to put it mildly, very confused.

Linux Options

I could use sql-ledger, I suppose, but I wasn’t excited by what I saw. It looks like a web version of Multiledger. If I was completely comfortable with accounting, I might like it, but for me at this point in my business career, no.

Gaah, maybe Windows

I really don’t enjoy operating system wars. I usually stay out of them, after making my preferences clear. Suffice to say that I do not like Windows at all, so much so that I’ve managed to avoid programming for Windows for almost five years. Yet the number and quality of choices for Windows accounting software is so much greater.

I’m very interested in Peachtree Complete Accounting 2006, which I read great things about. Or, if I could win a free copy of “Microsoft Office Small Business Accounting 2006 from Startup Nation, I’d happily use it. I just don’t want to pay them money for their software.

This is a big decision, and it will have a big impact on my company, whatever I choose. I’ve got more research to do, I think. At the least I need to talk with other small business owners or accountants to get their recommendations.

[tags]Reviews,Quickbooks,MYOB,Accountedge,Firstedge,Peachtree,accounting[/tags]

First use of the Django Magic Removal

guitar First use of the Django Magic RemovalLast night I took a break from my most recent Django app, a mailing-list manager, to explore the new "Magic Removal Branch".

I diligently followed the instructions on the Django Wiki to change my existing code. There were more changes needed than I’d anticipated, but they all made sense, so I didn’t mind. Better, I agreed philosophically with all of them.

Basically, the idea is to make Django apps act more like normal Python modules. That means ceasing all the “magic”, where it used to automatically provide entire new classes to manage objects, and used to magically move around the modules, making them available in namespaces you hadn’t explicitly named. I found that confusing, to be honest. I always had to look at example code to find out where the magic stuff was going to be. The magic, which was supposed to be helpful, actually ended up costing me time and thought.

Roadblock 1 – Database Init

Unfortunately, I’m not all the way there yet in migrating my code. First, I ran into a significant problem with database initialization. That is, it didn’t work.

$ bin/admin.py init

File "/sw/lib/python2.4/site-packages/django/core/management.py", line 498, in init
contenttypes_app = models.get_app('contenttypes')

File "/sw/lib/python2.4/site-packages/django/db/models/loading.py", line 30, in get_app
raise ImproperlyConfigured, "App with label %s could not be found" % app_label

ImproperlyConfigured: App with label contenttypes could not be found

OK, I restored the old database. It was a good thing I backed up before trying this! I then executed the SQL recommended on the Wiki to convert an existing install to the new branch. That mostly worked, but complained that a few tables were missing. “django_flatpages”? Never used that one, I assume it was a contrib module.

Roadblock 2 – code changes

I think I’ve converted all the existing code correctly, but the server dies on start. Apparently, I did not convert my old "”Class META" to the new "Class Admin" correctly. I’m sure I’ll knock that problem down the next time I have a moment to tackle the conversion. Unfortunately, I ran out of time, exhausting the one hour I had left before “The Daily Show” last night.

Conclusions

Absolutely worth the pain. It will work with a little more tweaking. These are normal pains to experience when using a pre-release, actively developed branch.

Update: The contenttypes error is corrected by a patch available from bug #1280.
[tags]django,python,magic removal[/tags]

What is it about PHP

weeds What is it about PHPI’m no fan of PHP, I believe it is a terrible language which produces insecure, ugly code almost all the time, yet I use it. It powers this blog, for example, and it will be powering the online store I am about to launch. Why do I use it when there are so much better languages and frameworks available?

Ian Bicking discusses this at length, focusing on the features he’d like to see in a serious competitor to PHP. He’s got some great points and a long laundry list of things he’d like to see, but his article doesn’t answer my basic question. Why do I use a language I personally think is extraordinarily poor?

Installation & Availability

That’s it, right there. Installation is king. Installing a PHP app is usually as simple as dropping the files in place and setting up the database. Bam, done. PHP is PHP, it usually “just works”. There is no careful setting up of fast CGI, or debating about Apache vs. Lighthttpd. There are no awkward CGI interfaces to tweak for your particular installation. Just drop and go. That is half the battle right there. And, I believe, it is a lot of the force that drives the second half of the winning equation, availability of “good enough” applications.

Availability. Name a better, more configurable, more active blogging framework than WordPress written in a good language (note, this does not include Perl). Ah, there are some, but they need work, they need to be finished, or “just need this part implemented”. I don’t have time or the interest. I run a couple businesses, and have a full time job. I have a lot of programming projects to do, and writing a new blogging engine isn’t one that interests or will pay me. So, WordPress/PHP wins.

Kinda sad, really, but it least it isn’t .net. PHP is bad & ugly, not evil.

[tags]PHP,rants,wordpress[/tags]

Selling my Fingerworks Touchstream ST

touchstream1 smaller Selling my Fingerworks Touchstream STAs a followup to my article about curing typing pain, I decided to sell my Fingerworks Touchstream ST keyboard on eBay.

I was quite surprised to find that the company that made the keyboard has been sold and that no more are being made. That means that the excellent keyboards are usually selling for more than they cost new. These keyboards are great, unique, and no more are being made, so I guess I can understand the heavy interest.

If you are interested, here’s the auction. Less than a day after listing, it has twenty “watchers” and four bids, which is quite unusual and pleasing to see. *Crossing my fingers*

Update: It sold for $1580!
[tags]fingerworks,touchstream,keyboards,dvorak,ebay[/tags]

Prototype library – dissected

surgical tools Prototype library   dissectedThanks, Jonathan Snook for creating such a useful (and gorgeous) set of printable reference sheets for the excellent Prototype library for Javascript.

I use Prototype to support almost all my Javascripting on the net, both at work and on personal projects. It is a great library, and this reference just makes it clear how clean and well laid-out the library actually is.

[tags]javascript,prototype,reference[/tags]

Javascript Programming Conventions

chain Javascript Programming ConventionsI’ve been meaning to write a Javascript “best practices” style guide for some time. Bad Javascript is just so painful to read and so easy to find that it brings a bad flavor to the whole language. I might be exaggerating, but only a little.

The Dojo Javascript Programming Conventions just released recently makes the first part of that article no longer needed.  I agree with all their suggestions.  Ok, not all, but most of them.  Basically, I agree enough to modify my own style just to have a standard to follow.

Javascript is such a fun and powerful language, and it has really come into its own with the rising popularity of “Web 2.0″.  It is high time for programmers to treat it like we do any other “real language”, with standards, best-practices, and excellent toolkits.  Dojo and Prototype are leading the way, in my opinion.

[tags]Javascript,dojo,standards,coding standards[/tags]

IPython brings joy

jump joy IPython brings joyAfter my rant yesterday, it is time to share another programming tool I find absolutely indispensable. IPython is an enhanced command-line shell for Python.

By itself, that may not sound like much, but you really get a lot. You get command history, tab-completion, and automatic introspection of classes. That means you can look up the specific code any function will call, at any time. It has all sorts of automatic and “magic” things it can do, all of which make it a must-try for the working Python programmer.

Yes, but what has it done for me lately?

Since installing IPython last year, I find myself using it for all sorts of tiny tasks which I would have done in a more fragile, cumbersome, or laborious way in the past. Last week, I needed to insert 50,000 records into a database. They were very simple insertions, so I could have just run an Emacs macro to do make all my Sql. But now with IPython, I just pop into a shell, load the unformatted records from a CSV file, and build the SQL in three lines or less of code. Sweet!.

Today, I needed to find the missing item in the haystack. I had two lists, one text and one from a database. The database was missing one of the items from the list. But which one? That was a trivial thing to conquer using a little 1 minute IPython session. Like so:

In [1]: f = open('cc_tables','r')
In [2]: tables = f.readlines()
In [3]: f.close()
In [4]: f = open('cc_list','r')
In [5]: dump = f.readlines()
In [6]: f.close()
In [7]: len(tables)
Out[7]: 104
In [8]: len(dump)
Out[8]: 103
In [9]: [x for x in tables if x not in dump]
Out[9]: ['DataExtractionStatus\n']

The answer, in 9 lines, 4 of which were unneeded, was “DataExtractionStatus”. I could’ve done that in OpenOffice Calc, but the thing would have still been loading in the time it took me to bang out the answer with IPython. Thank you IPython, for making my job that much easier and faster.

[tags]Ipython,python[/tags]

Bitter Java

coffee Bitter JavaI’ve been saying for years “The only time I program in Java is when someone pays me.” I was half joking, just stupid office banter, but I’m getting more and more sure about that opinion. Rant mode – engage.

I spent the entire day today chasing down Java configuration errors when upgrading Resin 2 to Resin 3. It is a moderately complex application I’m upgrading. Built on Java 1.4, Spring, Hibernate, and JSTL, it really shouldn’t be that hard to upgrade. After hours of careful debugging, I found that it is a bad combination of JSTL and newly strict adherence to the JSTL spec that is causing most of my upgrade woes.

Basically, Resin will no longer allow me to access a public static method of a class using Javabeans syntax conventions. Why? Because it is static. Not because it isn’t useful, but for the sake of strict interpretation of “the rules”. I seriously hate that attitude, which is very prevalent in the Java world. So, I need to rewrite many of my classes to make non-static class methods to access the same information I used to be able to get at directly. It leaves a bitter taste in my mouth.

Don’t trust the programmer

But that sort of “don’t trust the programmer” attitude is depressingly common in Java. Most everything is “strictly typed”, sure, but to work with a collection you always have to cast the object back to the proper type. Isn’t that “secret scary knowledge the programmer shouldn’t have to know”? I submit that it is. Doesn’t that break the supposedly big advantage of finding errors at compile time? Yes, it does. Can a good programmer get every bit of the same advantage and early error-validation by doing proper unit checks? Of course he can. So why do it like that, why be so wordy and needlessly strict? Because that’s Java’s corporate, designed by committee, not for love, spirit.

XML Sit-ups

There are a lot of people debating the merits of the so-called “XML sit-ups” that many frameworks require. Java invented the XML sit-up. Spring is a gorgeous framework. It almost rescues Java in my eyes, but looking at the horrible horrible config files it requires almost brings junior programmers to tears. Seriously, take a look at the Spring Acegi security framework configuration files. I think that may be one of the most complex, interleaved, multi-layered config files I’ve ever seen. I strongly believe that that particular XML serves absolutely no purpose, and would actually be clearer, cleaner, and more testable if it was instead expressed in code.

It saddens me to see Zope 3 heading down that same XML path. It is a myth that anyone other than a programmer will ever really be editing the config files. Why add needless cruft, delays and obfuscation? I don’t buy the “then it can be validated using XML validators” argument for one second. That’s like smashing an ant with a hammer.

Ugly Ugly JSTL

JSTL is another bitter pill. It is just unforgivably wordy. It is so amazingly wordy, and yet it fails to even remain valid XML. What the hell? I can forgive Zope Page Templates which are very wordy and involved, yet manage to remain valid XML the whole time. I still don’t really like them, but at least I can understand why some people do. JSP/JSTL on the other hand is so crufty, so layered and whacky, so inelegant, that it feels like the wrong solution every time. The programming community should simply throw it out and take a look at a decent, mature, truly object oriented solution like Cheetah for a well designed, terse and effective templating system. Why continue adding to the ugly pain that is JSP/JSTL? I have to think it is simple NIH syndrome at this point.

Conclusion, anyone having fun?

What I honestly find myself wondering is whether anyone actually programs in Java for fun. Or do they all do as I do, program in Java on the day job, come home, strip off the straightjacket, and dive into Python, Ruby or PHP? I hope so, for their sake. Java is a language with a broken spirit, and without exposure to other languages, I fear that Java developers will have their spirits crippled as surely as if they were VB developers.
[tags]Java,Spring,Hibernate,JSTL,Zope,ZPT,Acegi[/tags]

3 Column template with good Adsense placement

swim lanes 3 Column template with good Adsense placementThe Three column style for WordPress weblogs is getting very popular. With all the billions of interesting plugins available, and with the increasingly common use of ads on the sites, it is hard to fit everything in on a standard two-column design. Despite that, there really aren’t that many templates available which are both stylish and effective.

My Favorite

After much searching, I recommend 130106 by Isnaini. It does a nice centered “pop” of the Google Adsense, which I find very effective.

For examples, there is the host site, of course. I don’t care for the pink-brown on that site, so another (prettier) example site using that theme is my marketing site, Marketer’s Eye.

[tags]Wordpress,Wordpress2,3 column,template,themes,3 column template[/tags]

Fresh design examples

searching magnify Fresh design examplesWeb Design From Scratch has a nice, well illustrated article on Current Style in Web Design.

Of course, I don’t want to advocate always running with the herd, but in this case I’d argue that it isn’t so much the herd, but more of a pack. OK, so that isn’t such a great metaphor. What I’m trying to say is that I think the sites they mention exemplify some of the best, freshest sites on the net, and that I personally take a lot of inspiration from them.

I think the first thing I’ll do from this list is to lighten up my various sites templates a bit, making the page less “weighty”:

The great sites above share the following design features:

  • Simple layout
  • 3D effects, used sparingly
  • Soft, neutral background colours
  • Strong colour, used sparingly
  • Cute icons, used sparingly
  • Plenty of whitespace
  • Nice big text

[tags]design,layout,web design[/tags]