Wednesday, September 26, 2007

I just got a new Dell Latitude D830 laptop running Vista Ultimate and I'm going about the lengthy process of installing all my software. When I got to PowerShell, I grabbed a copy of the installation file from my 250GB external drive that I had previously downloaded for my previous laptop, a Dell Latitude D610, running Windows XP SP2.

When I ran the install program, I was repeated met with the following error message:

Not enough storage is available to process this command.

A lot of other people had the same problem, but no one had posted a solution. Then, I suspect I figured out the answer the same way others had. I was executing WindowsXP-KB926139-x86-ENU.exe instead of Windows6.0-KB928439-x86.msu, I had overlooked the fact that Windows XP and Vista had different installation programs for PowerShell.

Drat.

Wednesday, September 26, 2007 2:37:14 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Monday, September 24, 2007

Race For The Cure I popped into work early on Sunday morning for some quick volunteer work whilst le Wife was sleeping. Sometimes I like to use my powers for good. Today I was building a small feature for the Saturday Academy site.

Little did I know that Sunday morning was also the schedule date of the Race for the Cure walk/run here in Portland. I was prepared for the construction that's going on but I was caught in a serious maze trying to get to my parking garage. Several streets were blocked off for the event. After going around the block and assessing my options, I figured that I could "accidentally" go down a one-way street at this hour and get to my parking garage.

So, I get to the street and turn to go up it. About half way through, a construction dude puts a cone in the street in preparation for a big dump truck headed towards us, then looks up a me. He walks over and casually informs me that this is a one-way street. I play all wide-eyed and apologize while explaining that I'm just trying to get to the parking garage entrance that is now just 30 yards away. He stares at the garage entrance, then at my car, then back to the garage entrance. He graciously mentions that I might be able to make it if I continue on and turn right at the intersection, then go around the block and come back down properly.

I thank the nice man and continue on slowly in the early morning light. I get to the last intersection and see the garage door entrance, a mere 10 yards from my car. Instead of turning, I bolt for the entrance. I see the police car at the end of the street - this is going to be close. I make it to the entrance and zoom up the ramp. I can tell people are running after me in full chase. I get my garage ticket, quickly park and exit the building; everything seems safe. I don't see any faces popping around corners or footsteps racing towards me.

I round the block and see the next barricade that certainly would have nixed the whole deal had I heeded the instructions of the construction guy. I'm quite sure that my route was the only way to the parking garage at this specific hour and I was quite satisfied with the success of my plan. About 30 minutes later, I see the event in full swing. There's non-stop cheering for about 90 minutes with a stream of runners and walkers parading down the street. It was a nice day for it, I hope they did well. 

Monday, September 24, 2007 12:27:39 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Friday, August 24, 2007

When I travel, I can expect ignorant/discourteous folk, long lines and some mild nausea. What I can't expect to find in airports is a good ol' power outlet. I've thought about adding a section to my site that just plots locations of power outlets in the various airports I visit — a little like geocaching I suppose. The worst is finding a perfect spot to setup, unpacking the gear and looking down at the little green light on the laptop power brick that isn't lit up. Disconnected power outlets suck.

The fine folks at Coffee People in PDX have figured it out. They've integrated power outlets into the modern bar that surrounds their business. I ordered a Depth Charge (coffee and double espresso shot) and a danish, plugged in to grab a few more bits online before I travel back in time to a land that has no cell phone signals, internet or cable TV. I'm back to the future on Tuesday!

Friday, August 24, 2007 7:53:53 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Friday, August 17, 2007

About a year ago, I attended an MSDN event in my area and won the boobie prize: 12 months of free hosting from an vendor at the event. I had been hosting my site on my company's web servers, so that seemed like a good opportunity to leave the nest and test my skills in the wild. Plus, the price was right.

Man, did that suck.

On Wednesday, I signed up for 12 months of hosting with DiscountASP.Net. They advertised on www.asp.net, and had a lot of good word-of-mouth referrals that eached my ears.

In the matter of about an hour, I did the following:

  • Completed an online transaction with DiscountASP.net
  • Accessed my new site through the Control Panel provided by DiscountASP.Net
  • Downloaded the latest dasBlog bits for ASP.Net 2.0, medium trust
  • Uploaded the dasBlog bits to my new site
  • Switched the DNS servers to my new ISP
  • Moved the content folder from my old host to DiscountASP.Net
  • Minor configuration to secure and customize my blog

I'll have you know that I have not yet contacted DiscountASP.Net by phone or e-mail, nor have I had to read their online help documents. The entire process was smooth as silk. I was shocked. My previous personal and professional experiences have always left me in need of some type of resolution.

This is how it should be — DiscountASP.Net has done a great job and I'm grateful.

I was also relieved by the ease of my dasBlog upgrade. I was about a year off the head in their source code repository. The new version has several sweet skins out-of-the-box and they're easy to customize.

I highly recommend dasBlog for any type of blogging solution — it's a rock solid open source system under active development. Now that I'm 99% out-from-under of my enormous eight month project, I'd love to saunter over to that open source project and try my hand at helping the dasBlog dev team. The weekend is just starting, Le Wife is out of town, and I'm dinking around on a new laptop with Vista. Can't ask for a better set up than that!

Friday, August 17, 2007 7:13:06 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [1]  | 
 Thursday, August 16, 2007

.. and you can pick your nose, but you can't pick your in-laws. By sheer luck and $299.95 for a charm school summer camp a few years back, I have some awesome in-laws.

As I understand it, Jay worked on this web commercial. Anyone wanna take a break and go get some Herbal Mist with me?

fun
Thursday, August 16, 2007 8:16:17 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Friday, August 10, 2007

I bought a carafe for the office a little bit ago. At first, I kept it on my desk. Arguably, I drink more coffee than anyone here. I offered warm ups, but I didn't get a lot of takers.

After a few days, I got a couple of questions about the strange device too. Some thought it had a little pick-me-up, like Baileys. In an effort to spread some knowledge, I used a little bit of my new found free time and found a way to explain it.

fun
Friday, August 10, 2007 9:02:54 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Monday, August 06, 2007

On Friday, our CFA (Chief Front-end Architect), Ryan Parr, received his brand new chair. Unfortunately, he wasn't here to sign for it. Thus, the stray mischievous folk who were in the office on Friday of last week took the following actions.

  1. Remove new chair from box
  2. Disassemble old chair
  3. Placed stained and hairy old chair in the plastic from new chair
  4. Shove old chair in box
  5. Re-tape box shut

The box waited all weekend for his arrival. This morning, I shot this video on my Treo 700w. (Quicktime version is over here.)

fun
Monday, August 06, 2007 9:02:15 AM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  | 
 Tuesday, July 24, 2007

I've been battling some crazy ASP.NET 1.1 code the past couple of days. First, I was calling some web services with entirely hand written SOAP protocol management. That's always fun. While tedious and too low of a level to be mucking around, it was the fastest means to an end with a crotchity ol' Apache/AXIS web service. Even though I'm fresh off the WCF training regimen; that new stuff wouldn't have helped me here. Perhaps just having the new stuff in my head pushed me in the right direction to tackle this challenge - a man can dream, can't he?

Then, just to rub it in a little, the HTTPWebRequest object decided to give me a swift kick in the shorts. You see, in .Net 1.1, there's a tiny little unknown (unanswered) bug.

I have two instance methods and each make a single call over HTTP with their own HTTPWebRequest object, there's no sharing here. Every time, the second request would hang and throw a "System.Net.WebException : The operation has timed-out." error. The same code runs great in .Net 2.0 so I figure its a framework bug.

I call one method and return a string which is used as an input argument for the second method. Both calls go to the same top level domain, but call to different end points on the domain.

After much thought, trial and error, as well as reading about the same problem other folks were having, I finally figured out the workaround.

It turns out that calling the Abort() method on the HTTPRequest instance after completing the request is sufficient to break up the clog that is preventing subsequent calls. The following code block shows the working helper method. If I comment out the calll to Abort(), it no worky.

private string ExecuteHttpWebRequest(
   string url, RequestMethod method, string message)
{
   HttpWebRequest request = 
      (HttpWebRequest)HttpWebRequest.Create(url);

   request.Timeout = 30000;
   request.KeepAlive = false;
   request.Headers.Add("Cache-Control", "no-cache");
   request.Headers.Add("Pragma", "no-cache");

   switch( method )
   {
      case RequestMethod.Get :

         request.Method = "GET";

         break;

      case RequestMethod.Post :
         
         request.ContentType 
            = "application/x-www-form-urlencoded";
         request.Method = "POST";
         request.ContentLength = message.Length;

         StreamWriter sw = 
            new StreamWriter(request.GetRequestStream());
         sw.Write(message);
         sw.Flush();

         break;
   }

   string html = null;

   using( HttpWebResponse response 
      = (HttpWebResponse)request.GetResponse() )
   {
      Stream rs = response.GetResponseStream();
      StreamReader sr = new StreamReader(rs);
      html = sr.ReadToEnd();
      response.Close();

      // subsequent calls fail without this abort in .Net v1.1
      request.Abort();
   }

   return html;
}	
Tuesday, July 24, 2007 9:27:37 PM (Pacific Standard Time, UTC-08:00)  #    Disclaimer  |  Comments [0]  |