The Johnson Blog

Ramblings of a geek with a few hobbies…

Author: eajhnsn1

  • Impala

    Those around me know that my car has been slowing breaking, bit by bit over the last year+.  It seemed that around the time for every oil change, something else would break on the car and end up costing 200-400 bucks.  The Check Engine light came on again a few weeks ago and during that repair it was discovered that a few more (rather expensive) repairs would be in line for the near future.

    Given that we didn’t want to keep throwing more money at a car that was falling apart, and that we don’t have a vehicle we’d trust for long trips (Ana’s has been more reliable but had some transmission issues last year), we decided it was time to ditch the Intrigue.

    We now have a silver 2006 Impala LTZ with 12,000 miles.  It’s in the same class (in my opinion) as the intrigue: handling, size, comfort; but has a few very nice additions that have spoiled me already.  Things like remote start, heated seats, 6-disc in-dash cd changer that plays mp3 cds, etc.  The heated seats are amazing, I swear they heat up in under a minute.  That combined with the remote start has kept us from sitting in a cold car, a welcome change 🙂

  • Snow, snow, snow

    As reported by a fellow Central Illinoisan, it’s snowing like crazy today. Ana and I both decided to go to work this morning, even though there was a blizzard warning in effect. We decided to just come home around noon though, as reports kept coming in on how bad the roads were continuing to get.

    On the way home, the roads were crappy as expected and we got stuck pulling into our driveway which had accumulated quite a load of snow in the few hours we were at work. After a little pushing and shoveling the car was back in the garage safe and sound. In the mean time, a neighbor couldn’t get into his driveway with his cargo van, so I donned my warm, carhart astronomy gear and helped push his van too. Before it was all said and done I helped another neighbor with their Trailblazer, a 4×4 nonetheless.

    So I’ve been inside all afternoon playing around on the computer and watching the wind whip around the snow the keeps falling. I think the weathermen were finally correct with their predictions of snow until midnight. They’re saying we may end up with 10-15 inches by the time its all done. That should make for another fun morning.

    It has been a long long time since it has snowed like this, but it has also been a long time since we’ve had a real winter here in Springfield so I guess it’s well overdue.

  • Payment Processors

    This evening I started to work on the registration process for Chef. There are so many ways to accept payments that it makes my head spin.  A couple months ago I signed up for a RegNow account and they even waived the $20 setup fee for me.  I’ve only recently started setting things up with them, and tonight ran through a Test payment.

    (more…)

  • Visual Studio followup

    Just a little follow-up regarding my issue with Visual Studio 2005 and Vista – I was able to make the problem go away by installing a hotfix for KB912019.

  • Vista and Visual Studio 2005

    I knew I was taking a slight risk installing Vista on my laptop, where I do quite a bit of my coding.  I’m having a big problem with the Chef solution in Vista – it compiles and runs just fine but in the Visual Studio IDE I cannot open the WinForm Designer for anything but the simple forms.  Scenarios I have that cause the designer to blow up:

    • System.Windows.Forms.Form derived form that references controls that reside in another, referenced assembly
    • UserControl that derives from another custom UserControl that resides in the same assembly, and which can be designed.

    I wonder how long this is going to take to get fixed.  I don’t see this issue on their “known issues” list, maybe I should dig around and find out how to submit it.

  • Windows Vista Business

    This is my first post under Vista!

    I  obtained a couple free copies by watching some online training videos, and they arrived last week in the mail. I was going to wait until HP was set to release drivers (so they said anyway) for my laptop on Wednesday but decided to give it a shot without them.

    The entire installation process for a clean install (wiped partition) took at most 45 minutes, and I have to say that was the smoothest Windows install I’ve ever done.  Everything has just worked, from the wireless network to the video.  In fact, it downloaded and installed the new nvidia driver without me telling it to on the first boot.

    I’m running Aero, and it seems pretty darn slick.  Way to go Microsoft, and thanks for my free copy.

  • LightScribe DVD Burner

    Ever heard of LightScribe? It’s a technology created by HP for “direct to disc” labeling, which means you can make labels on your CDs or DVDs. No cheesy paper labels, the laser is used to burn it in. Very cool idea.
    The laptop I purchased said it came with this capability. It wasn’t a selling point, but I thought it interesting and that I’d give it a shot some day. That day came last week when thought it’d be neat to make CDs of the offical Chef releases. Kinda dumb, I know. But a way to try out something new.

    I spent an hour or so trying to get the software on the laptop to recognize the drive and ended up on the HP website chatting with a support tech. They informed me that the drive in my laptop was not, in fact, LightScribe capable. I was a little mad because the box and label said it had it, otherwise I would have never known about the technology.

    That’s when Jay pointed me to a $30 drive that I ordered and was delivered tonight. I just got done burning my first label/disc (using the easy to use SureThing CD Labeler SE software) and I have to say that I’m very, very impressed and excited about this capability.

    Here’s my first disc (click to enlarge):

    First Lightscribe Disc

    You’ll notice the background is faded and the title logo isn’t very dark – that’s all because of the images I used.  The title is the red one located on http://www.ejichef.com and the background is a semi-transparent/faded image used on the Chef splash screen.  Pretty damn cool if you ask me.

  • Chef Beta 2 Released

    The upload has just completed, so download it now!

    There are numerous bug fixes in this release, alongside the major new feature of Recipe Sharing.  Users can now create Chef Recipe Packages and give them to other Chef owners to place into their collection.  Please feel free to check it out and let me know what you think.

  • Strong Naming

    As a continuation of my last post, I thought some of you .net developers may be interested in hearing about some of the issues I ran into when strong naming.

    Admittedly, this is my first real attempt at using strong naming as it’s intended and therefore I just wasn’t aware of a few things when I was writing the code for Chef. Two days ago I created myself a strong name key (sn -k keyfile.snk) to sign my assemblies with. Due to the obfuscation step I need to do between compile and packaging, I need to delay sign the assemblies.

    In an exercise in curiosity I decided to sign the assemblies with the public key half of my keypair and keep the private key “secret”. Which really means just not kept inline with the sourcecode, but rather living in a key container in the machine store on the build box. This process was mostly problem-free, I used the sn.exe utility to: create a keypair; import the keypair into a key container; extract a public key from the key container; tell .NET to allow me to run partially signed assemblies with that public key token (sn -Vr *,) for debugging purposes. It all went well until I went into visual studio and told it to use the public key for signing – it kept telling me that it was password protected and prompting me for the password. I never put a password on it.

    So to get around that, I did the first step (creating the keypair) from Visual Studio and gave it a password, then it all worked just fine.

    One feature in Chef is the ability to create bookmarks. In my ignorance, I was simply using the BinaryFormatter in .NET and serializing to disk an array of these things for loading later. Little did I realize that all of the version information for the objects is written out – and if the objects live in a strong named assembly and the assembly version changes, it cannot deserialize! There’s supposed to be a way you can get around this, by setting AssemblyFormat on the formatter to Simple but it continued to write the version information. I also tried the route of using a custom Binder during deserialization and that didn’t work either.

    As a result, last night I rewrote that code to serialize/deserialize the information myself with XmlWriter and XPathDocument rather than rely on .NET. Version issues gone. That’ll definitely be something I’m not likely to forget anytime soon. I need to rewrite one other small area this weekend for a similar problem, then I can move on. All that’s standing between me and Beta 2 is some thorough testing, a website update, and a file upload. Should all happen this weekend.

  • Automated Builds

    Several hours today were spent advancing my automated build process for Chef. I’ve had CruiseControl.NET building the software for months now but I’ve had a gaping hole in the processes that has been staring at me since I started it.
    What is this hole you ask? Version numbering.

    Why is versioning so hard in this day and age? Seriously. With .NET there are all these really nice and easy attributes that all you have to do is type in the version string you want your assembly/binaries to have. That works really well, until you want those numbers to be dynamic – then it requires modifying a sourcecode file with a new hard coded string. But what about 1.0.*? you ask, referring to the ability to have the compiler generate parts of it for you. Well, what real good is it to have version numbers that you don’t control? If they get generated by the compiler it just makes everything difficult – like translating between a version label from CruiseControl to the state of source control at the time of the build. Maybe I’m missing something here, but I don’t think I am.

    Another versioning issue is setup projects. The setup projects created in Visual Studio have a version number, product code, and upgrade code. Counter to intuition, the upgrade code is the same across versions for a given product and it’s the product code that changes between versions. Sooo, if you bump the version number you also need to create a new Product Code guid. Again, there’s no way (that I know of) to do this via command-line. Microsoft thinks you should open the setup project and bump the version number manually. They even go as far as prompting you to create the new Product Code guid when you do this. Microsoft, the creator of the great tool that is Visual Studio, make it very hard to do the Right Thing and have automated builds. Tisk, tisk.
    And finally, the version string has implications on product keys – both generation and verification. For instance, if Suzie buys Chef 1.2, I need to have a way to have that license key work for 1.2.5, 1.4, and 1.9; but not 2.1. And I need to be able to forget about the details rather than think about it every single time I create a release. (Chef Beta 2 is days away, by the way).

    My solution to these problems required a little planning, a little coding, and a lot of time waiting for test builds to be created. My process is as follows.

    • I go to the CruiseControl.NET Dashboard website and click Force to initiate the build.
    • The last successful build label is incremented (from 0.9.2.2 to 0.9.2.3, for instance).
    • The latest sourcecode is retrieved from the Perforce depot
    • The code I wrote tonight gets executed on the sourcecode tree, passing in the newly incremented build number
    • A new product code guid is generated
    • Every AssemblyInfo.cs file is edited and all AssemblyVersion attributes are changed to use the new version number
    • The specified .vdproj files (Visual Studio setup projects) are edited to modify the ProductVersion with a trimmed version of the current build version/label. The new ProductCode is also inserted
    • Visual Studio is called upon to perform the compile.
    • CruiseControl puts the generated installation packages out on the network
    • A sourcecontrol Label is created in the Perforce depot, denoting the state of the sourcecode at the time of the build.

    And that’s it. With a single click I have installation packages created with no further involvement. The files included in the package all have a version number that I can trace back to a CruiseControl label (to view build logs and in the future unit test results) and then back to a Perforce label with the same name to view the sourcecode files at were a part of the build. I’ll then also be able to compare those file versions with the recorded version numbers of bug fixes in FogBugz – something that will surely save time once Chef is in the wild.

    Microsoft, please please please make this better in the future.