Thursday, March 31, 2011

Data, there are times that I envy you

Last week I attended a Data warehousing course taught by the Kimball Group.  It was a great course.  Going into it I had only the most superficial of understandings of data warehousing concepts, specifically regarding dimensional modeling, but now feel that I have a pretty workable understanding. I highly recommend the course to anyone interested in the topic, not that Ralph Kimball needs a recommendation from me.

In addition to learning about dimensional modeling, I made another tangential observation.  It felt like data warehousing/business intelligence is largely figured out.  In that course we must’ve reviewed dozens of case studies ranging from straightforward to complex across a range of industries, but all the solutions seemed to break down in to a few well established ‘types’ and patterns, patterns that have existed (evolving) for decades.  My observation may be a bit starry-eyed and I’m not at all suggesting that implementing a DW/BI system isn’t complex and challenging.  Nevertheless it appealed to me, as a developer, because I’ve never gotten that impression from a software training, conference, or seminar.  On the contrary, I find more often than not we’re being introduced to new approaches and patterns suggesting that we should abandon our old way of doing things. Instead of breaking down our application architectures into common types, we’re constantly creating new types and patterns, a pattern/type explosion.

Maybe we need an application architecture toolkit?

Monday, March 21, 2011

Behold, Nappi Sight

When I started the blog I called it “Architecting after the fact”.  It wasn’t a great title but I thought it captured a sentiment.  Whatever business insight, cool tool, new pattern or novel approach came along it would face the reality that it was after the fact.  And being after the fact brings with it a whole slew of considerations beyond whether its “architecturally” good. 

But over time I’ve found this topic to be too narrow, and therefore the title a bit restrictive.  Not all my posts are necessarily about wrestling with retrofitting. Although I do a great deal of that.  Nevertheless, having the luxury of almost no readership makes it as good a time as any to change it.

I toyed with silly titles like “Bloggie Down Productions”, that while its appealing to my nostalgic view of 80s hip-hop, expresses no particular point of view and provides no insight into the content.  I also considered “Lessen Learned”, which at first I thought to be a somewhat cleverish play on words, belittling what I’ve learned or what one could learn from me.  But it’s a bit of a reach and seemed more like a misspelling than anything cleverish.  There were other similar attempts which I don’t care to enumerate. 

Ultimately, I settled on Nappi Sight, just to keep it simple. The fact that its a homophone for NappiSite maintains a modicum of cleverish-ness.

With that settled, now I’m free to over analyze my font choices. 

Monday, March 7, 2011

For easy access, baby

I just made my first (perhaps long over due) contribution to open source.  I created a project on Codeplex called EasyCache.NET.  I wasn’t quite sure what I was doing when I created the project, so I can’t be sure I followed the proper open source etiquette, nevertheless its now available. 

EasyCache.NET is a project with the rather modest goal of slightly improving the manner in which developers can interact with the ASP.NET Cache object.  It grew out of some similar code I had written to simplify a lot of repetitive boilerplate caching code sprinkled around our codebase.  I realized afterwards that it wouldn’t take much effort to genericize it a bit further for general consumption.

The best way to explain what its all about is with the following typical sample, and show how EasyCache simplifies it.

public DataTable GetCustomers()
{
string cacheKey = "CustomersDataTable";
object cacheItem = Cache[cacheKey] as DataTable;
if(cacheItem == null)
{
cacheItem = GetCustomersFromDataSource();
Cache.Insert(cacheKey, cacheItem, null,
DateTime.Now.AddSeconds(GetCacheSecondsFromConfig(cacheKey),
TimeSpan.Zero);
}
return (DataTable)cacheItem;
}

And now the EasyCache way:
public DataTable GetCustomers()
{
string cacheKey = "CustomersDataTable";
return Cache.Get(cacheKey,GetCustomersFromDataSource);
}

Checkout it and let me know what you think.