Monday, March 01, 2004

After many frustrations, I seem to be back up again (if you hadn't noticed, my internet connection has been really flaky the last several days.  I replaced an aging router today that seemed to be on the fritz.  The upside is that I now have 54Mbps 802.11g wireless access in my house.  Whoo hoo.  Hopefully this is the end of the trouble.

My new router also natively supports dynamic dns registration, so I don't have to run the registration client on my pc anymore. Me likie.

posted on Monday, March 01, 2004 8:01:01 PM (Pacific Standard Time, UTC-08:00)  #    Comments [0]
 Thursday, February 26, 2004

I know what you're thinking...“Too many posts!  He's mad!  He's beating the pants off of Jenkies!“  Well, this one's technical.

If you're like me, you've always been annoyed at the inherent coupling between pages that pass data to each other through a Server.Transfer() call.  I think it leads to poorly designed, tightly-coupled workflows, and tends to lead people to taking shortcuts or breaking the model to make their stuff work.

Until now, I've tried to minimize this issue by giving my base class page a TransferData property typed as an object so every page can use it to pass data.  This has its own problems.  For instance, if you call Server.Transfer twice in the same Request and use Context.Handler to retrieve the transferer (which seems like a hack to me), it's the first page, and there's not a reference to the second page in the call chain.

I now have discovered a nifty little storage location for putting things like this... HttpContext.Items. It's just an IDictionary that stores stuff in the context of the current request.  Since you can always get the current HttpContext with HttpContext.Current (an implementation worth taking a look at with Reflector), you can get to it from anywhere, regardless of whether you have a reference to ANY page.  It works even if you're passing control to or from some handler that's not even a page.

Think of it as the analog to Application state, or Session state, but for the current Request only.  It automatically decouples your pages because they only have to agree on a common key.

UPDATE: I should note that it was my co-worker Casey Marshall who initially brought the property to my attention.  Thanks, Casey

posted on Thursday, February 26, 2004 10:52:25 AM (Pacific Standard Time, UTC-08:00)  #    Comments [0]
 Tuesday, February 24, 2004

For those that are not aware, my wife Becky has a black belt in kung fu.  They had a tournament this past weekend.  Becky wasn't as involved as she normally is since she is going back to school, but she managed to get first place in the “two-man set” event.  She and her friend performed their spear vs. broadsword kata at the public exhibition Saturday evening.  I got it on video.  I may put a few choice frames up.

Congratulations, Becky!!!

posted on Tuesday, February 24, 2004 7:08:17 PM (Pacific Standard Time, UTC-08:00)  #    Comments [1]

Well, the other day, I fot one of the things on my wishlist that was mostly for fun...the Roomba vacuum cleaner.  Basically, it's a vacuum cleaner that vacuums without you.  I thought it was mainly going to be a toy, but it's incredibly effective.  Perhaps the most pertinent example is that it can vacuum under the bed (provided there's not alot of crap under there).

Since it operates best when the room is clear of large debris, it has the side benefit of providing a good excuse to generally keep the floor clear.  Both Becky and I are pretty bad at just throwing things on the floor.  As most of my former roommates can attest, I treat it like it's like one big shelf.

Anyway, needless to say, I've done alot of vacuuming the last few days, without really spending very much time.  I would recommend it to non-geeks as well.

Update: I suppose I should say, “Thanks Mom and Dad!!!!”.  I helped them with some computer stuff and it was a thank you gift from them.

posted on Tuesday, February 24, 2004 6:25:29 PM (Pacific Standard Time, UTC-08:00)  #    Comments [2]
 Sunday, February 15, 2004

As many of you know, I've been using SharpReader to keep up to date on web logs.  I track at least 40 daily, and my team at Motorola is now using web logs and aggregating RSS feeds to build and publish our weekly report.  Which is awesome by the way.

SharpReader has been frustrating me lately.  It seems to do strange things especially when using RDP to log into my workstation remotely...things like hog the cpu so much that the RDP client can't even shut it down.  This has bitten me several times when trying to do something important, and since I've got a new laptop, it's become essential. that I be able to use RDP without worrying.

Another RSS aggregator I looked at initially when I started using SharpReader was RSS Bandit.  At the time, it was a pretty small project and didn't have many features.  It has matured quite a bit and I am now using it as my aggregator of choice.  It's design has taken alot of concepts from Outlook 2003, which rocks (and is the first Outlook version to do so).

Anyway, just going public with the switch.  I'll let you look at the features and decide for yourself if it's right for you.

posted on Sunday, February 15, 2004 12:06:23 PM (Pacific Standard Time, UTC-08:00)  #    Comments [4]
 Saturday, February 14, 2004

Those of you who live in the area know we don't get snow very often, so this is a big deal.  We woke up this morning to a winter wonderland.  There was about 1.5” to 2” of snow on the ground.  It was really cool.  According to the news, it's the most serious snow in the Austin area since 1985. At first I didn't believe that statement until I went outside and realized it was real snow.  Not just piles of sleet.  Actual honest to goodness snow!

After several attempts, Becky convinced me to walk through the park with her and we took some pictures of the kids attempting to “sled” down a hill on anything they could find including knee boards, kayaks, and cardboard boxes.  There's nothing quite as funny (and disturbing) as a little foul-mouthed kid flying down a hill in a cardboard box.  It was really cool to see the whole neighborhood out enjoying the rare day.

The top picture is a panorama I stitched together from 3 separate pictures, which turned out really well.  If you look closely, you can see the people walking back up the hill on the left are the same two people twice.  Ah, the wonders of the space-time continuum.

The next picture is of the little stream that runs through the park, which looked really awesome in the sunlight.  It's amazing how different everything looks with white on it.  They have been doing some construction next to the stream, which has been ugly and muddy, but with the snow covering it, it looks much better.  It reminds me of the old hymn, “Whiter Than Snow”.

Anyway, at this point, I'm just rambling to have enough text to make the pictures look like they were not just strewn about on the page.  If you looked at this entry early in the day, you probably got a look at it when it looked much worse.  The two zoomed in pictures are probably too big, but I wanted to make sure you could see the little kid in the box, who, when he got to the bottom, was dumped out of the box and into the mud.



posted on Saturday, February 14, 2004 7:48:59 AM (Pacific Standard Time, UTC-08:00)  #    Comments [2]
 Saturday, January 31, 2004

Boy was I sick yesterday.  Due to a new policy where I work, sick days are lumped in the same bucket as vacation.  Supposedly, we get more “Paid Time Off“ (or PTO), but ,as such, those of us who are prone to sickness during the winter months are compelled to attempt to go in to the office when we probably shouldn't.  Anyway, after lunch, I decided if I didn't leave work then, I might not make it home.  I pretty much sat perfectly still the rest of the day, which was the most comfortable thing to do.

Those of you to whom I spoke on the phone yesterday can attest to the bizarrity of my voice, and I probably was somewhat unintelligible, since I don't really remember what happened.  All I remember was waking up at 9:30 pm last night feeling MUCH better, but thinking it was 9:30 am today.  I was very confused.

I was dissappointed because I had to cancel our dinner plans with B-dub and J-dub at Johnny Carino's.  Sorry guys, we'll try again next week?  I'm feeling much better this morning.

posted on Saturday, January 31, 2004 8:10:46 AM (Pacific Standard Time, UTC-08:00)  #    Comments [0]
 Tuesday, January 27, 2004

I've been on a real software philosophy kick lately.  Here's more of my thoughts (which are subject to change).

I've spent alot of my time trying to develop methodologies and code to help me write database independent code.  Invariably, I run across problems, some caused by a db with a crappy internal type system (Oracle), some caused by a broken unification model (ADO.net), and others caused by poorly implemented providers.

I ran across a heated discussion on another blog (which I can't find now, or I'd reference it) on whether database independent code should be something to give up on.  After all, even though they compete for business, Oracle was designed for something very different than SqlServer, or MySQL was designed for.  They each have unique features, different SQL syntax, stored procedure concepts, etc that keep there from being a universal API for database access.

So there are two common approaches to take (excluding giving up):

  1. Implement to the lowest common denominator.  Solutions for this exist already.  ODBC, JDBC, OLEDB, all fit this model.
  2. Move the unification layer inside your application, so you are implementing a unified API for your application.  This allows you to focus on the functionality you need and use object oriented techniques and patterns to reduce redundancy and increase maintainability.

I first approached ADO.net as the answer to #1, for which it is woefully inadequate.  I now realize it is an enabler for #2, defining concepts that databases share (which make them databases).  This gives you some commonality between implementations without forcing you to the lowest common denominator like previous attempts.  Besides, most applications are targeted to a specific db anyway and don't benefit from that approach.

ADO.net is not without it problems, but viewing it in that light makes it a much more satisfying tool...for me anyway.

posted on Tuesday, January 27, 2004 2:21:40 PM (Pacific Standard Time, UTC-08:00)  #    Comments [0]
 Thursday, January 22, 2004

I was recently writing a new entry, and I knew I had talked about a topic before, but couldn't remember when.  Since dasBlog doesn't have search capabilities, I was contemplating converting my blog to a Bliki, or something else that would give me better auto-crossreferencing capabilities.  But I thought, “Hey, I'll just google it”. (The internet has spawned so many ridiculous verbs)  Much to my surprise, I found exactly the entry on my blog that I was looking for!  After I thought about it, it really wasn't that surprising, but it's still wicked cool.

BTW, I ended up not using the link...but it was still cool.

posted on Thursday, January 22, 2004 5:49:21 PM (Pacific Standard Time, UTC-08:00)  #    Comments [0]

In the past year, I've learned an incredible amount about software design.  It seems that the amount of data I take in increases exponentially.  I suppose this is standard in most fields of study, it's still surprising to me.

My recent learnings have involved design patterns.  I've spoken about them before so I won't go into huge detail.  I've recently come across a general pattern known as Inversion of Control (IoC for short).  It is a pretty broad concept and is frequently used by developers, most of whom would tell you it's common sense after you explained it.  The real benefit is formalizing and categorizing it.  This enables you to talk about approaches for solving problems in a common way. For example, try getting some musicians together to write a song, but do not allow them to refer to musical terms.

The particular pattern I've just recently been aquainted with is Dependency Injection, where you define modules of software as components that define their dependencies to other components as part of their declaration rather than tieing them to some specific implementation or third party factory.  I've been playing with PicoContainer, a project that provides a framework for Dependency Injection.  I'm still trying to get my hands around it, and trying to see how this pattern fits into some of the projects I'm working on.

posted on Thursday, January 22, 2004 5:44:04 PM (Pacific Standard Time, UTC-08:00)  #    Comments [1]