Archive for May, 2008

Undiscovered gems on TV

May 7, 2008

Two shows saw for the first time tonight (and for where-the-heck-is-the-remote type reasons, on the same channel: SciFi), and which are worth watching — albeit for spectacularly different reasons:

Highly recommended.

Facebook, again

May 7, 2008

I am amazed at the willingness of the Facebook aficionados such as Robert Scoble and Rodney Rumford (in reverse order of relevance and willingness simply because I do not feel like switching the names around) to engage in debate on its merits. If nothing else, such confidence and stunning open-mindedness is warping my views on the topic — albeit in a limited way, of course. 

Thanks for commenting on the facebook video. I tend to disagree with your points, which is cool.

You’re quite welcome, thank you for responding by the way, and oh… I think so too. I think I have done a poor job of truly expressing my views so far, and have come off spectacularly negative when hopeful would be a better description. More on that later.

“Most people do not keep an address book on their PCs” What is Outlook?

Outlook is not used by home users. It really missed its window for the home user: being a full aggregator of any and all address lists, calendars, contact information in general, et cetera, you catch my drift. List the services people actually use all the time that Outlook is spectacularly oblivious of. Yes, I know, 2007 is somewhat better in this regard, but where’s the “synchronize my address book with GMail” option? Where’s the “synchronize my contact list with Yahoo Messenger” option? It’s not there. And over time, I can tell you first-hand, people drift away. Thinking things over, I realized that I have already been locked in silos: I have my Messenger Contact list (as trimmed as it is, for obvious reasons), and my GMail address book. Just today, I went through all the different e-mail addresses in my GMail account to get a hold of my dad, because that’s the only place I keep his addresses. I have Outlook (2003, if you must know) installed on all 4 machines in my house, and nobody uses it.

In the comments for the video in question, Rodney elaborates somewhat:

Facebook apps are definitely for a niche within a niche. It just so happens that the facebook niche (32 million) happens to be a significantly large niche that continues to grow at a rate of 150,000 new users per day.

You are correct: If i ask 100 people about the platform possibly 1 or 2 will know about it. 5 days ago i was at circuit city and asked 4 people about it. 1 of them knew about facebook applications and thought it was cool and liked a few applications. These people were all in their 20’s.

I happen to be a believer in disruptive technologies that make peoples lives easier and/or more interesting: I believe facebook apps fall into that niche. It is ok to think i am totally wrong and missing the point. Thanks for commenting.

He very, very much has a point. Especially when you consider his full-fledged response, here. Let me go step by step here…

He (Sjoerd Verweij) does not think people will find applications useful. Hmmm. He used one (video is actually an application on the facebook platform) to discover content (from me) and used one to comment to me.

He proved my point that facebook is a new type of communication tool for me. He found my video on a facebook application, commented on a facebook application and I responded to him on the same facebook application.

I see his point, but at the same time truly feel he missed the point: me being on Facebook was about figuring out what Scoble’s continuous hissy-fit about it was about. To reiterate at least part of my original point: I have three friends on Facebook at the moment. Scoble, Rodney Rumford and my wife (who followed me to Facebook to see what all the hubbub was about and returned with a decided “myeh“). Besides that, not a single soul that I know in real life has a Facebook account.

As for the remaining 3 points; you do not have to be tech savvy to find an application. Points of discovery for adding apps are everywhere (mini-feed, app directory, posted links, invites, notifications, search, friends profiles, news feed, email attachments, etc.). If an application is being used by your friends you will most likely be exposed to it without actually having to LOOK for it. If you can click “Add Application” you are tech savvy enough to add an app on facebook. ;)

Point well taken, but this assumes critical mass. Which I’m just not seeing.

People can actually search the application directory, so if they are looking specifically for an application that fills a specific need, they can find it based upon a keywords search query.

Search the application directory? Are you kidding me? Do you know what the most searched-for keyword on Google is? Yahoo. You’re operating on a different level. No, that’s not meant in a denigrating way. In a sense, we’re car mechanics debating the color of the Check Engine light. The average user doesn’t care. Why should they?

People do not have to pay for applications to use them. They are free to use (this may change as the value proposition becomes greater for more sophisticated applications). The business & revenue models that are under the hood for these are varied. Some apps are ad sponsored, some are meant to be branding efforts, some are meant to drive traffic back to their main sites off of facebook. Some are meant to pull entire site functionality into facebook.

This smells of Web Bubble 1.0. I see what you are saying, but the danger of going off the deep end is staggering.

The other thing about facebook is that is highly addictive and quite efficient. I do not “waste time” on facebook, my life is much to busy.

I don’t see the “addictive” part at all. You want to know addictive? In my formative days, a perfectly worthwhile college education was sacrificed on the altar of playing MUDs. That particular addiction faded for a while, but is here now stronger than ever. I know people who can only rarely find the time to even talk to people who are not in their world: World Of Warcraft. I’m not kidding: they spend more time talking to people in their guild than to people they know in real life. Anyway, saying “your life is much to [sic] busy” is spectacularly disingenuous. You make a living off of this platform. Scoble is making a living out of talking about it. For just about everybody else, the people you quiz in Best Buy, don’t you realize how much worse things are?  Scoble has called these applications attention diffusers, and I think he was more right in that post than even he knew.

Data wants to be set free and it will almost always find a way to be set free via technology. So, I like being part of the facebook niche, it helps me manage data of many types quite effectively. So is facebook a platform that nobody cares about? I think not.

Like I said: until “many” becomes “all”, none of this will truly fly. This technology is not disruptive, because it is repackaging. Internet time, which used to be leisure time, has been packaged up and claimed, one way or the other, since 1998 or so. Realize that you are playing a zero-sum game now. Facebook is shockingly close, but I feel still not getting the point: If you want to be a platform, be a platform. Import every single web application and relevant desktop application that has more than 1,000 users. You will rule the world. The first site to consume every single data source will win.

As a random aside, I posted an extremely gross but (I feel) still pertinent analogy, which for some reason rubbed Dare Obasanjo the wrong way in every single way one can be rubbed the wrong way possible. Which, of course, rubbed me the wrong way, leaving my (in this case, luckily) under-visited blog with a somewhat acrimonious exchange in its comments. Wait. Isn’t that the life-blood of any good blog? Woohoo! Someone came on my blog and talked shit! (As a random aside, I am henceforth taking a stand and ditching the “farkings”, the “doo-doo”s and all of their overly PC ilk. This is my party, and I will fucking swear if I want to).

There’s more I have to say about this, but it will have to wait.

Facebook videos keep making my point for me

May 7, 2008

It is excruciating… people making my point for me.

Look at this.

Rodney, you are missing the entire point here.

  • Useful. Yes, think about useful. But you are talking about a platform you are building on here. Have you actually objectively considered the foundations you are building this on? For IT geeks: how well do you think the current market for Visual SlickEdit plug-ins is doing?
  • Make connections with data. Again, notice the loud whooshing sound. Rodney, people already have data. Lots of it. And you know what? They are somewhat reluctant to give it to you. Most people are starting to get interested in keeping it safe. Which is why I think Windows Home Server has the potential to be the biggest money-maker for Microsoft in decades. Which, considering their pathological inability to capitalize on what they do well, will never happen. Most people do not keep an address book on their PCs. What makes you think they are willing to share any pertinent information with Facebook?

A bit later, he talks about “don’t make me think” for a bit. For the uninitiated, he is referring to the paradigm where you do not make a user worry about things that they do not care about. I think he is missing the point on Facebook at the moment. The focus should not be on what people think about applications that they can install on Facebook if they so choose (for future reference, I have spent an hour on Facebook now and am still blissfully unaware of the existence of applications that you can install in the first place — and I have been an IT professional for the past 13 years). We are talking about subsections here. Let me cut this down:

  • People on the Internet
  • People on Facebook
  • People that care about Facebook sufficiently to return
  • People that are tech-savvy enough to find your application and add it
  • People that are looking for what your application does
  • People that care so much that might be willing to pay for it

Does this sound like a business model to you? If so, I have some great New Orleans real estate you should look into.

I think the point he is missing is that he is developing for a platform that nobody cares about. He would probably (forgive the straw-man argument here since I have no way of communicating with him — yet, har har) add “yet“. To that sentence. But still, the business proposition has not been made by anyone in the Facebook bubble: why would anyone care? what does this do that I cannot do elsewhere? why, pardon my French, should I give a flying fuck?

Tiers, revisited

May 7, 2008

From some of the private feedback I have been getting on my rant on 3-tiered development, it truly seems that I did not make my point sufficiently clear:

Tiered development is great, when done right and needed. See, I even bolded it. My point is that across 8 jobs on 2 continents with datasets up to 2.5TB and data structures up to 1,200 tables, I have yet to see a single instance where 3-tiered development was needed. I have seen several instances now where an application was designed to be such, but I have yet to see it in practice, let alone done right. In all instances so far, all tiers run on the client.

Forgive my cynicism.

Facebook DOES have novelty!

May 7, 2008

Like I said, I joined Facebook to see what all of Scoble’s hubbub is about. I even had my little hissy-fit over what, really is new about it. Well, I figured out one thing if nothing else: it satisfies voyeuristic tendencies to a new level.

What I mean by that is that besides showing this (and might I point out, right here right now, that Robert Scoble is, if nothing else, a man of his word and worth listening to if only because of that — I am so pleasantly surprised that I am dying to engage in a true conversation about the issues I have given him grief over):

image

Besides showing what you do, it also shows what your friends are up to (cut to show something I deem fairly innocuous — Robert, if this offends, I apologize and I shall take it down:

image

Anyway, to continue my original point: this is voyeurism, pure and simple. If you need convincing, here we go: Robert talking about how to spot the Real Bill Gates.

So I joined Facebook!

May 7, 2008

And it lacks everything I thought it would… being:

  • Interesting
  • New
  • Innovative
  • Ground-breaking
  • Worth my time

It is, sadly exactly what I presumed it would be: MySpace with gadgets.

I double-dog dare Scoble to debate this — as irrelevant as I am. My entire point being that he is well on his way to my special, extra-crispy level of irrelevance. To put it another way, Scoble got offended at something John Dvorak wrote — a commentator who has for the past decade done everything humanly possible to make himself irrelevant. Robert, people read Dvorak when they get bored. You are rapidly sidelining yourself the exact same way.

CREATE, ALTER or REPLACE

May 7, 2008

Rewind to 1997-ish. Yours truly is sent on the typical “go find out about” junket, training and eventual Microsoft certification. At the time, several things really stood out to me:

  • SQL Server supports 16 tables per query*
  • When charging $1,800 a head a day, a training institution can do better than Maxwell House-grade coffee, and
  • There is no SQL statement to say “I want to create this object; if it’s not there yet, just create it; if it is, try and alter it, and if not, just drop it and create it”.

To be more specific for those in the field, and to elaborate a bit for those who are not… In SQL Server, there is (and has been for a long time) the concept of a stored procedure. Which is exactly what the name suggests: a stored bunch of “do this, do that…”

To create a stored procedure, you tell SQL Server

Create Procedure NameOfYourProcedure

As

Do This…

Do That…

But what if the procedure already exists? Well, you could dispose of any existing version first, internally, and then create the new version. You know, as you probably intended in the first place. SQL Server did no such thing. Pah! In such a situation, what should your application do? Well, why not do the least helpful thing possible! You return an error that the object already exists, and… that’s it. That’s what you do. I am not kidding. For those of you somewhat newer to computers, this was somewhat of a convention when resources (memory, storage, speed of the processor) were so tight that you could not be friendly about failure, even if you wanted to. This culture carried forward, and is still present today.

Ever got something along the lines of “Operation Failed! Error Code: 0×8000FED0″? That code means something. The problem is that it only means something to the programmers of the particular application — an issue of perspective, nay, a failure of it that too rarely came home to roost (oh, the things Microsoft found out when they actually made Word collect information about how people use it). Regardless, these were the late ’90s, and there was no reason for this behavior other than corporate laziness. “Object already exists”? That’s exactly the kind of cop-out message you return when you are writing feature specifications on the SQL server team yet are far more interested in getting home for your family’s barbeque… the one you invited your boss to. I’m sorry, but it truly smacks of complete unawareness of what a DBA does day-to-day, an utter lack of care for same, or both.

So… how does the thing get created? Well, you simply tell every single soul that wants to create a stored procedure to do

If Exists(Select 1 From SysObjects Where Name = ‘NameOfYourProcedure’)
    Drop Proc NameOfYourProcedure
Go

Create Procedure NameOfYourProcedure

Actually, since you could have objects of different types with the same name, e.g. a table and stored procedure, or you could have two objects with the same name but with different owners** (personally, I think that if you do, you deserve every heaping helping of misery humanly and technically available, but that is another post altogether).

Aside from being distinctly non-standard (only SQL Server and certain magical versions of SyBase — the people Microsoft bought their initial 4.21 version of SQL Server from — know about SysObjects), this is just asinine. For the record, SysObjects at the time was a magical, non-standard table which contained every object in the database. But never we mind… change is coming. We now have the spiffy new Alter syntax!

Alter Procedure NameOfYourProcedure

Excellent, isn’t it? Yes, it is. Except for one thing: if you issue an Alter statement for an object that does not exist, you get an error. I kid you not. So, facing the utterly common, daily task of creating a script to create or update an existing object, DBAs the world ’round are stuck with two fully implemented and supported statements:

  • Create, which bombs if the object already exists;
  • Alter; which bombs if the object does not.

As hard as it is to believe, there is no syntax to do what a developer or DBA would like to do to an object around, oh, 100% of the time: create it if it does not exist, and alter it if it does. At times, it makes me want to hop around on one leg and yell “boggle boggle boggle” at the top of my voice. If anyone would listen, I still might. It’s an easy feature to add. You know it, I know it, dogs know it, but in essence, we’re still doing the same dumb unnecessary jumping through hoops of doodoo we were forced to back a decade or two ago.

[ side-rant ]

Why is it that while SQL Server for two major versions now has supported perfectly serviceable ANSI standard views for anything one might need to check for the existence of just about anything in the SQL Server omniverse, none of its tools, when asked to generate a script to generate an object, use them? I am talking, of course, about the Information_Schema views. It means that instead of:

If Exists(Select * From SysObjects Where Name = ‘Something’ And ObjectProperty(ObjectID(‘Something), ‘IsProcedure’) = 1)

   …

You can and (even according to Microsoft’s documentation) should do

If Exists(Select * From Information_Schema.Routines Where Name = ‘Something’)

  …

To incorporate somewhat from the side-rant into the main narrative: yes, Microsoft’s own tools do the same dumb, redundant, inelegant thing that is forced upon us DBA types. It seems it is accepted as a status quo within the SQL Server group that:

  • There is no need for a natural syntax for something every DBA does around 7,395 times a day, and that
  • There is no need for anyone to use perfectly usable, readable and portable syntax if you can just pretend to be hard-core by using back-water retrograde 6.5 era coding styles. Microsoft does. Trip over a SQL Server service pack in mid-installation and check out the SQL scripts that are being run to update the system stored procedure set. It must make someone, somewhere feel good to use retarded syntax.

Now, I do not know the source code for the SQL Server parser. I do not know how its grammar is defined. Still, I double-dog dare Microsoft to hire me to add this feature. If I cannot do it within a week, I will go home and take up gardening.

[ /side-rant ]

Depending on the parser’s implementation of context-sensitive keywords (which, especially from 2005-added features, seems quite rich), I would pick one of the following implementations:

Version 1:

CreateOrAlter Something

As

Version 2 (to be more in line with Oracle converts):

Create Or Replace Something

As

Or, something I suspect would be the least invasive on the core grammar (and non-standard, and silly, but hey, I will take something like this any way I can get it),

Version 3:

Create [Something] [NameOfSomething]

With Replace

As

But that’s not the thing that made me write this overly long, whiny blog entry. You know what actually turned out the the straw that broke the camel’s back and made it tip over the bucket?

With SQL Server 2005, a new scripting, metadata definition language was introduced for Analysis Services objects (that’s Microsoftese for OLAP and Data Warehousing for IT people outside the Microsoft bubble). It is called XMLA, and it is nothing but a set of XML schemas that describe any and all objects within the Analysis Services universe: databases, cubes, objects, dimensions, attributes, measure groups, roles, the kitchen sink and yo mama’s britches.

Having started from scratch, one would imagine the clean slate would allow for a orthogonal, clean paradigm where description and implementation were concepts allowed to contact each other, but only by fax and only on every other Sunday between 4 and 5PM. To put it another way, concepts kept separate as much as humanly possible. Philosophically, XML is a descriptive language***: it should describe what, not how.

Somewhere deep in the bowels of Microsoft, a team of undoubtedly fairly intelligent people lost sight of this in a truly epic way… and came up with XMLA. They came up with a scripting language in XML form, uniting the worst of two worlds and managing to combine the limitations of both in ways heretofore unknown.

XMLA describes such objects as commands, as an XML definition of what the server is supposed to do. Which is spectacularly ironic, counter-intuitive and in my opinion somewhat a slap in the face of the spirit (such as it is, for an entity so soulless) of XML. Rather than describing, XMLA prescribes.

Okay, this is getting far too abstract. First, let me give you a sample of what XMLA would have looked like if I would have any say on the matter — this probably would involve me having to carry a Glock throughout the development cycle, but still:

<database name=”Something”>

   <cube name=”Something Else”>

   …

This is what XMLA actually looks like:

<Create …>

   <Database …>

      <Cube …>

What do you think happens when you issue a Create XMLA script to a database to a server that already has the database you are scripting? For that matter, when you attempt to create any object that already exists? Exactly, you get an unceremonious error, and you are on your own. Now, what do you think happens when you issue an Alter on any object that does not exist yet?

Sigh.

In the end, as of now, the development world at large (including yours truly) is left with a scripting language that is unusable for scripting, describing objects or anything that developers would want to do.

Imagine, with all I have said before, being in a situation where you want to distribute an application where:

  • The cubes are canned
  • The data source is dynamic
  • You want to allow users to add or remove cubes

Business Intelligence Studio is a joke, and I think a prime example of letting developers determine usability. It makes me think long and hard about what Microsoft dog-foods. What do they use? There is no way in hell that Analysis Server, as is, is being used internally.

Please, do not get me wrong. I flame about Query Optimizer regressions, things that should have been implemented ages ago, the elephantine toolset (albeit positively svelte compared to Oracle’s “I’ma gonna need 359,000,000 bytes of RAM to start up my management application — before you even connect to a server” way of life). Warts and all, I love the entire Microsoft database stack. I see where development focus goes, version to version. I have beta-tested 12 of Microsoft’s major development/database products so far. I see 2005 was very much about improving VLDB support, correct SCHEMA support (while preserving 99.99% compatibility — anyone in on those FSpecs deserves a farking Medal Of Honor), .NET (CLR) integration (whoa), and from the looks of it, re-doing Analysis Services. I am asking for little, trivial things here. I am begging for polish. Heck… give me a call, and I’ll do it for you.

* In any version of SQL Server before 2005, calling it a schema is a joke.

** Almost a decade later, as a programmer-turned-DBA with an empty afternoon, I wrote a primitive SQL parser to chug down all stored procedure scripts in my company to determine Maximum Number Of Joins In A Single Query (I still hold that record at 82) and Maximum Number Of Distinct Tables In A Single Query (sadly, that record belongs to someone else at 54). I shudder to think about writing those queries on 6.5. And in case you were wondering, no, views would not have helped — our data model was that intricate.

*** XML is descriptive. XPath is descriptive. XSLT is a joke, and a subject I intend to revisit at a later time.

Scoble… that’s just a little too much.

May 7, 2008

Robert Scoble has been writing about social networking sites lately. A lot. A whole lot. The only interruptions of the continuous stream of posts about how Facebook is going to change the world somehow have been about how great the iPhone is (and you might recall how I feel about that). Most people in the real world, however, do not get paid to read hundreds of blogs and dawdle on sites that amount to little more than MySpace with widgets. In fact, most people would get fired for doing so — and thus do not. And as for the iPhone; call me Scrooge, but I find it somewhat insane to pay upward of $2,000 over the course of two years for a phone. For that kind of money, it had better perform sexual favors. Well.

Still, his blog serves as a reminder of the very common phenomenon of self-reinforcing myopia: shockingly, it seems that if you hang out with people that make a living on/with/through the Internet all the time, it seems that the entire world is on the Internet — and the things that are important on the Internet (important being either truly important, useless but shiny and new, or something someone told you about over lunch last Wednesday that sounded really, really cool) — is right up there with the situation in Darfur in importance. It is somewhat like Schrodinger’s cat assuming that the universe is somewhat squarish and made of wood.

Today, however, it just got a little silly. Stickers for the iPhone. Wow.

True to form, I started venting:

Okay, that’s it, Robert. It has been getting worse and worse of late, but this one made it official: you are truly and completely out of touch.

No amount of wishful thinking can change the fact that:

- Nobody needs Facebook, Twitter, Flickr or anything of the kind. None of them fill an actual need. The incessant drive to become a platform should tell you something — they are all solutions in search of a problem. Every single person I know who has tried one or more of these sites and their ilk already has passed the “neat, but so what”-horizon(TM).

- Since they do not fill a need, there has to be novelty and/or reward. What is the reward? Compared to IM clients and that old BlogSpot account?

- Remember that old BlogSpot account? The one millions of people have and have abandoned since they realized that they simply have very little of interest to say, and — Robert, this is critical — no farking time to say it?

Most people spend around 9-10 hours a day on their job, where they cannot really spend too much time in Second Life. Most people do NOT get paid to read blogs or look at a complete stranger’s FaceBook page. Throw in dinner, taking out the trash and (hopefully) taking a shower, and you are left with perhaps 2-3 hours of freely spendable time a day tops. Your precious Twitters of the world are competing with movies, loved ones and getting that thirld WoW character to level 70 — and when the novelty wears off, all social networking will lose.

- By the way, as the exception that proves the rule, MySpace does fill an actual need: it gives teens another way to waste their time and foist really, really bad poetry upon the world, and as a very bad public e-mail and chatting system. Old wine, new jugs.

Nice and irrelevant to the post I commented on, but nonetheless true. True to form, I posted this without reading the other comments first, so I missed this one:

Vainentree and Al: I will report on culture and stuff and iPhones have dramatically changed our culture. Deal with it.

Comment by Robert Scoble — August 2, 2007 @ 11:53 pm

It’s absolutely hilarious — until you realize he’s serious. Ugh. I just couldn’t let that one go:

And, to stay somewhat on-topic (I of course should have posted the above on a different thread):

“Changed our culture”

Whoa. That’s just… wow. It’s a phone, okay? The sun still rises in the east. Around release time, there was a lot of buzz (including in my professional and social circles), but guess what? The one sucker — I mean trend-setter — I know who got one enjoyed about a day and a half of interest all around, but now has a $600 crappy MP3 player and crappy phone with a 2 year contract.

By the way… “I report on culture and stuff”… truly smacks of the Married With Children episode where Kelly gets her own TV show: “Important Issues And Stuff”. Like, totally.

Okay, so I can get somewhat jerky at times. But what irks me is that Scoble actually came perilously close to making the same point mere hours before, but zoomed past it — whether intentionally out of job protection or out of the institutional myopia I described above (or both) :

We ARE in a bubble. Not just one that John is properly identifying.

We’re in a bubble of attention diffusers.

Huh? I’m getting so many things pulling me in so many directions that it’s hard to spend 60 minutes just thinking about one thing and getting deep.

See? He’s almost there. He can’t keep up with all these nifty, nifty sites, and it’s his full-time job for crying out loud! Where oh where does the average working stiff fit in an hour a day for Facebook? I don’t. Nobody I know does. And in the end, all these sites and services boil down to repackaging the same basic things:

  • Staying connected. People already have blogs they don’t maintain, MySpace pages no-one wants to see and e-mail accounts they lost their password to. When the novelty wears off, and the job of maintaining all of it starts feeling like a job, all of it withers away. Oh, people want to stay connected alright, and most do — they run Yahoo! Messenger and send eachother jokes.
  • Gadgets. Widgets. Trinkets. All designed to make easy things easier. I cannot stress this enough. There is no lasting power in picture-sharing sites, for example (aside from the obvious niche audiences). You can e-mail pictures. Yahoo! Messenger has photo sharing built-in. You can print pictures and hand them to someone. None of these things are difficult. In essence, almost all Web 2.0 gadgets are solutions to non-problems.
  • Expression. If you need a hint how huge the need for this is, look up some statistics on BlogSpot and their ilk. Thousands upon thousands of new blogs are created each day. If you need a hint how fleeting this need is, look up statistics on how many blogs are abandoned each day. Expression takes effort. Unrewarded effort is a thankless job, and people tend to quit thankless jobs, especially if they do not get paid for them.

Cynical? Quite. The silliness of it all must be getting to me.

Why your tiered structure might be dumb

May 7, 2008

Any class you take, any document you read… they will tell you. You need to write a three-tiered structure. You need a data access layer, you need a business logic layer, you need a presentation layer. If you put any business logic in the data layer, locusts shall devour your babies. If you put any…

Aww, crap. You’ve all heard it. It’s the same old story. It’s the same old methodology. Yes, it is getting old. This entire paradigm predates Design Patterns, and it is silly, sad and old. But let me tell you. Do you know what happens?

Weird, silly, unadvisable, sub-optimal, somewhat inefficient, odd, quaint, endearing, and oh, let’s just get down to it: STUPID things. I have now seen 6 distinct, home-grown, be-all-end-all bet-the-company three-tier frameworks, and without fail, here’s what happens:

Mip-map

Objects get mapped, abstracted and the resulting patterns never, ever get profiled. You know, the thing that would make Rico Mariani prowl the hallways with a shotgun and a quarter… buy a clue or buy some buckshot. Anyway, if you are curious what this anti-pattern looks like, here’s an example. Let’s assume you have types of widgets, and that there are properties for your widgets. Let’s say you have about 271 widgets, and about 8,700 properties on them. Now in the olden days, you would open up a recordset on all widgets, and populate your in-memory representation of them. Whether that should be a full representation or not is another matter entirely, and although quite relevant to this discussion, perhaps something to be saved for later. For now, what is important to remember that 99.99% of any and all data fits into some type of hierarchy.

In the olden days, you would do something like this:

OpenRecordSet(Select * From WidgetProperty)

While Not EOF

  WidgetCollection[RecordSet.TypeOfWidget].Add(new WidgetProperty)

Of course you would optimize this. For starters, you would sort the sucker by type of widget, track what the last type of widget is… all that jazz. But one the Three Tier Mantra enters the picture, all of that gets pushed down. In good OOP fashion, you end up with

Widget : IWidget

Widget()

  OpenRecordSet(Select * From Widget Where WidgetType = TypeOfWidget)

  While Not EOF

    MyProperties.Add(new WidgetProperty)

And, of course, to round it out:

WidgetCollection

WidgetCollection()

  OpenRecordSet(Select * From Widget)

    While Not EOF

      This.Add(new Widget())

No, I’m not kidding. This ALWAYS, ALWAYS, ALWAYS happens. If you don’t see where this is going, if you don’t see what the problem is here… please don’t ever come to work with me. Thank you.

So, to get even more pseudo-code. Instead of:

Give me all your WidgetProperties

For each property, let me put it where it belongs

Give me all security on WidgetsProperties

For each security nugget, let me put it where it belongs

No. Too brutish. Let’s try it this way:

For each Widget, load properties.

For each Widget, load security.

See? See how that works? See how that makes things easier?

Well, yes, it does. But let’s, oh, EXPAND what actually happens.

For each Widget, load properties.

  Create new Widget

  Load all properties for this Widget

  Check security on this Widget

If by now the bells aren’t ringing to the point of Captain Obvious boredom — well, find a different trade. What happens with applications like this? I’ve seen applications go through the top-level iteration as described above 271 times to get 8,000-ish records total. Oh, and of course, since this was a very secure application, it would request permissions on each homogenous chunk of Widgetry. Of course, that part was optimized quite a bit since the security request was a large, locally constructed request for information from 3 tables, necessitating the use if temporary tables in this ad-hoc request. Stored procedures be damned, this is so much easier to maintain.

This is precisely the reason why I feel LINQ is going to kill efficient development as we know it. On the one hand, I am beyond angry because it will put over-engineered train wrecks in my path. On the other hand, fixing said train wrecks will keep me in business forever.

iPhone (hey, everyone is talking about it)

May 7, 2008

So let’s get down to the nitty-gritty, shall we?

What do you pay?

Purchase price: $599. Throw in California sales tax, and that is actually $645.

The cheapest plan available: $59.99. A month. For two years. I won’t even go into how incredibly crappy this plan is (okay, fine: you get 200 text messages, 400 minutes, and I don’t even want to know what calling costs after that). For the record, plans go up to $219.99. No, that is not a typo. PER MOTHERHUMPING MONTH. (Oh-oh, I used the bad word again…)

Anyway, let’s just roll with the bottom line here. 24 months of that will run you about $1,439. Assuming you call less than say… ten minutes a day. But sure, let’s roll with that.

The total cost of owning an iPhone for two years?

$2,084. AT LEAST.

Pardon my French, but anything requiring that kind of outlay had better perform sexual favors. Without limit. Upon request. Instantly. And well.

What do you get?

You get a large, heavy, breakable, so-easy to smudge IT COMES WITH A SHAMMY device that purports to be an iPod, mobile Internet device and cell phone. Well, on the phone part the reviews are in, and fairly unanimous: this is the worst GSM phone made in the past decade or so when it comes to interference, sound quality, reception and ease of dialing. Wow. Impressive. So how much am I paying again for this?

But it’s so much more! You can browse the Internet on it. And the user interface is fantastic! Yes it is. On the other hand, there’s a reason that the commercials only show pages AFTER they are fully loaded. Why? Because the download is so slow, it “makes you pine for dial-up”. Well, that’s okay, it’s not like it’s expensive, right? Oh. Wait. Besides, any modern, fully-functional site that uses Flash, Java or AJAX simply will not work. Yes, that means that MapQuest is NOT going to be fun to use. If you can get it to work at all. Now, to offset this, Apple has worked very hard with leading sites to make their content work on the iPhone in spite of its limitations. They really went for the important ones. Like… YouTube.

What… YouTube?

Yes, YouTube. You can watch YouTube videos on your iPhone just fine. If this does not strike you as supremely funny and pathetic at the same time, you are very scary and sickening in ways I cannot describe. You are also, quite probably, the proud owner of an iPod and cannot wait to get an iPhone. I would like you, at this time, to go away.

But it’s so much more! It’s totally, like, totally like an iPod. Sure. With 8GB of storage. Without the option of expansion. No, I’m not kidding — not only is the flash memory embedded and irreplaceable, there is no expansion slot. So sure, 8GB. That pretty much kills its usefulness as a movie player: what significant amount of PodCasts and/or TV shows do you think can fit on that amount? Squat? Correct.

Even funnier: Apple came up with a new, super-duper headset plug. Which means that yours will not fit without a $15 adaptor plug that will hang off the side of your phone like a short-bus category wart.

I give you $600 right now. An 8GB MP3 player (the smaller, lighter, and yes it takes an actual normal headphone kind) will run you about $149 — assuming you like to waste money and buy an iPod. A cell phone, with full Internet service, costs about $89 with plans starting at $39.99. Somehow, somewhere, the iPhone sounds like a Really Bad Idea.

So what’s your problem?

iTunes is. Not only will this mother not sync with anything other than this particular heap of badly ported overly intrusive offensively invasive inflexible and Jeebus can the damned thing start up in less than 20 minutes please sad excuse for an actual music management application… it actually requires you to install it to ACTIVATE THE PHONE. For me, that’s a deal-breaker right there. I would rather lose my spleen than install iTunes on any machine I have anything to do with. I hate it so much I do not wish it on my enemies. It’s only half a shade away from Anthrax.

There’s one more thing. The entire point of the iPhone is that the entire user interface has no buttons. Which is absolutely amazing. I’m not kidding there — again, Apple seems to be able to take existing technology and do truly good things with it.

On the other hand, think about it.

Touch screen.

Flat glass.

No buttons.

You are driving to work. You need to make a call.

You are doing 72 in the center lane.

You cannot tell whether you are pushing the right button, because there ARE no buttons.

I predict oodles of bonus crashes caused by people to have to look at their spiffy $600 phone to make a goddamned call. I hope e-baying the damned thing will incur a healthy part of their funeral cost.