Monday, April 6, 2009

Pattern for Extension Methods?

The more extension methods I see and write the more I am starting to see a loose pattern forming. If I write an extension method for IQueryable then why not write something similar for IEnumerable. Sure the implementation is different, but from the outside they both feel similar. Take for instance Distinct; why only have that on IQueryable? I ended up writing my own, which was not a big deal, but byt the time I finished all the tests and a quick peer review I had spent almost a 4 hours. Not to metion the email & SharePoint entry to everyone else in the org announcing a new release of the our extensions dll. Not bad, but just distracting. Here is the code for anyone that is interested. Sorry about the formatting, this editor is pretty lame for code.

///
/// Takes a List of type and a function as the key selector
/// and returns a unique list of .
///

/// A class instance that uniquely identifies the current item. Strings work well.
/// The type of items in the target and return lists.
/// The input list. Not changed by this method.
/// The function that returns a KEY that uniquely identifies the current item
/// A list of where every item is unique by KEY
///
/// List<MyClass> aDistinctList = aTargetList.Distinct( i => i.Id);
///

///
///
/// Worth noting that there is a distinct method on the IQueryable<T>, but this does not work
/// on List<T>. This is an entirely different implementation form that method.
///

///
/// The order of the original list is maintained, only duplicats are removed.
///

///

public static List Distinct(this List pList, Func pGetUniqueKeyFunc)
{
if (pGetUniqueKeyFunc == null)
throw new ArgumentNullException("pGetUniqueKeyFunc");

if (pList == null pList.Count == 0)
return new List(0);

var aDistinctKeyHash = new Hashtable(); // the list of unique keys - used for lookup
var aDistinctItemList = new List();

// go thru each item in the source list and get the key for that item from the delegate
// if the key does not exist in the hashtable then add it to the hashtable and the item return list
// rinse - repeat...
foreach (var aItem in pList)
{
var aKey = pGetUniqueKeyFunc.Invoke(aItem);

if (!aDistinctKeyHash.ContainsKey(aKey))
{
aDistinctKeyHash.Add(aKey, aItem);
aDistinctItemList.Add(aItem);
}
}

return aDistinctItemList;
}

eReading

Yes I have a couple of free minutes today. Just clearing some stuff out of my Inbox that has accumulated over the last 5 weeks of pounding out a cool POC.

A bunch of people here at work have bought a Kindle. A good friend uses his for both technical and personal reading. He was about to buy a v1 Kindle and opted to wait for v2. So far he is still on board. It gets me wondering if I would really use one or whether I just like the cool factor.

Honestly, I am not feeling like I would use it very much and it would be relegated to the long list of toys I end up giving away. Why? Because there are very few technical books I actually read cover to cover. I do much more browsing, skipping and flipping all of which just don't work in the e-mediums. I still like the feel of books. I like to highlight and write in the margins. I like to flip through a book I have not picked up in a while and find something new or something I marked up previously.

Take Safari. Every programmer here at work has a Safari membership. Nice. But I just don't use it that much for actually reading books. In fact when I talked to the Safari folks originally; their main use case is not for eReading but rather for finding answers to questions or topics.

My other use case for Safari is what I used to used Borders and Barnes & Noble for - to check a book out before I buy it. This is sweet. First to Safari, then to a discount book seller or Amazon to buy it used (love this).

What I am currently reading

...Pragmatic Thinking and Learning: Refactor Your Wetware

I am only 50% through. No code samples or object diagrams in this book. It's more about how to approach what I do as opposed to specifically how to do it. I like have been thinking more about this myself and am finding this book very interesting.

I liked the book by the same author (with others) called Pragmatic Programmer. Bernie turned me onto that book when it first came out and I recommend it highly. It's still as pertinent as the day it was written.

Twitter

I finally bit the bullet and signed up for Twitter. I have no expectations of finding any value in this, but I wanted to at least say I gave it a try. It's also one of the few networking sites that is not currently blocked by our corporate firewall (LinkedIn is the other one). As a side note, eBay is not blocked either - sometimes I just don't understand the corporate mentality. Like we are buying our office supplies on eBay. Now that would be funny.

Blogging from the Enterprise

I have not blogged in some time and was lamenting the fact all weekend. It's not that I don't want to it's just that I don't know what to say - and I have plenty to say.

When I created this blog (and it's previous incarnation) it was my intention to use it as a public forum for professional things only - little to no personal stuff. At that time I owned my own company and .NET was still in beta; so there was plenty to write about. I did not want to just link to what other people said unless I thought I could add value in some way; whether by commenting or contributing value.

For the last 3 years I have worked for a Fortune 100 (probably lost a notch or two given our current valuation) company and it feels like there isn't much I can write about. So much of what I do can be considered "sensitive" or a "competitive advantage". We are in a highly competitive financal world that is currently under a great deal of pressure (I work for an Investment Mgmt company). Add to this the increase of patent applications and infringement cases and it creates a challenging situation.

I am going to try harder to find the line and just be sure to err on being conservative about what I say. Hopefully it still means something.

Friday, January 2, 2009

Pondering M&M's

I was poking around the 'Net and found several lesson plans posted by teachers/professors for other teachers/professors. And a bunch of them involved using M&Ms as a way to demonstrate/illustrate the concepts being taught. I read a couple of these and actually learned a couple of things. One article in particular got me thinking about something I am observing here at work. The article was on demonstrating the radioactive decay of an isotope. And I am wondering if this is somehow related to the two colors (either red or green) in Holiday M&M's in the following observations...

1) the ratio of red to green as they are pored out of the bag - there seem to be more green
OR
2) the ratio of red to green as they appear to be consumed - people appear to prefer green

Yes, these are deep thoughts indeed.

With regard to the ratio out of the bag there are a few possibilities that come to mind. First is the conspiracy theory; where some bean counter (or m&m counter) figured out that red food dye is more expensive (0r some other reason red cost more) and to save money made less red M&Ms. I like this solution better than they common ploy food manufactures use - where they keep the packaging the same size, put less in it, put some adverb on the packing to make you believe it's a better value and change you the same (or more)!

The second possibility that occurred to me is what if (as my observations above show) people just like green M&M's better so they make more of them. Is it as simple that red M&M's just like black licorice jelly beans - they have their fans - but they are a minority. My mind starts wondering on prejudices and stereotypes from here; I think I will say more on this later...

A third possibility is the chaos/random theory - that my measly sample of 5lbs of M&M's just not large enough to draw any conclusions. This is just not as much fun as some of the other reasons.

Every hear the one about why there are so many socks out there without a mate; it's because socks are actually the larvae form of coat hangers. Which is why you always have so many of those. Could something like that be true for M&M's that the all the red one's have "hatched" and become green ones. I guess the opposite could also be true depending upon the larvae time length.

Lastly, could this all be related to the fact that some time ago there was a red M&M scare back in the 1970's; where (if my recollection is correct) they were pulled from circulation. So now they are back. But have people really forgotten? So are people consciously or subconsciously avoiding the red ones and the manufacturer knows it - so they make fewer of them?

Hmm. Just needed to share some of the scary thoughts that roll around in my mind. I think this is one of those times when sometimes words don't mean anything.

Happy New Year!!

Sunday, August 24, 2008

Is Yukon Cornelius an Architect?


This blog entry has sat as an idea with no text for over a year now. The reason why? I have no idea what an Architect does; I thought I did, but it’s like grabbing a handful of smoke. Reach, grab, and peek inside … nothing – just like Yukon Cornelius. I have considered myself some sort of an architect (maybe not in title but in the role of) for a long time now.

Since I consider myself an Architect; I want to find ways to make myself a better one. What better way than to read and talk to others about their ideas. So I took to reading a bunch of books and articles on this topic. And while they all make pretty good sense; it’s always sense in the pristine context of a book. It’s easy to define something outside the context things like culture, bureaucracy and politics. Sort of like writing code in PowerPoint; code always compiles/works in PowerPoint. When I talk to people they always seem to define what an Architect does as it pertains to themselves or their organization. Turns out organizations are as varied as the description I am working towards.

My current working description for an Architect is; someone that has enough experience to look at a complex problem and see abstractions. Then uses those abstractions to get something done. Note the lack of detail in what is enough experience and the something is. How much is enough? Far be it for me to put down a number. And depending upon the something I may put some other qualifier in front of the work architect; such as “enterprise” or “solutions”. But how many qualifiers do I have to come up with? What if I downsize my something to a piece of code? Since much of coding is about finding abstractions; does that make it an architectural exercise? Nope that’s design. Reach, grab, peek …

So have found the need for an additional definition that is used to help the first. An Architect is someone that gets stuff done at multiple levels in the organization; which means doing some sort of planning (budget, project, envisioning, etc) one minute, setting up a standard for building wizzy widgets the next and finishing off the day with a little code. This definition helps to differentiate pure coding and design from the larger activity of architecture. Architects are expected to some level of design and coding (again meant in a very broad way to include activities like scripting or installing) but they are often meant to do in a way that is not exclusively coding or design. Reach, grab, peek … Better, but notice how long this entry is getting. This is taking way to long!

When talking to people who have no idea what working in the computer field is like; I use an even simpler version of the second definition. I shorten it to be – “I am a guy who gets stuff done” (sometimes substituting another four letter “s” word for stuff). Hey if you can’t easily describe what you do to a total stranger in an elevator ride then you either need to rethink what you are doing or abstract it down to something easier for them to understand. Unfortunately, this abstraction is so abstract that it encompasses everything.

And nothing. Reach, grab, peek …

Guess I need to rethink my career and start staying at Holiday Inn Express to become proficient at something else.

Can You Feel the Vibe?