Sunday, September 27, 2009

Where's Waldo?

I was at the store today because I had a couple of quick items to get for Caleb's birthday. I had no cart. What I planned on getting was carryable without one. My arms are fully loaded and I'm heading to the checkout. And then I got the call I dread - "Can you please pick up a few extras for me?". Okay, but please let them be easy. "Toilet paper, milk, and ... something else you've never heard of, never seen before, and can't possibly find with your arms full and in only 1/2 an hour". Gaahrr!

My wife can never find her keys or her sunglasses. For me, it's the requested leftover container from the fridge, or a microplane grater in the cupboard, or some bizzare cleaner from the store called Clorox Anywhere. Clorox Anywhere? Seriously? 'Cause I can't seem to find it anywhere. I demand truth in advertising people!

In the summer, we don't need to run the A/C. My wife will just ask me to please get her some salad dressing from the fridge and I'll cool the whole house as I stand there with the door open until I can see my breath. She'll politely tell me that it's behind the mayo, and then I all of a sudden have two things I have to find. She usually gives up on me about the time I start yelling "MARCO!" into the crisper hoping the requested item will respond back, "POLO!"

There's that rare occasion where we're actually out of the item requested, or it's marked "refrigerate after opening" and it wasn't opened yet so it wasn't actually in the fridge - this is the moment when I can pretend like I'm vindicated. "See, I told you it wasn't there". But more often than not it was there - plain as day - right in front of my nose. And at times, it's even wearing that garish hat with the red puff ball just to mock me.

Friday, September 25, 2009

Source control

I spent most of my day at work today setting up a new development server. SQL Server 2008, IIS, msbuild server and finally, Subversion. Our dev box died a few months ago and we had cobbled together some things on a bunch of different existing boxes and basically hobbled along.

So today I got a chance to consolidate everything onto a nice new box. And originally I wasn't planning on moving our source control onto it. But our SVN is on an old Linux box and hadn't been updated since 2006. It was humming along nicely the way Linux seems to do, but that particular brand of aging box has been dying on us quite regularly, so each day we leave it untouched we take a risk of an inconvenient server failure. And, since our lone sysadmin has little experience with Linux, the risk seemed even greater. So, off I went to see if I could get a Windows SVN server up and running.

I installed the Windows version of Subversion from here, but then wound up having to figure out how to set it up as a Windows service and get it configured. It proved to be more complicated than I expected. And I was left with a lot of questions:
  1. How do I make sure that SVN is running as a Windows service?
  2. How do I serve out my repositories via HTTP? With SSL?
  3. How do I use NT security vs having to manage separate SVN user accounts/passwords?
A quick Google search turned up VisualSVN Server. I've used their other product - VisualSVN - but didn't find it worth the cost and I wound up a happy Ankh user. I hadn't been back to their site since, but I wish I had because VisualSVN Server is free and it just works. I had it up and running and the first 16 of my repositories dumped from SVN 1.3.1 on Linux and imported to SVN 1.6.5 on Windows all within an hour. Amazingly, I knew the least about this at the onset of my day, but it took me the least amount of time of any of the things I had to set up on the dev box today. Highly recommended! 5 full stars!

Thursday, September 24, 2009


If we view our lives and our humanity as something that naturally trends away from perfection - as something that, left to its natural state, will break a little bit each day - it may just help us to see that we need to do something proactive each day to alter that trend. A boulder on a mountain will tend to roll down it given wind and rain and earthquakes and nature and time. Its natural state is not to climb that hill. If our internal self-engine is left to idle, it will naturally drift away unless we expend some energy daily to fight the trend. Some days we roll farther down the hill than others and need a bit more adjustment. Other days there's may not be much movement at all, but we will never go up that hill unless we're deliberate about it.

Tuesday, September 15, 2009

Teachable moments

I was up late the other night putting in the 4th water heater we've had in our house in less than a decade. That's another story entirely from the one I'm going to tell, but it sets the scene for how exhausted and short-tempered I was the next morning when Ian and Caleb got into their standard fight. It goes something like this:

  1. Ian constructs something amazing from his vast imagination.
  2. Caleb wants to play with his big brother and the latest creation
  3. Ian doesn't want Caleb anywhere near his labors of love, and responds by panicking
  4. The situation includes any combination of hitting, yelling, and crying
  5. Whichever parent is closest makes a ruling, and includes any combination of yelling, timeout doling, and general annoyance
  6. Repeat ad nauseum
This morning was no exception, and the fight was as silly as it ever was. A bawling Ian willed himself to verbalize his case to me, barely holding back the urge to restrain Caleb who was still on the move. His whole body shaking.

"Why don't you want him to play with it?"

"Because I worked hard on it and he'll mess it up!"

Hmm... isn't that interesting. It's not that he doesn't want to share, it's that he is anticipating Caleb's actions and attempts to avoid an outcome he believes is inevitable - which admittedly it probably is. He's set his expectation for Caleb's behavior, and Caleb doesn't disappoint. But it shouldn't be this way, and in fact I don't think it's biblical. If Ian wants to break the cycle, he needs to forgive past wrongs and just let Caleb play too. Ian's fear of what might be is depriving him of a valuable time with his only brother.

We are given second chances every day to do things differently. We aren't prohibited from an activity or an opportunity just because we blew it the last time. Or even when God knows we'll blow it this time too. Every day is a clean slate - a chance to try again. It's pretty hard to remember that when you're the one that has to do the forgiving. In diffusing the situation for Ian, I found myself in my own teachable moment.

Friday, September 11, 2009

QIF parser

As promised in this post, here's a simple parser written in C# for Quicken QIF files. I tested it on the output from a Money 2002 export, and from a Quicken 2009 export. Once the transaction objects are created, you can pump this data out to a .CSV file, or into a SQL database, or if you're feeling brave, a QFX/OFX file. This is step 1 in building my personal finance management suite. Enjoy:


The federal deficit has hit $1.38 trillion. If I started counting 1 dollar every second, it would take me over 43 thousand years to count that high.

$1,380,000,000,000 / (60sec * 60min * 24hrs * 365days)

The total debt is $11 trillion, which would take nearly 349,000 years to count that high at the rate of $1 per second. You can watch the debt clock spin here. And this is before we've funded the total health care overhaul.

Wednesday, September 9, 2009

Quicken 2009 first impressions

I mentioned in a previous blog post about the death of MS Money. I'm a long time user of MS Money - in the past decade I've used 3 versions - 97, 2000, and 2002. I never upgraded from 2002, and was still using it happily until very recently. Though to be honest, I always missed the simple interface from the '97 version. My only experience with Quicken was that I used it for about a week in 1997, but the software was only so-so, not exceptional. And when they started calling me after I registered their software, I was done with them. I switched to MS Money, which has truthfully never knocked my socks off. It was functional and easy and talked to my banks/credit cards, and my phone never rang with a pushy MS salesperson so I never had any reason to switch. It was easy, no-hassle financial management, which is what I still want today.

Even though I'm on a really old edition of Money, it still downloaded my bank transactions and just worked. However, the fact that MS no longer supports it meant that I needed to make a decision about whether I was going to stick with my really old version (which has no guarantees of working on Windows 7, and surely won't ever see updates as banks change their online offerings). Or I could upgrade to a new version of Quicken. Or, I could use Open Office Calc. Or I could build my own. I still haven't ruled out building my own, but for $25 and a money back guarantee, I decided to give Quicken 2009 a try.

The first thing I noticed was that Quicken still wants to force me to register, and claims that it's online offerings require it. I found this blog post which told me to hit CTRL+SHIFT when the registration prompt comes up, and that the online offerings are still available if I do this. I tried it on my 2009 edition and it worked. One 1997 mistake successfully averted.

So, now that I'm in, the interface looks smooth and the online banking transaction downloads seem very full-featured. The reporting looks easy, and the bill reminders will do what I want. This may just work for me, so I think I'm in business. Or not.

I have over a decade of financial transactions stored in the MS Money format. And Quicken says it can convert Money files, but not from the 2002 version... it's too old. No problem - Money has always been able to export to QIF - The Quicken Interchange Format. Except that Intuit (ironic name) appears to have decided that Quicken didn't need to support that import format anymore. They wanted to force banks to change over to a new proprietary format called QFX, which allows them to charge royalties for the privilege of using it. The long and short of it is that there are no free utilities out there to convert QIF to QFX, and I couldn't find a QFX specification published so I code it myself. I downloaded a QFX file from my bank to see if I could mimic it, but without a version of the file that includes split transaction examples, I can't fully mimic my QIF files.

So, off to Google - the all-knowing oracle of the internet. Except that it proved exceedingly difficult to find an answer. In fact, I've been at it off and on for two weeks. It appears to be nearly impossible to import a .QIF file into Quicken unless you are using a "cash account". Credit cards, checking, and savings accounts are arbitrarily not allowed. For no legitimate reason. At this point I'm just about ready for my refund. But, luckily I finally found this post, which led me to a workable solution.

Here are the step-by-step instructions for getting MS Money data into Quicken 2009:
  1. Create a "cash account" in Quicken. You won't need to keep this, but you must have one while importing your historic data.
  2. Create a single account for either your Checking, Savings, or credit card account. Whichever you're going to import first. For simplicity, name the account "Checking", "Savings", or "CCard" and tell Quicken that you'll manually add the transactions rather than connect to your bank. Even if you have multiple accounts of the same type, you'll only be importing one at at time.
  3. Export all the transactions for an account from MS Money to a QIF file. I recommend NOT exporting to "strict" QIF unless your Quicken import fails. Start with the loose QIF.
  4. Open the QIF file in a text editor (notepad). At the top of the file insert the following text, replacing "Checking" with "Savings", or "CCard" if you're importing one of the other account types. Be careful not to delete anything already in the file, and don't leave any empty lines.


  5. Import the .QIF file. You'll need to choose the "cash account" you created in step 1 as the destination. Of course, that's just a ruse to fool Quicken because if all goes as planned, the import should go to the account you named "Checking", "Savings", or "CCard". You'll likely get a dialog box that says your file has new categories in it - say "yes" to add the categories. If all goes well, you should get a success dialog. If you don't get a success dialog, you're on your own. This worked without a hitch for all my accounts. You might try the "strict" QIF in step 3.

  6. Double check your downloaded transactions and be sure that splits and amounts all worked out. Some things may not have imported exactly as you hoped, but this should get you really close. Once you've accepted all the transactions, now you can rename your account and enable the online transaction downloads. Repeat from step 2 for each account.
  7. Remove the "cash account" when you're done. It should never have received any of the transactions you imported, even though you chose it as the destination account.
At this point, I'm finally ready to start using Quicken. Of course, none of my saved reports or scheduled bills are there - I'll have to recreate those manually. This was a lot more effort than I had hoped. And, there's more bad news. Once you get the data into Quicken, you'll find that the one format they say they want you to use, QFX, is not a choice for exporting your data. And, even though you can export to a legacy .QIF file, it's a variant that MS Money won't be able to import without extensive modifications. So, for the layman, this is a one way migration... no changing your mind later. However, amazingly you can export to .QIF and Quicken will re-import it's own exported file. And exporting my data is a vital feature for me, as I'll need to get my data out once I've written my own financial management program. I'll post my C# version of a .QIF parser to the blog soon. (UPDATE: here it is)

Intuit has a lot of work to do to win over MS Money users to Quicken. Perhaps I'll post again after I've used it for real for awhile. For now, I'd rate Quicken 2009 a 6 out of 10 for user friendliness.

Monday, September 7, 2009

The President's educational address

There appears to be a little confusion in our school district about what's happening with Obama's educational address. One day, we're told that it isn't happening via an e-mail from Ian's school:

September 3, 2009

Good afternoon,

As many of you may already know, President Barack Obama is broadcasting an address to students online next Tuesday, September 8, at noon. The district has attempted to take a neutral position regarding the broadcasting of the address in school by offering students the option of viewing or not.

However, since yesterday we have received significant feedback from our school community regarding the broadcast in our schools. We also have just learned that the address will be available on C-Span for recording, as well as posted on the White House Web site ( for viewing at any time.

Parents will now be able to access and share the broadcast with their children at their own discretion. The district will not broadcast the President’s address in the schools on Tuesday {emphasis mine}. We hope this decision will address the concerns of all our parents and prevent the disruption of our students’ school day.

Then, the next day we're told via that same e-mail group that the address will be shown:

Message from the Superintendent

The {Name Removed} School District learned of President Barack Obama’s student address scheduled to air at noon on Tuesday, September 8, just two days ago from several concerned parents. Since then, we have been overwhelmed with phone calls and e-mails both in favor of and against airing the broadcast in our school buildings on Tuesday.

As a district, we take a non-partisan view towards this address. The President of the United States is our nation’s leader and a world power who will be addressing the youth of our country. The intent to speak to students is not unprecedented, as other Presidents have done the same. For educators, this address presents a teachable moment for our students. As a system, it is our responsibility to provide educational opportunities for our students.

As Superintendent of this district, I always make an effort to listen and be responsive to community concerns. This issue has resulted in a divided community outcry that cannot be ignored. In an attempt to bring some calm to our community and be responsive to the concerns on both sides of the issue, I have decided to permit our schools to air the broadcast on Tuesday {emphasis mine}. Students whose parents prefer they not participate will be provided an alternative activity during the 15-20 minute address.

I understand this decision will be met with mixed emotions; however, I believe it offers an educational opportunity that should be made available to students.

{Name Removed}

What a mess. And it didn't have to be this way. As president, what he has to say should certainly carry some weight and be worthy of attention. But the president made some rather serious errors in judgment with this address.

1.) The president should never have allowed the initial inclusion of the assignment-heard-'round-the-world in his auxiliary materials. Namely, that students were to draft letters to themselves discussing "what they can do to help the president." Here's a tip - if you don't want people getting creepy mental images of school-aged indoctrination videos, please don't blindly assume that everyone agrees with your policies or that anyone actually wants to help you achieve the goal of driving this country off a financial cliff, thanks. That material was since removed, but the damage was already done.

2.) If you want to talk about kids staying in school, that's a great message. But it seems to ring hollow as college tuition skyrockets and recent grads find themselves unable to get jobs. Staying in school isn't a message that's helping our kids achieve their goals. Many of them are now forced to limit their educational potential due to the faltering economy. Unemployment is at 9.7%, which is the highest in 26 years.

3.) When you subvert the usual channels of material distribution, and don't release a transcript of what you're going to say to our kids, then parents of elementary aged children will be rightfully concerned. Middle and High School students are certainly capable of filtering material and making up their own minds. However, elementary aged students are more impressionable, and less able to articulate what's happening to them at school when asked. Here's another tip - if you have a good message and want to present it to kids, put that material out there for parent's to review first! Otherwise, the apparently clandestine attempt to subvert parental involvement will undermine your cause.

As a parent, I don't have any problem with my children hearing differing viewpoints. In fact, I believe very strongly that censorship is a poor substitute for good parenting. One of the marks of a mature adult is the ability to recognize when you're wrong, and respond appropriately. Another mark is the ability to recognize when you're right, and boldly defend your point while showing respect towards those with whom you disagree. Those skills will never be learned without practice at genuinely understanding all sides of the story. I welcome exposure to age appropriate debate for my kids, but this situation is nothing short of a fiasco.

I'm reminded of the Cosby show episode where Vanessa brings home her new fiancé, Dabnis Brickey. See it here, and start playing at 2:15. It's all about the presentation. The president has taken a message that we can all agree on - "kids should work hard and stay in school" - a proverbial steak-dinner message, and he's presented it on a garbage can lid.