Monthly Archives: August 2007

Microsoft Money Plus vs. Quicken 2008

I was going to do a big write-up of Microsoft Money Plus vs. Quicken 2008 as I've just tried both but no one wants to read a 10-page rant about the poor state of personal finance software in this day and age. It's now just a few paragraphs rant.

Microsoft Money Plus

There is nothing Plus about the latest offering from Microsoft. It's still not a real Vista application, it's slow, the main landing page flickers like a broken strobe and Microsoft seems content to let the world innovate around them. No features to get excited about and they've obviously decided to stay off the entire Vista and Office 2007 bandwagon by staying with a barely helpful interface. There is nothing worth upgrading for and calling it "Plus" must have made some laugh while others cried.

Quicken 2008

Beautiful and grand ideas implemented poorly or at the expense of real fit and finish. 256-color icons (read "ugly") and clunky dialogs litter the user interface thus greatly minimizing the attempts to create a polished, stream-lined user experience. I found over 30 issues in the first 15 minutes and that was just setting up a new QDATA file (who uses an all uppercase filename these days?). There are lots of great ideas here; a tagging system, easier ways to categorize expenses, a default view that is actually helpful, an easy at-a-glance budgeting system. Sadly they're all marred by usability quirks and general horrible performance on Vista. The screen constantly flickers when doing certain actions and it even managed to crash the window manager twice.

In a bit of irony Quicken 2008 has a bona fide Vista Sidebar Gadget showing you upcoming bills and transactions in a compact little calendar view. The Money team should bow their head in shame for not having such a thing in Plus and if they're not bowing their heads they should be fired because they obviously just don't care anymore.

A Sad State

On one hand we have Money playing it safe by not even attempting to try new things or freshen their interface, in fact by not even admitting to the existence of an entire new operating system, Vista, at all. On the other is Quicken blowing it's budget on big ideas yet forgetting to spend any on polish or usability testing.

What all of this says to me is that there is room for a new-comer. Neither products have dominated simply because they both suck in equal measure, just in different ways, while having just enough of the right features to get by. There is quite a bit of wiggle room and someone could carve a nice chunk out of the market if they wanted.

So for now Microsoft Money stays on my computer, though I'm not upgrading to "Plus". Don't gloat though Money, you still suck, you just happen to play fractionally better with Vista.

Preventing “Could not find schema…” for SubSonic in Visual Studio

My current favorite .NET DAL/ORM solution is SubSonic. It strikes a good balance of being helpful without hindering, partly due to it being heavily inspired by Rails as well as the creator’s focus not only on good code but good architecture and design. Another great thing about the project is that the creator, Rob Conery, does frequent screencasts explaining the nooks and crannies of SubSonic as well as writing informative, engaging and colorful posts over on his blog.

Enough praise though, this post is all about fixing an “issue” that annoys me. SubSonic does part of it’s magic through the SubSonicService, which is a custom configuration section in your web or app config. Since it’s a custom section Visual Studio won’t give you code completion (aka Intellisense) and it’ll spit out a ton of “Could not find schema information for blahblahblah” warnings. These warning are basically saying, “I have no idea what this crap is in the web.config so you get no fancy Intellisense magic from me”. To get back some of that magic here’s all you have to do:

1. Download SubSonicSchema.zip (if you right-click to download make sure you save it with an xsd extension)

2. Put it in C:Program FilesMicrosoft Visual Studio 8.0XmlSchemas

3. Edit DotNetConfig.xsd in the same folder and add the following line:

<xs:include schemaLocation="SubSonicSchema.xsd" />

(I added it right underneath the <xs:schema> opening tag, seems to work)

4. Close Visual Studio if it’s running, re-open, ta-da you now have Intellisense as well as no more annoying “Could not find schema information for…” messages.

A Simple Delphi rakefile

Building projects has always been a pain in the arse. You want it to be simple, fast and easily reproducible, all of which are tenets of good continuous integration. When it comes to building a Delphi project I’ve tried a whole slew of things from batch files to the Ant-based Want to very slick IDE’s like Automated Build Studio and FinalBuilder. I keep coming back to simple DOS-based apps though because in my ideal world a user should be able to do a clean checkout of your code and then be able to build.

Currently I use Want, which is a Delphi port of Java’s Ant, .NET users will probably think of NAnt which was also a port and then heavily extended. Ant, or it’s derivatives, is great until you need to manage a large build file and have to wade though all that xml to figure out what’s going on. Xml is just not the best format for humans to muck about in so lately I’ve been looking at Rake, basically Ruby’s version of make. Maybe I’ll whip this up into an tutorial or something more informative but for now here is a *very* basic build script using rake, in fact it’s the one I use to build my ZuneKeys application:

(I’ll sex up the code formatting later once I find a good online code formatter)

def compile_project(project_file)
args = “-B -Q #{project_file}”;
result = %x[dcc32 #{args}]
if result =~ /Error/
puts result
else
project_name = project_file.gsub(/..*/, “”)
puts “built #{project_name}”
end
end

file ‘ZuneKeys.exe’ => ['ZuneKeys.dpr', FileList['*.pas']] do
compile_project “ZuneKeys.dpr”
end

task :default => ['ZuneKeys.exe'] do
end

desc “Remove temporary files created during compile”
task :clean do
if File.exists?(‘ZuneKeys.exe’)
rm “ZuneKeys.exe”
end
rm FileList['*.dcu']
puts “clean”
end

task :release => [:clean, :default] do
puts “release project”
end