Programming, Policitcs, and uhhh Pineapples.
# Friday, February 26, 2010

SharePoint 2010 Mobile Rendering (And Device Emulator Fun!)

Friday, February 26, 2010 5:11:57 PM UTC

I was recently tasked with taking an exploratory look at the mobile rendering capabilities of SharePoint 2010 to get a feel for it.  The short of it is that it's sad to say that in 2010 (the year, that is), we are still doing not much better than 3-4 years ago.  Of course, this raises the question of whether it's an issue with the browser or an issue with the software (SharePoint 2010).  Based on my early experience, I have to say it's an issue with 2010 - it seems like the SharePoint team simply took the easy way out.

If you've ever used the Gmail web page from a mobile browser (like Opera), you'll see that there is a "mobile" version and a "basic HTML" version available (links on the bottom).  For all intents and purposes, the "basic HTML" version looks and works pretty much like the full web version (minus the fancy drag/drop stuff, chat, etc.) and loads fine on my nearly two year old HTC Touch Pro.  This is what we should expect from a company as big as Microsoft with vast resources at their disposal.  This is what we should expect from them given that it's 2010 and the mobile space is an increasingly bigger piece of the pie. 

What's worse is that there's no apparent way from the browser client to access the "full view".  What happens when more capable mobile browsers are deployed that can match the capabilities of the current desktop browsers?  Seems like you'll have to make configuration changes on the server to enable proper browser detection but it would be much easier to simply have the option, like on mobile Amazon.com, to load the full view in lieu of Microsoft actually offering a more usable "basic HTML" view.

Alas, instead, we get neutered functionality and weak rendering to mobile browsers for a product that's supposed to carry us to 2013 or 2014.

The following screenshots are taken using my desktop IE8, Microsoft's Windows Mobile 6.1.4 emulator, and RIM's Blackberry 9630 emulator:

Landing Page

List View

Calendar View

New Event

In analysis, I think what makes matters worse is that they've dramatically increased the capabilities of the desktop browser version, but neglected to carry forward some of the basic functionality that seems like it wouldn't be too had to implement like the ratings or tagging functionality.  This discrepancy makes the shortcomings of the mobile offering all the more apparent.

Certainly, I'm not expecting that the desktop experience to be fully emulated on a mobile device, knowing the limitations of the small screens and limited resources and capabilities of mobile browsers.  That said, I would expect a more worthy effort than this.  I would expect something similar to Gmail's "basic HTML" option and a link to the full version.  It's an embarassment, especially the new event screen; at the least, the developers could have aligned the fields (it's pretty offensive).

It's just sloppy and lazy all around and I suggest Microsoft spend some time with the mobile browsers from their competitors.  People are accustomed to a certain level of mobile browser capabilities these days and it's nowhere near as low as Microsoft would like to believe.

For comparison's sake, here's Gmail's rendering in "mobile" and "basic HTML" mode:

Gmail desktop browser, "mobile", and "basic HTML" rendering

This is much more usable and a much more congruous experience across platforms.  Come on Microsoft, stop being lazy!  As Mark Jackson would say "You're better than that!"

On a side note, working with the emulators was a bit challenging.  If you'd like to try it out for yourself, here are some resources:

Mobile IE 6

Blackberry Devices

My experience is that working with the Blackberry emulator is extremely frustrating because you'll want to click on the screen with your mouse but then you remember that the devices don't support touch so it would only be logical that the emulator doesn't either.  However, this logic leads to a hair-pulling experience when working with the emulator.

# Tuesday, February 16, 2010

Cloud Hype Rant

Tuesday, February 16, 2010 7:34:56 PM UTC

A few years ago, I read an excellent article in Wired magazine titled "The Thin Pill":

 "FOR PATIENTS, disease puts a name to an affliction. It answers that question we all face at one time or another: What's the matter with me? If there is a clear and precise explanation for what's wrong, then surely there is an equally clear way to get better."

 "Cunningham is among the first wave of Americans to be diagnosed with metabolic syndrome, a condition that, though only concretely defined five years ago, is now said to afflict as many as 75 million Americans...Metabolic syndrome is, in fact, almost indistinguishable from obesity – at least 85 percent of those who have the syndrome are obese or overweight.

 "The tidiness of that correlation makes it tempting to view metabolic syndrome not as an emerging fact of medicine, but as a fiction, wholly devised and disseminated by the pharmaceutical industry. After all, drug companies have long eyed obesity as the ultimate growth market -- and they just happen to have an arsenal of pills poised to target it."

I see some parallels in all of this cloud hype: The diagnosis is that your enterprise is spending too much on capital outlays for hardware; the cure is to pay a subscription fee to us services providers instead!

In an InfoWorld article, David Linthicum has a great bit from Miko Matumura:

 Miko is referring to the fact that "cloud," as a term and a symbol, has long referred to portions of the architecture you didn't want to explain. As Miko says, "Basically whenever someone didn't feel like drawing all of the network entities, they would just draw a puffy white cloud. In essence the puffy white cloud is shorthand for 'don't worry your pretty little head about this stuff.'" He's right about that, and also the fact that many considered "clouds" to be where the "miracle" occurs in the architecture. That was a running joke for years.

While it's told as a joke, I find this to be incredibly reflective of what I encounter when it comes to the cloud and non-techies: it's supposed to be some miracle pill that fixes all of our problems; don't worry about the composition, just take it and trust us, you'll feel better.  And it is exactly this foggy perspective that is cluttering this space with hype.

(With Matumura's anecdote in mind it's hard to ignore the parallels of the hype of this movement with the hype and mass shift towards outsourcing a few years ago: take your development and technical resources and make it an abstract, "puffy white cloud"...that's a topic for another rant.)

What makes the matter all the worse is that the term cloud computing is as nebulous as the name implies.  Jon Brodkin at NetworkWorld.com writes:

 I just performed a quick search of the archives on PRNewswire, and found 204 press releases mentioning the word “cloud” from the past 30 days. My e-mail inbox is full of cloud pitches, some of them useful, some of them not. A company called 3tera claims on the front page of its Web site to offer “the industry’s only cloud computing platform.” Really? It’s the only one?

 Other vendors are trying to confuse the definitions of the various types of cloud computing. The phrase “private cloud” seemed strange at first, but by now most people agree that it refers to some kind of highly virtualized, internal network with lots of self-service attributes, essentially an Amazon-like cloud designed by a business for its own users.

 One of the key attributes of a private cloud is that it’s run within your network – it’s not outsourced. But that didn’t stop Rackspace from claiming that it now offers “private clouds,” hosted in the Rackspace infrastructure. In other words, Rackspace is offering hosted data center services, similar to what they have always offered, and are now using the phrase “private cloud” to make them seem different and new.

Quite honestly, I'm sick of the hype and the excessive overusage of the term "cloud".  Are there tangible benefits to cloud-style application architecture?  Sure, you bet.  But I think it's important to sit back with a healthy dose of skepticism and evaluate how much of what's out there is hype and how much of what's out there is actually useful and cost effective. 

With specific regards to Microsoft's Azure, the time I spent with it was anything but pleasant: the documentation was lacking, the account and service management web interfaces were horrible and clunky, and the community knowledge is simply a void (but admittedly, this was early in the beta).  As I've seen with SharePoint, Microsoft has a habit of over-selling and under-delivering.  With two successive clients, I've found a consistent pattern of being sold a capability as "out-of-the-box" only to find that while you could do it, out-of-the-box, it would hardly be a productive or friendly user experience to do it that way.  My perspective is that as the current state of the platform comes into focus, it'll play out much the same way and we'll find that business folks, sales folks, CEOs, and CTOs will have to face the reality of an immature platform that's not yet worthy of the hype.

At least from my perspective, it's always better to under-sell and over-deliver; whether it's the fault of the vendors or not, the current hype is leading us down the opposite path, at least in the near term.

# Thursday, November 05, 2009

Analysis Paralysis : Getting Carried Away With UML

Thursday, November 05, 2009 5:07:09 PM UTC

UML is a useful tool, no doubt.  It's a tool to help model complex logic in a visual manner.  It's a language in and of itself and it can aid in communicating design ideas with exacting precision, leaving little room for error.  However, at the same time, as with any formal language, it creates strict rules for communicating in that language.  Syntax, vocabulary, "grammar"...these all apply to propperly using UML.

Myself, I've never been a big fan of UML.  There are different ways to convey ideas, intent, and understanding of a set of requirements, but imposing UML is like asking a blogger to write all of their posts in iambic pentameter when prose would work just as well.  What's the point?  Your colleagues can already all read English, but not everyone reads UML...why add that burden and rigor?

There's a big difference between the rigor required to build a bridge and the rigor required to build a web application.  Miss your target by a foot, and it's a multi-million dollar mistake if you're building a bridge.  If your bridge throws you an "unexpected exception"? You're talking possible risk of life!  A web application or a portal?  Unless there are fundamental, framework level mistakes, most changes are negotiable; it's software for a reason (and oddly enough, on large projects, the cost overhead isn't necessarily associated with the development side, but with the business side and the specific processes for validation, testing, and change management - maybe those guys need to fix their processes...).

Now this isn't to say that getting it right isn't important, but at some point, process and progress starts to drag as you impose an inordinate amount of rigor. 

With regards to sequence diagrams, Scott Ambler puts it very well:

The most important things that you can do is to keep your diagrams simple, both content wise and tool wise.  I will sketch sequence diagrams on whiteboards to think something through, either to verify the logic in a use case or to design a method or service.  I rarely keep sequence diagrams as I find their true value is in their creation.   

A common mistake is to try to create a complete set of sequence diagrams for your system.  I’ve seen project teams waste months creating several sequence diagrams for each of their use cases, one for the basic course of action and one for each alternate course.  My advice is to only create a sequence diagram when you have complex logic that you want to think through – if the logic is straightforward the sequence diagram won’t add any value, you had might as well go straight to code.

I agree wholeheartedly; the exercise itself is more important than the final artifact.  It's far too easy to interpret the intent of UML incorrectly; the value is not the artifact, the value is the process.

At the end of the day, it is not a silver bullet! It doesn't make your design more complete.  It doesn't mitigate all of the risk.  It doesn't make your intent free from misrepresentation or misinterpretation.  It doesn't make a design document bulletproof.

# Thursday, August 27, 2009

On Healthcare: What We Can Learn From The Music Industry

Thursday, August 27, 2009 7:08:41 PM UTC

Nathan Alderman has an interesting write up on the effect of a public option on the healthcare industry:

A decade ago, the major record labels were fat and happy, making piles of cash off CD sales. They could use their massive marketing muscle to push manufactured bands onto the airwaves and into listeners' ears. If you had to buy a whole subpar album just to get the few songs you really wanted, well, too bad.

Then Internet file-sharing rolled into town. I'm not arguing that piracy's right, but digitally available tunes did become a real competitor to the established music business. Rather than adapt to consumers' changing tastes by going digital themselves -- which would have meant surrendering their fat margins, and some of their control over what people listened to -- the record labels panicked. They started suing file-sharers, driving their own customers away. In short, the record labels weren't meeting customers' demand; they were trying to dictate what they thought customers should demand, and actively ignoring what the free market really wanted. Does that sound like capitalism to you?

Industry outsider Apple (Nasdaq: AAPL) finally had to almost bully labels into offering digital tunes at a fair (or at least fairer) price. Now Amazon.com (Nasdaq: AMZN) and a host of others compete with Apple's iTunes, a rivalry that has lowered prices, eliminated restrictive copy protection, and generally given consumers better music options. In return, audiophiles bought more music in 2008 than ever before, according to a January USA TODAY article. Most of those sales came in the form of digital downloads and individual tracks.

In my opinion, private health insurers are no less slothful and stubborn than record labels were at the dawn of the digital era. Insurers' defenders say that a rival public option would "destroy their industry." WellPoint (NYSE: WLP) has set up a website to oppose it. But in my opinion, it's more likely that the increased competition would merely reduce their profits, loosen their control, and force them to work harder, smarter, and more efficiently. That may be bad news for health insurers' stockholders, but you can't deny that it's good news for folks who need health insurance.

I tend to agree with this view.  A public option would, like Apple's iTunes, hopefully drive prices down over time and force the private insurance industry to adapt, streamline,  cust costs, and come up with a better product.  This is good for consumers.  The whole debate has been pretty baffling to me given that it's an option

Alderman doesn't address two other facets of a public health insurance option that would be good for Capitalism:

  1. It would allow people to take risks.  No, not like jumping out of airplanes or something, but employment risks.  People would feel more comfortable seeking jobs at startups and small businesses (or starting their own!), which traditionally have a hard time offering competitive healthcare benefits.  Risk is good since it is what spawns invention and innovation; it would give smart people more flexibility in moving around and brining their ideas with them.
  2. It gives employees greater freedom (and employers a greater talent pool).  This is kind of related to the first point in that I think this is important to help spread ideas and innovation.  Employees who are dependent on their employer provided healthcare (like people with young kids, a sick spouse, or with a pre-existing condition) are kind of locked into their employers if they are dependent on employer provided healthcare.  Greater freedom to change jobs without worrying about losing health benefits would seem to lead to better wages, greater spread of innovation, and better options for everyone (employee and employers).  How can this be anything but a good thing?

Alderman's basic premise is spot on, in my opinion, that a public option -- if not a full out single payer system -- would help Capitalism and not hurt it.

# 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!

# Saturday, July 25, 2009

Automatic Properties (And Why You Should Avoid Them)

Saturday, July 25, 2009 3:36:44 AM UTC

Ah yes, automatic properties.  Insn't it great that you don't have to do all of that extra typing now?  (Well, you wouldn't be doing it anyways with ReSharper, but that's besides the point.) For some reason, they've never sat well with me; they just seem like a pretty useless feature and, not only that, I think it severely impacts readability. 

Quick, are these members in a class, an abstract class, or an interface?

int Id { get; set; }

string FirstName { get; set; }

string LastName { get; set; }

Can't tell!  Perhaps you code at a leisurely pace, but when I'm in the zone, I'm flying around my desktop, flipping through tabs like crazy, ALT-TABbing between windows, and typing like a madman.  It's happened to me more than once where I've been working in a file, trying to add some logic to a getter and getting weird errors only to realize that I was working in the interface or abstract class instead of the concrete class.  Of course I don't normally write many non-public properties, but it's easy to make the mistake of missing the access modifier if you're working furiously and tabbing back and forth, especially if the file is long (so that you can see the class/interface declaration at the top of your file).

Look again:

public interface IEmployee
{
	int Id { get; set; }

	string FirstName { get; set; }

	string LastName { get; set; }
}

public class Employee
{
	int Id { get; set; }

	string FirstName { get; set; }

	string LastName { get; set; }
}

public abstract class AbstractEmployee
{
	int Id { get; set; }

	string FirstName { get; set; }

	string LastName { get; set; }
}

It's even more confusing when you're working within an abstract class and there's implementation mixed in.  Not only that, it looks like a complete mess as soon as you have to add custom logic to the getter or setter of a property (and add a backing field); it just looks so...untidy (but that's just me; I like to keep things looking consistent).  I'm also going to stretch a bit and postulate that it may also encourage breaking sound design in scenarios where junior devs don't know any better since they won't think to use a private field when the situation calls for one (just out of laziness).

I get that it's a bit more work (yeah, maybe my opinion would be different if I had to type them out all the time, too - but I don't :P), but seriously, if you're worried about productivity, then I really have to ask why you haven't installed ReSharper yet (I've been using it since 2.0 and can't imagine developing without it).  It's easy to mistake one for the other if you're just flipping through tabs really fast.  I've sworn off using them and I've been sticking to my guns on this.

There are three general arguments that I hear, from time to time, from the opposition:

  1. Too many keystrokes, man!  With R#, you simply define all of your private fields and then ALT+INS and in less than 5 or 6 keystrokes, you've generated all of your properties.  I would say even less keystrokes than using automatic properties since it's way easier to just write the private field and generate it using R#.  If you're worried about productivity and keystrokes and you're not using R#, then what the heck are you waiting for? 
  2. Too much clutter, takes up too much space! If that's the case, just surround it in a region and don't look at it.  I mean, if you really think about it, using KNF instead of Allman style bracing throughout your codebase would probably reduce whitespace clutter and raw LOC and yet...
  3. They make the assembly heavier!  Blah!  Not true!  Automatic properties are a compiler trick.  They're still there, just uglier and less readable (in the event that you have to extract code from an assembly (and I have - accidentally deleted some source, but still had the assembly in GAC!)).  In this case, the compiler generates the following fields:

    <FirstName>k__BackingField
    <Id>k__BackingField
    <LastName>k__BackingField

Depending on the project, there may also be unforseen design scenarios where you may want to get/set a private field by reflection to bypass logic implemented in a property (I dunno, maybe in a serialization scenario?).

So my take?  Just don't use them, dude!


Update: To clarify, McConnell has a whole section of Code Complete which discusses "code shape" and how it affects readability (see chapter 31). I think this is along the same veins. You gain NOTHING by using automatic properties, but you sacrifice readability and clarity. I don't think that the argument of "saving a couple lines" is a valid one since you can just as easily collapse those into regions and save many more lines or even switch bracing styles.

As McConnell writes:

"Making the code look pretty is worth something, but it's worth less than showing the code's structure. If one technique show the structure better and another looks better, use the one that shows the structure better."

"The smaller part of the job of programming is writing a program so that the computer can read it; the larger part is writing it so that other humans can read it."

My belief is that using backing fields shows the structure of the class file better than using automatic properties (which was my point in the blog post). Automatic properties are a convenience for the author, but it sacrifices structural cues to the purpose and usage of a given code file, IMO.  There is no benefit except to save a few keystrokes for the author, but in that case, even more keystrokes can be saved using R# and explicit backing fields.

# Thursday, July 23, 2009

Why ASP.NET (webforms) Sucks.

Thursday, July 23, 2009 12:57:02 AM UTC

Somehow, I got into a heated discussion at work today regarding the suckitude of ASP.NET web forms development model.  As a preface, I wrote Java for four years in a college, ASP in VBScript and JScript all throughout college, ASP after college, and then started working with ASP.NET when it released.

Undoubtedly, .NET and C# were a giant leap forward compared to ASP and JScript (my preferred scripting language for ASP).  But even from the start, I could never love ASP.NET.  Simple things that I used to do quite easily in ASP were now seemingly much more difficult and much more convoluted.  The HTML never quite came out the way I wanted it (remember the days when .NET wouldn't output cross browser compatible Javascript and markup?  And how that markup would always fail validation?  Yeah, I remember those days.) and it was a chore to get many development tasks done (had to overwrite this or implement that -- just to get a freaking icon in a table cell).  By the first year of use, I was already thinking that it was a terrible abomination of a framework; I never wanted to see a DataGrid ever again.

Ever since then, I've avoided writing applications in the traditional webforms model altogether.  First, I stumbled upon AJAX.NET, then I heard about this neat thing called "Atlas" (ASP.NET AJAX), then I picked up prototype, and finally, I have seen the light with jQuery (this is after writing my own Javascript for everything for the first several years of development).  I've never looked back; I've never once missed working with a web DataGrid.  I've never once missed working with most of the controls in ASP.NET web forms.  In fact, the only two four non-shitty controls worth using are the ScriptManager, Placeholder, LiteralControl, and Repeater.  That's it; that's where I draw the line.  UI controls?  They all suck.  Every.  Single.  One.  Why? 1) Because it mangles HTML output (ID's anyone?) which require ridiculous workarounds to do anything cool on the client side (i.e. writing the ClientID to the page?). 2) I hate viewstate...it's just extra...stuff (and yes, I'm intimately familiar with that "stuff" because I had to hack it to pieces at Factiva).

Don't get me wrong, I love .NET and C# to death; they're awesome (so awesome).  But ASP.NET webforms? I could smell coming from a mile away - like the stink of a dead skunk (or 20) in the middle of the road.  It's clever, I'll give you that, but it's been over-engineered to hell and back to account for the shittiness inherent in how it wants you to write web applications.

Finally, after what? 8, 9 years?  Microsoft has got it right with ASP.NET MVC.

What follows is the summary of my arguments as to why ASP.NET webforms suck (and it's only the tip of the iceberg!).


Undoubtedly, JSF and ASP.NET webforms suck giant elephant balls.  I mean giant balls of epic proportions of suck.  If this were the Richter scale, it would be a magnitude 10 level of suck (by the way, wiki describes that as "Epic.  Never recorded").

A simple google search for "JSF sucks" yields plenty of results.

Freddy D. has a nice summary list:

  • JSF + JSP = templates that are filled with way too much noise. f:verbatim? ack! Facelets helps here but it is still too hard to read.
  • The generated HTML is all kinds of black magic.
  • You can't have a simple link to a JSF bean with some parameters and invoking an action method, from outside the JSF context, without having to jump through all kinds of hoops.
  • Parameter binding and retrieval from a different page involves tricks and digging through the FacesContext.. yuk.
  • faces-config.xml. struts-config.xml all over again. Just too noisy and useless. What is the added value, really?
  • immediate="true"? are you kidding me?
  • the managed beans are supposed to be reusable POJOs. So why do you need to use SelectItem for select boxes? More useless code. This ties you to JSF for no good reason.
  • the data table is inept. Display Tag anyone?
  • writing your own component is way too much work.
  • want some AJAX? you'll need to add yet another framework to handle it, and if it doesn't work, you're SOL. if you want to write your own AJAX-enabled component.. read the item above and add a few more "way way WAY" in front of "too much work".
  • Even if you find ways to solve your problems, just knowing that it would be SO much easier with another framework, just adds to the frustration. Case in point, we switched to Stripes and our code is up to 30-50% more concise, clearer, easier to understand.. plus, as a small bonus, it actually works!
  • The principle of least surprise definitely does not apply when using JSF.

Well I'll be damned if those weren't some of the same reasons that ASP.NET webforms suck.

Since I'm not as familiar with JSF, I'll discuss this from the ASP.NET perspective.  First, why is ASP.NET the way it is?  Why did they design it like this?  Undoubtedly, one of the core reasons was because they thought VB6 developers were too damn stupid to know better.  To make these plebeian, lowest-of-the-low, bottom rung programmers "productive", they put together this abomination of an event model on top of a perfectly nice and awesome .NET and C#.  ASP.NET webforms are shitty beyond compare because of this.

To understand why this sucks, consider how you program for a client-server model when you are building a Windows forms application.  Your winform is responsible, clearly, for rendering data only.  It makes a service call that doesn't understand a damn thing about the winforms application, right?  The remote endpoint, the server side, cares about data and data only.  Once the service call completes, your client handles rendering of that data and putting it into grids and what not.  Your services called by the winforms client don't have silly "OnClick" handlers in the service implementation do they?  Can you imagine what that would be like if you had to write your WCF services or any sort of web service like that?  You'd have to do all this shitty state maintenance and pass around useless data (like what button was clicked); you would have to have UI logic in your service.  It sounds like it would suck to do that with your winforms to a WCF service.  This begs the question:  so why do you have them in your .aspx.cs?  .aspx.cs is an incredibly stupid model and absolutely forces you to mix your controller logic with your view logic, making it difficult to reuse, difficult to maintain, and difficult to understand.

Digest that for a moment.

(Granted, there are some differences in developing a winforms thin client and a web app and obviously some scenarios where it's advantageous to return generated/static markup.)

ASP.NET MVC is very, very far removed from JSP (I did a bit of JSP) since JSP was never an MVC design (and neither is ASP.NET webforms).  Out of the box JSP and ASP.NET webforms are both an almagam of the Page Controller and Template patterns with the shittiness of the faux event model layered on top.  ASP.NET MVC is a true MVC model (or at least it's pretty damn close) that uses a Front Controller pattern and truly separated concerns between the view, the model, and the controller.  Most of the shittiness and pain with ASP.NET stems from the fact that the page controller pattern violates all sorts of seperations of concern as it encourages mashing up code that should be isolated in a view with code that should be isolated in a controller.  The end result is a giant heaping pile of poo.  The control and event model only make the situation worse by requiring this ugly, terrible thing we've all come to hate known as viewstate.

I'm convinced that these frameworks were created for numbskull rent-a-coders because they're too lazy/stupid/incapable of grasping basic HTML, Javascript, CSS, and simple DOM.  Look, at the end of the day, if you're going to be a web developer and you're not going to put in the time to master HTML, CSS, and Javascript to some degree, you're not doing it right.  That would be like a baker that didn't want to learn the basic composition of breads and dough and the chemical reactions that make tasty baked goods out of simple ingredients like flour, yeast, eggs, water, salt, and sugar.  Web developers attached to ASP.NET web controls and fear Javascript (and I know some) are like "bakers" who open a "bakery" and buy their products from Costco and repackage them.  I guess it's efficient and productive, but at the end of the day, such a "baker" is constrained to a very small universe of possibilities...how boring.

I've come to beleive that ASP.NET webforms continue to perpetuate generations of developers who have no idea how all this "magic" works and when presented with a design scenario that calls for a truly innovative UI, they stumble because they can't figure out how to do it without a control to hold their hand...boo-hoo (I'm amazed when people are amazed by some stupid ASP.NET web control without realizing how easy it is to accomplish the same thing with some jQuery goodness (or conversely, how hard it was before we had nice things like prototype and jQuery)).  The list of companies that don't screw around with these stupid frameworks probably have some of the most brilliant developers working for them:  Yahoo!, Google, Facebook, Amazon, etc. -- these guys long ago learned the lesson that ASP.NET webforms/JSF is for simpletons (or masochists).

Okay, I concede that it's great for initial productivity.  Certainly, most developers can probably throw up a page with a grid with some databound recordset much faster than I could write a page with the same set of features.  But I wager that my implementation would be cleaner, easier to read, easier to understand, easier to maintain, easier to reuse, and easier to work with once the need arises to address a usage scenario not supported by the grid out of the box.  If first run development speed is your only concern, then I lose every time because I'm concerned about doing it right, making it maintainable, and making it easy to understand the programming model.  If you care about those things, then it's worth it to do it right.

ASP.NET MVC will be the litmus test that will differentiate the competent developers from the rent-a-coders and, hopefully, will come to replace webforms as the primary model of web application development on the .NET framework.  The "stateful web" was an experimental failure of epic proportions to satisfy the simple minds that couldn't wrap their heads around the fact that the web is inherently stateless.  Let's move on from that dark, dank, dreary past and bask in the light of ASP.NET MVC!

# 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.

# Friday, April 17, 2009

Obama Says No To The Assault Weapons Ban

Friday, April 17, 2009 1:04:57 AM UTC

So can we stop the bitter tears for a bit?  Just a little?

http://www.msnbc.msn.com/id/30232095

U.S. president signals he won't seek reinstatement of assault weapons ban

MEXICO CITY - Acknowledging a Mexican drug war that is "sowing chaos in our communities," President Barack Obama signaled Thursday he will not seek the reinstatement of a U.S. assault weapons ban but instead step up enforcement of existing laws against taking such weapons across the border.
Despite a campaign promise to see the lapsed ban renewed, Obama was bowing to the reality that to do so would be unpopular in politically key U.S. states and among Republicans as well as some conservative Democrats.

# Thursday, April 16, 2009

CharlieDigital's Guide to "Teabaggin"

Thursday, April 16, 2009 1:00:49 PM UTC

This recent phenomenon of "teabaggin" (lol) amongst conservatives has been humorous on many fronts.  But it's gotten me thinking: are there people really this stupid?  I mean, that's a lot of stupid.  Some of the signs I've seen are pretty creative (creatively wrong).  Let's address some of them and see what we come up with.

I find this one quite humorous myself, as it shows: 1) a total lack of perspective and 2) it's amazing how easily you can get someone to protest against their own self interest.  If this protester didn't know, the highest marginal tax bracket under Reagan was 50%. Then clearly, Ronald Reagan meant 50% slavery right?  So 39% slavery should be an improvement.  Aside from that, what in the right mind of Vishnu are these people thinking?  Do they have any clue on what slavery was really like?  I mean, wow, get some perspective.  On the second point, Obama has already enacted a tax cut (look at your paycheck and you should see it) for 95% of Americans.  Who are the poor, unlucky 5% that have been excluded?  I'm pretty sure its not this guy holding the sign; instead, they're folks making well into 6 figure territory.

There is great amusement to be found in this picture as well.  "ZERO TAXES"?  I wonder how this old lady thinks the roads she is sitting next to were built?  How were the side walks built?  Who paid for those signals?  Who paid for that sign?  I shudder at the thought of living in a country with zero taxes.  Why?  Because it would be a shithole for all but the super wealthy.  Education and literacy rates would drop dramatically.  Commerce would slowly wither as roads and infrastructure weathered and fell into disrepair.  The old would flood homeless shelters and emergency rooms.  Crime would increase as there would be no publicly funded police...only privately funded militia (no better than paying protection to the mafia).  Zero taxes?  Why not relocate to Somalia instead.

Taxation is a necessary price to pay for living under the protection of the federal government.  It is a necessary price to pay for the services and infrastructure which service us all and enable commerce.  It funds education and improves the quality of life of all Americans (after all, the more children we educate and transform into productive members of society, the better off we are tomorrow).  Paul Begala gets it right:

Happy Patriots' Day. April 15 is the one day a year when our country asks something of us -- or at least the vast majority of us.

For those who wear a military uniform, those who serve the rest of us as policemen and firefighters and teachers and other public servants, every day is patriots' day. They work hard for our country; many risk their lives -- and some lose their lives.

But for the rest of us, the civilian majority, our government asks very little. Except for April 15. On this day, our government asks that we pay our fair share of taxes to keep our beloved country strong and safe.

He's right: aside from paying my taxes, the government does ask very little of me.  I'm neither forced to serve in our armed forces, forced to do any work on behalf of the government, nor am I oppressed.  In exchange for 20% of my income (my effective federal tax rate this year), I get to live in a relatively stable and safe society with some of the greatest degrees of freedoms of any first world country.

Of course, let's not forget that silly lady on the left either.  Excuse me miss, but you can't have defense without taxes (lol).

This one is great, too.  On the contrary, Obama's whole platform is aimed a middle class gains.  His tax policy, cuts for middle class Americans while reverting to the top marginal tax rate under Clinton (bear in mind, this is still lower than the top marginal tax rate under Reagan), seems like it's designed specifically to help working, white collar, middle class Americans.  So either this guy makes more than $200,000 or he's just stupid.  I think it's the latter.

lol. Where do I begin with this one?  I mean, what does Christianity have anything to do with this at all?  First of all, we're not a Christian nation.  Second of all, I love the guy's shirt: "Stupidity Offsets for Sale".  I think he needs to buy crate loads of them.

lol.  Still on this ACORN thing?

This one is particularly funny as Wall Street is the epitome of unfettered capitalism. Somehow, our government has been hijacked by both capitalists and socialists...AT THE SAME TIME! Amusing.

Oh, and apparently facists, too. (I rather think that this quote applies more to these teabaggin' protestors than it does to the rest of the public.)  Also: quoting Hitler on your t-shirt?  Always classy.

This one is ironic because this person has conveniently forgotten that we had this thing called an "election" on November 4, 2008.  Yeah, you know, this thing where millions of people from all across the country come out and select the people whom they choose to represent their interests.  Oh yeah, that's right, your guy lost...silly me.

But more importantly, this sign is patently ridiculous simply because it ignores the reality of how government works.  As if "THE GOV'NT" is some entity of the elite, assembled with individuals from some higher class seeking to oppress the people.  Well, I've got news for you: "THE GOV'NT" is of the people, by the people, and for the people.

I think what gets me even more are the cries of socialism, communism, and facism.  Do these people even know what these terms mean?  I mean, do they? I think these people need to have a talk with this guy:

Of course, another fun game to play with all of these tea party pictures is "Spot the Minority".  There's just something really weird that I can't put my finger on...almost every picture of these crowds is 100% white.  What's the deal with that?

What's that you say? You have more questions. Well, let's hear them.

Where's MY bailout?

Well, that's simple: you're already getting tax cut from the Obama administration.  Aside from this, check out his mortgage rescue plan.

NEW YORK (CNNMoney.com) -- The Obama administration's loan modification program is finally underway.

The Treasury Department announced Wednesday the first six participants to sign up for President Obama's plan. They include three of the nation's largest banks: JPMorgan Chase (JPM, Fortune 500), which will get up to $3.6 billion in subsidy and incentive payments; Wells Fargo (WFC, Fortune 500), $2.9 billion; and Citigroup (C, Fortune 500), $2 billion. The others are GMAC Mortgage, $633 million; Saxon Mortgage Services, $407 million; and Select Portfolio Servicing, $376 million.

Additional loan servicers will be added to the list over time, a Treasury spokesman said.

Billed as helping up to 9 million borrowers stay in their homes, the two-part plan calls for servicers to reduce monthly payments to no more than 31% of eligible borrowers' pre-tax income or to refinance eligible mortgages even if the homeowner has little or no equity. The government is allocating $75 billion to subsidize part of payment reduction, as well as provide thousands of dollars in incentives for servicers and borrowers to participate.

This is a huge bailout of the American Dream; it aims to keep homeowners (or should I say mortgage payers?) in their homes by modifying mortgages to the realities of the current market and economic environment.  Taking advantage of historically low mortgage rates, I've already refinanced and ended up saving some $400/month.  So there's your bailout.

But the national debt is skyrocketing!  Think of the children!

There are a few points to make here.  First, I must direct your attention to the Treasury Department's helpful website on this topic.  Please browse through every date range on the site.  Notice a pattern?  That's right, every generation since 1791 has left a debt. Every.  Single.  One. 

Of course, one of the fun facts is looking at the national debt between 9/30/2001 and 9/30/2008, roughly President Bush's two terms.  Let's see, it started at 5.8 trillion, and, well, looky here, ended at 10 trillion.  Whoa, I thought, like, Republicans were supposed to be all conservative-like.  Guess that's just a myth!  Let's look at another time period.  How about Reagan's presidency, the period between 9/30/1982 and 9/30/1988.  Let's see, it started at 1.1 trillion and it ended at 2.6 trillion. Will you look at that?  Ronald Reagan more than doubled the national debt. 

But let's move on from the numbers; I'm sure you protested when Bush and Reagan were in charge, too, right? 

There's another point to be made that can't be made with numbers and that's the fact that not all debt is created equally.  There are multiple parts to this.  The first is the interest rate on debt.  It has never been cheaper to create debt than it is right now since intrest rates are so depressed. Secondly, consider this question: is borrowing $40,000 to spend on a sports car the same as spending $40,000  on a graduate degree?  If your jobless sibling came to you tomorrow and asked to borrow $10,000 to buy a new motorcycle, would you react the same way as if he came and borrowed $10,000 to go back to school?

Of course there is a big difference.  One is a depreciating asset from which you are not likely to ever see any returns on and the other, an education, has a great potential to generate a high return on investment.  Likewise, spending on education, healthcare, infrastructure, basic scientific research, and developing energy solutions is an investment that is likely to yield a high return on investment.  It is spending that increases our overall capacity for commerce.  You need an educated population for high paying jobs, you need working roads to facilitate commerce, you need a new energy grid for efficiency (cost savings) and security, you need to fund basic research to drive innovation, you need to fix healthcare because it is one of the biggest factors depressing wages in the US.

If there is something that we should spend our tax dollars on, it's things like these, things that willl someday help generate commerce and thus employment and tax revenues.  And of course, keep in mind, our kids will utilize these same roads and infrastructure decades down the line.  The will go to these new schools.  They will be the beneficiaries of increased grants for scientific research.  It is precisely the next generation that will benefit the most from our investment today.

# Friday, April 03, 2009

Why Do You Play?

Friday, April 03, 2009 8:52:00 PM UTC

One of my favorite all time sports quotes:

You PLAY to win the game. -- Herm Edwards

It's so simple and so obvious, and yet, so easy to lose sight of.  Herm is right, but it doesn't just apply to sports, it applies to product development as well.  You play to win, otherwise, get off the team...you're just dead weight taking up budget.

One of my pet peeves is lack of passion.  It seems that many folks just don't get it; they're not playing to win.  They're playing for their next paycheck.

In product development, like sports, sometimes, you have to take risks.  Get too conservative, and you may see your lead evaporate.  Like sports, you play to win...always.  No team is perfect and no product is perfect, but that simply means that you play to your strengths.  In product development, this means selling to your strengths.  There's no such thing as a perfect team (as the Patriots proved) and there is no such thing as a perfect product. 

The question for product managers and coaches is how you can work with what you have and maximize your resources and work around your weaknesses.  Fail to do this, and you have failed your team as a leader.  If your running game is weak, don't force your team to rely on running plays as a primary option.  If your corners are weak, don't force them to have to cover deep.  If your defense is weak, run your offense to maximize posession time.  Work to the strengths of your team or your product; don't try to play a style that doesn't fit your personnel (analogously, don't use methodologies that don't fit your resources).

You PLAY to win the game.  So simple and yet so easy to get into a mindset where you play for that paycheck instead of playing to win.

# Tuesday, March 17, 2009

Stupid Questions

Tuesday, March 17, 2009 12:04:07 PM UTC

This one comes courtesy of Andrew Sorkin of the New York Times:

Do we really have to foot the bill for those bonuses at the American International Group?

Fittingly, he provides a stupid answer as well:

So here is a sobering thought: Maybe we have to swallow hard and pay up, partly for our own good.

Sorkin invokes "the sanctity of contracts":

...the “fundamental value” in question here is the sanctity of contracts

Welcome to the real world, Mr. Sorkin, where millions of Americans across a broad spectrum of socio-economic classes are employed with transient "contracts".  An NFL player can be cut at any time.  A grocery clerk's job can be eliminated without a second thought.  A consultant can be fired in an act of downsizing.  Long time employees can be terminated without severance.

Mr. Sorkin justifies his belief with another point that he pulled out of his ass:

Here is the second, perhaps more sobering thought: A.I.G. built this bomb, and it may be the only outfit that really knows how to defuse it.

More like they were trying to build a toy rocket and instead, built a bomb.  In this case, I would say they have no fucking idea how to defuse it because they never realized the dangers of what the created; they never really understood the risks to begin with and thus themselves lacked a fundamental understanding of how their own investment vehicles worked.  I'd say these people are the least qualified to handle this because clearly, they're the same idiots who thought that credit default swaps were a good idea in the first place. 

I'm sure many IT consulting companies would love to have contracts with Mr. Sorkin.  Even if their consultants write terrible, buggy, and unstable code, Mr. Sorkin would be convinced that because these guys wrote it, they would also be the most qualified to fix it.  Mr. Sorkin would be the the ideal IT consulting customer.  Send in your cheapest, least qualified labor and have a guaranteed income stream.  Not only that, Mr. Sorkin would be so ensconced with the sanctity of contracts, that he would feel compelled the keep employing the same guys who wrote the buggy code to the very end.

Sorkin then cites Pearl Meyer:

“The word on the street is that A.I.G. employees are being heavily recruited,” Ms. Meyer says.

Well good.  Isn't this how the free market and capitalism works?  If these guys, who were a part of the one of the greatest failures in free enterprise (dollar wise), can find people willing to pay them to ruin their businesses, then let them go.  I call B.S.; massive steaming piles of it.  The financial sector is shedding jobs at an astounding rate...let them swim and see how many want to jump off the boat.

In actuality, I think Meyer is full of shit.  AIG acquired 21st Century (an auto insurance company) in 2007 and promptly changed the name to aigdirect.  Interestingly, aigdirect.com now redirects you to 21st.com.  I guess that AIG moniker wasn't working out, huh?  You really have to dig around to find any association with AIG on the site.

At the end of the day, I'd like to see if Sorkin and his compadres would be defending the UAW's contracts or how about pension funds which are routinely raided or wiped out in restructuring?

In reality, there are lots of corporations that have figured out that there are loopholes in this bill. ... What those loopholes permit companies to do is make promises to a few sophisticated creditors to lock up all the assets of the business so that if the company ultimately fails, there won't be any sharing of the pain. The sophisticated guys will walk out with everything, and the employees and pensioners will be left with nothing.

The text of the law clearly gives a priority to the banks and the other creditors who protect themselves by contract. They come ahead of all of the employees and all the pensioners. It's been there since 1978; it is in the law today. If Congress wanted to change it, they could change it with the stroke of a pen, but that is what the statute says. ... What has changed over time is how much the banks are seizing in terms of the assets, ... so that by the end of the day, there is less and less and less left over for the employees and for the retirees.

How about you defend "the sanctity" of these contracts first and then we can talk about bonuses?

The comments are the only thing which redeem this otherwise steaming pile of excrement.

This argument would make more sense if the government wasn't forcing automakers to abrogate their contracts with their workers and pensioners. Would the columnist have us believe that those contracts that will be modified or cast away were any less legally binding than those at AIG? Balderdash...it's rewarding poor performance at the expense of the taxpayer.

— agincourt76, Seattle, WA

I don't remember seeing this argument when discussing the breaking of union contracts for the auto bailout. In fact breaking the union contracts was seen as a feature and not a bug.

— JStuddle, Los Ageles, CA

You have disgraced yourself. What have you said that hasn't been said? If anyone wants to hire these guys who ruined the world economy and collapsed their own firms, they are welcome to them. Yeah, they're real rainmakers. And do you think new people can't be hired to unwind the transactions with $165 million dollars?

— Sylvia Ellerson, New York, NY

Nothing in this piece says what it is that makes the bonus beneficiaries so indispensable. Their training? Their brains? They and only they know where the bodies are buried?

In every big company -- but especially in finance -- there are junior personnel just aching for a chance to take over from their superiors. Eventually they do. Why not now?

— donnolo, Monterey, CA

Its really very simple. Without government intervention, AIG would be bankrupt and none of those bonuses would have been paid.

The government breaks contracts in bankruptcy all the time. Of course it does set a precedent for people who loot their companies and the taxpayers. Even if the goovernment bails out the company, they may not get all the loot they expected. I don't know that is such a bad thing.

The truth is, the government ought to be going after many of these employees with criminal fraud charges. Its pretty obvious they sold more credit default swaps than their company could afford to pay off. Those were contracts too.

— Ross Williams, Minnesota

The thesis of this article is we must acquiesce in the millions of dollars of bonuses paid to AIG executives because (1) we must keep the “best and the brightest”and (2) the sanctity of contract must be protected.

The “best and the brightest” bankrupted the largest insurance company in the world. Keep them? They ought be carefully scrutinizer for criminal law violations: their conduct simply does not pass the smell test. Besides, in the financial crisis which AIG is a prime contributor, where are these so called “best and the brightest” going to go? The taxpayers inherited them, but we don’t have to keep them. Remember, AIG has been nationalized. We own it!

The plaintiff cry about honoring contracts rights hollow. Contracts ought to be enforced. That fundamental proposition is undebatable. Why isn’t the same application of the law urged in the case of the United Auto Workers?

These “bonus” given to the recipient of the taxpayers largess ought to be a “pink slip”

— David, Sherman, TX

Congratulations, Andrew Sorkin, you've just asked the Stupid Question of the Day!

# Tuesday, March 10, 2009

The Follies of C# 4.0

Tuesday, March 10, 2009 3:43:12 PM UTC

Nikhil Kothari has been blogging furiously about Visual Studio 2010 and C# 4.0.  One of his posts covering the dynamic programming features in C# 4.0 raised some interesting discussion in the comments.

Some like Francois Ward:

I heavily dislike this. My philosophy has always been "right tool for the right job". There are dynamic languages that are vastly superior to C#, if you want dynamic. C# was meant to be a "pure" language, to do the stuff where you want as much strong typing as possible (also the reason behind Spec#), and as clean as possible.

This defeats that purpose in such a way that only an FxCop rule or code reviews could stop it from ruinning a codebase. If I wanted dynamic, I could do it in IronRuby (once thats fully out), and call the result from C#.

More so: this dynamic feature was mostly meant to help with COM interop, not as a convenience to save a few lines of code... and people are -already- thinking of ways to misuse it... Really, the .NET runtime was made so we could have all the languages we want on it, EXACTLY so we wouldn't need a "one language to rule them all" thing... The best codebases would use C# as the core, IronRuby (or something similar) for places where you need Dynamic, and F# for places where you need functional... there's no need to stick C# everywhere...and thus, there's no need to add this to C#. Its too late now, but at the very least we can make sure its not abused.

And some like poster "HB":

Why such resistance to this? Mandate to your team not to use it if you don't like it.

Every release of every programming language has the same problem. People resist the new features claiming that they will be abused and ruin everything and yet here we are in C# 4.0 and the use of 'var', anonymous <fill in the blank> and other C# 3.0 features haven't destroyed us.

For people that use a lot of Json (like in MVC), this will be especially handy

I tend to agree with Francois Ward.  While I appreciate the changes in C# 2.0 and 3.0 (moreso 2.0 than 3.0), this transition from "C# pure" to "C# bit-o-everything" is a bit disconcerting; it feels like change for the sake of change and it feels like change in the wrong direction.  As a disclaimer, JavaScript is perhaps my favorite programming language - I love how fluid the language is.  But on the other hand, I can also appreciate some of the structural rigidity of statically typed languages like C# in helping to coerce good OOP practices.

As many have made the argument "Well, you don't have to use it!", I'd like to respond from this angle. It's not a matter of whether I or any of us personally use it but rather how your stereotypical RAD developer (still the majority) uses it or rather abuses it.

I personally think that McConnell gets it right in Code Complete:

"The computer doesn't care whether your code is readable. It's better at reading binary machine instructions than it is at reading high-level-language statements. You write readable code because it helps other people to read your code."

"Making code readable is not an optional part of the development process, and favoring write-time convenience over read-time convenience is a false economy. You should go to the effort of writing good code, which you can do once, rather than the effort of reading bad code, which you'd have to do again and again"

In other words, programming in such a way as to reduce your LOC for a particular operation, while increasing the density (amount of logic in a given number of lines, words, or whatever other metric) or complexity of the statement has a negative effect on readability of the code (at least until the practices become standardized and fairly well understood). The problem I foresee with C# 4.0 is that it introduces features which will not be generally understood across the spectrum of developers. Remember: you are never writing code for yourself, you are writing code for your customers, you clients, the people who will maintain the code after your, your peers whom you work with, consultants who may not understand lambdas, and so on. You may have junior developers on your team (or even senior developers on your team) who may not be able to grasp your idea if you entwine your implementation with cool nifty tricks to reduce LOC.

From a practicality perspective -- as much as this sucks, it is always safer to program to the lowest common denominator; assume that you are writing your code for a novice to maintain and your code will be more legible, the structures will be easier to understand, and the comments will be less terse. Use patterns that are simple to understand. Use statements which are easy to read for a novice as a novice may one day be maintaining your code or extending it. For those reasons, I think that this is a mistake...a terrible mistake to satisfy a set of fringe developers who will actually "get" it and use these constructs in the proper manner.

The forward evolution of the C# language, while it does contain some awesome features and looks more and more like native JavaScript with each iteration, continues to confound me with the lack of concern for the general development community. Instead of focusing on constructs and framework extensions which promote design pattern usage, domain models, and good practices, we get extensions and constructs which undercut the effort to increase the development IQ of your average developer

It WILL be abused and then people like myself will have to go in there and try to untangle the intent of developers who misuse these facilities provided to them for all the wrong reasons just as I've seen people abuse System.Linq instead of writing good, performant code.

Microsoft's C# Future page is a good place to start with regards to some of the features coming out for C# 4.0.

# Wednesday, February 25, 2009

Spansion Fires 35% of Workforce; Reinstates Executive Pay

Wednesday, February 25, 2009 6:00:13 PM UTC

An interesting story (with some heated comments) with regards to a recent move by Spansion:

While Spansion Inc. was cutting 35 percent of its workforce, or 3,000 jobs on Monday, the company’s board was restoring full pay to its top executives.

The company had imposed a 10 percent pay cut last Oct. 6 for top executives. But in a securities filing, it said it was returning the executives to full pay as part of an “employee retention program.”

So I guess this is called "taking one for the team"?  Seems more like a cash grab by the executives of a company that's about to go under.

One intrepid (and mildly retarded?) commenter, "Todd Fletcher", writes:

This story is quite biased. Understand that Spansion is in a very tight position right now, and they must remain competitive within their industry. This means not only attracting the very best executives, but retaining them.

Of course, the logical question is what metric are you using to define "the very best executives".  Why are they in a "tight position"?  Could it be because management and these very same executives made some bad decisions?  Perhaps they lacked foresight into the market and the technologies?  Nah, surely, it's the fault of the guys at the bottom, right?  It's always their fault, right?

Some of the better rebuttals include:

Market guy: Todd, I would stop defending these executives at Spansion. They picked the wrong strategy and direction in 2003 and now the NAND Flash Memory guys are killing NOR Flash Memory manufacturers like Spansion. That’s why Spansion is in so much trouble today. Why would you want to reward Executives for steering the boat into an iceberg? Would you invest your money on a sinking ship?

Shamless1: If you want to pay to bring in new talent I say lets pay, however increasing compensation to people who walked you down the garden path is no different then chasing down the guy who just stole your wallet to give him your watch.

OneOfTheConcerned: Having top quality executives means that Spansion can strategically lay people off and reinstate the executive’s pay…all the while ignoring that they owe Travis County overdue taxes. Ah, the ground is quickly approaching those smug noses.

Brett Stroud:  What does this story have to do with retaining top executives? It’s quite clear that the executives they have led them to a position where they have to lay off 35% of their work force. Seems to me like they’re retaining failed executives.

So yeah, let's see how much longer these guys last.  Incidentally, the stock (SPSN) is currently trading at about $.06, a far cry from the $17 dollar range when I sold my shares a few years back.

# Saturday, February 14, 2009

5 Cooks

Saturday, February 14, 2009 2:57:52 PM UTC

I recently finished up Eric Brechner's I.M. Wright's Hard Code.

One of the more interesting aspects of development and project management that he brings up is the concept of working depth first as opposed to breadth first.  Too often, I think management gets this crazy idea in their head that progress is best served by having all hands on code at the same time; that to make the best progress, we should all be tapping away at our keyboards and churning code.  I think this mindset is a mistake, especially in small teams.

In his October 1, 2004 article titled "Lean: More than good pastrami", Brechner (as I.M. Wright) writes:

Go deep
Of course, you can use Scrum and XP poorly by making the customer wait for value while you work on "infrastructure." There is a fundamental premise behind quick iterations built around regular customer feedback: develop the code depth first, not breadth first.

Breadth first in the extreme means spec every feature, then design every feature, then code every feature, and then test every feature. Depth first in the extreme means spec, design, code, and test one feature completely, and then when you are done move on to the next feature. Naturally, neither extreme is good, but depth first is fa r better. For most teams, you want to do a high-level breadth design and then quickly switch into depth-first, low-level design and implementation.

This is just what Microsoft Office is doing with feature crews. First, teams plan what features they need and how the features go together. Then folks break up into small multidiscipline teams that focus on a single spec at a time, from start to finish. The result is a much faster delivery of fully implemented and stable value to demonstrate for customers.

To me, the key sentence is the last sentence: as software developers, project managers, and delivery teams, our goal should be to deliver demonstratable value to the customer in the fastest manner possible while maintaining a sufficient level of quality.

In small teams which work breadth first from start to finish, it becomes more difficult to accomplish this.  (Well, I guess this is true for large teams, too.  But in a larger team, you have more opportunities to modularize large stacks of the application.)

One of the core problems with working breadth first is that it assumes that everyone is a developer and everyone is equally skilled at every type of development task.  This forces developers into roles and tasks which they are perhaps not comfortable with, not proficient with, or perhaps not even very good at.  This may be a good thing, in the general case to act as a driver for learning, but at the same time, it's not very conducive to delivering quality (especially on production code). 

In a sense, this approach assumes that everyone in the kitchen is a chef when this may not be the optimal usage of the resources at hand.  No kitchen is comprised of all chefs; there is a head chef, a few sous chefs, a pastry/dessert chef, there are guys working on prepping ingredients, resources prepping the plates and dishes, resources optimizing the orders as they come from waiters, there are head chefs who are not working but experimenting or learning new techniques, and so on.  The point is that too often, management assumes that everyone in the kitchen is a chef and everyone in the kitchen should be cooking.  The reality is that no kitchen runs that way just as no development team can be run that way. 

For the sake of efficiency and quality, it seems that product development would be better served by using the proper resource for the development task at hand.  Certainly, this raises the issue of pigeonholing developers into certain roles, but that's what downtime is for: cross training and developer education.

The second problem with working breadth first is code and functional duplication.  In a multi-tiered architecture, if everyone is working on every tier, it becomes increasingly likely that certain functionality will end up being duplicated simply due to lack of immediate visibility.  In a depth first approach, a team might be responsible for writing the service interface; they will know intimately which services already exist and which services can be reutilized.  In a breadth first approach, in any non-trivial code base, functional duplication becomes rampant without a lot of non-productive effort.

The third major issue I have observed with a breadth first approach is that it causes stress to the test and quality assurance teams.  Instead of having testable features trickle in as they are finished, pieces tend to all end up in their queue in a giant tidal wave.  This puts more strain on small test and QA teams as it means that they are forced to work in a breadth first manner as well.  Instead of having multiple eyes running one test script to ensure that the component is compliant with the design requirements, you end up with testers rushing through test scripts by themselves trying to catch up.  Would it not be more desirable to have features delivered in a linear fashion to the test and QA teams so that their work can be more rigorous and comprehensive?  I think this helps improve quality by finding usability issues and bugs earlier on in the development cycle as opposed to finding all the bugs near the end of the formal testing phase.

Just as you wouldn't deliver appetizers, the main course, and dessert to the table at once, it doesn't make sense to drop every module on your test and QA team all at once; it makes more sense to hand them deliverables early and often so that their work and effectiveness is not constrained.  This is beneficial to dev as well since bugs and usability issues can be returned to the team earlier on in the cycle.  Of course, the beauty of working depth first is that, if you do not have the option of pushing back a release date, it's easier to still ship on time with completed and tested modules minus features which could not be completed on time in the event that test or QA invalidates some earlier design assumptions which require significant time to fix or reimplement.  In other words, a depth first approach gives you the flexibility to deliver finished and tested code even if some features must be left out for a later release.

The fourth major issue is exactly as Brechner writes: by working breadth first, you are not delivering value to the business users or your customers.  Features are never in a fully tested and qualified state until the very end of the development cycle.  Using Brechner's suggestion to design breadth first and implement depth first, it is possible to move completed pieces through test and QA (and fix bugs which may return) and deliver a working, functional module to business users or to customers, even if the particular product milestone is not complete.  This decreases the feedback cycle and, again, allows usability and functional issues to be caught earlier in a smaller number of cases, rather than later in one huge bucket of tickets.

The fifth major problem with a breadth first approach is that you spread your resources thin.  This means that you may not have sufficient resources who have knowledge of the code for a particular component.  This can be mitigated to some degree if you run tight code reviews where group A peers into group B's code on a regular basis and has an understanding or the codebase or if group B generates impeccable documentation, but more than likely, you end up with small silos of knowledge where a small number of developers hold most of the knowledge regarding a module.  This is bad for any number of reasons, as you can imagine.

So next time management peeks its head into the kitchen asking why everyone isn't in the act of cooking, perhaps you can sit them down and have a little talk with them; I think there is a lot of value to be found in Brechner's suggestion to perform high-level feature design breadth first, but low-level design and implementation depth first.

# Friday, November 14, 2008

Michael Lewis on the Financial Meltdown

Friday, November 14, 2008 8:50:37 PM UTC

There's a pretty fascinating article over at Portfolio.com by Michael Lewis fittingly titled The End which gives insight into the grimey details of how the collapse of our seemingly infallible financial markets came to be.  Contrary to the right-wing nuttery that lays blame on the likes of Fannie Mae, Freddie Mac, and some bullshit idea that minority lending somehow caused all of this, Lewis points the fingers squarely on the greed of Wall Street and the financial corporations that enabled the buildup to the fall.

Eisman knew subprime lenders could be scumbags. What he underestimated was the total unabashed complicity of the upper class of American capitalism. For instance, he knew that the big Wall Street investment banks took huge piles of loans that in and of themselves might be rated BBB, threw them into a trust, carved the trust into tranches, and wound up with 60 percent of the new total being rated AAA.
...
He called Standard & Poor’s and asked what would happen to default rates if real estate prices fell. The man at S&P couldn’t say; its model for home prices had no ability to accept a negative number. “They were just assuming home prices would keep going up,” Eisman says.

...Wall Street had used these BBB tranches—the worst of the worst—to build yet another tower of bonds: a “particularly egregious” C.D.O. The reason they did this was that the rating agencies, presented with the pile of bonds backed by dubious loans, would pronounce most of them AAA. These bonds could then be sold to investors—pension funds, insurance companies—who were allowed to invest only in highly rated securities. “I cannot fucking believe this is allowed—I must have said that a thousand times in the past two years,” Eisman says.
...
That’s when Eisman finally got it. Here he’d been making these side bets with Goldman Sachs and Deutsche Bank on the fate of the BBB tranche without fully understanding why those firms were so eager to make the bets. Now he saw. There weren’t enough Americans with shitty credit taking out loans to satisfy investors’ appetite for the end product. The firms used Eisman’s bet to synthesize more of them.

...when Eisman bought a credit-default swap, he enabled Deutsche Bank to create another bond identical in every respect but one to the original. The only difference was that there was no actual homebuyer or borrower. The only assets backing the bonds were the side bets Eisman and others made with firms like Goldman Sachs. Eisman, in effect, was paying to Goldman the interest on a subprime mortgage. In fact, there was no mortgage at all. “They weren’t satisfied getting lots of unqualified borrowers to borrow money to buy a house they couldn’t afford,” Eisman says. “They were creating them out of whole cloth. One hundred times over! That’s why the losses are so much greater than the loans. But that’s when I realized they needed us to keep the machine running. I was like, This is allowed?”
...
He explained that the rating agencies were morally bankrupt and living in fear of becoming actually bankrupt.

“They fucked people. They built a castle to rip people off. Not once in all these years have I come across a person inside a big Wall Street firm who was having a crisis of conscience.”

...the main effect of turning a partnership into a corporation was to transfer the financial risk to the shareholders. “When things go wrong, it’s their problem,” he said—and obviously not theirs alone. When a Wall Street investment bank screwed up badly enough, its risks became the problem of the U.S. government. “It’s laissez-faire until you get in deep shit,” he said, with a half chuckle. He was out of the game.

The whole article is worth a read.

# Friday, September 26, 2008

You Tell 'Em!

Friday, September 26, 2008 2:14:04 AM UTC

Two great videos of Representative Marcy Kaptur from Ohio:

http://www.youtube.com/watch?v=S27yitK32ds

http://www.youtube.com/watch?v=mbD62gNi9WE

And a great line by Ted Poe from Texas:

http://www.youtube.com/watch?v=yjhMc5B1my0

# Wednesday, September 10, 2008

Let's Talk Politics

Wednesday, September 10, 2008 1:24:08 PM UTC

On The Topic Of Politics.

It's a touchy subject, I know, but I've been engrossed in it for the last three weeks now.  I can clearly see that this is a pivotal moment in the history of our country.

Let it be known that I'm an Obama guy and a Liberal at heart.  I live in New Jersey, one of the so called "Blue States" which pays out more in federal taxes than it receives back from the federal government (see fuckthesouth.com).  I generally agree with Mark Rosenfelder's assessment of taxes and why people who make more should pay more (summary: because they reap the most benefits (although indirectly) of government spending).  I also agree with his assessment of Libertarianism and the pitfalls associated with it:

The nature of our economic system has changed in the last quarter-century, and people haven't understood it yet. People over 30 or so grew up in an environment where the rich got more, but everyone prospered. When productivity went up, the rich got richer-- we're not goddamn communists, after all-- but everybody's income increased.

Thirty years ago, managers accepted that they operated as much for their workers, consumers, and neighbors as for themselves. Some economists (notably Michael Jensen and William Meckling) decided that the only stakeholders that mattered were the stock owners-- and that management would be more accountable if they were given massive amounts of stock. Not surprisingly, CEOs managed to get the stock without the accountability-- they're obscenely well paid whether the company does well or it tanks-- and the obsession with stock price led to mass layoffs, short-term thinking, and the financial dishonesty at WorldCom, Enron, Adelphia, HealthSouth, and elsewhere.

The wealthiest 1% of the population doubled their share of the pie in just 15 years. In 1973, CEOs earned 45 times the pay of an average employee (about twice the multipler in Japan); today it's 500 times.

Ultimately, I'm of the belief that long term prosperity for the nation can only come from government investment into the systems and programs which support the largest base of people instead of relying purely on the free market.

From that perspective, Obama appeals to me because he has the same vision; he understands that we can only prosper as a nation if we increase our shared investment into education, healthcare, and creating jobs for the middle class since these are the foundations of a strong healthy economy.  As Rosenfelder writes, it's not about robbing the rich to pay the poor, it's about getting back to the same principles that allowed the US unrivaled prosperity in the latter half of the previous century.

As Franklin D. Roosevelt said,

"The test of our progress is not whether we add more to the abundance of those who have much; it is whether we provide enough for those who have too little."

Truly, this is what humanity is about and it is one of the aspects that elevate us above other species.

Disappointment.

Anyone who's been following US politics with a clear mind and a willingness to do even a trivial amount of research online knows that this campaign has been filled with falsehoods and lies and, not surprisingly, almost all of them are coming from the Republican campaign.  As has been said of them in the past, the Republicans don't know how to run a government, but they sure as hell know how to run a political campaign.  Their whole platform is based on a series of outright lies and framing the opponent in a negative light (even when they have to distort facts to make it so).

In general, I don't like to talk politics on the job due to various experiences I've had with it in the past (at Factiva during the 2004 election year).  But I couldn't resist this time because most of my coworkers are in Utah, an exceptionally Republican state.  Of course, I was curious because these folks are exceptionally smart, well educated, and connected to the Net where information and data flows freely.  Aside from that, they are Mormons who -- due to their missionary work -- seem like they would be able to connect to that humanistic nature of Liberalism and the Obama platform.

My boss, in particular I felt, should be able to relate to Obama in that like Obama, he is a self made man.  Like Obama, he travelled the world as a youth.  Like Obama, he is well educated (although as I frequently point out, Harvard Law is no walk in the park).  But here he was, in a discussion with me, basically reflecting the message that the Republican campaign had put out there, framing Obama as a know-nothing, do-nothing, wannabe.  It was sad.  Despite the information available at his fingertips and despite his well developed critical thinking skills and despite his intellect, he had bought into the Republican picture of Obama -- hook, line, and sinker.

The Issues.

The discussion started from experience.  His first critique was that Obama lacked experience.  He recited Giuliani's line from the convention.  "Community organizer?  I don't even know what that is.  Does he have any responsibilities?  Does he report to anyone?  Is he accountable for anything?" All fair questions, but let's step back from that for a moment.  Obama was only a community organizer for three years; it was his first endeavor out of college.  Having graduated from Columbia, instead of seeking profit for himself, he sought to serve the public in a volunteer role to help in economically depressed communities as a college graduate.  Aside from this, Obama has never claimed this himself as a credential; it is merely one aspect of his life and the choices he's made which reflect a history of public service.

Of course, back onto the issue of "community organizer", from his wiki, it's clearly defined what he accomplished as a college graduate:

After four years in New York City, Obama moved to Chicago to work as a community organizer for three years from June 1985 to May 1988 as director of the Developing Communities Project (DCP), a church-based community organization originally comprising eight Catholic parishes in Greater Roseland (Roseland, West Pullman, and Riverdale) on Chicago's far South Side.During his three years as the DCP's director, its staff grew from 1 to 13 and its annual budget grew from $70,000 to $400,000, with accomplishments including helping set up a job training program, a college preparatory tutoring program, and a tenants' rights organization in Altgeld Gardens.

It puzzled me because I would have thought that this would have resonated well with his Mormon sensibilities of service and faith.

We moved on from this to how Obama has, as the Republicans have been trying to sell, running for president; as if this was his only other experience.  Oddly, Bossman was unaware of the fact that Obama was also an Illinois State legislator for 7 years.  Of course, this still wasn't good enough because apparently, Obama voted "Present" 130 times.  According to Bossman, this was the definition of a lazy politician.  I tried to explain to him that voting "Present" is a strategic move that signified his disapproval with a particular piece of legislation rather than an act of indifference.  As the New York Times writes:

Lawmakers and other Illinois officials said the present vote was devised to enable lawmakers to recuse themselves from voting on bills that present personal conflicts. It can also be used in the routine day-to-day wrangling in the legislature.

Okay, fine.  Even if you don't accept that the "Present" vote was used strategically, it only accounts for a fraction of his some 4000 total votes!  Of course, the Republicans are very good at framing this.  They throw out the 130 number as fact and act shocked!  Shocked, I say!  Without providing the full context of 4000+ votes. 

"Well," he countered, "they don't really do much as legislators anyways; they only meet a few times a year." Fair enough.  But during this time, I pointed out, Obama was a practicing lawyer at a well respected law firm in Chicago as well as a professor of Constitutional Law at the University of Chicago...

Seeing that he was making no headway in this direction, he shifted tactics to his critique of Obama.  He pointed out rightly that Obama missed more than 45% of the votes in the 110th Congress and called it a mockery, using it as evidence that Obama's only experience has been running for president.  Little did he know -- as he took the Republican message hook, line, and sinker -- that John McCain missed 63.8% of the votes, thus missing more votes than any other member of the Senate!  Of course, this was still an indictment against Obama because he missed 45% of the votes.  But a cursory look at the 109th Congress shows that Obama only missed 1.7% of the votes compared to 9% for McCain.  Again, I pointed out, it was an issue of context; by using the numbers out of context, the Republicans succeeded at presenting a false image of Obama.  If you wanted to spin it and sensationalize it, you could even say that John McCain missed almost 5 times as many votes as Obama did (in the 109th Congress)!!1!!1

Aside from that, it assumes that every vote is given equal weight.  They're not.  Obama has skipped many votes this session to be sure, but he has been strategic in his voting record and has voted on some of the most important bills which McCain, conveniently, has skipped!

As recently as this morning, McCain again told reporters that he planned on returning to the Senate for this evening’s vote on the economic stimulus, stating that Congress needed to quickly pass legislation.

The measure, blocked by conservatives, fell just one vote short of the 60 needed to end debate. At the “last minute,” McCain decided to skip the vote, even though his plane landed in DC in time. McCain claimed that he was “too busy

Both Sens. Barack Obama (D-IL) and Hillary Clinton (D-NY) were able to return to the Senate and vote on the bill.

And another vote on veterans issues, an area that, surely, McCain would champion, right?

Senate Republicans have broken with President Bush to help Democrats add support for veterans and the unemployed to a bill paying for another year of the Iraq and Afghanistan wars.

The 75-22 vote also added billions of dollars in other domestic funds such as heating subsidies for the poor and money for fighting wildfires to the $165 billion for the military operations overseas.

Both Sens. Obama and Clinton voted in favor of the bill. Sen. McCain skipped the vote (as did Sens. Tom Coburn and Ted Kennedy).

Seeing that he was making no headway in this direction, he started to critique policy, saying that Obama's tax plan would put the US into debt, another Republican talking point that he swallowed hook, line, and sinker.  In reality, according to the non-partisan Tax Policy Center, Obama's plan puts the US in less debt than McCain's:

Both John McCain and Barack Obama have proposed tax plans that would substantially increase the national debt over the next ten years, according to a newly updated analysis by the non-partisan Tax Policy Center. Compared to current law, TPC estimates the Obama plan would cut taxes by $2.9 trillion from 2009-2018. McCain would reduce taxes by nearly $4.2 trillion. Obama would give larger tax cuts to low- and moderate-income households and pay some of the cost by raising taxes on high-income taxpayers. In contrast, McCain would cut taxes across the board and give the biggest cuts to the highest-income households.

This is aside from the fact that Obama has a more well defined tax policy and a better plan to increase revenue, but that's a story for another post.  Asked how he would make up for the tax cut, I offered that Obama would get us out of Iraq earlier and thus save huge sums of money (about $10 billion each month).  To this, he quipped: "Yeah right, the Democratic Congress hasn't been able to do anything yet; they're lazy good for nothings." 

Well, again, I thought he was smarter and more well informed than this.  In fact, you can't even really consider the Senate Democratic at all.  The current majority (if it exists at all), is at most 2 members if you count the independents!  It is, for all practical purposes, spilt 50/50.  Aside from this, he completely ignored the fact that from 2003-2007, both houses of Congress were Republican!  Not to mention that the president was Republican and that even 7 of 9 Supreme Court Justices were Republican appointments!  Amazing!  From 2003-2007, the Republicans had control of the Legislative, Executive, and Judicial branches of the US government!  And somehow, he kind of glossed over this to blame a Democratic Congress which has a razor thin "majority" and has only been in power since January of 2007.  It was a total disappointment since I expected him to know this basic political background.

Of course, this is just the tip of the iceberg with regards to the amazing number of falsehoods and misunderstandings that are out there now about Barack Obama.  The Republicans are masters at framing the opponent instead of talking about the issues.  They are masters at making the other guy look like a tool instead of making the issues the primary focus.  And the sad thing is that most Americans buy into their message, hook, line, and sinker.

So Is There Hope?

It would seem hopeless now wouldn't it?  If a college educated, self made business man, and a man of faith and service couldn't buy into Obama's platform of education and public service, then what hope do we have for the rest of America?  What hope do we have for society if the cream of the crop with instant access to the Internet -- the great equalizer -- can be so easily deceived by the Republican message? 

One of our partners in Denmark, Martin, discussed some of these points with me on IM.  He questioned whether American's were smart enough to see through the failures of the Republican campaigns (it's weird, the failures are so apparent to people outside of the US, but Americans are so blind to them...). 

At this point?  It's hard to say.  As I've read somewhere (I don't know who to attribute this to now): the fact that John McCain as a non-zero chance of winning this election is unfathomable.  And indeed, I cannot comprehend it myself; he has run an election completely devoid of policy talks and focused on rhetoric and building up his image instead.  Is this really what we need at this pivotal point in history, when China's empire is once again on the rise and the US slowly falls behind in basic education?  A time when US enrollment in sciences and engineering programs at the collegiate level are stagnating, do we need a man who will focus on warmaking?

Of course, Martin asked if I even believed that Obama could accomplish half the things he promised.  He pointed out that all politicians are alike, promising one thing and delivering another.  I thought about that and my feeling is that no politican can ever deliver what he promises because the reality is that democracy allows dissent and in the US, not every politician will agree with Obama's plans.  It will be difficult to get many of his measures passed by Congress and it will be difficult to address all of the issues he has on his plate within a timespan of four years.  This is the reality of our system.  But the one thing to keep in mind throughout all of this is that he has a well defined vision of what America can be and what we can do (a 15 page, single spaced document just on education policy that every parent and educator should read).  He has a vision of what he will try to accomplish and he has a vision of direction.  This is something that McCain lacks.  What is his vision?  Who knows?

So while I agree that Obama cannot possibly accomplish everything he sets out to accomplish and he will certainly not be able to pass the policies exactly as he has envisioned them, the fact of the matter remains that he has a vision and he has a policy that we can see today and that he will work to make them reality.  That's really all that you can ask of a politician these days.

So is there hope?  We'll have to see, but it's unfathomable that McCain is even still in this race as he's almost completely avoided talking about policy that concerns the majority of Americans.  I can only hope that I've helped Bossman at least consider the possibility that he's been fleeced by this farce of a campaign that is being run by McCain; I can only hope that I've motivated him to do some of his own fact checking to filter some of the BS that's out there now.

Conclusion?

The Republicans have done a superb job of framing Obama as a know-nothing, do-nothing candidate who has no exeperience and is only running because...?  But even a cursory bit of research into his biography and into his policies will reveal that many of the arguments used by his opponents are false and that his opponent, on some issues, has been outright lying to the American public (and doing a fantastic job of getting away with it).

If Obama were to lose this election cycle, I'm sure I would suffer a great bout with depression as we would have been on the cusp of history, the moment that we could have changed the direction of the country and invested in the future of America.

Ultimately, I told Bossman -- only half jokingly -- that he should write in Mitt Romney instead of casting a vote for either Obama or McCain :-D but I sure do hope that he comes around to the Liberal side before November.

Edit: If you like this post, you should also check out my post on a candidate's belief in evolution. It seems more relevant now than ever with Palin on the ticket.

# Friday, August 15, 2008

QOTD

Friday, August 15, 2008 2:38:24 PM UTC

From this morning:

Brad says:
FYI - Lotus can only search people by their last name.  Lame.
Keyboard Jockey © says:
If you looked up lame in the dictionary, there'd be a screenshot of Lotus Notes
Brad says:
And that would be a compliment

Now the issue isn't whether it's possible to do it or not because the fact of the matter is that even if it is possible, it's so obtuse that it's difficult to figure it out without consulting a manual. 

# 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 ;-)

# Thursday, July 03, 2008

More Lotus Notes Suckage

Thursday, July 03, 2008 7:24:03 PM UTC

A colleague emailed me today regarding some information I had sent him previously.  Apparently, Lotus deleted all of his data which wasn't archived.  Why?  Who knows.

Anyways, I suggested that he simply ignore the company email system and use a GMail account.  To this, he replied:

If I could I would NEVER use Lotus email. WHAT A nightmare!!!

Emphasis his.  So please, if you're an IT administrator or a CTO, don't punish your minions by subjecting them to Lotus Notes (unless, you know, you're into that sort of thing).

# Wednesday, May 28, 2008

When Will The Stupid End?

Wednesday, May 28, 2008 2:46:23 PM UTC

Seriously, what is this country coming to?

Does Dunkin’ Donuts really think its customers could mistake Rachael Ray for a terrorist sympathizer? The Canton-based company has abruptly canceled an ad in which the domestic diva wears a scarf that looks like a keffiyeh, a traditional headdress worn by Arab men.

Some observers, including ultra-conservative Fox News commentator Michelle Malkin, were so incensed by the ad that there was even talk of a Dunkin’ Donuts boycott.

‘‘The keffiyeh, for the clueless, is the traditional scarf of Arab men that has come to symbolize murderous Palestinian jihad,’’ Malkin yowls in her syndicated column.

‘‘Popularized by Yasser Arafat and a regular adornment of Muslim terrorists appearing in beheading and hostage-taking videos, the apparel has been mainstreamed by both ignorant and not-so-ignorant fashion designers, celebrities, and left-wing icons.’’

First of all, Michelle Malkin is a fucking idiot; everyone uses "Arabic" numerals every day...guess we need to start a ban of Arabic numerals lest the enemy think that we are sympathizers!  What's next?  A boycott of ottomans?  Gum arabic?  When will the stipid end?  Second of alll, Dunkin' Donuts must be run by a bunch of idiots, too.  Have some balls, especially after you've already paid Rachel Ray for the spot.  And gosh, just use some common sense, people.

Hit the link to see a pic of the supposed keffiyeh (not even close).

The stupidity...it hurts my head.

# Saturday, April 26, 2008

The Sad State of Secularism

Saturday, April 26, 2008 8:26:01 PM UTC

This story is kind of upsetting.

Like hundreds of young men joining the Army in recent years, Jeremy Hall professes a desire to serve his country while it fights terrorism.

Known as "the atheist guy," Hall has been called immoral, a devil worshipper and -- just as severe to some soldiers -- gay, none of which, he says, is true. Hall even drove fellow soldiers to church in Iraq and paused while they prayed before meals.

 "I was ashamed to say that I was an atheist," Hall said.

"Religion brings comfort to a lot of people," he said. "Personally, I don't want it or need it. But I'm not going to get down on anybody else for it."

I dunno...it's just kind of unnerving that in this day and age, a person should feel ashamed to be known as an atheist (especially one that is respectful of others' right to believe).  In fact, recent polls have shown that atheists are the most distrusted group in America, even below Muslims:

From a telephone sampling of more than 2,000 households, university researchers found that Americans rate atheists below Muslims, recent immigrants, gays and lesbians and other minority groups in “sharing their vision of American society.” Atheists are also the minority group most Americans are least willing to allow their children to marry.

It just doesn't make sense.

# Tuesday, April 15, 2008

On The Suckage Of Lotus Notes (6.5)

Tuesday, April 15, 2008 4:49:50 PM UTC

Lotus Notes continues to suck as much as ever.  Every day, I wake to find more suckage.

For example, today, when a coworker forwarded a meeting invitation to me, instead of allowing me to accept it in my calendar and schedule the event, it came across as a regular e-mail with no option to accept the meeting invitation which was attached.

Furthermore, there's this little gem:

Uhhh...thank you Lotus Notes for informing me that the meeting occurs in a different time zone.  It would be nice if you could tell me which time zone.  You know, since I can't automatically schedule the event, it would be nice if you could just tell me what time zone it's in so I can manually schedule it.  Furthermore, see that little outline around the globe and arrow?  This would lead one to believe that clicking on it does something like maybe map the actual time...but nope, nothing happens (the same with the text).  LotusNotes = Productivity--

Meanwhile, Amazon Prime is the polar opposite of suckage.  I ordered two books yesterday and used the default Prime "free" 2nd day shipping option.  To my surprise, they've arrived on my doorstep less than 24 hours later.  If that isn't awesome, then I don't know what is.

# Wednesday, April 02, 2008

SharePoint As A Development Platform

Wednesday, April 02, 2008 1:19:53 PM UTC

I got an email today regarding a blog post by Jeffrey Palermo on the shortcomings of SharePoint as a development platform.

Now I have to say, SharePoint is not without fault (particularly in the area of feature packaging and deployment), but Jeffrey's perceived issues with SharePoint really show either the lack of personal development experience with SharePoint or a lack of creativity on the part of the team he's working with.

Let's get one thing clear first, okay?  SharePoint is meant as an enterprise collaboration and document storage platform, first and foremost.  One must always bear this in mind with regards to any discussion on SharePoint.  Why is it so big?  Why is it clunky in some places?  Why does it have to be installed on a server OS (okay, I admit, this one is probably more about licensing and $$ than anything technical)?

It seems that Jeffrey's major beef, that it must be installed on a server OS, kills any benefits of SharePoint as a development platform immediately.  So let's tackle this one first. 

First, a disclaimer: I'm not a SharePoint guru.  I don't have 5 years of experience with SharePoint.  I'm only going on what I've learned in working with SharePoint, day in and day out, for the last year.

In our development group of 5 or so people, we've managed to develop against SharePoint quite well, despite the fact that we all run XP as our primary development environment.  How?  Virtual machines.  Of course, some would view this as a hassle, as another stumbling block or quite clumsy.  I view it otherwise as there are numerous benefits in developing against a VM server environment:

  1. Every deployment is exactly the same.  This means that server names, file structures, databases, and so on are exactly the same for every developer.  This aids -- not hinders -- the development of automated scripts and deployment utilities.  On our team, we usually synchronize images once every month or so.  What this means is that we'll take turns updating a common image and then everyone will grab a copy of said image.
  2. Virtual Machines are easy to deploy.  It's called: copy-paste!  Nothing easier when adding a new developer to your team.  Instead of configuring a whole new SharePoint environment, just have the developer copy the latest development image.  So easy, a caveman could do it.
  3. Virtual Machines can be rolled back.  Try doing that with your development environment!  If every developer had SharePoint deployed on his or her machine, a mistake (deleting/altering some core database tables or records, for example) would be devastating...it would mean at least a day of lost work time trying to rebuild the development environment.  Using virtual machines to host the server environment protects it from inadvertant dismantling.  And even if it is somehow altered for the worse, no matter, get another copy from someone else!  And of course, being able to rollback the image (provided that you created a snapshot) makes updates (for example, adding a SQL Server service pack) painless.
  4. Virtual Machines are portable.  Why does this matter?  Demos!  There's nothing more convenient than having a sales guy pack up a copy of the VM with all of the software installed and tweaked for demos.  This is a huge bonus.

Look, the suggestion of developing with SharePoint in a "native" environment in a team is just plain stupid; it's a matter of working harder, not smarter and it shows a lack of creativity in terms of development management.  (One disclaimer: some Visual Studio tools from Microsoft for SharePoint cannot be installed on XP...this is a shortcoming, for sure, but it hasn't really affected our development.  If absolutely necessary, you can install a stripped down copy of Visual Studio on the VM).

Now let's address each of the other 7 points that Jeffrey brings up:

  1. SharePoint isn't easy to install.  I'm going to skip that one because clearly, this man has never installed SharePoint.  It's nothing more than point and click...my gosh, I don't understand how it could possibly be easier.  Aside from this, using a VM approach, it only has to be installed once.
  2. SharePoint isn't easy to configure.  See above.
  3. SharePoint does not integrate well with simple tools.  I'm not sure what he means here.  Many administrative tasks can be handled by stsadm.exe which in turn, means that many of the administrative tasks can be handled by batch scripts.  Aside from this, SharePoint is just an average ASP.NET application.  Stopping and starting IIS, xcopy, and so on...these are all still applicable to a SharePoint deployment.
  4. SharePoint isn't easily extended to make simple tools.  What?  Nothing could be further from the truth.  The only beef that I would hold is that Microsoft doesn't package the SharePoint DLLs separately so you have to extract the DLLs from the GAC of your server environment.  But once you do that, it's easy to reference and use the API by copying the DLLs to your development environment.
  5. SharePoint isn't easy to debug.  Again, I'm not sure what the issue here is.  The process of debugging SharePoint applications (web parts, layout pages, etc.) is no harder than debugging any standard, run of the mill ASP.NET web applications.  Okay, sure, you can't just hit F5 (oooh, the horror!), but seriously, I hate F5 developers - sometimes, F5 just isn't the way to go, dude.  I'm also pretty sure chimps (or macros) can be trained to hook up the debugger and hit F10 and F11.  As for debugging core SharePoint, well, I guess he has a point since the source and debugging files aren't available (not that I know of), but I don't see that as an issue.  I mean, how many platforms ship with debugging symbols included?
  6. It's not easy to create test automation for SharePoint.  There is some truth to this since it requires the developer to learn about the platform first (API, database tables, web services, and so on).  But I don't think it's any more difficult or challenging than setting up automated tests against any other third party platform.
  7. SharePoint configuration does not store easily in source control.  See above regarding VMs.  Aside from this, he's got it all wrong again.  We can look at this from a few different angles.  First, SharePoint is just an ASP.NET application.  Repeat that to yourself about 100 times.  With regards to application configuration (in terms of the web.config), it's as simple as copying the web.config to your source control system and using a script to deploy it on build.  Secondly, if we look at the configuration in terms of web parts and layout pages, it's possible to include these in source control as well using solution packages deployed either on build or manually as features.  Certainly requires a bit of research to get it working the first time, but it's not a task that takes more than 1-2 days of experimentation.

From personal experience, I've found SharePoint a very compelling application development platform (again, that's not to say that it doesn't have shortcomings) because it's nothing more than ASP.NET but with the added bonus of a document management/storage API, profiling, permissions, and it acts as an integration platform for a variety of applications. 

You can make it as hard or as easy as you want it to be with regards to developing applications for SharePoint.  It's only a matter of how much time you are willing to put into flipping through the API and understanding the fundamentals of working with SharePoint.  A big part of successfully and painlessly developing against SharePoint is creativity in terms of setting up your development environment and automation (batch scripts, pre/post-build scripts).

The points that Jeffrey, didn't bring up -- the true pain points -- are really "fringe" features so far as I'm concerned.  Namely, this centers around SharePoint hosted and integrated workflows and InfoPath (because no one likes and no one actually uses the otherwise useless and purposeless InfoPath).  You're not required to use InfoPath or SharePoint hosted workflow; in FirstPoint, absent the early documentation and tools required to be productive on this front, we made an early decision to host workflow in our own environment. Sure, we miss out on some of the native features of SharePoint like workflow state visibility and integrated forms via Forms Services, but I don't see it as something we can't overcome as documentation and tool support becomes better on this front.

# Friday, March 28, 2008

SharePoint: The Second Coming Of Lotus Notes?

Friday, March 28, 2008 12:51:33 PM UTC
As I was pondering the suckage of Lotus Notes, I came across an interesting little piece on a CMS Watch Report titled: "SharePoint Has Become the New Lotus Notes":

Microsoft Office SharePoint Server 2007 is repeating history as it mimics the allure and pitfalls of Lotus Notes, according to research released by CMS Watch, an independent analyst firm that evaluates content technologies.

SharePoint exploits traditionally underserved collaboration needs for information workers laboring within Office tools, and fulfills a common desire to easily create disposable workspaces, CMS Watch found.

Like Notes in a previous decade, IT often embraces SharePoint as a simple answer to myriad business information problems.  But the platform can morph into a technical and operational morass, as repositories proliferate, and IT comes to recognize that various custom applications require highly specialized expertise to keep running properly.

...

The SharePoint Report 2008 concludes by advising customers to establish clear boundaries on SharePoint services, to keep it from becoming their new Notes – the platform that everyone loved, but then loved to avoid.

While SharePoint does indeed have it's weaknesses (total lack of any integration with ASP.NET AJAX in the SharePoint implementation itself -- guess we'll just have to wait for 4.0, web services support is still kind of weak) and oddities (CAML?), it's nowhere near the steaming pile that is Lotus Notes.

On a serious note, I do kind of see the point in that last paragraph there.  SharePoint often gets evangelized as some silver bullet for collaboration ("Oh look, workspaces! Workflows! Tasks lists!") but I've never been in an organization that's used SharePoint in a way that was actually of any aid to productivity or collaboration; people just don't seem to want to log onto a corporate SharePoint portal unless they have to. 

That's not to say that the platform doesn't have its useful bits, but the real gem in SharePoint is its integration with Office applications as a platform for "seamless" sharing of documents and I think the idea of offering that to a much larger audience (via Office Live Workspaces) is long overdue from Microsoft.  Until recently, there were few integrated solutions for small businesses, students, and other non-business groups for the very simple act of sharing Office documents aside from using e-mail. 

Even when I joined Zorch Software, I would do a facepalm regularly when I got an email with a document attached with a "v15" suffix.  I'd save it in the same folder as the previous 14 "versions" that I received.  The irony.  The problem is that most of SharePoint just isn't that useful.  Even in a tech minded organization like Zorch Software, you just can't break some people out of old habits; to many, collaboration is synonymous with e-mail.  There is a whole generation that doesn't get wikis and doesn't want to learn wiki markup. 

Well, in any case, I'm still not over the fact that I'm being forced to use Lotus against my will and I'm still bitter over the fact that it's been so hard to get people to embrace our Trac wiki and embrace the ticket system for tracking issues.

# Thursday, March 27, 2008

Lotus Notes: It Sucks...Hard

Thursday, March 27, 2008 7:30:39 PM UTC

As part of the transition from FCG to CSC (Computer Sciences Corporation), we are also switching our mail system from Outlook/Exchange to Lotus Notes/Domino/Whatever.

There can only be one immediate reaction up on switching from Outlook 2007 to Notes 6.5:

WTF?? AHHHHH!!11 MY EYES!! GIVE ME BACK MY OUTLOOK!

Surely, this application which looks like it crawled out of the late 90's cannot be the primary enterprise messaging system for a large, publicly traded company, can it?  Maybe it's a clever ruse to get people to stop using email and actually interact with one another by ecouraging calls instead of email...maybe.  I can't believe IBM actually sells this product and I can only imagine the painful life endured by the Notes sales team and all of the mockery they must live with.  If my parents worked on the Notes team in development or sales, I'd ask to be disavowed for their crime of bringing such a shitty piece of software into existence.

I think I'm going to start my own trail of why Lotus sucks posts, but Lotus Notes Hater already has a headstart on me.

The truly absurd thing that I've learned is that there are actually standalone programs that have been written to clean up crashed instances of Notes!  No kidding, I got the following email from a company wide distribution list:

If Lotus Notes crashes, you don't have to restart your PC anymore! Just run ZapNotes and allow it to clean up what Notes left behind so you can restart Lotus Notes. ZapNotes works on Windows 9x/NT/2000/XP

Lotus Notes Hater comments:

Cassetica charges US$1,500 for NotesMedic Pro and US$2,500 for the enterprise level of NotesMedic. The fact that a company makes money from a product that shouldn't even exist makes us ask, "Why haven't the owners of Lotus Notes put Cassetica out of business by incorporating the feature of NotesMedic directly into Lotus Notes?"

NotesMedic is not the only product out there. There is also ZapNotes. And KillNotes. There are at least three products that have no reason to exist.

Awesome!  Now I'm really gonna look forward to using Notes!

I also got to chat with some of my teammates in Vietnam just to see how they felt about it.  Who knows, maybe their Asian sensibilities would lead them to be more polite and less judgemental.  Maybe their allegiance to their employer would cause them to accept Lotus as their fate and use it dutifully.

Mumble mumble says:
  Did you guys install Lotus yet?
Vietnamese Guy says:
  Yes
Mumble mumble says:
  What do you think?
Vietnamese Guy says:
  Slow
Vietnamese Guy says:
  very slow
Vietnamese Guy says:
  urgly

So there you have it, even the Vietnamese hate it.

# Tuesday, March 25, 2008

DRM = Doesn't Really Matter

Tuesday, March 25, 2008 2:52:05 PM UTC
It's true, DRM just doesn't really matter.  The music industry has pretty much seen the light at this point with Amazon now offering tracks from all four major labels DRM free.  How much longer will it take for the movie industry to realize the same truth?

Blu-Ray's vaunted BD+ encryption scheme was supposed to give it the upper edge over HD-DVD's ill-fated AACS encryption scheme.  The news on this front the last couple of days has been software maker SlySoft's crack of BD+.

My favorite little tidbit is this statement by the Blu-Ray camp:

Richard Doherty of the Envisioneering Group will have to revise his statement from July, 2007 regarding BD+: "BD+, unlike AACS which suffered a partial hack last year, won't likely be breached for 10 years". It is worth mentioning that since he made that statement only eight months have gone by.
We'll see how this shakes up.  DRM, once again, proves that it is barely a deterrent to pirates while a genuine hassle for legitimate consumers who wish to back up their physical media.

# Saturday, March 08, 2008

Random Rant

Saturday, March 08, 2008 5:32:42 AM UTC

One of the most awesome pieces of software that I've come across in my career as a consultant and software engineer is Trac.  Among the various awesome features of Trac include:

  • An awesome plug-in system and library for all sorts of add-ons to the core system
  • RSS feeds on available on the timeline which acts as a customizable, almost realtime data feed
  • Integrated source browser...it makes pointing out code isssues so much easier when you can link it to source
  • An awesome wiki system that integrates with the ticket and changeset systems

Did I mention the ticket system?  Sure it lacks a bit in terms of workflow and it is rather simplistic -- being geared almost exclusively towards bugs, but I think the most important aspect that it brings is, well, tracking.

Having worked with it for almost a year, I find it really hard to imagine working on any sizable software project without it (or some other piece of comparable software project management tool).

Perhaps the only thing that I've found frustrating -- surprisingly, it is not with Trac itself -- is the inability to really win anyone else over in my group; you'd think its like pulling teeth to get a ticket created for tracking purposes instead of using email. Let's not even get into wiki editing or proper usage of wiki markup or taking advantage of the integrated wiki syntax for tickets and what not.  It just seems like some old habits are hard to break (much to my dismay).

But don't let this dissuade you! If you haven't given it a look yet, there's no time like the present to download it and give it a go. Oddly enough, if you're looking to get started, VisualSVN Server may be the way to go since it includes an integrated installation of Apache, Subversion, and a mangement console.  Also check out the awesome documentation on installing Trac on a variety of systems, including Windows.

# Tuesday, February 19, 2008

Education And What We Can Learn From Other Countries

Tuesday, February 19, 2008 2:54:04 AM UTC

As the spouse of a teacher, I know first hand the challenges that many young teachers face in the US today.  From waning parent interest and participation to lack of administrative support to poor professional development plans.  Of course, there is also the issue of compensation; let's face it: $40,000 just doesn't go very far.

I'd like to think that my wife is one of those teachers that takes her work very personally and always takes the initiative to help her students.  As Claudia Wallis writes in "How to Make Great Teachers", she writes that one of the key characteristics of successful teachers is "an unshakable belief in children's capacity to learn."  Indeed, I think my wife has a certain stubborness when it comes to her students in that she doesn't accept excuses for failure and always pushes her kids.  I'm constantly surprised by the number of parents of former students who come up to her and tell her how she's changed their children's lives, especially when it comes to the topic of mathematics.

One thing that amazes me is the incredible cost of education for teachers in the US and how much of that burden falls on the shoulders of America's teachers and their families, especially for post-graduate education.  For example, my wife's graduate school loans total over $25,000!  Her commitment from her school district? $750 per year.

Linda Darling-Hammond comments:

All teacher candidates in Finland, Sweden, Norway and the Netherlands, for example, receive two to three years of graduate-level preparation for teaching, at government expense, plus a living stipend.  Unlike the U.S., where teachers either go into debt to prepare for a profession that will pay them poorly or enter with little or no training, these countries made the decision to invest in a uniformly well-prepared teaching force by recruiting top candidates and paying them while they receive extensive training.

For certain, it seems like the US doesn't treat teaching like a first class profession.  Contrast this with Singapore's approach:

To get the best teachers, the [National Institute of Education] recruits students from the top third of each graduating high school class into a fully paid four-year teacher-education program and puts them on the government's payroll.  When they enter the profession, teachers' salaries are higher than those of beginning doctors.

Aside from the greather respect for the teaching profession, it seems like many countries also take a different approach to continued on the job professional development.

[In Singapore,] the government pays for 100 hours of professional development each year for all teachers.  In addition, they have 20 hours a week to work with other teachers and visit on another's classrooms.

Most US teachers, on the other hand, have no time to work with colleagues during the school day.  They plan by themselves and get a few hit-and-run workshops after school, with little opportunity to share knowledge or improve their practice.

Harold Stevenson noted that "Asian class lessons ae so well crafted [because] there is a very systematic effort to pass on the accumulated wisdom of teaching practice to each new generation of teachers and to keep providing teachers the opportunities to continually learn from each other."

In a paper titled Speeding Up Team Learning, Edmondson, Bohmer, and Pisano write, with regards to their study on surgical teams learning new procedures and practices in the area of cardiac surgery:

Teams that learned the new procedure most quickly shared three essential characteristics.  They were designed for learning; their leaders framed the challenge in such a way that team members were highly motivated to learn and the leaders' behavior created an environment of psychological safety that fostered communication and innovation.

I think we can take some of these ideas and merge apply them to the teaching profession as well by identifying what Darling-Hammond terms "expert teachers" and emphasizing the fostering of these individuals into drivers for team and mentor based professional development.  Furthermore, I think greater structured team based learning and communications would greatly enhance the experience of young teachers learning the craft.

# Tuesday, January 29, 2008

"Free" Money? Think Again...

Tuesday, January 29, 2008 2:20:01 PM UTC

Michael Kinsley has some sobering commentary on the economic stimulus package idea that's floating around in Washington right now, perhaps one of the most hairbrained ideas to come out of DC in recent years.  Kinsley's subtitle says it all: "We need a 'fiscal stimulus' the way a drunk needs another drink.  Let's sober up first."

Kinsley brings up the core reason why this idea is doomed to failure: in a time of impending recession, it is only natural that a good portion of the beneficiaries of the rebate will act responsibly and save it or use it to pay down debt instead of instantly pumping it back into the economy.

"Direct government spending is a more efficient stimulus than an equivalent tax cut because all of it gets spent.  When actual people get hold of the money, a few might have an unpatriotic tendency to save some of it."

Kinsley further chastises this proposal by pointing out the obvious:

"My gripe is that telling Americans that they need to borrow and spend just a little bit more to get us past this recession -- and then reform their ways -- is like telling an alcoholic he needs one more drink before sobering up."

It is amazing that, quite possibly, a large percentage of Americans must think that money comes out of thin air and the gubmint can just print more of it; personal and government fiscal responsiblity is a distant reality, someone else's problem.

Like adhering to that New Year's resolution to lose weight or start saving more money, if the promise of a magic pill or surefire investment seems too painless to be true, it probably is.  There is still no substitution for daily exercise and, likewise, financial responsibility.  Kinsley points out:

"If we must have a fiscal stimulus, let's make sure it's not too enjoyable."

Spending our way out of a recession driven by a debt crisis just seems too enjoyable to work.  It is the proverbial magic diet pill or instant get rich scheme...doomed to fail.

# Sunday, January 13, 2008

Confucius On Programming

Sunday, January 13, 2008 9:18:02 PM UTC

One of the favorite classes that I took in college was an introductory course to Chinese philosophy. 

From time to time, I found one or two passages from The Analects that I could apply to my computer science major.

One of my favorites is passage 13:3:

Tzu-lu said, "The ruler of Wei is waiting for you to serve in his administration.  What will be your first measure?"  Confucius said, "It will certainly be the rectification of names."  Tzu-lu said, "Is that so?  You are wide of the mark.  Why should there be such a rectification?"  Confucius said, "Yu! How uncultivated you are!  With regard to what he does not know, the superior man should maintain an attitude of reserve.  If names are not rectified, then language will not be in accord with truth, then things cannot be accomplished.  If things cannot be accomplished, then ceremonies and music will not flourish...."

"Therefore, the superior man will give only names that can be described in speech and say only what can be carried out in practice."

To me, this applies to software engineering in the naming of classes, methods, properties, variables, and so on.  As McConnell writes in Code Complete,

The smaller part of the job of programming is writing a program so that the computer can read it; the larger part is writing it so that other humans can read it.  let [the reader] use their brain cells to understand the larger question of how your code works rather than the syntactic details of a specific expression.  You write readable code because it helps other people to read your code.

Indeed, sensible naming is a big part of this idea of legibility.  What I dig about Visual Studio 2008 is that the installed documentation includes excerpts from Framework Design Guidelines by Cwalina and Abrams which aims to include some of the key naming and design best practices into the core literature on the .NET Framework.  It's a necessary and needed move to help forward the education of the legion of .NET developers who continue to perpetrate terrible naming practices carried over from VB.

I mean seriously: if I have to read one more method name as a noun (or a property as a verb or a class as a verb), I'll just have to start researching a way to let me reach across the Internet and punch someone in the face -- nothing ruins my morning quite like finding a new class in source control named as a verb.  I'm also midly irritated when developers choose unconventional names for object types.  For example, the use of "Checker" as opposed to "Validator" -- ugh!

Admittedly, some artifacts are just really hard to name.  But in such cases, proper naming is probably even more important since if it's hard for the writer of the code to come up with a proper name, the wrong name will make the artifact even harder to understand for secondary readers.  There have been times where I've spent days trying to come up with a suitable name for a class (I'll name it, but I'll continue to mull it over through restless nights (true story) and refactor it once I do come up with a suitable name) since the last thing I want to do is to give something a cryptic, hard to understand name.

One of the easiest ways around this is to spend some time digging around the SDK and look for similar patterns in naming and see how the .NET framework designers structured their class and member names.  I also think that Cwalina and Abrams' Framework Design Guideline is a stalwart component of any .NET developer's library.

So the next time you're about to write a class name or create a new member, just remember,  "If names are not rectified, then language will not be in accord with truth, then things cannot be accomplished.  If things cannot be accomplished, then ceremonies and music will not flourish". I mean, who doesn't want their project to end with ceremonies and music :-D

# 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?)).

# Thursday, September 27, 2007

Dynamic SQL: Yea or Nay?

Thursday, September 27, 2007 6:42:01 PM UTC

I've always been on the side of stored procedures in the classic debate over the merits of dynamic SQL.  In reality, I can only think of one good scenario where dynamic SQL at the application layer should be used: programmatic batch inserts.

I won't go into the performance debate, since there are tons of articles that already cover this area, but rather, I'd like to discuss the usability and development and architectural aspect of it.

In almost all other cases, it seems like the best choice is to have the application not generate dynamic SQL and use a stored procedure...always.  There are certainly times when dynamic SQL is necessary, for example, when generating selects against a dynamic table structure, but in those cases, the variable portions of the query can be parameterized into the stored procedure and the procedure should generate the dynamic SQL.

Some would argue that if the underlying data models change, the application layer will usually be forced to change are ignoring other aspects of model changes that don't necessitate application model changes.  These include performance tuning, filtering by table JOINs and reuse of the data logic in nested stored procedures or functions.

When working with compiled code like .NET, the core issue is that fixing query errors involves a recompile and redeploy, which in most cases, is much more difficult than just fixing a completely disconnected (but not completely decoupled since there is a quasi-interface (the return result type and structure)) stored procedure.

For example, if a dataset today contains data from table A and tomorrow it needs to include data from table A and B (let's say they both contain the same elements, but one is used for archives), it would be easy to update the procedure to UNION the results from the two datasets without affecting the application layer.

This isn't the only scenario, for example, let's say the requirement changes and now the data needs to be filtered by another table.  It would be easy to add a new INNER JOIN to the query without affecting the application layer.  Not only that, it also allows for the recombination of fields (for example a user name field today only needs to show first and last name, but tomorrow, it may need to show the middle initial as well - this change can be done at the database level and not affect the application or UI layers).  It can also make it easy to change the underlying table structure so long as the return data isn't expected to change: it provides a layer of decoupling between the application layer and the raw data storage.

In addition, having a stored procedure allows for easier testing of the data layer without the added overhead of having to execute the application runtime and walk through the debugger line by line just to figure out if the return data is correct; it is much more efficient to simply execute the query and simulate the use case to find if the data that is returned is correct.  It becomes much easier and much less painful to simulate data access tests since they can be run, observed, and analyzed nearly instantly.

In larger organizations with dedicated DBAs, stored procedures have the added benefit of allowing SQL experts to add performance tuning to eek out extra performance without requiring the application to be rewritten or recompiled.  Again, we see this decoupling of the application layer from the data layer.  Of course you could always have templated SQL stored in XML files or something that would get rid of that recompile, but it is still likely to necessitate more redeployment if the application in question is distributed.  This key point is not to be taken lightly since -- as an example -- an error in string formatting may require the replacement of binaries and services across dozens of servers.  Not only that, testing in such a scenario still requires interaction with the application layer, adding to the possible failure points, time required, and general development pain.

My own conclusion is that using dynamic SQL (including LINQ) creates too tight of a coupling between the application layer binaries and the underlying data store; it's great for RAD and testing, but in any application of significance (especially in highly distributed environments), dynamic SQL at the application layer seems like it's a maintenance and testing disaster waiting to happen.

# Friday, August 17, 2007

Interesting Find

Friday, August 17, 2007 1:32:30 PM UTC

So this morning, I was contemplating signing up for Amazon Prime since the holiday shopping season is a mere three months away and because I just moved to a new house that's kind of out in the middle of nowhere.

In doing some research about the general satisfaction about the service, I came across an amazing find on the BusinessWeek website, of all places.

The article/post itself isn't so interesting or amazing in any sense, rather, it's the comments left by the readers that are amazing and utterly baffling.

Who would have thought that the readers of BusinessWeek are such giant retards who have no concept of how the Interwebs work?  Nay, who would have thought that they were so dense as to not have any concept of how customer service works?

As evidence, I present some of the comments to the article:

I had no idea that it would cost me 79 dollars to join the shipping club and would not have joined if I did. I don't order that much and don't care if it took longer.

I would like to cancel my membership and get a refund for that amount. The one purchase I made took longer then two day's anyway. It was not even paid for or shipped till 8 o2. I have not even receive any imformation about the club yet.

Than You
Donald TenEyck

Hey Donald, this is BusinessWeek, not the Amazon customer service page...get a clue!  I'm pretty sure that Jeff Bezos is not going to call you and apologize.

I have just received a charge on my Visa bill
for $79.00. I did not authorize this and will not
pay it. Please cancel "MY MEMBERSHIP" and I will expect confirmation from you immediately. I notice that I am not the only one that has unknowingly been charged. What a rip off. Please credit my account now. And then lose my email
address
Bonnie Smuffer

Is it really possible for people to be this dense and stupid and yet have access to the Internet?

And it goes on and on...the stupidity really reaches critical mass in this posting.  Of course, it's fully possible that it's just comment spam, but check out these two postings by "Jaques Laporte":

Hi AMAZON.COM

I have just received a charge on my Amex bill for $79.00.

>PRIME SHIPPING CLUB.
>Free Standard Shipping for eligible items shipped to P.O. boxes in the continental United States (excluding Alaska, Hawaii, and U.S. >territories, possessions and protectorates) and APO/FPO addresses with U.S. zip codes.

Note that I do not live in the continental USA.

I did not authorize this and will not pay it. AMEX will be notified.

Please cancel my so-called membership and refund me.
I don't want to spoil my relation with Amazon, but until total refund, YOU ARE NOT AUTHORIZED to bill directly my credit cards.
Take notice please that I currently have no payment methods in your system.

Best regards.
Jacques Laporte.

Posted by: Jacques Laporte at January 3, 2007 06:56 AM

And then:

I must confess that the refund was fast (2 days).
All's well that ends well.

Posted by: J. Laporte at January 5, 2007 12:38 PM

Amazing to think that there are such a large quantity of people with this level of stupidity...

# Thursday, August 09, 2007

I Hate Comcast

Thursday, August 09, 2007 6:52:02 PM UTC

Over the past 4 years, I've been both a Comcast and Cablevision subscriber.  When I moved recently, I was "forced" into subscribing to Comcast due to whatever stupid regulations are in place limiting competition.

Let me list all the ways in which Comcast blows:

  1. Their customer service reps. are completely clueless.  It took me five call to three different people to figure out a stupid promotion that they were running that required you to be a customer already.  But clearly, on the ad, the terms and conditions state that it's available to new and existing customers.
  2. Their sales reps. are retards or just fuckups.  So to ensure that I got the exact package I wanted, just before I hung up with the rep., I specifically went over each line item to ensure that I was getting what I wanted.  Yet when the installation tech showed up - a day early, but an hour late - he didn't bring the right box!  I looked at the box to see if there were component cables and as I suspected, there weren't.  So I state "Hmmm...this doesn't look like an HD box" to which he responds "Yeah, I figured you wanted an HD box (gestures to TV)...those fuckups in sales...".  I check the order and indeed, not only was I not signed up for the package that I wanted, I was not signed up for HD either.
  3. Their customer service sucks.  So my wife goes to the local field office to tell them that they messed up their order.  Instead of offering for a tech to come out for free to claim the box and install an HD box, they hand her a new box and ask her to return the old one by Saturday.  That's quality service for ya' right there.
  4. The service sucks ass.  This deserves several sub-points:
    1. The digital voice comes with a shitty modem that has led to noticeably slower Internet performance (i.e. loading pages, sending files, etc).  You have no choice but to use this shitty modem.
    2. The digital cable is very unstable...many of the digital channels consistently lose integrity (blockiness, screen blacks out).
    3. The HD selection sucks.
    4. The fastest cable internet option costs $53 per month and it's only 8mbps downstream (and something like 1.5mbps up).  Contrast this with Cablevisions Optimum Online with Boost which offers 30mbps down/5mbps up for $44.95+$14.95.  Ho-lee shit.  There is no comparison.  To make matters worse, Boost comes with:
      1. A static IP (OH SCHNAPS!!)
      2. TOS allows outbound HTTP traffic over port 80!
      3. TOS allows outbound SMTP traffic over port 25!
  5. Comcast is expensive.  The Digital Preferred, which you need to get ESPN HD, costs $74/mo.  Plus, on top of the cable cost, you have to pay an extra $5 for HD channels and rental fee for the HD box.  Cablevision?  HD is included in all of the packages.  Plus, you can get most of the HD channels with the Silver Package @ $68/mo.

So in conclusion, Comcast sucks.  Cablevision has service to the zip code, but not to the street address...so what can I do but suffer :-(

# Wednesday, July 18, 2007

Mindblowing Job Candidate Trawling...

Wednesday, July 18, 2007 7:20:24 PM UTC

The following are the contents of an actual email that I received this afternoon:

Hi cchen

I have a very hot Java Developer rek with a direct-client in Manhattan. Please send me candidates with rates and contact-numbers.

Interviews this week.

Thanks
-Priya M.

I would be shocked if Priya lands any candidate this year.

Let's dissect all of the ways that this email is completely ineffective:

  1. I am a .Net developer.  I know Java and worked with it for 4 years on college, but I have not worked with it in any sort of significant capacity since then.  Assuming this email was generated based on my profile on either Dice or Monster, you'd think that the recruiter would attempt to filter the candidates...
  2. "Hi cchen"?  Why am I being addressed by my email account name?  I'm pretty sure that I have my name listed on Dice and Monster.  If this were to have come from some third party database somehow, wouldn't it make sense to just use something like "Good afternnon,..."?
  3. "rek"?  Take some time and type out the extra keystrokes and spell it out.  A little professionalism goes a long way.
  4. No.  I am not doing your job for you.

Contrast this with another email from a Bradley G.:

Dear Applicant,

My name is Bradley and I'm an IT recruiter at [XYZ]Technologies Corporation. Our records show that you are an experienced IT professional with experience in .NET. This experience is relevant to one of my current openings.

The opening requires ASP in addition to the above skills.

It is located in Pittsburgh, PA.

If you are qualified, available, interested, planning to make a change, or know of a friend who might have the required qualifications and interest, even if we have spoken recently about a different position. You may also send me an e-mail with a copy of your current resume. If you do respond via e-mail please include a daytime phone number so I can reach you.  In considering candidates, time is of the essence, so please respond ASAP.  Thank you.

Sincerely yours,
Bradley G.

If you are not currently seeking employment, or if you would prefer I contact you at some later date, please indicate your date of availability so that I may honor your request. In any event, I respectfully recommend you continue to avail yourself to the employment options and job market information we provide with our e-mail notices.

Much more professional and much more likely to actually attract a candidate, but it still gets a few items wrong:

  1. I did not apply for any job.  It would have been better to use use a simple greeting like "Good afternoon" or "Greetings" or perhaps even something creative like "Hello from IT land!"
  2. I would have added "please responsd ASAP"...seems like a bad sales pitch.

Just some random afternoon ranting...

# 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 :-)

# 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.

# Friday, June 29, 2007

Two Terrible Rulings

Friday, June 29, 2007 3:36:46 PM UTC

Opening up the newspaper this morning, I came across two terrible rulings recently passed down by the Supreme Court.

The first has to do with MSRP.  I'm guessing that the majority of American's who are not filthy rich often go bargain hunting for prices below MSRP in hopes of finding that killer deal.  I'm guessing that if you're like me, you're willing to sacrifice some service at the point of sale for a better price.  This is part of principle of what has driven online sales: for the retailer, they save by not needing to have sales people or point of sale service while for customers, they often get a chance to save a huge amount over retail outlets.

From USA Today (6/29/07):

The 5-4 decision overturned a 96-year-old law that prevented manufacturers from setting minmum retail prices.  The majority wrote that lifting the pricing ban could benefit consumers if retailers offered better service or selection.

Wait, what?  How about benefitting consumers by offering a better price?  Why not leave it up to the retailers to choose which model they choose to bring in customers?  If customers wanted service, they could choose the retailer that offered it.  If they wanted to find a bargain, they could choose the retailer with the best markdowns.  Instead, the court has decided that the consumer has no say in this...no freedom of choice when it comes to price shopping.

What I found was completely asinine was a statement by Richard Doherty:

Richard Doherty of technology market researcher The Envisioneering Group agrees, saying the price ruling could lead retailers to use more free products and better services as sales incentives.  "It's sure to be to consumers' benefit this summer and Christmas."

Is this guy on crack?  How about I just want to get a good deal on a HDTV...I don't want any "quote-unquote-FREE" stuff.  I don't care for point of sales services; I do my research on the products I buy and I already know what I want when I go into the store; I want to get the best deal that I can...why not leave that decision up to the individual consumer?

To make matters worse, the article offers commentary from a multi-billionaire:

Bill Gates, of golf equipment maker Ping, says, "Not every consumer is a bargain shopper.  Some consumers are looking for quality, innovation, personalization and customer service when they shop."

That's fine, Bill, if you have the money for all that jazz, but how about the rest of us who are just trying to put away some money for retirement, for our kids, for our families?  We just want to get by with a good deal.  How about this novel idea: let the consumers decide what they value - price or service.

Argh!

As if this wasn't bad enough, the Supreme Court also ruled to strike down school diversity programs on a national level:

The dramatic 5-4 decision throws into legal doubt programs that factor in race, including magnet schools that use race to draw students from different neighborhoods.

Accorind to Chief Justice Roberts,

Classifying and assigning schoolchildren according to...race is an extreme approach.

Well then, what would you suggest Mr. Roberts?  How do you overcome the economic hurdles that create defacto segregated schools?  How can you deny that integration - even if it is forced - is to the benefit of our racial diversity and our social fabric?

The fact is, if school children were simply assigned to schools based on location and district, it would in fact create further segregation and slowly reverse some of the progress that has been made.  I think it is true that we fear what we do not know or understand.  We view those who are different from us as outsiders because we do not understand their cultures, their languages, their traditions, and their ways; what better way to overcome the defacto segragation that occurs by township (and economic boundaries) they to help ensure a minimum level of integration?

Such an upsetting way to start the day...

# Tuesday, April 17, 2007

More Buffoonery From The Music Industry

Tuesday, April 17, 2007 12:56:21 PM UTC

Argh!

A panel of judges at the Copyright Royalty Board has denied a request from the NPR and a number of other webcasters to reconsider a March ruling that would force Internet radio services to pay crippling royalties. The panel's ruling reaffirmed the original CRB decision in every respect, with the exception of how the royalties will be calculated. Instead of charging a royalty for each time a song is heard by a listener online, Internet broadcasters will be able pay royalties based on average listening hours through the end of 2008.

Why does the music industry insist on treating the consumer like an enemy?

It doesn't make sense to me and I don't see how it can make sense to the artists.  Many of these internet radio sites play tracks which otherwise would get no airtime on radio, which otherwise I would never have heard, and from artists which I would have never discovered.  Zero 7, Air, Bebel Gilberto, Susumu Yokota, and on and on...

I know this isn't the case for everyone, but at least in my case, internet radio has led to the purchase of almost all of my CDs in the last 4 years and these are albums which otherwise would have little mainstream exposure at all.

I just don't get the logic that the music industry is operating on...

# Thursday, April 12, 2007

Random Developer Rant

Thursday, April 12, 2007 12:52:37 AM UTC

I have to say, one of my big pet peeves in terms of software development is evangelizing by "senior architects" who haven't written code in years.

I'm not against evangelizing a product or technology in general, but it seems so much less like bullshit when it comes from people who are in the trenches, dog fooding the technology they are evangelizing.

The real problem arises when some developer who's been out of the loop evangelizes without having used the product in a real world development environment. Or even worse, sometimes, you get guys that evangelize about practices, architecture, and design. Bleh! These guys are the absolute worst! Lots of things make sense in an ideal world where software deadlines are always met ahead of time :-) (I love those Walgreen's commercial) but the reality is, no one lives in that world.

But in any case, one of our codebases at Zorch recently underwent a code review. As a part of this code review, the team at our counterpart ran some code analysis tools against our codebase. Of course, I have no objection to this in principle, but what did bother me was that they didn't really even analyze the results of the code analysis output. They skimmed for "reds" and basically just took a look at the count of warnings. To make matters even more asinine, the individuals performing the code review took at least 3 minutes trying to find out where the code analysis utility was located.

Okay, I must at least give a disclaimer: in general, I like the idea of code analysis and good practices. I like the idea of general guidelines in terms of coding conventions. But I'm not a Nazi when it comes to policing code - I was at one point in my career, but these days, I figure that as long as it's not terrible (i.e. lots of misspellings, inconsistent patterns, well known bad practices like massive string concatenation), I'm not one to harp on these small details.

Just as each writer has a different style, just as directors have different styles, and just as a painters have different styles, I realize that developers have different styles as well. I try to point out obvious bad mistakes when I see them (like using DataSets without really using DataSets), but I think otherwise being too anal about this stuff is counter productive because, you know, this stuff can always be cleaned up later - it's way more important to get the product to work first.

Now with that out of the way, what kind of bothered me the most about this whole event was that after the output of the code analysis was generated, we didn't review a single warning that was generated to validate whether there were flaws with our codebase. I suspect that even if we did, these guys wouldn't have known what half of the warnings meant. What a waste of time. I could have ran the review and emailed it to them if that was it.

So, that's my rant for the week :-)

# Tuesday, March 27, 2007

Am I Just Being Compulsive?

Tuesday, March 27, 2007 2:48:37 PM UTC

I waked up this morning with some notices that new code has gone into our main repository.

So of course, I perform a checkout to get the new code and what do I get?  Argh!  The commiter added the _svn directories (possibly from a previous working copy) into the repository!  So of course, the checkout fails and I need to revert to a previous version.

Now I'm a little annoyed.

Then I go in and check the directories to confirm that indeed, the _svn directories were checked in like any other directory.  I also find that our naming rules, which I had thought we all agreed on, are not being followed.  In addition, we had discussed building all projects off of the main solution and building sub-solutions from that main solution trunk.

Nope.  We have a solution sitting in it's own directory.  To top it off, it's a solution file that doesn't follow naming conventions.

Then there are other various little things which just add to the morning frustration; the use of "Sharepoint" instead of "SharePoint", "Engr" instead of "Engineering", inconsistent naming of image files, the existence of an App_Data directory (why is there an App_Data directory in this solution???????), referencing obsolete libraries (I could swear we discussed this)...

These little things all matter in the end in creating a sense of professionalism and coherence in the final product when DLLs and classes are named according to guidelines, file naming is consistent, and spelling (misspelled words in code annoy me to no end) is correct.

Man, these things just grate me so much.  I dunno, am I just OCD about my code?  This kind of stuff just drives me batty.  It literally freezes my brain until the issue is resolved.  Nobody seems to care much about the artistry and craftsmanship that goes into their code...that is until we need to do a customer or partner facing code review, then the only code they want to put up for review is mine...

*Sigh*

# Sunday, March 25, 2007

Automatic Properties in C# 3.0...Why?

Sunday, March 25, 2007 7:09:52 AM UTC

One of the new features in C# 3.0 makes absolutely no sense to me: automatic properties.

I have two issues with this approach. First, Wouldn't it make more sense to just have VS ask: "Do you want to generate a public property" when a user creates a field (like when VS detects the user adding an event handler)? From the description, it seems like the private field doesn't get generated until compile time, meaning the class writer is working against the public property as well. This seems odd since one of the main scenarios for using public properties and private fields is so that the class writer can manipulate the internal data representation without affecting the external interface. Scott himself mentions:

The benefit of this is that from a type-contract perspective, the class looks exactly like it did with our first (more verbose) implementation above. This means that -- unlike public fields -- I can in the future add validation logic within my property setter implementation without having to change any external component that references my class.

Which leads me to wonder why the developer would not just write the private field declaration and auto-generate the get/set methods instead, a much more logical approach to class design which leads to more legible code.

I can appreciate that it saves space in the code view by omitting otherwise "useless" lines, but don't code regions already accomplish the same thing?

Seems like a pretty useless feature to me that ultimately leads to more abstract code (less readable, in my opinion).

Aside from that, the code usage itself looks suprisingly similar to an abstract class.  From a design standpoint, if it's not clear what the validation logic or some other property masked logic is at the moment, if it's not clear how the internals of the class should function, wouldn't it make sense to program against an abstract class and put the actual logic into concrete classes at a later time when that logic is available?  It seems to me that what the automatic property is saying about the class is that: "I know what my external interface looks like, but I don't know what my internal representation and logic should be", which is one of the reasons we have abstract classes, right?  So that we can substitute the actual representation of the internal logic of the class at any time down the line while maintaining the external interface contract.  I dunno, just seems like a useless and otherwise bad feature to me.

One of the other main features, LINQ, already has me shuddering in anticipation of the nasty code that I'll inevitably have to face down the line.  Can you imagine the horror of code mixed with complex data queries in any application of significance?  For the same reasons that one would put a public property as a facade to a private field, it only makes sense to use a stored procedure, view, or table valued function as a facade to the underlying data (now I could see a case being made for it with a framework that allowed the queries to be loaded and cached dynamically at runtime from external files with a cache refresh callback on file change).

# Wednesday, March 21, 2007

Most Convoluted Licensing Model. Ever.

Wednesday, March 21, 2007 12:33:57 AM UTC

See if you can figure out how much your company's deployment of MOSS2007 will cost:

Mindblowingly convoluted.

# Monday, March 19, 2007

Taxes...ARGH!

Monday, March 19, 2007 6:01:58 PM UTC

So I filed my taxes pretty early this year (this is the first time I've ever owed taxes) using TurboTax.  At the end of the submission, I was given an option to pay with a credit card, direct debit, or check.  Since I don't want to carry around a several thousand dollar balance and since I didn't have the requisite funds in my checking account at the time, I had to settle for a check.

I took care of the state taxes first since it was a much smaller sum and I had enough in my checking account to cover it.  Intuitively, as you logged into the state tax payment site, it would pull up the information regarding the e-filed tax returns, show you how much you owed, and ask if you wanted to pay in full.

Fast forward 20 days.  After I transferred the funds from a savings account, I found out that to pay online (since TurboTax didn't show the payment options interface again), I needed an EFTPS account, which for some reason or another takes 15 days to process the account setup.  So after receiving the account information and activating my account over the phone, I proceeded to log onto the site and attempt to pay the balance owed on my 1040.

Unfortunately, this process came to a screeching halt once I reached the "Tax Type Selection" screen which presented the following 6 options:

  • Estimated 1040ES 
  • Balance due on Installment Agreement 
  • Pmt on an amended return 1040X 
  • Extension 
  • UnderReporter CP2000 
  • Audit Adjustment 

I knew for sure that the last two options were not applicable, but for the life of me, I couldn't figure out which of the other four I should be using.  The help on the page is completely useless, presenting the following information:

The payment due information, such as a Federal Tax Deposit for businesses or an Estimated Tax Payment for individuals. This is the type of tax you are paying. The options shown here are those available for the Tax Form you selected above.

And of course, selecting three of the other four options lead to the same exact form...To make it even more "user friendly", the forms were not populated with data that made sense.  Instead of pre-populating the amount with the amount I owed and the "Tax Period" date with "2006", the date entered is "2007".

eftps-stupid-options.gif

Being completely baffled by this system, I proceeded to call the EFTPS customer service line.  Surprisingly, I got through on a Saturday in no more than 1 or two rings.  Unfortunately, the service rep. that I got was definitely clueless and instead, referred me to the IRS offices.  Since the IRS offices are closed on the weekends, I had to postpone the whole ordeal until this morning.  The funny thing is, after speaking with the IRS rep., she admitted that she had never actually seen the system and couldn't help me pick an option (but she was nice).  Instead, she referred me back to EFTPS customer service.

Grrrr....

Fortunately, the woman I reached this time seemed to know my problem right off the bat (you know, as if she'd received like, a million calls about it already).  It turns out that the second option, "Balance due on Installment Agreement", is missing some text and should really read something like "Balance due on Installment Agreement or Current Tax Return".

What really baffles me is why my data wasn't just pulled up when I logged in.  It would only make sense that once I was authenticated through this whole ordeal of linking a funding account, obtaining a PIN, and activating my account over the phone, the software would be able to pull up my already submitted e-file with the amount owed with a text box asking me how much of the balance I wanted to pay and a button labled "Pay Now".

I've found that in software/UI development and working with other people, if you make a process (any process, software or human) intuitively easy, even people who would otherwise wince at the suggestion of doing something will accept it.  Imagine if everytime you shopped on Amazon and you wanted to add something to your cart, you had to click the item and it would take you to a screen where you had to enter the SKU from the previous page... 

One would think that the government would want to make it easy for citizens to pay their taxes.

# Friday, March 02, 2007

You Know It's A Slow Newsday When...

Friday, March 02, 2007 5:47:36 PM UTC

You know it's a slow newsday when the AP decides to run a story on how they didn't run stories on Paris Hilton.

AP: We ignored Paris Hilton

NEW YORK (AP) -- So you may have heard: Paris Hilton was ticketed the other day for driving with a suspended license. Not huge news, even by celebrity-gossip standards. Here at The Associated Press, we put out an initial item of some 300 words. But it actually meant more to us than that. It meant the end of our experimental blackout on news about Paris Hilton.

And of course, they celebrate by patting themselves for not reporting non-news and putting out a 1000+ word long article on how they ignored Paris Hilton.  All the while, they've been wasting all too much effort on reporting the Anna Nichole Smith story - thanks for keeping me in touch on that guys, not like there are more pressing concerns, right?  You know, like a stock market dip?  The war in Iraq?  The President's outrageous budget and tax cuts for the upper echelon?  Yeah, I didn't think that stuff was important either.

These guys deserve some sort of award...for stupidity.

# Friday, February 02, 2007

Most Annoying Error Ever.

Friday, February 02, 2007 3:06:12 PM UTC

So I've been working on this Windows Forms app for the past month and recently, it started developing this very odd error that occurs only after a successful build, just as I fire up the window.  Behold:

Super annoying error that makes no sense...

Argh!  What's worse is that it pops up not once, not twice, but three times each time I show the form with that super annoying Windows XP "Critical Stop" sound clip each time.  BUT it only happens if I launch the form from VS! These things...they infuriate me because it's virtually impossible to track down.  Throw me a bone, Microsoft, at least tell me what line it's on (which brings me to another point: NullReferenceException - at least when deployed in debug mode, can't you guys just tell me what reference was null?).

I mean, it would be easy if it said something like "Unable to cast object of type 'X' to type 'Y'" - that would make perfect sense, duh! - but this is just baffling.  It's not like I'm getting complier errors either.  I dunno...I just can't figure out why it would only throw up this modal dialog only when I launch the app (without debugging) from VS.

:: grumble :: grumble ::

# 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.

# Monday, October 30, 2006

Wowzers!

Monday, October 30, 2006 6:58:23 PM UTC

From an article in the Miami Herald:

Debra A. Reed voted with her boss on Wednesday at African-American Research Library and Cultural Center near Fort Lauderdale. Her vote went smoothly, but boss Gary Rudolf called her over to look at what was happening on his machine. He touched the screen for gubernatorial candidate Jim Davis, a Democrat, but the review screen repeatedly registered the Republican, Charlie Crist.

Um...wow?

And keep in mind, this is with comparatively light usage in early voting...

What's more interesting is another article I came across:

About 15,000 internal Diebold e-mail messages also found their way to the Internet. Some referred to software patches installed on Diebold machines days before elections. Others indicated that the Microsoft Access database used in Diebold's tabulation servers was not protected by passwords.

Access? AccessThat Access?

OMG! WTF!?

Incredulous!  Does Diebold hire some kiddy junior programmers or something?  As much of a Microsoft fanboy as I am, I would not trust Access as a database to store votes.  No, no, no, and NO.

# Thursday, October 26, 2006

The Most Absurd Piece of Pork Ever??

Thursday, October 26, 2006 2:06:52 PM UTC

Something about a 700 mile fence to keep out Mexican immigrants seems like wasteful pork to me.

President Bush signed a bill Thursday authorizing 700 miles of new fencing along the U.S.-Mexico border, hoping to give Republican candidates a pre-election platform for asserting they're tough on illegal immigration.

The measure Bush put into law Thursday before heading for campaign stops in Iowa and Michigan offers no money for the fence project covering one-third of the 2,100-mile border.

Wow.  You know, anouther country--another culture--tried this previously with a much more substantial wall and that didn't end so well.  True, we're not trying to keep out marauding conquerers or anything of the sort, but nonetheless, I think it's been proven time and again, that building these things is pretty much only a symbolic gesture at best; those that are determined will breach it somehow if they want to.  In this case, it's just a pretty useless waste of money.

It all seems like a huge waste of money and resources...I'm not really sure what this wall is supposed to do.  Can't people just dig under it?  Go around it?  Use a ladder or rope and climb over it?  If anything, it gives a false sense of security that may actually weaken border security exactly where the fence is.  I mean, at least without the fence, you can see what's happening on the other side.  Now this thing provides perfect cover for someone digging a hole...

Perhaps the thing that's bothered me the most is how this has turned into a black and white issue pivoting around what is essentially a uselss symbol:

Cornyn said he voted for the fence because he wanted to help demonstrate that Congress was serious about border security.

"The choice we were presented was: Are we going to vote to enhance border security, or against it?" Cornyn said. "I think that's how the vote was viewed."

Wow.  It never ceases to amaze me how bad it's getting.  Lawrence Lessig puts it best in a recent issue of Wired (albeit on a different topic, but his words still ring true):

A citizen was considered dependent when he was not free to act in the public good because his own well-being depended on a particular result.  "Nondependency" meant being able to choose what was right, without worrying about personal consequences--no agenda other than a democratic one.

All but few members of Congress devote the majority of their time to raising money for reelection.  Doing the job we've hired them to do--governing--takes a distant second place.  A good politician comes to understand precisely how much his campaign will gain or lose with each decision he makes.  Like rats in a science experiment learning which lever delivers food, politicians learn the complex dance that keeps them in office.

Rats indeed!

How about growing a pair of cojones and actually explain the issues to your constituency and talking about why the fence is a stupid idea and come up with some better solutions?  I guess it's too much to ask of many of our political leaders to come up with real solutions these days.

# Wednesday, September 13, 2006

Grow Up...

Wednesday, September 13, 2006 4:13:31 PM UTC

Warning: strong language ahead...

So I'm attending this webcast on Microsoft Project Server 2007 Beta 2 Technical Refresh and I can't believe the stupid motherfuckers on the call who:

  • Can't mute their god-damned phones.
  • Can't leave the screen alone so the presenter can continue.
  • Insist on asking questions on the document instead of in chat.
  • Start drawing on the document...

Motherfuckers...you'd think we'd be a little better behaved than high school kids...Man, we're all professionals and most importantly, we're all adults man!  WTF?

And then, with regards to the install procedure for the Technical Refresh:

"Yes, I know this is painful, but due to time and resource constraints, this is the best we could come up with."

Garrrrrrrrrgh!

And then the kicker: you can't have SharePoint Beta 2 TR and Project Server Beta 2 TR on the same machine...You MUST install SharePoint Beta 2 TR on a seperate server first and then install Project Server Beta 2 and TR on a second server.

While the reasoning behind using the patching procedure is understandable, what is not so clear is why they do not make both types of upgrades (patch and clean/standalone) available so that some people can test the patching if they are interested in that aspect and that others (the majority) can just test the functionality of Project Server (and not have to worry about the complexity of applying the patch).  The complexity of the TR patch itself will make it likely that many will skip over the TR beta testing and simply continue to use the Beta 2 version.

Even more annoying, no further patches will be provided (no Release Candidates) until RTM so that the bugs in TR will persist until RTM.  I suspect this approach will backfire on the Project team as most people will end up simply using Beta 2 without applying the TR patch.

"B-Team" indeed...

# Tuesday, September 12, 2006

Talk About Ridiculous...

Tuesday, September 12, 2006 8:19:56 PM UTC

So it looks like the EU is trying to pick Microsoft's pocket again.  The EU is up in fits about Microsoft's inclusion of security features such as Windows Firewall and warns Microsoft that inclusion of such features would bring further fines against it in the future.

Regarding the new security features in Vista, Jonathon Todd, an EU spokesman said:

"Less diversity and innovation would ultimately harm consumers through reduced choice and higher security risks."

What?  Wait, so having an OS that's, by default, not secured at all, somehow helps consumers?  It's entirely contradictory and the EU has lost all credibility with this move.  The inclusion of default security measures is a gesture to help improve the user experience and make sure that users aren't exposed.  If such features were not included, users would likely not even be aware of the need for security related software until it's too late.

It's not as if Microsoft is blocking others from installing security related software on Vista, it's simply providing some simple functionality out of the box so that there is always protection available to the consumer, whether he or she is aware of the need for such software.

And I'm sure if Microsoft didn't include default security software, the EU would have a different stance and claim Microsoft wasn't protecting consumers by providing a stop-gap solution until third party security solutions were installed.

What a debacle...

# Wednesday, September 06, 2006

The Woes of Beta Software

Wednesday, September 06, 2006 9:51:44 PM UTC

There's always a "cool-factor" invovled with working with beta software and trying the latest products out before anyone else.  It's definitely quite exciting to see some of the new features of Office 2007 in action and actually dig into Project Server 2007 and SharePoint Services 3.0.

At the same time, it's also incredibly frustrating, especially if you're the one that has to set up the beta environment :-S.

I've been hunched over my PC and laptop over the last 4-5 days trying to get Project Server 2007 to install on a VM image and it has been downright painful.  From the dreaded "Thread was being aborted" error to the  "Object reference not set to an instance of an object.." error.  It has been slow and painful as each failed install took tons of time and there have been few answers on how to deal with these errors.

With regards to the first type of error, you may be able to solve it by following the warning in the documentation (starting the SharePoint Services Web Application service).  In my case, I believe the process was actually timing out on me.  Initially, I was trying to do the install over remote desktop from my laptop to my desktop.  The documented fix did nothing for me after several tries.  After switching to the desktop, I was able to work around this.

With regards to the second error, well, I'm still working on that, but it seems that to provision the PWA website, an Active Directory domain account is necessary.  Don't ask my why as I have no clue why this should/would be the case.  Apparently, it's fixed in Beta 2 Technical Refresh.

It was also fun coming across the superficial SQL Server collation error reported by SharePoint Services 3.0.  I was on the brink of uninstalling and reinstalling SQL Server before I stumbled on the Microsoft Communities thread.

All in all, this has been brutal weekend.  I'm simply drained from having to deal with this.

# Friday, September 01, 2006

Of Trawling and Tech Jobs These Days...

Friday, September 01, 2006 5:05:06 AM UTC

I stumbled on a post by Don Demask on the subject of tech/IT recruiter etiquette. Or rather, I should say, the lack thereof.  I've touched on a similar topic in the past (in fact, one of my first posts on this blog!) after I was simply driven mad by rude headhunters (one that kept asking me to doctor my resume) and many that implicitly discriminated by age by asking my graduation date (this is a very dirty tactic that they use to figure out where to bracket you in terms of rate, salary, and position, irregardless of your actual skill and knowledge level).

Since I graduated from Rutgers in 2003, I’ve already worked for six companies (that’s including my current employer, Zorch Software). Of those six, three of them were acquired through recruiters and there were many other times where I’d come across these sometimes very curt “professionals” as I was searching for better opportunities.

Of the many, many recruiters that I’ve come across, I would have to say that only one sticks out in my mind as being truly a professional: a Mr. Seber, who helped me obtain my first position out of college. He offered me great career advice, guidance on proper behavior on the client site, information regarding education, and was always open to listen to me bitch and moan from time to time.

These days, I’ll drop by and listen to his band play once in a while and we are still in contact.

While there have been a few other very courteous and polite recruiters that I’ve come across, the vast majority of them are simply rude, unprofessional, and lazy. One of the laziest and most annoying tactics that this type of recruiters use is to simply spam email lists with random positions; as Don calls it, “trawling” for potential respondents.

“Hot .Net Position in Chicago!”

No thanks!

I’ve seen worse though as I’ve even gotten emails that didn’t completely populate the formatting fields in the subject line and emails with bountiful spelling mistakes (what a terrible professional statement that makes).

Perhaps what annoyed me the most is that many recruiters simply didn’t bother to read my resume. In order to cut down on responses from jobs offering salaries below my desired range, I explicitly stated, in bold, the minimum salary and rate I would consider. And yet, I’d still get calls and emails about positions obviously outside of the range. I added a location restriction so that recruiters wouldn’t call me about positions in PA or Chicago or Alaska (yes, I once had a call about a position in Alaska, I shit you not). And yet, I’d still get calls and emails for positions all over the country. I added explicit descriptions of the types of positions that I was interested in. And yet, as my resume would pop up on the keyword ".Net", I was contacted regarding any position that required .Net.

After a while, it was clear that I couldn’t leave my cell phone number in the resume as I was getting calls on client sites even after explicitly stating that the cell phone was for after hours contact only. Beyond that, I finally wised up to the spamming by recruiters that didn’t read my resume by using a “code word” and adding a simple request on the last line of my email: “Please add the text ‘DICEREF’ anywhere in your email message to bypass my spam filter; thank you for taking the time to read my resume!”

In the end, I can’t help but feel like…a piece of meat to these people. The sad thing is that, invariably, someone will respond to these low-lifes, which simply acts to encourage the continued practice of trawling for candidates.

It’s a lose-lose-lose situation for the recruiter, the employer, and the consultant. The recruiter loses potential responses from top candidates by not putting in the effort to sort through the resumes and use more refined searches. The employer obviously loses out because many top candidates simply will not put up with this type of recruiting (I truly believe only desperate developers respond to these emails). And consultants lose out as--who knows--the employer on the other end may be the perfect match.

So what can be done to fix the system? One idea I had early on was to implement a recruiter rating system much like Amazon z-shops and eBay have seller ratings so that potential candidates can see how other candidates were treated and perhaps even create a personal blacklist of recruiters. If you continually get spammed by a particular headhunter, you can enter a negative review and add them to your blacklist. The number of people who blacklisted the recruiters would be visible on the job posting and sortable in a recruiter listing so that candidates could simply find the cream of the crop recruiters and reward them for their practices. Not only that, you would be able to put a threshold where if a recruiter has a certain number of blacklist entries, they won’t even be able to see your profile in searches.

While such a system would invariably cause an initial revenue drop for Dice due to recruiters boycotting them after being blacklisted too many times (good riddance!), I think it would ultimately lead to more quality job posts, more thoughtful recruiters (even if superficially), and happier candidates.  As it is, to me at least, craigslist has become perhaps an even better way to connect directly with employers (it's how I got my job at MediaWhiz).  Dice would be wise to act on this proactively and try to help candidates connect with the quality recruiters out there.

So what do you think? Any stories to share?

# Tuesday, August 29, 2006

It's Not Facism When We Do It!

Tuesday, August 29, 2006 2:58:14 AM UTC

There's an interesting thread on Fark about one Raed Jarrar and his experience at JFK airport.

To summarize, Mr. Jarrar had been wearing a t-shirt with the text "we will not be silent" in both Arabic and English.

What followed is perhaps every immigrant or non-anglo's worst nightmare.

It's an amazing account that must be read.  It raises the obvious question, "What the fuck is going on in this country?"

I don't know.  I find it quite scary as an non-anglo American.  While I'm from Taiwan, I wonder how I could be treated by anglo-American's should a war break out with China over Taiwan.  It's a scary thing.  I wonder how my wife
(of Polish-Italian descent) would be treated, sight unseen, as she bears my last name of Chen.  Would her appointments be declined?  Would people change tone once they saw her face to face?  How would people view me?  "Hey, I'm on your side!  Go Taiwan!  Go USA!"  I can only guess what the majority of US citizens of Middle Eastern descent, Muslim or not, are going through right now...

It's depressing in a way because, as Mr. Jarrar states, the very reason so many immigrants have come to call America home is because of the freedoms afforded to us and the Constitutional rights that America instills upon her citizens.

Raed asked of his interrogators:

"Why do you want me to take off my t-shirt? Isn't it my constitutional right to express myself in this way?" The second man in a greenish suit interfered and said "people here in the US don't understand these things about constitutional rights". So I answered him "I live in the US, and I understand it is my right to wear this t-shirt".

Zefrank sums it up best in this video:

As long as a small group of people can inflict mass panic across a large population, the tactic itself will remain viable.  One way to deal a blow to the effectiveness of terrorism is to deal with the terror itself.

The stupidity of the whole situation cannot be escaped: it's a freakin' t-shirt and security let him board the plane with the t-shirt anyways!

As we continue our fight to bring our style of democracy to the Middle East, ironically, we continue to see our rights and freedoms eroded.  Quite a quandary.  It's intriguing to think whether this is the brilliance of Osama in action.  Has he calculated this type of response in his attacks?  Has he forced the West into an anglo-Christian vs. Muslim battle (or at least the appearance of one) so that he might get more support and strength?  Is this how he wants us to react: to create another generation of dis-illusioned and malcontent Muslim youth to continue his Holy War?

While I do believe that Mr. Jarrar was intentionally trying to be provacative, I believe that it is his right to express himself according to the rights afforded to him by the Constitution.  Obviously, they did not deem him to be a threat to security as they let him on the plane after changing his shirt, but I can't help but feel how humiliating it must have been for him to have his rights stripped of him like that.  It would be one thing to request an extra air marshal to keep an eye on him...it's an entirely different story to confront him like this and violate his rights.

There are proponents of profiling that believe that this is the type of action that we need to take to increase the efficiency of our airport security and for the convenience other passengers.  But have we forgotten Timothy McVeigh?  Have we fogotten that white American citizens, working for the US Government, can be had for the right price?  In the end profiling would simply be a "feel-good" security measure that would in fact, decrease the security in our airports.  Even Israelis can find Arabs sympathetic of their cause and convince them (or perhaps force them) to spy on their country men for Israel.  What makes us think that the same couldn't happen with anglo-American's?

I really don't know where I'm going with this, so I'll offer some choice quotes from the Fark thread:

"ingvar" suggests:

If i was there, being an average-looking white (non-terrorist'ish) dude, i'd have stood up and said 'hey man, lets just swap shirts. they won't care if an average-loking (non-terrorist'ish) white dude is wearing an Arab Hate-Spech shirt, it'll just be like "fashion" to these moron's, so lets just swap shirts' .. and i'd let him wear my "Free Winona" or "OBEY (André)", or maybe "Nuke Gay Whales For Jesus" t-shirts

"Scandalous" raises excellent points against the "but it's a private jet" argument:

I cannot believe that I am arguing in support of Raed, but the "privately-owned jet" argument is not very persuasive for the following reasons:

1) Purchase of a ticket forms an express written contract, where the airline gets paid and in return promises to deliver the bearer of the ticket from place X to place Y, subject to certain regulations, and barring unforeseen emergency.

2) There was no unforeseen emergency other than that created by the airline in connection with Raed's shirt.

3) A statute, an airport rule, or an airline regulation are all examples of "certain regulations" in (1) above. The security personnel could not identify a regulation that could bar specific performance of the contract that the airline entered into. Hence, I am not convinced that such a regulation exists. I am therefore compelled to side with Raed in insisting that the airline carry out their side of the bargain.

"Mayhem_King" comments

He is misapplying Schenck v. United States. You can in fact wear a t-shirt that says, "I am a bank robber and going to a bank."

Clear and present danger was replaced with imminent lawless action.

If wearing a shirt with Arabic script is determined to create a lawless action, to be fighting words, or racially offensive, then a policy should be created and applied to everyone. In this case, an ad-hoc policy was created and applied only to him. That's the problem that I have here. If it is truly a problem to wear a shirt that has Arabic script, then add it to the growing list of policies. To be detained by Federal law enforcement until you change your shirt pretty much is a violation of free speach. That ad-hoc policy wasn't being enforced by a private company, it was being enforced by the Government.

mrvikings insistence that it never happened is weird. You can't prove that it happened so therefore, it never happened? Isn't that argumentum ad ignorantiam?

I think it is important that as Americans, we stand up for our civil rights. Standing up for our rights isn't being liberal, standing up for our rights and not letting our enemies get the better of us is extremely conservative.

# Tuesday, August 22, 2006

Database Implementation Woes

Tuesday, August 22, 2006 2:34:27 PM UTC

My wife says I'm slightly OCD.  Myself?  I acknowledge that I'm somewhat picky when it comes to certain things.  One of these is database implementation.  I'm not sure how I started down this path or how I became such a freak, but at some point, I resolved to write all of my DDL by hand (I do the same for HTML, CSS, and JavaScript, ASP.Net (controls too; no drag and drop here!)).  I started using only Enterprise Manager myself, but eventually ended up almost exclusively using Query Analyzer.  I find it weird as I'm not a command line freak by any means, but I absolutely insist on writing every line of DDL myself.

That's right, none of this create in a GUI and export the script deal; all hand written SQL from the start for me.

Am I being elitist in this manner, then?  I don't think so.  There are clear advantages to this approach as it allows for fine grained table structure tuning and a certain level of visibility.  If I design a database table with certain constraints, it's easy to see those constraints laid out in the code but not so easy to see them in a GUI where those same constraints may be hidden behind dropdown boxes and multiple forms.  Another big advantage is inline comments to convey reasons why a table has a certain structure or how a relationship works or some quirky design.  It's good to have the comments inline instead of in a separate document so one doesn't have to keep referencing two documents.

Sidenote: I think this is why I have a dislike for many solutions that leave a lot of functionality hidden behind complex GUIs like BizTalk, Reporting Services, and DTS.  As cool as BizTalk is, I hated working with it because it involved so much damned clicking, scrolling, and mouse movement in general to get anything done.

Being as fussy as I am, it kind of riles me up when I'm handed generated DDL scripts as 1) the formatting is never satisfactory and it's hard to read due to the added tokens inserted by SQL Server Enterprise Manager, 2) there are no inline comments so I can't tell the designer's intentions and makes it difficult to understand wacky design decisions, 3) there is no default data generated.

For the purposes of testing in a team environment, it helps tremendously to have hand written DDL scripts that create the necessary data objects along with the proper permissions and insertion of test data.  It's incredibly infuriating (yes, infuriating, I sit here and mumble curse words and slap my forehead in disbelief) when I receive exported DDL.  For all intents and purposes, it seems...unprofessional and, to borrow a term from gaming lexicon, noobish.  It causes me psychological anguish to deal with exported DDL.  Gah!

Okay, I guess enough moaning :-S

# 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!

# Thursday, August 03, 2006

Taking a Stand for Mother Nature

Thursday, August 03, 2006 1:18:16 PM UTC

Despite all those Discovery channel shows, sharks are still one of the most misunderstood animals in the oceans.  They are magnificent creatures who's ferocity, for the most part, is exaggerated due to the media frenzy that occurs with each shark attack, which typically leads to the killing of the suspect shark at human hands.  Quite sad when such a creature is simply living within Nature's guidelines.

Perhaps what's even more disturbing is how the Chinese and the Japanese systematically hunt, de-fin, and then discard live sharks.  I once saw a video of this when I was in high school (you can find a similar PSA-type video here) and I will never forget the image of the blood red waters around the vessel, the writhing sharks, still alive and bleeding after the dorsal fin was cut off discarded like garbage into the ocean.

Absolutely sickening...

So it's encouraging to read that Yao Ming, a prominent role model to Chinese youth and Chinese society in general, has sworn off shark's fin soup and has apparently picked up a cause to help promote wildlife protection.  Hopefully, this leads to a decrease in the incredibly grissly, wasteful, and disgusting practice of finning sharks.

# Thursday, July 06, 2006

Big Changes Around the Corner

Thursday, July 06, 2006 6:59:39 PM UTC

C# 2.0 has barely been with us and already, the 3.0 spec is shaping up.  While the change from 1.0 to 2.0 was dramatic in the way that it simplified what used to be quite laborious tasks in C#, the change to 3.0 is perhaps too bold of a jump, bringing the C# language close to the territory usually reserved to academia and research divisions.

Perhaps at the heart of this is the introduction of LINQ (Language INtegrated Query) to the C# specification.  Several changes and additions to the C# language were necessary to make this possible and make it "user friendly".  One of these is the introduction of Lambda Expressions to the C# language, giving C# a feel closer to that of....JavaScript.  Yup, good ol' JavaScript (one of my favorate languages).

Daniel Cazzulino touches upon some of the interesting "side effects" of this change in the language while Abhinaba believes that while the new language features are certainly welcome and useful to a set of users, for most, it will only add to the "surface area" of the C# language and frustrate/confuse users.

C# has originally developed from C++ /Java and is (was :^) ) a strongly typed object-oriented language. The new features being introduced like closure, continuation (yes, yes very limited continuation) in C#2.0 and now type inference, lambda expressions are de-generating the language. Even though there are people go gaga about continuation and lexical closures these are fundamentally functional language features and should be left to that. Introduction of bits and pieces of functional language features are not going to add value to C# and at the same time the surface area of C# is growing beyond what most developer can grasp.

I tend to agree with this view.  Having spent most of my career as a consultant and dealing with many developers who did not come from a math, engineering, or computer science background, I can say with 50.01% accuracy that 87.96% of .Net developers will a) be confused and befuddled by the new language features, b) never use the features and never even know that they are there, or c) change professions :P

Okay, maybe option c is more of a pipe dream.  But regardless, the surface area of C# is becoming quite large and perhaps even a bit, how shall I put it, unwieldy?  Whereas developers used to have disagreements over implementation and architecture details, will we now see disagreement over language feature usage and constructs?  One thing is for sure, I'm certain that a lot of developers will be left in the dust.

Most of the mid-career Microsoft developers I've met got their start doing VB6 and VBScript with ASP.  In the transition to .Net, I've discovered that many have not really transitioned so much as adapted; kind of like they're still writing VBScript...except it's called VB.Net now.  This isn't the territory of VB developers only, however; I've met many C# developers who just have no clue and continue to do silly things like concatenating huge (I mean HUGE) strings.

Well, in any case, enough ranting I guess.  If you're interested, take a look at the language specs over at MSDN (already got 'em printed and stapled).

# 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).

# Friday, June 23, 2006

So, Apparently, Teamwork is Counterproductive...

Friday, June 23, 2006 2:34:38 PM UTC

Teamwork is not easy.  It never is.  Whether it's basketball, football, sales, construction, or software, it's difficult to instill a sense of team and ensure that everyone operates as a member of a team.

There are individual egos to deal with, different levels of skill to integrate, different talents that have to be recognized in the context of the team, and there is the ever present problem of communication.

Lately, I've been disappointed in the level of teamwork I've been witnessing on my project (on a scale of 1-10, it'd be around a 2).  Sure we have our weekly call in and discussion and random emails throughout the week.  But is that enough to bring a large system, with multiple components together in a short timeframe?

I recently suggested to my teammates that we've been lacking the team spirit and that perhaps it's a good idea for those that will be interfacing with my component to at least install and test against the actual component that I wrote.  The following is my response to the response that I received, which claimed that such efforts at this time are "counterproductive" (names have been changed):

"counterproductive"?

Hmm...here I thought we were building interacting pieces ;-)

I don't know, maybe it's just me, but I feel like one person can only take code so far; working in isolation with little feedback leads to code with obvious bad practices and holes that are hard to spot once I've gotten a concept in my head. Not to mention that there will be tons of duplicate work efforts (as I discovered from Brian the other night, the database work I've been doing is also relevant for Don and Sam). I'm 100% certain that there will be bugs and inefficiencies that will only be turned up once you and Sam start to interface with it. Not only in my code, but also in your codebases as well. At least from my perspective, I'd like to find these bugs and hammer them out. To hope for the best when we plug it all together at the last moment is a bad way of working, IMO. I would even propose that the Friday session every week be turned into a full integration and end-to-end test session to get everyone to integrate and test pieces with a seperate Monday session to cover what the goals are for the week and catch-up.

And again, my piece is here to service WildCat and RazorBack...how can I be sure that it does this in an easy to use and well designed fashion if I'm the only one using it? It is certainly easy to use and well designed *to me*, but are there obvious mistakes in the design? Are the major flaws in the code that need to be fixed? Who knows? Everything looks rosy *to me*. End-to-end testing has not been done or setup and I feel that there are sure to be issues that will only be uncovered with end-to-end testing. I know there are flaws and I want to fix them, but many of the flaws are not so apparent to my eyes but would easily be exposed by end-to-end testing and WildCat and RazorBack actually integrating with the pieces.

I understand that we each have responsibilities. But isn't part of my responsibility to ensure that my piece properly services WildCat and RazorBack? Alternatively, isn't part of WildCat's responsibility to ensure that it can tell EastCastle to do what it wants?

I feel like the way we're working is much like a football team which never practices as a unit, each player only works on individual drills. Come game day, now all of a sudden the team is expected to play as a unit. How can the coach predict whether the team will work well if he never sees them practice as a unit? This is unrealistic even for the most skilled professional football players (that's what training camp and full team non-contact drills are for)...how can it be realistic for us? I dunno...building large systems is no less a team game than basketball or football or crew ;-) : the team that trains together wins together. Expecting pieces to magically work together after weeks or months of development in silos is dangerous and unrealistic to me.

Teamwork is difficult for any group of guys and gals.  Doubly so when the team is dispersed.  But is it "counterproductive" to try to build upon a team effort and really have everyone write software as a team?  Is it really an idealistic view of how software should be written that I'll discard as I age and become more cynical?  Bear in mind that I'm not debating "Aristocracy, Democracy, and System Design" as Fred Brooks does in Chapter 4 of The Mythical Man Month, as I strongly believe in "conceptual integrity" as a basis for simplifying and clarifying a framework or codebase.  But rather, what I'm questioning is the team working completely independently with little communication and actual testing of interfaces.

I'll admit that I myself haven't been the best of team players, but, none-the-less, all I was seeking was a minimum amount of teamwork: integrating pieces once in a while in "practice" as opposed to integrating in the few minutes leading up to game time and hoping for the best, you know?

# 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.

# Wednesday, May 03, 2006

Enterprise Library 2.0 Logging Quirks

Wednesday, May 03, 2006 10:35:51 PM UTC

So I've been working with Enterprise Library 2.0 (EL2) Logging Application Block recently and I've come across some quirks that are puzzling me.

First, I've been using log4net for most of my logging in the past.  Recently, I've taken a look at NLog due to the fact that log4net is currently under "incubation" and has been inactive for a loooong time.  The developers are still active as shown by the activity in the the mailing lists, but otherwise, the codebase has been kinda sitting there for quite some time (until recently) with no date on when it'll exit incubation.

Anyways, after checking out some performance numbers on EL2 vs. log4net, I was sold.  Easy configuration via the configuration GUI, easy to understand, tons of documentation, and it's first party Microsoft (easy to get team members and managers to buy into it).

So here I am working with it today and setting up my test code to automatically regenerate the database before each run and my application code crashes when the logging fails (exception).  I had mis-typed the path for one of my SQL files and the database wasn't created for the logging block, but still, I don't think that the right thing for EL2 to do is to allow that logging error to bubble up to the application code.  With log4net, if the connection to the log database is broken, the AdoNetAppender will simply fail but not cause the rest of the application code to fail. [Update: can't reproduce it, but I know this is what cause the error since as soon as the database was there, it was happy, but it's running fine now even without a database. Ugh, totally puzzling...]

Weird design choice.  I guess it's useful to know that your logging block is failing.  But what the heck, isn't that why there are multiple listeners so that if one fails, you have a fallback (i.e. log all critical errors to database, event log, and flat file)?

Secondly, as I'm looking at the database scripts for creating the procedures and database tables for logging included with the EL2 source code, I'm puzzled by the design choice.

Take a look at the code for adding a category:

First of all, why are the categories stored in a seperate table?  My guess is that the designers wanted to save some space in the log entry row by taking out the category from the log entry???  I can't seem to come up with another good reason for it since it's not like the categories in the category table are associated with an application identifier (and they must all be unique category names).  Profiler tells me that it requires at least 14 reads to write one entry into the log.

Not only that, the code to execute adding the category and adding the log entry are two seperate calls from the client since the WriteLog procedure doesn't receive category information.  I'm going to go out on a limb and say that the only reason that EL2 logging is able to outperform log4net is due to .Net 2.0 related optimizations.

So I think it's back to log4net for me.  I don't know how the rest of the team will take it, but it seems to be a better choice.

# Wednesday, April 26, 2006

The Little Things that Count

Wednesday, April 26, 2006 1:35:28 AM UTC

Maybe it's just me, but there are some little things that bug me to no end (my wife thinks I'm slightly OCD).

Lately, it's bad spelling and grammar.

I don’t know, I simply don’t think it’s acceptable in an age when a proper spell check is only a button click away, why people have to put up with misspelled words in professional documents and email exchanges.

It bothers me so much that once I see an email or document that has terrible grammar, misspelling, or punctuation, I am no longer able to mentally process the document as my mind shifts to pondering what could be so pressing that the person that composed this document before me couldn’t hit the spell check button.  Most likely, the author simply doesn’t care?  Such documents simply give the impression of a rushed reply with no concern for professionalism, craftsmanship, or interest.

Of course, grammar is probably the hardest aspect of written English, so I tend to not mind grammar errors as much unless they are obvious ones (use of “a” versus “an”, for example).

What’s worse is that I get emails like this all the time from recruiters regarding positions.  Not only from those who speak English as a second language (I can give some slack there as my mom has terrible spoken and written English), but it’s even common from native English speakers.

I don’t understand; in such a scenario, wouldn’t you want to be more professional in mannerisms and communications to assure the possible candidate of the professionalism of your organization?  I know I would.

As a side note, I'm thoroughly impressed by the written English of many Europeans who do not speak English as a first language, like SNE :-)

# Tuesday, April 18, 2006

Still Not There Yet...

Tuesday, April 18, 2006 12:47:10 PM UTC

I don't understand the fascination with using Word documents for internal development specs.

For one thing, a Word document is very inefficient when it comes to conveying matters of code and design.  No syntax highlighting.  It constantly warns me that I'm misspelling my words.  It wants to adjust my indentation and paragraphs for me when I put formatted code into a document.

Even more annoying is the fact that a Word document is essentially a snapshot of what was designed, at some point in time.  Past tense.  Unfortunately, designs change and details change as developers start to dig into the software at all levels; no one person can forsee all of the challenges in designing any medium-large software product; no one person can predict all of the different, possibly better implementations and architecture.  New changes mean I get a new document in my inbox.

Using Word documents, it becomes incredibly tedious to now maintain this constant state of change.  Everyone on the team has a copy.  Yet, in order to maintain any sense of order, only one person can be the source of all of the change.  Useless.  Inefficient.  Terrible.

There's a reason why typewriters were replaced by word processors.

Enter Trac.  It does everything right that Word does wrong for documenting software specifications.  The Wiki system links text to existing tickets, source code files, and other documents without effort.  It's infinitely malleable and entirely flexible; in a sense, it's "live".  It highlights code and allows full flexibility in formatting the code.  It offers a view into your source repository.  It has a system for creating milestones and linking tickets to those milestones.  You work on documenting your part in your Wiki page, I'll document mine in my Wiki page.  All the ideas, concepts, and thoughts now sit in a central repository that is constantly evolving as the project evolves.

In short, Trac is damn near the perfect software project management application and its usefulness spans the entire lifecycle of the project, from initial design to maintenance to continuing development.

Unfortunately, I'm the only one on my team using it :-S I don't get it.  What's the fascination with Word when an infinitely better solution is available?  I set it up and demonstrated it with the hopes that these tech-heads here would dig it and see the awesome potential it has for transforming how the development process proceeds.  And yet, here I sit, baffled by why such a tool is laid to the by-ways for Word.

I guess I'm still not there yet...

# 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

# Tuesday, February 21, 2006

Random DevTools Entry: #005

Tuesday, February 21, 2006 9:25:12 PM UTC

I'm feeling a mighty JavaScript kick lately.

What's interesting is that the more C# evolves, the more it starts to resemble JavaScript.  What with anonymous methods, type inference (it even uses var), and the LINQ syntax, my JavaScript juices are flowing.

There are a few things that I never wrapped up with my JavaScript development experience.  I think the most glaring one is JavaScript inheritance.  Some would argue that JavaScript inheritance is purely fluff (see second comment); it's not needed and JavaScript is probably more powerful for not adhering to OOP principles.

I dunno...it seems like one of those things that would be useful for building certain structures and UI elements.

I've been aware of Douglas Crockford's implementations for quite a while now.  I came across it when I first picked up on JSON about a year and a half ago, but I never particularly liked it since it "looked weird".  So today, as I was looking around to see if any alternatives have risen due to the recently revived JavaScript development, I came across a posting on SitePoint.  I rather like the simplicity of it all and it looks like it works, so I'll have to keep that in mind if I need to use it.

As I'm also thinking about writing a major web based rich UI application in the next few months, I've also been looking at some of the JavaScript libraries, toolkits, and frameworks that are out there.  I came across the Dojo Toolkit today and it looks fairly interesting.  I especially like the bind() syntax.  However, the toolkit does seem somewhat incomplete at the moment...I'll have to take a look at it in more detail and see if it has the features I need.  It's currently lacking any demos, which makes it hard to evaluate without a deep dive.

This brings up another interesting issue that has annoyed me with the proliferation of all of these JavaScript and AJAX libraries: instead of pooling talent and building The Best Possible Solution, we have teams going off left and right building 15 different impelementations of the same thing with 15 different design principles and 15 different philosophies.  Now this isn't necessarily a bad thing, as there are times when you would prefer a lighter implementation to a heavier one, for example, but it would make a hell of a lot of sense to have at least a common convention in terms of naming, package layout, and what not.  Ideally, what I'd like to see is some of these development tracks merge so that we may have more complete frameworks/libraries/toolkits.  Have one mega package that comes in mega-lite flavor, you know? 

With so many libraries/frameworks floating around, it makes it difficult to find the exact set that does what you need and if you do, you need to start worrying about whether they'll play nice.

I'll stop, because I'm just ranting now :-)

# Sunday, February 05, 2006

The Problem with Ordinary

Sunday, February 05, 2006 8:44:03 PM UTC

I came across a very good article by Ian Thomsen on SI.com discussing Shawn Marion's "frustration" towards his role in Phoenix.

Marion is averaging career-highs of 21.4 points and 11.9 rebounds, well on his way to a fifth-straight year of producing at least 19 and 9. Those are enormous numbers for a small forward, yet Marion believes he could do more if asked.

"You can improve anything you want during the summer, but if you don't get to work on it during a game, it just goes away and you go back to doing whatever it is they want you to do,'' says Marion, 27. "That's one thing I don't like. It's frustrating for me because I can do so many other things on the floor and I don't get the opportunity. I'm limited to doing certain things, and that sucks.''

Context must be introduced before this train of thought gets carried away. Is Marion demanding a greater role in the Suns' offense? No. "We're in winning situation,'' says Marion. "You don't get bleep in this league unless you win; I learned that a long time ago. I've been around people who say it's all about them, but they're wrong -- it's a team thing.''

What he's trying to say is that he isn't as impressed with his numbers as everybody else seems to be. He knows they could be gaudier.

"When I'm in the summer, playing pickup and working on my game, I'm working on pick-and-roll, handling the ball, doing all that kind of stuff -- but I don't do that here and it just really goes away,'' he says. "I do everything in the summer. I play '1' [point guard] through '5' [center]. I'm a pretty good passer, but I don't get the assists because I don't have the ball.''

I think I'm in the same boat with Marion, on some level.  Recently, I've just been so frustrated by the type of work that I'm doing at my company.  But it's not just a temporary issue; I just don't see that the company is dynamic and innovative enough to really land the type of contracts that I want to work on.  I've been fortunate that the last 1/2 of the previous year, we were able to have quite a bit of freedom in terms of execution, but if the current project I'm on is any indication, then it's not a good sign.

Understand, that like Marion, it's not really an issue of selfishness; of course I want to help my managers, my sales guys, and my company succeed.  Rather it's the fact that I work hard to become good at what I do.  I'm continually improving my software engineering IQ by consuming information through books, weblogs, magazines, and webcasts.  I make a real effort to refine my technique and learn new technologies.  Like Marion, I'm willing to take a hit for the team (I'm travelling to CT on a weekly basis at the moment, which isn't too pleasant, and doing some grunt work).  But it's frustrating because I know I could do so much more in the right environment. 

It's frustrating because I could help the company even more if the leadership could create/find the right opportunities. It's frustrating because I work on understanding design principles, software engineering practices, new tools, and other aspects of building applications/software, but all of that goes to naught due to the nature of the work I do (heavy in volume, yet light on the factors that interest me).  It's frustrating because I always want to take a step forward in terms of professional development; I don't want to stagnate.

Bah!  Just more bitching and moaning career-wise I guess.

# 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.

# Saturday, December 03, 2005

Flash = Teh Suck

Saturday, December 03, 2005 6:27:34 PM UTC

I can't be the only one that think's Flash based websites suck can I?

I've never understood the appeal of Flash as a framework for structuring content to be honest.  I can understand using it for a few animated portions like a headlines type of object, but as a method of structuring content, it's simply annoying.

The worst are the Flash based ads that popup in the middle of what you're actually trying to read.  And to make it even worse, they invariably have annoying sounds, too.  Grrr...I really want to slap some of these site designers sometimes.

Yeah, a lot of these sites look great and have neat-o effects, but WTF, it's a waste of my time wating for this crap to download and then it annoys the hell out of me.  Oh, and what if I want to link to a particular piece of content?  Out of luck.

So why I am I so annoyed?  I was on the Acura website looking at the TSX.  But it's annoying as hell.  Not even an HTML option?  When I click the "Launch Acura.com" text, it opens another window.  WTF?  Seriously, whoever designed this needs to be smacked for such stupidity.  Once the window opens up, you start to notice the huge amount of laaaag when moving your cursor across the links at the top.  Wow, I'm just moving my freaking mouse across the top bar.  And it's not like it's some awesome OMGWTFBBQ!!?1?! special effects...the background just turns red ::incredulous::.  Not only that, I peek at my CPU utilization: 100% (I have a 2.4GHz Pentium 4 + 1.2GB Fast DDR RAM (Corsair XMS (Yes, this is excessive usage of nested parens (Blame SNE)))).  Goodness gracious, it seems like they expect all their users to have dual core Opterons with 4GB of RAM and an Nvidia 7800GT to be able to view their site.

Once I get onto the TSX subsection, I get more the same; my CPU utilization is insanely high for some stupid ass leaf falling effects.  I just want to look at pictures of the car, damn it.  Stop torturing me!

Okay, I just needed to vent and get that off my chest.  Seriously, I don't understand the concept of using Flash to structure content.  It's just plain stupid to me...

# Wednesday, November 09, 2005

All Hail Flying Spaghetti Monster!

Wednesday, November 09, 2005 2:08:56 PM UTC

Yesterday, news spread that the Kansas school board passed legislation to include intelligent design into the school curriculum.

As expected, there was some colorful discussion on Fark.

In an opinion piece in Time this week (11/14/2005), Eric Cornell, the Nobel Prize winner for Physics in 2001, brings up some good points with regards to an unrelated case in Dover, PA.  He states that:

"The central idea of intelligent design is that nature is the way it is because God wants it to be that way.  This is not an assertion that can be tested in a scientific way, but studied in the right context, it is an interesting notion.  As a theological idea, intelligent design is exciting."

That's the key right there.  At the core of all sciences is a process of exhaustive, systematic testing to draw a conclusion based on what can be observed.  No such systematic testing can be applied to the notion of intelligent design.  How can you test the idea that, because some beings are so complex, they must be born of some higher order being?  At best, the discussion should be relegated to some philosophy or theological course and have nothing to do with the sciences.

Notice how Cornell uses the term "God".  While ID activists will attempt to convince us that this isn't about Christianity and creationism, it is quite clear, based on the main leaders of this movement, that this is simply a cloak for injecting the creationist agenda into out public school systems.  Otherwise, we may as well teach Flying Spaghetti Monster as well, right?  It's frightening to think that certain parts of the coutnry are really not that far off from the fundamentalists and extremists that we so detest.

I think that the most important point that Cornell makes is that to use "The Will of God" to answer questions that science has no solution for yet, is dangerous to the progress of mankind.  It's dangerous in the sense that all science is driven by the knowledge to understand that which still remains a mystery. 

"The thrill is that our ignorance exceeds our knowledge; the exciting part is what we don't understand yet."

To use "The Will of God" as a blanket statement to answer questions that which we do not know the scientific answers to, is to say:

"Everything outside this box we can only explain only by invoking God's Will."

It creates an artificial constraint on the growth of our collective knowledge.  It hinders a generation of scientists and discovery by drawing a bounds.  In a sense, it's no different than those that claimed (and believed) that the world was flat.  If no man had the audacity to challenge this thought, if we had accepted such "facts", then it would surely be a very, very different world today.

# Monday, October 24, 2005

Porn, Hollywood, and Microsoft

Monday, October 24, 2005 6:26:51 PM UTC

It's a wonder why you and I are still viewing movies via physical mediums like DVDs.  To be honest, I'm really not sure why there's even such a huge fuss over BluRay vs. HDDVD.

About three or four years ago, I was working at Dreamzotic (NSFW!!).  First of all, from what I understand, Rob, the founder, was streaming video via Dreamzotic all the ways back in 1996!  Yes, almost a decade ago.  When I worked there, we were streaming up to 300 Kbps.  Today, I don't know the exact number as I no longer work there, but it would seem that Dreamzotic is offering near 1 Gbps!  On top of that, they also have a managed download so that you can grab the movie in its entirety.  The DRM protection prevents the video from being played on any machine other than the original.

I was once told that porn has been one of the largest forces behind innovation in Internet technologies.  To some extent, I think we can all agree that this is very, very true, especially in the case of streaming video.

So what I don't quite understand is what Hollywood doesn't understand about the current state of the movie industry as a whole.  With the introduction of large, high definition televisions and cheap, affordable surround sound systems, the theater going experience is dated.  To be clear, I hate going to the movie theater to see new releases.  Hate it, hate it, hate it.  From the stupid kids with their cell phones to the jokesters that try to be funny during a film to the dirty, dirty floors and restrooms, what is there to like?

For the past 8 months, I've been using Netflix and basically avoiding the movie theater (which is right across the street from our development).  It's quite obvious that the only two downfalls of Netflix is the method of distribution and the fact that no one has the balls (or insight) to do a simultaneous theater + DVD release (well, Mark Cuban has both, but I haven't seen anything major from him yet).

Whereas the porn industry has been chugging along (especially with the introduction of DRM to Microsoft Windows Media Services), you really have to scratch your head at all of the fuss in Hollywood and why it's taken almost a decade to catch up.

Bill Gates gets it right regarding BluRay vs. HDDVD:

"Well, the key issue here is that the protection scheme under Blu-ray is very anti-consumer and there's notmuch visibility of that. The inconvenience is that the [movie] studios got too much protection at the expense consumers and it won't work well on PCs. You won't be able to play movies and do software in a flexible way.

It's not the physical format that we have the issue with, it's that the protection scheme on Blu is very anti-consumer. If [the Blu-ray group] would fix that one thing, you know, that'd be fine.

For us it's not the physical format. Understand that this is the last physical format there will ever be. Everything's going to be streamed directly or on a hard disk. So, in this way, it's even unclear how much this one counts"

# Tuesday, October 11, 2005

BizTalk Vs. Windows Workflow Foundation

Tuesday, October 11, 2005 1:08:26 PM UTC

Having worked with BizTalk Server 2004, SQL Server Integration Services (replacement for DTS), and having taken a quick glance at Windows Workflow Foundation, I was kind of confused why Microsoft would create so many competing technologies, especially considering the high license costs of BizTalk Server.

As an aside, during my time with BizTalk, I was thoroughly unimpressed.  To begin with, I hate working with technologies where you can't easily see every piece of the whole.  Too much of the functionality of BizTalk is hidden in property menus and context menus...I can't stand that type of crap.  Even more annoying than that is the dependency on the GAC.  It takes a ridiculous amount of time to build and deploy the assemblies.  Consequently, it's a PITA to test and debug.  I've not found any real scenarios yet where I've felt that I would recommend BizTalk over some other solution, especially considering the insane licensing costs for what amounts to nothing more than an XSLT engine with some workflow and connectors built into it.  People, especially Microsoft, will try to convince customers that it's the solution to everything.  They tried to convince one of our clients to use it for a task that was 10x easier and more efficient (time wise) to do using DTS.  Not to mention the client already had a license for DTS whereas it would have cost them in the neighborhood of $40k just to get a BizTalk server up and running. I dunno, maybe I'll be impressed by the next version.

If you're still interested, there's some discussion about the main differences between Windows Workflow Foundation and BizTalk on the web today, so I'd thought I'd share with anyone else that's interested:

The short answer is that WWF (no, not the one with big men in spandex) is a framework to be used to develop intra-application workflow whereas BizTalk is aimed at inter-application workflow and [buzzword alert] "business process management".

WWF looks promising.  Without realizing it, I actually built a mini workflow framework for a recent project I worked on which required automating the UI of Microsoft Project Pro 2003.  It allowed developers to program against an API to create "Steps" and "Actions" whose results could be linked to and iterated over by subsequent Steps and Actions.  Very cool stuff.

# Thursday, September 29, 2005

I'm Not Alone!

Thursday, September 29, 2005 3:19:35 PM UTC

This pretty much sums up how I've been feeling every-freaking-day for the last few weeks/months:

I've never been more unsure about everything in the entire universe. I no longer comprehend what is important in the essence of everything. All knowledge and understanding I have aquired now all just seems meaningless and empty. I feel I am completely hopeless. My mind revolves so much around school and stale concrete fact. I don't really have a life. Right now I am just existing, going day to day with what seems like essentially no purpose or direction. I can't find my foundation for thought or reason or action. This is the worst feeling I have ever had in my entire life. Nothing is important, which in itself is sigificant for some reason. I think. I don't know. I feel so overwhelmed. I feel like I'm trying to wrap my head around life. Do you know what all is in life? A whole fucking lot. And my mind feels obligated to figure out every fucking bit of it at the same time. I feel like I'm trying to wrap a rubber band around a dumptruck. I'll either stay frustrated like this, or I'll somehow keep trying to stretch until it snaps.

In my case, I don't think I can even recall a particular point in time when this happened. It feels like I've been in this kind of funk forever.  I envy people, like my wife, who (at least on the surface) seem to have figured out exactly what life is about, what is important to them, what their goals are, and what they have to do to get there.  I think it's healthy to have goals; it gives you purpose and meaning in every action that you do.  Problem is, I just can't seem to solidify mine.

:Sigh: :-S

# 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

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

Hideo Kojima: Pragmatic Programmer

Friday, September 23, 2005 5:03:20 PM UTC

"Kojima: - I'm not a game producer because I want to make money - I just want to MAKE something. There weren't any good producers at the time I was looking for one, so I did it myself. I live and breathe for gaming, and if my job was just to lead a company meeting or something, I would never ever do it."

I am often asked, when I go in for interviews, what my goals are for the next 5, next 10 years. I think what these interviewers are really looking for is a reply like:

"Well, I hope to work on some certifications, continue my education as a developer, and work on project management at some point, blah, blah..."

Oddly, working as a project manager has never crossed my mind as a serious possibility. I can't even fathom the idea (at least at this point in my career) that I'd move away from the code, away from the act of creation.

My mother always asks why I'm crazy and don't go to/stick with big companies like JPMorganChase or Merrill Lynch, where I can make almost double what I'm making now. I think part of that is because I like to create things. When you go to companies like that, you don't create so much as do things. Yeah, I guess I could always satisfy my Lego-maniac side on my own time, but when you work in NYC, the commute really eats into your free time.

As Robin James Adams once wrote in his excellent blog post/essay:

"Programming is, above all, a creation act. In this sense, writing a good program is not so very different from designing a usable interface, or producing an aesthetic work of art, or writing a clearly articulated essay, or any of the other myriad creation acts humans delight in...For the programmer essentially works with concepts alone, he builds abstractions that have no real basis in reality."

And that is truly what I enjoy about programming and software development: the idea that I am creating some piece of code that someone finds useful. It is for this reason that I find that it is not nearly as satsifying working in the product space (i.e. working with SharePoint, Plumtree Portal, etc.).

"Kojima: - The technological development is also going so fast now. If you keep away from the development team for a period of time, you can't just pop back in. You just don't know what they're talking about. That's why I can never leave the development phase of games."

When I first arrived here at Immedient, I had a talk with one of my then co-workers, Kent Brown, about his design philosophy and his approach to software. It had arisen out of a discussion about Rockford Lhotka's CSLA framework, which he chose to build upon for a project that I was shadowing on. Kent explained to me that he had chosen this framework to build from because Rocky seemed like he was very close to the code; Rocky had an understanding of the real problems and challenges that developers face when building applications. I had just come from my horrible experience at Factiva where I had to deal with a so-called "architect" who was, to me, no more than a one time developer who now focused more on the business than on the technology, essentially, a manager. It was refreshing to hear Kent's perspective, though, on the subject of being an architect.

His sentiment mirrored the words of Mr. Kojima: you must always be deep in the code and the technologies with which you choose to build your creations with. Otherwise, you risk losing touch with the act of building, the act of creation and all of the difficulties and joy that go along with it. Kent also emphasized that he felt that one could not be a successful architect without knowing the technology inside and out since then there would be no base from which to design; any design born of such circumstances is doomed to failure. Such was the case with John, the self proclaimed "architect" at Factiva who had never in his days developed a single ASP.Net application and somehow ended up as our architect on this project, responsible for making technical design decisions regarding a technology with which he had no foundation in apart from a few introductory classes.

In The Pragmatic Programmer, Hunt and Thomas offer this as tip #8:

"Invest Regularly in Your Knowledge Portfolio"

Extrapolating on this, they add that, as developers, we should always try to:

  • Learn at least one new language every year.
  • Read a technical book each quarter.
  • Read nontechnical books, too.
  • Take classes.
  • ...
  • Stay current.
  • Get wired.

ASP.Net is not even 4 years old yet and we are on the verge of an entirely new paradigm in developing web based applications with ASP.Net 2.0 (re:Atlas; okay, not entirely new, but just incredibly painstaking and difficult before). Just as Kojima points out in the game development space, in the web/desktop applications space, the technologies change so rapidly nowadays that, as developers, we really have to keep our nose to the grindestones and hold close to ourselves the passion for creation and self improvement.

I think Kojima's words and my recent work with the beta bits of .Net 2.0 and VS2005 have helped reinforce in my mind that it's okay to not want to head towards a management career path :-)

# Friday, September 16, 2005

Yes, I'm 24

Friday, September 16, 2005 12:16:35 AM UTC

Every once in a while, I'll put my resume up on Dice.com just to see what types of offers come my way.  I'm beginning to think I might be a masochistPerhaps the thing that peeves me the most is when recruiters/headhunters call me and kind of nonchalantly ask my graduation year.

Yes, I'm 24.  But I've been doing web work since I was 18.  At 20, I was better than a lot of the guys I've worked with in the last few years who've been doing development "professionally" for 5+ years (I use that term loosely).  At 22, my knowledge of XML, ASP, and SQL were strong enough that a sizeable engineering company would hire me as a consultant to do the work that their internal developers couldn't do.

"So when exactly did you graduate?".  I despise this question.  It's a ludicrous question to ask, of course.  I've been doing the same type of work (and getting paid) since I was in college.  So what's the difference between the for-money work I did the day before I graduated and all the work I've done since I've graduated?  Nothing.  Not only that, in fact, the work that I did for my high level computer science classes?  Leaps and bounds above the typical work that most developers do in their careers.

What annoys me even more is that most of these recruiters have no idea about the technologies they're dealing with in their requirements.  I constantly have to explain that DTS is not much more than T-SQL + VBScript, how VB.Net and C# are pretty much identical, and JavaScript is not the same thing as Java.  Not only that, many don't seem to be able to read.  I get calls, not automated emails, about positions in California.  I could swear that I wrote it clearly in my resume (the HTML version posted on dice) that I'm only interested in positions in metro NY area and NJ.

Oy.  It makes the whole exprience so frustrating.

I had enough of it today when Renee called and started asking me to doctor my resume.  I've never hung up on any recruiter (I've been hung up on a few times).  I just couldn't handle it any more.

» On This Page
SharePoint 2010 Mobile Rendering (And Device Emulator Fun!)
Cloud Hype Rant
Analysis Paralysis : Getting Carried Away With UML
On Healthcare: What We Can Learn From The Music Industry
Rental Car Diaries
Thoughts From The Trenches (Giant Brain Dump Incoming!)
Automatic Properties (And Why You Should Avoid Them)
Why ASP.NET (webforms) Sucks.
Where (Most?) Zombie Movies Go Wrong
Obama Says No To The Assault Weapons Ban
CharlieDigital's Guide to "Teabaggin"
Why Do You Play?
Stupid Questions
The Follies of C# 4.0
Spansion Fires 35% of Workforce; Reinstates Executive Pay
5 Cooks
Michael Lewis on the Financial Meltdown
You Tell 'Em!
Let's Talk Politics
QOTD
"Stupid Should Hurt"
More Lotus Notes Suckage
When Will The Stupid End?
The Sad State of Secularism
On The Suckage Of Lotus Notes (6.5)
SharePoint As A Development Platform
SharePoint: The Second Coming Of Lotus Notes?
Lotus Notes: It Sucks...Hard
DRM = Doesn't Really Matter
Random Rant
Education And What We Can Learn From Other Countries
"Free" Money? Think Again...
Confucius On Programming
The Slow Death of DRM
Dynamic SQL: Yea or Nay?
Interesting Find
I Hate Comcast
Mindblowing Job Candidate Trawling...
Commitment Chains, GUIs, Frustration, And Other Ramblings...
Software, Artistry, and Frustration
Two Terrible Rulings
More Buffoonery From The Music Industry
Random Developer Rant
Am I Just Being Compulsive?
Automatic Properties in C# 3.0...Why?
Most Convoluted Licensing Model. Ever.
Taxes...ARGH!
You Know It's A Slow Newsday When...
Most Annoying Error Ever.
Down on ASP.Net
Wowzers!
The Most Absurd Piece of Pork Ever??
Grow Up...
Talk About Ridiculous...
The Woes of Beta Software
Of Trawling and Tech Jobs These Days...
It's Not Facism When We Do It!
Database Implementation Woes
3, 4, 5, 9, 10
Taking a Stand for Mother Nature
Big Changes Around the Corner
The Lowest Common Denominator
So, Apparently, Teamwork is Counterproductive...
Sad State of Manufacturing in America
Enterprise Library 2.0 Logging Quirks
The Little Things that Count
Still Not There Yet...
I Confess...
Random DevTools Entry: #005
The Problem with Ordinary
On Enterprise Library
Flash = Teh Suck
All Hail Flying Spaghetti Monster!
Porn, Hollywood, and Microsoft
BizTalk Vs. Windows Workflow Foundation
I'm Not Alone!
What's Wrong with Insourcing?
The Perfectionist Plague
ASP.Net Cost of Entry
America's Sorting Machine
Hideo Kojima: Pragmatic Programmer
Yes, I'm 24
RSS 2.0 Atom 1.0 CDF