Tuesday, July 15, 2008

Brian Sullivan tagged me with the latest ongoing meme. I’m really sort of excited because I’ve missed out on all the other memes going around. Jeff Atwood probably wouldn’t even consider me a real geek because of that. (I haven’t updated a Wikipedia page either! Gasp!)

How old were you when you started programming?

I didn’t write my first “Hello World” until I was 18 in COMP 170. I created my first personal website when I was 15 I think, but my primary tools were Netscape Composer and Paint Shop Pro. :-) I think I had figured out by that point some very basic Javascript, but I really had no idea what I was doing.

How did you get started in programming?

I remember when my dad got a new PC with Windows 3.1 on it. Prior to that, I knew how to ‘cd’ between directories and how to run ‘dir’. All of these commands were, of course, to get to the directory where my games were installed. :-) I never really stayed in Windows at the time, because all the games were still DOS-based. I didn’t really have much to do with Windows (except for the Hot Dog theme), until Windows 95 came out. That’s when I started becoming more of a computer enthusiast. I remember troubleshooting Dial Up Networking so that our 14.4 modem would connect up. I also remember buying my first piece of hardware, the 3dfx Voodoo card.

As I mentioned, I started doing some basic web pages when I was in high school. This was the time of animated GIFs and tiled backgrounds, if you’re interested. This was also back when 56K modems first came out and there wasn’t yet a clear standard on how 56K modems would talk (you could either go with US Robotics or the cheap brands) and I worked as tech support at a local ISP. It wasn’t hard to do tech support because I had been troubleshooting my own Dial Up Networking problems for a few years already.

Coming from a tech support role, I didn’t really have any programming knowledge. I knew how to build a computer and I even knew about msconfig, but programming??? Nah… not really. Just WYSIWYG HTML.

When I graduated high school, I either wanted to be a musician or work with computers. Seeing as how I didn’t really want to teach high school band, I decided to go to school to learn about computers. I didn’t really know what Computer Science meant, but hey, my grades were pretty good so why not? So, I chose a major of Computer Science and the rest is history.

What was your first language?

Unlike the rest of the programming populace, my first language was actually not BASIC, but C++. I didn’t actually write a line of BASIC until my junior year of college! I would say that I currently prefer C# over VB.NET, but it has more to do with terseness than it does with braces. For the same reason, I’m a fan of Ruby as well.

What was the first real program that you wrote?

Are you saying Hello World doesn’t count? C’mon!

I’m going to define “real program” in this case as something that I could show my parents. I couldn’t show them “Hello World” or a command line application to create a binary search tree because they couldn’t relate to it. However, I could show them a GUI maze application that I wrote in Java. It had four players (one of which could be human controllable) and then each player raced to get to the exit. I also wrote a Solitaire program in C++, a networking Tic Tac Toe game in C++, and a Paint program in C++ (using the Windows API).

My first team application, like Brian’s, was created in the capstone course at Harding. We wrote a version of Othello that had to be networked with an AI. I wrote the networking code in C#. It even had threading code, which of course was written completely wrong. I’m still not entirely convinced that I can write threading code correctly today. :-)

What languages have you used since you started programming?

In college, I primarily used C++ and C#, but I also had some exposure to some Assembler, Java, VB.NET, Perl, and even LISP! My work experience includes a (thankfully short) period of COBOL and JCL on an IBM mainframe, but primarily has been in VBScript (both classic ASP as well as scripts), Javascript, PowerShell, C++, C#, and VB.NET.

In my personal projects, I’ve used C#, VB.NET, JavaScript, PowerShell, PHP, Python, and Ruby. I’m sure I’ve missed something in there.

What was your first professional programming gig?

I got hired out of college to work at Data-Tronics, Corp. where I still am to this day. My role has changed significantly now, where I’m trying hard to push out 40 years of IT practices with more modern methodologies (down Waterfall, down!) and technologies (down Mainframe, down!).

If you knew what you know now, would you have started programming?

You bet. I’m a geek to the core.

If there was one thing you learned along the way that you would tell new developers, what would it be?

I’d have to agree completely with Brian – get involved in the community. Do not let programming become just the job you perform. Like JP, get passionate about developing. If you don’t enjoy what you do, there isn’t any point in doing it. Start reading blogs and going to user groups. You’ll be overwhelmed at how much you didn’t know, but remember that no one else knows it all either. We’re all learning together.

What's the most fun you've ever had... programming?

I can’t think of any one specific instance, but I think one of the best feelings is, after having spent literally hours trying to debug some problem and then giving up and going home, waking up the next day and having the light bulb come on with the solution to this problem. I love solving problems with software.

Tag, you’re it!

Colin Neller, come on down!
Randy Walker, you too!

I’ve got other tags if anyone else is interested. I might even give some out!

posted on Tuesday, July 15, 2008 11:36:10 AM (Central Standard Time, UTC-06:00)  #    Comments [3]
 Wednesday, June 18, 2008

A couple of weeks ago, I was fortunate enough to attend the Tech Ed 2008 Developer conference. It was my first Tech Ed conference and I had a great time. (Yes, I still need to blog about my experiences there overall and I’m still planning on doing that.) One thing I wanted to bring up if you’ve never been to Tech Ed before is the great experience that the Hands on Labs (HOLs) provided. Basically, you walked up to the HOL computer and, in a few short steps, you had a full development virtual machine ready to go. It was a really nice experience and ensured that you could try out new features without having to set up your own VM or worse, download and install a lot of betas on your own development machine.

Apparently, Microsoft is using the same setup over the web. Maybe I’ve been in the dark for a long time, but I’ve never used a VM in a browser window before. Check the screenshot out:

image

Seriously, look at the browser title – this is in IE. On the right side of the screen, you’ve got the lab walkthrough, too. If you’ve been unable to look at new technology like .NET 3.5, LINQ, WPF, WCF, etc, you should check out Microsoft’s Virtual Labs. The MSDN Virtual Labs are at http://msdn.microsoft.com/en-us/virtuallabs/default.aspx, but TechNet also has labs for things like Windows Server 2008.

image

posted on Wednesday, June 18, 2008 7:01:36 AM (Central Standard Time, UTC-06:00)  #    Comments [2]
 Thursday, April 24, 2008

image

(Sorry for the lack of substance with this blog post - I'm hoping that just posting anything will spur me on to post something with substance. Wish me luck.)

posted on Thursday, April 24, 2008 8:06:17 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Friday, March 28, 2008

Just a reminder to anyone in the Fort Smith area - we'll be meeting next Monday night at 6:00 to hear Chris Koenig talk about Silverlight. Chris is a Microsoft Developer Evangelist located out of Dallas. I got to meet Chris last year for a grand total of about 5 minutes when I went down for the .NET Roadshow that was hosted at Microsoft's office in Dallas. Chris got to escort me and the others between floors on the elevator :-)

Anyway, if you're in the area, swing by. We'd love to see you. For more information, check out the FSDNUG website.

posted on Friday, March 28, 2008 3:24:36 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Wednesday, March 26, 2008

If you've been working with the .NET Framework for a while, you're hopefully already using some form of static analysis to help you catch problems with your code. One of the most well known is Microsoft's FxCop, which is now integrated as the Code Analysis feature in Visual Studio 2005 [1] and up. If you're not already using this tool, then please start because it can help you find problem areas like potential NullReferenceExceptions as well as globalization and security issues.

However, while FxCop is great at catching small problems and details, it isn't the best tool to see the big picture regarding your software. Enter NDepend by Patrick Smacchia. Chances are, you've already read Scott Hanselman's great review of NDepend a while back (or heard his podcast on static analysis with NDepend). If you haven't read it, go ahead and check it out. Scott uses NDepend to analyze dasBlog (which I'm running), so you can get the general feel for working with NDepend and what the reports look like.

I'd like to run through a few of the features of NDepend using Rhino Mocks as the target of my static analysis. Rhino Mocks is a neat example because it is only one assembly, but it is the result of an ILMerge of quite a few different libraries, so we get to see how NDepend handles this. Here is NDepend's class browser showing Rhino Mocks:

image

As you can see, it handles Rhino Mocks accurately. In fact, it almost feels like the class browser in Reflector, so that is already a plus. In fact, as you can see, the context menu supports jumping to Reflector for the selected type.

The "Who is directly using me?" option is also pretty cool and highlights the extensive use of CQL in NDepend:

image

CQL, or Code Query Language, is the centerpiece of NDepend and is how all of the analysis happens. You can think of it as SQL against IL. The massive benefit that NDepend has over FxCop IMHO is that you can create your own analysis rules in CQL instead of having to write and compile a DLL to extend FxCop (for an example of this, check out this FxCop rule that ensures that ArrayLists are List<T>s instead). Even better, NDepend provides a complete editor with intellisense that allows you to test your queries out against your assemblies.

image

Take a look at this screenshot. You can see the intellisense at the bottom right hand of the screen. At the top left is the CQL Query Results. The top right is all of the types in the assemblies, but the highlighted ones in blue are those that were returned by the query. This all happened as I typed the query in. Actually, I got red when I typed it in the first time, because my query had some mistakes in it, but NDepend was very helpful in showing me how to correct my query.

The query editor also has different types of intellisense depending on the value.

image

I'll admit that it might seem weird to have a slider when you're just typing a number in, but the cool part is when you change the value, the query results automatically change to reflect the new value. In this case, you can watch the results of the query to get a feel for which types have the most methods.

From an agile coding perspective, NDepend ties in well with Continuous Integration. It ships with both a NANT and an MSBuild task to run the NDepend console against an NDepend project file (which is just XML). The report that it provides is insanely detailed. I'd say this where the value of application-specific CQL queries would come in handy, because you can come up with some detailed queries that are run on every CI build to ensure that the code still matches whatever design criteria was decided upon when the queries were written.

 image

For future versions of the tool, I'd think it would be neat to have a lightweight version of the CQL tool that you could ad hoc queries against assemblies, like as a Reflector addin or something. That'd be cool. Or maybe a Powershell cmdlet/PSDrive provider so that you could do something like this:

Get-ChildItem -Include *.dll -Recurse | Select-Cql -Top 10 -Methods -Where MethodCa -ge 5

Or maybe:

Get-ChildItem -Include *.dll -Recurse | Select-Cql -Top 10 -Methods | Where { $_.MethodCa -ge 5 }

I'm not sure exactly how the syntax might look, but it would be really cool :-)

Hopefully, I've given you a good picture of the some of the features of NDepend. If your interest is at all piqued, there is a "Trial / Open Source / Academic Edition" that you can download for free. Its feature set isn't quite as broad as the Professional edition, but I've used it before and it still provides a lot of functionality. Check it out!

 

Full Disclosure - I used a review copy of NDepend for this post. My company is not (yet) using this tool, but I think that there is interest. I wasn't paid to do this. <kidding>If you, dear reader, would like to pay me, please contact me.</kidding>

 

[1] I don't believe that all of the SKUs of Visual Studio have the Code Analysis feature.

Technorati Tags: ,
posted on Wednesday, March 26, 2008 6:58:49 AM (Central Standard Time, UTC-06:00)  #    Comments [1]
 Thursday, March 20, 2008

image

Anyone else find this funny? I know I do! I told you I was a beta junkie.

Technorati Tags:
posted on Thursday, March 20, 2008 7:50:31 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Tuesday, February 19, 2008

I was just setting at a command prompt in Vista on my laptop and I typed 'cd /' out of habit and, to my surprise, it worked! Not only that, but tab completion still behaved as expected!

I actually have been using the '/' character in PowerShell because it is easier to type than '\' (not as far to reach) and it is the default in *NIX systems as well (i.e. my Ubuntu installation).

Now granted, I probably shouldn't get used to this in the event that I inadvertently code a '/' character in one of my programs, but then again, I should technically be using the System.IO.Path.PathSeparator anyway.

I get excited about the little things.

NOTE - this might be the result of Service Pack 1 on Vista also...

UPDATE - I lied. You can type 'cd /' and get to the root, but tab completion still completes only for the current directory. In other words, if you're current directory is c:\windows\ and you type 'cd /[tab]', you'll get directories that are in c:\windows. Sorry. My excitement just dropped a little.

posted on Tuesday, February 19, 2008 5:30:08 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Monday, February 11, 2008

Last week, a small group of us traveled up to hear Jean-Paul Boodhoo present to the Northwest Arkansas .NET User Group. JP presented on advanced uses of generics in .NET (i.e. more than just strongly typed collections) though we also had a great look at Test Driven Development as well as some of the new features in C# 3.0.

The presentation was great and it got me really excited about user groups in general, which is why I'm also excited to announce that Fort Smith will be getting its own user group! Many thanks to Michael Paladino for doing a lot of the work in getting this started. FSDNUG went live last week. I'm hoping to add a feed to the site at some point so that news can easily be pushed out without continually checking the site, but for now, it is just static HTML.

Raymond Lewallen will be kicking off the group with a presentation on Behavior Driven Development. I've read about BDD and am attempting to practice TDD, so I'm excited to hear Raymond's talk. If you live in the area, be sure to come out for the meeting!

posted on Monday, February 11, 2008 12:43:38 PM (Central Standard Time, UTC-06:00)  #    Comments [4]
 Tuesday, January 01, 2008

It's hard to believe that it is already 2008... 2007 completely flew by. I spent most of this Christmas holiday telling my family I had seen them just a few months ago when, in fact, I hadn't seen them since... last... Christmas.

So, 2008 in review.

Except for my first couple of years in college (I had never written a program until 'Hello World' in C my freshman year), 2007 has got to be the year of the most growth for me as a developer. I never really grasped unit testing/test driven development (I can't put behavior driven development in this just yet) until this year. Does that make me a master at it? Certainly not - but I do understand the need and the drive behind it now. Along with this gradual understanding of the role of tests/specifications, I have come to better appreciate concepts such as dependency injection, inversion of control and separation of concerns. I understand that they may sound like buzz words, but seriously, these practices can completely change the way you architect systems. I can't believe how far behind I've been and, even more so, how far I have to go.

In my quest to become a better developer, I'd like to share some of the blogs/feeds that I've started subscribing to in 2007 that really have helped me become stronger in my craft. J.P. Boodhoo, Jeremy Miller, Dave Laribee, Oren Eini, the reddit programming feed, and Reginald Braithwaite. Certainly some are missing (lifetime achievement awards to Scott Hanselman and Jeff Atwood anyone?), but I still wanted to share a few. I don't think it is a coincidence that a lot of these are heavily involved with ALT.NET.

Looking forward to 2008.

I'm hoping to gain experience and learning from communities outside of the Microsoft ecosystem (i.e. Ruby, Rails, Python, etc.) if for no other reason than to see what it is like. Honestly, the majority of the practices that ALT.NET is pushing have been and are huge parts of these communities. I'd also like to get more involved with one or more open source projects. Lately, I've found myself pulling more and more repositories down to my machine just to study the code and I'd like to give back.

 

Technorati Tags:
posted on Tuesday, January 01, 2008 7:55:07 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Wednesday, December 19, 2007

This morning, I had my annual eye appointment and I completely forgot that they might dilate my eyes. Of course, my appointment was also scheduled first thing in the morning - essentially before work. Now, I'm sitting in front of my computer and literally everything is completely blurry. I can't read anything on the screen. It doesn't matter if I get close to the screen or far away, it is all blurry.

Enter ZoomIt! I initially heard about this tool from Scott Hanselman. It is another wonderful tool from Sysinternals (i.e. the guys that make Process Explorer, Process Monitor, etc.) so you know it is pure gold. The tool's primary use is to aide in presentations, so that you can easily zoom in to a portion of the screen so that people can see it better.

Today, I'm using it to just help me read the screen at all. I'm basically touch typing and periodically checking what I've written by zooming in to see if everything looks good. It is actually working pretty well, too.

Thankfully, the blurriness isn't lasting too long. As I'm writing this post, it has already cleared up considerably. Still, ZoomIt has come to the rescue for me this morning.

posted on Wednesday, December 19, 2007 9:22:05 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Friday, November 02, 2007

I'm finding myself wondering if I'm a beta junkie or a CTP junkie.

Why?

Because Jeffrey Snover announced that there will be a CTP release of PowerShell 2.0 next week. I'm not waiting for the beta either - I'm downloading the CTP bits as soon as the post announcing its release gets to Google Reader. Maybe I should change my "beta junkie" title to "pre-release junkie" or "I just like to install things junkie."*

PowerShell 1.0 single handedly turned me into a console user. I do 90+% of my file operations from PowerShell instead of Windows Explorer. I also do a large portion of my pseudo coding at the command prompt to see whether a basic algorithm will work the way I expect it to. I'm very excited to see what the team has come up with.

Update (per post from Jeffrey Snover):

The PowerShell V2 CTP is not for everyone. You should read this PowerShell Team blog entry ( http://blogs.msdn.com/powershell/archive/2007/11/02/ctp-watch-this-space.aspx ) to find out what it is and what it isn't and then make an informed decision before installing the CTP.

I may be an "I just like to install things junkie" but that doesn't mean that you should be to. Be responsible with pre-release software. If you've got production code that relies on PowerShell behavior, etc. you should consider holding off on installing it on your development machine.

 

* With all these installs I do, I actually do see UAC prompts a lot. And no, I haven't turned off the prompt.

posted on Friday, November 02, 2007 10:26:11 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Thursday, October 18, 2007

I was reading through my feeds this morning and came across this gem of a paragraph:

Manual testing is immoral. Not only is it high stress, tedious, and error prone; it’s just wrong to turn humans into machines. If you can write a script for a test procedure, then you can write a program to execute that procedure. That program will be cheaper, faster, and more accurate than a human, and will free the human to do what humans to best: create!

The paragraph is actually an aside to the rest of the post, too! Go read the entire TDD post in context at the ObjectMentor blogs.

posted on Thursday, October 18, 2007 7:15:18 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Wednesday, October 03, 2007

image

*sigh*

posted on Wednesday, October 03, 2007 8:44:23 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Wednesday, September 05, 2007

When I was in high school, my first job was preparing food at a local Taco Mayo. I didn't last long there. Soon afterwards, I began working at a local ISP doing tech support. I still remember all of the problems that brand new 56K modems had, because the v92 standard hadn't really been standardized yet.

Anyway, all that to say my first real job was tech support at an ISP. Tonight, I was practicing my troubleshooting skills on my internet connection. I got home from work and couldn't connect to anything except my router.

Here are the steps I took:

1) Opened Outlook and IE and tried to go somewhere. Nothing happened.

2) Recognized there was a problem.

3) Pulled up a command prompt and tried to ping www.google.com and then my ISPs website. No dice.

4) I rebooted.

5) I pulled up an admin command prompt (UAC) and tried pinging again with no success.

6) I released my IP address and then renewed it (ipconfig /release and then ipconfig /renew - this is why I needed an elevated prompt).

7) I tried pinging again without success.

8) I unplugged my cable modem, waited for 15 seconds, plugged it back up and then tried again... without success.

9) I navigated to my router's page in my browser which came up great.

10) I released and renewed my IP address from the router. Then I tried pinging... once again without success.

11) I bypassed my router and connected my ethernet cable directly to my cable modem.

12) I unplugged and then plugged back in my cable modem and tried pinging without success.

13) I got frustrated and tried most of the above things in random order to try to get it to work.

14) I called tech support.

15) I got more frustrated dealing with the automated answering system.

16) I got FAR more frustrated dealing with the automated tech support - that had me do everything I had already tried.

17) The automated tech support finally asked if I'd like to speak with a real person - I said yes.

18) The real tech support picked up quickly (thankfully) and had me power off my modem and bypass my router (already done) and then try pinging which didn't work.

19) Then he asked me to reboot.

20) Knowing that this was my second reboot, I was skeptical but I went ahead with it for the real tech support guy's benefit.

...

21) It starts working.

22) I look and feel like an idiot.

Moral of the story - rebooting always fixes the problem. Just try it over and over and over again. Until it starts working.

*sigh*

posted on Wednesday, September 05, 2007 9:28:34 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Friday, August 10, 2007

For your enjoyment, here is some great dialogue from the movie Airplane. Why am I providing this? Because it is funny and because I wanted to.

Roger Murdock: We have clearance, Clarence.
Capt. Clarence Oveur: Roger, Roger. What's our vector, Victor?
Tower: Tower Radio, clearance, over.
Oveur: That's 'Clarence Oveur', over.
Tower: Roger.
Roger Murdock: Huh?
Tower: Roger, over.
Roger Murdock: What?
Capt. Oveur: Huh?

Many thanks to Kaelin for providing this.

posted on Friday, August 10, 2007 7:15:34 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Monday, July 16, 2007

I was digging around my old posts and bookmarks and stumbled across my post on the Share Your OPML website from over a year ago. Whatever happened with that site? It quite literally hasn't changed since the service started as far as I can tell. I really like the idea and I wouldn't mind at all if the site added a few services or something. I went ahead and updated my OPML (which has literally doubled) and you can check it out here. If you've got an account with them, go ahead and update your list and then comment with a link to it.

Off-topic, but I wish that Google Reader would start adding some more features. I figure it would be easy to provide a way to subscribe to another users' shared OPML list (as opposed to just items that they mark as shared). Maybe no one else wants that feature, but I think it'd be cool. I already subscribe to a few del.icio.us bookmark feeds and shared feed items. Why not provide a feed that lets me know when someone adds a new feed to their list?

UPDATE:

One small thing to add - Matt brought up the point that there isn't an easy way to get an external link to your own shared OPML list. I've only found two ways to do this so far: 1) Use the "Who Subscribes To..." feature and look for a feed you subscribe to. 2) Google your name and optionally specify the site (site:share.opml.org).

posted on Monday, July 16, 2007 6:26:15 PM (Central Standard Time, UTC-06:00)  #    Comments [3]
 Monday, June 11, 2007

In case you haven't heard, Apple has released a public beta of Safari, which is their web browser.

The surprising news is that it supports Windows.

David Mohundro

I have to admit that this is a really good move for Apple. Their software has been intriguing me quite a bit lately, and watching John Lam demo Silverlight on a Mac certainly doesn't make me not want to try it out for myself. My only experience with Mac OS X is via tech support while I was in college. We had an iMac desktop in the office for the rare occasion when a Mac user would call in asking for help getting their LAN connection set up (note, the rarity had more to do with the lack of Macs on the network than the lack of problems). The system ran quite slowly because it didn't have enough RAM and it didn't have any software on it. The dock was pretty cool, but it didn't seem to add much value at the time.

Things seem to have changed, though. I would really, really, REALLY like to try out Quicksilver. The Parallels software looks really cool, too. I like Windows too much to switch, but the capability to run both Windows and OS X side by side is very attractive. Everybody seems to like TextMate a lot, too. I do wonder sometimes if I just want Windows ports of these programs or if it really is OS X that seems so nice.

For the time being, I'll probably still stick with Windows Vista. I just like using custom hardware too much to lock myself into Apple hardware right now (that, and I hate not being able to resize windows from the top). If they ever come out with a virtualization option to run OS X on Windows, I would probably give that a try. I would encourage you to check out HardOCP's 30 Days with Mac OS X article if you've been curious what running OS X might be like.

posted on Monday, June 11, 2007 1:55:00 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Wednesday, June 06, 2007

For the past month or so, my internet connection at home has been dropping constantly. There hasn't really seemed to be any rhyme or reason to it either. What's interesting is that one of my neighbors with a similar network setup was experiencing similar behavior.

I decided to take this as an opportunity try out some new firmware for my router (a Linksys WRT54G). I first decided to check for updated official firmware. Luckily enough, there was some updated firmware, though it wasn't what I would call current (i.e. 2005).

Taking a failure to update as a bad sign, I instead took Scott Hanselman's advice and decided to try some alternate firmware. So far, it is working with flying colors and my router suddenly has all sorts of new functionality. It is a little frustrating that the hardware could support this out of the box, but the firmware wouldn't allow it.

Here's what the web administration tool looks like with the DD-WRT firmware installed:

DD-WRT - Setup - Mozilla Firefox

Much snazzier than the "official" firmware.

If you're interested in trying out DD-WRT, look no further than http://www.dd-wrt.com/. I was able to find plenty of resources online for getting DD-WRT working, too. Hopefully, this will fix some of the connection issues I've been having.

UPDATE - Interestingly enough, Lifehacker named DD-WRT their number two network utility of their top 10 network utilities.

posted on Wednesday, June 06, 2007 8:48:04 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Thursday, May 24, 2007

Here's the link: http://worsethanfailure.com/Articles/Film-At-1100.aspx

Wow. We're famous.

My cubicle neighbor pointed it out to me.

posted on Thursday, May 24, 2007 1:58:52 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Tuesday, May 22, 2007

I am nerdier than 74% of all people. Are you a nerd? Click here to find out!

Don't worry, I did this over my lunch break. Because I'm a nerd.

posted on Tuesday, May 22, 2007 11:52:57 AM (Central Standard Time, UTC-06:00)  #    Comments [1]
 Thursday, May 17, 2007

A few weeks ago, I posted on the Stack Style Tabs extension for Firefox. I used it for a little while and I realized that it wasn't exactly what I was looking for... I think it was because I couldn't use my keyboard arrow keys in addition to ALT-TABing around. What I really wanted was a keyboard-centric way to quickly navigate through my tabs.

Today, I was going through my feeds and noticed a post from Lifehacker on a new experimental feature that Google was working on to allow you to navigate through search results using j/k and a few other keyboard shortcuts. My first thought was that this would be great, because I use the provided keyboard shortcuts to navigate through my feeds in Google Reader all the time. Unfortunately, it was a little rough around the edges still.

Then I saw a comment to the Lifehacker post on vimperator. I had seen posts on vimperator before and had even tried it, but it was a little too weird for me at the time. I mean, I still use my mouse occassionally; however, the comment mentioned that you could type :set guioptions=mTs and get your menu and toolbars back.

So I thought, eh, why not. I'll give it a shot again.

So far, I'm liking it.

First off, I'll recommend turning your menu and toolbars back on using the guioptions setting. It makes the transition to vimperator a little easier. Once you've done that, just start browsing.

Here are a couple of my favorite features so far:

  1. If you press f, you'll get Hit-a-Hint like labels pop up on all of the anchor tags which will be numbered. If you press the number in the label, it will navigate to that link. No mouse!
  2. If you press b (comes from the vim idea of buffers instead of tabs), you'll get a list of your tabs! Just press the number and it will open that tab up! Awesome! THIS is what I wanted for a Firefox extension.

Here's a screenshot of it in action:

There are a lot of other options that are probably great, but I still need to spend more time learning them. I encourage you to give it a try, too. Don't worry if it seems a little overwhelming. You can always turn to vimperator's help, which is excellent.

posted on Thursday, May 17, 2007 8:09:49 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Wednesday, May 16, 2007

This post has absolutely nothing to do with anything. Just some ramblings from my brain this morning.

I got to work a few minutes ago and the first thing I do every morning is go pour myself a cup of coffee. The coffee doesn't bother me too much - at least after I pour some sugar and cream in it and it looks more like milk than coffee. However, others at work despise the stuff. It's the typical coffee you might find at any other corporate office... except maybe Starbucks.

That's when the ironic thought hit me.

What if the coffee that Starbucks has for their employees is the same coffee sludge that every other corporate office has? Wouldn't that be hilarious? Wouldn't it be... ironic?

It must be too early in the morning to form coherent thoughts.

posted on Wednesday, May 16, 2007 6:11:43 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Sunday, May 06, 2007

I've already shared with you about how cubicles really can be annoying when you sit next to the loudest two individuals in the world.

Now, I'd like to point you to a video that Long Zheng posted (from istartedsomething) from when Conan O'Brien visited Intel headquarters.

Here are some similarities between Intel and where I work:

  1. Cubicles really are like parking garages, except that you have assigned spots.
  2. Cubicles really don't have much color or individuality (I do have a National Geographic map on my cubicle wall, though - yay!).
  3. People really are picky about their chairs. Seriously picky.

Here are some differences between Intel and where I work:

  1. No cafeteria.
  2. No "ultra-clean" factory.
  3. Hairnets only come into play on Halloween.
  4. I haven't ever seen kids on a field trip, though we do have kids come around our cubes to sell cookies sometimes (and on Halloween).

One other thing - I think I've met Bill Lumbergh's clone in our cubicle farm. I'm guessing any and all work environments that make use of cubes have their Bill Lumberghs.

posted on Sunday, May 06, 2007 8:42:23 PM (Central Standard Time, UTC-06:00)  #    Comments [1]
 Friday, April 06, 2007

I'm sure you've seen this page before:

I've seen a million posts on it, too. Jeff Atwood posted about this problem when he was talking about user-friendly 404 pages. Internet Explorer tries to hide ugly error pages from you unless the page displayed is greater than 512 bytes in size.

I used to have this setting turned off, but my employers recently pushed out Internet Explorer 7 to the corporate masses. I already had it installed, but it apparently went over my previous installation, which means that I lost my previously customized settings. Anyway, I spent about an hour trying to figure out why my IIS installation had CustomErrors turned on for everybody before I realized that it was actually Internet Explorer helping me out.

To turn the setting off, go here:

As Jeff points out, the best solution is to make sure that your error pages are bigger than 512 bytes. Most of the time, ASP.NET error pages are far larger than 512 bytes, too. HOWEVER, error messages from HTTP Remoting* are NOT always greater than 512 bytes and I'm not sure if you can customize those or not. So I like to just save myself the headache and turn this off.

* As a note, a useful tip for debugging HTTP remoting applications is to browse to your registered channel (i.e. http://localhost/remotingEndPoint.rem) with a browser. If there are any problems with your remoting configuration or with your assemblies being loaded, you'll get the friendly ASP.NET error message displayed to you. If you don't get an ASP.NET error, you'll usually get a message that looks like this:

System.Runtime.Remoting.RemotingException: Requested Service not found

It basically means that you're configured correctly and that the server didn't find a service based on your HTTP GET. I prefer checking remoting servers this way because it is easier to read messages in your browser than trying to interpret a binary serialization exception while in your remoting client.

posted on Friday, April 06, 2007 9:31:23 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Thursday, March 29, 2007

If you're not already subscribed to Jeremy Miller's blog, do so now. I'll wait for you to come back.

Okay, now that you've done that, read his latest post on sunk costs and architectural decisions. I'll keep waiting.

Done? Good.

As I was reading his post, I found myself nodding my head in agreement over and over again because I've been dealing with the exact same issues at work for the past few months. Sunk costs are something that every business deals with. A sunk cost is when you've already spent money on something and you later wish that you hadn't spent that money. The Wikipedia example that Jeremy cites of going to see a bad movie is the classic example of sunk costs.

One of the biggest problems with sunk costs isn't the actual cost involved but the fact that as soon as you admit you're dealing with a sunk cost, you're also admitting that a bad decision was made somewhere. This can lead to hurt feelings, hurt pride, etc. Jeremy points out that there can be political implications of this as well. Management will not be happy to find out that this awesome tool that was supposed to bring world peace, cure cancer, and solve the energy crisis actually is too slow for the masses to effectively use. They're likely going to question more than just the tool afterwards.

However, I submit that these same sunk costs can provide an incredible benefit to developers. One of the quickest and most efficient ways to learn is to make mistakes. If you get burned badly enough, you're not going to touch the hot stove again, because you now know that it is hot. If you're the one who is responsible for the bug that cost your company thousands or millions of dollars, will you make that same mistake again? Of course not!

Learn from your mistakes! I've been fortunate to be a part of a similar process and the results so far have been very positive. Our team has really come together and pushed out some really good code that our users are very happy with. Prior to starting the rework, we had all been dreading continuing to deal with the prior version of the product, because we knew we would be spending our time hunting down obscure bugs and hearing complaints from users. The question we continually heard from users was, "why is this better than before?" We hated the question because we didn't like the system either! Now, we can tell them with confidence that our work is without a doubt better and that we're behind it 100%.

From the management side, I submit that managers who give their teams a chance to fix mistakes and start over can gain a great deal of respect from their team. Our manager had ties to the prior system, but he also knew there were problems with it. The system had gone through three different groups before we had ever been given responsibility over it! No one even knew the system anymore! Not only did we come together as a team more, we also became more familiar with the code and were able to really take ownership of it. A positive response to problems or mistakes reflects a real maturity in leadership.

You can treat sunk costs as a straight loss and accept defeat. The better alternative is to treat them as a training expense. The benefits from training are not tangible, but most companies still spend money on their employees because they can become more efficient. Similarly, when we respond to sunk costs positively, they can provide the same kind of intangible benefits as training. Mistakes were made, but mistakes are an opportunity for growth. We all write bad code. Just be sure you learn from it and become a better developer!

UPDATE: Some clarification on sunk costs - a reader pointed out that a sunk cost isn't necessarily a bad decision or mistake, just an unrecoverable past expenditure. I'm no economist, but it seems that the term typically carries negative connotations.

posted on Thursday, March 29, 2007 7:39:07 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Tuesday, March 20, 2007

This is completely off-topic, but I thought it was pretty funny.

I had this past Monday off from work and when I got into the office today, I noticed that I had a voicemail. As a programmer, that usually isn't a good sign, because many times it means a user has tried to call to let you know about a problem. When I noticed the message was left on Saturday morning, that made it seem even worse.

Then I actually listened to the message.

"If you would like to accept this call, please press 3... now."

I won't give you the rest of the message. Needless to say, hearing that prerecorded voice telling me my options for a collect call that I wasn't able to accept made me feel much better about my day.

I hope a user wasn't trying to call me collect.

posted on Tuesday, March 20, 2007 6:09:34 AM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Thursday, March 15, 2007

So, want to improve at what you're doing?

In a phrase, don't stop learning.

In my profession (software development), this is even more important, because the field sure isn't going to wait for you. Jeremy Miller posted about how developers need to get out and "see the world." He was specifically talking about checking out other technologies like Ruby because it can help to see how things can be done differently, but he makes one statement that I liked in particular:

Software development is still a young profession that's in a state of constant flux and it's just not smart to put your head in the sand.

...

Yeah, I know, we all want work to end at 5 pm.  But development is the profession we chose, and if constant learning doesn't suit you, it's time to move onto something else.

This reminds me of a phrase that Scott Hanselman used in his recent podcast on "Hiring and Interviewing Engineers." Here's the relevant snippet from the podcast:

Scott Hanselman: ... I also ask
people about what blogs they read, what books
they read, how do they become lifelong
learners
...

Carl Franklin: Yeah, very important.

Scott Hanselman: ...because it is not that you
want them to be people who are necessarily
working on Open Source projects at night, but
they should be enthused; they should be stoked
about whatever they are working on.

I actually typically use my lunch hour to catch up on feeds, which are an excellent source of continuing learning. As far as books... well, I've got like 5 or 6 at home that I need to read. I still need to work on that.

What are your tips on continual learning?

(man, this post reads a lot like those cheesy "the more you know" commercials from TV... sorry...)

posted on Thursday, March 15, 2007 12:36:50 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Thursday, March 08, 2007

I'm sure I'm the only one that has ever messed up like this, but anyway...

My TV is one of the 30" HDTV monitors. It was cheaper at the time and the box didn't mention anything about it not being a true "HD" TV. In other words, it doesn't support HD without a tuner. Regardless, though, it was cheap and it has a great picture.

Unfortunately, it doesn't have HDMI input, so when I upgraded from the old HD package from Dish Network to their HD/DVR service, the upgraded receiver I got only had component output and HDMI output.

Big deal, right? Surely I can deal with component.

Except that my Xbox 360 takes up one of my component inputs and my Wii SHOULD take up the other component input. I'm out of component inputs.

I did what any other self-respecting geek would do and headed over to monoprice.com, which is by far the best place to get cables or adapters... period. I ordered an HDMI to DVI converter a few days after ordering my Wii component cables. The Wii cables came first, so my 360 was unhooked for a few days while I could enjoy some 480p Wii goodness (it does look better than the 480i with the prepackaged composite cables by the way).

Today, my HDMI to DVI converter came.

And I goofed up.

I ordered the DVI (male) to HDMI (female) converter.

Not the DVI (female) to HDMI (male) converter.

The plugs don't work that way.

*sigh*

What's even better is I didn't realize this until I had already pulled the TV out, unhooked the satellite receiver from the component and rehooked the 360 component back in.

Moral of the story: double check your cables before you buy new cables.

posted on Thursday, March 08, 2007 6:37:08 PM (Central Standard Time, UTC-06:00)  #    Comments [0]
 Friday, March 02, 2007