Random Thoughts of a Scatterbrain.
 Sunday, April 02, 2006

NYIAS 2006...Almost Here!

4/2/2006 9:02:50 PM (Eastern Daylight Time, UTC-04:00)

Sooo psyched about the New York International Auto Show this year.

Nissan will have a big show there with the unveiling of the new Altima, among other things.

To get ready for this event, I put together a gallery of the shots from last year's show.

Enjoy!

 Saturday, April 01, 2006

So I've Started the Journey...

4/1/2006 2:05:12 AM (Eastern Daylight Time, UTC-04:00)

A journey of a thousand miles begins with a single step.

Man, I can remember just a few months ago when NHibernate had almost no documentation (and what little it had was terrible).

Now it's a 145-page beast.  Okay, not quite as dramatic as 1000 miles, but still, damn thing took me like 15 minutes to print all of it.  And no way in hell I'm getting a staple through all of the pages.  I kinda liked reading the DLINQ documentation, so I figured it's probably a good idea to reacquaint myself with NHibernate on a more intimate level.

I'm going to try and finish it on the plane trip in and out of Utah next week.  Yah, I'm bringing my camera this time; missed some beautiful scenary last time :-S  I think this week, it'll really feel like I'm working at a new company.  It's been slow going as the company's CEO has been working onsite with a client and the engagement is just ending now.  This means that hopefully, the fun's only starting to begin.

It's 1:04 AM...what am I doing up reading about NHibernate?

 Wednesday, March 29, 2006

Talk About a Culture of Irresponsibility

3/29/2006 4:15:28 PM (Eastern Daylight Time, UTC-04:00)

Wow.  Just wow.

Bush Blames Iraq's Instability on Hussein

WASHINGTON (AP) -- President Bush said Wednesday that Saddam Hussein, not continued U.S. involvement in Iraq, is responsible for ongoing sectarian violence that is threatening the formation of a democratic government.

What?!?  Is he for real?

 Monday, March 27, 2006

NHibernate Back on My Radar

3/27/2006 9:17:17 PM (Eastern Daylight Time, UTC-04:00)

A little more than a year ago, I did my first sample project with NHibernate during some extended down time at Immedient.

At the time, the project was still in the .x releases (I believe I started with .8).  The one thing that really turned me off was the lack of good samples and starting points to learn from (although I did eventually dig up enough info to get my sample project up and running) and, in particular, the lack of strongly typed lists and collections. 

This is a legacy of the Java implementation of Hibernate, which was addressed some time last year with the release of .Net 2.0 and Generics, actually, but I never got a chance to look into it more as the end of the year was a busy quarter for me.

Over the last few days, I've been doing a little bit of studying regarding DLINQ for object persistence (incidentally, I also learned how to do duplex printing with my printer, which was far too confusing).  I recall being quite excited about ObjectSpaces when I was working at Factiva, but I was never able to get my hands on the preview bits.  From what I understand, it was actually very similar to NHibernate in that it required the use of intermediate XML mapping files (although DLINQ also needs those, but only for generating class files since it relies on the use of attributes).

DLINQ is the heir apparent to ObjectSpaces and is superior in every way...it's just that it's still in very early alpha stages and won't be ready for primetime until the release of C# 3.0.  While I love the technology, I'm just not ready to put time into something that's so open to change at the moment.

So, while I would love to implement DLINQ, it just seemed safer to take a second look at NHibernate, at least for the time being.  The last time that I took a look at it was probably around summer of last year, when I implemented a "toy" site for my sister using Cuyahoga CMS (which uses NHibernate).

With that in mind, I came across a very good CodeProject article on best practices for using NHibernate in a web environment.  As soon as I saw the bit about Generics, my interest was piqued again.  I downloaded the source and followed along and, to my surprise, it seems that my earlier frustration with good examples and usage has slowly been counterbalanced by increased usage of NHibernate.

As a bonus, I came across a great set of links and finally took some time to read about Martin Fowler's article on Inversion of Control.  This lead me to two frameworks for implementing IoC in .Net: Spring.Net and Castle/Windsor.  To be honest, I didn't quite "get" IoC and Castle the first time I looked at it (again, when I first started playing with NHibernate).  But I think I'm finally starting to understand it (I won't say I do fully until I use the framework and really "get" it).  I implemented something similar in a small project that I worked on last year at INS/Immedient (probably would have been much easier to use this instead).

The thing is, I've begun to become more and more obsessed with building loosely coupled systems.  So this is just the fix that my brain needed to start thinking about better designs.  Both Spring and Castle seek to address the same issue by utilizing IoC to remove dependencies (see here and here for a comparison of the two, although note that these were written over a year ago and were written by the project leader of Castle).

BONUS: I also came across a blog posting on how to simulate an HttpContext for testing written by the guy that's leading the Subtext project.  This is actually something I had been curious about (but too lazy to do anything about :-D) for quite a while.

 Friday, March 24, 2006

Of Crack and World of Warcraft

3/24/2006 10:51:36 AM (Eastern Daylight Time, UTC-04:00)

No, this post probably isn't what you think it's about.  Yes, World of Warcraft is like crack in its addictiveness and its ability to ruin your life.  One of my college roomates, Joe, has a townhouse around the corner from me (he used to rent from me).  Since WoW came out, he's been hooked on it.  Whenever I go over there, someone in that house is always playing WoW.  It's gotten to the point where the kitchen is a disgusting, festering mess of putrid food and garbage (yuck, the whole first floor smells like nasty).

But anyways, I digress. 

I came across an article on Wired, You Play World of Warcraft? You're Hired!, which recounts the experience of Stephen Gillett an all around successful guy who also happened to be a guild master in WoW.

The article's premise is that playing games like WoW educates players in a way that's more powerful than tradtitional education.  In particular, it provides a sort of deep social education (how to live, work, lead, and interact within a group) that many of the players often cannot experience in real life.

Unlike education acquired through textbooks, lectures, and classroom instruction, what takes place in massively multiplayer online games is what we call accidental learning. It's learning to be - a natural byproduct of adjusting to a new culture - as opposed to learning about.

While Gillett is probably a bad case to use, since he was already pretty successful to begin with, it certainly does raise the question of how learning through immersive gaming can help build skills that translate into real world success.  What's significant is what is being learned, especially at the highest level of the guild.  At the level of a guild master, an incredible amount of things that translate into real world success are mastered and exercised on a daily basis. 

In this way, the process of becoming an effective World of Warcraft guild master amounts to a total-immersion course in leadership. A guild is a collection of players who come together to share knowledge, resources, and manpower. To run a large one, a guild master must be adept at many skills: attracting, evaluating, and recruiting new members; creating apprenticeship programs; orchestrating group strategy; and adjudicating disputes.

Indeed, it can take hours to organize and execute a coordinated raid of 20+ players all over the world.  Regardless of the venue, it takes a great amount of leadership to get any number of people to focus on a common goal and execute it in a timely manner.  Even more impressive is that in most guilds, leadership naturally evolves in the sense that most of these people come together without knowing each other and those with the ability and desire to lead tend to bubble up the chain of control.

The article further brings up a good point in stating that virtual worlds are great platforms for teaching these lessons because the cost of failure is low:

Where traditional learning is based on the execution of carefully graded challenges, accidental learning relies on failure. Virtual environments are safe platforms for trial and error. The chance of failure is high, but the cost is low and the lessons learned are immediate.

Cost of failure is a very real metric.  I think people are often afraid of trying new things or undertaking the journey to learn something worthwhile because of the high cost of "failure" in the real world (I'm certainly no exception; it's why I hate to read books because "what if it sucks?").  At the least, it costs you a lot of time to, for example, learn a new language, that you may never get to use frequently.  At the worst, it may cost you a significant amount of money if we're talking about running a business or making an investment.

When the cost of failure is low, it becomes trivial for anyone to adhere to the old adage, "If at first you don't succeed, try, try again."

As for WoW, my personal impression that the skills to be a successful guild master in WoW (or a clan leader in any other multi-player game) are no different than the same skills that it takes to be a successful project manager or business leader in the real world.  You have to be able to evaluate resources and place them in a position to succeed.  You have to find the right mix of resources (build a well balanced team).  You have to be a skilled people person (well, at least in your online persona) and be able to resolve member disputes.  You have to be able to motivate people by controlling incentives (distributing loot).  You have to have great communication skills and overall great organization skills.

In actuality, this isn't too different from what it takes to be successful at many things in life, including dealing crack.  In Freakonomics, Steven D. Levitt recounts the experience of Sudhir Venkatesh in 1989, then a young PhD candidate in the field of sociology, and "J.T.", the leader of a gang that he stumbled upon.

So how did the gang work?  An awful lot like most American businesses, actually, though perhaps none more so than McDonald's

J.T., the college-educated leader of his franchise, reported to a central leadership of about twenty men that was called, without irony, the board of directors. (At the same time that white suburbanites were studiously mimicking black rappers' ghetto culture, black ghetto criminals were studiously mimicking the suburbanites' dads' corp-think).

Levitt goes into further detail about the incredibly well organized structure of the gang and the immaculate sales ledger that J.T. kept regarding all of the income and expenses of the gang, mostly from selling crack.

In the end, J.T. prevailed.  He oversaw the gang's expansion and ushered in a new era of prosperity and relative peace.  J.T. was a winner.  He was paid well because so few people could do what he did.

"We try to tell these shorties that they belong to a serious organization," he once told Venkatesh.

As is obvious, leadership is a valuable skill, whether it's natural, learned through a proper institution, or acquired through accidental learning.  The interesting question is how well these skills translate into the "real" world of business.  My feeling is that very few gamers will actually make that virtual-real world connection.

It's simply amazing that Joe probably puts in hours of research each week regarding items, weapons, skills, map routes, raids, and so on.  I often wonder what could be accomplished if Joe put the same effort into his personal life as he did into WoW say doing research on SharePoint or .Net.  But then, the learning wouldn't be experiential in nature, so it's hard to say.  I also wonder whether any of these skills can actually be translated into real world success since the whole idea of the online persona is to be someone that you can't be in the real world.

I should also mention that I think that MMO gaming instills a more general type of positive social training that helps even the most rebellious and anti-social of people since, typically, you cannot reach high levels of success in MMO's without the help of a group and you are forced to fall into a social order.  In that sense, it's not much different (and perhaps even more effective since anyone can join) from traditional, contrived, school activities that serve the same purpose like cheering, team sports, debate club, etc.

I don't think Joe believed me when I first proposed to him that MMO's were ultimately about a social experience.  You see, he had started playing the game "solo" and didn't want to be a part of any guild since very few of the group of us that played games together were planning on buying WoW.  This kind of reflects his real life nature in that he has a very close circle of old friends that he sticks with and isn't the most outgoing person (and neither am I, actually).  But now, oddly enough, as I understand, he's one of the higher level leaders of the guild that he's in.

Well, I'm just kind of stammering on now.  So there you have it.  Next time someone makes the obvious comment that WoW is like crack, you can bring up a totally different angle and be a (bigger) nerd.

FYI: I do not play WoW; I tried Guild Wars for a month or two, but I just can't really get into MMOs, possibly due to my INTP personality profile; more likely it's just because I'm even anti-social in my online personas :-D

EDIT: There's some great commentary over at a related thread on Fark, I'll include some choice bits:

AdessoL:

I've been a guild leader in WoW. I've also held assorted real life positions of responsibility. The article has a good point. You need to bring 50 people of all ages and personalities together to perform complex tasks, without any of the typical forms of reimbursement. You can't force people to be there, and you can't really pay them in any way that has an impact in their real lives.

In general, I've noticed that the guild leaders in WoW have to be much more saavy than your 'real life' management. Most of the latter tend to exploit the power they hold over their employees...they know that they can get you fired, affect your pay, make sure you get all the shiat jobs.

In the videogame, you have to be more persuasive. Start bossing around a 15 year old whose never had a real job, and he'll just up and quit. Patronize a 40 year old who makes $100k/yr, and he'll quit. It's a much more individual-based form of management.

Xaneidolon:

Two candidates - all other things exactly equal - apply for a job. One tells me in the interview that he/she can keep a herd of 100 or so online gamers on task and organized for 4-5 hour chunks of time. That's gotta mean something.

ranak:

But irregardless, to do such a thing would take management. And that's what the article is really about. Proper management and people skills. Get the right people with the right mix of talents and you're set.

And if you can do that in the virtual world with jackass 13-year olds that nerf you and then question your sexuality, you can do it in real life.

 Wednesday, March 22, 2006

Random DevTools Entry: #006

3/22/2006 3:32:02 PM (Eastern Daylight Time, UTC-04:00)

While browsing the Dojo Toolkit site today, I noticed their bug tracker.

Hey now, this looks sharp!

Turns out it's this product called Trac by Edgewall Software.  Best of all, it's open source!  Looks good.  I'll have to see if I can convince anyone to use it.

I have to say, I've taken a long look at Bugzilla and the thing that turned me off (I know, it's rather shallow of me) is the sub-par interface.  I guess it was designed to be highly portable across browsers and platforms.  But damn, it looks like they didn't even bother making it a bit more attractive.

The TracBrowser feature is great too!  Code browser, HTML diff viewer, and all hooked into Subversion.  Incredibly awesome.

Maybe it's a good time and incentive to learn some Python

Random link: some Python IDEs reviewed.

(Random) Update: I spent some time whipping together a nifty little Subversion _svn directory cleanup script :-D It's great.  Simply download the file or copy the contents into a new .vbs file.

I've been meaning to do this for quite a while.  It's written in VBScript and based off of another script (which, for the life of me, I cannot remember where the original source is from).  You will need to have Windows Script Host installed (I believe) to be able to run this script.  Simply place it in the root directory of your project and it will remove all "_svn" directories in the context directory (directory you placed it in) and recursively into the sub-directories as well.

There is one confirmation dialog that allows you to change your mind and cancel the deletion if you double click it by accident.

svn_script_confirmation_t.gif svn_script_result_t.gif

Just the thing you need when zipping up and sending a project to someone without a Subversion client installed.

Enjoy!

 Tuesday, March 21, 2006

I Confess...

3/21/2006 9:37:23 PM (Eastern Daylight Time, UTC-04:00)

I'm a code perfectionist.  I like nice code.  Nicely formatted.  Nicely structured.  Nicely designed code.  Of course, first and foremost, the code must do what it is designed to do; it must fulfill its functional spec.  But any programmer worth hiring can make code work.  It's not terribly difficult to hack code together.  But it takes a true craftsman with an emphasis on extraordinary craftsmanship to write good code.

Man, I am looking at some baaaaaad code today.  Ugly.  Let me run down the list:

  • Untyped DataSets?  Check.
  • Poorly named functions?  Check.
  • Poorly named variables?  Check.
  • Cramming all code into one file?  Check.
  • Did I mention poorly named functions?  Double Check.
  • Inline SQL?  Check.
  • Using concatenation instead of StringBuilder?  Check.
  • Useless catch{} statements?  Check.
  • Seemingly random spacing of operators?  Check.
  • Using DataSets where a DataReader would be more performant?  Check.

GaaAAAAaaaAAAAAaaaaaahhhh!  It's seriously killing me to have to mix this code together with mine...I feel the urge to go in there and rewrite every line of it.  Damn, I'm a serious code perfectionist.

I look at this code and I'm reminded of the multi-threaded web server that I wrote when I was in college.  The whole thing was implemented in like, 2 files!  But heck, this isn't college.  I expect good code and good coding practices from the developers I work with.  Or am I wrong to impose my perfectionist attitude on the work of others?  As long as it works, right?

I touched upon my madness in "Letter to a Colleague" (an actual email that I sent to a co-worker) and "On Enterprise Library".  It's disheartening to see code like this; it's actually somewhat painful for me because of "The Perfectionist Plague".  I mean, Enterprise Library isn't the most interesting solution when it comes to object persistence, but it's a "standard" in the Microsoft .Net space and comes with a nifty configuration UI that makes it super easy to use...why do people still resist?

I dunno...I was hoping that I'd get away from these types of bad practices that are common in consulting and large companies.  I had hoped that going to a smaller shop would buy me more influence and a tighter developer community where we could develop to best practices and standards.  I had hoped that it would be an opportunity to not only make cool stuff, but do it "the right way" and write clean, extensible, well partitioned codebases.  I was hoping that I could get the company onto the Subversion bandwagon (it's free, it's fast, and it's more stable than VSS by far).  I was hoping that the developers would be open to object persistence alternatives like NHibernate or maybe EntitySpaces (or, dare I suggest, DLINQ?!? Only in my wildest dreams).  I was hoping that I would meet up with developers interested in design patterns and forming a common design language.

But it's not to be...yet.  Maybe my expectations are just too high.  I know I'm not the best developer in the world (I'm not that egotistical) and I'm certain that many would look upon my work as untidy, but there must be places out there where I'm expected to live up to expectations, not the other way around.

Actually, the worst part of it is that I just don't know how to approach other developers in a way that doesn't make me out to be a total ass (as I no doubt seem like now :-D).  I dunno...I'm not good at making slight hints; I'm just too straightforward and brutally honest.

Sigh :-S

 Monday, March 20, 2006

.Net Blogging Engines?

3/20/2006 5:56:28 PM (Eastern Daylight Time, UTC-04:00)

So far as I can tell, there are only three free, "lightweight", open source .Net blogging engines out there:

  • dasBlog.  This is what my blog is using.  It's okay, but definitely lacking in some respects like proper XHTML markup, database post storage, and available plug-ins.  But it's completely free!
  • Vine Type.  Looks good.  XHTML compliant (very much so that the source is almost not recognizable as ASP.Net source).  Unlike dasBlog, however, Vine Type isn't completely free; it's free for non-commercial use only (which is a very loose term nowadays in the blogging world with the explosion of AdSense supported blogs).
  • SubtextLooks to be the least "feature rich" of the three (but I say this without having actually tried it).  Oddly, it's the only blogging engine whose site is not running off of the engine itself, which is somewhat disheartening.  Also lacking screenshots and examples, which makes it tough to get a feel for the features.

So are there other options available out there in the .Net space?  I dunno...looks incredibly lacking in all directions.

Random link (just because I feel like it, k?): A good discussion on Ruby on Rails and  .Net with some inspired commentary (don't skip the comments!).

Suddenly, the Entire Universe Makes Sense!!!

3/20/2006 5:27:25 PM (Eastern Daylight Time, UTC-04:00)

Generally speaking, I like to keep my political leanings out of my postings, but I'll make a special exception today :-D

Via TheStar.com:

Remember the whiny, insecure kid in nursery school, the one who always thought everyone was out to get him, and was always running to the teacher with complaints? Chances are he grew up to be a conservative.

At least, he did if he was one of 95 kids from the Berkeley area that social scientists have been tracking for the last 20 years. The confident, resilient, self-reliant kids mostly grew up to be liberals.

The study from the Journal of Research Into Personality isn't going to make the UC Berkeley professor who published it any friends on the right. Similar conclusions a few years ago from another academic saw him excoriated on right-wing blogs, and even led to a Congressional investigation into his research funding.

So, which were you and what affiliation are you today?

I'd say that I wasn't very whiny; mostly quiet and introverted all along.  Today, I'm left of middle, not by choice, mind you (I don't go out to label myself).  It's more that my beliefs fall in line with more moderate "liberals".

 Friday, March 17, 2006

Subversion, Apache, Windows, and VS

3/17/2006 2:32:59 PM (Eastern Daylight Time, UTC-04:00)

I've been meaning to try to see if Subversion is a viable version control tool within a group of developers.  I've been using it myself as an alternative to Visual Source Safe about a year ago after stumbling on it while trying to figure out why VSS was killing my projects.

This morning, I finally upgraded my SVN version to the latest release, 1.3, and tried to set up the HTTP access as well.  I had never set up that piece before as no one actually wanted to dip their toes in with me, so there was no need to share access.  After a lot of struggling with Apache 2.2, the latest release, I decided to give up on it.  The current build of the Windows distribution of Subversion 1.3 is incompatible with Apache 2.2 due to the a change in the APR versions (Apache Portable Runtime) from .9 to 1.2.  I was just too damned lazy to figure out how to rebuild the projects :-D Maybe next time.  So I had to settle for Apache 2.0...but all is well now (thanks Nader)!

I plan on putting together a simple workshop for this in the near future as it was terribly difficult to find anything up to date and end-to-end.  Anyways, here are a few good reading points to get started with:

RSS 2.0 Atom 1.0 CDF