Programming, Policitcs, and uhhh Pineapples.
# Monday, August 24, 2009

Rental Car Diaries

Monday, August 24, 2009 11:34:00 PM UTC

Being a consultant means traveling from time to time (or all the time).  Since May, I've been traveling to Boston on a weekly basis and I've had a variety of cars.  Oddly enough, my favorite car has been a Hyundai; they've really come a long way.  Here's my list of rental car reviews, ranked by preference.

  1. Hyundai Elantra *****.  By a close margin, this has been the best rental I've had.  I've gotten these twice and each time, it was a pleasant surprise (although the second time, it was because it smelled like the previous driver was delivering pizza in it all week).  To begin with, Elantras have perhaps one of the best headrests I've personally used.  It moves up and down like most headrests, but unlike others that just tilt forward, it actually slides forward.  Perfect seating posture for me.  The fit and finish on the interior is excellent with very rich feeling materials and soft plastics.  Driving dynamics were so much better than anything I expected.  Sure, you're not going to be autocrossing in one of these guys, but it handles nicely enough for commuting and the suspension is great when it comes to absorbing bumps.  The transmission also does a good job and gear hunting is relatively minimal.  To top it all off, I was able to plug in my Sansa Clip using a USB cable and the radio automatically recognized it and loaded my play lists.  Awesome!  The radio controls actually control the MP3 player.  Finally, this has been the only car that I've had with auto down and up windows (great for toll booths).
  2. Ford Mustang ****1/2.  I have to admit, this car was: 1) incredibly uncomfortable, 2) hard to find a good seating position in, 3) difficult to get in and out of, 4) had terrible button/control layouts in the center stack, had those silly Ford light controls (on a knob...).  And yet, despite all of that, it's a great rental car because you just feel like such a badass driving one.  I'd never buy one myself, but it's great fun for a rental.  That said, from the driver's seat, I swear, it feels like you're driving a boat; the thing feels huge.  The V6 engine also seems a bit underwhelming considering the sporting nature of the vehicle.  While the Elantra wins hands down in terms of ergonomics, build quality, and fit-and-finish, the Mustang makes up for its shortcomings by being badass. 
  3. Chevy Impala ***.  The Impala was mostly a forgettable vehicle.  The fit-and-finish were certainly nice enough, but the seat was flat as a board and difficult to get comfortable in.  It's ony ranked this high because the other vehicles are so terrible.  Truth be told, if I had one of these as a rental?  I'd probably ask for a downgrade to an Elantra instead.
  4. Saturn Vue **1/2.  I just had this one last week.  Like many American cars I've driven, the Vue suffers from terrible steering feel.  The wheel feels very loose and the steering effort seems to be way too light for my tastes with a lot of play on-center.  Despite the big exterior size, its interior size seemed underwhelming.  Speaking of underwhelming, the engine was clearly working overtime to move the mass of the Vue; it felt lethargic and the transmission was constantly hunting for gears.  If I were in the market for this type of vehicle, I'd probably go with a Rogue instead.  Overall, an underwhelming vehicle.
  5. Subaru Forrester **.  The Forrester has some redeemig qualities like having AWD, which would be great in the winter, and a spacious interior.  Aside from the chintzy, cheap looking/feeling, plasticky interior, there's not much to hate...but then again, there's not much to love either.  On top of all that, you're driving a station wagon.  It doesn't get much lamer than that :P  Oh yeah, the engine was grossly underpowered.
  6. Toyota Corolla *1/2.  This was the first time I'd driven a Toyota Corolla and to be honest, I don't get it.  I was expecting so much more from this car, but it was so disappointing in every respect from the cheap, dark, dingy interior to the forgettable...everyting.  If you're in the market for one of these, the Elantra seems like it would be a much better buy.
  7. Nissan Versa *.  Okay, I'll admit: I'm a Nissan guy.  My mom had a Sentra and then a Maxima.  My wife drives a Murano and I drive a Frontier.  If I had the extra money, I'd by a 370z and a G37x and switch them up for my daily commute (if I had one).  But there is nothing redeeming about the Versa.  The interior was not only dingy, it looked positively industrial and completely uninviting.  Like the Corolla, it was mostly a forgettable car.  If I were in this market segment, I'd probably get a Hyundai Accent or a Kia Forte.
  8. Kia Rondo *.  Maybe I'm just holding it against this Rondo, but the one I have this week is dirty and stained inside.  If I had the patience, I probably would have asked to trade to an Elantra.  Aside from that, being a tall wagon, it looks particularlly lame.  Its one redeeming quality is that its A/C is super frigid.
  9. Dodge Caliber 0*.  Lame. Terrible.  DO NOT WANT.
  10. Pontiac G6 -1*.  Perhaps the Pontiac doesn't deserve this hate, but the week that I had it, it was basically pouring every day of the week.  Unfortunately for me, the key fob was broken and I wasn't able to remotely open the door.  This lead me to discover that the G6 didn't have a very basic feature: the ability to unlock all of the doors by double turning the key in the driver side door (bonus level of suck: no key hole on the passesnger side).  This made it extra hard to get my stuff in and out of the car...while it was pouring.  I can't figure why they wouldn't have this very basic feature, but it was a terrible week without it as I constantly had to unlock the rear door from the inside.

This post was partially inspired by Autoblog's spyshots of the upcoming Sonata (another very nice rental).  Hyundai has seriously come a long way since my '98 Accent.  Hopefully, the Consulting Gods will look kindly upon you the next time you have to travel for business (and rent economy) and bless you with an Elantra!

# Thursday, August 20, 2009

Thoughts From The Trenches (Giant Brain Dump Incoming!)

Thursday, August 20, 2009 1:16:44 AM UTC

A random assortment of random thoughts (and rants!) from the trenches...

You Know You're In Trouble When...

  1. You have to convene three people to figure out how to create an instance of one of the core objects in your framework.  I think this is directly related to having an anemic domain model - it just isn't obvious which "service" you should be calling to set the properties on the object.  It seems like the whole thing would be easier if you could just call the constructor or a static initializer on the class to get an instance; this is the most basic premise of an object oriented system (and one that gets thrown to the wayside much too often).  Constructors are the most natural way to create an instance of an object; why not use them?
  2. Your team members are afraid to update their code (in fact, they'll wait days before updating because it's always a painful, time-consuming excursion to get your codebase compiling not to mention your environment working afterwards).  This could be a symptom of many different ills.  In this case, the problem is three fold:
    1. The source control system is painful to use.  The culprit is Accurev; it is perhaps one of the worst source control systems I've ever used (not to mention it's very obscure and uses obtuse terms for common source control actions).  A quick search on Dice yields 6 results for the keyword "Accurev" while "svn or subversion" yields some 786 results.  Of course, the big problem with this is that it takes an extraordinarily long time to ramp up a new addition to the team to the peculiarities of the source control system.  (I still haven't figured out how to look at changesets, run "blame" on a file, and why it's so slow...)
    2. There are no automated unit tests for the most basic and important of functionality: data access code.  The lack of a structured way to unit test your core data access code makes the entire codebase seem....fragile.  Changes in code that are not regression tested tend to break things, which tends to ruin productivity.  I can understand not testing code that is dependent on external libraries which are difficult to test (it really requires a lot of thinking and work to do right), but I can't understand why any team wouldn't test their core data access code.  
    3. There is no software support for tracking breaking changes.  What I mean by this is, for example, changes to a database schema or a stored procedure.  The standard way some teams "resolve" this issue is by emailing people when a breaking change is entered.  However, the problem with email is that it's easy to forget someone and, even if you remember everyone, it's not easy to backtrack and find all of the different email notices.  For example, if I'm in the process of writing an intense piece of code, I'll ignore a breaking change and deal with it the next time I update.  But by that time, there could be two or three breaking changes.  It's difficult to sort these out in email and much easier to sort them out with some pretty basic software support.  On FirstPoint, we used a Trac discussion to track breaking changes.  Developers checking in breaking changes were required to document the steps that the other developers would need to take to ensure that the environment remained stable.
  3. You're worried about deadlines, but you roll off two people who've been working on your project for two years and replace them with one person who's been working on the project for two months.  Fred Brooks' The Mythical Man-Month covers this pretty succinctly:

    adding manpower to a late software project makes it later
    The problem is that the new resource cannot possibly have the richness of experience with the existing codebase that is require to be productive right away.  In a system that's sparsely documented (and by that I mean there is no documentation on the core object model), it means that a new developer has to interrupt the workstream of more seasoned developers to get anything done.  This is probably okay when the going is slow and steady, but in crunch time, this becomes a big productivity issue.  I know I hate being interrupted when I'm in the zone, so I personally hate to interrupt others, but in this scenario, I have no choice since there is no documentation, the codebase is huge, and it's not at all obvious how to get the data that I need.
  4. When there are multiple ways to set the value of a property on a core object in your model.  What I mean by this is say I have an object called Document and somehow, there were two or more ways to set the value of VersionId (and each way getting you a different type of value) when you use a data access object to retrieve an instance.  Again, this is a byproduct of an anemic domain model.  Because the rules of how to use the object are external of the object itself, the proper usage of the properties becomes open to interpretation, based on the specific service populating the object. 
  5. Your object model is littered with stuff ending in "DAO", "Util", "Service", or "Manager".  It means that you haven't really thought about your object model in terms of object interactions and the structural composition.  These are suffixes that I use only when I can't think of anything better.  More often than not, when I write these classes, they truly are utility classes and are usually static classes.  If this is a big portion of your codebase, you have some serious problems.

You Can Make People Productive If...

I think the role of any senior developer, lead, or principal on a project is not to watch over everyone's shoulder and make sure that they are writing good code.  I've learned pretty early on that this doesn't work; you can't control how people write code and if you try to, you'll just get your panties in a twist all the time, raise your blood pressure to unhealthy levels, and piss off everyone around you.  So then the question is how can you get a group of diverse individuals with a diverse level of experience to write consistently good code?

It's a hard question and one that I'm still trying to answer.  However, I've learned a few lessons from my own experiences in working with people:

  1. Make an effort to educate the team.  This means reading assignments, group discussions, and making learning a basic requirement of the job, not an optional extracurricular activity.  Pick a book of the month and commit to reading a chapter a day.
  2. Have code reviews regularly.  One of the surest ways to help get everyone on the same page is through code reviews.  The key is to keep it focused and not let the process devolve into a back-and-forth debate regarding the little things, but rather focus on the structural elements of the objects and interactions.
  3. The smartest guys on the team work on the most "useless" code.  What I mean by "useless" here is that the code doesn't yield immediate benefits; in other words, framework code.  Typically, this involves lots of interfaces, abstract classes, and lots of fancy-pants design patterns.  The idea here is to make it easy for the whole team to write structurally sound code, regardless of skill level, by modeling the core interactions between objects and the core structure of the objects.  I think a key problem is that project managers see this as a zero-sum activity early on in the game (the most important time to establish this type of code) when in reality, it usually returns a huge ROI when done with the right amount of forethought and proper effort to refactor when the need arises.
  4. Document things...thoroughly.  One of the easiest ways to mitigate duplication and misuse is to use documentation in the code.  For framework level code, it's even more important to have solid documentation about the fields, what type of values to expect, how the objects should be used, how instances are created, what special actions need to be performed for cleanup, etc.  Documentation done right can also help improve code consistency if you add examples into your documentation.

Writing good code is productive.  It becomes easier to maintain, easier to bugfix, easier to ramp up new developers, easier for one developer to take over for another, and it means a generally more pleasant and insightful workday, every day.  Which brings us to...

Sound Software Engineering Is Like...

Exercise!  Project managers seem to lose this very basic insight when they make the transition from a developer.  Like exercise, it's always easier to put in the effort to do it regularly and eat a healthy diet than to wait until you're obese and then start worrying about your health and well-being.  Sure, it feels like hard work, waking up at the crack of dawn and going out into the rain/snow/dark, eating granola and oatmeal, skipping the fries and mayonaise, but it's much easier to keep weight off than to lose weight once you're 200lbs overweight! 

Likewise, it's always going to be easier to refactor daily as necessary and address glaring structural issues as soon as possible than to let them linger and keep stuffing donuts in your face.  It's like carrying around 200lbs of fat: you lose agility, it becomes difficult to move, everything seems to take more effort - even simple things like climbing the stairs becomes a chore.  The lesson is to trim the fat as soon as possible; don't let serious structural issues linger -- if there's a better, cleaner, easier way to do something, do it that way.  Every excuse you make to keep fat, ugly code around will only make it heavier and harder to maintain.

How To Reinvent The Wheel...

It seems like a pretty common problem: a lead or architect doesn't want to use a library because it's not "mature" enough.  What this means, exactly, still baffles me to this day.  Mature is such an arbitrary measure that it's hard to figure out when software becomes mature.  What this usually leads to is reinventing the wheel (several times over).

When evaluating third party libraries, I really only have a handful or criteria to consider whether I want to use it or not:

  1. Is it open source and is the license friendly for commercial usage?  I'll almost always take a less feature-rich, open source library over a more complete licensed library.  The reason is that there's less lock-in.  I won't feel like I've just wasted $1000 (or whatever) if I encounter a scenario where the library is insufficient or plain doesn't work.
  2. Does it have sufficient documentation to get the basic scenarios working?  This is perhaps the only measure of "maturity" that matters to me.
  3. Does it solve some scenario that would otherwise take the team an inordinate amount of time to impelment ourselves? I hate wasting time duplicating work that's freely available and well documented with a community of users who can help if the problem arises.  And yet, time and time again, there is no end to the resistance against using third party libraries.  Part of it is this very abstract definition of "maturity" (objections by technical people) and part of it is a fundamental misunderstanding and general laziness about different licensing models (the business folks).

That's it.  I don't need the Apache software foundation to tell me whether log4net is mature or not.  I look at the documentation, I write some test code, I use it and I evaluate it, and I incorporate it once I'm satisfied.

Software Estimation And Baking Cakes...

Fine grained software estimation is most assuredly the biggest waste of everyone's time.  Once it comes down to the granularity of man-hours, you know that someone has failed at their job since there is no way to even quantify that level of absurdity.  Once you start having meetings about your fine-grained estimates that pull in all of the developers, then you really know that you're FOCKED.

If I handed you a box of cake batter and asked how long it would take you to bake the cake, you'd probably take a look at the directions, read the steps, and estimate how long it would take you to perform all of the steps and add the baking time and come up with 50 minutes.  Okay, we start the timer.  You're off and cracking eggs and cutting open pouches and what not.  But wait, your mother calls and wants to talk about your trip next week.  -5 minutes.  You open the fridge and find that you're half a stick of butter short so you run to the grocery store.  -30 minutes.  Oh shoot!  You forgot to pre-heat the oven.  -5 minutes.  Finally, you've got the batter mixed up and ready to bake.  The directions say to bake for 40 minutes but you've already used up 40 minutes and only 10 minutes left of your original estimate: now what?

Well, you could turn up the heat, but that'd only serve to singe the outside of the cake while leaving the inside uncooked.  You could just bake it for 10 minutes, but your cake would still be uncooked -- but hey, you'd meet your estimate.  More likely than not, you'd just bake the cake for 40 minutes and come in 30 minutes late since late, edible cake is better than burnt or mushy cake.

Software estimation is kinda like that (and look, in the case of baking a cake, all of the directions and exact steps are already well defined and spelled out for you -- writing software is rarely so straightforward).  It's mostly an exercise in futility once it becomes too granular since there are just too many variables to account for.  The answer -- if it must be implemented feature complete -- is that it's going to take as long as it's going to take (and probably longer!).  For most non-trival tasks, I feel like the only proper level of granularity is weeks.  Don't get me wrong, I'm not saying that you shouldn't estimate, but that you should estimate at the right level of granularity and accept that once you've reached your estimation and the work isn't done, your only real choices are to:

  1. Extend the deadline.
  2. Trim the unnecessary features.

So that's it; feels good after a brain dump!

# Monday, June 22, 2009

Where (Most?) Zombie Movies Go Wrong

Monday, June 22, 2009 1:14:45 PM UTC

As I was watching Diary of the Dead last night (I don't know why...I just have this thing for zombie movies), about half ways through the movie, it suddenly dawned upon me that none of the characters had uttered the word "zombie".  While the movie had many failings - the standard "Stupid Things People Do in Horror Movies" scenarios and taking itself too seriously - I felt that this was the most glaring one.  It's as if none of the characters had ever watched a zombie movie and didn't know the standard operating procedures with regards to zombie movies.

# Monday, January 26, 2009

Battling Heroin in Afghanistan, Chinese New Year, Work, and Family

Monday, January 26, 2009 3:04:24 PM UTC

Heroin in Afghanistan

A cool story on how some enterprising individuals are working to battle the heroin trade originating in Afghanistan:

A former homeless drug abuser from Swindon is the unlikely champion of an initiative that aims to fight Afghanistan’s vast narcotics economy – with fruit juice.

James Brett, 39, who once spent a year living rough before becoming a fruit juice magnate, is behind a scheme that aims to replace opium fields with pomegranate orchards.

Mr Brett’s scheme will begin in March with 100,000 pomegranate saplings in the eastern province of Nangahar. He hopes eventually to plant 175,000 hectares (432,250 acres) of orchards across the country.

This is all sorts of awesome (well, because I love pomegranates :-P)!

Chinese New Year!

Happy Chinese New Year! (Year of the Ox)

Work

I've been working through Eric Brechner's I.M Wright's Hard Code.  I'll have more on this in the coming weeks as I continue to digest the awesomeness of this book.  Excellent pieces on software engineering and dealing with the mess of it all.  Highly recommended reading.  I finished this up on my trip to Taiwan...

Family

It's been a long 2009 for me already.

My grandmother passed away near midnight on January 8th.  It's kind of strange, I wasn't all that close to her, but in the aftermath of my weeklong trip to Taiwan to attend services, I feel a sudden sense of emptiness.  It's a sort of spiritual/cultural/familial emptiness...an uncertainty about the future of my ties to Taiwan and to my family there. 

I was quite surprised that my family wasn't as emotional as I would have expected; but then again, to reach the ripe age 88 is not a terrible fate.  It was quite sudden for my grandmother, who was about as energetic and lively as a 8 year hold hopped up on a few bottles of pop.  My goodness, you would not believe the copious amounts of food that she could consume for a frame no bigger than 5' (maybe).

She was from a different generation, a generation that saved every yuan, ate every last grain of rice, and lived simple, disciplined lives.  She was stubborn to the end, from what I heard from my aunts, but it was her way of expressing her love for her family.  I think the following phrase best summed up her view of her matriarchical role:

The true meaning of life is to plant trees under whose shade you do not expect to sit.

-- Nelson Henderson

So I've been pretty depressed through all of this.  The Chinese place great emphasis on the family name and as the only son of her only son, it seems that the tradition of the Chen family will end with me as my children will surely grow up as Americans who may never really connect with their Chinese heritage.  I have an itch now to sell my house, store most of my stuff with my mom, and move back to Taiwan for a few years to better learn Chinese (I'm conversational on a 3rd or 4th grade level), get to know my aunts and cousins, and enjoy the awesomeness that is Taiwan.

For now, it's just a pipe dream.

# Wednesday, August 27, 2008

Four More Months!

Wednesday, August 27, 2008 1:52:41 AM UTC

Four More Months!

# Tuesday, August 19, 2008

Obligatory Birthday Post

Tuesday, August 19, 2008 3:04:02 PM UTC

It's mah birfday!

# Monday, August 04, 2008

What Working With Python Has Taught Me...

Monday, August 04, 2008 2:25:11 PM UTC

I've been working with Python for the last few weeks on a pet project that I have going on.  I've been using PyDev with Eclipse and using Django as the application framework for this web app.  Part of it is because I'm kind of disillusioned with ASP.NET (Django is very clean, out of the box) and part of it is because it's a challenge and it's been fun to switch gears away from the daily grind.

If there is one lesson I've learned, it's that Microsoft developers are spoiled rotten.  Visual Studio is such an excellent development environment with so much flexibility that it makes it so easy, that perhaps there are more .NET developers than should have a right to call themselves professionals.  Switching to Eclipse has been a revalation in what I've been missing since I've started using Visual Studio and ReSharper.

I know this feeling; it's the same feeling I had when I was in college, writing Java in vi and emacs.  No drag and drop (not that I use this much in VS anyways as I've almost completely sworn off control based ASP.NET development).  No hand holding.  It's a raw and visceral programming experience.  It's hard to explain; it comes out kind of like a knock against Eclipse and PyDev, but a more fitting comparison is like the difference between shooting a semi-automatic rifle and a bolt action rifle; there's just something about the bolt action that makes the experience much more enjoyable.

In truth, it's been very challenging and not at all easy to transition.  At the same time, it's been fun and rewarding.  While I feel less productive with Eclipse at the moment due to the newness of it all, I do feel more productive with Python and the runtime interpreter than C#.

I've come to find that Django, while much, much better than ASP.NET in some respects, lacks a lot of the conveniences and facets that I've come to expect from a modern web framework like a rich and easy to use, out of the box JSON serialization library or pattern (it'll get there some day).  ASP.NET makes this nearly painless while the JSON serializer which ships with Django isn't really suited for working with arbitrary objects (I've been using jsonpickle instead).  PyDev and PyDev Extensions are also no match for ReSharper (I dunno, as a random guess, I would say that R# affords a 30-40% improvement in productivity).

So, that's the story so far.  Perhaps when I have more time, I'll round up some of the resources I've used to ramp up on Python development.

# Friday, August 01, 2008

How Not To Get Hired For A Tech Job

Friday, August 01, 2008 8:04:00 PM UTC

Once in a while, I toss my resume out there on Dice to see what the market's like and what opportunities are out there; you never know, right?

It always amazes me how terrible the process is and how it's so hard to find a job that's just right. Among the top of my lists for pet peeves -- in so far as head hunters are concerned -- are:

  • A total lack of reading skills. I put the resume and profile together to help save time not just for me, but also for the head hunters. No need to send me a requirement for a position in California, you know, espeically when I've listed NYC and Princeton as my preferred locations.
  • A total lack of courtesy. While my profile asks nicely to use email as the preferred contact method, that doesn't stop head hunters from calling. More annoying is that some just keep on talking, and talking, and talking...for me, it's a waste of time to listen to them read requiremets to me; I can read just fine, thank you. 
  • Asking invasive questions. I always get the "So how much are you making now?" question and I hate it. None of your damn business buddy! Your client can either meet the salary requirements or not...why in the world should I tell some total stranger how much I make? The bottom line is that whatever my current salary is has no bearing in the conversation. If a client can't meet my salary requiremets and the job just isn't that interesting, I'm not interested.  Not only that, it's not like whatever number I give can be verified easily; asking this question is pointless because you'll get a batch of people who'll just make up numbers anyways.  What if I said I made a million dollars last year?  Would anyone believe me?  What if I said I made $500,000 last year, would anyone believe me?  What if I said I made $250,000 last year, would anyone believe me?  Then why should anyone believe any unverified income number over the phone (isn't this how we got into this sub-prime mess)?

Well, anyways, once you make it past that morass, then you have to deal with the actual companies and phone interviews. This is where the fun begins (no, really)! I, for one, love being teched out. There is nothing more enjoyable than a match of wits to see if the person on the other end of the line can actually out tech me (and believe me, it would make me incredibly happy and excited if that were the case).

My new favorite part of the process is when the interviewer gets to the "So, do you have any questions for me?" part. Instead of asking boring, standard fare type questions, I've decided that this is my opening to gauge the technical skill of the developers in the organization.  There is positively nothing more satisfying than doing some in depth tech grilling to kind of figure out whether an environment is right for you. I've kind of come to the conclusion that I can really only be happy where I can be out-teched; you know, an environment where I can learn from those around me and drive me to continue to dive into the technologies.  It's a way to make sure that you're going to end up in a position where you'll feel challenged and look forward to learning and solving new problems.

In any case, here are some grilling points which I've come up with:

What's your approach to designing data access?

I like this question because it tells me a lot about the interviewer. In my opinion, data access is essentially the core of any application; it must be simple in design and easy to extend. It must be easy to understand and easy to use by the application layers above. Yet it must not be so basic that it's raw and verbose.

The worst possible answer is a response with any mentioning of datasets (even worse - and an absolute deal breaker - if that's not prefixed with "strongly typed").

Ideally, I'd like to hear something like:

  • "We usually build a domain model built on top of Microsoft Enterprise Library." Most companies don't have the liberty of working with open source libraries. Enterprise Library is at least a baseline. The great thing about it is that it's very well documented and a well understood quantity.  Pluse, having EL as a base encourages or enables at least a baseline level of uniformity in the code.
  • "We use NHibernate (or substitute another ORM/persistence library)." I realize that not all companies and all projects have the freedom to use open source 3rd party libraries, but it's nice to see if they do or have used them in the past.
  • "We're using LINQ." If you get a response like this, you know you're dealing with a group on the cutting edge of technologies and you're dealing with a group that doesn't mind the challenge of designing around new technologies; the developers probably read up on this stuff and work on it in their spare time. This is a group that you want to work with.

The answers to this question offer a rich view into the development resources that a company has and whether they have a strong indication of the Not Invented Here syndrome.

I tend to think that it takes a more advanced developer and development team to understand the landscape of libraries out there and how to utilize them since learning a new library is usually far more challenging, not to mention productive, than hacking together an inferior custom solution. As such, I also like to ask the following:

What's your approach to runtime logging?

It's a shock to me that many consultants I've worked with in the past either:

  • Incorporate no runtime logging or tracing capabilities into their code or...
  • Roll their own logging library.

If you've been writing applications without logging, then you haven't written any applications of any worth. If you're rolling your own, it means you're not interested in delivering value to your clients by wasting their time and money or, even worse, you don't know any better; you've never spent the time to look into the various off the shelf logging options. log4net would be a great answer, but Microsoft Enterprise Library Logging Application Block would be awesome as well.

I've never gotten to a point yet where I've been able to pop this next question, but I think that nothing would be a better indication of "this is a place where I want to work and these are people that I want to work with" than if I got a satisfying answer to this:

Are you familiar with Inversion of Control/Dependency Injection? Do you use any libraries to implement it?

This is a great quesiton because there are some design challenges in software, particularly around extensibility and orthogonality, that can really only be cleanly addressed by using the Inversion of Control (IoC) pattern. It enables the creation of far more extensible frameworks, libraries, and applications.

Low level developers on simple projects have no need for IoC or they end up writing a lot of code that's not extensible or modular. The more complex the application and the greater the need for extensibility, the more important IoC becomes as part of the glue that makes it all work together without a huge mess of dependencies.

If you get a response of "We use Spring.NET/Castle Project/Unity/CAB", then you know you're not dealing with some junior programmers. (CAB isn't really an IoC/DI container, but it utilizes some of the concepts of IoC).

Speaking of late binding, I'm also thinking this would be a good question as well:

Are you familiar with the Fusion Log and why you would need to use it?

Only developers who've worked extensively with late binding would ever have a need to enable this and you can tell the experience level of a developer if he/she can even give you a straight answer on what late binding is.

If I could make it past that point, I'd pretty much surely ask:

What's the difference between an interface and an abstract class? Which do you prefer when you design a framework or application? Why would you choose an interface over an abstract class? Why would you choose an abstract class over an interface?

In general, I don't like being asked or asking low level nitty-gritty questions like "Can you explain how CLR garbage collection works?" or "How many generations does the CLR GC have?" or questions like "Explain the ASP.NET page lifecycle?"; these questions aren't useful in the big picture and most of it can be looked up.  These are just mere facts, the knowledge of which, doesn't indicate much.

On the otherhand, knowing the similarities and differences in iterfaces and abstract classes and how to use them properly gives insight into a developers approach to object oriented programming.  It's a great question and a tough one as well. Nothing would be more awesome than a reply of "Well, according to Cwalina and Abrams in 'Framework Design Guidelines'...".  Knowledge of interfaces and abstract classes is foundational to an understanding of good object oriented design and programming. You cannot write a well designed object oriented system without the judicious use of abstractions.

Another great question along these lines is:

Do you or does your team use any code generation tool?

I think that in general, it takes a great deal of thought to utilize code generation.  It means that the developer or team in question understands the value proposition that it brings to development.  Of note:

  • It leads to more consistent code which means that in the long run, it's more maintainable and easier to document; it leads to repeatable and predictable results from every developer on the team, regardless of whether they've been writing code professionally for 10 years or 10 months.
  • It leads to less error prone code since it's easy to fix small errors across the board by fixing the templates or the driver.  For example, writing data contracts by hand is extremely error prone since it's easy to forget to put a [DataMember] attribute on property which needs to be serialized.  Generating it from a template mitigates these types of simple mistakes.
  • It increases productivity by allowing developers to get away from writing the plumbing and focusing on the business logic and UI, places where the ROI on code generation is lower.

It indicates to me that the developer or team is able to bring abstractions to the next level; not only are they abstracting in their object models, they are also abstracting the very act of coding.  To successfully utilize code generation means that the developer or team is able to see the big picture and not just a class here and a class there.  The develper or team has analyzed the code, identified the patterns, and encapsulated those patterns into templates and drivers.  You know you're dealing with a high level team if they properly utilize code generation tools to reduce the amount of time spent doing grunt work.

Well, I'm sure I'll think of more if I can ever get past these questions. But overall, this outing has been disappointing.  In general, I don't think interviewers take well to a technical grilling; whether they are unprepared to answer these types of questions or they simply don't know the answers, it hasn't been too promising.  For me, it's important in gauging the technical competance of my potential colleagues and the type of technical training/staff development that the company provides and/or encourages.  It's one way to avoid ending up in a company staffed by 5:01 developers.

I still haven't figured out how to respond to the "So what year did you graduate" question, as it's clearly a form of age discrimination but I'm not sure how to call someone out on that yet.  More importantly, it implies that the groups and personnel are not necessarily organized by merit, but by seniority or, even worse, cronyism.  I think next time, I'll just be blunt about it and ask if the interviewer realizes that it can be construed as age discrimination.

# Thursday, July 31, 2008

"Stupid Should Hurt"

Thursday, July 31, 2008 5:28:42 PM UTC

I caught this phrase scrawled on Woody Paige's blackboard last night on Around the Horn (one of the few television shows I watch somewhat regularly).

I love it.

Glenn Campbell on "stupidity":

During our childhood, we are given a certain amount of protection from reality. Our parents dole out rewards and punishments that are often detached from the conditions we must eventually face. Some parents, for example, may reward their children no matter what they do. This sets the stage for stupidity in adulthood, as the subject expects the outside world to hand him the same unconditional reward.

The habits of stupidity can be terribly difficult to change, especially in others. This is why we label some people "stupid" as an overall systemic condition. They are never going to "get it" because they have made a fundamental philosophical decision not to. Their emotional needs are so great and cause them so much internal panic, that they can never accept reality the way it is.

The worst thing you can do for a stupid person is protect them from their mistakes. Maybe stupid should hurt. If it doesn't, then they're going to get even more stupid, and they will be totally unable to deal with life when the protection finally collapses.

When you have a boss, client, parent, spouse or adolescent child like this, that's when you find out what a tragic and terrible disease stupidity is. You clean up one stupid mess, but then there's another and another. There's never going to be an end to it until the stupid person touches reality himself is able to directly experience the results of his actions as they occur.

Smart people, by definition, learn quickly from their mistakes, but stupid people don't. They may have to hit their head against a wall many times before they realize, "Hey, this isn't a good idea." Even then, it's only that particular wall they've learned about. If you put up another wall, they'll insist that it shouldn't be there and repeat their mistakes all over again.

This last paragraph is particularly relevant in software development.  I wouldn't call anyone stupid (you have to have above average intelligence to make it anywhere in software development; more like misguided or unmotivated), but many times, people just don't learn from pain and mistakes.  They settle into a methodology or a style and build up mental inertia.  No matter how many times you try to tell them that there is a better way, a more efficient way, a better tool, they refuse to adapt and expand their boundaries.

It's not that "smart developers" are infallible -- everyone makes goofy design decisions from time to time (especially when "The Big Picture" is not a known quantity), but that they can adapt quickly and learn from their mistakes.  They look for ways to ease the pains of the development process.  They are curious about how to make processes more efficient and less error prone.

Just a random Thursday lunchtime rant ;-)

# Friday, July 18, 2008

Lessons From The Mythical Man Month

Friday, July 18, 2008 8:03:12 PM UTC

Fred Brooks' The Mythical Man Month is one of my favorite software engineering books.  I first read it in my senior software engineering class at Rutgers.  From time to time in my daily routine of software implementaion, I flash back to bits and pieces from the book and from the class.

One of the most relevant issues that Brooks' touches upon is the issue of communication and how it impacts productivity.  Of this, Brooks writes:

The added burden of communication is made up of two parts, training and intercommunication.  Each worker must be trained in the technology, the goals of the effort, the overall strategy, and the plan of work.  This training cannot be partitioned, so this part of the added effort varies linearly with the number of workers.

Intercommunicaion is worse.  If each part of the task must be separately coordinated with each other part, the effort increases as n(n-1)/2.  Three workers require three times as much pairwise intercommunication as two; four require six times as much as two.  If, moreoever, there need to be conferences among three, four, etc., workers to resolve things jointly, matters get worse yet.  The added effort of communicating may fully counteract the division of the original task...

This issue seems particularly relevant today as teams are more geographically dispersed than ever (whether due to working with offshore teams or with developers working across the country). As you increase the number of developers working on dependent and communicating components, you dramatically increase the development time.

One of the most common approaches to working around this is to partition the work such that each developer is responsible for minimal cross component communications (each developer implements a full stack). 

The approach works because there is less turnaround and less miscommunication between developers.  It reduces dependencies between one component and another, allowing a develper to progress as fast as she can implement the requisite bits.  Need to store an additional field?  No problem.  Add a column, add it to your data model, and then render it in the UI.  No need to ping someone else or write a change request; just make it happen.

The downfall of this approach is that it leads to a lot of duplicate code for common logic; it tends to work well for a very small team with geographic proximity, but breaks down very quickly as the number of developers or geographic proximity increases.  A developer writing data access for one component may have her own practices while another will abide by a completely different set of practices.  In the long run, this leads to code that's hard to maintain as well as adding much more complexity to the product itself. 

Not only that, any given developer may not be suited for developing a given part of an application stack.  A UI developer will be much more proficient at and capable of designing an attractive, easy to use UI than a backend service developer.  An application developer may be capable of writing a much more cohesive domain layer and business layer than a database developer.

Service contracts are an oft touted solution.  The promise is that by agreeing on a service contract, each side can develop independently of a concrete implementation of the other, so long as the contract is followed to a T.  However, at least in my experience, this is usually far from the truth, especially if you work in a team where the contract itself is rarely stable for more than a day or two.  UI tweaks or new features can cause dramatic changes in the service (for example, requiring more data or a change to the model) which comes at a cost of time spent on change requests and communicating those changes to the other side.

For the time being, I've come to conclude that full stack development (hmm...maybe with the exception of the UI layer) is the best approach, so long as it's supported by the necessary tools, templates, and frameworks; it's all about making it easy to make the guts work (and to do so in a consistent manner) so that the implementation differences where it matters is minimized (for example, data access). Enter code generation,  automation, and application frameworks to the rescue.  Tools like MyGeneration, Spring, Smart Client Software Factory, and Enterprise Library are really the answer but I've found it quite difficult to get team members to buy into embracing these tools (it's one thing to use a framework; it's another, entirely, to embrace a framework or tool).  When properly wielded with a cohesive software architecture, you can get the best of both worlds: a coherent codebase with common patterns across component stacks while allowing developers to work with less dependencies.

What do you think?  How do your teams handle working on multiple dependent components?

# Sunday, July 06, 2008

Is There Any Food Sriracha Sauce Can't Fix?

Sunday, July 06, 2008 5:30:11 PM UTC

While reading his article from the NY Times on The 11 Best Foods You Aren't Eating, my curiosity regarding sardines was piqued.  Like most people (I'm just guessing here), sardines aren't on my shopping list...ever.  So I had to google and figure out how these things are supposed to be eaten and what not.

This lead me to this article over at Chowhound and this choice quote:

My favorite sardine to date is Angelo Parodi sardines. They are carried at most Italian markets or delis.

I ate them plain, so can't help you there ... only hint ... if you get a can of sardines you don't like ... sriracha sauce will fix it.

For those Anglo readers who stumble upon this article, sriracha sauce is kind of like the Asian version of ketchup; every fridge should have a bottle of that stuff sitting around.  It's the perfect combination of spicy, savory, and tangy and goes with pretty much anything (okay, dessert dishes? not so much).

Seriously: is there any food that a little sriracha sauce can't fix?

# Sunday, June 22, 2008

Wildlife

Sunday, June 22, 2008 2:23:30 PM UTC

My house backs a small forest.  So from time to time, we get some interesting visitors.

I saved these guys while I was mowing the lawn...I hope I didn't kill any of their siblings :-S

I briefly considered feeding them to my bearded dragon, Quincy, but decided that it was better to just put them back.

This deer came by about two weeks ago:

It was pretty cool because he walked right out into the main yard before he got spooked and ran back into the woods.

We've also had a red fox visit our back yard one time.  There's also this little garden snake living under our front stairs which I keep seeing every few weeks.  I've been trying to catch him, but who knew snakes could crawl backwards?

# Tuesday, June 03, 2008

Celebrating Science

Tuesday, June 03, 2008 8:53:36 PM UTC

I like this Kamen interview:

Outfitting wounded veterans with dramatically better prosthetic limbs has been an emotional and rewarding journey for famed inventor Dean Kamen. But the project that has the biggest hold on his heart is a nonprofit called FIRST. The organization features a series of intellectual and scientific competitions. Students celebrate robotics the same way they celebrate football – complete with arenas, crowds, and cheerleaders.

Kamen says declines in graduating students and qualified engineers and scientists aren't an educational problem -- but a cultural one. When you celebrate sports and entertainment culturally, that's what kids naturally want to become. Solution? He's bringing sexy back to science. In this clip, he shares FIRST's results, and what corporate America is getting out of it too.

It needs a bit more love.  He makes a good point about the "unlimited class" of competition.  Whereas a cheetah can run faster than any human and an elephant can lift more than the strongest human, no animal can out-think humans.  Thus competitions of intellect are truly competitions of "unlimited class".

# Tuesday, May 13, 2008

Impulse Buy...Almost

Tuesday, May 13, 2008 11:11:57 PM UTC

I usually have problems spending more than a few dollars on anything non-functional.  For example, art or posters (which to my wife's chagrin, leaves most of the walls in our house bare).  However -- for a moment -- I actually considered if I would be willing to go all out and buy a hand written letter from Einstein:

A letter being auctioned in London this week adds more fuel to the long-simmering debate about the Nobel Prize-winning physicist's religious views. In the note, written the year before his death, Einstein dismissed the idea of God as the product of human weakness and the Bible as "pretty childish."

The letter, handwritten in German, is being sold by Bloomsbury Auctions on Thursday and is expected to fetch between $12,000 and $16,000.

I dunno...$16,000 seems like a bargain for a piece of history that seems almost priceless. A hand written letter by one of the greatest scientific minds in human history on one of the most oft debated aspects of his personal life?  $16,000 is a downright steal.

Which reminds me, I should pick up a print of the cover of Newton's Principia Mathematica one of these days.

# Thursday, April 17, 2008

Geek Moment

Thursday, April 17, 2008 1:39:38 AM UTC

It's more rare these days, but I realized I had a total geek moment as I was walking back to my office after eating cheese and crackers for dinner because I was too busy working on reviving a 6 year old PC.

Nothing quite like a power supply sitting outside the case to let you know that you've geeked yourself out for the day.

As a side note: those Laughing Cow cheese wedges are pretty damn satisfying for 30 calories.

# Thursday, March 13, 2008

The Joe Louis Story

Thursday, March 13, 2008 4:17:20 AM UTC

I'm in awe of Joe Louis at this moment and a little bit ashamed that prior to this evening, I'd known almost next to nothing about the man.  Joe Louis: America's Hero...Betrayed is an amazing documentary, telling the story of a man that every American should know and a story that is especially moving to minorities who can look to him as a selfless pioneer.

Selfless in the sense that no person should have to carry the burden of the hopes and dreams of millions of people that individuals like Louis, Jackie Robinson, Rosa Parks, and Martin Luther King Jr. did in their lifetimes.  Against the tidal waves of hatred, the threats against their lives and safety, and in times much different than the one that we live in today, people like Louis gave a nation of minorities hope and pride.  He was a man who didn't shy from his responsiblities and the responsibility of being the ambassador for the black community in a time when they needed him the most.  Perhaps the most inspiring aspect is that he shouldered all of that responsibility in a humble, soft spoken, and professional manner.

It is a must watch not only for minorities, but also for all of America.  Louis isn't merely a hero to the black community, but his story is one of a true American hero and a patriot.  Jimmy Cannon is quoted on the title page of the documentary's website, "He was a credit to his race -- the Human Race."

He is a hero, a role model, a champion, a patriot, and a pioneer.  I hope that he'll be remembered as such in American history for generations to come.

# Friday, March 07, 2008

Now For Something Completely Random...

Friday, March 07, 2008 6:46:43 PM UTC
"Network Apologizes For Mocking Athol"

http://www.cbsnews.com/stories/2008/03/06/ap/strange/main3915750.shtml

(AP) A cable sports network says it no longer will make Athol the butt of its jokes. Comcast SportsNet said Thursday it would pull a newspaper ad that leaders of the small central Massachusetts town called insulting and offensive.

The ad featured two side-by-side signs that together read: "We can pronounce Worcester ... without sounding like an Athol."

I grew up one town over from Athol :P It was always a joke the kids would play: hold your tongue and say "Athol".

# Friday, February 22, 2008

The Art And Mystery Of The Dunk

Friday, February 22, 2008 7:16:56 PM UTC

Chris Ballard has an excellent essay on the art, history, and mystery of the dunk.

Like a sizable chunk of sporting America, I remain intrigued by the dunk, even if I'm not always sure why. After all, I've seen a million of them, replayed on the highlight shows and casually dropped in on NBA layup lines and shoved down my throat by anthropomorphic mascots hurtling off trampolines. Yet I can't look away.  For men, it's like cleavage; we've seen acres of it, but that doesn't stop us from looking again. It's part instinct, part the lure of the unattainable and part the hope that we'll see something spectacular.

The dunk is the easiest shot in basketball, really, but also one that relatively few can make, requiring a combination of height, youth, leaping ability and coordination. A 60-year-old can run a marathon, and almost anyone can get lucky and hit a hole in one or a half-court heave, but no one lucks into a dunk. Either you can do it or you can't.

Julius erving once said, "When you feel yourself go up above the rim for the first time and put the ball through, there's nothing like it. You want to do it again and again and again." Wilkins says throwing down made him feel like a king.

...maybe that's the ultimate appeal of the dunk. Close our eyes, and all of us can imagine doing it. Most of us never will, though, so we live vicariously through those who can, reveling in their ability to make the impossible look easy. We wish we could become one of them. Inevitably, they will become one of us.

I tried to get my body back into shape about this time last year for a push at dunking, but I came up unsuccessful, utlimately.  Mostly due having a hard time losing weight and probably putting on too much mass with weight training.  It was fun training for it, however; it definitely helped by pick up game in so far as being better at grabbing boards and sending ill-timed shots back into the shooter's face >:) (there's nothing quite like the satisfaction of emphatically blocking somone's jumpshot, though I imagine posterizing someone to be equally, it not more, exhilerating).

Worth a read for any fans of the game.

# Wednesday, December 12, 2007

Verizon FiOS: DAAAAAMN!1!!one!

Wednesday, December 12, 2007 10:58:50 PM UTC

Verizon FiOS is like:

Wow...

Screencap from FileZilla server...

# Monday, October 29, 2007

"A Brief History of Record Industry Suicide"

Monday, October 29, 2007 5:01:28 PM UTC

Blogger demonbaby has an excellent post on the music industry spurred by the recent demise (and resurrection) of OiNK.

I myself have been having an ongoing debate with my veep regarding all things P2P taking various angles on the subject including legality, piracy, missed opportunities, and the general failure of the music industry to adapt to the digital revolution.

Rob emphasizes a point that I continually come back to in our discussions:

They had a chance to move forward, to evolve with technology and address the changing needs of consumers - and they didn't. Instead, they panicked - they showed their hand as power-hungry dinosaurs, and they started to demonize their own customers, the people whose love of music had given them massive profits for decades. They used their unfair record contracts - the ones that allowed them to own all the music - and went after children, grandparents, single moms, even deceased great grandmothers - alongside many other common people who did nothing more than download some songs and leave them in a shared folder - something that has become the cultural norm to the iPod generation.

They didn't jump in when the new technologies were emerging and think, "how can we capitalize on this to ensure that we're able to stay afloat while providing the customer what they've come to expect?" They didn't band together and create a flat monthly fee for downloading all the music you want. They didn't respond by drastically lowering the prices of CDs (which have been ludicrously overpriced since day one, and actually increased in price during the '90's), or by offering low-cost DRM-free legal MP3 purchases. Their entry into the digital marketplace was too little too late - a precedent of free, high-quality, DRM-free music had already been set.

Of course, this is no excuse for stealing or not rewarding the artists for their work, but it's clear that it is partially their own error in not creating the market conditions which would have prevented the massive outbreak of illicit P2P file sharing. 

I like to think it all comes back to Rodgers' and Jobs' assertion that a large part of the P2P network is enabled and driven by the music industry's reluctance to adopt "convenience" over "hubris" as the modus operandi.

Rob seems to agree:

Trying to innovate with a major label is like trying to teach your Grandmother how to play Halo 3: frustrating and ultimately futile. The easiest example of this is how much of a fight it's been to get record companies to sell MP3s DRM-free. You're trying to explain a new technology to an old guy who made his fortune in the hair metal days. You're trying to tell him that when someone buys a CD, it has no DRM - people can encode it into their computer as DRM-free MP3s within seconds, and send it to all their friends. So why insult the consumer by making them pay the same price for copy-protected MP3s? It doesn't make any sense! It just frustrates people and drives them to piracy! They don't get it: "It's an MP3, you have to protect it or they'll copy it." But they can do the same thing with the CDs you already sell!!

If intellectual property laws didn't make Oink illegal, the site's creator would be the new Steve Jobs right now. He would have revolutionized music distribution. Instead, he's a criminal, simply for finding the best way to fill rising consumer demand. I would have gladly paid a large monthly fee for a legal service as good as Oink - but none existed, because the music industry could never set aside their own greed and corporate bullshit to make it happen.

It's always puzzling to me when this discussion comes up because my veep is the ultimate entrepenuer.  I tend to believe that a large majority of people obtaining music via P2P networks would gladly pay for music if it were the case that the music came DRM free.  I see the legal assaults by the music labels as a missed opportunity to reinvigorate sales and reinvent the industry instead of waging a righteous battle for capitalism by suing small time thieves.

In the end, what good will the industry have gained by alienating customers and offering an inferior product (DRM'd MP3s)?  Surely, they will have gained the allegiance of a generation of lawyers whose pockets are being lined by an industry too foolhardy to recognize an opportunity when they see one.

# Monday, October 01, 2007

The Slow Death of DRM

Monday, October 01, 2007 4:27:50 PM UTC

I've been in a somewhat heated debate with my once CEO and now VP regarding the effectiveness (or rather, the ineffectiveness) of DRM and how the media companies are really just screwing themselves (whilst also screwing customers) by not adapting and accepting digital as this generation's radio.

I've always held the stance that DRM is a useless encumbrance to legitimate users of the content while providing merely a false sense of security to the copyright holders; those who want the content bad enough will circumvent the DRM somehow.  In the end, regardless of how good the DRM is, the simple fact is that the end product must be output at some point in time.  The content can always be captured as output from some trusted system (though some quality may be sacrificed).

Time and again, we've seen that the application of DRM is a fruitless effort in the cat and mouse game with hackers that the hackers have won every time.  Witness:

In his open letter, Steve Jobs comments on DRM and states:

Imagine a world where every online store sells DRM-free music encoded in open licensable formats. In such a world, any player can play music purchased from any store, and any store can sell music which is playable on all players. This is clearly the best alternative for consumers, and Apple would embrace it in a heartbeat. If the big four music companies would license Apple their music without the requirement that it be protected with a DRM, we would switch to selling only DRM-free music on our iTunes store. Every iPod ever made will play this DRM-free music.

Why would the big four music companies agree to let Apple and others distribute their music without using DRM systems to protect it? The simplest answer is because DRMs haven’t worked, and may never work, to halt music piracy. Though the big four music companies require that all their music sold online be protected with DRMs, these same music companies continue to sell billions of CDs a year which contain completely unprotected music. That’s right! No DRM system was ever developed for the CD, so all the music distributed on CDs can be easily uploaded to the Internet, then (illegally) downloaded and played on any computer or player.

I tend to think that a technology visionary like Jobs "gets it".  He understands that it is quite likely that no perfect DRM system can ever be created but in an effort to use these imperfect DRM systems, the only people that are being punished are legitimate consumers of the media by being locked into proprietary stacks of players, online stores, and digital media.

He also touches upon an oft ignored point: the CD, a digital source, itself does not contain any form of DRM.  It's true that the designers of the format perhaps did not foresee a world digitally connected and able to distribute 650MB worth of data in mere seconds (BitTorrent),  but that does not absolve the fact that they're plugging the crack in the dam while ignoring the gaping hole.

It is my view that the actual number of people who actually rip and distribute music from CDs and DVDs are a very small percentage of all consumers.  Meanwhile, there is a much larger percentage of consumers who get their copies illegally from these sources via peer to peer and file sharing networks.  And yet a larger percentage of people are actual legitimate consumers who plunk down the full price of the CD or DVD in stores and take it home with them.

What the music industry should be concerned about is not that marginal percentage of sources (those who hack the DRM systems or use the resultant software to rip and distribute the content - this group will continue to do so, indefinitely), but the much larger portion of the consumer population that illegally downloads the output of these providers even in the face of the minor threat of legal action.  The question of course is how they can reach this consumer (or at least a large proportion of this consumer).

The secret seems to be offering a "fair deal" to the consumers.  I can still remember the days when CD singles cost $5, 6, 7, even 8 dollars!  Of course, what is "fair" is arbitrary and, as my VP would say, "determined by the market" (what he seems to disregard is that the music industry was guilty of price fixing to artificially inflate the cost of CDs instead of allowing for the market to decide the fair price), but clearly, this price seems absurd!  Of course, then the question is, what is fair?  Is iTunes' $0.99 model, "fair"?  It's difficult to say since "fair" is relative to the consumer.  To some, $25,000 is "fair" for a cell phone while to others, $250 seems absurd for a cell phone (obviously different products, paying for brand, etc.; but the essence is that they are functionally equivalent in damn near every way).  Price is not the only factor: consumers, as Jobs noted, expect that once they've paid for the content, they can reuse it (not redistribute it) in their cars, on their cell phones, on their portable music players, and so on.  In the consumer's eyes, DRM is but a nuissance driving them to find DRM free, illegally distributed versions of the content.

Today's news that's buzzing around the Internet community is the upcoming release of Radiohead's next album.  Most of the buzz centers around the fact that this is the first major artist/group to release their music completely independently...no music labels involved.  Not only that, this is the first mass live experiment in determining "fair" pricing in terms of music and media:

From Time:

There's no label or distribution partner to cut into the band's profits — but then there may not be any profits. Drop In Rainbows' 15 songs into the on-line checkout basket and a question mark pops up where the price would normally be. Click it, and the prompt "It's Up To You" appears. Click again and it refreshes with the words "It's Really Up To You" — and really, it is. It's the first major album whose price is determined by what individual consumers want to pay for it. And it's perfectly acceptable to pay nothing at all.

It will be an interesting experiment indeed; the results of which, if shown to be successful, will shake the music industry to the core as other artists start to adopt the model.  The music industry has been put on notice: adapt or die.

Will Radiohead be successful?  Will they earn a dime?  One thing is for sure, they will gain a new audience of listeners who would otherwise not have been willing to purchase a CD for $16.00, but will surely download and sample the new tracks for free or for a nominal price.  But from this, it's easy to predict that Radiohead will surely increase sales of their previous albums as a new set of listeners discover the group because they've opened their content to the consumer.

It is the same with Internet radio stations, where the absurdity over the proposed rates to be paid by Internet radio stations was just recently put on hold.  In the age of HD radio broadcasts and radio-to-computer devices, what sense did it make to treat Internet radio any differently from traditional FM radio and even satellite radio?  Like traditional broadcast radio, Internet radio serves the same purpose in that it allows consumers to discover artists that would otherwise not have been given a glance (every CD I've purchased in the last 5 years has been a result of hearing the artist or group on an Internet radio station first).  It's simply that I'd rather listen to music from my computer than from my stereo.  To the consumer, the nuances of distribution and control of the media are irrelevant: the consumer just wants to listen to the music and it's really no different than an HD radio broadcast.

The media companies need to adapt and embrace technology.  They need to study how consumers want to use the content.  They need to understand that the old models won't work anymore in a connected world where content is expected to be transferrable with little hassle and reusable by the consumer (just as a CD should play in your car, in your desktop stereo, on your computer, or from a portable CD player (do people still use those?)).

# Tuesday, September 25, 2007

Programmathon VII Day 4

Tuesday, September 25, 2007 5:24:45 AM UTC

Another day, another couple hundred lines of code packed away.

It's been kind of painful these last few days without my ergo keyboard and 24" LCD :-P  It's also been kind of slow going and there have been lots of frustrations as we try to get more pieces working. 

But occasionally, when we do align several of the components for a small slice of time, there are moments of sheer joy as you watch the whole of the machinery move.  I am reminded of a passage from Mythical Man Month by Fred Brooks:

Why is programming fun? What delights may its practioner expect as his reward?

First is the sheer joy of making things. As the child delights in his mud pie, so the adult enjoys building things, especially things of his own design. I think this delight must be an image of God's delight in making things, a delight shown in the distinctness and newness of each leaf and each snowflake.

Second is the pleasure of making things that are useful to other people. Deep within, we want others to use our work and to find it helpful. In this respect the programming system is not essentially different from the child's first clay pencil holder "for Daddy's office."

Third is the fascination of fashioning complex puzzle-like objects of interlocking moving parts and watching them work in subtle cycles, playing out the consequences of principles built in from the beginning. The programmed computer has all the fascination of the pinball machine or the jukebox mechanism, carried to the ultimate.

Fourth is the joy of always learning, which springs from the nonrepeating nature of the task. In one way or another the problem is ever new, and its solver learns something: sometimes practical, sometimes theoretical, and sometimes both.

Finally, there is the delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures. (...)

Yet the program construct, unlike the poet's words, is real in the sense that it moves and works, producing visible outputs separately from the construct itself. It prints results, draws pictures, produces sounds, moves arms. The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be.

Programming then is fun because it gratifies creative longings built deep within us and delights sensibilities we have in common with all men.

It's kind of like any sort of addictive drug: you have short, blissful highs with grinding, intellectually anguishing lows when things just don't work right or the picture is murky.  Most of the time is kind of spent in a middle ground between intellectual orgasm and hair pulling aggrevation (not that I can pull my hair, but threading errors will do that to you), but there's always that moment when things are finally working in unison that makes all the work worth it.

No pictures yet but we did our regular Hooters lunch and had a special treat, Brazilian BBQ for dinner (excellent, excellent, excellent).

While I've been working 12-16 hour days these last few days, I have been kind of keeping up with the whole Ahmadinejad situation.  To tell the truth, I really don't understand what many of the haters (yes, I did just use that term) are ranting about.  Whatever happened to diplomacy?  What ever happened to listening to all sides of the story?

I am starting to seriously wonder just how much our perception of right and wrong is shaped by what the government, and consequently mass media, wants us to believe.  The core problem is that for many Americans, the level of independent thinking is severely lacking.  It's how we got into the mess in Iraq in the first place.  It's how we could have possibly elected a total dimwit as a president...twice no less.

Contrary to what our current government would have us believe, Ahmadinejad has shown himself to be more of a diplomat and thinker than just about everyone in our current administration.  Unlike our president, Ahmadinejad has shown that he isn't afraid of the tough questions and harsh criticism and cheap insults that he received from people who should have shown more respect to the leaders of one of the most influential countries in the Middle East today.  Ahmadinejad has indeed shown what it means to be a president and a diplomat (I'm not saying I agree with Iran's human rights policies or laws, but I can respect a man that calmly steps into the heart of the enemy's domain and wishes only to speak and open dialogue).

Scott Adams has a wonderful, tongue in cheek, blog post airing out his thoughts on Ahmadinejad's visit.  He emphasizes the double standards that we have set, the arbitrary usage of "terrorism" these days, and tries to emphasize that there are always two sides to a story.  This tends to be my view of the whole situation as well; I'm just not ready to believe that Iran deserves its infamous "Axis of Evil" membership designation.

Senator Mike Gravel also wrote a wonderful opinion piece as well:

Let's be clear -- a war with Iran will further isolate the United States in the world. It will unify the entire Middle East against U.S. forces that are stationed there. And worst of all, it will precipitate attacks on America that will far surpass the horror of 9/11. It's time to step away from the brink and begin finding common ground. Let Ahmadinejad go to Ground Zero and honor our dead. And together, let's all acknowledge that neither war nor terrorism will solve our problems.

We can only hope that our leaders aren't stupid enough to get us mired down in a decade of conflict and war that will cost the public hundreds of billions of dollars when there is an opportunity to air our differences in a diplomatic and political fashion.

# Thursday, September 20, 2007

I Don't Like To Get Political, But...

Thursday, September 20, 2007 5:58:51 PM UTC

A Republican leader with some balls, some heart, and most importantly, lots of humanity.

Well said, sir, well said:

Mayor Sanders: "With me this afternoon is my wife, Rana.

"I am here this afternoon to announce that I will sign the resolution that the City Council passed yesterday directing the city attorney to file a brief in support of gay marriage [with the California Supreme Court].

"My plan, as has been reported publicly, was to veto that resolution, so I feel like I owe all San Diegans an explanation for this change of heart.

"During the campaign two years ago, I announced that I did not support gay marriage and instead supported civil unions and domestic partnerships.

"I have personally wrestled with that position ever since. My opinion on this issue has evolved significantly -- as I think have the opinions of millions of Americans from all walks of life.

(Sanders with lesbian City Councilmember Toni Atkins)
"In order to be consistent with the position I took during the mayoral election, I intended to veto the council resolution. As late as yesterday afternoon, that was my position.

"The arrival of the resolution -- to sign or veto -- in my office late last night forced me to reflect and search my soul for the right thing to do.

"I have decided to lead with my heart -- to do what I think is right -- and to take a stand on behalf of equality and social justice. The right thing for me to do is to sign this resolution.

"For three decades, I have worked to bring enlightenment, justice and equality to all parts of our community.

"As I reflected on the choices that I had before me last night, I just could not bring myself to tell an entire group of people in our community that they were less important, less worthy and less deserving of the rights and responsibilities of marriage -- than anyone else -- simply because of their sexual orientation.

"A decision to veto this resolution would have been inconsistent with the values I have embraced over the past 30 years.

"I do believe that times have changed. And with changing time, and new life experiences, come different opinions. I think that's natural, and certainly it is true in my case.

"Two years ago, I believed that civil unions were a fair alternative. Those beliefs, in my case, have since changed.

"The concept of a 'separate but equal' institution is not something that I can support.

"I acknowledge that not all members of our community will agree or perhaps even understand my decision today.

"All I can offer them is that I am trying to do what I believe is right.

"I have close family members and friends who are members of the gay and lesbian community. These folks include my daughter Lisa and her partner, as well as members of my personal staff.

"I want for them the same thing that we all want for our loved ones -- for each of them to find a mate whom they love deeply and who loves them back; someone with whom they can grow old together and share life's wondrous adventures.

"And I want their relationships to be protected equally under the law. In the end, I could not look any of them in the face and tell them that their relationships -- their very lives -- were any less meaningful than the marriage that I share with my wife Rana. Thank you."

Touching, well thought out, reflective, compassionate, and sincere.

A hand for Jerry Sanders.

# Thursday, August 09, 2007

Commentary On Current Market Woes

Thursday, August 09, 2007 10:00:56 PM UTC

This is probably the most sensible an informative bit of commentary on the current market conditions (DOW -387):

I love how 90% of farkers don't understand exactly what the crisis is right now.

It's not the fact that the housing bubble "burst". People aren't jumping out of skyscrapers because their house value went down by 5%.

The vast majority of the problem is that the credit market for certain types of bonds has tightened up, to the point that it's almost not even trading at this point. To those that are newbies, the bond market is roughly 10x the size of the stock market in terms of dollar value. It is huge. Bonds get traded back and forth every day, and billions upon billions of dollars worth.

What happened is that mortgage-backed securities are farked up. During the housing boom, lenders would give mortgages to people, then they would package them up and then sell a whole shiatload of mortgages to things like pension funds, hedge funds, mutual funds, etc. The lenders like this because they reduce their risk, and the funds like it because it's a reliable source of income, at least mortgage-backed securities are. Well, it turns out that the lenders were selling the funds investment grade mortgages, when in fact they were more like junk bonds; the people who got these mortgages not only faked their income, but in reality could only afford these mortgages under the best of conditions. Now that short-term interest rates have spiked up, many people have defaulted on these loans. More importantly however, the price of the mortgage-backed securities drop because their price is in part related to how reliable they are as an investment.

Now, many hedge funds invest in MBSs on margin, which really screws them up, because all of a sudden they owe a huge amount of money on worthless securities. This is why 2 Bearn Sterns hedge funds got screwed over and a 3rd one is in question. It's like owning stock in a gold mining company with a certain reported amount of gold, and then finding out that there really is no gold. The price will plummet, and if you bought that stock on margin, you will get a margin call.

The same thing happened with the French hedge fund that this article is talking about. What is worse, however, is that if the markets aren't trading, you can't tell how much the stock is worth, so the French stopped trading the funds until it can get better clarity as to how much their fund is worth.

The submitter's headline is misleading because the govt isn't injecting $12 billion, it's $12 billion more than they usually inject. They are always buying and selling bonds to create liquidity. This is what they mean by the US or Euro governments injecting funds into the bond market. They are going around buying bonds to create an artifical market because regular traders aren't buying them anymore. They are buying these bonds to create liquidity, so that traders will have confidence they can buy and sell bonds again, and once the market recovers they will turn around and start selling them back to replenish their reserves.

This is the real danger here. This MBS contagion has spread throughout the world because every one around the world has invested in US MBSs. We have no idea how bad this contagion has spread, but if this MBS problem takes down funds around the world, and the credit market really tanks and there is a flight to quality, making things like MBS fall even further, it could literally evaporated trillions dollars of peoples investments around the world.

From poster tstoneman.

# Monday, July 16, 2007

Commitment Chains, GUIs, Frustration, And Other Ramblings...

Monday, July 16, 2007 3:29:58 AM UTC

Warning: massive brain dump ahead...

As I was laying down to sleep and having a discussion with my wife - much to her dismay - the topic of her current graduate class came up and she mentioned how much she enjoyed just sitting down and writing for 45 minutes each class.  I found it strange that she should put it in such a perspective.  I mean, there's nothing preventing her from taking the time to sit down and write for 45 minutes each day (and she did keep a journal up until maybe 3 or 4 years ago) as surely, countless minutes of her day (and any average person's day) is spent doing mindless things like watching television or eating or something else equally useless.

The idea of commitment chains occurred to me as I was using an analogy about exercise and trying to convince her that writing for 45 minutes each day is relatively trival compared to working out.  Think about it: in exercising, one starts a chain of commitments which can seem unconsciously daunting.  To exercise is to sweat, to sweat is to necessitate an immediate shower (well, unless you don't mind body odor or the salty stickiness of sweat), to exercise necessitates a larger load of laundry, and most importantly, in this proposition, is that it necessitates a healthy lifestyle lest that exercise went for naught. 

It is a relatively large commitment chain to make simply by exercising and perhaps this is why so many people find it so difficult to maintain a healthy lifestyle: the weight of this commitment chain is simply too heavy.  On the other hand, writing for pleasure carries little commitment of any kind.  You write if you want to, you don't if you are not in the mood.

What's the point?  No point, really :-D  I guess if there was a point, then perhaps it is that very often in life, we don't really take into consideration how little commitment it takes to do what we want to do and do what we enjoy.  We also fail to realize how these low commitment activities have a profound effect on our lives as they help us feel like we've done something.  Simple things like taking a stroll around the block, watering some flowers, laying down and watching the clouds pass, sitting with a cat on the grass, drinking a cup of lemonade on a hazy summer afternoon.  Perhaps that's the secret to finding balance in life: to have a healthy mixture of tasks with long commitment chains (work, family, health) mixed with activies of low commitment (I'm mixed on whether blogging is the former or the latter, but I do find it constructive to put thoughts to text some times).

Shifting gears now.

Prior to this discussion, we had another discussion about how we visualize dates.  I was thinking back to something that I had once read about how to interview tech candidates: propose that some object typically comes in a set of 14.  Now 5 additional elements are introduced...ask the candidate how he or she would organize the new elements.

Some people, like my wife, would tend to place the 5 elements "below" the 14 elements and line them up and start to form a multidimensional array - or a matrix, if you will.  Some people like me, would visualize it as a separate block of elements, but in a linear manner...more like containment where the first set contains 14 elements and the second set contains 5, but they are part of yet a larger set.  It is less of a repeating pattern and more of a general grouping.

This manifested itself clearly in the way in which we think about and visualize dates.  For her, as day of the week is important, she tends to organize her events and key dates in a typical calendar fashion and in fact, she can visualize it so well, that given one event in a month, she can probably tell you the day of the week of any other date in the month nearly instantly.  She views the set of 7 days in a week as a part of a matrix much as a calendar is typically visualized.

In my case, as day of the week is generally not that important, I visualize date and time as linear and quite abstract (I think the most natural way to think about it since it really is linear and absolute...it is only the incidental cyclical nature of our orbit around our Sun that defines constructs like seconds, minutes, hours, days, weeks, years and so on).  In my case, I am terrible at remembering dates and I am terrible at remembering order; I only roughly index that I have something to do some time in the future.  Ask me what I'll be doing two weeks from now, and it'll take me a good amount of time to figure that out whereas my wife's response will be nearly instantaneous.  I tend to think of time in blocks where I have commitments (meetings, errands, and so on) and blocks where I don't have commitments.

When you really think about it, time itself is completely abstract (what is it? will it end? when did it start? how much of it is there? what does it look like? what is the absolute unit of time?  can it really even be counted?), but the organization and demarcatinon of time into units seems...weird and useless to me; I am fine thinking about it in the abstract (i.e. "some time in the future, I need to do this") and not as an absolute (i.e. "on such and such date at such and such time, I need to do this" or "x units from now, I need to do this").  

There is a parallel in my profession: as a software developer, there is nothing tangible about the constructs that I build; the contructs that I build are purely abstract in nature: every GUI, every construct in software, is but an abstraction of numerous lines of code - or, is it the other way around?  Software is but one layer of abstraction on top of another...modern day software could not exist without the huge levels of abstractions that have been built to allow programs to be written efficiently.  Buttons are not buttons, they are rectagles.  Rectangles are not rectangles, they are arrangements of lines.  Lines are not lines, but merely a linear set of pixels.  But in essence, there is nothinig to grasp and to utilize to visualize proportion, all of it is purely hypothetical and kind of "uploaded" into my brain as a set of objects, relationships, and other abstract constructs when I sit down at my desk in the morning. 

In actuality, I find this process of uploading and unloading quite unpleasant (particularly the unloading part).  I have been told by my coworkers, wife, and family members that I can become quite unruly when I'm involved in my work.  The reality of it is that when I'm in my groove, unloading and then loading so much abstraction and so much data causes some sort of mental instability...I just get frustrated at the individual forcing the purge or I just lose my groove and have to kind of veg for the rest of the day...I simply cannot be constructive.

From an observer's perspective, I think this makes me seem like a loner or anti-social or if a colleague is coming to me with questions, it may seem like I'm impatient or uncooperative.  In reality, my bitter reaction is more of a defensive mechanism to kind of keep myself from having to go through these periods of derailment as in my case it's not a temporary derailment...it's like a long term derailment once it happens as there is simply too much data to store and reload that it's taxing on my mind.

For this reason, I think I've recently been in some hot water with some coworkers.  I simply don't take afternoon interruptions very well as that is the time when it is hardest to recover from derailment at that point.

Of course, the whole reason that this discussion and train of thought came up was the movie Stranger Than Fiction (it's an absolutely brilliant screenplay with an absolutely excellent performance by Will Ferrell (everytime you think he's going to break into his "normal" genres, he surprises you and keeps his acting true to the character...a brilliant perfomance)). 

This movie draws my attention on various levels: it is at once a deep inspection of what it means to live and to be alive, it asks what exactly is the scope of one life in the grander scheme of the universe, on some level it is a movie about religion (I haven't really fully formulated this part of it yet), and of course, it's a touching romantic comedy :-).

I also found the specials (and this isn't the first time) to contain some very insightful information on teamwork and project management that would apply to almost any field (but that's a discussion for another day).

What also caught my attention was how director Marc Forster and the visual effects team realized how Harold's thoughts were visualized with these planar "screens" with metrics, text, and data layered together.  It's much the same way I visualize data, code, structures, and tasks, all on virtual screens that I slide around, stack, layer, and intermingle.  I now realize that there is no organization to how I think about these constructs and abstractions...I simply see them in my mind as if before me was a stack of cards strewn about and yet I am able to reach out and pluck the ace of spades at will with no effort.

Maintaining such mental order requires a lot of effort and a lot of concentration.  I think it is because of the amount of effort required to work the way that I do, that I am so unpleasant when interrupted (much to the dismay of my wife, mother, and coworkers).  And believe me, it's not that I don't like to help others with the development issues or educate other developers and team members, rather such tasks are not my primary concern and shifting gears is extremely difficult when you have to maintain such large abstractions and structures in the mind.

So of course, the question is, what is the solution?  Well, perhaps I need to invest some time in some organizational books.  Perhaps I need a whiteboard to help unload some of the data and make it easier to reload as well.  Perhaps I need a bigger desk so I can scribble more and keep better notes.

Well, I think that about wraps this up.  Possibly not the most coherent or well organized entry, but it contained data would have kept me up all night if I didn't unload it :-)

# Sunday, July 15, 2007

Sticking It To The Man (Maybe)

Sunday, July 15, 2007 9:31:38 PM UTC

There used to be a time, decades ago, when there was only one telephone carrier and everyone was forced to use it, regardless of whether the service or price sucked. 

Nowadays we have a much greater variety of choices from AT&T to Verizon to MCI for local and long distance calls.  We also have some new comers to the game such as Comcast and Cablevision who offer telephone service over cable.

For the longest time, my mother was using MCI for her local and long distance.  For whatever reason, she suddenly decided (as she is oft inclined to do) that it cost too much.  We decided to switch to AT&T as she felt that it was a trustworthy and reliable brand.  Little did we know that the new AT&T seems to outsource its customer service, charges a hefty connection fee (even when no physical connection setup was required), and she ended up spending exactly the same each month as she did with MCI...

Jump forward a few months after the AT&T debacle (they were still trying to get her to pay a connection fee...).  After a year, her promotional rate with Comcast for Internet connectivity jumped dramatically.  At this time, her best option - of course - was to switch over to the Comcast Triple Play.  We were assured that the cable telephony was a good choice and that the battery backup on the modem meant that even when the power went out, we would still have dialing capabilities.

Of course, what they failed to mention was that if the Internet connectivity gets flaky (as is oft the case with Comcast), so does your ability to use the phone...D'oh!  Well, it should have been obvious to me, but I dunno, I was thinking that maybe the modem had special capabilities that allowed it to operate indepenently of the Internet connectivity.  Turns out that every once in a while, we'll pick up the phone and there will be no dial tone because the modem loses connection or the DNS servers are down somewhere on the grid or some other issue.  It also turns out that the special telephony modem that we have to use is noticeably slower at servicing Internet traffic compared to my previous Motorola (blazing fast); there is now a noticeable lag when frequenting some of the web pages in my daily queue.

For the time being, the promotional price is great: about $33/month ($99/month for Triple Play for one year) for unlimited long distance to anywhere in the US.  This is much better than what Verizon or AT&T charges for the same features (about $50/month).  What they don't always make so clear is that after a year, the price jumps dramatically to $140.95/month or roughly the same price for telephone service as with Verizon or AT&T...except without the reliability of the good old PTSN.

If you really sit down to think about it, that comes out to roughly $600/year for phone service.  That's PS3 territory.

But there is an alternative, there is a brave new world in telephony: Skype (okay, it's really not that new, but I don't personally know anyone who uses Skype exclusively of landlines (although I know a few who use cellular lines exclusively)).

I signed up for a free trial at the end of last year that gave me 30 days of SkypeOut for free.  I found the service to be generally acceptable and convenient (since I spend almost all day in front of the computer anyways).

But what makes Skype even more compelling are the new accessories which are being developed around it: standalone (no PC requried) devices which allows one to use Skype as a total replacement for landelines.

The two that I looked into were the Netgear SPH150D and the Philips VOIP8411B.  Both of these phones sport the following features:

  • The latest DECT technology
  • Multi-handset capable (up to 4 each)
  • Dual mode (supports PTSN and Skype)
  • Don't require PC to use

What seals the deal is that SkypeIn, which allows you to get a number that any landline or cellular line can dial and features unlimited calls anywhere in the US to landlines and cellular lines (and of course free calls to any other Skype user), costs only $60/year.  So for a tenth of the cost of traditional landlines or cable telephony, I can get roughly the same quality services and I can call from my computer.  I also think that the portability is also cool as hell...I can answer my phone anywhere in the world as long as I'm connected to the Internet.

I convinced my wife that when we move this time (just about 20 days to go), we're gonna try to go cold turkey with Skype (we're went with the Netgear phone) and see if it'll work for us.  We both make long duration long distance calls pretty regularly for our jobs so it'll be interesting to see how it works out.  For us, 911 capabilities is not an issue as we both have cell phones.  Dependency on the Internet connection is also not a problem as it's no worse than Comcast or Optimum and whenever we tend to be on long important calls, we also tend to be in some sort of net conference...so having the reliability of PTSN is kind of pointless if the net meeting is down. 

So overall, I'm excited to stick it to the man :-D

I'll keep this site posted with my review and experiences as I spend more time with Skype and the Netgear phone.

Update:

Argh!  Chalk this one up to poor product description, packaging, or something like that, but it wasn't clear at all that one needs to purchase SkypeOut/Skype Unlimited to receive the unlimited outbound calls.  In essence, $60 only buys an inbound number and unlimited inbound calls...outbound calls with SkypeIn are still charged at local/long distance rates. 

I'm kind of conflicted...on the one hand, dude, it's $90 for a whole year.  On the other hand: Damn these people for not clearly advertising their services and costs and using sensible bundles to do so.

# Wednesday, July 11, 2007

Software, Artistry, and Frustration

Wednesday, July 11, 2007 2:52:46 AM UTC

In describing my approach to software development, I like to use the term practical artistry.  What does this mean exactly?

Well, the practical part of it is that the class libraries, interfaces, and components have to work the way that tey were designed.  They should also be easy to use, easy to understand, easy to integrate with.

The artistry portion of this term is much harder to quantify.  Just what is artistry when used in the context of software development?

Art Tatum offers a very compelling definition:

Art is a method of communication which unifies surface details and form while taking both the intended meaning and aesthetics into account. This requires significant amounts of problem solving. The artist is constantly asking, "How can I best express this idea without ruining the proportions of the work as a whole."

This ties in with Fred Brooks' principle of conceptual integrity for it is the artist alone who sees the proportions of his work and the artist alone who shall ensure that the work abides by the guidelines of the orginal design intent.

Another term that I like to use is exemplary craftsmanship.  This concerns the little details that make code aesthetically pleasing, readable, and well crafted.  Many small details affect this quality of code such as consistent naming schemes, using extra keystrokes and not abbreviating non-standard terms, ensuring that spacing is consistent, formatting code in a consistent manner so as to make it more readable, and commenting public APIs.  On a higher level, it concerns the organization of code and the clear separation of domains (not in the Fowler sense, but in a more abstract sense) in a manner that enhances the extensibility and orthogonality of the code.

It's not just code, it's any trade.  A panel and house wired by a master electrician will certainly be different than a panel and house wired by an apprentice.  The cabling will be neat, the runs will be well thought out, the circuits will be well labled, the panel will be well organized, little details will have been considered, and the artistry of the finished work is apparent even to laymen.

With this in mind, I consider myself to still be an apprentice; I still seek to learn the trade from a master craftsman and I still seek to hone my skills and develop my artistry so that I may also craft software of a high caliber.  But I work hard to ensure that some sense of practical artistry and exemplary craftsmanship is apparent in everything I do.  From simple tasks like ensuring proper indentation in my source files, selecting the right margins in my documentation, and using the right fonts to more complex design issues like organizing libraries in proper dependency chains, achieving orthogonality in modules, and organizing objects in consistent and well defined fashions (i.e. utilizing design patterns).

Unfortunately, in my short career, my interactions with other developers have left me disappointed on this front for the most part except for three individuals whom I didn't have nearly enough time to interact with (this is not to say that I haven't worked with many fine developers, but three stand out as practicing these principles of craftsmanship).  These three were true craftsmen in the sense that the little details mattered to them.  Improving their skills as developers was an important aspect of everyday development.  Writing good code and following well known guidelines and principles meant something.  The naming of every class, of every variable, required at least some passing thought so as to ensure that each construct was congruent and aligned with the whole.

Of course, such discussion of artistry as it applies to software is not just frivolous academia, Maarten Boasson writes in The Artistry of Software Architecture:

Designing software is not very different from designing any other complex structure: Few people are good at it; no single recipe always produces a good product; and the more people involved, the smaller the probability of success.  On the other hand, a design produced by someone who is good at design provides an excellent basis for long, reliable service.

Software engineers consider the artistry of the design not only evaluating aesthetics but also the practical results of such a design such as orthogonality and added extensibility.  Boasson further comments:

In exceptional cases, a good software design is no less valuable than the great masterpieces that have been created throughout our rich history.  Examples of both bad and good designs can be found all around us, in almost every engineering field; practically everyone recognizes a piece of art when they see it.

So I often wonder why it is the case that I encounter and, of much greater concern, find high degrees of tolerance for bad design.  Not just bad design, but bad development practices like inconsistent usage of formatting elements (spacing, newlines, tabs), naming namespaces and classes against well established guidelines and practices, and other details like inconsistent casing.  Leadership just doesn't seem to care for the most part and it requires the rare and truly inspired individual project manager to understand the long term value of encouraging practical artistry and exemplary craftsmanship.

Bear in mind: it's not that I approach writing software with any sort of artistry or snobbery in mind...indeed, a good portion of it is the grunt work - simply putting the hammer to the nail, or putting the brush to the canvas, so to speak.  But at the end of the day, there is a personal satsifaction that is achieved from not just writing any code, but writing good code.  There is a satsifaction that comes from recognizing and implementing a superior system design.  Of course, it goes beyond personal satisfaction, good design, as Boasson writes, can provide long term value in the form of extensibility, maintainability, and reusability.

In almost all cases, as the majority of developers are not self motivated to write such code, it takes strong leadership, clear definitions or design guidelines, and enforcement of the policies to ensure that quality software - not just working software, but quality software - is crafted.

To me, it is the little details that go towards creating a better product.  There is certainly a time and place for prototyping and RAD - and certainly, I utilize these techniques all the time, but there is also a time to formalize the lessons learned from such exercises and to create a masterpiece...to write code that you would find have no qualms about showing to the world and exposing it to critique.

It is with this in mind that I find myself currently flustered.  Is it just me?  Am I being too uppity about all of this?  It's hard to say...I am truly conflicted about this as I cannot see how I can work productively and cooperatively in a team with people who do not honor the same sense of craftsmanship and artistry.  I awake and find that someone has scribbled on my canvas in a weak imitation of my style using colors that clash with the existing palette.  Analogously, I open the electrical panel to find that someone has stuffed some low grade wire haphazardly into the panel without any clear labeling.  I cannot help myself but cringe at the thought of integration - yes cringe.  I don't want to deal with ugly code and yet the leadership doesn't seem to care one way or the other and I am powerless to affect change (partly because I am a blunt edge and possess no sense of finesse whatsoever in dealing with these situations)...*sigh*

I can only hope that some of my desire to achieve practical artistry in code and design inspires others on my team, otherwise this will be painful to endure.

# Tuesday, May 29, 2007

5 Lessons For Barbeque'n

Tuesday, May 29, 2007 12:03:00 PM UTC
  1. Cut veggies into large sizes.  This makes it easier to work with them and not have them fall through the grate.
  2. Put small items onto skewers.  Items like shrimp just won't work on the grill without a skewer.
  3. If you're making chicken or other meats low in fat, brush the grilling surface with some oil first.
  4. Make bigger fires.  Charcoal is surprisingly difficult to light without lighter fluid.  Do it right the first time and make a big-ass fire.  Put some newspaper under the coals.
  5. Enjoy yourself!
# Monday, May 28, 2007

25 Up

Monday, May 28, 2007 6:01:42 PM UTC

I just finished watching the documentary 49 Up.

There's something quite moving in watching people mature from 7 to 49 in a matter of minutes and to see the change in their ideals, dreams, and their lives.  It was fascinating watching these individuals age and see how their lives took shape.

It's equally fascinating as you start to reflect on where you've been and where you shall be in  more years.

If there's one thing I've taken from the movie, is the importance of being happy in your circumstances and making the best of your lot in life.  Dreams come and go, as do opportunities.  Mistakes are made and there trying times are a certainty, but in the end, it's important to realize the brevity of your existence.  It is easy to blame circumstance and others for one's misfortune and hardships, but ultimately, the life is your own and you must do with it what you will.

The Dalai Lama writes in The Meaning of Life:

Shantideva reasons that if something can be done to fix a situation, there is no need to worry.  Whereas on the other hand, if there is nothing that can be done, there is no use in worrying.

If there is one person in the series that embodied this the most, I think it would have to be Neil, who, for a good part of his adult life, seemed to wander aimlessly.

Neil turned out to be one of the most interesting of the entire group. At seven he was funny, full of life and hope. At 14 he was doing well in comprehensive school but was more serious and subdued. In one of the biggest shocks of the series however, by the time of 21 Up he was homeless in London, having dropped out of Aberdeen University after one term, and was living in a squat and finding work as he could on building sites.

At 35 amazingly, he had turned his life around to a great degree and found his calling in politics.

For some of the kids, like Andrew, life turned out exaclty as scripted (either by themselves or by their parents).  For others, it is a meandering journey where childhood dreams are often crushed by the realities of the world.  The key, I think, is to be able to accept these defeats, take a lesson from them, and to see the opportunities ahead instead of the failures in the past.

The thread that struck me the most about the lives of each of the individuals in the documentary is the common importance of family and how it is a driving force in finding that peace.  Of the subjects, only Neil did not marry or have children; at 49, this lack of a family of his own and the troubled relationship with his parents, was perhaps one of his own greatest regrets in his life.

In reflecting on my own thoughts on this subject, I find that today, I'm much less enthused about the idea of being a father then I was when I was a teenager.  Not because I don't like kids or that I don't want the experience of being a father - one day - but it just feels like I'm still a bit too selfish to my own needs to be a father.  I like living my life on my schedule.

49 Up is an excellent documentary that I think all young adults should watch and study.  I think it reveals a lot about how fleeting one's perception of the world is and how it evolves over time.  It gives insight into what it really means to find happiness and to find purpose in life.

# Thursday, May 24, 2007

Palm Readings Vindicated (Sorta, Kinda)!

Thursday, May 24, 2007 6:30:25 PM UTC

Came across an interesting article on Yahoo today on how finger lengths/ratio can be used to predict SAT performance.

Specifically:

Kids with longer ring fingers compared to index fingers are likely to have higher math scores than literacy or verbal scores on the college entrance exam, while children with the reverse finger-length ratio are likely to have higher reading and writing, or verbal, scores versus math scores.

To me, what's interesting is that palm reading - or chiromancy - is centuries old and has been derided as being nothing more than a pseudoscience or even worse, a sham. So it's interesting to discover that perhaps there is some legitimacy to chiromancy after all.

Indeed, in my case, my ring finger is longer than my index finger - which indicates that I'd be more proficient at demonstrating spatial and mathematical skills - reflects the 100 point differential in my SAT verbal and math scores in favor of math.

The article goes on to mention that:

Exposure to testosterone in the womb is said to promote development of areas of the brain often associated with spatial and mathematical skills, he said. That hormone makes the ring finger longer. Estrogen exposure does the same for areas of the brain associated with verbal ability and tends to lengthen the index finger relative to the ring finger.

This makes me wonder what other parts of our personalities, skills, and abilities are manifested in our appearances and physical attributes.

Very interesting indeed.

# Thursday, May 10, 2007

Cool Stuff

Thursday, May 10, 2007 12:47:26 AM UTC

Just some random stuff for today:

I came across an interview on CNN.com with Scott Adams that is a good read. Especially insightful is:

I start at 5 usually, 5 in the morning. I just walk across the street in my flip-flops and pet my cat for 10 minutes so she won't bother me for the next few hours. There's kind of a toll you have to pay with a cat; if you don't pet her for 10 minutes she'll bother you for six hours.

Truer words of wisdom have never been spoken.

I also came across an awesome little tidbit on MSNBC the other day:

In a whale-sized project, the world's scientists plan to compile everything they know about all of Earth's 1.8 million known species and put it all on one Web site, open to everyone.

Sounds completely awesome...I could totally see myself spending endless hours just browsing through it.

# Friday, May 04, 2007

How Important Is A Candidate's Belief In Evolution?

Friday, May 04, 2007 5:11:45 PM UTC

It has been raised in various discussions on the topic of the 2008 presidential elections: just how important is a candidate's belief in the theory of evolution? Should the people even care?

I say yes.

It shows that one has a respect for the sciences and scientists. It shows that one has an understanding of the scientific method and how a large majority of respected scientists have arrived at the conclusion that evolution is an established and accepted scientific theory. It shows that one can objectively evaluate the data and evidence that has been produced that show evolution to be undeniable.

This is the information age. We are in an era defined by the technological and scientific advancements that have been made over the last century. Antibiotics, the personal automobile, nuclear energy, peering into the depths of space via the Hubble telescope, the Internet...all of these discoveries, inventions, and conveniences are the direct result of science, not faith. Religious faith would have one believe that prayer alone will overcome a serious infection. Religious faith would have had us believe that the Earth is the center of the universe. Religious faith would have had us believe that the Earth is flat. Religious faith would have us believe that "because that's how God designed it" is an acceptable answer to anything we do not yet understand. Faith is a cop-out of an answer.

When our scientists and engineers are shunned (e.g. re:stem cell research), when peer reviewed results are discarded or deemed irrelevant (e.g. evidence of human driven global warming), when generally accepted scientific theories are questioned (e.g. evolution), then you know that the leadership of this country has failed to put a premium on knowledge and grant respect to those in our society who seek to enrich the collective knowledge of the Humankind.

If one cannot fathom evolution, even given the consensus of the world's leading scientists, If one cannot accept evolution, even given the large amount of evidence (on a micro and macro level), if one cannot objectively make a decision based on unbiased data without the interference of personal faith/beliefs, then such a person is not of the mental capacity and certainly not of sound judgement to lead the United States of America.

You know, I found it quite humorous to hear these candidates babble on about the manufacturing sector and how we simply cannot compete with China, Mexico, and other countries where low cost labor is abundant.

I ask, why the **** would we even want to compete with them on such a level? The promise of the future lies not in manufacturing, but in knowledge, information, and the ability to innovate. These are all things that Americans excel at. These are things that science excels at. We should be glad to have this opportunity to continue our transition from an industrial economy to a knowledge and service driven economy.

Instead, the leadership has taken us backwards.

As energy costs soar in the next century due to increases in demand and decreases in the raw resources, alternative energy sources will be the only option. Instead of embracing this ideal, the US is letting the opportunity to innovate and lead slip away.

Instead of embracing the promise of stem cell research, our leadership views such science with disdain because of the uneducated masses that support them. Instead of taking a leadership position in this vital field, we force some of our brightest scientists in this field overseas to countries like China, Singapore, Japan, and various European nations where such pursuits are embraced because of the financial and medical promises of such research.

As we move forward, it will be the global alliances and friendships that we form that will help drive our markets and help drive demand for our knowledge and unique capability to innovate. And yet, instead of reaching out to allies and trying to mend torn relationships, instead of diplomatic solutions and dicussion, instead of dialogue and sound governance, we seek to take a bully like stand on the global stage with strong talk like a young child throwing a temper tantrum (or an e-thug).

To drive us towards a better, more prosperous future, we need leadership that will respect science. We need leadership that will respect dialogue. We need leadership that will look at subjects and look at the data objectively and not let personal faith muddy the waters of clear and sound judgement. It is innovation in the sciences and engineering that has made America the country that it is today. It is innovation in these areas that hold the greatest potential to drive us forward tomorrow and we need leaders that understand the importance of leading a global economy driven by information, technology, innovation, and science.

# Monday, April 30, 2007

Mortgages And Leadership

Monday, April 30, 2007 4:13:20 PM UTC

I saw Thank You for Smoking over the weekend, a great movie, and I wasn't planning on writing anything specific about it, but an article that I read this morning (and I guess thinking about the current circumstances of my life) changed my mind.

In an article on SI.com, Chris Mannix discusses how Jason Kidd, perhaps the greatest point guard of this generation (even though Nash has more MVPs to his name), has made a career or making his teammates better.  The most interesting observation that Mannix makes is:

For his part, Kidd relishes the idea of not only making his teammates better, but also serving as a human lottery ticket.

Well, what exactly does this mean, "human lottery ticket"?  Quoting Jason Kidd, he writes:

"I loved playing with all those guys," says Kidd as he walks down the tunnel towards the parking lot. "Rex Chapman. Shawn Marion. Kerry Kittles. Scalabrine. K-Mart. When you can help a guy make a better life for his family, it's the best feeling."

To go off on a tangent, for a moment, at some point in the last year, I was considering leaving Zorch as there were other opportunities available to me with better compensation overall.  But of course, there isn't that satisfaction of being a core component of a small startup.  At some point, the CEO of the company came out for a meeting with a client and had some time to meet me for lunch.  Perhaps the most interesting concept that I took away from this meeting was his statement that he's not in it for himself, he's in it to build the wealth of those around him.

And indeed, our employees are all a close knit bunch with one of our developers having been with him for over a decade through at least two companies.

In a sense, he has a Kidd-esque quality about him.

In quoting Lawrence Frank on what makes Kidd so great, Mannix writes:

"He takes away the thinking process for his teammates. He gets the ball to them on time, on target, so they can just go into their move."

Similarly, I like to think that our CEO (and any good leader) does the same: he creates the conditions for success by taking away the barriers for individual success; he makes it easy to do what you know how to do.

Okay, so back on the topic at hand.  So what does Jason Kidd have to do with Thank You for Smoking?  Well, Nick Naylor (Aaron Eckhart), the protagonist of this movie, is asked how he can do what he does, knowing that the entity he fronts produces a product that kills thousands of people a day.  His justification?  He's effortlessly good at it and it pays the mortgage.

In a sense - and I know it's quite cynical - life in the modern world (especially for my generation) boils down to doing everything you can to make that monthly payment; mortgages are a painful reality for the vast majority of us. 

So what is the conclusion to draw from all of this?  I guess this is really a post on career advice: find someone to work for or work with that will be your "human lottery ticket" :-D

# Wednesday, April 04, 2007

Diplomacy? What's That?

Wednesday, April 04, 2007 2:07:13 PM UTC

Seems like someone knows the answer.

Talking good.  Shooting bad.

Why can't we all just be adults and stop this posturing?  Whatever happened to dialogue (at least give it a try)?  In the end, we're all human beings sharing the same planet with the same goals in life right?  We all want to live a happy, healthy life and to be surrounded by friends and family.  What does it matter our other differences if we all have this in common?

Sometimes, diplomacy at the highest level of our government seems like simple name calling and schoolyard taunts/threats.

# Sunday, March 25, 2007

Caloric Bombardment

Sunday, March 25, 2007 1:49:37 AM UTC

Yummy.

I think I need to drive into New Brunswick.  Right now.

Damn you, MSNBC!

# Friday, February 23, 2007

Another Reason to Switch to Sprint?

Friday, February 23, 2007 2:32:45 PM UTC
Yet another reason?  You can give the "one-fingered salute to Verizon totally painless to you ".

The timing couldn't have been more perfect...

# Thursday, February 22, 2007

Thoughts on Sprint PCS

Thursday, February 22, 2007 10:34:28 PM UTC

This post is completely off topic, but I feel like I have to get it out there for people who are just sick of looking at $$$$ cell phone bills.  If you think about it, a family of four will probably spend upwards of $2500/year on cell phone service! 

So I've been on Sprint now for about 2 months.  At first it was a bit scary jumping ship after having been on Cingular for several years and of course no one in our area had Sprint (that we knew) so we had no idea how well Sprint would work out for us.  But I knew I had to switch since we were paying $180 for myself, my mother, and my sister (Cingular) plus another $140 for my wife, her dad, and her sister (Verizon) at a total of $320+ which was just insane.

I ended up eating the cancellation fees of $175 with Verizon to bring my wife over to Sprint since I figure that I would make that up over less than a single year just by switching to Sprint (I would only have to save $15/mo over 12 months by switching, but I'm saving more like $40/mo).  With 4 lines now on Sprint, TWO of which have unlimited data, insurance, and 300 text messages, the total cost is $180 after all taxes and surcharges.

So here's my two month conclusion: Sprint is the real deal (okay, maybe it's a bit early to proclaim that until I get my rebates back for my phones).

  • When I've called, I've always been able to reach a live customer service representative within 3 minutes (just have to navigate through the menus, maybe 4 deep). 
  • Customer service has been top notch in my opinion (I mean, no worse than expected).  I was promised a credit for my activation fees by the salesperson in the store, but it wasn't reflected on my first bill.  However, a single call to customer service cleared that up right away. 
  • The online tools are also well done, useful, and complete. 
  • Phone service is okay - no better or worse than Cingular in my house (there is a weird dead spot around my house).  I have noticed that where we do get a full strength signal (which is pretty much anywhere but my house), the voice clarity is exceptional.
  • Did I mention unlimited data (fast, too) for only $15.00 a month?

The thing that seals the deal for any family thinking about this plan (up to 5 phones) is that extra lines cost pretty damn close to the advertised $9.99.  For someone like my mother, who doesn't use text or data services, after surcharges, she comes in just a shade over $14.00, which is awesome.

On the other hand, I'm still getting raped by Verizon on my sister in law's and my father in law's Verizon bill: $110 this month!  No overages!  And my father in law didn't even make one call from his cell phone!  What?!?

# Wednesday, February 07, 2007

The Allure of the WWW

Wednesday, February 07, 2007 3:03:24 PM UTC

Not everyone can appreciate the simple elegance of the ethereal structure that we know as the Internet.  It is not the average person that will sit and contemplate the transmission of data from one node to another, thousands of miles away in mere milliseconds, and be impressed and appreciative of the amazing times we live in (I mean, just 20 years ago, you had to actually walk into a store to buy porn :-) (*aherm*...not that I know anything about that)).

Most people are just happy that they can log on in the morning and get their mail in Outlook or check the weather on their local news sites, never taking a moment to bask in the glory of the immense amount of data that flows through copper, fiberglass, and the very air that we breath (isn't it weird to think that right at this moment, several megabits of data are probably bouncing off of me (or worse, passing through me (and you!))), each picosecond.

But then again, not everyone is a software engineer. 

Via Gizmodo.

# Friday, January 19, 2007

Well I'll Be Damned...

Friday, January 19, 2007 6:26:54 PM UTC

Just a few days ago, I was praising Microsoft hardware and support after calling to get my broken IntelliMouse replaced.

So today when I got back from lunch, to my surprise, I found a huge package sitting on my front steps.

new-keyboard.jpg

Awesome!  They sent a whole new set.  Now I have an extra wireless keyboard.

I'm heading out to Utah in 5 hours, so I'll leave this week on a random note:

quincy-log.jpg

For those of you who have been following along, this is my lizard Quincy, who just a few months ago, was the size of my pinky.

# Wednesday, January 17, 2007

Forgive And Forget

Wednesday, January 17, 2007 10:33:04 PM UTC

I really think that one of the big keys to success and happiness in life is to be able to forgive and forget.  With some people, it just comes naturally and easily; they can move on and mend relationships without regards to whatever transpired.

Of course, for many people, this is an acquired life skill that comes with maturity.  Take my mother, for example.  In her younger days, she was probably too unwilling to compromise and too headstrong.  She held her grudges against my father for the longest time, but as the years have passed, she has come to understand how she erred in not being more flexible.  Nowadays, she's pretty much always happy-go-lucky when you bump into her.  Even when we have disagreements or we have a small fight, she never holds it against me.  It's not just me, she's the same way with everyone she meets.

I'm still working on it.  I am kind of egotisctical and unerring in my presumption that I'm always right :-P (just ask my sister).  On top of that, it takes me a long time to forgive and a longer time still to forget.  I hope that I can correct this over time...life's truly too short to hold grudges.  It's just that for some, like me, it takes a really long time for that to set in.

I started thinking about this after reading an article on Jeff McInnis, who was basically banished from the Nets team for a whole year and whose career was put in limbo - especially so considering his age.  But of course, one of the things that comes with age is maturity:

McInnis has refused to criticize New Jersey coach Lawrence Frank, who was apparently upset with McInnis' work ethic following knee surgery last January.

"If that was the case, I'd hold a grudge against every team I've played for," said McInnis, who has played for eight teams. "I can't think of it like that. They gave me $7 million to better my family. I can't be mad at Jersey. They made a decision last summer not to bring me back, but I'm here now. I want to focus on the Bobcats."

"When I was younger I probably wouldn't understand it, but I'm older, I know what's going on. I don't have anything personal against Jersey."

To be honest, with all the trash and rumors I had heard about McInnis and how the Nets treated him (not the classiest ways of doing business), this is a surprisingly mature response.  I hope that I can develop that same outlook on life and learn to be more optimistic and forgiving.

# Tuesday, January 16, 2007

I <3 Microsoft Hardware

Tuesday, January 16, 2007 8:19:40 PM UTC

I know I'll probably come across like a "fanboi", but I really, really like Microsoft's keyboards and mice.  I'm currently using the Natural Ergo 4000 keyboard and it's awesome (you can read my review of it at Amazon).  It's the most comfortable "mainstream" (as in anyone can pick it up in Staples or Office Max) keyboard out there for extended typing usage.  I haven't had cramps or pain in my pinkies for months (CamelCase will do that to you...)!  Months!  And I'm in front of the computer for a good 8-10 hours a day!

Prior to this, I was rocking a Wireless Desktop Pro keyboard/mouse set (which I also reviewed at Amazon).  While quite comfortable in its own right, cannot compare to my current setup of the aforementioned 4000 and Logitech MX Revolution (along with UberOptions).

But anyways, I replaced the mouse included with the WDP set a few months back as the scroll wheel started to gum up and would not scroll or click anymore (damn cats >.<).  So I finally decided to call Microsoft today and see if I could get a replacement since the receiver and keyboard are both still fine.  Fully ready to pay for the replacement and the shipping cost, to my surprise,

  1. The service rep. that answered my phone call was American and spoke "normal" English,
  2. The service rep. was polite and friendly,
  3. The service rep. hooked it up with a replacement mouse, no questions asked (well, except for the standard ones) with no charge at all to me...no shipping, no replacement fee,
  4. The confirmation was sent to me in under an hour...

Yes indeed.  I <3 Microsoft hardware :-D (and great support to boot).

# Tuesday, January 09, 2007

On Software "Architects"

Tuesday, January 09, 2007 3:28:54 PM UTC

I've always had a disdain for the term "architect" in the context of software development. Possibly due to my not-so-fond experience with an "architect" during my days at Factiva.

I popped open Fred Brooks' The Mythical Man Month last night searching for a specific passage on project management, but stumbled on another passage that I had highlighted which caught my attention:

The manual, or written specification, is a necessary tool, though not a sufficient one. The manual is the external specification of the product. It describes and prescribes every detail of what the user sees. As such, it is the chief product of the architect.
The manual must not only describe everything the user does see, including all interfaces, it must also refrain from describing what the user does not see. That is the implementer's business and there his design freedom must be unconstrained. The architect must always be prepared to show an implementation for any feature he describes, but he must not attempt to dictate the implementation.

I think this is a golden rule that is often broken by software architects. The reason that it's so common to break this rule is that in most organizations and teams, the architect is not necessarily:

  1. labeled as such; instead, the term that might more commonly be used to describe such a person would be "business analyst",
  2. a distinct position/role, which means that a high level/senior (read:"been here the longest") developer assumes the role of architect,
  3. accustomed to the practice of separating usage from implementation.

On point 1, by Brooks' definition, an architect is not necessarily a developer, but an individual more aligned with the business side of the client/company with perhaps some technical background or maybe even a trusted technical advisor. The architect must be able to interface with business users and extract the information required to create the right product.  Such incorrect labeling of the position often leads to conflict.  When Confucius was asked what his first measure would be as a minister in the court of Wei, he commented:

It will certainly concern the rectification of names.  If names are not rectified, then language will not be in accord with truth.  If language is not in accord with truth, then things cannot be accomplished.  If things cannot be accomplished, then ceremonies and music will not flourish.

-- Confucius (Chan, A Source Book in Chinese Philosophy, p.40)

The role of architect and developer should be distinct and well defined.  This is not to say that the architect shouldn't have a development background.  Quite the opposite is true; the architect should know the technologies and know the tools, but should refrain from telling others how to implement a feature.  By Brooks' definition, the architect should only tell others what to implement.

On point 2 and 3, in most cases, companies do not always specifically allocate the role of "architect" without also making sure that said individual does not lead the direction of development. In smaller organizations, it's perhaps not an option to create such a distinct role. In these cases, the architect-developer must be able to separate the responsibilities of the duties of both roles.  The problem that arises when this happens is that the developer-cum-architect needs to have the discipline to switch contexts between architect mode and developer mode.  The individual must not think of interfaces in terms of code, but in purely terms of use cases.  This is a difficult task as when I'm presented with a proposed interface (be it visual or programmatic), my natural reaction is to wonder "how will I implement this feature?", "what libraries can I use?", and other such thoughts instead of focusing on dissecting the features of the interface from a use case perspective.

In any case, the architect can still guide the development process by continually updating the specs, conveying user feedback, and offering implementation advice when requested, but the architect must not dictate the details of the woodwork. Doing so always inevitably causes friction between those that create the code and those that create the specification. For, as Brooks says, the act of software engineering is, ultimately, a creative process for the programmer and by restricting this aspect, only begrudging compliance can be achieved.

# Friday, November 17, 2006

Down on ASP.Net

Friday, November 17, 2006 4:51:51 PM UTC

First, some random stuff.  I got a free t-shirt from Newegg yesterday and I didn't even have to buy anything!  It turns out that scammers have been using Newegg's domain in phishing attacks.  As I was reading through this, I thought to myself: isn't there some way to counter this?  I came up with a pretty simple solution and emailed it to Newegg's customer service email: why not just have all account holders, when they enter their information, also enter three code words -- for example: "Apple", "Frankie", and "Coolio" -- and from that point on, any correspondence would include one of these three words, selected at random, in the subject line.  This way, a customer can easily scan emails which appear to be coming from Newegg and tell which ones are spam and filters can also be set up to simply remove anything from Newegg that doesn't contain one of the code words in the title. 

There would be no way for a scammer to overcome this without knowing the codewords (yes, I did think about it for a while and one codeword would probably work just as well since if you compromise even one, you've compromised the effectiveness of the entire system).

So simple (simple to program, simple for customers), yet so effective...I like simple things.

On another front, I've been working on a consulting project kind of indepenently with a development team in a primarily Java environment.  I've been doing some really nifty UI work and the sort of cutting edge web software that I love to do (I know you can't tell by this webpage :-D and I know his blog is displaying incorrectly in IE7).

Working with this team has reinforced my belief that web UIs have no place on server side applications except in HTML pages and JS files; server side UIs must die.  The entirety of the work that I've done has been in JavaScript classes that are essentially client side renderers which consume data provided by JSP pages as JSON strings.  It's a beautiful thing to behold from a design perspective.  Those guys that have no clue how to do UI are not tasked with doing any of the UI work; they just provide the data services that I need to render my UI.

Since I first came across AJAX, it has always been in my mind that, given this tool (a gift from the web programming gods, I tell you), the ideal way to write web apps goes sooo far beyond what any server web application platform can offer.  Perhaps some view this as a bit radical, but I have proposed that the application server be completely oblivious to the existance of any UI at all; all functionality is exposed as a web service and it is then up to the consumer of those services to decide what to do with it.  What exactly does this mean?  The server delivers what is essentially a base HTML page and from that point on, the server side app has no further involvement in the UI.  All of the rendering is then accomplished by client side scripts through DOM manipulation.

This has HUGE advantages over traditional postback/getback models.

  1. The rendering script can be cached.  That means that while you may bulk up on the scripts, you end up saving a HUGE chunk of bandwidth on not delivering highly redundant HTML.  Using this model, you only ever deliver data, NEVER delivering UI markup.
  2. The design is incredibly clean on the server side.  None of this intertwining of UI postback handling and layout garbage.  The application is responsible for providing data services and data services only.  This is a win-win situation as it does not ask the application programmer to build UI (something which most are terribly incompetant at).  At the same time, given a base set of messages, the UI developer can start working on client side code immediately with mocked up messages.
  3. The application is highly reusable now.  The same web services powering the web application can be retooled a bit to power ANY client.
  4. It offers a better user experience.  This is true for any usage of AJAX.
  5. It offers a clean separation of concerns for the two domains of the application: the UI and the server components.  Completely clean.  No half-assed distinction as with ASP.Net and ASP.Net controls.  There is no concept of UI at the server side -- NONE -- only data.

I can't be the only one that believes in this, can I?

But in any case, I'm really down on out-of-the-box ASP.Net and I'm really down on people that adhere to it because it's easy (don't get me wrong, I love .Net).  It all goes back to the drag-&-drop mentality.  I abhor this approach to software.  When something goes wrong, developers that adhere to this philosophy are like deer in headlights.  Source is your friendGet to know Source.  It'll be good for you in the long run.

Nothing against Infragistics, but has anyone seen the HTML source produced by their ASP.Net controls?  Wow.  Fugly beyond belief and HEAVY to boot (the same is true of SharePoint...it's unbelievable).  Not only that, the markup in the page is horrendous and completely illegible...how do they stay in business?  Oh yeah, the gigantic cadre of drag-&-drop professionals brought up in the drag-&-drop era.  They've sold the idea that these controls save time and money while I would argue that the time & money saved is not that significant it since it leads to hard to maintain code, heavy markup delivered to the client, "cookie" cutter UIs that tend to look alike (even across organizational and business boundaries), and a lack of tailoring to the users.  I mean, it may save what? a few hours of development time?  But you end up with code that is incredibly heavy, hard to read, and hard to maintain.  It's time for server side UI to die.  Completely.

I'll admit: not everyone is as comfortable as I am working in the DOM on the client side and working with JavaScript and raw HTML constructs.  But heck, this stuff isn't brain surgery man.

# Saturday, November 04, 2006

Spirit and Opportunity (a Tribute)

Saturday, November 04, 2006 7:47:25 PM UTC

16,500,000,000.

16.5 Billion US dollars.

That's the budget assigned to NASA, all of NASA, for 2006. With this relatively miniscule budget, some of the brightest engineers in the world are asked to scrape by on what amounts to table scraps. These engineers are tasked with performing seeming incredulous feats, when we really consider the scale of things and put their tasks into perspective.

I saw an amazing picture the other day. It was a shot of the space shuttle launching from Earth, as seen from space by our astronauts in the ISS. The plume of smoke, from space, looks oddly organic: as if a tendril from a microscopic organism, reaching out into the space around it, feeling for a safe path. It’s a visual that I don’t think I will ever forget in its uniqueness and the amazing perspective that it provides (both literally and metaphysically).

What happened to the days when our superiority in space exploration was a well of national pride? What happened to the dreamers that dreamt of men on the Moon and voyages to Mars? Nowadays, once relatively technologically backwards countries like China and India are increasingly investing more money into their space programs as it is a source of national pride and profit in some cases:

Operating on a fraction of NASA’s budget, the ISRO has turned itself into the Energizer Bunny of space programs – it just keeps launching and launching and launching. Since 1975, the agency has lofted 43 satellites into orbit, 20 of them from Indian soil. An extraordinary string of successes – 12 consecutive launches without a failure – has attracted European and Asian investors looking to capitalize on growing demand for satellite communication and reconnaissance. A few big deals could turn the ISRO into a moneymaker, boosting India’s prestige… (Scott Carney, Wired, 11/2006)

It’s amazing when you start to wonder what could be if even half the amount of money spent on the Iraq war were given to NASA. What amazing places could we visit? What incredible sights could we see? What mind-shattering breakthroughs would we find in the fields of astronomy, physics, astrophysics, and our understanding of our existence could we encounter in the deeps of space?

I put a lot of blame on the current administration; it is one that has publicly cast doubt on and often put science to the wayside. It is one that has sat by abjectly while controversy swirled, allowing false prophets to cast doubt on evolution, the separation of church and state, and the importance of the science overall.

As I was reading my December issue of Car and Driver, I came across an article on the twin mars rovers, Spirit and Opportunity, and the amazing journey that it has made. These machines are our proxies in the exploration of our solar system, providing us with an amazing view of one of the most promising planets insofar as human habitability goes.

There is something incredibly – and perhaps this is not the best term to describe this – awesome about the idea that this little man made machine is rolling along, millions of miles from the nearest human being.

Millions.

I think the public, in general, has a hard time understanding such scale and take it for granted.

Thus far in human history, about two thirds of the 36 Mars probes have been lost en route or in the creation of smoking holes on the surface… (Aaron Robinson, Car and Driver, 12/2006)

What’s perhaps more enlightening is the following quote from Mark Maimone, a Jet Propulsion Laboratory mission planner:

As long as NASA keeps shoveling in the case – an additional $84 million since touchdown – “The pressure is still on to make use of this national resource”… (Aaron Robinson, Car and Driver, 12/2006).

It is quite incredible when you consider how much of our research of space is done on technology older than I am (25). Our shuttles are from a bygone error using computers which are probably outclassed by most smartphones these days. Of this, Robinson points out:

Because Congress is overdue in authorizing bandwidth upgrades to the Apollo-era global array of radio dishes called the Deep Space Network, the team gets only two brief time slots per day to phone the rovers.  (Aaron Robinson, Car and Driver, 12/2006).

It’s sad to come to this realization. The space program, to me, is a vehicle for inspiration. It should be a source of national pride. A source of dreams – impossible dreams – for a new generation of scientists and engineers. A well from which we draw inspiration for our students and our people. Indeed, it’s an amazing resource, one who’s monetary benefit cannot be measured or counted.

Perhaps the coolest part, at least to me, about the Mars rovers, is their “evolution” in the form of software upgrades. The Car and Driver article also speaks of the amazing journey and longevity of the rovers. Once thought to last perhaps only 90 days or so, the rovers have now surpassed a lifetime of ten times that. Like Replicants in Blade Runner, Man has created this proxy knowing that it would only live for short period of time and here it is, fighting to survive (well, with the help of some human caretakers, of course).

# Monday, August 28, 2006

So I'm 25 Now.

Monday, August 28, 2006 4:36:53 AM UTC

This past week marked the 25th year of my life.

I've never been one to dwell on birthdays and the like; I'm not one to believe in relative and arbitrary systems, as our calendar is, but I cannot help feeling...old.

Yup, a "mere" 25 and I already feel old.  My wife says I have some gray hairs already.  You know, in high school, I used to be able to get my whole hand above a regulation rim (genetics cursed me with hands just ever so slightly too small to palm the ball while attempting a dunk); I used to be able to play basketball at the park in the sun for 4-5 hours at a time without much issue.  Nowadays, a few good minutes at the gym and I'm winded and heaving for breath.

Such is life.  Did I mention that I feel old?  Not so much in spirit I guess. I still enjoy many of the same things I did in my younger days (now I'm sounding old, too...just wait 'til I turn 30) like gaming, playing basketball, Scrabble, watching X-Files, and working out.  Simple things, you know?  But at this junction in life, I'm beginning to wonder whether I'm being too simple.  After all, there is a world to see and experiences to live out there.  But then again, I'm quite lazy when it comes to travel (lucky you're not my wife).

Perhaps Perry Bible Fellowship sums up my view of birthdays best with this simple comic strip.  To be another tick closer to the end of it all.  25 is a weird milestone.  It's the age when you're finally allowed to rent cars without penalty.  You typically get an auto-insurance discount when you're 25+.  It's the outlier of that 18-24 age bracket so covetted by advertisers (what, 25 ain't good enough for you?).  It's half ways to 30.

Not all is bad in the passage of the years; my relationships, I think, have gotten better in the last few years.  With my wife, with my mother, with my sister, and with others around me.  I've always been a personable guy (okay, maybe that's stretching it :-)), but not necessarily a sociable guy (likely due to my INTP profile).  I still live in my head waaaay too much, but I like to think I'm working on that (see what I did there?).

I watched The Weatherman today with the wife.  It's a great movie and I think it only made me start to do a bit more thinking about life.  I'm not sure who originally came up with the saying that "nothing worthwhile in life is easy" (paraphrasing), but it's quite true.  From interpersonal relationships, business endeavors, interior decorating (just because I've been on this interior decorating kick), cooking, basketball, photography, archery, anything...if you don't put effort into it, the end results will be nothing more than a fast food experience: passable, but ultimately unfulfilling and providing little nourishment (and it may even cause some constipation tomorrow).

You know, this last week I was stuck in a hotel in New Hampshire for four days and on my trip home, I contemplated what it was that I missed the most.  It was not my 42" HDTV (though I did miss my ESPN2 and USA Basketball).  It was not my leather office chair (though the room did have the most uncomfortable chair ever designed).  It was nothing like that.  It was my mom's cooking.  I missed it terribly.  I missed it because so much love and care goes into each meal she prepares.  She asks what I want to eat, she cooks with great enthusiasm, and she prepares the food with great care.  It's because it's not easy to prepare a full meal and work a full time job, as she does many days of the week, that I find it so worthwhile and fulfilling (or to put it another way, yummy in my tummy).  Needless to say, I'm not looking forward to "that day".

I guess growing old does this kind of thing to you.  You start to think about the things a little differently.

# Sunday, August 06, 2006

3, 4, 5, 9, 10

Sunday, August 06, 2006 6:41:41 AM UTC

Via Fark, I came across a short article by Gregory P. Smith titled "Top 10 Reasons Why People Quit Their Jobs".

The interesting bit is the conclusion drawn by Smith:

Interesting, isn’t it — that all ten factors begin with the phrase “Management….” Interesting, too, just how many of these high-turnover factors are preventable? My retention survey confirmed the truth of the saying, “Employees don’t quit their companies, they quit their bosses.” Thirty five percent of the respondents answered yes to the question, Was the attitude of your direct supervisor/manager the primary factor in your quitting a previous job?

In a seperate newsletter, logoworks cites Roger Herman:

Recruiting, selecting, and hiring a new employee takes time and money . . . neither of which you have a lot of. Then, when you do find somebody that you hope will work out, you have to invest in training time and some team building to move that new employee into a position of productivity. Meanwhile, the business keeps moving. There’s no way to push a “pause” button while you adjust.

Regarding my first job that I had out of college as a consultant at ITT Industries, I remember I was told by my manager, when I asked for a well deserved raise, that I was "replaceable" and that in fact, all employees are.  Needless to say, with this type of attitude in management, interacting with management was always stressful and my own morale was low...I lost a lot of respect for my manager after that encounter; it's one thing for management to believe some management training BS, but it's just not right for management to say it to directly to an employee...

Herman continues by adding:

People know each other, they’re comfortable with each other, they work well together. This kind of relationship can be powerful when there’s a rush order to get out or when there’s a problem somewhere in the manufacturing process.

This can be even more critical in IT as many of the people that work in this field are introverts (like myself), whom generally have a hard time finding people who they can relate to and form bonds with.  And of course, this type of employee bonding is important so that responsibility is gladly shared by teammates and coworkers come crunch time, so that morale remains high (and by proxy, productivity and quality), and so that good talent doesn't slip away.

On a completely unrelated note, I came across a goldmine of cute as I was browsing around the web.  Can you tell which one doesn't belong (at least according to Nature) with the other?

Too cute!

# Wednesday, August 02, 2006

Missed Opportunities

Wednesday, August 02, 2006 2:05:01 PM UTC

I came across an article on Tomshardware this morning regarding Jeff Taylor, the founder of Monster.com, who is now starting a social networking site/portal for seniors.

... <that's me sitting here contemplating>

Yeah, sounds familiar to me alright.  Back in the summer of 2000, I was working with a Mister Ezra Hedaya at a small startup called iCanServices.  The idea was to tap into a largely ignored marketspace: the "mature adult" (age 55+) internet user and offer them a way to stay in touch with their families, with each other, and offer a variety of services specifically tailored to these users.

It's one of those situations where the idea was ahead of its time.  One of the biggest issues was that most of the elderly were very wary of computers and certainly, the high prices of components those days didn't help much at all.  It was a big stumbling block to try to introduce a web application when most of the users didn't have access to the web. 

Fast forward to today, seven years later.  Technology has slowly melded into the society even more so since 2000 and a new generation of these mature adults are starting to retire from a business world that has embraced computers and the Internet as a daily instrument.  Computers and internet connections while certainly commonplace in 2000, were nowhere near as ubiquitous as they are today and nowhere near as affordable.  With the introduction of UMPCs (Ultra Mobile Personal Computers) and the slew of really cheap desktops nowadays, Captain's dream might have taken off and perhaps I'd be a wealthy IPO millionaire today :-D (yeah, in my wildest dreams).

Chalk this one up as another missed opportunity :-S

# Monday, July 31, 2006

Eye Opening Al Gore Video

Monday, July 31, 2006 1:30:38 PM UTC

One has to wonder, what would the world by like if he had won the presidency?

I pondered this as I was laying down to sleep last night, after viewing these two videos which I came across in a thread on Fark.  I think the world would be a very, very, very different place had Gore won the presidency in 2000.

An incredibly revealing set of videos made by Spike Jonze (of Adaptation and Being John Malkovich fame) shows a very personable, humorous, incredibly intelligent, and passionate Al Gore.  His vision is not just about global warming and the environment (although he does bring it up in the video).  He has a genuine conviction to making America a better place for the lower and middle class in America through education, fostering our competitive advantages in industry, and ensuring that American's are ready for the coming (this was shot in 1999) information age.

I think that seeing his interaction with his family and especially his daughters in these videos actually reveals a great deal about him and the values he brings to the table as compared to Bush, who also happens to have two daughters.

Part 1 and Part 2.

And if there was any doubt that the election was stolen: "How Bush Defeated Gore--The Real Story"...watch how Clayton Roberts, director of the Florida Division of Elections, squirms.

# Wednesday, July 05, 2006

Modern Day History

Wednesday, July 05, 2006 5:43:41 PM UTC

The USA has been around for a little more than a mere two centuries. Admittedly, there isn't much history to be had in such a short span of time, at least relative to Old World countries in Europe or the empires in the East which have millennia of history.

But none-the-less, in these two-plus centuries, I'd like to think we've made a name for ourselves, particularly in the fronts of industrial and technical innovation and engineering.

The light bulb, controlled nuclear reactions, mass produced automobiles, microwave ovens, the telephone, and the cell phone to name a few, are all innovations that came out of the US. These are historical advances in the course of mankind that will have a lasting impact for decades to come.

Should we not, then, protect the sites where such innovations originated? Then  should we not place a value on these sites as a sort of historical monument to ingenuity and weave them into the fabric of our history?  These are our Colosseums, our Leaning Towers, our Pyramids; these are historical monuments at  their birth.  Protecting these sites is the logical thing to do as, indeed, the history of the US is one of industrial and technical achievement.

So it is quite sad to find out that the legendary Bell Labs Holmdel facility (right in my backyard) is going to be razed for a new office complex.

If such a legendary landmark is razed for new office complexes, it would be quite a shame as it has indeed generated an enormous wealth of technologies and innovations in the 5 or so decades it was in operation.

# Tuesday, July 04, 2006

The Lowest Common Denominator

Tuesday, July 04, 2006 8:14:08 PM UTC

Came across a great line by Scott Storch, one of the mega-producers in the music industry today while I was flipping through Rolling Stone:

"It's a chore for me to hold back my mind to do this simple shit...People want something they can understand, something they can break down in their head and understand the rhythms.  There's more money in those little songs."

In reading about how Storch got started in the music industry and then reading the ads for the music and films schools in the back of the magazine, I wonder if these schools do more harm for artistic talent and skill than they do good. Part of becoming great at doing these kinds of things is the experience of working with what you've got. Working with a simple palette is at once limiting and also expansive in that it stretches one's creative ability and skill to get the most out of limited resources; it forces one to develop unique techniques and workarounds that would otherwise not be necessary. It's kind of a "whatever doesn't kill you only makes you stronger" philosophy.

I can certainly understand where Storch is coming from in that line, though. Often, on projects, I have these badass ideas on revolutionary (relatively speaking) changes to an existing application or UI that would simply blow people's minds. Instead, I often encounter a resistance to these types of ideas as clients tend to have a limited imagination or are constrained by the limited imaginations of their users, which is quite sad for me.

I call this: "developing for the lowest common denominator". It's a sad way for creative minds to work when one must contort ideas and visions to satisfy the simpler minds and those that have no imagination.

Take BumpTop, for example. It is far too revolutionary (as compared to the classic Windows folder paradigm) for its own good. Users have limited imaginations to be able to envision how such things would benefit them (or perhaps it may not benefit them).

# Sunday, June 18, 2006

Late Night Ramblings

Sunday, June 18, 2006 5:45:28 AM UTC

About a week ago, I caught a documentary on the House of Saud on PBS (in HD, too!).

It was a riveting program that helped shed a lot of light onto historical relationships between Saudi Arabia and the US.  It also brought to perspective a lot of the current thinking in Suadi Arabia and view of the geo-political landscape from one of the most prominent Middle Eastern nations.

The full transcripts of the interviews are available from the site and I suggest anyone with an interest in the subject of the current war and an interest in the region in general take a glance at the information available at the site.

In the short history of what we know today as the nation of Saudi Arabia, the country has been lead by visionary leaders such as Abd al-Aziz and King Faisal.  It has undergone transformations from a small desert nation of fiefdoms into one of the wealthiest and most developed nations in the Middle East.

Most importantly, it is one of the few (the only?) Arab nations that has traditionally been an ally of the United States, throughout the last 60 years.

Prince Amr ibn Mohammad al-Faisal, great grandson of al-Aziz, reveals that at one point in time, the US was actually viewed upon quite favorably:

And so, [in 1945, aboard] the [U.S.S.] Quincy, he met with President [Franklin] Roosevelt.

Early on, [Abd al-Aziz] understood that the British Empire was on its last legs and that the new power coming out was the United States. And so he quickly tried to establish contacts with the U.S. ... [At that time] the U.S. was looked on favorably by most of the Muslim world [because] it was not a colonial power. On the contrary, it was anticolonial. It was ... the policy of the U.S. that decolonization was [one] of its principles, that people should have the right to self-determination. ... It was only Saudi Arabia in the region, and maybe Yemen, [that were] uncolonized. Everybody else was either under the British, the French, the Italians or whoever else there was.

So it was a logical and natural alliance between Saudi Arabia and the United States. The United States was a young, dynamic power, a growing power, that was not colonial, that was against colonialism, a people that were religious just like we are religious. They have a very strong faith in their Christian heritage, and we have a very strong faith in our Muslim heritage.

While we are not yet enemies (and probably will never be), the consensus in the Middle East, even among the educated Saudis is that the American response in Iraq during this second Gulf War (their third) has been very negative.

When asked about the anger towards America, Bassim Alim, a very progressive Saudi attorney states:

Let me say, it's not that they're not unhappy. They're not; it doesn't concern them. America is king everywhere. [America] is giving us a hard time everywhere. So if this happened to America, we will not stand up and say [that] we are the defenders of America and this should not happen. We know it should not happen, but they're not going to cry over it. It's this kind of feeling that took place amongst a certain segment of society at the beginning.

[At] this stage, many segments of society are actually quite entrenched in being opposed to America as an idea. They are dismayed; they are disillusioned by America. We thought that you really meant what you said in your constitution, all these issues of freedom and rights and carrying the banner of human rights, and the Wilsonian doctrine -- it all went out the window because of 3,000 people?

It's a significant number, but there are hundreds of thousands who are dying all over [because of] this, hundreds of thousands. Look how many died in Palestine, in Iraq, for all these years when Saddam Hussein was ruling Iraq -- [who], by the way, was supported by America -- and you didn't shed a tear. You only shed tears when it starts affecting your own policies, your own interests. In the Arab world, that's not right. You don't look at your interests alone. If you claim something, you have to be fair. It has to be an equal ruling for you and for me.

In the US, I think many of us are incapable of, to quote the Dalai Lama, "equalizing and switching of self and others"; we readily label others as evil or enemies without first evaluating ourselves and putting us in the shoes of those who would hate us.  We do not take the time to seriously evaluate the root cause of the hatred and we do not make the effort to address these issues, nay, we do not even acknowledge these issues.  We can't even begin to imagine why we aren't viewed and celebrated as liberators.  We tend to be simple minded and view ourselves with righteousness without considering the opposing view and the perceptions of others.

I will give you an example: [What if] today there were 500,000 Saudi troops armed to the teeth in the middle of England? Wouldn't the English be [un]happy about that?

Anything controversial, anything that is massive and shocking, like the [arrival] of 500,000 armed soldiers with their equipment in the middle of your country, this is not something that is easy. Nobody is going to be thrilled to know that there is a huge mass of foreign army on his soil, no matter what the pretext or what the justification is. It is something that will make anybody uncomfortable.

al-Faisal states the obvious; if the situation were the other way around and  half a million armed troops were in the US "liberating" us from GWB, I'm sure even  these fighters would be viewed with disdain by the liberal left.  "They hate our freedom" is perhaps the embodiment of this ignorant way of thinking; it is masking our faults by expressing a seemingly patriotic statement which gets thrown to the wind with each law that further restricts our rights and freedoms.

Watching this documentary was very insightful.  It not only showed some very informative and interesting first-hand perspectives from Saudis, but also showed how our leaders have lost their mastery of diplomacy.  Watching the events unfold is simply startling as it starts to expose the history of the conflict, the betrayal of the United States (on multiple occassions), and perhaps why we can never "win" this war that we've started since we have not addressed the root cause of the opposition.  It is reflective of the lack of accountability by this administration that is pervasive throughout all of the policy.

# Wednesday, June 14, 2006

Fear of Change

Wednesday, June 14, 2006 2:22:28 PM UTC

Perhaps one of the most dangerous fears of Man is the fear of change. It is a fear of the new and a desire to remain close to "the old ways". This occurs on a macro and micro level. On a macro level, it turns once progressive nations inwards and backwards. Such is the case with many of the Islamic states around the world where extremist groups denounce the ways of the West and force the government to enact stricter codes adhering to the old ways and to Islam.

It happens on a micro level, too. My wife refuses to try sushi (not that I like it much myself, but I've at least tried it) not because of any real reasons like allergies or whatever, but because of fear. It is a fear of the different, a fear of the new, and a fear of the unknown. You can look at it, smell it, and poke it...but you won't know whether it tastes good until you put it in your mouth.

Perhaps this is a natural and reasonable fear that has developed through years of evolution and natural selection. Certainly, that red berry looks edible, but no one has ever eaten one...so who should be the one to test whether it is edible?

As a developer, though, this fear bothers me a lot when I see it in others. While I do not claim to be free from it, I've always adopted a stance of at least giving every technology a chance before making judgements. I keep a directory called "Sandbox" on my disk drive where I dump all of my code that I use to play around with various technologies, tools, and frameworks. I believe the only way to learn whether such things are useful is by actually using them, practicing their principles, and understanding how they work.

In a sense, the landscape of the software development world is like a giant buffet; there is so much variety, so many flavors, so many dishes, and so many variations of dishes, that it can be comforting to just stick with what you know and be a little skeptical about dishes that look foreign and/or different from your staple diet. It's quite a shame to go to a buffet and only stick to two or three dishes isn't it?

Perhaps it's because I'm younger, but I don't think much about trying out this framework or that tool package. I only know that I can't discern whether it suits my "taste" until I try it at least. Too often, working with the older generation is like taking my sister in law out to eat with us; her diet basically consists of chicken fingers, burgers, and occasionally, steak. It's frustrating to no end because she refuses to give anything a chance that even appears to be mildly "icky" like fish or mushrooms.

From a development perspective, such fears ultimately lead developers to cling to hold habits and old ideas because they work.  It burdens a developer in the same way that a fear of a "mechanized cart" would burden a man who refuses to trade his mule pulled cart for a car.  More importantly, it means that the ability to improve efficiency becomes limited by the ability of the developer.  This saddens me because these tools, frameworks, and practices are all developed with a singular goal: to make development easier.  Developers who hold this fear of the new and this fear of change close to their hearts ultimately sacrifice productivity for comfort.  While not all packages, tools, and practices lead to results (much like not all diets will lead to weight loss), it is very difficult to tell (unless the ideas are absolutely absurd) whether the idea is useful unless it is tested in use. 

But I think one has to go even further than that.  Evaluation cannot be done half-heartedly; one has to adopt the mindset of those using the tools and frameworks.  One must adopt the philosophy of the tool or framework in question.  Simply using the tool or framework without dropping one's typical practices and mindset for new ones (at least temporarily) will not do much good at all as it only leads to the inevitable "discovery" that "this tool doesn't do what I want it to do" or "it's no better than what I was using anyways".  Is that really the case?  Or is it really that it means that an old way of thinking requires some adjusting?  

A good example is NHibernate, which allows users to still use ADO.Net like data retrieval patterns via direct SQL queries (since there are obviously cases where it may be necessary, especially when bootstrapping it on top of an old/poorly designed database).  Some would try it and proceed to only use the direct SQL queries.  Evaluating NHibernate, then, without dropping the ADO.Net mentality leads the evaluator to a "it's no better than what I've been using" conclusion.

So what's the moral of this post?  Don't be afraid of new frameworks or new tools.  I absolutely hate it when developers generalize and flat out state "well, from my exprience, frameworks are always more of a hassle than they're worth", "they never do exactly what I want it to do", or "it'll take too much time to learn the framework" without having written one line of code against the tool, framework, or library.  First of all, it's a fact, 99% of all generalizations are false :-).  Secondly, these types of statements cannot be made accurately until actual code has been written.

Hunt and Thomas write, in chapter 1 of "The Pragmatic Programmer":

Managing a knowledge portfolio is very similar to managing a financial portfolio:

  1. Serious investors invest regularly--as a habit.
  2. Diversification is the key to long-term success.
  3. Smart investors balance their portfolios between conservative and high-risk, high-reward investments.
  4. Investors try to buy low and sell high for maximum return.
  5. Portfolios should be reviewed and rebalanced periodically.

Just like financial investments, it pays to diversify, to try new strategies, and it always pays to put in a lot of heavy lifting into researching a particular investment.  Tools, frameworks, and libraries already in one's portfolio should always be subject to re-evaluation and perhaps, when the time comes, it may mean that one's knowledge portfolio needs to be rebalanced.

# Tuesday, June 13, 2006

Sad State of Manufacturing in America

Tuesday, June 13, 2006 9:06:36 PM UTC

Over at engadget, a headline caught my eye today: "Chinese workers reportedly toil in the 'iPod City'".

It's certainly nothing that we haven't heard before, overseas labor is so cheap these days, who can compete with American labor and just and humane labor laws?  In the fight to save an extra nickel here and an extra penny there, we, of all nations, do nothing to seriously counter and discourage this type of "indentured servitude" and the poor working conditions in countries all over the world. 

What irks me the most is that there was a time when manufacturing jobs in America were well paying jobs; they were jobs that you could raise a family on and they were well respected jobs.

So what's happened in the last few decades?

I don't proclaim to know anything about economics or manufacturing, but I really wonder how we've lost our ability to compete.

Perhaps what I don't get is how we've lost the spirit and wisdom of Henry Ford.

On January 5, 1914, Henry Ford announced a new minimum wage of five dollars per eight-hour day, in addition to a profit-sharing plan. It was the talk of towns across the country; Ford was hailed as the friend of the worker, as an outright socialist, or as a madman bent on bankrupting his company. Many businessmen -- including most of the remaining stockholders in the Ford Motor Company -- regarded his solution as reckless. But he shrugged off all the criticism: "Well, you know when you pay men well you can talk to them," he said. Recognizing the human element in mass production, Ford knew that retaining more employees would lower costs, and that a happier work force would inevitably lead to greater productivity. The numbers bore him out. Between 1914 and 1916, the company's profits doubled from $30 million to $60 million. "The payment of five dollars a day for an eight-hour day was one of the finest cost-cutting moves we ever made," he later said.

There were other ramifications, as well. A budding effort to unionize the Ford factory dissolved in the face of the Five-Dollar Day. Most cunning of all, Ford's new wage scale turned autoworkers into auto customers. The purchases they made returned at least some of those five dollars to Henry Ford, and helped raise production, which invariably helped to lower per-car costs.

So what has happened to this belief that helping American's do better as a nation, in turn, helps the bottom line?  What has happened to this humanistic element of industry and work?  Is it really just about the bottom line nowadays?  Is it really just about padding executive salaries and stock price?

If American companies like New Balance, Japanese companies like Toyota, Korean companies like Hyundai, and German companies like Mercedes Benz can successfully employ Americans to manufacture products for the American market, why can't more American companies do the same?  Why can't Apple, a pretentious, image conscious company, do it?  I'd think it would make a great marketing campaign and improve sales (though probably lower overall profits) if it were made in the USA.

Perhaps we've simply lost our ability to innovate and perhaps we've lost our interest in industrial engineering and innovating in that field.  Surely, through superior industrial engineering and a willingness to take a chance, we can make American manufacturing as competitive (on a broad scale, factoring in the increase an wages).

There was a time when cars were only for the rich and elite.  There was time when those that manufactured the cars did not make enough money to own one.  Likewise, the Chinese who manufacture our iPods cannot own their own iPod.  But be aware, this will surely change as manufacturing jobs continue to flow offshore and the wealth of American's are transferred to other nations.

# Tuesday, May 23, 2006

So, How's Married Life?

Tuesday, May 23, 2006 10:32:25 PM UTC

I love this reply from Jerry Brown, the mayor of Oakland, in Time magazine this week:

It's a good thing.  There is a certainty, a finality about it.  I was very conscious that it was a vow, and I liked that.  It's part of a higher order.  In a frivolous age, it has a depth that is very welcome.

# Wednesday, May 03, 2006

Random Happenings

Wednesday, May 03, 2006 6:55:38 PM UTC

Well, my pineapple died recently.

Yes, that's right, pineapple.  Sometime last year, I decided to start growing a pineapple plant after I picked up a weird interest in growing tropical plants (fruits in particular).

Why pineapples?  Well, I found out from various sites online that the pineapple has an amazingly rich history.  Plus, I love the taste of pineapple :-)  Besides, I figured it would be easier to try to raise a potted plant as opposed to, say a mango tree.

So I found some directions online on how to grow a pineapple and started to grow one from the healthiest crown I could find.

At first I was a bit skeptical as to how hardy the plant would be after reading the directions.  As it turns out, though, pineapples are amazingly hardy with regards to water and temperatures.  The plant survived sub-70 degree weather in my townhouse and office during the winter and wasn't any worse for wear.  But alas, it was not hardy enough for sub-50 degree temps.  I recently moved and since the weather was getting nicer, I started to keep the pineapple outside.  A couple of nights ago, I forgot to bring it inside only to wake up in the morning to find frost (!!!) on my car window.  Frost == dead pineapple :-S

It lived for over a year; not bad.  Quite an attractive plant, too.  I started to grow two more yesterday; we'll see how these two go.

On an unrelated note, I'm starting to suffer with "only" 1GB of RAM on my notebook (unfortunately, the max it can accept).  With VS.Net 2005 and ReSharper 2.0b running on a small project, it's taking up roughly 350 MB of memory.  To complicate matters, all of the 2005 apps (VS, SQL Management Studio, etc.) are such resource hogs, that there is noticeable lag when I use any of them.  I've had to shut down SQL Server for the most part (unless I really need it) and a lot of other services as well.

Merom can't come soon enough...

# Monday, April 17, 2006

Joy!

Monday, April 17, 2006 6:57:33 PM UTC

A certain sense of glee overcame me just now as I was checking the activity logs.

Perhaps one of the most exciting (yeah, I realize I'm exposing myself as a total geek by saying that) things about having a blog (or any website in general) is checking out the activity logs and seeing people coming in and out of your website (hopefully finding something useful).

The idea with my Workshop series is to provide bits of knowledge that I've gained through the various projects that I've worked on in the past in simple, easy to follow and easy to digest chunks (with lots of pictures and code samples to boot). 

Imagine my surprise (oh, Joy!) when I tracked a link to my page from Google groups!  It's one thing to have searches hit your pages...it's an entirely different feeling when someone actually references your site.

Happy is me.

Yes, I'm a dork.  And probably a noob, too :-D

# Saturday, April 08, 2006

Life Goes On

Saturday, April 08, 2006 8:25:15 PM UTC

So I'm back from Utah.  Quite a trip.  I left New Jersey Monday morning at ~7:00AM EST and touched down in Utah ~11:00AM MT.  It only dawned on me when I got into the office there that it was quite a morning commute :-)

Some of the highlights and commentary from the week that was (in random bulleted list format):

  • Brad, our CEO, cooked for all of us one night at his house.  Made some very delish fresh baked bread, pasta, and jumbo tiger shrimp from Costco (I'm gonna have to go pick some up one of these days too).  I remarked to my wife that the square footage of his kitchen is larger than the footprint of our townhouse.
  • I have a distaste for American cars.  Numb steering feel has to be my number one complaint.  The Cobalt just feels terrrrible with regards to steering feedback.
  • Wow.  I was able to convince everyone on the team to use Subversion and Trac.  Amazing.  So I spent most of Thursday night setting up Subversion over Apache and also setting up Trac as well.  Took me roughly 6 hours :-S...and I'm still not 100% done.  But I'm excited.  I've just had terrible experiences with VSS.  It had gotten to the point where I was doing a daily .zip backup of my local files to an external HD since I didn't trust the VSS repository.  It's also great that it runs over HTTPS; much easier to bring new team members on board and we don't have to worry about licensing.
  • We also decided to go with .Net 2.0 and VS2005 for all new development.  Woohoo!
  • Brad is quite excited about Trac.  I'm slightly concerned that he's going to go crazy making tickets.

Now some not so random stuff.

It took me exactly 12 hours to get from Salt Lake back to New Jersey.  My return flight was supposed to stop over in Cincy, but because of thunder storms, we were diverted to Chicago.  Very scary stuff.  The pilot was trying to squeeze into a small window in the storms to see if we could get in there, but seconds later, came back on and let us know that we were running out of fuel.  We had to touch down in Chicago to pick up more fuel.  All was well, but I missed my connecting flight out of Cincy once I got into there.  So had to settle for a later flight :-S

I don't think I've ever really been afraid of flying since I've been flying around since I was a toddler.  But for a brief moment, a deep sense of grief and fear overcame me as we were in the sky, being battered by the turbulence and hearing the pilot tell us that we were running out of fuel.

Aside from the return flight, it was a good trip.  I think we really had a better sense of team this time around and it'll be good to have Brad around now since it gives a better sense of purpose and clearer direction.

I also finished the NHibernate documentation on the return flight.  Very good stuff.  After reading it, all of the stuff that I was struggling with the first two times around made much more sense.  NHibernate is perhaps too flexible and powerful for its own good; it offers so many alternatives to get at the persisted objects, that it really takes a lot of practice and study to figure out the use cases for each of the different access methods.

The only part of the documentation that I was really disappointed with was the tools portion; it was pulled directly from the Hibernate documentation and still referenced Java command line instructions and what not, which is obviously disappointing since it raises the question of where else the documentation could be wrong with respects to differences in Hibernate and NHibernate implementation and syntax.

NHibernate, at this stage, does almost everything that DLINQ does (from the early documentation that I've covered) with respect to ORM with the obvious exception of language integration (they'd have to write a custom compiler or comipler extension to get that).

# Friday, March 24, 2006

Of Crack and World of Warcraft

Friday, March 24, 2006 2:51:36 PM UTC

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

I Confess...

Wednesday, March 22, 2006 1:37:23 AM UTC

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

Suddenly, the Entire Universe Makes Sense!!!

Monday, March 20, 2006 9:27:25 PM UTC

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 10, 2006

Dick Cheney: Jedi Master

Friday, March 10, 2006 2:47:15 PM UTC

The stunt that the Bush administration is pulling with this Dubai ports deal is simply genius (and of course, terribly disgusting from a political point of view).

About a month after I had gotten the job at Factiva, the recruiter that had brokered the deal called me up and took me out to lunch.  During that time, he had told me that one of the practices that they use when presenting candidates was to position the presentation in such a way that the client would see a few below par candidates to set up a candidate so that the last few candidates would all seem to be way above average.  In a sense, I was a closer in that there was no way that I could fail this interview given the setup that they performed (not that I needed it, the recruiter called and notified me that they hired me before I could even get back to my house, 20 minutes away).

This was confirmed to me by experience last year when I went in for an interview with JPMorganChase.  My goodness.  The guy they had lined up before me (due to a scheduling snafu, we both ended doing a "group interview" together) was a total moron.  Short guy.  Bad presentation.  Stuttering.  His main claim was that he built a website for his church using ColdFusion.  Wow.  Not to come off like an arrogant prick (which I probably am :-D), there was no way that this guy was going to even come close to getting the job over me.  (I declined, though, because I didn't like the manager and the environment didn't seem right for me.)

So what does all of this have to do with the Dubai ports deal?  It's fairly obvious that this has been planned all along by the Bush administration and in particularly, Dick Cheney as a setup for Halliburton to step in and take over control of the ports.  Could you imagine the outcry and resistance from the Democratic party and consipiracy theorists had they initially offered this deal to Halliburton?  The entire act was great.  Bush threatening veto (the man hasn't vetoed a single bill to pass his desk) was such a dead giveaway to the entire act and yet the public and the news outlets bought it up like a hot Christmas toy.  It was the perfect setup and the Democrats and some poor Republicans latched right on as planned.  After forcing the hand (having these Dem.s like Schumer give such a loud public outcry in the name of safety), it would look entirely partisan if they made the same outcry over Halliburton.

You can almost visualize Cheney in a dark room with a spotlight over his head, wringing his hands in pleasure at how this turned out as the media and the public ate it up.  The man is genius.  Using the simplest of psychological tricks to get the media and masses to do his bidding.  Jedi Master indeed.

# Tuesday, February 28, 2006

One of Those Days...

Tuesday, February 28, 2006 4:42:48 PM UTC

I feel like I have ADD today.

Focus! (as if that helps)

My mind has pretty much been in cruise control mode the last few days...can't think about technical things.  Perhaps it's just too much excitement and anticipation.

I'm changing jobs (yet again) by choice and necessity.  The passing of another slice of my professional life brings with it additional wisdom and bonds.  I'm getting better at these things.  At the same time, I feel somewhat lost inside as well.  Like the new kid at the school (a situation with which I have much experience with).

I do wonder whether I'll ever find that place where I'll feel whole and I'll feel at home.  Surely, nothing in life is so perfect, but I don't know that I've even come close in the last few years.  The closest I've been was way back in the summer of 2000, when I was working for Captain (Mr. Ezra Hedaya) at a little startup with big hopes.  That was a great summer.  Learned a great deal and worked with great guys and gals.  I think I've been trying to capture that ever since...to no avail.

Such concepts of stability are seemingly archaic.  It's not just jobs, it's everything in life.  Lease a car.  Free agency.  Netflix.  I don't know that I mind it; it's not as if my peers with more stable positions are much happier than myself.  In fact, from a dollars and cents perspective, I've been better off than most of my peers.  For the first time, I'll be making more than my mom...a 20 year veteran of the Mainframe Era (of course this era never ended...the vestiges still flourish in financial and manufacturing industries).  More than that, this constant shifting has also shown me more possibilities and better opporunities.

For now, at least, I'm looking forward to the possibilities and the future.  New people, new places, and, most importantly, new opporunities to show 'em my stuff.  My brain is exploding with ideas with no guidance to shape them and bring them to fruition.  Had I known what I know now, when I worked for Captain, we'd all be rich men by now, I think.  At the same time, I never feel like I know enough.  There's always too much to read, too much to learn, and too much to explore...bookstores make my head want to explode; I actually feel anxious when I walk into one.  The sight of neatly stacked books makes me feel like I have tons of catching up to do.  Too much to do.  I actually feel guilty when I walk out of a bookstore without a purchase.  As if I've somehow lost a leg of some imaginary race for wisdom and knowledge (but I always get over it once I'm break the plane of the exit :-D).

One step at a time, I guess.  My brain is always thinking into the future, which makes it hard to focus on the now, at times.  I find it weird that some of my peers seek my advice when it comes to careers...I myself seek it from those with more experience in these matters than myself.  I don't know that I want to buy into all of what they are saying (of course, I'll regret this in a few years).  But I always try my best to offer whatever insights that I have when I do get pinged (not much :-S).  It's always interesting to see where some of those midnight debaters and GoldenEye marksmen are today :-)

So, how is life?

# Monday, February 20, 2006

Letter to a Colleague

Monday, February 20, 2006 8:54:54 PM UTC

I don't know if you're familiar with this book, but it is the definitive catalogue on the most common design patterns that are in use in object oriented systems.  You will often hear these four authors referred to as "Gang of Four".

Perhaps the biggest name in this space is one Martin Fowler.  His book, Patterns of Enterprise Application Architecture, is the definitive book on building enterprise class applicaitons (and what that means is open for debate).  This book and the concepts are important as you will find, repeatedly, that many of the projects that come out of Microsoft's Patterns and Practices Group reference patterns that are documented in this book (see the bibliography) section of the Enterprise Library.

Note that both of these books are language agnostic and, instead, cover the concepts that go into building interoperable, maintainable, and reusable code.  In fact, you will find that both of these books and the concepts mapped out within are extremely common in the J2EE world and are only slowly trickling down in the .Net/MS space due to the leadership position that the Patterns and Practices group has taken with the release of Enterprise Library, but more importantly, the birth of .Net.

While I've read through the GoF book, I have not had a chance to delve into the PEAA book yet (it's next on my list of books this year).  And, as I mentioned at lunch, even with a full understanding of these concepts, it's rare that people will come with a full design first.  It's an organic process of building, refactoring, rebuilding, and so on.  You must absolutely have the right type of working environment and leadership to make it work.

One common problem that arises when you read this book is that the concepts in it are fairly useless unless you can get everyone in your team to buy into it.  For that to happen, everyone has to understand the common language.  And for that to happen, everyone will have to have read the books.  Since very few consultants that I've met actually read text on this level (abstract, general principles), it's a rarity to be able to discuss design patterns with other developers and it's simply not worth the effort unless the development team is really looking to learn (I've been in one environment where the GoF book was purchased for every member of the dev team and required reading).  Actually, prior to coming here, my plan was to do a "book of the month" deal with one of my co-workers at [Company A] whereby we'd consume one book a month on software engineering practices (be it architecture, programming philosophy, computer science "classics", or whatever) and discuss on a daily basis (a chapter a night, 30-45 minutes of discussion in the morning).  I think this is really the only way to improve the development practices of an entire organization...you must have people that are willing to learn (and sacrifice time to do so) and you must have leadership that is willing to sponser and encourage such learning. 

In most environments, like [Company B], when consultants are hired, they are not hired to bring in best practices and build reusable code or act as software engineers; there is no concept of fostering better development practices because the leadership cannot see the value in it (indeed, the value is abstract and is only tangible in the future).  In these environments, consultants are viewed as extra hands to write code.  It becomes the decision of the individual consultant as to whether he/she chooses to utilize these design patterns (or any OOP practices at all).  When used in such a way, the power of building reusable code is highly limited as developers are essentially working in isolation until integration (which defeats the purpose going through the trouble of creating reusable software).  In all honesty, you will only see such practices in software development shops, smaller companies that have leaders that buy into these practices and patterns, and places where there has been a "grass roots" movement by developers to improve their skills.  In the large organizations that I've worked with, including [Company C], [Company D], [Company E], and [Company F], only [Company F] had developers that were actively pursuing better development practices.  And even there, only a small group of them (only two that I met) were capable enough to do so.  I briefly worked with one developer at [Company Z] (before we were [Company A]) whom also shared a passion for software engineering practices and design principles.  Unfortunately, he left the company in May/June of last year in what was a very disappointing day for me (it's always upsetting when a company cannot retain top talent like this guy).

In my situation, as I've mentioned, I'm not one to force my views on other developers, especially ones that I've not worked with.  Even beyond that, as I've mentioned, it's a collaborative effort; it's pointless to speak the language of design patterns, abstraction, and building reusable code when no one else understands and no one else has interest in learning it and this culture at [Company B] does not encourage it.

So, that's my take.

# Tuesday, January 31, 2006

Random Links

Tuesday, January 31, 2006 12:08:12 PM UTC

It's always interesting to see how people end up on this site.

That's one of the neat things about dasBlog...I'm always giddy when I see some new referrals :-)  Every once in a while, I'll get a few referrals from a handful of bloggers over at weblogs.asp.net.

For a while, I spent quite a bit of time over at weblogs.asp.net.  Not so much these days as my projects have picked up, but I've had some interesting discussions with some of the guys over there.

Stop by WAN if you get bored; there's certainly interesting bits here and there.

# Monday, January 30, 2006

Happy Chinese New Year!

Monday, January 30, 2006 7:45:28 PM UTC

Yay!

I celebrated over the weekend with hotpot at my mother's significant other's house.  It was great...I love hotpot!  But so damn tired from my drive home from Connecticut the night before (I live in Jersey, but currently working in CT).

As we were eating, my sister relayed an amusing story to me regarding my Amazon.com reviews.  Apparently, one of her friends had come across my review for the Microsoft Natural Ergo 4000 keyboard while searching for a new keyboard.  As relayed to me by my sister, this friend became quite excited and called/emailed/messaged my sister and started asking if she had a brother in North Brunswick.  Funny how small the world is I guess.

Even more interesting, this morning, I got an email from someone who had read my review on the same keyboard and wanted to know if my opinion had changed since owning it.  Of course, I replied to this woman and told her that the 4000 is a fabulous <<in that nasal, metrosexual tone>> keyboard.

# Tuesday, January 24, 2006

On Enterprise Library

Tuesday, January 24, 2006 1:33:28 AM UTC

Having been a consultant for the last few years, I've been in many organizations, seen many application architectures, and met many developers.  What saddens me is that far too few developers/consultants in the Microsoft space are digging the Patterns & Practices group in Microsoft.  To a large extent, I think this issue is directly tied to how "easy" Microsoft has made the .Net development process.  Certainly, it's quite easy to learn .Net, especially with the visual designers and drag-and-drop controls, but to write an enterprise application involves quite a bit more than building some of the samples out of a book and calling it a day.

I've consistently found that companies will continue to roll their own data access layers simply out of ignorance.  Ignorance of the Enterprise Library, which is designed to be pretty much plug and play in so far as providing some infrastructure to common application needs.  The case for Enterprise Library is fairly straight forward, in my opinion, but I'm amazed that so few developers I've come across actually know what it is and how to properly utilize (or even at least offer some alternatives (I myself prefer log4net for logging, but it's generally tougher to get companies to use open source projects vs. Microsoft products)).  But even aside from Enterprise Library, there are a number of great solutions to the common problem of data acccess, including NHibernate and EntitySpaces (formerly dOOdads).  While certainly, uptake and acceptance of third party solutions should expectedly be low, there's no reason why developers are not utilizing Enterprise library, aside from ignorance, NBH (Not Built Here) syndrome, and arrogance ("I can do it better").  This isn't to say that there is never the case for rolling your own solution, but you better make damn sure that you can come up with a convincing argument other than the three just listed.

On a more fundamental level, while .Net is generally considered a far more productive framework to utilize, as compared to Java or unmanaged code, it is also  a lazier lanaguage that requires the developer to know less about architecture and designing software solutions.  Combined with Microsoft's history with classic ASP and VB6, you end up with a lot of ".Net developers" who continue to write VB6 style applications and only use classes to demarcate the boundaries for a function set.  There is a tremendous lack of understanding of object oriented programming concepts in almost every single organization I've worked with (with the lone exception being Factiva, where two of the developers in my group were really top notch).  Seriously, ask some developers what the C# keywords abstract, virtual, and interface mean and you are guaranteed to get either looks of bewilderment or some off the wall answers.

This frustrates me to no end; my mind simply cannot handle this type of development.  I've always been fond of the saying: "Never wrestle with pigs.  You both get dirty, and the pig likes it."  I feel an obligation to myself and, more importantly, to an organization that's paying for my services, to introduce standard practices, design patterns, solutions, and libraries where appropriate.  I think this has gotten me into trouble on more than one occassion, including my current situation.  I mean, 12 months ago, the idea of unit tests (as in NUnit) were lost on me.  I didn't really understand the value of writing these tests and how to properly utilize them.  I still do not feel that I'm solid on the latter, but I've definitely come to appreciate the value of unit tests and using a test driven approach to implementing code.  I simply cannot write un-tested code nowadays as I find it inefficient and unprofessional.  And yet, clients neither understand nor appreciate what it means to take a test driven approach.  Instead, this type of development is actually discouraged as the front-loaded work is typically very far from the UI (at the class library level), which means that the business people and managers don't feel progress.  I mean, I can feel it in their eyes when they look at me and wonder what I've been doing and why I haven't hacked together that WinForm yet.

Seriously, is there something wrong with me?  Am I just being snobbish about this?  I like to think not, as I openly admit that I myself underestimated the value and power of a test driven approach just 12-14 months ago and I've since undertaken the task of adopting it as SOP.  But the thing is, very few developers, at least that I've worked with, take the initiative to learn technologies and software engineering practices beyond learning the base .Net framework.  Mind you, I'm not talking about small time consultants with small companies.  I'm taking about $150+/hr consultants working for multi-billion dollar companies.  But then again, a lot of these consultants are not really in consulting positions; more accurately, they are really staff supplements, which typically puts them into a weaker position in terms of affecting change (myself included; this is what I really hate about so called consulting gigs, no one really wants to consult you on anything, they just want you to sit your ass down and write some code....now).

Enough ranting I guess.  Understand that I'm not trying to come across as elitist in any sense; I simply expect developers to remain active in learning their discipline.  I expect architects and consultants to understand the technologies in the relevant solution space before sending the devlopers off to write the code.  I simply expect people to be educated and open to ideas, especially people in a technical lead role.  In any case, Enterprise Library for .Net 2.0 is upon us.  I'm actually fairly excited to put it to use and see how the team has improved upon the existing library.  It's worth checking out Tom Hollander's blog (Microsoft's product manager for Enterprise Library (Yes, it's a full time project within Microsoft staffed by real life Microsoft employees)) for some of the dirt on the new features and changes in Enterprise Library for .Net 2.0.

On a closing note, I'd just like to make an observation.  It always amazes me when I see people's desks with stacks of books that were obviously never touched.  It's as if some developers think that they can learn by osmosis...keep that C# book close enough, and some of that info might just magically seep into your brain.  I only wish it were so easy.

# Thursday, January 19, 2006

Now We're Getting Somewhere (Part 2)

Thursday, January 19, 2006 6:58:59 PM UTC

A higher order of abstraction.  That's the answer.

What is the value in such a thing?  With each level of abstraction that is added, you free up resources to work on higher order concepts.  You free up the mind to work on the grand scheme.  It wasn't until humams had sufficiently advanced agricultural technology that abstracted away the process of creating food, that the human race was able to go about it's business, doing bigger and better things.

It's the ultimate layer of abstraction.  You go to the grocery store and pick up a head of lettuce or to 7-11 and pick up a bag of chips...you are almost oblivious to the enormity of the concept.  Our ancestors even one hundred years ago would be amazed at the convenience that we have today.

Obviously, this abstraction could never have occurred without the right tools and technologies in place.  Without the combustion engine, we'd still be tilling plots of land using horses and oxen.   But if every person that wanted a combustion engine had to build his/her own, then that would also lead us nowhere.

Few of the managers in IT departments and business people ever think about building solutions in this light.  They want ten people working to build engines on demand instead of investing in a small shop, equipped with high quality tools, to build only engines.  People are mired in immediate needs and completing low order thoughts. 

I need a tomato in three months.  You better start growing one today.

There are of course, at several ways to deal with this problem.  The simplest solution is to say "Well, if it pays the bills, I'll go dig a whole and plant that tomato seed".  A more sophisticated approach would be to say "Well, I bet she'll want more tomatoes down the line, so I'll dig ten holes and grow ten plants".  And even beyond that, you may start to get the big picture: "If I invest in machinery to dig these holes and plant the tomatos for me..."

The problem is in that initial investment.  Few people have the foresight to see beyond it.  Even if it'll take an extra month just to build that infrastructure, once it's in place, I can gaurantee you 100 tomatoes every month.  I can even plant different tomatoes if you please, since most tomatoes have the same requirements.  And even if you get sick of tomatoes and you want peppers now, with the machinery in place, I can switch to peppers if that suits your tastes.

# Saturday, January 14, 2006

Now We're Getting Somewhere

Saturday, January 14, 2006 10:43:00 AM UTC

I think that in these last two weeks, I'm finally starting to figure out the answer to one of my least favorite interview questions: where do you see yourself in x years?

I think the problem, in my case, is that my technical skills always shoehorn me into a developer's role, by default.  However, doing things like building Windows forms and web forms here and there doesn't satisfy me.  It's not challenging to build point solutions here and there.

One thing that I like about being a consultant is that I get to see many different environments and I get a chance to see how many different companies operate from an IT perspective.  When I engage a client, I always end up thinking "big thoughts".  I inevitably share my "big thoughts" with others and (you'd think I would learn my lesson by now) always end up with the short end of the stick, one way or another.  Thinking "big thoughts" as a consultant isn't always a good idea for a number of reasons (or more accurately, sharing such thoughts with the customer); it inevitably leads to strife between the established developers and architects.  To begin with, the business of thinking "big thoughts" is typically held by an employee of the client or by a less technical, more senior "architect" (either consultant or employee). 

The problem with the former is that you rarely encounter an employee in a non-software related industry that really keeps up with the technology that changes so rapidly around them.  Often times, companies are slow to move to newer technologies.  There are companies that only switched from ASP to .Net in the last year; they're 3 years late to the party.  Not only that, working within one environment for so long to be trusted with the role of "architect" typically means that one becomes too engrained in the ways of thinking of the other developers within the organization so there is a resistance to trying something new; there is a resistance to improving upon designs limited by weaker frameworks of the past.  Instead, the new development is inevitably shoehorned into the "traditional" way of thinking ("this is the way we've always done it" (incidentally, this is what Scott Bellware meant to address when he coined the term "Visual Babytalk" (It's not that I have anything against VB.Net, in fact, I have a workshop written VB.Net, it's just that the majority of the developers that think in VB are from an antiquated era of software development))).  A developer that wrote the last system in ASP+VBScript is going to be a bad choice to design the new system which will be implemented in ASP.Net+C#.  The radical paradigm shift in architecture isn't apparent to many and most implementations end up being little less than .Netified versions of the old ASP applications using the same principles that were used when writing ASP.  Yuck.

The problem with the latter is that more senior architects are typically less technical or they've strayed from their technical roots.  Without a deep understanding of the technologies that are evolving, there is no way that good software design can arise.  It ultimately ends up in a design that mirrors last gen. thinking.  Now I'm not saying that senior architects can't design good systems.  It's rather that there are so few architects that remain technically rooted in the latest technologies and software design principles (of course this is not to say that there aren't fundamental, "old school" principles that still hold).  A part of the problem is the business model where a management position is equated with higher salaries.  So instead of equating a higher salary with a more technically sound and educated developer, companies like to promote and bring in new developers (employee or consultant) that already know the new technologies.  And let's face it, people have lives.  As you progress in life, you will have children, you will have a house to take care of, you will have multitudes of responsibilities that distract from your ability to focus on studying technology and design principles.  It's an issue I fear I will have to encounter in the next 5 years (and I thank my wife for taking a big burden off of me by taking care of most of the day-to-day responsibilities like paying bills and that sort of trivial stuff).

Now don't miscontrue my words; I hardly think that I'm "The One" or anything like that.  In fact, I openly admit that I still have much to learn.  When I say "big thoughts", I simply mean to think beyond satisfying immediate needs.  It's the difference between giving a man a fish and teaching a man to fish.  It's the difference between putting a bigger, more powerful engine into a below average car in hopes of driving sales versus building a better factory and hiring more skilled workers which will yield higher quality.  It's the difference between trading for a basketball player that averages 5 points per game more to try to win games versus rethinking the offensive and defensive schemes to improve the chances of winning (i.e. Dallas Mavericks).  It's the difference between designing a processor with a higher clock speed versus designing a more powerful processor (Intel Pentium IV vs. Intel Pentium M/AMD).  It's the difference between thinking 2 weeks into the future and thinking 2 months down the line.

So I think I know what to ask next time I go into a job interview: does your organization like to think big thoughts?  I don't want to sit around writing reports or tweaking Windows forms.  I want to write the framework to help the developers more rapidly write and deploy the reports.  I don't want to sit around tweaking Windows forms every time a business person wants to change a layout.  I want to write the framework to allow for an easy to reconfigure UI.  I don't want to do trivial programming tasks.  I want to build complex things.  I don't want to work under a technical architect/lead developer who's less technically educated than I am (I make a distinction between technical architect and business architect/analyst) unless said individual is open to new ideas, new technologies, and new ways of thinking.  I like to think "big thoughts".

My managers and the customers (business people) don't always like that.  Managers think small thoughts.  They're like children in the sense that they have short foresight.  Part of that is that they're at the whim of the business people and in the eyes of the business people, if you're not contributing to the bottom line today, you might as well be gone tomorrow.  They've been conditioned to operate in a mode where quantity is valued over quality, where getting it done now is more important than getting it done right.  When you work like this, what you end up with is a pieces of code that are cobbled together, difficult to maintain, and costly to fix. 

Unfortunately, very few managers that work outside of software related industries think big.  I don't think that I've ever met a manager that I would say "thinks big", but I think I've come close by having managers that allowed me to think big by trusting me and allowing me to work the way I like to work.

I remember telling Brian, my current managing consultant, that I like to work on things that don't have value.  More accurately, I like to work on things that don't have immediate value.  The value of such things is never apparent in the short term, as in the short term, the paying customer wants to see progress.   When building such things that have little immediate value, it's very difficult for the customer to understand that if a little more effort is put in upfront to solve the more complex problem, then it will be many times cheaper to solve the simple problems down the line.  Writing a framework to create and distribute reports costs a lot of money upfront with little to show for it.  But the benefits down the line far outweigh the immediate costs as report after report is written and deployed using the framework (and it's not like a business is going to ever stop writing reports).

It's unfortunate for me that I've never really worked in a software development company as I think that's where I'd fit in the best.  But at the same time, I think if I did work for a software development company, I wouldn't be exposed to the complex business problems that people are trying to solve.  But for sure, I now understand what I want to do in the next 3-5 years: I want to solve big, complex problems.

On a tangent, I think I've figured out why I have problems making small talk and chit chat.  It's because I don't want to talk about anything other than software design, technologies, and the process of building software :P Seriously, that's really just about all that I'm ever really thinking about when I'm not watching basketball or doing something mindless.

I guess I'm just ranting now :-D The problem is that I'm thinking big thoughts, but mired in a situation where I'm forced to work on small ideas.  It's terribly frustrating, to say the least.  I feel so un-energetic each day. :-S

# Monday, November 28, 2005

Speculating on the next Gameboy

Monday, November 28, 2005 5:26:03 AM UTC

As I was laying down to sleep, I started to think about the next generation Gameboy (GBX, Gameboy Next).  Honestly, I don't remember the train of thought that lead me to thinking about it, but I was sooo engrossed, that I had to get out of bed to jot down ideas and what not.

The first thing that came to mind is what type of media would Nintendo choose to use?  I think that any sort of optical or magnetic disk type media would be way too inefficient from a power and loading time perspective.  Clearly, Nintendo has always placed a big emphasis on quick load times, which are essential for portable gaming systems.  In addition, Gameboys have a rich tradition of looong battery life.  Disk based media require spinup time, which negatively affect load times.  So the only thing that comes to my mind is flash media (or small format hard drives, if they're cheap enough and sufficiently durable).  It will likely be a proprietary format (for reasons that will be discussed below). 

But to distribute flash media with each game is inefficient and costly (as was always the main issue with cartridge based systems aside from the size limitation).  We have already been told by Nintendo that the Revolution will offer games for download.  It would seem like this would also be the obvious choice for the GBX, with one radical difference: the games will be download only

Yes, download only.  This may sound bad for stores that sell games, but consider the facts: 1) stores will have an advantage in that they can distribute game related materials (manuals, freebies, etc.), 2) not everyone will have access to an internet connection, so stores will still need to have download kiosks, 3) stores will allow users to validate copies of existing software titles so that users can download.  That last point is of particular interest as it means that the GBX will have backwards compatability by allowing users to download copies of their old games.  We have a precedence for this as Revolution will allow users to download old NES and SNES games (and who knows what else, maybe even Sega Genesis games?!).  On point 1, all manuals will be made available online in PDF format for download.  On point 2, an internet connection will not be required to play the game, only to download the game.

All downloaded games are portable across units, but not across media.  What this means is that you can download a game to a particular media and you can then use that media in another unit to play the game, but you cannot copy the media.

Flash memory is relativley cheap nowadays, with retail prices for 1GB of memory ranging from $40-50.  For comparisons sake, the Gamecube disks are 1.5GB in capacity.  Keeping in mind that this is a portable system meant to be played on a small screen and the fact that flash memory prices will drop significantly in the next 1.5 to 2 years (the timeline for the GBX), we can postulate that a 2-4GB flash unit at $40-50 could hold a good number of games considering that the current DS memory cards are only supported up to 128MB.  Of course, the games themselves will be cheaper as the overhead of distributing the games is significantly reduced.  The cost of printing the games is completely eliminated.

The advantages of using flash media and downloads is easily apparent in the cost savings for Nintendo and the convenience for the user.  Using solid state memory allows for significant power savings and reduced loading times compared to magnetic and optical media.  For game saves, the GBX can either reserve game save space on the download media (for example, if the game is 120MB, 10MB may be reserved for the game saves for a total footprint of 130MB) or perhaps use a seperate, more conventional (non-proprietary) media, for game saves.

So why is a proprietary media required for the downloaded games?  The reason is that it must support certain measures to ensure that games are not duplicated (or at least not easily duplicated) and/or pirated.  More specifically, it must contain a write only section that cannot be altered. How does this all work out?  I'm glad you asked :-)

  • Each media will have a unique identifier (UIDMedia)
  • Each media will have a private key (KV,Media) and a public key (KU,Media)
  • Each GBX unit will have a global public key (KU,Global)
  • Nintendo servers will have a master database that contains the unique ID (UIDMedia) for every media manufactured along with the public key for the media (KU,Media)
  • Nintendo servers will also have a private key (KV,Global)

Certainly, there will be some sort of handshake procedure and what not to setup the connection for browsing game catalogs and initiating the download to ensure that only registered hardware (registered when manufactured) can connect to the servers, but I'm only going to cover how a theoretical download scenario could work after the handshake.

(I aplogize for the unconventional notation, as I'm too lazy to go in and format the HTML properly, so just follow along.  Also bear in mind that this is a very high level overview.)

  1. <Unit> M0 = Encrypt(KU,Global(UIDMedia)).  The first step is to create a message by encrypting the unique ID of the media using the public key of the Nintendo servers.  This ensures that only Nintendo servers, which have the private key, can decrypt the message and map the unique ID of the media to the public key of the media.  The message is sent to a Nintendo server.
  2. <Server> UIDMedia = Decrypt(KV,Global(M0)).  The server decrypts the message from the unit using the server's private key.  This results in the unique ID of the media.  The Nintendo servers contain a key map of media unique ID to media public key.
  3. <Server> M1 = Encrypt(KU,Media(KShared)).  Using the public key of the media, a shared key is encrypted to create one part of a message.
  4. <Server> M2 = Encrypt(KShared(FileGame)).  The game binaries are then encrypted using the shared key.
  5. <Server> MF = M1 + M2.  A final message is created by encapsulating the encrypted shared key and the encrypted game file.  This composite message is then returned to the GBX unit.
  6. <Unit> KShared = Decrypt(KV,Media(M1)).  The GBX unit obtains the shared key by decrypting the first part of the return message using the private key of the media (remember, it was encrypted using the public key of the media which is stored at the server).  The shared key is never stored in an unencrypted form.  Each time a player loads a game, the shared key is decrypted again.  Only the encrypted form of the shared key is stored (perhaps the unique ID of the media is also stored in the message as an added measure).  Because the shared key is encrypted with the public key of the media, only the private key of the media, contained in a read only region of the media, can be used to obtain the shared key.
  7. <Unit> FileGame = Decrypt(KShared(M2)).  The game file is read using the shared key.  Decryption is done in real time using hardware level decryption for performance reasons.

Essentially, this would be a form of DRM where the rights are associated with the media, not with the unit.

Bill Gates was straight on in commenting that the HD-DVD vs Blu-ray format war is insignificant due to the fact that this will be the last significant physical media (from a distribution perspective) for quite a while (at least when it comes to consumer electronics; holographic storage will eventually become the standard in ultra high capacity data storage).  Nintendo, I think, will be the first gaming company to move away from distributing physical media altogether by switching to a download only type of service for its next gen portable console.

Other random thoughts on the console are:

  • The DS screen resolution is currently 256x192 (for each screen).  PSP is 480x272.  I expect that, with the improvements in LCD and processor technology in the next two years, the GBX will have a resolution higher than the PSP (although we all know that Nintendo has a habit of undervaluing graphics capabilities).
  • It will have a 6 button design similar to the DS.  The current GBA has a 4 button design (A,B,L,R).  I picture a setup more like the GCN's, however, in that it will be three smaller buttons surrounding one large action button.
  • The unit will have a built in gyroscope.  This ties into the Revolution and some of the experimental games on the GBA which have built in motion sensors (WarioWare Twisted!).  Racing games, flight sims, etc. will be totally sick on this machine.  In addition, it may also connect to the Revolution as a wireless controller.
  • Following in the vein of the SP and the Micro, it will be slickIt will be sexy.  I picture it somewhat like an iPod Nano in terms of finish (except it'll be more resistent to scratches).
  • It will have built in wireless capabilities.  We see that Nintendo is finally coming around to all of this 'Net gaming and really embracing it (Mario Kart DS).
  • To enforce a kid-safe environment, as each unit will have a unique ID, Nintendo can create an architecture whereby each conversation and each exchange of text is logged and scanned in an asynchronous fashion.  Other users in a conversation may also choose to explicitly tag a conversation as breaching the terms of service.  Essentially, it would require a massive grid of computers to scrub recorded voice and text data for abuse.  In turn, Nintendo can punish those users by disabling voice and text capabilities (on the Nintendo network) for an increasing period of time with each infraction.
  • There is a very distinct possibility that we will be seeing an emergence of large capacity, small format hard drives in the next year.  This is related to the recent developments in storage design.  Specifically, perpendicular storage technology, which promises to increase disk density significantly.  Anywhere I've used "flash memory", it may very well be replaced with a micro harddrive boasting 20-40GB.
  • I think it'll look like the OQO ultraportable in terms of layout (the screen slides up to reveal the input buttons), except not as wide.  This would be inline with the design of the Gameboy Advance SP "clamshell" and would be great for viewing media when not gaming.  Which leads me to...
  • The GBX, contrary to Nintendo's typical stance on building pure gaming machines, will be a multimedia platform as well.  With the emergence of cheap, large capacity storage and the competition (Sony), it will be hard for Nintendo to ignore this functionality.
  • And finally, this being Nintendo, we know that there is going to be some sort of innovation that hasn't been done before on a handheld gaming system.  I predict that this will be stereoscopic 3D.  Yes, you read that correctly.  Sharp has already developed an LCD for cellphones which has this technology.  What's great is that the effect can be turned off in case it causes headaches and what not for certain users.

Okay, that's enough babbling and speculation from me.  Time to sleep damnit!  I dunno, I've somehow managed to hype myself up over my totally fabricated speculation :-D

But mark my words, I think what I've outlined here will come to be in the form of the next generation "Gameboy".

# Saturday, November 05, 2005

Friday's Random Thoughts

Saturday, November 05, 2005 12:20:13 AM UTC

Just to wrap up my Austin trip, here's a few random, slightly organized thoughts on the city of Austin and my trip:

  1. There's lots of good, cheap Tex-Mex food in Austin (but I guess that this is true for most of the southwest).  Damn, I had some of the best Mexican food I've had in my life and it was ridiculously cheap.
  2. PT Cruiser...what an abomination of a car.  If you didn't know already, the rear window controls are at the base of the center console.  Double-U, Tee, Eff?  I didn't drive one, personally, but damn, it was ugly, slow, uncomfortable, and the antithesis of ergonomic.  Not that I had it much better; I had a Cavalier.  No wonder the American automakers are tanking so hard...I'm surprised they've lasted this long with crap like this.
  3. The capitol building in Austin has some very nice floorwork and craftsmanship in general.  Very nicely architected and designed.  It's kind of cool that there's so much concentrated in such a small area (two universities right around the capitol).
  4. Austin (and probably Texas in general) is very open compared to NJ (the most densely populated state in the country).  I like it.  No traffic jams, wide roads, well designed traffic patterns...I wouldn't mind living there, to tell the truth.
  5. TownePlace Suites is so-so.  For $89/night, it was a decent deal as I had my own kitchen, queen size bed, and a nicely sized living room.  The bed was very comfy, but the showerhead was weak and the "light continentel breakfast" really meant "bagel in a plastic bag".  Homewood Suites, on the other hand, was much better in terms of the food and accomodations (they had a basketball court in the back!).
  6. Being from the north, I tend to look at people oddly if they're walking around with a cowboy hat on, which seems to be common practice in the southwest.

All in all, Austin is a very nice place.  Not nearly as congested as most of NJ.

As I had a lot of down time, I made a bit of progress with The Mythical Man Month.  Without writing an entire essay, I'd just like to share some passages that caught my attention.

"Most organizations spend considerable effort in finding and cultivating the management prospects; I know of none that spends equal effort in finding and developing great designers upon whom the technical excellence of the products will ultimately depend."

"My first proposal is that each software organization must determine and procliam that great designers are as important to the success as great managers are, and that they can be expected to be similarly nurtured and rewarded.  Not only salary, but the perquisites of recognition-office size, furnishings, personal technical equipment, travel funds, staff support-must be fully equivalent."

I've never reall understood why so much emphasis was placed on middle management in most organizations.  I do agree that having exceptional managers can help increase organization and productivity dramatically, but the fact of the matter is that there are few exceptional managers.  My coworker, Igor, offered that instead, the emphasis should be placed on teams.  Small, self governing teams organized by technical function (database team, UI team, data objects team, etc).  The benefits of such a system of organization is clear, for no manager overseeing 20-30 employees can truly understand the strengths, weaknesses, and capabilities of each of the employees.  But such quandaries are easily sorted out in a small team where the team must bear the burden of the responsibilities and thus the team becomes accountable for understanding the function and capacity of each of its members.

One point, in particular, that I'd like to share is one of Brooks' bullet points on how to grow great designers:

"Systematically identify top designers as early as possible.  The best are often not the most experienced. [Emphasis mine]."

Too often in the software industry, the emphasis is placed on years of experience, and not on the actual merits and capabilities of the individual.  As the art and science of software engineering continues to expand and evolve, the best designers will expand their minds and evolve their techniques in parallel.  Software engineering is not a field in which the information and knowledge base remain static.  Certainly, there are core principles that never seem to change, but there are also many different new perspectives, practices, and patterns that emerge with each iteration of tools and environments.  I guess my point is that organizations must find ways to identify and then consequently nuture potential and not merely take the easy road by measuring years of experience.

There were also parts of the text that relate to a project I'm currently working on where the client continually makes change and feature requests, which, by themselves, are not necessarily bad.  But on some levels, the change affects the fundamental design principles of the application, which is time consuming and prone to introduce bugs without massive re-architecting and regression testing.  On this, Brooks says:

"The hardest single part of building a software system is deciding precisely what to build.  No other part of the conceptual work is so difficult as establishing the detailed technical requirements, including all the interfaces to people, to machines, and to other software systems.  No other part of the work so cripples the resulting system if done wrong.  No other part is more difficult to rectify later."

"Therefore, the most important function that software builders do for their clients is the iterative extraction and refinement of the product requirements.  For the truth is, the clients do not know what they want.  They usually do not know what questions must be answered, and they almost never have thought of the problem in the detail that must be specified.  Even the simple answer-'Make the new software system work like our old manual information processing system'-is in fact too simple.  Clients never want exactly that."

How true this is.  That last point is particularly interesting.  It's something that I've never understood; shouldn't the idea be to make it better than what you already have?

As I was driving home, I was thinking about how, I would approach a software design project knowing what I know now.  Sitting in on a hardware infrastrucure design session, it's clear how different the art of designing hardware solutions is compared to software solutions.  This is not to belittle the work done by the EMC guys, not at all.  But the fact of the matter is that the constraints, requirements, and features are so well defined by the cost and physical limitations of hardware that architecting a hardware infrastructure is a far less torturous exercise than designing a software system architecture.

I've been asked before, during interviews, how I approach system design.  I think that the right answer is that there is no answer.  Anyone that dares give "an answer" is like a voter that votes strictly Republican or Democrat, regardless of the particular issues at hand; it's a foolish and dangerous approach to think that there is one method or methodology that can be applied to every system.

The secret, as I've discovered on one of my recent projects that I deem to be my finest work to date, is that software must grow in an almost organic fashion instead of being built.

Of this, Brooks' says:

"Must of the present-day software acquisition procedures rest upon the assumption that one can specify a satisfactory system in advance, get bids for its construction, have it built, and install it.  I think this assumption is fundamentally wrong, and that many software acquisition problems spring from that fallacy."

"Let us turn to nature and study complexity in living things, instead of just the dead works of man.  Here we find constructs whose complexities thrill us with awe.  The brain alone is intricate beyond mapping, powerful beyond imagination, rich in diversity, self-protecting, and self-renewing.  The secret is that it is grown, not built."

"I find that teams can grow much more complex entities in four months than they can build."

And so it was on my last project; the current (and I shan't call it final) design grew, piece by piece, line by line, class by class from a conceptual vision that I had in my head.  At every step, I considered where I could refactor the code, where I could make generalizations, where I could consolidate code, and where I could improve the interfaces and classes.  Where I spotted room for improvment, I did so.  With no interference, the very design itself grew as I learned more about the system and the dependent systems.

I can see that many of the practices and ideas behind agile and XP are not entirely new developments, but rather a natural evolution of the ideas that have been present in software engineering for decades.  Perhaps what's bothersome to me is that, even with this much time, the practice of engineering software is still very immature and it seems as if companies have not learned from the incidents and experience of the past.  We still see an over-emphasis, in many organizations, on management and not enough on discovering, developing, and rewarding top designers and programmers.

Okay, so maybe I've run on a little bit longer than I expected :-) But I'm done now, I swear!  Enjoy your weekend!

# Tuesday, October 18, 2005

A Small World Indeed

Tuesday, October 18, 2005 1:17:45 PM UTC

On an interview yesterday, one of my interviewers asked about my experience at ITT.  Specifically, he asked whether I knew Chris :-o.

Now a quick flashback; Chris was my second level manager at ITT.  Towards the end of my stint at ITT, he and I were butting heads over whether to use Plumtree to satisfy an internal client's request.  Obviously, management wins in these situations.  He also took me into his office one time and chewed me out for asking for a raise (which he was nice enough to give to me anyways).

Back to the interview; I was kinda thrown off a bit and had to think for a moment on how to respond.  I mean, I have no hard feelings towards Chris, as I was able to work with a lot of freedom and responsibility when I was at ITT, but I can't say that we parted ways on the best of terms.  I decided to give the honest answer: Chris is one of those stubborn, hardnosed guys that can be difficult to work with at times (I am too :-D).  I think he took it well, as anyone who knows Chris knows that he can be a tough to work with at times (as am I).  All in all, I think it was a bad interview, but not necessarily any fault of my own.

To begin with, I had missed several tabs of an Excel spreadsheet that I was supposed to fill out and email back to the HR recruiter (who notices tabs in a spreadsheet?).  Doh!  In addition, there was tons of paperwork and a set of pre-interview questionaires that the recruiter had to fill out (would have been faster if I typed it instead of her).  That alone took 1.5+ hours to complete.  Then, during the interview, it really didn't seem like the interviewer was very interested (seemed as if he had more pressing matters).  He pretty much asked me the same questions I answered in the pre-interview questionaire (even though he was holding and obviously reading it).  Blah!  I also brought along my laptop with demos of my work, but the interviewer was obviously not interested, as I hinted several times that I could demo some of the work that I mentioned in my resume.

Not only that, it wasn't overly technical at all.  Actually, there was no discussion of technical skills whatsoever, which is a bit disappointing, as I think it gives good insight into the types of people an organization has (and also gives me a chance to shine).

As an aside, I've always wondered why IT consulting companies still rely so heavily on paper based procedures.  It would have been much easier to have the forms online and allow applicants to fill it out before the interview.  I mean, who keeps records of the addresses of your employers filed in your head?  What about reference contacts?

They did have a very nice building though.  Damn, it's one of the nicest buildings I've ever been in (even nicer than the Merrill Lynch Hopewell campus, which was a pretty nice building).  Even had a huge Samsung DLP television in the conference room; Awesome.

Overall, not a very good interview, but who knows.

In any case, it's one of those "wow" moments when you realize how small the world really is.  As I learned in the last month, one of my coworkers here at Immedient, Evan, previously worked at MarketSource, where my friend Hoon had worked just a few months before (he's now an actuary).  Oh yeah, and I almost forgot, the recruiter mentioned that she used to work down the street from where I work now and she used to cold call our company (for what purpose, I don't know).

A small world indeed.

# Wednesday, September 28, 2005

What's Wrong with Insourcing?

Wednesday, September 28, 2005 1:42:45 PM UTC

As I was browsing through the forums at Arstechnica, I came across a post titled "Alternatives to outsourcing?".

Being an IT consultant, this immediately caught my attention.

I read in Time, a while back, that a few companies were experimenting with insourcing, or the idea of setting up shop in areas of the US where the cost of living is low.

As the Net has spread and the amount of bandwidth has increased, to me, physical location is becoming less and less important as communication via the Net has become more accessible.  From video chat to VoIP, the reality of a truly distributed team unit is getting ever closer to reality.  Hopefully, WiMax will get us over that next hurdle of "the last mile" and truly network the entire nation.

What kind of strikes me as odd is that, even though most (probably every) software developer or IT consultant has a broadband connection, why I still have to show up at the office every day.  To be honest, for the 9 months that I've worked here, a total of 4 of those months were spent on "The Bench" (some refer to it as "The Beach").  I know some people that can't work at home due to the inability to focus or other distractions like spouses or children, but that's not the case with me and I'd happily and productively (somehow this doesn't seem like proper grammar) work from home.  It wouldn't be so bad if I could show up in jeans and a dress shirt, which I did for the first few months, but now we have this silly business casual dress code (yes, I'm being picky), and I have to wear khakis.  Tucked.  Blah!

Okay, back on topic :-).  To be honest, I could do my job just as well from my fictional house in rural Georgia or South Dakota, provided I have a broadband connection.  And I'd rather be doing that than living in Jersey.  Traffic congestion is horrible and I think it lessens my lifespan by 20 minutes each day (the amount of extra time it takes me to get to work due to traffic).  For the price of a small townhouse in Jersey, I could build a huge, 4 bedroom castle in Kansas.  In fact, Kansas offers free residential land to encourage people to move out there.  Not only that, they offer free commercial land and lots of monetary incentives to set up shop out there.

So the question stands, what's wrong with insourcing and why don't we see more of it?  Certainly, while it's not as cheap as outsourcing/offshoring, I think it's a better investment in the long run considering the state of our economy and the good press it can bring a company willing to invest in the American people.

The Perfectionist Plague

Wednesday, September 28, 2005 1:07:30 PM UTC

There has to be other people out there like me.

I have issues.  Many issues.  We all do.  Perhaps the one that gets to me the most is that I'm a perfectionist when it comes to certain things, like designing software.  It's a curse, because I try to be perfect from the beginning and it adds to the inertia of getting the project started in the first place; getting that first, crucial prototype out the door is the key first step to any project.

This is an issue that I've had for a quite a while now and I know that software is supposed to be imperfect.  Particularly when you undertake to create something new, no one knows what it's supposed to look like; no one knows, 100%, what it's supposed to do.  Certainly, there is an idea of what problem a particular piece of software should solve with version 1, but I'm always trying to figure out what it's supposed to do in version 2, before version 0.1 is even complete.  Therein lies the problem.  My psyche forces me to understand the problem and solution completely before I can really start to make it a reality.

I have a pile of papers scattered around my desk at home and my desk at work with various projects that I've doodled or half started, but couldn't think through completely either due to waning interest or lack of time.  In all cases, I get stuck trying to see the whole picture before I've arrived at the destination.

As a developer, I know the importance of prototyping and building simple proof-of-concepts.  If fact, I do this often in my professional life.  But as soon as I start working on any type of personal project, this perfectionist drive just kicks in and immobilizes me from the get-go :-(

I can't be the only one that suffers from this afflictive emotion.  How do other developers deal with it?

One way is to work with others.  A couple of months back, I worked on a project with a friend I met while working at ITT, Blake Dubin.  It was great working with him as he had a vision of exactly what this tool needed to do, which relieved me from over-analyzing the requirements of the tool.  In addition, it helps that he prodded me to get the work done :-D Yeah, the code was a bit sloppy, but it was done in under 15-18 hours and it's really pretty cool to boot.

The problem is that in my day-to-day life, I rarely deal with other developers/managers that I feel are as interested in building these things as I am.  One of the big problems is that I'm surrounded by slightly older developers.  That in itself is not so bad, as there is always something to be learned from experience in the industry, but the problem is, they're not old enough that they can kinda shake off the responsibilities of family life yet.  These guys are in their late 20's and 30's, so they have to, rightfully, place family ahead of self, especially since they have very young kids, which leaves them with little free time to work on anything else.

I have a few friends who are developers as well.  My college roommate, Joe, lives right around the corner from me.  But he's absorbed by World of Warcraft.  The man is practically glued to his computer desk.  In addition, he doesn't have the same passion for creating random pieces of software (I think he'll end up in management in a few years).

I'm sure this problem is not restricted to just software development.  So how do you guys deal with this?  It's even more annoying that I realize that this is a problem that I have, and yet I'm unwilling or unable to resolve it by myself.

# Monday, September 26, 2005

Saw the Dalai Lama!

Monday, September 26, 2005 2:24:26 PM UTC

Quite a long weekend.

It culminated on Sunday with the lecture given by the Dalai Lama at my alma mater, Rutgers.

I also attended a wedding the same night; quite a spectrum of events to absorb in one day.

I would like to preface by stating that I am an atheist.  I am attracted to Buddhism not for the spiritual/religious aspect of it, but rather the philosophical/moral aspect and the message of the Dalai Lama, one of peace, compassion, acceptance, and altruism without exception.

To be honest, I didn't know what to expect from this lecture; I wasn't sure why I plopped down $30 for the tickets.  I was first formally introduced to Buddhism in my Chinese Civ. class by a Dr. Peter Li (who, in retrospect, reminds me a lot of the Dalai Lama in mannerisms, speech, and approach).  As I mentioned, I'm an atheist and thus, Buddhism, to me, is not so much a religion as it is a philosophy of living.

Having been removed from that academic environment, I've been slacking in terms of my continued studies of Buddhism.  To that effect, I wasn't sure that there would be any purpose or value in going to this event.  Was it just to satisfy my ego?  Bragging rights?  I don't know, but I felt that I had to go, being that this might be a <cliché>once in a lifetime chance</cliché>.

The day began early for us as we took the scenic route to Rutgers (really scenic).  As we waited in the stadium, I found that I was quite surprised at the number of people that showed up (I'm not quite sure why, as I knew that the lecture was sold out).  It's an awesome sight to see so many people congregate in one place for a non-sporting event.  What struck Sandy and I the most was the incredible diversity of the group that was present.  In our day to day lives, I think that most people rarely deal with such a diverse population (be it your classroom or you workplace).

Aside: The population of Rutgers, and New Jersey in general, is incredibly diverse.  I recall sitting outside, waiting for my classes to start and watching as people of all races, cultural backgrounds, and religious beliefs passed by.  What's amazing is the level of acceptance demonstrated by everyone.  I mean, yeah, we had our share of bad apples (I recall some anti-semetic graffiti), but for the most part, the Rutgers student body is bountiful in its cultural and racial differences.

It was simply amazing to witness the event; as 10:40 arrived, the entire crowd of thousands of people sat in silence, focused completely on the presence of a single man.  The Dalai Lama himself is a simple man of simple words and simple ways.  He began by addressing the crowd in Tiebetan and had a translator translate his greeting.

For the remainder of the lecture, the Dalai Lama addressed us in English, only turning to his translator for a few terms here and there.  The lecture had a very informal feel to it.  In speech and mannerisms, we, his audience, were just as "old acquaintances".  I half expected a much more formal, more serious tone to his lecture.  Okay, actually, I fully expected it to be a very stale lecture.  To my surprise, the entire stadium would occasionally erupt with warm laughter as the Dalai Lama made small jokes throughout his speech.

The subject of the lecture itself contained nothing earth shattering (I won't bore you with a transcript of what was said, you can catch that from the videos); nothing that you or I haven't thought of before.  In fact, when Igor asked me what I had learned from the lecture, I struggled to figure out what exactly moved me so much? Why should it matter that these views were being conveyed to us by this man?  I thought deeply about this after the lecture and today as well and I think the reason it was such a moving speech (yes, I teared up at one point) was the absolute conviction with which he delivered his message; one full of compassion, understanding, acceptance, and altruism.  The very embodiment of the Buddhist philosophy.  Yes, I found myself moved to tears as I sat there listening to his views, in complete silence, along with 40,000 of my brothers and sisters.

What made the entire experience even more enriching is that you can only truly realize how down-to-earth and "everyman" the Dalai Lama is if you see him, observe his mannerisms, and listen to his speech.  He made it plain and clear that he is just like everyone of us and no different.  He has his moments when he suffers from afflictive emotions such as anger and jealousy.  He doesn't claim to know all of the answers; in fact, he states the opposite quite frankly.  When asked about this thoughts about the conflict between the Israelis and the Palestinians, he offered his views, but added a footnote that since his history of the region and the background of the two groups was insufficient, he was incapable of providing us with The Answer. 

The appeal of his message, and of Buddhism as a whole, I think, is the idea that there is hope for humanity.  No, there is hope for all sentient beings to live in peace and contentment.  And the solution lies not in some mystical god who works in mysterious ways, not in some relic, not in some religion, but in each of us.  The fate of this Earth lies in our own hands and we can only truly achieve peace through education, self cultivation (be it spiritual or otherwise),  compassion, and shedding our ignorance inherent in perception (as opposed to reality).

Igor asked whether I felt that this was a religious experience or an intellectual experience.  In reality, it was neither.  It was a humanistic experience that occurs but rarely in our lifetimes.

I highly recommend watching the video recap of the lecture (linked off of the Rutgers site above).  And if you should ever get the chance to see him in person, even if you are Christian, Jewish, Muslim, Black, Caucasian, Americn Indian, or Martian ;-), I can only advise that you do not miss the chance as he is truly an extraordinary human being, whether he thinks so or not.

ASP.Net Cost of Entry

Monday, September 26, 2005 1:59:33 PM UTC

Over the weekend, I was looking for some nice .Net based, open source web based photo gallery applications.

There are only a small handful of such products, including nGallery and Community Server (which uses nGallery).

On the other hand, one of the slickest and most feature rich web based photo management apps, Alex King's Photos 4.1, is built on PHP and MySQL.  While Alex mentions that it's not a gallery app, it's simple to imagine that it could be with only a few small modifications.

In general, the entire .Net culture of create-and-profit is disheartening, considering the wide open community built around alternative technologies like PHP, MySQL, Perl, and so on.  Part of this is Microsoft's fault for not releasing free, full featured tools necessary to build the applications.  Yes, you could build ASP.Net web apps using only the SDK and command line tools, but then you increase the barrier of entry by relegating the technology to only the diehard nerds.

My hope is that, with the release of the Express line of tools and new development frameworks (like Atlas), we will see more open source tools that don't suck in the next .Net generation.

I'm currently debating on whether it's worth my time creating a web based photo management/gallery application (that doesn't suck) using .Net 2.0 and Atlas or WPF/E, which would limit the availability.  Any votes?

On a related note, this month's Wired mag contains an interview with Tim O'Reilly (of O'Reilly publishing fame).  As summarized by Stephen Levy, the "new Net" is built upon "a philosophy of participation and sharing and a sense that collective action will inevitabley accrue to the greater good." 

When asked to identify his passion with only three words, O'Reilly responded: "Harnessing collective intelligence."  I like to think that Microsoft is catching on and will truly lead us into the pack rather than away from the pack like the lone wolf that is sure to struggle without the support of his pack.  The vision that I see coming out of Redmond with this new generation of technologies is very promising in that respect.  And for that, we should be greatful and excited.  I hope that many of the incredibly talented developers out there who've traditionally shunned Microsoft technologies will give them a shot this time around.  There's just some really incredible free tools on the horizon that will enable developers to create the next generation of web based tools.

# Saturday, September 24, 2005

America's Sorting Machine

Saturday, September 24, 2005 2:08:23 PM UTC

I've been in a rather long debate with my co-worker, Igor, about the American public education system. 

Igor, being the father of a 9 year old and me, being the husband of a fourth grade school teacher.  This is not to mention the fact that I'm only 6 years removed from high school.  So we both have very strong feelings on this subject and justifications for what we believe.

While Igor and I agree that the American public educational system is not working the way it should and that the American public, in general, undervalues the importance of education ("it is not a first class occupation"), we have a few disagreements on certain areas.  One contention that Igor has is that he sees the trend of integration of all levels of students into one classroom as being a negative one.  He offers that kids should be broken out into different classes based on their proven academic performance.  In other words, they should be tested, prodded, and sorted until we have a clear representation of who's the smartest and who has no hope. 

He proposed the idea that what we are really dealing with is a linear programming problem.  Given that you only have n amount of resources and given a model (a set of equations) for the amount of returns you would get by investing in given class (x1, x2, x3,...xn), you should obviously invest the most in the students that give the highest returns.  Certainly, as a public educational system, we can't deny the lower level students.  But in Igor's view, new books should go to the best students.  The best teachers should be allotted to the highest level students.  To the rest, we hold their hands and help them through high school and just hand them a piece of paper if they should make it.

A parallel debate that we've had is whether it is okay to sacrifice a few for the greater good of the whole.  In discussing the Three Gorges Dam in China, Igor said that it was unacceptable to force the farmers and villagers at the site of dam (and upstream of the dam) to move from their homes.  According to Wikipedia, up to as many as 1.9 million people will eventually be displaced.  Igor is one of those guys that invoke's Hitler any time you try to have a discussion with him ;-) His argument being that Hitler had convinced the German people that the sacrifice of the Jews was acceptable for the greater good of the Aryan race (or something like that).  His view is that you can never accept sacrificing the rights of the few for the whole.

In the case of China, I don't think Igor's analogy is very good.  To begin with, to my knowledge, people are not being killed by the millions if they refuse to evacuate.  In addition, there is a tangible benefit to everyone, mainly better flood control (which causes billions of dollars of damage to property and crops, thousands of lost lives, and millions of displaced people anyways), an abundant source of clean, cheap electricity (necessary for a developing nation),  and you can even consider tourism to the region to be a source of income for the otherwise rural population.  All this for the sacrifice of displacing (not murdering or exterminating) a mere .01% of the population.  But to me, this is a necessary sacrifice for a population that is nearly 800 times (1.5 billion) the displaced population.  China needs the cheap, clean electricity.  China needs to have control over that fertile land around the river for the sake of improving industry and agriculture.  Certainly, there are unanswered questions regarding the long term viability of the dam including the effects of soot build up, but to me, the benefits far outweigh the negatives and justifies the government's right of the displacement of those people.

(I could spend forever writing on the topic of above, including how emminent domain helped build our transportation network that was essential to the growth of the United States as a nation.  However, that is a post for another day.)

So you see, Igor counters that integration, in the hopes of giving all students a chance to succeed in the same environment, sacrifices the good of a few, the brightest students, for the better of the whole, all of the other students.  He feels that the best teachers and the best materials should go to the smartest kids, namely his.

Of course it's a totally ridiculous statement.  It's like saying that, given 10 obese children, eight of which are dangerously so, a weight loss counselor should focus most of her efforts on the two that are not dangerously obese.  Instead of working with them simultaneously so that the somewhat obese children can help the dangerously obese children in coping and developing good eating habits, we should seperate them and create a counseling group for the somewhat obese kids and one for the dangerously obese kids.  Then we assign our best diet and weight loss counselor to the somewhat obese kids.  Since these kids have the best chance of attaining a normal weight, we'll also put our best chefs on their meal staff so they get the best tasting, low fat, ultra-healthy meals.  In addition, we'll apportion most of the time in the exercise room, of which we only have one, to these kids since if they get enough exercise, they'll have a better chance of attaining a normal weight.  On the other hand, since most of our finite resources are going towards the slightly obese children, there aren't enough for the majority of the kids, the dangerously obese kids, the kids that need the most help.  Instead, we assign a mediocre counselor to the dangerously obese kids and underfund her as well.  Since our best/most skilled chefs are preparing courses for the slightly obese children, our most obese children end up with a menu that's not so appetizing, which in turn, causes them to regress and try to sneak in Twinkies.  Since the exercise room is scheduled for the slighly obese kids most of the time, the dangerously obese kids don't get to spend enough time exercising.  Of course this is an absolutely ludicrous idea; it's clear that the most help should go into the dangerously obese kids in this situation and that having both types of kids in the same group can have a positive effect.  Why should it be any different with our school system?

What Igor doesn't see is how this is, in reality, the sacrifice of many for the good of a few, which, in my opinion, is even more unacceptable than sacrificing a few for the greater good of the whole.

To further aggrevate the situation, the infamous Stanford Prison Experiment showed that people are easily absorbed into the roles and labels with which they are assigned.  After the experiment was ended abruptly, as both "prisoners" and "gaurds" groups were falling too deeply into their assigned roles, it was concluded that:

"the results of the experiment are said to support situational attributions of behavior rather than dispositional attribution. In other words, it seemed to entail that the situation caused the participants' behavior rather than anything inherent in their individual personalities"

In addition to this, it is important to note that:

"The group was divided in half at random into an equal group of 'prisoners' and 'guards'.  Interestingly, prisoners later said they thought the guards had been chosen for their larger physical size, but in reality they had been picked by a fair coin toss and there was no objective difference in stature between the two groups."

What does this mean?  If you segregate kids into honors and regular course levels, you are inherently and implicitly labeling them as being either "smart" or "stupid".  I bolded the last sentence because it shows that people have the tendency, then, to develop an inferiority complex (or rather project superiority upon another group), even if the decision on who goes to the "smart" and "stupid" groups is a completely arbitrary one.

I've been following a program on one of the public broadcasting channels in our area titled The College Track.  You can see it right on in the subtitle of this series: "America's Sorting Machine"; this is what our current educational system is.  Whether Igor likes it or not, this country is made of people of all walks of life, all races, all different types of cultural backgrounds, and all types of values.   As we move forward, to succeed as a country, we need to improve the educational level of everyone.  The proposal that we dedicate our best resources to the few that we think can acheive great academic feats is a proposal to essentially sacrifice the chances of those we think are inferior, academically.

In looking back at my own life, I can see how this panned out.  Igor likes to rag on me about my 1400 SAT score (650v/750m; 90th and 98th percentile, respectively) whereas his "hopeless" daughter got a 1460.  He rags on me because, according to my demographics, I should have gotten much higher.  I like to inform him that my sister did indeed get a 1580 (combined highest) and attended Wharton (not that I seriously place a lot of value in this school as it was academically worthless in my opinion, but Igor is one of those guys that believes in names and prestige).

This morning, as I was discussing this with my wife, I finally realized one major factor in why, given that both my sister and I are of roughly equal intelligence levels, I would do so "poorly" on the SATs.  At this point, I need to preface this with the fact that I think the SAT is worthless as a method of measuring a student's capabilities, but that's a matter for another post.

In any case, when we first moved to East Brunswick from Bogota (New Jersey, not Colombia), I was in the 8th grade and she was in the 6th.  Because the East Brunswick school system had no idea how I would perform in their curriculum, even though my grades from Bogota were all excellent, I was placed in average level courses as a process of the sorting system.  At the grade school level, where my sister started, this has less of an effect as the kids are essentially all in the same class anyways.  Essentially, she had a chance to use the sorting machine to her advantage by virtue of a longer sorting process.

On the other hand, I can recall my first day of high school chem.  Regular chem.  By all accounts, I did not feel that I belonged in regular chem.  I looked at our textbooks and at the stack of brand new books that were being allotted to the honors chem class and a fire just burned inside of me.  I felt that I deserved those books as much as those other kids.  (Eventually, I did convince the administration to put me into chem. honors).

When you first sign up at Amazon, Amazon has no idea of what type of music you're interested in.  But as time passes and you buy more CDs, their software analyzes your purchases and the purchases of others that purchased the same items that you did and uses this data to build a prediction model of what you'll probably like.  It takes time for this process to work.  If your first CD is a Britney Spears CD for your 12 y/o sister (fictional), then Amazon's algorithm assumes that you'll have similar tastes to other 12 y/o females and recommend music along the lines of Mrs. Spears-Federline (luckily, you can uncheck what you don't want to use for generating recommendations ;-)).  However, given enough time and purchases, the model becomes increasingly more accurate and actually mirrors your taste in music.  You'll log on and find that Amazon will recommend many of the CDs that you already own and artists that you're interested in.  The key is that it takes time for the process of sorting to work.  And the pivotal time in the process, in regards to education, is the time before high school as students become more annonymous and harder to sort properly in a large population.

Whereas my sister had a window of three years, I only had a window of one.  Thus I initially ended up in the "normal" classes for a few years and had to have my mom intervene with my guidance counselors to get me to the higher level classes (at the beginning at least).  I had a shorter window to claw my way through the machinery and prove to the system that I was capable (by the time I graduated, I had taken three AP courses and received a total of 12 college credits for successfully passing the exams and I was A/B+ student).

In the Han Fei Tzu, the Prince of Han writes:

"There is not one naturally straight arrow or naturally round piece of wood in a hundred generations, and yet in every generation, people ride carriages and shoot birds.  Why?  Because of the application of the methods of straightening and bending.  Although there is a naturally straight arrow or a naturally round piece of wood [once in a hundred generations] which does not depend on any straightening or bending, the skilled workman does not value it.  Why?  Because it is not just one person who wishes to ride and not just one shot that the archer wishes to shoot.  Similarly, the enlightened ruler does not value people who are naturally good and who do not depend on reward and punishment.  Why?  Because the laws of the state must not be neglected and the government is not for only one man.  Therefore, the ruler who has the technique does not follow the good that happens by chance, but practices the way of necessity."*

As we move towards a future that will increasingly depend on a skilled, highly educated population, it is becoming more and more unacceptable to create this type of class rift and leave behind the many for the few.  Why?  Because it is not only a few jobs that will require highly skilled, highly educated workers; most jobs in the coming decades will require education beyond the high school level as we see our manufacturing jobs offshored.  There are only a few students that are naturally talented and require little assistance to succeed.  But to allot more of the public's resources to the few while relegating the rest to an "average" experience, we are placing value on the naturally round piece of wood instead of honing our ability to shape wood so that all may benefit.

* Chan, A Source Book in Chinese Philosophy, 1963, p.253

# Friday, September 23, 2005

Classic

Friday, September 23, 2005 2:46:12 PM UTC

Via Gaming-Age Forums:

"What non-gimmick games would benefit from the Revolution controller?"

Classic reply:

"Baseball - you'll get to see how much you suck at baseball

First person quarterback - you'll get to see how much you suck at football

Fighting game - you'll get to see how much you suck at fighting

Grand Theft Auto... now you can actually perform the shanking motion when you kill people before jacking their cars

Pancake/skillet/burger flipping simulation - a job training sim for many gamers

Sweeping/farming/window washing simulation - it becomes a job training game for other gamers

(mature) shuffle board

casino games

(mature) sex trainer"

# Tuesday, September 20, 2005

The American Dream

Tuesday, September 20, 2005 8:24:05 PM UTC

I finished watching Spellbound this past weekend with the wife.

It's quite amazing watching some of these kids, as young as 9, prepare for the Scripps Natiaonal Spelling Bee with such intensity and focus.

However, I'm mixed on the significance of memorizing large numbers of words.  On one hand, it does excercise the capacity of the still maturing brain, it does help kids understand the process of memorizing information, it does help develop a strong work ethic.  On the other hand, I don't know if it has any intellectual value.  To memorize formulas for physics is one thing.  To understand the formulas is a different story. 

Despite all that spekticism, I really liked the point that Rajesh Kadakia, one of the speller's father makes:

"I'll be the first to admit that it's hard.  But what is valuable in life that is easy to achieve?"

But in any case, perhaps the more important aspect of the film that I took away from my viewing is what America symbolizes to the rest of the world.  Now don't get the wrong idea, I'm not some chest thumping, flag waving, patriot.  In fact, I'm probably middle of the road in what I think of this country as a whole (or at least where we are currently), but I was really re-awakened to the fact that America is land of dreams by two segments in the film (it's one of those things that you probably think about once in a while, but when you hear it again, you're reaction is always along the lines of "Wow, that's soooo true", even though you've come to the same conclusion at some previous point in time).

As the spellers are introduced to us, one by one, we are also introduced to the different cultural backgrounds of each family.  It's truly amazing to see how the parents, family, and teachers in each vignette run the gamut of skin color, attitudes towards education, and their approach to supporting their kids.

Perhaps the best soundbites to come out of these subjects is from Mr. Kadakia.

"I'm so indebeted...to this country, which will accept a stranger [to] come in and give them this opportunity.  America is just great."

A little later, as Rajesh is showing us around his second home, he says:

"There is no way that you can fail in this country.  That is one guarantee in this country: if you work hard, you will make it.  And that's not existent in the rest of the world."

This struck me again the other night as I was talking to my wife about how badass my mom is when I think about it.  When we first moved here from Taiwan, she was a single mother, taking care of two kids, attending grad school full time, and working part-time to pay for it!  We used to live in a tiny little 1 bedroom apartment and literally posessed only junk (my mom loved garage sales).  Thinking back, it's truly amazing how determined my mother is.  You would never be able to tell by the packaging (my mom is a somewhat tiny woman), but my mother is just exploding with determination to do whatever she sets her mind to.

I'm tempted to think that this is a largely immigrant way of thinking.  Of her second trip to the spelling bee after being eliminated in an early round the previous year, one of the young spellers, Nupur Lala, says:

"You don't get any second chances in India the way you do in America."

It's true.  And I think that most people take this for granted.  The immigrant mind feeds off of this second chance in life and utilizes it to excel.  Perhaps Angela Arenivar's story (the first speller we are introduced to) symbolizes this more so than any of the other spellers in the documentary (her father being an illegal Mexican immigrant who doesn't speak English).

At this point, I'm not really sure where I'm going with this :-D but there was one other statement that caught my attention:

"I'm always thrilled to see any child come in who is from India because I know they are gonna have a good work ethic and the are gonna be good students."

Being the spouse of a teacher, I can tell you that this is a general attitude (be it good or bad) that teachers have towards Asian students in general.  My wife expects Asian kids to do well without the goading and prodding that most kids require; she's excited when she sees an Asian name on her class list in the summer.  Now, being Asian myself, and having met Asians of all walks, I can tell you that there are stupid Asians as well (maybe I'm one of them :-D), and I consistently point this out to people who make the point to me that Asians are statistically smarter than other races.

Seeing as how I can't seem to string my thoughts together today, I think I'll just end this post here.  It is the immigrant working class, driven by The American Dream, that has built America to what it is today.  As we move forward, we need to keep sight of this ideal and realize that The American Dream is not a right owed to any of us, but a privilege for which we must continually strive to attain.

If nothing else, this movie serves as a reminder that our situations are never as dire as we think them to be. America is truly the land of opportunity, be it financial or academic; however, one must always be prepared to work hard to achieve success.

Sidenote: If you search around the web, you can find various tid-bits about the spellers.  Some of them even have blogs. It's intersting to see their perspective and find out how the film affected their lives.

# Monday, September 19, 2005

The Unexpected Gamer

Monday, September 19, 2005 5:53:26 PM UTC

(Random) It has a similar consonance to The Constant Gardner.

Anyways, after watching Mr. Iwata's keynote speech, I'm more convinced than ever that Nintendo is going in the right direction and is going to change the way we, as a society, view gaming.

The key point that Mr. Iwata makes is that the human-machine interface for consoles, the controller, has never been fully accepted.  In fact, non-gamers probably find them daunting and quite alien.  Truth be told, one of the most tedious parts of starting any new game is learning the control scheme.  Memorizing button combos and what not has never been a strength of mine, even after years of gaming.

Mr. Iwata states that while even your grandmother would pick up a remote control to interact with a television, many parents that grew up before the video game generation are turned off to the games before even playing them because they're intimidated and/or confused by the interface. 

Making games more complex and more difficult (the route that Microsoft and Sony are taking), simply alienates more users by making the barrier of entry more difficult to surmount.  A big part of that barrier is the modern controller and the fact that as games become more complex, the only way to add new control schemes is to add new buttons or utilize more combinations of buttons.  Neither of those options is optimal nor are they intuitive/easy to use.

On the other hand, as I was explaining to my wife how utterly badass it would be to play Katamari Damacy with this new controller, even she was getting excited about it (and she's as anti-gamer as they come).

Mr. Iwata emphasizes an important point that I find myself agreeing with more and more: games today fail to stimulate me.  You can only go so far with graphics and immersion before it becomes the same-old, same-old.  We can clearly see how this has failed the movie industry as CG is so common nowadays, that even the definition of what is visually inconceivable is radically different from what it was only a decade ago (or even half a decade ago for that matter); at some bifurcation point, people just don't care about how pretty or how realistic it looks.  Badass CG just doesn't cut it nowadays.  The studios that "get it" smartly allot small budgets to promising stories while the others throw big money to create a grand visual experience (some studios are just dumb and continue to build stupid rehashes).  The latter works increasingly rarely nowadays.

I only own four games for the PlayStation 2: Dance Dance Revolution, Metal Gear Solid 3 (I wrote a nice Amazon.com review for it), Katamari Damacy, and We (Love) Katamari.  Part of the problem is the time commitment.  As I've grown up, I find myself with an ever increasing number of primary responsibilities and gaming is becoming a hobby that I enjoy when I have free time.  As such, I don't want to invest a huge amount of time playing long games (MGS3 being an exception).  As great as Resident Evil 4 is, I still haven't finished it, months after I purchased it.  The other part is that there aren't games that I want to play.  I mean, how different can MGS4 be from MGS3?  What new gaming experiences can I expect?  None.
 
That's the most disappointing part of this: game developers have resigned themselves to rehashing proven formulas rather than innovate and create new expriences.  As we will see with the introduction of Atlas and WPF/E, innovation in the UI can change the way we build and think about software.  Similarly, Nintendo has proven, with the success of the DS, that changing the way we interact with game devices can spur innovation in developing new gaming experiences.  Most importantly, and Mr. Iwata repeatedly emphasizes this, Nintendo is aiming to generalize the definition of a "gamer" by making the human-machine interface intuitive to everyone.

Without question, of all of the next-gen consoles that are coming out, the only one that I'm even remotely excited about is the Nintendo Revolution.  And perhaps more importantly, even my wife is excited to try it out.

The Intellectual Peer

Monday, September 19, 2005 4:16:03 PM UTC

I think I've finally figured out why I'm somewhat disappointed with my experience at Immedient (and many of my previous jobs as well).

One of the main culprits has to be the lack of intellectual peers.  By this I mean people who not only have similar intellectual interests, but people that get excited by the same technology related news that I get excited about.

In the last few days, I've been absolutely bouncing off the walls with excitement about the new technologies that are forthcoming from Microsoft.  To be honest, only 1-2 people that I deal with on a daily basis even seem to care.  I'm excited the same way a kid is when he gets a new toy; I just want to dive in, play with it, explore it, and find out what it does.  I want to push all the buttons, spin all the wheels, and I start playing imagination games in my head (trying to figure out use cases for the new technologies and where I could have applied them in previous projects and how they can be used to improve future development).

It's difficult to contain myself and it's just somewhat disheartening to me that no one in my day-to-day interactions seems to have the same level of enthusiasm that I do (my 50+ year old coworker, Igor, comes the closest, but he doesn't count because he's a technology skeptic and a database guy).

Kent Brown, a former employee here at Immedient, was probably the closest I've ever had to someone that was just really inquisitive about new technologies and open to exploration.  Unfortunately for me, he resigned a few months ago and I think for me, the atmoshpere here has really changed because of that;  I no longer feel that there are any really high level .Net developers here.  There are plenty of system architects and product experts (SharePoint, SQL Server, Reporting Services, etc.), but I don't feel that there are any UI and/or .Net experts here that I can relate to.

I'm still trying to figure out what I want to do (as Igor would say, trying to figure out what my goals are), but I'm very, very far from that point yet.  My gut feeling is that I'd be happiest working in software development (as opposed to consulting), but at the same time, I haven't really been able to find those opportunities around here and, for some reason, I just don't think I'm to snuff to make it with a company like Microsoft.  In addition, I'm somewhat egotistical at times and I think that harms me in terms of being able to communicate with other developers (which is absolutely crucial in an environment where one man can't possibly be responsible for all of the development, which I typically am).  I feel like I can probably only work with developers which I feel are unquestionably more capable than I am.

I'm working on that last part, though.  But I'm still quite lost.  I'd like to do a computer science master or maybe even a Phd, but I'm just not sure I'd like the abstract nature of that type of work (I like to build things and make tools, you see) and I simply don't have the funds to do that at the moment.

As I've moved around with several companies in the last 24 months, I've been asked, more and more, why I'm unable/unwilling to stay at one position for any length of time.  At the root, a job is just like an inter-personal relationship.  Until you figure out what you really want from a relationship, you'll never be happy in the relationship.  Similarly, until you can figure out what you want to get out of your professional life, you can't really decide what direction you should take.  I think one important facet of that is not to have conflicting goals (I'm working on this one, too).  I want to make a lot of money up front, but I also want to do "useless" work with cool technologies which may make money at some point.  Whereas I've been lucky on the inter-personal relationship side of it (I've known my wife for 7+ years now), I'm just having really crummy luck with my professional life.  My thinking is rarely aligned with those of the business people which I work for.  I'd rather fiddle around with a cool piece of technology than work on the boring stuff that I'm resigned to do on a day-to-day basis.  Blah!  To be honest, that was one of the key reasons I decided to join Immedient, but I feel like that that scenario is further from the truth with each day.  I've done one project in the last 9 months where I really had fun.

Don't get me wrong though, I'm a very realistic person and I can accept that there will always be a balance between crap and the fun stuff, no matter where one is employed.  But I guess what I'm looking for is a place where there's more fun stuff to work on and less routine.

Conclusion?  I'm lost like a little puppy in a big city :( hoping that someone takes me to a happy home.  I know, it's not a good position to be in; I feel like I should be in command of the chariot, but instead, I'm just letting the reins go and hoping that I win the race.  It's a terrible feeling to have, but one that I'm working on resolving (or at least I keep telling myself that).  I'm really quite envious of my friends, family, and co-workers who've really got their lives and goals figured out; just wish some of it would rub off on me :)

» On This Page
Rental Car Diaries
Thoughts From The Trenches (Giant Brain Dump Incoming!)
Where (Most?) Zombie Movies Go Wrong
Battling Heroin in Afghanistan, Chinese New Year, Work, and Family
Four More Months!
Obligatory Birthday Post
What Working With Python Has Taught Me...
How Not To Get Hired For A Tech Job
"Stupid Should Hurt"
Lessons From The Mythical Man Month
Is There Any Food Sriracha Sauce Can't Fix?
Wildlife
Celebrating Science
Impulse Buy...Almost
Geek Moment
The Joe Louis Story
Now For Something Completely Random...
The Art And Mystery Of The Dunk
Verizon FiOS: DAAAAAMN!1!!one!
"A Brief History of Record Industry Suicide"
The Slow Death of DRM
Programmathon VII Day 4
I Don't Like To Get Political, But...
Commentary On Current Market Woes
Commitment Chains, GUIs, Frustration, And Other Ramblings...
Sticking It To The Man (Maybe)
Software, Artistry, and Frustration
5 Lessons For Barbeque'n
25 Up
Palm Readings Vindicated (Sorta, Kinda)!
Cool Stuff
How Important Is A Candidate's Belief In Evolution?
Mortgages And Leadership
Diplomacy? What's That?
Caloric Bombardment
Another Reason to Switch to Sprint?
Thoughts on Sprint PCS
The Allure of the WWW
Well I'll Be Damned...
Forgive And Forget
I <3 Microsoft Hardware
On Software "Architects"
Down on ASP.Net
Spirit and Opportunity (a Tribute)
So I'm 25 Now.
3, 4, 5, 9, 10
Missed Opportunities
Eye Opening Al Gore Video
Modern Day History
The Lowest Common Denominator
Late Night Ramblings
Fear of Change
Sad State of Manufacturing in America
So, How's Married Life?
Random Happenings
Joy!
Life Goes On
Of Crack and World of Warcraft
I Confess...
Suddenly, the Entire Universe Makes Sense!!!
Dick Cheney: Jedi Master
One of Those Days...
Letter to a Colleague
Random Links
Happy Chinese New Year!
On Enterprise Library
Now We're Getting Somewhere (Part 2)
Now We're Getting Somewhere
Speculating on the next Gameboy
Friday's Random Thoughts
A Small World Indeed
What's Wrong with Insourcing?
The Perfectionist Plague
Saw the Dalai Lama!
ASP.Net Cost of Entry
America's Sorting Machine
Classic
The American Dream
The Unexpected Gamer
The Intellectual Peer
RSS 2.0 Atom 1.0 CDF