Tuesday, August 05, 2008

I finally gave in (for better or for worse) and signed up on facebook.com this past weekend.  I've always had an aversion to such social networking sites for one reason or another.  In fact, facebook.com and myspace.com have long been blocked on my firewall at home until just recently.  I may go back to block myspace.com, however; pretty much everything I've seen on it has been annoying, sleasy, trashy, and not worth my time - basically stuff I didn't want on my computer in the first place.

Now I don't know all the specifics about facebook.com, but I've had a great time on it in the past few days reestablishing connections with friends from my youth in New Mexico.  I've made contact with some people that I've not been able to find until now, which is very exciting.

I realize that I'm a late bloomer of a sort with regards to social networking, but such is the way of things I suppose.  Among other things, I've simply not had time for it.  I still don't have time for it, but I may make some for it, we'll see how it goes.

If you on facebook.com and you know me, drop me a line!

Tuesday, August 05, 2008 12:18:27 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [3]  |  Trackback
 Monday, June 23, 2008

A few days ago I realized that my blog wasn't working properly.  This came with more than a bit of frustration because I had upgraded ito to DasBlog on May 25th (almost 1 month ago exactly!).  What clued me off was the fact that I wasn't getting any comments to prior posts.  While the vast majority of comments came from my download control and my rating control (neither of which has yet been ported over), I would get the occasional comment through the blog directly.  But since the upgrade nothing.  Well, that's not true, I got two comments on my transition post but I didn't get either one because I didn't set up my mail setting correctly.  That has since been fixed.

As it turns out, the code that I originally used to port the blog site over was flawed, but I didn't realize it until it was too late.  Pretty much all of my google links where my blog was the top page or in the top few have all but disappeared :(.  I have, however, updated the code (which I present below) in the event there is any other poor soul out there needing to migrate from .Text to DasBlog.

Comments should now work on the blog.

I hope this works better for everyone moving forward:

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using newtelligence.DasBlog.Runtime;

namespace ConvDotTextToDasBlog {
   internal class Program {
      private class EntryData {
         public EntryData(string id, string title) {
            Id = id;
            Title = title;
         }

         public readonly string Id, Title;
      }

      private static readonly Dictionary<int, EntryData> _postDict = new Dictionary<int, EntryData>();

 
     private static void Main() {
         string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "output");
         Directory.CreateDirectory(path);

         IBlogDataService dataService = BlogDataServiceFactory.GetService(path, null);
         string connStr = @"Initial Catalog=Blog; Data Source=(local)\SQLEXPRESS; Integrated Security=True";

         using ( SqlConnection conn = new SqlConnection(connStr) ) {
            conn.Open();
            using ( SqlCommand cmPosts = new SqlCommand("SELECT COUNT(ID) FROM blog_Content WHERE PostType=1; SELECT * FROM blog_Content WHERE PostType=1", conn) )
            using ( SqlDataReader drPosts = cmPosts.ExecuteReader() ) {
               drPosts.Read();
               int totalCount = drPosts.GetInt32(0);
               drPosts.NextResult();

               int currIndex = 0;
               while ( drPosts.Read() ) {
                  int postId = drPosts.GetInt32(0);
                  string postTitle = drPosts.IsDBNull(1) ? string.Empty : drPosts.GetString(1);
                  DateTime dtCreated = drPosts.GetDateTime(2);
                  DateTime dtModified = drPosts.GetDateTime(10);
                  string postText = drPosts.GetString(12);
                  string postAuthor = drPosts.GetString(5);

                  // catalog the id, assigning it a guid
                  string newPostId = Guid.NewGuid().ToString().ToLowerInvariant();
                  string newPostTitle = ( postTitle.Length > 0 ? postTitle : postText.Substring(0, Math.Min(20, postText.Length)) );
                  _postDict.Add(postId, new EntryData(newPostId, newPostTitle));

                  Console.WriteLine("Processing Post #{0} ({1} of {2})", postId, ++currIndex, totalCount);
                  Entry entry = new Entry();
                  entry.CreatedUtc = dtCreated;
                  entry.ModifiedUtc = dtModified;
                  entry.Title = newPostTitle;
                  entry.Content = postText;
                  entry.EntryId = newPostId;
                  entry.Categories = getPostCategories(postId, connStr);
                  entry.Author = postAuthor;
                  dataService.SaveEntry(entry);
               }
            }

            using ( SqlCommand cmComments = new SqlCommand("SELECT COUNT(ID) FROM blog_Content WHERE PostType=3; SELECT * FROM blog_Content WHERE PostType=3", conn) )
            using ( SqlDataReader drComments = cmComments.ExecuteReader() ) {
               drComments.Read();
               int totalCount = drComments.GetInt32(0);
               drComments.NextResult();

               int currIndex = 0;
               while ( drComments.Read() ) {
                  int commentId = drComments.GetInt32(0);
                  int refPostId = drComments.GetInt32(13);
                  DateTime dtCreated = drComments.GetDateTime(2);
                  string commentAuthorName = drComments.IsDBNull(5) ? string.Empty : drComments.GetString(5);
                  string commentAuthorIp = drComments.IsDBNull(7) ? string.Empty : drComments.GetString(7);
                  string commentAuthorUrl = drComments.IsDBNull(11) ? string.Empty : drComments.GetString(11);
                  string commentText = drComments.GetString(12);

                  EntryData refEntry;
                  if ( !_postDict.TryGetValue(refPostId, out refEntry) )
                     Console.WriteLine("Error processing comment #{0} ({1} of {2}); post {3} was not resolved.", commentId, ++currIndex, totalCount, refPostId);
                  else {
                     Console.WriteLine("Processing Comment #{0} ({1} of {2})", commentId, ++currIndex, totalCount);
                     Comment comment = new Comment();
                     comment.EntryId = Guid.NewGuid().ToString().ToLowerInvariant();
                     comment.CreatedUtc = dtCreated;
                     comment.ModifiedUtc = dtCreated;
                     comment.TargetEntryId = refEntry.Id;
                     comment.TargetTitle = refEntry.Title;
                     comment.Author = commentAuthorName;
                     comment.AuthorHomepage = commentAuthorUrl;
                     comment.AuthorIPAddress = commentAuthorIp;
                     comment.Content = commentText;
                     dataService.AddComment(comment);
                  }
               }
            }
         }
      }

      private static string getPostCategories(int postId, string connStr) {
         const string sql = "SELECT cat.Title FROM blog_Links AS links INNER JOIN blog_LinkCategories AS cat ON links.CategoryID = cat.CategoryID WHERE links.PostID = @PostID";

         List<string> categories = new List<string>();
         using ( SqlConnection cn = new SqlConnection(connStr) )
         using ( SqlCommand cm = new SqlCommand(sql, cn) ) {
            cn.Open();
            cm.Parameters.Add("@PostID", SqlDbType.Int).Value = postId;
            using ( SqlDataReader dr = cm.ExecuteReader(CommandBehavior.CloseConnection) ) {
               while ( dr.Read() ) {
                  string category = dr.GetString(0);
                  categories.Add(category);
               }
            }
         }
         return string.Join(";", categories.ToArray());
      }
   }
}

.NET | DasBlog | Journal
Monday, June 23, 2008 9:46:47 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Sunday, May 25, 2008

This marks a significant moment in my blog's lifetime.  Today I (finally) took the time to migrate the blog from .Text .95 to DasBlog 2.0.

I have long desired to move off of .Text for a couple of reasons: 1) it has long not been updated (yes, I know about the SubText branch) and 2) it runs on the .NET Framework 1.1.  In and of itself, .NET 1.1 is not bad.  In fact, I think it was a pretty rockin' platform 7 years ago.

I have recently acquired Back in February I acquired a replacement server machine for two workstations that I was using as my web servers.  This machine has, except for a few moments of glory, sat still, quiet, and off in my office just waiting to run.  Well, today, I finally had a moment to dedicate to get the DasBlog engine running and all of my websites transferred over to the new machine.  This new box is running Windows Server 2008 and IIS 7.0 (another reason I wanted to move my blog over to the newer .NET platform).  Thus far, DasBlog is running great and I'm very much enjoying it.

Despite conducting several searches I couldn't find any real help or canned utilities for taking .Text content and migrating it.  Pretty much everything led to a dead-end (404) or a SourceForge project that had no downloads.  I did, however, stumble upon some code written by Scott Hanselman that illustrated in a few simple steps the process of creating DasText entries and associated comments.  I've taken this code and tailored it for .Text.  If you're migrating from a .Text with multiple blogs you'll have to customize it a bit, but it should be pretty simple.

I've updated the code to extract blog posts, associated categories, and comments.  NOTE: This code was not written to be elegant; it's really just a brute-forced-extraction of the data.  That's all I was interested in.  I only ever needed to run it once and then I was done.

NOTE: THIS CODE IS OBSOLETE AND HAS BEEN REPLACED AND UPDATED IN THIS POST.

using System;
using
System.Collections.Generic;
using
System.Data;
using
System.Data.SqlClient;
using
newtelligence.DasBlog.Runtime;

namespace
ConvDotTextToDasBlog {
   class Program {
      static void Main(string[] args) {
         IBlogDataService dataService = BlogDataServiceFactory.GetService(AppDomain.CurrentDomain.BaseDirectory, null);
         string connStr = @"Initial Catalog=Blog; Data Source=(local); Integrated Security=True";
         using ( SqlConnection conn = new SqlConnection(connStr) ) {
            conn.Open();
            using ( SqlCommand cmPosts = new SqlCommand("SELECT COUNT(ID) FROM blog_Content WHERE PostType=1; SELECT * FROM blog_Content WHERE PostType=1"
, conn) ) {
               using ( SqlDataReader drPosts = cmPosts.ExecuteReader() ) {
                  drPosts.Read();
                  int totalCount = drPosts.GetInt32(0);
                  drPosts.NextResult();
                  int currIndex = 0;
                  while ( drPosts.Read() ) {
                     int postId = drPosts.GetInt32(0);
                     string postTitle = drPosts.IsDBNull(1) ? string.Empty : drPosts.GetString(1);
                     DateTime dtCreated = drPosts.GetDateTime(2);
                     DateTime dtModified = drPosts.GetDateTime(10);
                     string postText = drPosts.GetString(12);
                     string postAuthor = drPosts.GetString(5);
                     Console.WriteLine("Processing Post #{0} ({1} of {2})"
, postId, ++currIndex, totalCount);
                     Entry entry = new Entry();
                     entry.CreatedLocalTime = dtCreated;
                     entry.ModifiedLocalTime = dtModified;
                     entry.Title = ( postTitle.Length > 0 ? postTitle : postText.Substring(0, Math.Min(20, postText.Length)) );
                     entry.Content = postText;
                     entry.EntryId = postId.ToString();
                     entry.Categories = getPostCategories(postId, connStr);
                     entry.Author = postAuthor;
                     dataService.SaveEntry(entry);
                  }
               }
            }

            using ( SqlCommand cmComments = new SqlCommand("SELECT COUNT(ID) FROM blog_Content WHERE PostType=3; SELECT * FROM blog_Content WHERE PostType=3"
, conn) ) {
               using ( SqlDataReader drComments = cmComments.ExecuteReader() ) {
                  drComments.Read();
                  int totalCount = drComments.GetInt32(0);
                  drComments.NextResult();
                  int currIndex = 0;
                  while ( drComments.Read() ) {
                     int commentId = drComments.GetInt32(0);
                     int refPostId = drComments.GetInt32(13);
                     DateTime dtCreated = drComments.GetDateTime(2);
                     string commentAuthorName = drComments.IsDBNull(5) ? string.Empty : drComments.GetString(5);
                     string commentAuthorIp = drComments.IsDBNull(7) ? string.Empty : drComments.GetString(7);
                     string commentAuthorUrl = drComments.IsDBNull(11) ? string.Empty : drComments.GetString(11);
                     string commentText = drComments.GetString(12);
                     Console.WriteLine("Processing Comment #{0} ({1} of {2})"
, commentId, ++currIndex, totalCount);
                     Comment comment = new Comment();
                     comment.CreatedLocalTime = dtCreated;
                     comment.ModifiedLocalTime = dtCreated;
                     comment.TargetEntryId = refPostId.ToString();
                     comment.Author = commentAuthorName;
                     comment.AuthorHomepage = commentAuthorUrl;
                     comment.AuthorIPAddress = commentAuthorIp;
                     comment.Content = commentText;
                     dataService.AddComment(comment);
                  }
               }
            }
         }
      }

      private static string getPostCategories(int postId, string connStr) {
         string sql = "SELECT cat.Title FROM blog_Links AS links INNER JOIN blog_LinkCategories AS cat ON links.CategoryID = cat.CategoryID WHERE links.PostID = @PostID"
;
         List<string> categories = new List<string>();
         using ( SqlConnection cn = new SqlConnection(connStr) )
         using ( SqlCommand cm = new SqlCommand(sql, cn) ) {
            cn.Open();
            cm.Parameters.Add("@PostID"
, SqlDbType.Int).Value = postId;
            using ( SqlDataReader dr = cm.ExecuteReader(CommandBehavior.CloseConnection) ) {
               while ( dr.Read() )
                  categories.Add(dr.GetString(0));
            }
         }
         return string.Join(";"
, categories.ToArray());
      }
   }
}

For the most part the site is up and running, but I'd like to migrate my rating system and my download manager to this new platform.  This hasn't been straightforward as .Text is SQL Server-based and DasBlog is file-based, so I'll have to come up with something...but I look forward to exploring the DasBlog object model to see if I can come up with something that works.

.NET | DasBlog | Journal
Sunday, May 25, 2008 7:43:52 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [2]  |  Trackback
 Tuesday, March 11, 2008
Space Shuttle Endeavour

When I came to Orlando, Florida for the Microsoft Convergence 2008 Conference I didn't expect to get such a treat.  I found out yesterday, shortly after my arrival that we were going on an outing to watch the Space Shuttle launch.  Boy was I excited!  I had no idea it was going to launch in the first place, but was even more excited to be able to witness the launch in person, and at night.

I vividly recall when the Space Shuttle Columbia landed just 30 minutes from my house (a night landing) at White Sands in NM but I wasn't able to attend that event.  In fact, I have wanted to see a shuttle launch since the Columbia first went into space; it set many of my dreams into motion, few of which will ever come true - though seeing a launch in-person has just now! :-)

The event was amazing.  We were situated across the water from the launch pad (geographically, I'm not sure how far it actually was).  Right at 2:28 AM we saw the first billows of smoke rise from the launch pad, then the bright flare of the flames from the rockets.  The rocket, the size of a lit match's flame at arm's length, ascended rapidly but very silently into the night sky.  Perhaps most astounding and brilliant was the entire sky...not just the horizon where the launch took place, but the ENTIRE SKY turned a bright orange during the launch.  It appeared as though a small sun had risen.  The rocket was then engulfed in the low cloud coverage.

The rocket disappeared.  After a small delay of about 10 seconds or so we began to hear and actually feel the trembling and roar of the rocket boosters.  This got increasingly louder and more rumbling before waning.

Poetry in motion.

Tuesday, March 11, 2008 2:06:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [1]  |  Trackback
 Monday, August 06, 2007

I just recently returned from the Netherlands on what turned out to be an amazing trip.  I wish I had had more time to prepare for the trip; as it turns out, I found out that I was going the day before I departed but I was able to set aside one day last week as a personal day and do some individual exploration.

The first part of the week was spent adjusting to the 8 hour time difference while working with a customer in the town of Eindhoven.  Eindhoven is about 1.3 hrs south of Amsterdam by train.  The entire customer experience was very positive and went very smoothly.

On Wednesday, August 1st, (following the customer on-site) I headed to Amsterdam and stayed at the very nice Mercure hotel on Noordstraat in Amsterdam.  I arrived late in the evening and wasn't able to do much on the first night, but I arose early on Thursday and headed out into the city to explore and see the sites.  One aspect of Holland that I found most endearing and enchanting was the use of bicycles.  They're everywhere.  Everyone ride bicycles; from the young to the old.  It's wonderful.

Following a nice pastry at a local bakery I set off to see Rembrandt's home (see inset).  What an amazing place!  Rembrandt's house has been converted into a museum and restored to what it was like back in the 1600's when he resided there.  Many rooms in the house were converted into galleries exhibiting his wonderful paintings and sketches.  Additionally, on the second floor, a gentleman was demonstrating Rembrandt's etching and mass-printing techniques that were quite remarkable.  The top floor had a few gallery rooms showcasing many of his prints and actual etchings.

Rembrandt's house was, I feel, the highlight of my trip.  I spent a couple hours there taking it all in and enjoying myself.

I then did a bit more exploration through the town, walking through the Dam Square and participating in a magic show on the street in which I chained up the performer (along with the help of Andy from Newcastle, England - also a recruit off of the street who also straight-jacketed him).  Of course (and as part of his show) he escaped from the binds, but it was fun nonetheless.

I am so glad that I had the opportunity to walk the streets of Amsterdam, enjoy the sites, some of the 18 miles of canals in the city, cross some of the 800 bridges, and visit another country.  It was well worth the visit and the time there.

Monday, August 06, 2007 5:39:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [2]  |  Trackback
 Wednesday, March 07, 2007

Well, this has been a long time coming, but among the myriad of other projects and goings-on, I couldn't get it up earlier.  As many of you know I've been doing a lot of projects around the house.  In addition to finishing the basement we took it upon ourselves to have the kitchen and upstairs completely redone.  We've never liked the cabinets and flooring that was installed when we originally built the house almost 9 years ago.  So the kitchen, most of all, got an overhaul.

Below I've provided a visual progression from what it was to what it is now.  Note, there is still some work to be done (e.g. the water's not yet connected to the sink/dishwasher, I still need to mount the under-the-cabinet lighting, the baseboards aren't yet up...but it's a work in progress for sure.

I still don't have pictures of the basement up yet.  Those might be forthcoming, provided I can get it organized.  Too many things left undone in all the shuffle.

Wednesday, March 07, 2007 4:51:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, March 06, 2007

You haven't experienced New York City properly until you've spent your first weekend there and:

  1. Gone shopping out the whazoo
  2. Seen Les Miserables on Broadway (with Lea Salonga :))
  3. Seen Chicago on Broadway (with Bebe Neuwirth :))
  4. Been to the Empire State Building
  5. Eaten a NYC pie (pizza for the uninformed)
  6. Been to Times Square, Rockefeller Center, etc
  7. Ridden the subway
  8. Been to The World Trade Center site (Ground Zero)
  9. Left your wallet in a taxicab on the day you're supposed to fly out, only to recover it in the nick of time
  10. And much more.

We had a great weekend (March 3rd-5th, 2007) despite the debacle of #9.  It's been a surprise trip I've been planning for our 10th anniversary for some time.  In fact, the trip itself was a well guarded secret for a while, until that fact was divulged by an over-eager daughter...though thankfully she got her North-West confused with North-East. :) ...a fact that I exploited fully.

We'd never been to NYC before and wanted to soak it up as much as we could.  We'd long wanted to see Les Miserables on Broadway.  It's far and away my favorite production.  Also, and this was a much unexpected treat, but upon arriving to the theatre we discovered that Lea Salonga was playing the part of Fantine.  For years I have followed Lea's work and absolutely LOVE her voice.  She played Kim (in Miss Saigon - another favorite), the singing voice of Jasmine (in Disney's Alladin) and Mulan.  But her standout performance, IMO, was when she, reprising her role as Eponine in Les Miserables, nailed the part in the 10th Anniversary on-stage production.  So as you can imagine, I was in heaven to be on Broadway to see her perform.

We also made an impromptu decision to see Chicago on Broadway as well.  We've enjoyed the soundtrack for years but had never the opportunity to see it on stage.  Playing the role of Roxy Hart was the amazing Bebe Neuwirth (Lilith from Cheers and Frasier).  Bebe played the role of Velma Kelly in the recording we own, so that was a particularly special delight.

We stayed at the Waldorf=Astoria towers, ate some great food, and had a great time.  We were on our way to see the Statue of Liberty when I realized that I had left my wallet in a taxicab 20 minutes earlier.  Fortunately, some good people found it and returned it to me a few hours later.  The cash (about $350-$400) was gone, but that's what I expected (how sad is that?!)...I hope it went to someone who needed it more than I.  I was a bit panicked because we were scheduled to fly out of town later that evening and without an ID I wasn't going to be able to get on the plan.  I'm glad it didn't come to that.  Well, our plans to see the Statue of Liberty were cut short, but all in all we had a wonderful time (we did see it at a distance).

I may call this experience "the full experience", but there is oh, so much more to do - already anxiously anticipating the next trip! :)

Tuesday, March 06, 2007 11:09:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Thursday, February 22, 2007

A special memorial fund has been set up for Jamie Walker (Jason Walker's wife) in his memory.  Jason unexpectedly passed away two days ago (Feb 20th, 2007) and leaves behind a beautiful family, a loving wife, and a great many friends.  Jason's enthusiasm for life was unbounded; an excitement with invigorated and enlivened all those around him.

As a small way of saying thank you to Jason for his friendship, his loyalty, and his support, please find it within your heart to donate to this memorial fund.  In this trying time for his family, it's but a small gesture of love and support to reach out a comforting hand and help buoy them up.  Please show your support by sending any donations to:

Jason Walker Benefit Memorial Fund
Wells Fargo
P.O. Box 3488
Portland, OR 97208-3488

If you're in Utah, you can go into any Wells Fargo bank and deposit directly into the account for Jamie Walker (contact me if you'd like the account #).

As I understand it, the name 'Jason Walker Benefit Memorial Fund' will not be set up for a day or so, but if you use snail mail to the P.O. Box above I don't foresee an issue.

We love you, Jason.

Thursday, February 22, 2007 3:49:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, February 20, 2007

I was greeted several hours ago with some very unsettling, tragic, and somber news.  Though it has taken some time for me to internalize the weight of the event and for the news to settle in, I feel greatly privileged to have had a close association with Jason Walker and his family.  Jason, a friend and associate on many levels, tragically passed away this morning.

Jason's influence has impacted all those with whom he came in contact.  Jason was a great friend who was, as a mutual friend said, a force of nature.  I can't help but think that his life was cut short and his potential not yet fully realized.

I still can't believe that it happened.  I can't believe I'm referring to my good friend in the past tense.  I vividly recall the very first time we met.  Even now - especially now - it seems like just yesterday.  I am so grateful that we had the opportunity to share many special moments together and with his family.  Our families have made it a tradition over the past year or so to go out to dinner and/or a movie and pass a delightful evening together.  Those memories will endure forever.

Most of my interaction with Jason was at a professional (or at least a technical) level.  His influence and impact as Vice President of our local Utah .NET User Group was felt every single time, every single meeting.  He will be deeply missed.

Jason loved life and enjoyed it immensely.  Despite the last two years in which he endured much due to a motorcycle accident, his miraculous recovery demonstrated his spirit and his positive, upbeat outlook on life.  He constantly shared his rejuvenating spirit with everyone.

Jason leaves behind a beautiful family (wife and two children).  Our thoughts are with his family at this time, as we reach out to offer a consoling hand.  Ours is the desire to help in any way we can.  On that note, and as a very small gesture, we are wanting to set up a special fund in memory of Jason for his family in this, their time of need.  I'll be publishing any and all details of that fund in the coming days as more information becomes available.

Here's to you, Jason.  I believe I speak for all when I say that you will be missed.  You were a great friend and I will always look back at our association with fondness, longing, and great memories.  You are loved.

Tuesday, February 20, 2007 10:57:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [2]  |  Trackback
 Monday, January 29, 2007

Well, it's official.  After many, many hours of hard work I'm finally almost done.  What started out about 7 years ago to be a simple "finish the basement" project is now to the point where I can sit back and look at the fruits of my labors.  In reality, the project didn't take too long to complete (a few months at best), but the fact that the months were spread out over several years made it a tad frustrating and far too lengthy (sounds like some software projects).  In all, I (with the occasional help of family and friends) added about 1300 sq feet to the house consisting of 1) a bedroom, 2) a home theatre/recreation room, 3) a storage room, 4) a craft room, and 5) and office (with an adjoining bathroom)

I guess the reason I'm blogging this is today marks the first day where I'm actually in the new office and working.  Over the weekend I was able to get all of the electrical work done in the basement.  Sure, there are still some loose ends to finish.  I still have a little touch-up painting to do.  I still have to wire up the ethernet, speaker wires, and cable lines.  But it's functional and that's the key.

Prior to today I was taking up a small, much needed bedroom upstairs as my office.  It was filled to the gills with books, papers, boxes - in short, it was a constant and complete wreck.  Moving from a small 11'x11' room to a 13'x23' room is SOOO liberating - and long past due.  I don't have any furniture down here yet.  In fact, my 'desk' is a piece of particle board sitting atop some food storage boxes.  So I'm sitting here on the floor :)  I'm anxious to get started building my desk - I've had this affinity my entire life for custom woodworking/carpentry, and that's a project I've long been anticipating and planning.

Anyway, this long, extended, after-hours project has led to me not having any time for "coding for fun" as all of my free time since December has been consumed in finishing the project.  Many of my personal projects had been put on hold to see the basement project come to completion.  I hope to see that change somewhat over the next few weeks.

...Almost done :)

Monday, January 29, 2007 3:28:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [2]  |  Trackback
 Thursday, December 28, 2006

I've been very quiet on the blogging front this month, especially over the past couple of weeks.  I took some time off to finish off some long overdue projects around the house (namely the basement).  With the exception of Christmas Day, I've been downstairs almost every waking hour trying to wrap it all up.  Tonight I got all of the caulking and spackling done on all of the baseboards and trim.  Essentially, all that remains is painting (baseboards, trim, and walls), but that's a pretty big undertaking that will occupy every hour of my weekend.  We're installing the carpet on Monday so I have my work cut out for me.  I'll post some pictures when it's all done.

On the positive side, I'll be able to get my office downstairs (finally!) in about a week (after I get all of the outlets and switches wired up) and free up a much needed bedroom upstairs.

Just wanted to drop in and let everyone know I've not gone away, that I'll be back and blogging some pretty good stuff in the coming days (following the vacation), and to wish everyone a Happy Belated Christmas and a Happy New Year :)

Thursday, December 28, 2006 3:59:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Monday, October 16, 2006

I'm back now from a small and much needed hiatus.  We've been cranking on getting the next version of our product configurator code complete for the next version.  It's gonna rock and knock people's socks off - and it's only getting better.

I've been out of email/cell phone contact since Wednesday afternoon last week except intermittently having taken the family to Disneyland.  Oh what fun that was.  It actually felt good to completely take my mind off of things and not focus.  Now that I'm back I feel completely rejuvenated (despite being a little tired) and ready to rock.

I'll be posting more soon.

Monday, October 16, 2006 4:58:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Tuesday, August 01, 2006

Ok, this is ridiculous.  Do home builders just not care?

I've done my share of moaning and groaning about how well (or how poorly) my house was built.  Errant pipes here, wires run underneath ceiling joists in the basement, massive pipes protruding from various walls and supports, the non-squareness of the walls, etc.  I know that the builders are working with imperfect supplies and wood bends.  Sometimes the easiest approach looks like the best one.  Sometimes it is.  I don't think that's always the case.

I try to cut them some slack.  Coming in and doing work after someone was already there can be tricky and daunting.  It's a lot like software.  It's in pretty much every industry.

But today I found something in my house that is making me livid (and I don't usually get mad; frustrated, yes, annoyed, sure, but mad, rarely).  We've had issues with our air conditioning ever since we moved into this house.  The house gets pretty hot in the summer time.  For a long time we've attributed the problem to the air conditioner not working or needing more coolant, or whatever.  We've paid for people to come out every year (yes EVERY YEAR) and fix it.  The fix has been temporary at best.  There has always been one vent (in the small bathroom) that hasn't ever really worked.  I always assumed that there was blockage.

Well, to help mitigate the problems we've been having we hired a duct cleaner to come out today and do his magic (it's been long overdue anyway).  In attempting to clean out the bathroom duct he noticed that he wasn't getting any suction.  He reached his hand in and felt insulation.  No, it wasn't insulation that was in the pipe, it was insulation because the pipe wasn't connected to the boot.  He could see light through the vent.  Grrr.

Now it just happens that we just finished (and by just I mean yesterday) drywalling, taping, mudding, and texturing the walls in the basement.  This wasn't looking good.  The only bright point to this whole rant is that there is just one place in the whole basement that isn't finished: the utility room.  The bathroom happens to sit right above the utility room.  Thank heavens!

So we went down to have a look.  Sure enough, the boot is sitting there attached to the bathroom floor in the ceiling.  There's also a pipe that should be attached.  It's just sitting there.  The end closest to the boot had duct tape on it.  At the other end of the pipe was an elbow.  The elbow should be attached to the main air conditioning shaft.  Upon inspecting the elbow, however, it was never dove-tailed, cut, taped, screwed anything - it looked as pristine as it would be in the store.  Frustrated, I then felt around for a hole.  Sure enough, there it was.

But it gets better.  It wasn't that it wasn't connected - that would be an easy fix.  The builders, in their great wisdom, saw fit to run a floor joist smack over the middle of the hole - right in line with the boot to the vent in the bathroom.  There is no way it was ever connected, nor could it be.

Now it turns out that this hole is the hole nearest to the air conditioning unit.  Naturally it would receive the greatest amount of air pressure.  For seven years we've been venting the majority of our air into the insulation below our bathroom, robbing the rest of the house of much needed cooled air.  No wonder it's never really cooled off the house and our electrical bills have been astronomical.

I don't know how this ever passed inspection.  I wonder if it was even inspected.  I wonder how someone could just not care enough to finish the job.  I guarantee that had it been the builder's house things would have been different.

Chalk that up for yet another problem :-(

  • The entire circuit breaker was wired backwards (we had incessant breaker tripping for years just running the microwave and a blender at the same time) which had led to countless computer hardware issues and crashed drives because of surges.
  • I had to furr down almost the entire basement because of pipes and wires running beneath all of the joists.
  • Air conditioning ducts never even connected.  The pipe was just laying there, never even connected - venting the majority of air into the insulation beneath the bathroom.

I know that there's pressure to get stuff built.  There are time constraints, but do we just not care about the quality of anything anymore? Everything is disposable, nothing is made to last.  This is ridiculous to saddle someone with a half-baked, not even working product and call it good with a clean conscience.  Had I not been doing this inspection I never would have known the problem and would have lived on, ignorant of the problems within the system, tolerating the output.

It's a lot like crappy software.  I'm sick of a lack of quality.  Where's the pride in what we do?

Tuesday, August 01, 2006 5:18:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [4]  |  Trackback
 Monday, July 17, 2006

This past week was a bit on the crazy side.  I had the opportunity to go to Boston, MA for the Microsoft Worldwide Partner Conference representing Experlogix, Inc.  We had a booth there and had a great show.  Perhaps as a downer for the company I was, unfortunately, the best we could come up with for a booth babe.  How unfortunate.  Seriously, though, the show was great and we had a fantastic time.

While I was there in Boston, a tragedy occurred in which a large cement slab fell from the tunnel ceiling killing a woman.  How terrible!  And to think that I had passed through that very tunnel just the day before (if I'm not mistaken).

We also had (back in Salt Lake City), our monthly Utah .NET User Group meeting.  Aaron Skonnard presented the second in a back-to-back series on Biztalk, this time focusing on Orchestrations.  I wish I could have been there.  I'm a big fan of Biztalk - maybe I'll blog about it someday as well.  They also sang “Jon Boy Jon“ which is to a few of the tunes from Les Miserables and “Uncle Earl's Hairpiece“ which was quite funny.  It was a great time!

Tonight we had the opportunity to take a family outing to the 'Arts in the Park' in Lehi with some great friends.  We attended a concert by the a capella group Moosebutter.  They're a lot of fun and we had a great time.  We heard about Moosebutter several months ago with their clever renditions of Star Wars and Harry Potter.

I'll get back to technical posts here in the coming days.  Conferences seems to drain some of my tech-blogging powers.  Usually, I'm armed with my Gauntlets of Blogging +1, but I left them in my suitcase as they don't let me bring them into the tradeshow floor.  I'll see if I can't find them here somewhere...

Monday, July 17, 2006 3:21:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Sunday, July 02, 2006

Things have been a little insane around here lately.  I've made it a point to work on around-the-house projects.  Over the past several years we've done many: replaced the driveway, replaced the garage door, etched/painted/sealed the garage floor, installed vinyl fencing, poured approx 3800 sq feet of colored/stamped cement (including a basketball court), built an ironwood deck, built a shed, landscaped and then re-landscaped the yard, built a garden box, remodeled the master bedroom (I'm still working on the shelving and cabinetry), poured a courtyard and constructed a brick wall w/lights, and replaced the front door.

In addition to the aforementioned projects I've had this 5.5-6 year-running project of the basement.  I started it about six years ago and, amid all of the other goings-on, haven't really found the time to finish it.  Sure, I've worked on it here and there (mostly dabbling and stuff), but over the course of the past few weeks I've made it a point to actually finish that project.  Well 99.9% of my part is finally done (I just have to replace two can lights that for some reason aren't working and move a few ethernet cables).  I'll be moving my office to downstairs :-).  Primarily due to this project I've not really taken the time to blog like I have wanted to.

The drywall is getting installed this week (that's the one part of the whole project I don't like to do so I'm contracting it out).  A finished basement will add about 1300 sq feet to the house so I'm very much looking forward to that!  Plus I'll be moving my office out of an over-cramped 11'x10' bedroom to a dedicated office that is about 25'x14' + bath.  I'm very excited - this is long overdue.  I just pray that I did everything correctly and that it will all work once it's up.

Anyhow, I very much enjoy house projects, but sometimes I'm a bit overwelmed by trying to do so many at once.

Sunday, July 02, 2006 5:42:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Wednesday, March 01, 2006

Today was amazing.  We came to Chicago yesterday for, among other reasons, the Microsoft CRM Tour on Thursday.  However, to take advantage of the trip to Chicago (a place to which I haven't been for almost 20 years), we came in a few days early to see the sights.  Yesterday afternoon was spent perusing the Miraculous Mile - a mile of shopping - culminating at the John Hancock building.

Today, we had the opportunity to go and see the Shedd Aquarium and the Field Museum.  Having been to both places as a child, I do have some recollections of the experience, but it was a blast to relive it.  To my great delight I saw something today that I've been wanting to see for YEARS: Sue, the Tyrannosaurus Rex.  I'd ALWAYS wanted to see a T-Rex and today my wish was fulfilled!  Sue is, if you're not aware, the largest specimen of T-Rex every found and the most complete skeleton.  Missing just a few bones in one claw, the lower left leg and a few tail bones, Sue is sure a sight to see!  Most amazing!

I've attached a link to one of the many pictures taken.  Clicking the image will show a larger sample of the picture (940 KB).

The walk back to the hotel included a walk along Lake Michigan and through Millenium Park.  All in all, a great day.

Tonight we're going to dinner at Topolobampo.  We saw Rick Bayless on Iron Chef America and loved his style...can't wait to try it!

Wednesday, March 01, 2006 10:03:00 AM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Thursday, July 15, 2004

Today has indeed been a somber day.  Today just before 4:00 PM my beloved grandmother (Granny) passed away.  Up until just a few days ago she's been as active as ever, only just recently a dormant cancer finally caught up to her.  Granny was a wonderful person, a devoted mother and grandmother, and  genuine saint.  Granny leaves behind an incomparable legacy.  We were planning on traveling down to Las Cruces, NM tomorrow to see her as we knew she was ill, but as fate would have it that was not to be.  Instead, we will be traveling down on Sunday for the Tuesday funeral.

I feel genuinely blessed to have known Granny as well as I did - I have many wonderful memories taking care of her garden, playing her piano, doing puzzles with her, and hanging out.  I vividly recall spending (almost) every Sunday evening at her house while growing up.  There we would eat her famous beans, Pa would pop popcorn, and we'd watch Laurence Welk, The Wonderful World of Disney, and Mutual of Omaha's Wild Kingdom.  We would play in the backyard, climb her trees, and build forts and haunted houses in the basement.

I had the privilege of going down to Las Cruces with my previous company in January.  That turned out to be my farewell visit and I am very grateful for it.

Granny and Pa had five children - 4 daughters and a son.  Twenty seven grandchildren and I don't know how many great-grandchildren.  At our family reunion last November we had 96 people there - direct descendants and their spouses - and not quite everyone was accounted for.  What a wonderful experience.

Granny, we love you and are deeply honored to have you as our grandmother.  Your devotion to family and church was amazing.  You will be remembered for so many things: your gardens, your wonderful Thanksgiving dinners, your charity, your beans, your basement where we built many a haunted house, your puzzles, your backyard, your incomparable quilts, and much, much more.  But most of all you will be remembered for being our Granny.  We love you very much.

Thursday, July 15, 2004 4:50:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Sunday, July 04, 2004

On this day, the United States of America's Independence Day, I am overcome with gratitude for those that sacrificed so much for the country in which I live.  What a wonderful, blessed country!  It is because of their willingness to place their beliefs and even their very lives on the line that I live in such a beautiful place.  I commit to do what I can to live up to their legacy.

Sunday, July 04, 2004 2:25:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Sunday, April 18, 2004

As a family we have a hard time getting together each night to read scriptures.  This isn't to say that we don't remember to, it's the doing it that is the hard part.  It's great that the girls are so enthusiastic and desirous to read scriptures and hold Family Home Evening.

Tonight we sat down and started the book of Jacob in the Book of Mormon.  Anyah is such a great reader!  Leiel is doing a great job too of wanting to read and having Mommy or Daddy help.  After reading the first chapter we played a family game of Settlers of Catan (the girls love it!).  It's a good object lesson for them - especially Anyah who has a very hard time not winning all the time.  We're working on that.  Lisa ended up winning.  Anyah and Leiel were tied for second place.  I could see Anyah starting to pout when she discovered she lost but I quickly diverted her attention by having everyone give mom a high-five and that seemed to offer some good levity and she realized that not winning wasn't so bad.

I was very impressed with her and how she handled having the robber placed on her resource hexes - she laughed it off and played along.  Leiel also had a great time moving the robber when she rolled a 7.

Following the family game, we ate chocolate pudding - Addie was gobbling it up voraciously!  She sure is a cutie!

Well, I have to go to bed to get up early tomorrow!

Sunday, April 18, 2004 4:47:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback
 Saturday, April 10, 2004

Well, this marks it!  After much deliberation and wavering, I have finally decided to start blogging.  This post represents the first in hopefully a long line of posts on the Zupancic Perspective.  Allow me to introduce myself.  My name is Aaron Zupancic.  I am a native of Las Cruces, NM.  I am the oldest of six children.  Back in 1991 I graduated from Mayfield High School.  Shortly thereafter I took two years to serve a mission for The Church of Jesus Christ of Latter-day Saints in Mazatlan, Mexico.  In Jan 1992 (just months prior to my mission) I moved up to Salt Lake City, Utah with my father.  Since my early years I have had a stong inclination towards computers and the so called 'technical' realm.  This devotion has continued on to the present.  I have had the opportunity to be a trainer for several years.  How I love to teach!  Following that, a friend and former student of mine, Ryan Redmond hired me to a software developer for a small company called Avysta Software.  I functioned as a technical team lead and architect of a CRM (Customer Relationship Management) system that grew quickly and continues to thrive.  Soon thereafter my devotions fell to consulting.  I had the opportunity to offer my services as a Microsoft Consultant - what a thrill!  Microsoft is awesome, despite what some people may say (I might just blog about that one some day).  Currently, I am a consultant for Keane, Incorporated in Salt Lake City and am happy to be there, offering my services.

My hopes for this blog are high.  The primary reason for establishing it is to disseminate my discoveries, techniques, and insights into the world of software development.  There are other motives too, of course, but that is the main one.  I love software development and want to share what I know and learn with the greater community.

Hopefully this blog will be useful to those that use it and scour its pages.  Please feel free to provide comments and ideas.  I look forward to ongoing feedback and interaction.

Saturday, April 10, 2004 4:26:00 PM (Mountain Standard Time, UTC-07:00)  #    Disclaimer  |  Comments [0]  |  Trackback