Scott Hanselman

Don't Give Bile a Permalink - Finding Balance within The No Asshole Rule

April 29, 2009 Comment on this post [84] Posted in Musings
Sponsored By

I asked on Twitter today if it was "OK to be a dick as long as you were introspective about it?" I received a few responses, including one asking if I'd be more gender-neutral and pick a word like asshole instead. You can't please everyone. Forgive my language in this instance.

There's a lot of discussion on the Interweb right now about an individual in a technical community who used some imagery in a technical presentation at a technical conference that could be described as gender-insensitive. That's a Politically Correct way to say it. Another way to say it is that a guy used a porn metaphor and soft-core porn imagery in a technical presentation in front of a gender-mixed technical crowd.

Boiled down, the issue ultimately was not just about the images as it relates to gender, but rather that the images and the presentation metaphor was simply in poor taste. Certainly, taste in this context is subjective, but it's easier than you think to find the limits of good taste.

Dana Jones had this very erudite comment on a Rails mailing list:

Imagine a presentation about recruiting developers for your firm with the analogous presentation: "Big Game Hunting", replete with pictures of dead animals smilingly displayed by the hunters who killed them. Hunting is a perfectly legal sport and one which I personally have no objections to (just as I have no objections to porn), but do graphic images that will likely disturb at least *some* audience members really have a place?

What about a presentation about writing code on deadline: "Delivering Like a Birth Mom." Or how about graphic images of up-close breastfeeding in a talk titled "Nursing Your Projects Along."

These parallel theoretical presentations of Dana's brilliantly provide the boundaries of good taste vs. poor taste in this context. "I know it when I see it" is a truism. But with all subjective opinion, one man's norm is another's outlier.

That technical community is discussing the issue and working it out. One of the related posts by DHH, the creator of Ruby on Rails - but not the presenter in question - had an interesting post called "I'm an R-rated individual." It's basically a disclaimer/declaration that he's loud and proud and may offend. Some folks believe Rails.equal?(DHH) but that's of course, short-sighted.

This paragraph of David's post is excellent:

Blending like this isn't free. You're bound to upset, offend, or annoy people when you're not adding heavy layers of social sugarcoating. I choose to accept that trade because my personal upside from congruence is that I find more energy, more satisfaction, and more creativity when the bulls**t is stripped away.

A lot of people are talking about personal brand and "image management" right now, and it's easy to say, "oh, so-and-so is a jerk." and write them off. The reason that paragraph is so insightful is because DHH expresses two things. One, he consciously chooses his path. +1 Wisdom there. And Two, he realizes there are consequences...it "isn't free." +2 Introspection. Like a guy/gal or not, but give them credit for deciding to be someone. Feel bad if someone is a jerk and doesn't realize it. I thinking living consciously and unapologetically is to be commended.

DHH's path is not for everyone. It's not for me. I believe one should avoid being overtly offensive whenever possible and appropriate, public or private. I expend a some amount of effort being a consensus builder (perhaps because I'm an ENFJ and DHH is, I'm guessing, likely an ENTP) and I think one can be real without being rude. I encourage others to do the same.

However, it depends on what you feel strongly about and if what you feel strongly about outweighs what you believe others might feel. You need to be yourself, but you there ARE social norms, and others feelings, that should be considered.

@mstum on Twitter said: I'd rather have honest f-bombs than gentlemen hypocrites... Honest and direct people are so much easier to work with.

But can't one be an honest gentleman? Why is online (or offline) use of the F-word and general crassness somehow exemplary of "honesty?" If someone swears and slams their hand on a table in a business meeting I don't immediately think "Whew, finally an honest person!"

Being generally pleasant and helpful isn't sugarcoating, it's being pleasant and helpful.

@David_Ing said: Different worlds I guess. Reminds me of high school. Makes me feel old. Edgy douche is the new cool.

So where does it stop?

I had this conversation with Ade Miller on Twitter:

This may be a generation gap. I'm in my mid-30s and "social internet culture" for me doesn't automatically involve ending online arguments via reductio ad Hitlerum (Godwin's Law). Young people today (get off my lawn!) are largely more comfortable being unapologetically themselves online. I'm of a slightly older Internet generation that doesn't believe everyone is a unique snowflake and that if everyone behaves with a "this is me, like me or leave me alone" attitude then anarchy (ahem, or the internet) will emerge.

People believe strongly about some things and less strongly about others, and you'll never get everyone to agree. I certainly don't promote being a push-over. If something is an injustice, then, by all means speak up. There are some folks in the .NET community that people consider abrasive or have written off as jerks. But see it from their perspective! For them, there is a great injustice, or a number of them, and social norms be damned! I deeply respect this perspective.

For example, my wife is Black. If I post pictures of my wife on my blog, I risk alienating racists and folks against interracial marriage. However, that's a risk (hopefully small) that I'm willing to take, as I certainly feel strongly about it and I think I'm on the right side of history. I'm also a diabetic and I don't hide it. These are stands, small or large, that I'll take, as they are important to me.

You might knee-jerk and think that's a trite example. You might say "we're all too Politically Correct." This might be a true, but just because you want to avoid being Politically Correct doesn't mean you should email me and say, "Hey, how's your Black Wife? How's Diabetes sucking for you? Still blind?"

A question on code comments showed up on StackOverflow this week, and the most highly-voted answer included the F-word. An "Edit War" ensued, with members of the community switching a code sample back and forth between the actual F-word, and various other forms like F*ck, Frick, and Foolish.

I swear occasionally. I can appreciate the F-word as appropriate punctuation while simultaneously realizing its crassness. I don't typically swear in meetings. It's conceivable I would if I could find the right situation. Most everyone who speaks English realizes that the N-word is off limits. Americans also have other words that we Just Don't Use, although the British do. Using them in a meeting is certain death.

The point is that NOT using these words doesn't fundamentally make my life worse. DHH says:

"I find more energy, more satisfaction, and more creativity when the bulls**t is stripped away."

I respect that, and good for folks who agree. I respect everyone's right to say what they like.

If you're a nudist and you give your technical talks on C# naked, I likely won't be there to watch your talk. You may feel REALLY strongly about nudism, and I wish you well. You may believe in the legalization of drugs and prefer to give your technical presentations high, and I say, kudos, but I and others may not show.

There are some social norms, and you should know what they are and know how strongly you feel about them when you take your message to a larger audience. Know that there are consequences when what you value is broadcast in a larger context while promoting a technology. I've lost readers who have said I don't do enough deep technical content, or they find my "intensely personal" posts off-putting, but I'm conscious of my decisions and I feel strongly about the things I choose to discuss on my blog.

I respect DHH's perspective and others like him. Some are concerned that some edgy attitudes are preventing female programmers from embracing programming as a vocation. DHH says:

"You certainly have to be mindful when you're working near the edge of social conventions, but that doesn't for a second lead me to the conclusion that we should step away from all the edges. Finding exactly where the line goes — and then enjoying the performance from being right on it — requires a few steps over it here and there."

Again, another paragraph with layers. He knows where the edge is, enjoys dancing on the precipice jumping back. To dismiss him as merely loud and obnoxious is to do him (and people like him) a disservice.

I have set a level of what I consider reasonable professional conduct both online and offline. You should too. Know what THE edge is, know what YOUR edge is and know the effects of being near both. Decide what you feel strongly about and what you don't. Not everyone has the same norms, but everyone should know what the consequences are and measure them according to their own value system.

The advice that works for me is to avoid giving bile a permalink. Don't be a dick. If you are a dick, you don't get to complain when things go bad for you. There are consequences to all actions and they live on. They live on longer if you give them a permalink.

What do you think?

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

The Weekly Source Code 41 - Searching Code, Sharing Code, and Reading Code (and Comments)

April 29, 2009 Comment on this post [10] Posted in Source Code
Sponsored By

I really advocate folks reading as much source as they can because you become a better writer by reading as much as writing. That's the whole point of the Weekly Source Code - reading code to be a better developer.

Reading code in Open Source projects is a good way to learn, especially if the project has been around a while and been successful, or if you already respect the team of people working on it. Less reliably, you can find snippets of code by searching and sharing code.

Searching Code

There's basically three players in the "Code Search Engine" space. These are the ones I bump into all the time. There could be others.

  • Koders.com (where Phil Haack used to work)
  • Krugle - MSDN is using Krugle to power the MSDN Code Search Preview that searches MSDN Library, MSDN Code Gallery, and CodePlex.
    • (Note, the Krugle MSDN Code Search is going up and down, as it's in preview and they are actively developing it. If you get a login dialog, that's why. Wait a while.)
  • Google Code Search - If you have lots of code on your site you can make its existence explicit to Google by extending your Sitemap to include the CodeSearch extensions. You can also point them to your Subversion repo if it's publically available.
  • Codase - Been around forever, and still up and running, but nothing new on their homepage for 4 years? What's up? Weird. I don't count them as a player, but they were first, as far as I can see.

Searching the web is 99% free text search, as you know. Every once in a while, I'll use an advanced technique like searching with "filetype:ppt" or with a numeric range like "$1500..$3000" but seriously, that's like once in a 100 searches or less. I challenge you if you say you use it more. Free text searching almost always gets it right, unless you're searching for homonyms or something general.

Because free text is so good, while I like the idea of a code search engine and I do use them, I'm not sure if I need anything more than a "code-specific free text search." I personally believe that being really specific in your search query is a really good way to filter your way out of the ONE result you need.

Sometimes, however, when searching code you will occasionally want the advanced techniques.

Here's some examples:

If you're looking for a specific implementation of something, like an MD5 hash or a BTree, these search engines can be really useful. They can't tell you anything about quality though.

Sharing Code

On your blog...

I started using SyntaxHighlighter on my blog for all my code snippets and I'm bummed I didn't start earlier. The best aspect of it is that all my snippets are inside of <pre> tags. That means they're easily indexed and not littered with markup. The syntax highlighting is added on the client side by JavaScript. I use the PreCode plugin in Windows Live Writer and wrote up on I do it on my blog. It's fast becoming THE way to post code inline. I even convinced ScottGu (by doing it for him without asking) to use SyntaxHighlighter when I converted the Nerddinner PDF to HTML.

On the web or via IM...

You know by know that pasting code in an IM window is a recipe for pain, and misplaced emoticons. I use code-pasting services for this instead.

I really like using Josh Goebel's Pastie for sharing code, although he doesn't formally support C# or VB. I'm slowly moving to Gist.Github.com though.

The best social-code-sharing snippet sites are:

  • Pastie.org - Favorite of Rubyists and the "original." Couldn't be simpler.
  • Pastebin.com - Favorite of IRC users and supports C# and dozens of other languages. Also nice because it supports "expiration" of your code in a day or a month. Nice for email or IM.
  • Gist.GitHub.com - Winner for best name, as "Gist" (pronounced "Jist") meaning "Essense" is a great way to express what you're trying to, ahem, express. Just the gist. Supports virtually all languages as well as a "private" option. It also supports versioning, which is unique. This makes sense since Github is a "social source control system." Here's a screencast explaining how this concept can by taking to the next level.

I've had an interesting conversation or two about making sharing code easier with Jeff. We'll see where that goes.

Code Comments

Kind of unrelated, but still fun...I think that every developer should have a blog, or at least an outlet for writing. Those that don't, often use Code Comments to express themselves.

There was a great post at StackOverflow asking for the "best comment in source code you have ever encountered." This, of course, turned into a list of the worst comments ever found in source code, because that's how programmers work, right? Best == Worst. ;) A lot like the Daily WTF.

You can find some interesting stuff if you use the code search engines to search for stuff that shouldn't ordinarily be in code. This guy searched the Linux Source Code for swear words and graphed them over time.

Some other non-explicit examples...

  • Found on Koder's searching for Poop
    ; Poor-man's Object-Oriented Programming
    ;                   or
    ;                  POOP
    (module POOP
       (import Utility)
  • Found on Krugle searching for Mind-Numbing

    // mind numbing: let caller use sane calling convention (as per javadoc, 3 params),
    439 // OR the 2.0 calling convention (no ptions) - we really love backward compat, don't we?

  • Found on Google Search searching for Hate
     # God, I hate DTDs.  I really do.  Why this idiot standard still
     # plagues us is beyond me.
  • Found on Google Search searching for Horrible
     case 'H':
          horrible++;
          break;
  • Found on Koders searching for "God Himself"...not really a comment, but interesting.
     (c.query_gender().equals("male") ? "He" : (c.query_gender().equals("female") ? "She" : "It"))
              + " is " +
              ((c.query_level() == client.WIZ_GOD) ?
                    "the Almighty God himself\n\rBeware of his wrath if you don't follow his laws!" :
                    ((c.query_level() > client.MORTAL) ? "a powerful immortal" : "a puny mortal")))+ "\n\r"
  • Found on Google Search searching for "profoundly bad"
    if isinstance(real_child, SilentMock):
       raise TypeError("Replacing a mock with another mock is a profoundly bad idea.\n" +
        "Try re-using mock \"%s\" instead" % (name,))
  • Found on Google Search looking for "Pure Evil"
     my $db = delete $access->{db};
              # This is pure evil.
              $db->DESTROY;
  • Found on Google Search searching for Poop, but only in Ruby files.
    "Stimpy-drool",
    "poopy",
    "poop",
    "craptacular carpet droppings",

I'm sure if you search, you'll find lots of great stuff in comments, much more colorful than this. For example, the Greatest Code Comment Ever (Line 107) hit tip to Cam Soper:

uint32 sign=[fh readUInt32BE];
uint32 marker=[fh readUInt32BE];
uint32 chunklen=[fh readUInt32BE];
off_t nextchunk=[fh offsetInFile]+((chunklen+3)&~3);
// At this point, I'd like to take a moment to speak to you about the Adobe PSD format.
// PSD is not a good format. PSD is not even a bad format. Calling it such would be an
// insult to other bad formats, such as PCX or JPEG. No, PSD is an abysmal format. Having
// worked on this code for several weeks now, my hate for PSD has grown to a raging fire
// that burns with the fierce passion of a million suns.
// If there are two different ways of doing something, PSD will do both, in different
// places. It will then make up three more ways no sane human would think of, and do those
// too. PSD makes inconsistency an art form. Why, for instance, did it suddenly decide
// that *these* particular chunks should be aligned to four bytes, and that this alignement
// should *not* be included in the size? Other chunks in other places are either unaligned,
// or aligned with the alignment included in the size. Here, though, it is not included.
// Either one of these three behaviours would be fine. A sane format would pick one. PSD,
// of course, uses all three, and more.
// Trying to get data out of a PSD file is like trying to find something in the attic of
// your eccentric old uncle who died in a freak freshwater shark attack on his 58th
// birthday. That last detail may not be important for the purposes of the simile, but
// at this point I am spending a lot of time imagining amusing fates for the people
// responsible for this Rube Goldberg of a file format.
// Earlier, I tried to get a hold of the latest specs for the PSD file format. To do this,
// I had to apply to them for permission to apply to them to have them consider sending
// me this sacred tome. This would have involved faxing them a copy of some document or
// other, probably signed in blood. I can only imagine that they make this process so
// difficult because they are intensely ashamed of having created this abomination. I
// was naturally not gullible enough to go through with this procedure, but if I had done
// so, I would have printed out every single page of the spec, and set them all on fire.
// Were it within my power, I would gather every single copy of those specs, and launch
// them on a spaceship directly into the sun.
//
// PSD is not my favourite file format.

Enjoy your search and read more code!

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Hanselminutes Podcast 159 - IronPython in Action with Michael Foord

April 25, 2009 Comment on this post [5] Posted in DLR | Podcast | Python
Sponsored By

ironpythoninaction My one-hundred-and-fifty-ninth podcast is up. Michael Foord makes his living as a Python programmer. More specifically has an IronPython programmer. He chats with me about his company's use of IronPython, the DLR and why they picked Python over C# or VB.

40% OFF COUPON: Michael's hooked me up with a 40% off coupon for a limited time for Hanselminutes listeners. Just buy the book with coupon code "ironpython40".

Links from the Show

Subscribe: Subscribe to Hanselminutes Subscribe to my Podcast in iTunes

Do also remember the complete archives are always up and they have PDF Transcripts, a little known feature that show up a few weeks after each show.

Telerik is a sponsor for this show!

Building quality software is never easy. It requires skills and imagination. We cannot promise to improve your skills, but when it comes to User Interface, we can provide the building blocks to take your application a step closer to your imagination. Explore the leading UI suites for ASP.NET and Windows Forms. Enjoy the versatility of our new-generation Reporting Tool. Dive into our online community. Visit www.telerik.com.

As I've said before this show comes to you with the audio expertise and stewardship of Carl Franklin. The name comes from Travis Illig, but the goal of the show is simple. Avoid wasting the listener's time. (and make the commute less boring)

Enjoy. Who knows what'll happen in the next show?

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

ELMAH: Error Logging Modules and Handlers for ASP.NET (and MVC too!)

April 24, 2009 Comment on this post [29] Posted in ASP.NET | ASP.NET MVC | Bugs | NerdDinner | Open Source
Sponsored By

Joe Lowrance said, er tweeted, it best when he said,

"the amount of attention ELMAH hasn't got is shocking."

ELMAH is one of those largely unknown and deeply awesome .NET Open Source projects that should be part of ASP.NET proper.

What is ELMAH?

I like to say that ELMAH is Tivo for your ASP.NET Errors. You can get your Yellow Screens of Death, with full call-stack back and analyze what's really happening. It's Exception Driven Development. What's it really do?

Once ELMAH has been dropped into a running web application and configured appropriately, you get the following facilites without changing a single line of your code:

  • Logging of nearly all unhandled exceptions.
  • A web page to remotely view the entire log of recoded exceptions.
  • A web page to remotely view the full details of any one logged exception.
  • In many cases, you can review the original yellow screen of death that ASP.NET generated for a given exception, even with customErrors mode turned off.
  • An e-mail notification of each error at the time it occurs.
  • An RSS feed of the last 15 errors from the log.
  • A number of backing storage implementations for the log, including in-memory, Microsoft SQL Server and several contributed by the community.

Created by Atif Aziz (@raboof on Twitter) and Scott Mitchell, ELMAH means is "Error Logging Modules and Handlers" and has been rocking my world since, well, September of 2004.

(Small Correction, Scott Mitchell helped writing the original MSDN article. ELMAH is 100% conceived of by Atif.)

From the project site:

ELMAH (Error Logging Modules and Handlers) is an application-wide error logging facility that is completely pluggable. It can be dynamically added to a running ASP.NET web application, or even all ASP.NET web applications on a machine, without any need for re-compilation or re-deployment.

ELMAH is wonderful for many reasons. First, because it just works. Second, because it's a fantastic example of effective use of HttpModules and HttpHandlers working together. Third, because it's been design with enough thought that nearly anything you'd want from it for use in a production site is there.

I'm sitting here in a cafe and I'm going to add ELMAH to the ASP.NET MVC-based NerdDinner.com Source Code. Actually, the site, as I don't need to recompile the source if I'm not doing anything tricky. ;)

Implementing ELMAH on your ASP.NET (MVC or otherwise) Site 

I download ELMAH, and I put its DLL in my /bin folder (or wherever you like to put libraries). ELMAH doesn't need to be referenced by your project directly if you don't want to. Ultimately it just needs to be in your bin folder so it can be found. You can put it in /lib and make a build event if you like, as long as it ends up in /bin.

Then I open up two instances of notepad and copy over a few HttpHandlers and HttpModules into my existing web.config. Tedious, but straightforward.

Where you put these depends on if you're using IIS6 or IIS7, but the general idea is the handlers looks like this:


....

....

and the modules looks like this:


...



...

You can pare it down a bit if you don't need ErrorMail, for example. Then, I hit my site at http://localhost:xxxx/elmah.axd and I get this Error log, similar to what you'd see via Trace.axd.

Error log for  on HANSELMAN-T60P (Page #1) - Windows Internet Explorer

Ok, no errors. Let's make some. I'll visit some messed up URLs and intentionally cause trouble...here's what ELMAH says now:

Error log for  on HANSELMAN-T60P (Page #1) - Windows Internet Explorer (2)

And I can drill down and see the Yellow Screen of Death (YSOD) as it "would have been."

Error System.ArgumentException [5] - Windows Internet Explorer

Now, this assumes my ASP.NET MVC site has no error handling to speak of. ELMAH is watching for unhandled exceptions and recording them, holding them in memory. I can also setup logs to SQL Server or VistaDB or SQLLite so they'll live beyond application recycles.

You can certainly secure access to the ELMAH pages. You can also pull the errors into your favorite RSS Reader, which is a killer feature, IMHO.

Making ELMAH work with ASP.NET MVC's "HandleError" Attribute

In ASP.NET MVC there's an attribute called [HandleError] that will grab anything that goes wrong inside your controllers and show the ~\Shared\Error.aspx View. However, because it "handles" the error, it hides it from ELMAH. Remember that [HandleError] is a declarative try/catch. In my case, I want to have ELMAH handle it.

There's two ways around this.

One, I made a method in my Controller like this:

public ActionResult Trouble()
{
return View("Error");
}

In my web.config, I have a customErrors section like this:



This sends folks to /Dinners/Trouble which shows the Error page, after ELMAH takes care of it.

Second, as an advanced technique, I could write my own derived HandleErrorWithELMAHAttribute that logs the error using ELMAH's API, then passes the exception up to the default handler with ASP.NET MVC.

Looks like Dan Swatik's blog is dead. :( UPDATE: Looks like Dan Swatik was coincidentally doing a similar thing error this morning! What's nice about the solution on Dan's Blog, is that it was written with the help of Atif Aziz himself! (Remember, Atif's The primary author of ELMAH!) Here's the StackOverflow question.

My naive solution is below, but Atif's is better as it signals the error to ELMAH's pipeline rather that logging directly as mine does. Here's the more correct version:

namespace MvcDemo
{
using System;
using System.Web;
using System.Web.Mvc;
using Elmah;

public class HandleErrorAttribute : System.Web.Mvc.HandleErrorAttribute
{
public override void OnException(ExceptionContext context)
{
base.OnException(context);

var e = context.Exception;
if (!context.ExceptionHandled // if unhandled, will be logged anyhow
|| RaiseErrorSignal(e) // prefer signaling, if possible
|| IsFiltered(context)) // filtered?
return;

LogException(e);
}

private static bool RaiseErrorSignal(Exception e)
{
var context = HttpContext.Current;
if (context == null)
return false;
var signal = ErrorSignal.FromContext(context);
if (signal == null)
return false;
signal.Raise(e, context);
return true;
}

private static bool IsFiltered(ExceptionContext context)
{
var config = context.HttpContext.GetSection("elmah/errorFilter")
as ErrorFilterConfiguration;

if (config == null)
return false;

var testContext = new ErrorFilterModule.AssertionHelperContext(
context.Exception, HttpContext.Current);

return config.Assertion.Test(testContext);
}

private static void LogException(Exception e)
{
var context = HttpContext.Current;
ErrorLog.GetDefault(context).Log(new Error(e, context));
}
}
}

Below is my naive version.

I made this HandleErrorWithELMAHAttribute:

public class HandleErrorWithELMAHAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
try
{
var context = HttpContext.Current;
Error error = new Error(filterContext.Exception, context);
ErrorLog log = ErrorLog.GetDefault(context);
string id = log.Log(error);
}
catch (Exception localException)
{
//
// IMPORTANT! We swallow any exception raised during the
// logging and send them out to the trace . The idea
// here is that logging of exceptions by itself should not
// be critical to the overall operation of the application.
// The bad thing is that we catch ANY kind of exception,
// even system ones and potentially let them slip by.
//

Trace.WriteLine(localException);
}

base.OnException(filterContext);
}
}

Then I put the attribute on my ASP.NET MVC Controller like this:

[HandleErrorWithELMAHAttribute]
public class DinnersController : Controller {
...

Either way works, I actually kind of prefer the first one, although it requires a controller to have an essentially empty method to send folks to the shared error page. I keep the /Confused and /Trouble methods in there as I think it makes the site more personal.

Anyway, ELMAH rocks and you should use it today. Phil Haack loves ELMAH too! Jeff and the guys at StackOverflow use ELMAH also, albeit a "custom fork." (Release your code, Jeff!)

Time for me to to donate some money to the ELMAH Open Source efforts.

Related

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Paint Fence, Cut Wood, Pull Weed, Plant Tree - Finding Geek Balance Outside My Comfort Zone

April 23, 2009 Comment on this post [39] Posted in Musings | Personal
Sponsored By

Please forgive me this personal excursion. I had lunch with my friend Greg Hughes yesterday. It's nice when people know you well enough to really grok when something significant happens in your life. The opening part of the conversation at lunch, in person, went something like this

Greg: Hey, great to see you, what's up?

Me: D00d. I bought wood. Like, literally went to the, what's it called? The Lumberyard and purchased actual lumber. Like, trees. Then I cut them.

Greg: Holy crap. What brought this on?

...and the conversation continued in this general vein. He understood immediately. I'm finding balance by moving outside my comfort zone. I'm trying to become "handy" around the house. My previous handy experience was tiling my kitchen backsplash, and this required that I use actual lasers to succeed.

What you need to understand, Dear Reader, is how profoundly not-handy I am to appreciate what I'm trying to do here. My father and brother are handy. I am not. I am not handy in the way that short people are not tall. They aren't. It's just so.

I have never had a hobby that didn't involve computers. This is sad, I know.

I've talked before about how it's important as a Developer to Sharpen the Saw. This is an extension of this. Go outside your comfort zone. I

I try to travel a lot, meet different people, speak their language as a way of going outside my comfort zone. Of course, I speak about computers, so that kind of cancels that out, eh? ;)

Empowerment

When I speak to high-school students and local colleges, I tell them that I like software because of the intense sense of empowerment - the sense that I can do this - it can give you when creating. It seems silly and obvious, but I realize more now that other things can empower oneself. I intellectualized this long ago, but internalized it only recently.

Here's what I'm doing this year to push the envelope for me. This may not make me a better developer, but I hope it'll make me (and subsequently my kids) a better, more well-rounded person. Maybe that'll make me a better developer in some round-about way. I dunno, but I sure feel handy and empowered but in a new an different way.

Planting a Square Foot Garden

IMG_0136 One day, last week, it was sunny in Oregon. I looked at the strange yellow ball in the sky and grunted and then I went and bought lumber. I figured this is what people do when it's nice out. I've talked about a garden in the yard for years. This time, I made one.

I got 9 2x12's, and 3 4x4's. The first thing I learned was that 4x4s are in fact not four inches square. Turns out the whole inches thing is just a big lie in the wood world. This was news, but now I feel informed. :)

I ordered the dirt/compost, almost broke myself unloading two yards (not sure why it's called yards, but it was a trailer-load and a lot) and last night we planted our vegetables.

Being Handy Around the House

When I get in over my head with home improvements and things, I usually call my family or a handyman. I've stopped doing that, setup a toolbox and work area and started drilling holes in the wall. I've painted/stained 400 feet of fence, weeded until my hands hurt, and moved giant rocks, all in the last two weeks.

I'm starting to get ideas for other things I want to do around the house. Why, just today, I added two small towel holders in the upstairs bathroom. Changes the whole room, I say! And, as a plus, I did not electrocute myself.

Building an Arcade Console

IMG_0036I checked on Craigslist and found an ancient 1984 Video Trivia Arcade Console. With my friend John Batdorf we took it to the garage and gutted it. I'm putting a PC inside it, and maybe an Xbox and dubbing it the Hanselcade.

This is yet another project that I'd always meant to do, but hadn't because it seemed too large, too complex, too intense to attack. I can attach large, complex and intense computer problems, but this...this was physical.

But, I'd cut wood! I'd planted plants! I just did it. I took uncomfortable action and I started to make plans. What's nice about this project - all of these, in fact - is that they are large, but they can be broken up and aren't time-urgent.

It also kind of involved computers, indirectly, in that there's a computer inside. However, stuff like hooking up LEDs, buying resistors, drilling holes in steel and keeping the whole thing stock and clean - this is all outside my zone of comfort.

The Point

I'm learning, as I always am, but I'm exercising VERY different parts of my brain. I'm reminding myself of things I'd forgotten, and filling in gaps. I'm synthesizing bits of information that I'd thought unrelated into larger solutions. I'm getting a substantial and ongoing sense of satisfaction. I'm realizing that I can be good, well, adequate, at other things that aren't computers.

If there's something you've been meaning to do, especially if it's outside your expertise, go do it now. Pull a weed. Build a fort. Start a blog. Lift a weight. Maybe two.

This must be what having a hobby is like! Ah, to be well-rounded and balanced.

Related Posts

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook bluesky subscribe
About   Newsletter
Hosting By
Hosted on Linux using .NET in an Azure App Service

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.