Tuesday, July 12, 2011

Microsoft Haters vs. Post Sharp

Today at work, I got in a discussion with another developer who "hates Microsoft".  We were talking .NET, and I am a proponent of that technology.  He clearly is not.  For the last few days, I have been working on a project he also works on.  My tasking has included upgrading logging.  Part of that has included going into the code base and putting logging statements at the beginning and, at times, the end of functions.  

Today after work, I went to the monthly meeting of the Huntsville .NET user group (http:.//www.huntug.org).  The presenter was generally talking about Aspect Oriented Programming, and specifically showing the benefits of a single framework:  Post Sharp (http://www.sharpcrafters.com).  The basic pitch is that if you are going to be doing something in a repetitive, predictable way, Post Sharp can automate that for you and clean up your code.    The demo included adding logging capability to an entire .NET assembly by creating a very simple class that overrides two base class methods with one line of code in each override.  The next step was to add a single line of code in an assembly-level file and all functions in the entire assembly now had uniformly-functioning logging on function entry and exit.

Without Post Sharp:

void MyClass::MyMethod()
{
     Trace.WriteLine("Entered MyMethod");
     //Do stuff
     Trace.WriteLine("Exited MyMethod");
}

With Post Sharp:

[Logging()]
void MyClass::MyMethod()
{
     //Do stuff
}

Of course, you also have to write the LoggingAttribute class.  I don't remember the details, and I'm sure this is wrong, but it was something like:

[Serializable]
public class LoggingAttribute : xxxSomePostSharpBaseClass
{
     override SomeEntryFunction()
     {
          Trace.WriteLine("Entered " + args.Functions.Name.ToString());
     }

     override SomeExitFunction()
     {
          Trace.WriteLine("Exited " + args.Functions.Name.ToString());
     }
}

But you only have to write it once, and it can be applied to every function in an assembly, class, or on a function-by-function basis.  Seemed like a nice, useful tool.  

I would have loved it if this developer had come with me, but often we are content to defame something we see as competition rather than spend the time to really consider it an option.  It is our nature - a nature worth fighting.

Sunday, July 10, 2011

Google+ First Impressions

I spent a chunk of the day playing with Google+ while doing a Windows 7 re-install on the kids machine.  My first impression with Google is always tainted with positive bias.  But I love it.  I like the control it gives.  It surely has some rough edges, but it's got some big benefits.  The first one that jumps out at me is farmville.  I like the social interaction Facebook has brought me, but I loathe the forced co-habitation with Facebook viruses like Farmville.  I really hope that Google+ can remain a pure communication hub with the tasteful advertising we get with the other Google apps.

I have not used the video/audio chat features, but I can see them being very useful, especially in a distributed work environment.

Circles.  Well duh.  I love this feature.  But I can also see it getting out of hand.  I have about 50 or so friends on Facebook.  Setting up circles for these friends was trivial.  But I can also see someone having 600 friends with about 40 different circles and the fact that they used circles is foreshadowing - death by Venn diagram.

But the overwhelming positive feature - integration.  Whether I'm looking at my Patrick+ page, my gmail, calendar, or any other Google app - I have integration into the social app.  Hopefully this story gets expanded so that we have more top-bar integration (it would be nice to always see calendar and mail information as well as Google+).  I expect advancement to come with maturing here.  Facebook has no ability to compete here.  Even on the phones Facebook is off playing in its own sandbox.  It's a communication hub with walls.

Sparks are interesting, but I see that being a feature I could easily forget about and end up being wasted real estate.  I have been using them for the last two days though, we'll see if that trend continues.

Saturday, July 9, 2011

Interviews

Recently, I did a few interviews around town, and across the country if you include my Seattle / Amazon interview.  I feel like they went OK.  Not great, but OK.  I'm a great employee based on the satisfaction of my past employers, but don't do great at interviews.  My issue, which leads to my advice, is follow up.  To date, I have heard from one of my interviews (I did about 9).  Some have given me a time table when I can expect to hear back, some have not.  This is very disappointing.  Not that I didn't get offers, but that those loops were not closed.

My advice is this - always close the loop.  Don't leave candidates hanging.  If someone invests their time to come interview, the least you can do as a prospective employer is to close that loop.  There were a couple of places that I was mildly interested in working, but now I have a bad taste in my mouth.  If the answer is no, if the answer is we are considering another candidate, if the answer is we need more time to make up our minds, fine.  Just let the candidates know.

We may not do everything right at Quadrus, but this, we do.  Always close the loop.

First!

I rarely get First! anything on the internet... but I figure I can probably secure the first post in my own blog.  This blog will be a personal journal / software developer journal/commentary.  Feel free to follow me if you want.  I will not be shooting for a target audience with this.  I may eventually separate out a software development blog from my personal one, but for now this one is all I'm doing.