//-->

Ethical Software by Alex Bunardzic

July 7, 2008, 7:37 am

Moonlight Serenade

Filed under: Music — Alex Bunardzic @

Here is how to play this famous song by Glenn Miller:

In the key of Bb, start with F6 by fretting F on the B string, 6th fret with your index finger. The pinky holds the bass note C on the low E string. Hold that chord for the duration of the bar (4/4).

Now change to B diminished, by placing your middle finger on the B bass (7th fret, low E string); bar B, G and D string with your index on the 6th fret and ass ring finger on the 7th fret of the G string. Hold for the entire bar.

Switch to Bb6, by moving your middle finger one fret down, to the Bb bass note (low E string, 6th fret). Place your ring finger on the B string 6th fret, pinky on the 7th fret G string, and index on the 5th fret D string. Hold for the entire bar (four beats).

Go down to the 3rd fret and play C9 chord.

After four beats, go up to the 8th fret and play F major 7. Then play F7 in the same position. After that, switch to F9 on the 8th fret.

Now go down to D7. After that, go up to the 10th fret and play G minor #9 (your pinky should la Bb high note on the B string 11th fret). After that, play standard C13 on the 8th fret.

Finally, go all the way down to F major chord, on the 1st fret. Play the turnaround — C diminished for 2 beats and then C7 for 2 beats. You’re done.

June 20, 2008, 6:51 am

Software Development Detox Part 5: Session

Filed under: Radical-simplicity, Resource Oriented Architecture — Alex Bunardzic @

In my previous installment (oh-my-god, it’s already been a year!), I’ve discussed the hard-wired need to retain central point of control when building software. Today, I’m going to examine the central software concept that implements this urge for control: session.

Session is a vessel used for retaining the memory of all the events that had occurred during the software interaction. It often gets implemented with the intention of providing continuity during the interaction.

Because of its central position in the overall architectural solution of a networked software, session as a concept is very brittle. It can quickly gain entropy and can end up costing a lot in terms of computing infrastructure.

On the web, however, since the prevailing architecture is stateless, the concept of session is entirely unnecessary. The memory of an interaction that may occur on the web need not be retained by any participant.

Realization of this simple dictum is proving to be extremely difficult for many software developers. They feel that, without having the crutches and training wheels that the concept of session provides, they will have no way of knowing how to make a decision on what to do next. At least when they use the state of the conversation, as recorded in the session, they can write some logic that would help them execute some meaningful actions. But without that knowledge available to them, they feel lost.

This sentiment bellies the lack of understanding of the web architecture. On the web, each request contains all the information necessary for the server code to make a decision on what to do next. There is absolutely no need for the server to keep track of any previous requests. Not only is such a task exorbitantly expensive, it also creates a single point of failure, which is the primary cause of faulty software being deployed live worldwide.

So the advice to all budding software developers is: abandon the idea of a session, and rely on your own wits when building the business logic that drives your site. Going through such software development detox procedure will ensure that you build and deliver robust, lightweight web sites that will be easy to host and maintain.

June 19, 2008, 7:08 am

World Wide Web is About Self-Serve

Filed under: Radical-simplicity — Alex Bunardzic @

Almost two years since I’ve proposed the term Resource Oriented Architecture, I am still amazed at how no one seems able to grok the concept. Posts such as this one, or this one etc., illustrate total lack of even the basic insight into the nature of the world wide web.

Everyone who is doing any software development on the web seems besotted by the concept of services. I’m not exactly sure why such religious insistence on the prominence of services on the web, but even the term web services has proven to have such staying power that it seems impossible to shake it off.

Sometimes, when we reach an impasse such as the one I’m talking about here, it may help if we step back and take a long hard look at some fundamental assumptions. Like for example, what is the world wide web, what is a resource, what is a service, and so on.

The web is a platform for encouraging communication between humans. We humans like to communicate, it’s in our blood (biologically, being mammals, communication is the bloodstream of our survival strategy). Any technology that facilitates and enriches our ability to communicate is favored by the evolutionary factors and forces.

Enter the world wide web. Overnight success, spectacular, unstoppable growth. No big surprises there.

How do we communicate on the web? Mostly by publishing resources, consuming them, and participating in repurposing already published resources.

What are these resources? Mostly textual content, peppered with some graphical and audio content.

Where do the services come into the picture? I’d say nowhere. I’m not sure I see any room for the so-called web services. I think these are made up solutions pushed on the unsuspecting web community by software vendors.

To illustrate this, I’ll use another major communications platform — public library. Public library is a collection of resources (i.e. books, CDs, DVDs etc.) How do we consume those resources? First, we identify the public library. Then, we locate the public library. Finally, we visit the public library and GET the book we’re interested in consuming.

Where in this entire process does the service enter the picture? The answer is: nowhere. Does the library, being a collection of resources, expect us to learn some proprietary protocol in order for us to consume its resources? No, of course not. The barriers to entry into the public library is phenomenally low, even non-existent. This is because the library is biased toward the “no person left behind” prime directive. The only barriers to entry into the public library is one’s own limitations (such as illiteracy, not being familiar with the alphabet, and so on).

World wide web is the same. It’s the “no person left behind” type of a deal. A huge, ever growing collection of resources that are up for grabs. Anyone who is familiar with the alphabet is invited to join the conversation.

And same as in the public library, the deal is self-serve. Come and get it. No need to depend on any middle men or any service that would exist between yourself and the published resource. Whether you are an individual, or an organization, you are entitled to use this self-serve model.

This self-serve model, of course, spells the death knell for software vendors. If everyone abandons the vendor based subscription model and goes for the self-serve model, what are poor vendors going to do?

That’s why the vendors and their foot soldiers (i.e. majority of software developers worldwide) are so adamant against the self-serve model that Resource Oriented Architecture offers. If the self-serve takes over, it will squeeze them out of their privileged positions.

But such is the cost one must pay when enjoying the unstoppable march of progress.

April 15, 2008, 10:29 pm

Seventh Annual Russian River Morning Party

Filed under: Radical-simplicity — Alex Bunardzic @

Just to let everyone know that we’re gearing up for hosting the Seventh Annual Russian River Morning Party. Details to follow.

April 8, 2008, 3:51 am

Cavatina

Filed under: Music, Guitar — Alex Bunardzic @

Written by Stanley Myers, “Cavatina” rates as one of the most beautiful songs ever recorded. Its lush harmonies are worth studying; I’d like to offer my rendition here.

The song is in the key of E. I usually play it on the guitar in the fourth position, barring the fourth fret with my index finger and then grabbing the C-shaped chord. This formation then sounds the E major chord, with the major third (G#) in the bass.

Now, you may choose to strum the chords, or to arpeggiate them (meaning, to pluck the strings one by one). Or the combination of both approaches. It’s all a matter of personal taste.

The way I hear the harmonic movement in this song, it starts with E major and moves into E major 7. Others seem to hear it as moving into G# minor rather than E major 7. The difference is rather slight, but nevertheless E major 7 sounds better to my ears. You voice that chord by grabbing the E major in the fourth position (as described above) and then simply lifting your middle finger off the fifth fret.

From E major 7 the progression goes to A major (in the fifth position), then three frets down to F# minor (grab it on the second fret). You may choose to stay on the F# minor for the entire bar, or to switch to B11 on the second half of the bar. Try both options, see what sounds better to you, and then stick to it.

Next move to B7, voiced on the second fret. Jump back to E major on the fourth fret, then E major 7 (same formation you’ve started with).

Now, switch gears to playing A major 7 on the fourth fret. Second half of the bar is F# minor, then G major 7 on the second fret, then C major 7 using open third, second and first string.

Close the phrase by playing B11 using open second and first strings, while fretting the second fret on the third string and fourth fret on the fourth string, followed by B7 on the second fret, and finally go to the open E major chord.

The above concludes the part A. Go back to the top, play part A again.

Now switch to part B. It starts with C# minor 7, played on the fourth fret. You then move to F#7 on the second fret, hop up to B major fretted on the seventh fret, then to B major 7 fretted on the sixth fret. Go to A major on the fifth fret, then up to B7 on the seventh fret, then back to E major on the fourth fret, followed by E major 7 on the fourth fret.

Finish off by playing A major 7 on the fourth fret, going down to F# minor on the second fret, then G major 7 on the second fret, then C major 7 using open strings, B11, B7 on the second fret, and finally finish off by playing open E major chord.

March 26, 2008, 6:27 am

Santana “Give Me Love”

Filed under: Music, Guitar — Alex Bunardzic @

One of the most underrated ballads ever recorded, “Give Me Love” is a pearl in the mud that is worth every effort seeking after and transcribing. Recorded in 1977 and released on Santana’s album “Festival”, this gem represents one of the pinnacles in the genre I like to call spiritual pop (Santana was famous for recording a long streak of spiritual pop music, mostly on albums such as “Caravanserai”, “Welcome”, and “Borboletta”).

The ballad in question here was recorded in a steady, even tempo, in the key of F. The shimmering opening chord arpeggio, played gorgeously by Carlos, gives way to a brief introductory vamp. The horn section enters, followed by the fantastic lead vocals by Leon Patillo. The rest defies being put into words. Just go there and listen for yourself.

Here are the chords:

Opening arpeggio — E minor 7 (pinky on the second string, third fret, index on the fifth string, second fret, all other strings open)

Opening vamp — C major 7/G minor 7 (both chords played on the third fret)

The main progression:

C major 7 - G minor 7/C7/F major 7 - Bb7/Bb major 7/B major 7/C major 7

Enjoy!

March 7, 2008, 2:03 pm

Oh Happy Day

Filed under: Music, Guitar — Alex Bunardzic @

Today I’ve figured out how to play the outta this world song “Oh Happy Day” by Edwin Hawkins Singers (1969). It’s very simple, but also very effective on the guitar. Many people, myself included, have experienced the burst-into-tears irresistible shock to the system upon hearing this song (I first heard it when I was a young kid), so I feel it’s really worth our time learning how to perform it.

The opening lick alternates between B minor and E major. It then switches to alternating between A major and D major, until it switches to brief F#7, and then back to B minor/E major.

The bridge (in double time) is E7 and then A major/D major vamp, ending in E7.

Simple, and so incredibly beautiful. Enjoy!

February 9, 2008, 5:53 am

Delusion and Arrogance

Filed under: End-user experience, Radical-simplicity — Alex Bunardzic @

The defining characteristic that separates humans from animals is that humans tend to be very self-congratulatory. We humans think of ourselves as being the ‘bees knees’ in the grand scheme of things. We are at the top of the food chain, we have no natural predators, we control our environment, and basically we are the masters who are calling the shots.

This is precisely what I’d call the height of self-delusion. Being the self-proclaimed and self-appointed masters of the universe, we are indeed the most arrogant living beings, period.

So what is it exactly that we humans are so incredibly proud of? What is our crowning achievement that sets us so high above any other living beings?

Is it perchance our ability to think in abstract terms? Let’s watch the video clip below depicting a human being engaged in an exercise of abstract thinking and reasoning. The subject is given a brief glimpse of five randomly distributed single digit numbers (each number unique, in this case the numbers are 1, 3, 4, 6 and 9). The numbers then get masked by opaque squares, and the subject is challenged to touch the masked numbers, from the lowest to the highest. The exercise then gets repeated, each time with different numbers distributed differently around the touch screen:

Ouch! That was quite bad. Let’s now watch the video depicting a chimpanzee attempting to pass the same test:

Yowza! Monkey business indeed!

There’s plenty of more similarly revealing videos coming from the Japanese research lab, underlying the chimps’ superiority over highly educated humans.

Suddenly, I don’t feel so self-congratulatory anymore. Nor do I feel so self-important anymore.

In our next installment, we’ll probe a bit deeper into what appears to be the obvious difference between humans and chimps. The results are quite revealing.

You can now go and tap yourself on the shoulder for being so superior to other living beings.

February 7, 2008, 3:20 am

Out and About the Web

Filed under: Web, End-user experience, Radical-simplicity — Alex Bunardzic @

I’ve started recently bumping into all kinds of people who seem to share similar sentiments about the world wide web. That sentiment could be summed up in one sentence: the web is broken!

Lots of people seem to think and feel that something is not right with the web. What’s more interesting is that many of these people get agitated enough with their ‘discovery’ that they feel compelled to spring into action and offer alternative solutions.

What’s even more interesting is that, historically, we could say that the web was never capable of working according to these people’s expectations. And indeed, if you talk to them, they will admit that their ‘insight’ that the web seems broken is not really new. It is just that they’ve now reached the point where they feel that the broken web has been going on for too long, and that now that it’s on its ‘last legs’, it’s high time we get a replacement for it. Something better, something that actually works.

Right now, there appear to be many proposed systems underway that seem to offer a gentler, friendlier replacement for the wild and wooly web. I’ll enlist some of the ones I’m aware of:

  1. Semantic web (the web that offers content that travels with its own meta-data)
  2. Secure web (essentially, vendorized web)
  3. Fully synchronized web (basically, guarantees no broken links)
  4. Global operating system (dismissing with the web altogether and replacing it with a nicer, friendlier platform that will offer richer multimedia experience)
  5. Search-free web (where your network of friends will anticipate and supply all that you’ll ever need or want, effectively rendering the need for searching obsolete)

I will now briefly address some of these proposed solutions, before I conclude with my own findings.

1. Semantic web

As we all know, the web is a catch-all collection of semi-random resources published world wide. Those resources are mostly represented as text, or, in rarer cases, as images, video and audio clips. All these resource representations are almost exclusively offered in a laissez faire fashion, meaning they are mostly unstructured, stream-of-consciousness type of material.

Because of that, it gets to be challenging to automate the processing of such material. Proponents of the semantic web (such as Calais) propose a solution in the form of imposing a bureaucratic infrastructure that will be placed on top of the free-range content.

The above solution is the manifestation of an effort to create a machine-friendly web. Machines are notorious for their inability to cope with context and common-sense, so they need to rely on more formalized systems in order to function. Semantic overhead proposed by the semantic web crowd aims at precisely that — decorate the free-range content with the bureaucratic overhead that would assist the machines in processing it.

The ‘barking up the wrong tree’ factor: the web was originally designed for human consumption; retrofitting it to enable the machine consumption feels like attempting to fit a square peg into a round hole.

2. Secure web

The realization that the web is not secure should not come as a big surprise to anyone. For some people, that fact alone is enough to hand in the verdict that the web is broken. These people then feel compelled to start looking for a more suitable replacement.

So why is it that the web is not secure? Is it because of the fact the information that is traveling across the network could be eavesdropped on? No, because the eavesdropping risk is not something that is unique to the web as a medium of communication.

Is it because of the fact that the web allows people to misrepresent themselves and act as confidence trickers? No, because again, this is not something that is unique to the web. Confidence tricksters and impostors have been around since the dawn of time.

So what is it, then, that makes the web feel insecure? The answer is — we don’t know. The web is not fundamentally different than any other social situation one might find in the real world. It is mostly the novelty and the unfamiliarity with the new medium that forces people to feel insecure when socializing on the web. With that conclusion, we see that most of the efforts that go toward replacing the web with some pie-in-the-sky more secure medium is merely serving to appease people’s anxieties, and not to really solve the unsolvable problem of social trust. In other words, it’s a moot point, or, fool’s gold to try and instigate the iron clad security in the social context.

3. Fully synchronized web

This is the engineers’ wet dream. Create a large system, with many movable parts, where everything s perfectly synchronized and there are no glitches and nothing falls through the cracks. Engineers would pretty much kill to be able to implement such a system, but the web ain’t that, not by any stretch of imagination. The web is a collection of extremely loosely coupled resources, meaning that there will always be broken links on the web. It’s a fact of life, and we need to learn to live with that.

4. Global operating system

Again, the engineering point of view seems to be that, since the web is running on a large collection of extremely loosely coupled disparate operating systems, it is flakey and therefore unreliable. They’d prefer to consolidate it and make it run on a single operating system. Which will then automatically become a global operating system.

However, this ain’t going to happen for the simple reason that globally, we tend to frown upon relying on a single center of power and control. This is not to say, however, that there won’t be many Dr. Evils and Mini Mes out there plotting to rule the word. Only that these guys will continue to look comical and pathetic, and will therefore continue to provide fodder for Mike Mayers and other comedians who will continue to make spoof movies covering the ‘rule the world’ conspiracy topics etc.

5. Search-free web

Some people feel that the web is broken because search is broken. Or is it the other way around? I’m never certain. Be as it may, they propose that the replacement for the ‘broken’ web will render any need for searching obsolete.

The gentler, friendlier replacement for the web that these people propose will focus on the behavioral patterns of its users and will then be able to anticipate its users’ needs. In preemptively offering the ‘goodies’ to its users, such hypothetical product will be able to fulfill their needs and so they’ll never again feel the urge to go out on a limb and search for anything.

Sounds utopian to me. There are very many holes in that particular vision, and I don’t want to bore you here with picking the glaring omissions apart. I will say, though, that the shortcoming of searching on the web today stems mostly from the wrong bias of the search engines, who are exclusively biased toward harvesting the past. More likely than not, when people are searching for something, they are interested in harvesting the future (i.e. the upcoming, or the about-to-happen events).

My conclusion

My view of the web is that it’s akin to a virus. As such, it is functioning as expected. The virus is not broken, therefore there is no need to fix it.

The virus may cause the system it’s infected to become broken (temporarily or permanently). So if there is anything in need of fixing, it’s the broken, infested systems that the web had rendered dysfunctional. So the ‘barking up a wrong tree’ factor here is: don’t waste time on fixing the virus, work on fixing the affected systems.

Over and out.

February 1, 2008, 7:34 am

In Memory of my Mother

Filed under: Art — Alex Bunardzic @

My mother, Dragica Bunardzic (1933 - 2008), died of heart attack this Saturday, January 26. She was 74 years old. Last time I saw her was on September 18, 2007, when I bid her farewell at the Vancouver International Airport.

I would now like to say a few words in memory of my mother: just as she had given me the gift of life, and was teaching me throughout my childhood and young age how to live, she had also given me the gift of death. As much as the gift of life is incredibly important, so is the gift of death.

My mother taught me that it is very important knowing how to live, but also that it is extremely important knowing how to die. This gift of death is something that I’ve never received before, and only now do I see the connection, and the essential value in knowing how to leave this earthly realm.

It is a lesson I will never forget, as it may be one of the strongest learning experiences I’ve ever had. It is a mother’s job — teach her children how to eat, how to crawl, how to walk, how to go through life, and finally, how to die. Leave it to the mother to do all that’s most important in life, and in death.

I now know the proper way to do all that, all thanks to my mother dying five days ago. It is a fantastic feeling, a fantastic gift that only a mother can give you. Because of that, I know for sure that she hadn’t lived in vain. This gift I will surely transmit to my own children and to my wife, and who knows, maybe even to others.

January 24, 2008, 3:00 am

Cloverfield: is it an A+ or an F Movie?

Filed under: Art — Alex Bunardzic @

Being an avid admirer of the monster cinematography since my early childhood, I simply couldn’t wait for Cloverfield to hit the movie theaters. As soon as the film became available, I made sure to reshuffle things around my insanely busy schedule and set aside a couple of hours in order to watch this latest monster romp.

Ever since I’ve first watched the original Godzilla movie (I can’t remember how old I was then, probably five or six), I fell in love with huge, over the top cinematographic monsters. However, after the less-than-stellar remake of Godzilla in 1998, I felt that the genre is officially dead. I was that much more surprised when, sometime around Christmas last month, I caught a glimpse of the Cloverfield monster in a TV commercial announcing this film. The TV trailer was brilliantly done, opening up an enormous can of worms in mine, as well as many other monster film lovers’ minds. The unexpected glimpse of an enormous monster roaming streets of Manhattan was enough to send us all packing. I’ve started scurrying the web for the clues etc. Finally, got to see the film and the monster in person.

Cloverfield controversy

Since I was too busy to see the film on the opening night (01-18-2007), I had to resort to reading reviews. The thing that immediately struck me about the reviews that started pouring in on Friday night was how polarized the movie goers were about this film. I can’t recall any other movie that managed to divide the audience to such an extreme extent into two clear camps: either you adore it, or you can’t stomach it.

Intrigued, I couldn’t wait to see it myself. My expectations were running incredibly high. As usual, whenever you have inflated expectations, you’re in for a bit of a surprise.

Too alien?

There is no doubt that “Cloverfield” is a breakthrough movie. I compare it to another breakthrough movie — Alien. Both films have introduced completely new techniques of presenting the ‘being right there’ feeling to the viewers. Also, both films have tendency to make huge imprint into the viewer’s psyche, and tend to linger on in the viewer’s mind for days after the initial viewing.

I only regret that I wasn’t able to experience “Cloverfield” the same way I had experienced “Alien”. When I first saw “Alien”, I didn’t know anything about it. I went into the movie theater thinking that I’ll be viewing yet anther “Star Wars” wannabe sci-fi movie. My utter shock was that much more drastic, after witnessing an alien explode out of the human chest.

I wish I was in a similar position when I watched “Cloverfield”. I wish I didn’t know anything about it, expecting only to see some lame-ass futuristic Hollywood soap drama. I can only imagine my shock and awe witnessing the unsuspected but horrible ride that “Cloverfield” is.

However, since I went into the initial viewing armed with large knowledge of the viral information I’ve collected on the web, my initial reaction was one of annoyance. I felt short-changed, cheated, swindled out of what could’ve been a tremendous monster movie.

To begin with, I felt that it wasn’t really a monster movie. It felt more like a disaster/catastrophe movie. Yes, the cause of all that disaster was the monster, but he was pretty much nowhere to be seen for the entire duration of the movie, and my eyes were hungry to feast on the imaginary creature.

Then, I felt too constrained by the single-point-of-view cinematography. I didn’t really feel annoyed that the camera is moving and shaking and swinging, I just wished there was more than one camera employed. I wished I could compare various vantage points of the event.

Also, I must admit that I’ve kind of missed bits and pieces of the story line, being much more focused on trying to spot glimpses of the monster and listening intentively for the monster’s roaring. This fact alone warrants second viewing of the film, in order for me to ‘connect the dots’.

Nevertheless, one thing that I was amazed to witness was how my initial bland reaction to the film started morphing into something that I can only label as ‘fascination’. I simply couldn’t stop thinking about it. Several hours after viewing the film, I’ve realized one thing: the film is fantastic!

Too original?

Yes, despite my lukewarm reception upon viewing it, the aftertaste of the film left me enthralled. I am definitely going back and watching it again.

But before I do that, I’d like to express a couple of more points about “Cloverfield” that kind of came to me the next day.

Firstly, I think many people are missing the point. By looking at various clues and the lack of consistencies in the film, they miss the main clue: the film feels and reads like a dream. Or, a nightmare, to be more precise. It occurred to me after a while, after I’ve been wrestling with some of the glaring and very obvious ‘inconsistencies’ in the film, that it is futile to try and parse the events as if they’re supposed to be happening in the real life. It makes much more sense to try and grasp the film as if it is a recording of someone’s dream.

This is what makes this movie so phenomenally original. I can’t recall any other film that attempts to do the same. Yes, there are many movies that portray dreams, but only as a segment in a movie that otherwise purports to portray real life events. Here, for the first time (or, at least for the first time to my limited knowledge), we seem to be dealing with a film that portrays a dream, from the first opening frame all the way down to the last frame. The movie never seems to surface up into the realm of the waking existence.

It is precisely this fact that lends it its incredibly evocative power. If you think about it, the film reads precisely like some of the most typical nightmares that many people tend to experience, at least at some point in their lives: the dream always tends to begin as a random collection of snippets, most of them collected from the recent or distant events in our past. If the dream gains momentum, it usually tends to focus on some major event, usually very abrupt and disturbing. This is equivalent to how, after some feet dragging during the bland sequences of the party, the jolt comes in as a shock (explosion followed by the short power outage).

Pretty soon, the events the protagonist of the movie dreams abut take the left turn, and we find the crowd standing on the rooftop, witnessing the fantastic fireworks whose origin is completely mysterious. If you pay closer attention to what happens next, you’ll witness something similar to what tends to unfold in many dreams — what used to be a remote happening on the horizon all of a sudden and very quickly finds its way toward us. The fire and brimstone that was bubbling at the edge of the city horizon suddenly hits the neighboring buildings and forces everyone to rush into the staircase. Almost as if by conscious intention, the dangerous debris zeros in on our protagonists. That is one more of the many clues pointing to the fact that the film is actually depicting a dream sequence.

What follows are numerous glitches and illogical sequences that are the hallmark of a typical dream. Things go from gory to comical back to gory. Eventually, amidst the turbulence of apparently barely connected events, the dreamer finds himself flying high up in the air, witnessing an incredibly powerful and exciting scene of carnage that the monster is doing on the streets of New York.

The monster itself is absolutely fantastic. Nothing even remotely resembling that creature was ever seen before. The way it moves, the way it reacts to the attacks… Indescribable!

And of course, as in any dream, the abrupt and illogical series of events drastically change the vantage point, and the dream now continues on the ground. Sure enough, the creature, which was only seconds ago observed in midtown Manhattan, is now seen stomping the Central Park’s ground, towering over the dreamer. And as is the case in almost all nightmares, the creature somehow manages to zero in precisely on the protagonist. Out of the millions of people running and screaming in the streets of New York, the monster focuses straight on the witness himself. The monstrous creature forces its otherworldly gaze upon the observer, gives him the quintessential ‘evil eye’, before going for the deadly attack.

The dream continues, illogically, and then quickly ends, also quite illogically. One is forced to wake up, and scratch one’s head, wondering what was the nightmare all about in the first place?

This, in retrospect, portrays one of the most brilliant cinematographic experiences. Once again, I feel that the absolute novelty in the way this film was conceived and shot lends it too much of an originality, perhaps hurting its general perception a bit. However, with time, the techniques introduced in this movie will become more mainstream, at which point we’ll look back and recognize it for what it is — an instant classic.

Conclusion

In closing, I’d like to emphasize that this movie should not be viewed as a mock documentary, but rather as an imaginary recording of one person’s dream/nightmare. Once the viewer makes this shift from attempting to grok the movie as if it’s an intimate documentary of a horrible disaster that have happened in one of the largest cities in the world, to observing someone’s intimate dream, many things tend to resolve themselves spontaneously. The movie then ceases to be a frustrating, infuriating experience and starts feeling like sheer poetry.

The cues hinting that we are watching someone’s dream are amply scattered throughout the film. Perhaps the most convincing clue, at least the one that helped push me over the edge, is observing the way the monster moves as it is destroying the city. Simply put, the way the monster moves is nothing even closely resembling any other creature. One quickly becomes aware of the fact that these movements don’t seem to obey any laws of physics. And as is often the case with dreams, it is precisely this violation of the laws of physics that make our dream so compelling and so immersing.

Another tell-tale sign is that, instead of experiencing sheer horror upon witnessing the terrible carnage that the creature is enforcing on the city and its inhabitants, we get the exhilarating feeling of strange and inexplicable poetic beauty. Even though many laws of physics have been violated, and the creature is supposed to be doing something extremely menacing, we feel like we cannot take our eyes off its strange, lyrical ballet.

It is to the huge credit to the movie makers (and especially to the creators of this monster) that they have been able to evoke such strange and deep emotions instead of merely going for the cheap shots of jolting and shocking and grossing us out (as most viewers of lesser intellectual capacity are so angrily complaining about, asking for a more spoon-fed approach, where everything must be fully explained to them in the movie itself; apparently, people with low brow cannot withstand even a hint of intellectual suspense and indirection).

Well done, and I can’t wait to see how will this franchise unfold.

January 20, 2008, 3:04 am

Why is Software Development on the Web so messed up?

It’s been said that those who do not learn history are doomed to repeat it. In the spirit of absolutely not wanting to go again through the excruciating pain of software development that was the norm in the ’90s and the first 5 - 6 years of the 2000s, I am going to dissect the following historical document: XML, Java, and the Future of the Web, published on October 2, 1997, by Jon Bosak.

As I walk through some of the salient points exposed in that portentous documents, I will try to bring to your attention certain glaring errors in understanding and judgment regarding what is the goal of computing and of the information processing on the web, in particular.

Let us then begin with the opening sentence:

“The extraordinary growth of the World Wide Web has been fueled by the ability it gives authors to easily and cheaply distribute electronic documents to an international audience.”

Right out of the gate, Mr. Bosak takes the left turn and commits himself to the implementational aspect of the technology he is discussing. The key concept, of course, is ‘electronic documents’. In his view, the web is useful in its ability to offer an affordable distribution channels for prefabricated electronic documents.

The problem with the Ivory Tower views of the web is that, being high-tech bent, the high priesthood inhabiting the Ivory Tower tends to view the smallest unit of processable information as an object, such as electronic document.

Following at the heels of the opening salvo, the second sentence in this paper claims:

“As Web documents have become larger and more complex, however, Web content providers have begun to experience the limitations of a medium that does not provide the extensibility, structure, and data checking needed for large-scale commercial publishing.”

This is now quite confusing. If the smallest unit of information processing on the web is an electronic document, what need for extensibility, structure and data checking is he talking about?

Let’s look at the third sentence; maybe we’ll find some clarification in there?

“The ability of Java applets to embed powerful data manipulation capabilities in Web clients makes even clearer the limitations of current methods for the transmittal of document data.”

Huh? Java applets? OK, this is completely obsolete, but still belies the unexplained bias toward powerful data manipulation capabilities in Web clients.

In the fourth sentence (and opening a new paragraph), the author introduces the concept of Extensible Markup Language, and explains:

“… an Extensible Markup Language (XML) for applications that require functionality beyond the current Hypertext Markup Language (HTML).”

What is not clear yet is what kind of “functionality beyond the current Hypertext Markup Language (HTML)” is he referring to?

HTML — imaginary limitations

After delivering the opening salvo, as exposed above, the author goes on to elaborate on the severe constraints that HTML introduces and how debilitating these constraints appear to him. Here is the author’s list:

  • Lack of Extensibility
  • Absence of Structure
  • Inability to perform Validations

Extensibility

This feature is the holly grail to developers who are keen on creating their own, proprietary protocols. The much celebrated power that Extensible Markup Language (XML) brings to the table — namely extensibility, is at the same time the most troublesome aspect of the failed attempts to engage in collaborative computing. If anyone and everyone is free to use the technology that enables them to daydream any protocol they wish (in effect creating their own unique language), the Babilonian confusion created that way must quickly reach cosmic proportions. This is exactly what’s happening right now on the web — everyone feels entitled to dream up their own bloody protocol, and the potential online conversation tends to fall mostly on deaf ears.

The author states this clearly: “HTML does not allow users to specify their own tags or attributes in order to parameterize or otherwise semantically qualify their data.” The key phrase is “their own” — which amounts to “invent your own language”.

Structure

Similar to the old adage ‘form follows function’, structure typically follows the meaning of the information. Mr. Bosak’s lament in this respect is largely unfounded, since HTML does offer fairly comprehensive structure for expressing the semantics of the represented information.

Whether the author was aware of that ability to express semantics using HTML, remains a bit of a mystery. In any event, what the author seems to be complaining about with regards to the lack of structure in HTML is the erroneously perceived need for representing complex hierarchical dependencies.

There is really no evidence that an average consumer perusing the web resources has such a pressing need for consuming large and increasingly complex hierarchical constructs. In author’s own words: “HTML does not support the specification of deep structures needed to represent database schemas or object-oriented hierarchies.”

Yes, the above is true, but the question is: why would anyone have the need to consume ‘deep structures, object-oriented hierarchies, or database schemas’? The question, of course, remains unanswered.

Validations

Let’s examine Mr. Bosak’s objection regarding HTML’s inability to perform validations: “HTML does not support the kind of language specification that allows consuming applications to check data for structural validity on importation.”

I must admit that I’m a bit confused — why would anyone use a semantic markup language, such as HTML, to perform validations on ‘importation’? Importation to where?

Responsibilities of the Web Client

The author then enlists some imaginary responsibilities that are, in his view, mandatory for the web client:

  1. Web client may have to mediate between two or more heterogeneous databases
  2. There is a need to distribute a significant proportion of the processing load from the Web server to the Web client
  3. Web client often has to present different views of the same data to different users
  4. Intelligent Web agents will attempt to tailor information discovery to the needs of individual users

The above list belies a strong desktop-centric approach to software development. All of the ‘needs’ listed in the four items above fall naturally into the server-side jurisdiction. The client is only responsible for rendering the representation that the server side business logic prepares.

Linking

Toward the end of his paper, Mr. Bosak addresses some perceived inefficiencies that he sees in the hypertext system as implemented using HTML. His list is, again, very revealing. Here is his list of perceived inefficiencies when implementing linking via HTML:

  • HTML lacks location-independent naming
  • It lacks bidirectional links
  • It lacks the ability to define links that can be specified and managed outside of documents to which they apply
  • No N-ary hyperlinks (e.g., rings, multiple windows)
  • No aggregate links (multiple sources)
  • No transclusion (the link target document appears to be part of the link source document)
  • No attributes on links (link types)

Below is my response:

Location-independent naming: Huh? If I link to a resource representation, such as google.com, how’s that location dependent? Where in that hypertext link do we see any information that would reveal location of the resource representation named google.com?

Bidirectional links: This is the engineer’s wet dream; having links that will never get broken. Not gonna happen, time to grow up and deal with reality.

Links that can be specified and managed outside of documents to which they apply: It’s the damned documents again! Snap out of the document dogma and start living in the world of resources and their representations. In other words — content!

N-ary hyperlinks (e.g., rings, multiple windows): Not sure what this means, but I really cannot see any real life use for it.

Aggregate links (multiple sources): OK, 10 years ago no one apparently knew about real simple syndication and such, plus the aggregators etc.

Transclusion (the link target document appears to be part of the link source document): Also, no clue about the mashups that will become all the rage 10 years later…

Attributes on links (link types): What on earth does that mean? Link types? Like what?

Giving Java something to do!?!

Finally, the author cites the slogan “XML gives Java something to do” (no sources quoted in the original paper).

What does he mean by this battle cry? What would he envision Java will do with XML?

It’s hard to say after more than 10 years had passed since that battle cry was uttered, but my hunch would be that he was referring to the ‘nomadic’ nature of Java. In the olden days, Sun Microsystems was selling the “network is the computer” slogan, and so at that time Sun’s trailblazing language was Java. According to Sun, Java lives on the network, and is nomadic, courtesy of RMI (Remote Method Invocation). Snippets of Java code can travel the network, on demand, in order to supply just-in-time computations on the requesting client.

Supposing that the client had just received an XML document but doesn’t know how to present it to the user, a snippet of Java code could be invoked and downloaded on a whim. Once installed on the client, Java routine will massage the XML etc.

This dated model of ‘distributed computing’ has long been pronounced dead and buried. The problem is, we still have armies of software developers who tend to think in a similar vein. Because of that, software development on the web has turned into a terrible chore, and the resulting web sites tend to be nightmarish.

The moral of this story is to learn the lesson from the history, become aware of the blind alleys that have been paved by the developers a decade ago, and learn how to avoid the minefields, pitfalls and traps of the obsolete software development practices.

You’re welcome!

January 5, 2008, 5:05 am

How to Improve Search Engines

Filed under: Radical-simplicity — Alex Bunardzic @

It’s been more than 10 years (actually, closer to 15 years now) since web search engines became mainstream. Anyone who’s been using google or similar engines is certainly becoming painfully aware of the woeful inadequacies that these engines posses. Surely the time has come to send those obsolete beasts to the elephant graveyard, and to tackle the problem with a fresh perspective.

Here, then, is a prioritized list of suggestions on how to improve the searching experience on the web:

Don’t tell me everything you know

If you meet a knowledgeable friend and ask him to help you with your next purchase of a digital camera, he’s not going to do it by blurting out absolutely everything he knows about digital cameras. That would be an overkill, and thus uncivilized.

Instead, he will most certainly engage you in a mini discovery session. Your opening question (’tell me how to buy the best digital camera?’) will be handled by gently asking several follow-up questions. Questions such as ‘what would be your budget for this purchase?’, ‘what do you intend to use this camera for?’, ‘how much previous experience with digital photography have you got?’, etc.

In a similar vein, a web search engine should engage us in refining our search. If I ask it to search the web for the “ball”, it should not simply go away and come back 0.19 seconds later with “about 346,000,000 results for ball”. 346 million results?!? Jesus, what kind of a result is that? Who on earth has the time to even entertain the idea that there could be hundreds of millions of results that are being offered?

As you can see, totally useless. Time for the google search engine to hit the old dusty trail… Same goes for all the other ‘me too’ search engines currently available on the web.

Ask me the next most reasonable question

If someone asks me “ball?”, without giving me any context for their question whatsoever, what should my most reasonable follow-up question be?

Most likely, I would ask the interrogator: “Is this question related to porn?” (most web searches tend to be pornography related, and not knowing anything about the context of the search, I’d prefer to rule out the most likely case).

If the answer is negative, I would further ask if the question is commercial in nature (i.e. is the user looking to purchase a ‘ball’ of some sorts). Being able to differentiate between commercial and non-commercial resources on the web will help us shave off many, many millions of potential ‘hits’.

Following that, I’d ask the user if the question was sports-related. If it is, then I’d ask whether the ‘ball’ the user is inquiring about is a tennis ball, or a football, a soccer ball, a volley ball, etc.

If not, is it related to dancing (as in ballroom dancing)?

And so on. We can see that a much more reasonable searching experience is inevitably associated with establishing the context by asking sensible questions based on common knowledge (as well as on a bit of statistically valid data).

Offer me to establish my search identity

Today’s search engines are dull and dumb. Even though I may be using google thousands of times each month, my each search on google is treated as if that’s the first time I’ve ever searched for anything. The results google gives back to me do not, by any stretch of imagination, reflect my personal preferences, tastes, and biases.

As such, google is not only useless, but also infuriating. Instead of being so haughty, google and other search engines should dismount their high horse and allow me to register with them as an active and avid searcher. Once I become known to these engines, I should be in the position to declare to them my preferences. Such as: “I’m not interested in any searches that are porn-related”, or “I’m not looking to spend any money on the web, so don’t bother offering me any links where someone may be selling something”. And so on, the moral is that I should be able to be in the driver’s seat and to consequently control, shape and refine the results of my searches.

Will google ever do it?

The answer is: of course not! Currently miserable and poor state of searching on the web is not there by accident. It fulfills certain agenda and certain business model. Google and other behemoths on the web obviously do not care about regular human users and their needs, they care only abut their bottom line. So, it’s all about making profit.

Because of that, I’m not holding any high hopes. The sad thing is that google does have all the means necessary to enable our searching on the web to transform from being painful and a huge waste of time, to being pleasurable and highly efficient. But, they won’t do anything to help us bridge that gap, and that’s why we must rely on our own devices, meaning, the community.

So this is a first call to the community to start uniting and working on ousting google from the search king throne. Hopefully, the open source community will once again manage to pull yet another stunt off, and to dethrone the dictators. I for one can’t wait to get a thousand-fold better search experience.

December 21, 2007, 3:26 am

Resource Representation and Discoverability

Filed under: Radical-simplicity, Resource Oriented Architecture — Alex Bunardzic @

We now seem to be entering the phase where we are in the process of reclaiming the web. Who are we reclaiming it from? Why, from no one else but the hordes of software developers.

The web has been hijacked by software developers. It is only natural that the people who dedicate their lives to becoming as intimate with the machines as is humanly possible get to be the people who take center stage in building the web. But, there is trouble in paradise. The web is, in its essence, the exact opposite of the machines. The web is all about humans.

Now, software developers are humans, however they are humans who value serving machines more than they value serving other human beings. Because of that, the web is a horrific place right now, fully dedicated to serving the machines.

This terrifying state of affairs must change. And the only way it will change is if humans reclaim the web, pry it out of the slaves-to-the-machine greedy hands, and install it at its proper place — as a platform for serving the needs of the human mind and the needs of the human social dimension.

Resources and representation

As has been argued elsewhere, resources on the web are mere abstractions. They are not the tangibles that one could indulge in. At best, one can hope to consume the representation of the abstract resources scattered around the web.

It is often erroneously assumed that resources are directly exposed on the web, in their raw form. One example would be the unanimous conviction that URLs are web’s native resources. Thus, a URL such as craigslist.org is viewed as a web resource.

Nothing could be further from the truth. A URL (such as craigslist.org) is not a web resource, it is merely a representation of a web resource. There seems to be an abstraction labeled as craigslist.org and hosted somewhere on the web. But what that abstraction (i.e. craigslist.org) really is, we have no way of knowing.

What we can learn about is one or more representations of that resource. For example, one representation of the craigslist.org resource is its URL. Another one could be the list of all the sites offered by craigslist.org. And so on.

What’s the use of representation?

Some people fail to see the usefulness of the representation. They’d much rather get their hands on the resource itself, instead of beating around the bush of resource representation. The best way to explain this problem is to employ assistance of some heavy duty science:

Map is not the territory

This famous premise was issued by Alfred Korzybski, one of the seminal thinkers who helped shape the communication and information theory.

A map is the representation of the territory. Without the map, we’d be lost when traveling through the territory.

In a similar fashion, resource representation could be viewed as a map that eases our voyage through the territory (i.e. the resource we’re exploring).

Very few people tend to question the usefulness of maps. It is our hope that, similarly, people will learn to embrace the usefulness of the resource representation.

Discoverability

The web is intended for human consumption. Humans are notorious for having fairly constrained short-term memory buffer, and are thus forced to consume information in a piecemeal fashion. The architecture of the web is therefore tailor-built to serve exactly that constraint — consume the resource representation at a fairly leisurely pace. Expecting humans to consume the resource representation in a single giant gulp would be utterly unrealistic, and so the fundamental architecture of the web is based on the principle of discoverability.

What that means is that, on the web, we are serving byte-sized chunks of resource representations. These byte-sized chunks are intended to be consumed by human users pretty much at a glance. Any need for consuming more, for learning more, gets fulfilled by letting the users explore further, allowing them to discover more intricate details of the resource representation.

Away from the sociopath web

Today’s web is mostly built by humans who crave serving the machines. As such, the way resource representations are typically architected on the web today belies the optimization to the way machines consume information. There is typically very little discoverability offered on most web sites, and the consumers of the representation are usually expected to digest insanely vast quantities of intricate information in a single gulp.

It is painfully obvious to even a very casual observer that the web today is not tailored for easy consumption by humans. It is as if some sociopaths, who lack any degree of empathy with fellow human beings, have built most of the web sites in operation today. Come to think of it, sociopaths is the fair characteristic of individuals who value interactions with the machines more than they value interacting with other human beings.

It is high time we start working on getting out of this sociopath hell.

October 22, 2007, 10:48 pm

The Web Comes to Life — Finally!

Filed under: Web, Smart servant, Social software, Radical-simplicity — Alex Bunardzic @

As some of you might already know, I’ve been working on a true web product with some of my friends. It’s been going slower than I’ve initially hoped for, and for the longest time we’ve had this feeling that we’re all alone in a vast desert.

That all changed last Friday, October 19, when I’ve received a “Welcome to smarter email” message from Sandy. Now, after giving it only a couple of days of probationary grace period, Sandy became my faithful new secretary, and the web finally feels like a civilized place it once promised to be.

What’s the Big Deal?

It’s just a freakin’ email, innit? Well, not so fast! Sandy is a brilliant piece of technology.

Remember when everyone was talking about the next killer app on the web? What will it be? Is it going to be a photo sharing site, a video sharing site, a social bookmarking site, or… Well, none of these. These are all merely frivolous, learn-the-ropes types of web sites. Soon the dust will settle, and all these sites, that are all the rave right now, will be forgotten.

But what will remain is sites like I Want Sandy. And there is a simple reason for that: sites like that one are hell bent on serving the real human needs.

Needs? What needs?

Needs such as having a reliable assistant who will pay very close attention to what you’re doing. Needs such as being able to ask many confidential questions that may save your bacon, and get a lightning fast answer back.

These are the real human needs. We humans can easily survive and get along without necessarily having to see the latest photos of our friend’s puppy. However, being able to easily and seamlessly tell our assistant to remember many details that transpire during our busy workaday lives, and then, in a pinch, being able to ask our assistant to refresh our memory and to remind us, is something that is of utmost importance to us.

Not only that, but being able to do all these things and not worry about the location or the whereabouts of any physical object, is an absolute necessity. True, we can acquire a PIM device, our little electronic personal assistant (such as an iPhone), but what happens when we forget to bring it with us? Or, when it runs out of batteries? Or, when we (gasp!) lose it?

Always there

The true promise of the web is that it is always there. And, significantly, it does not depend on any proprietary device. In other words, even if we don’t have a cell phone, or a computer, we can still walk into any library or a corner coffee shop, and get all our vitally important information delivered to us.

The beauty of the web is that it is a platform that allows us to organize our lives in such a fashion. That in turn relieves the stress of having to be married to a particular object, such as a personal computer, or a personal information manager. Anything personal implies a limited, one of a kind physical object, that needs to travel with us. This arrangement is very stressful, because physical objects tend to get lost, stolen, forgotten, and easily damaged.

The web, on the other hand, cannot possibly get stolen, forgotten, lost or damaged. As such, it is the most robust, the most reliable assistant humans could ever conceive of.

Yes, but who’s going to do the legwork?

So, the web is nothing new, and the email is nothing new, so again, what’s the big fuss about Sandy?

Well, it all comes down to the nitty-gritty — who’s going to do all this legwork? I’m a busy man, and expecting me to remember and stop what I’m doing and store all that vital information somewhere on the wiki or some other repository is totally unrealistic. Plus, when the time comes to retrieve some critical piece of info, expecting me to remember where I put it is another exercise in futility.

And so the promise of the computers and the promise of the web has been left largely unfulfilled. That is, until Sandy arrived!

You see, Sandy is a perfect human servant. Not only is she tireless and infinitely attentive, she also has unlimited and flawless memory. But on top of that, and most significantly, she is non-intrusive. And that’s the real clincher, the real value proposition that Sandy brings to the table.

From now on, all I have to do to enable Sandy to serve me is cc her on all my important emails. I may toss in a casual “Sandy, remind me to buy flowers for my wife’s birthday on Tuesday”, and Sandy will be on the job like white on rice.

The real trick is to get an assistant who will not expect me to do any legwork. Just a casual nod to the assistant should suffice. And Sandy seems to be the perfect fit. She seems to understand enough of a shorthand to be sufficiently useful, without expecting me to go out of my way to explain things to her.

Enough gushing!

OK, I’ll stop right here, and suggest you give Sandy a whirl. You should also know that I’m in no way associated with this product, nor with the team that produced this brilliant piece of work. So, in a way, I’m impartial and only look at this web site from a personal, pragmatic point of view.

Even though a proper disclaimer that ‘your mileage may vary’ seems appropriate here, I’d say that your mileage will not vary, and that you’ll get the exact same exquisite pleasure from using Sandy as I’m having right now.

October 4, 2007, 3:38 am

Knock-knock Joke

Filed under: flatliner — Alex Bunardzic @

Question: How many software developers does it take to screw in a light bulb?

Answer: That’s not funny!

September 25, 2007, 11:54 pm

Why I switched back from Rails to Assembler

Filed under: Radical-simplicity — Alex Bunardzic @

I’ve been doing Ruby on Rails for more than 2 years now. Over a year ago, I went Java and .Net free, throwing myself head first into Ruby and Rails.

During that time, I’ve been focusing on building a comprehensive next generation product, that is entirely web based and founded upon the principles of Resource Oriented Architecture. But after expending two years of unwavering effort, I’ve decided to throw the towel in and switch back to developing in Assembler. Here are the reasons why I did it:

Is there anything Ruby/Rails can do that Assembler can’t do?

For 2 years I though Rails is genius, Assembler is passe. But is it really? I mean, think about it — is there anything that would not be possible to do in Assembler? Given enough time, stamina and mindless determination, one could code pretty much anything in Assembler. So, boo to Rails!

What about the integration?

What better way to integrate to any legacy software than to drop down to the metal? At the bits and bytes level, any software looks like any other software. Big win for Assembler in this regard, big lose for Rails.

Don’t want what I don’t need

Rails comes prepackaged with tons of crap. Do I need that? Heck, I don’t even understand it, let alone need it!

Assembler, on the other hand, comes with just a small handful of handy operations (shifting bits etc.) Perfect for the radical simplicity kind of a guy I am.

It’s small and fast

As mentioned above, small and slim, Assembler is THE fastest code on earth. Ruby and Rails are so far away down the food chain when it comes to instructing the machines, it’s not even funny.

It’s built to my tastes

My tastes are simple — load a small chunk of info into the cubby hole, juggle it a bit, shift it left or right, push it, pop it, that kind of thing. That’s as abstract as I like to get. Assembler serves my tastes perfectly in that regard. Ruby and Rails — not that much.

I love bits and bytes

Like I’ve mentioned above, bits and bytes are where abstraction is at. Think about it — anything under the sun, any concept that humans care to formulate, are easily expressible using bits and bytes. Do we need anything more than this perfection?

Programming languages are like generals: they are all smart after the battle

Even though I’m abandoning Ruby and Rails and going back to my first love — Assembler — I am not saying that I haven’t learned anything from Ruby. After the battle, all generals are smart. That’s the easy part.

August 16, 2007, 8:43 am

Why is ROA Hard to Understand?

Filed under: Radical-simplicity, Resource Oriented Architecture — Alex Bunardzic @

Resource Oriented Architecture is the term I’ve coined a year ago, only to discover almost immediately afterwards that others have been thinking independently along the same lines. During the past 12 months, I’ve witnessed numerous discussion threads and debates centered around the importance of ROA. Most of these discussion threads belie complete misunderstanding of the Resource Oriented Architecture, which is very alarming, given that ROA is the native architecture of the web.

And web is the native infrastructure for information dissemination, exchange, and sharing.

Old habits die hard

Most software developers in circulation today have cut their teeth by learning how to implement computing algorithms. Something akin to: “here is a jumbled sequence of numbers, write a computer program that will sort them in ascending order”.

The emphasis in such an exercise is always on exhibiting reasonable amount of direct control over the execution logic. The would-be programmers have been groomed for generations to master the skills of gaining full control over the stream of instructions that the CPU executes. In other words, to be a computer programmer/software developer implies to them that a full control over all the processing aspects must be in place.

It’s a single point of human control, same as it’s a single point of machine control (i.e. the Central Processing Unit, or CPU).

But in the world of the web, such notions of centralized control are not only ridiculous, they are down right harmful. Still, armies of CPU-trained programmers have now been employed and deployed to develop software that will run on the web.

Is it a small wonder then that such ‘central point of control’ minded individuals are creating fully dysfunctional web sites? Indeed, old habits do die hard.

New habits are slow to emerge

What the above described situation then means is that the existing workforce that is dedicated to developing software programs is pretty much a write-off. Because old habits die hard, it is quite likely that it will be much harder to unlearn the old habits and relearn the new ones, than to start from a clean slate.

However, given the vast demand for web-based software that is out there, we must work on creating some sort of a compromise, in the attempt to bring the crusty old ‘central point of control’ software development workforce into the web fold. For that reason, we need to continue explaining the difference between the Central Processing Unit software architecture, and the Resource Oriented Architecture.

Transitioning from doing to managing

One of the hardest things to do in life is to make a successful transition from doing something to managing that same thing. The temptation to roll up one’s sleeves while managing the process is simply too strong to resist. And that’s why not too many people end up being good management material.

In the world of software development, right now there is a huge demand for people who are capable of abstaining from rolling up their sleeves and instead delegating the responsibilities to the ‘workforce’ out there.

What does that mean? In a more technical parlance, it’s been proven that once software developers get trained in making procedure calls when attempting to process some information, they tend to get addicted to that gateway drug. Similar to how to a person with a hammer everything looks like a nail, to a programmer who had learned how to make procedure calls, every information processing challenge looks like a string of procedure calls. This algorithmic frame of mind is very hard to get rid of, once a person gets it contracted. And in order to become an efficient web developer, each and every procedure-besotted person must learn to let go of the procedure call driven world view.

Transitioning from local to distributed procedure calls

Most people learn how to program computers by implementing procedure calls that are local. What that means is that their world view is CPU-centric. In other words, the executable code in its entirety is sitting on a local box, usually right next to the developer’s desk. The developer then intuitively grasps the world as consisting of a single Central Processing Unit which acts as a traffic cop, deciding on who gets to do what and when. The ‘who’ in the previous sentence refers to the procedure. Typically, a programmer will modularize his code into a fairly large number of procedures. These procedures will then be called at opportune moments, will perform the intended processing, and will then recede in the background.

This situation is the prescribed way for teaching newcomers how to develop software. It willfully ignores the real world issues, such as that there is very little use and need in having a ‘desert island’, ’single sink’ scenario, where a computer user will be sitting alone engaged in the ‘glass bead game’ on the computer. In the world of business at least (and also in the world of entertainment), multiple users are a must. Meaning, CPUs and people will be networked (999 times out of 1,000).

There inevitably comes a time when a software developer wannabe realizes that a transition from a single CPU to multiple CPUs connected via the network, is unavoidable. At that point, the newbie usually gets struck by the immense complexities that such transition entails. And it is at that point that the newbies all over the world decide to drag in the procedure call world view into the networked world.

Now the problem of control in a multi-CPU environment arises. Who’s in charge here? It used to be that a single human mind was in full charge and control over the execution of computing instructions, via the single CPU. Now, all of a sudden, multiple CPUs which are distributed across vast networks enter into the equation. The remote nodes start posing the problem when it comes to controlling the proceedings.

The only way for such developers to try and tame this complexity is to wiggle in their chairs and to fabricate some hairy-brained scheme for enabling remote procedure calls (or, RPC). Various mind-boggling protocols get implemented (CORBA, RMI, DCOM, SOAP, SOA, etc.) All of these protocols are incredibly arbitrary, non-compelling, frighteningly complex and brittle.

As we can see, this transition from making local, simple-minded procedure calls to making distributed, remote procedure calls never goes well. In the end, it inevitably results in fragile, brittle software that requires constant duct-taping and chewing-gumming in order to stay afloat.

Who’s going down with the ship?

It is obvious to even a casual observer that the majority of software projects, today as in the past, fail miserably. As the complexities of the business scenarios continue to increase at a frightening rate, this rate of failure will only skyrocket.

At this pace, it won’t be long before the software development industry turns into another Titanic, if the majority of developers continue to charge down the remote procedure call path. Developers who refuse to go down with the ship have only one option — abandon the RPC ship and hop into the ROA boat.

But as we’ve already seen, the transition from navigating a huge, unwieldy ship to rowing a tiny nimble ROA canoe is proving more challenging than most developers are prepared to bear. That’s why there must lie a major shakeout ahead of us, a shakeout that will separate the monolithic totalitarian software practices from the nimble, distributed ones. And ROA practices are certainly on the opposite side of the monolithic remote procedure calls practices.

How to make the transition?

It seems to me that, in the process of making the transition from RPC to ROA, the biggest stumbling block for the entrenched software developers lies in the fact that ROA proposes erecting an impenetrable barrier between the client and the resourses on the server. In the bad old RPC world, such barriers are unheard of. In other words, if the client is privy to the protocol that the service-oriented server had arbitrarily and unilaterally made up, the client can intimately manipulate the state of the server.

No such thing is ever possible in the ROA world. And that’s the biggest put off for the honest-to-god procedural crowd. They simply don’t seem physically capable of conceiving the world where it would not be possible to ‘crack the code’, learn the protocol, and then rule the server on the other end.

So in order to make a successful transition to ROA, these software dictators must learn how to abdicate from their dictatorial throne. What are the chances of that happening en masse any time soon?

Slim to none? What do you think?

August 15, 2007, 12:02 am

Resource Representation

Filed under: Radical-simplicity, Resource Oriented Architecture — Alex Bunardzic @

Software developers seem largely incapable of understanding the difference between resources and their representation. Understanding that difference is absolutely vital in understanding REST and the Resource Oriented Architecture (ROA).

Is it a small wonder then that we are beginning to see articles like this one (”Why is REST so hard to understand?”) pop up in the publications devoted to the web architecture? It is absolutely clear that we won’t be in the position to advance ROA practices unless we reach a critical mass of people who do possess a solid grasp of what is the difference between a resource and its representations.

Right now, it seems like only an infinitesimally small percentage of software developers are aware of the significance of that difference. For example, if we say that there are ten million software developers worldwide, 9,999,000 of these developers are blissfully ignorant that such a thing as resources and their representation even exists. Which leaves us with only about 1,000 developers who truly understand what it all means. Not a very encouraging statistics. As a matter of fact, the situation today is right down dismal.

We need to do something quickly in order to remedy this catastrophic situation. My small contribution here is to attempt to clarify the difference between resources and their representation. I will use mostly concepts from everyday life for illustration purposes. I will then attempt to draw the parallel between these concepts and the concepts one encounters in the arena of software development.

What is a Resource?

Let’s start from the top: a resource is anything that humans find useful. For example, a house might be a resource. Or, money might be a resource. We find houses very useful, because they offer certain level of comfort in our daily living. We also find money very useful, because it’s a resource that enables us to get other resources, such as houses.

Ten years ago, when I was buying my first house, I wanted to see what kind of a house can I afford. To that end I met with a mortgage broker, who interviewed me in the attempt to assess my buying power. Among other things, he needed to know how much money can I allocate towards the down payment on the house.

Once I told him how much money I have for the down payment, he was able to plug that information into his spreadsheet and then tell me what kind of mortgage do I qualify for. So I was then all set to go out and shop for the house, right?

Well, not so fast! Just because I’ve blurted out a dollar figure that I had in mind for the down payment, didn’t automatically mean that I fully qualify for that mortgage. Because, you see, my word in these matters was viewed as being largely subjective, that is, prone to miscalculations and all kinds of other aberrations. What the bank needed is a more objective assessment of my buying power. Talk is cheap, and anyone can claim that they have one hundred thousand dollars tucked away in their bank account, ready to be plopped in toward the down payment, but the reality might be somewhat different.

Because of that, the banks have devised a more impartial practice, whereby the applicant must provide what is deemed to be a more objective proof that the money really is in the applicant’s bank account.

In this example, the money that has been allocated for the down payment on the house is regarded as a resource.

What is a Representation?

Now, the down payment money we are talking about may indeed be sitting in my bank account. But how am I to truly convince the mortgage broker that it is really there? Well, I use the means of representation, that is to say, I use something else that acts on behalf of that money. For example, I use my words to convey the fact that I do have $100,000 in my bank account. My words then represent my money.

But, as we’ve seen, that representation (my words uttered in a casual conversation) is apparently not good enough for the mortgage broker. He needs something more ’solid’ before he is fully convinced that the money is actually there. Meaning, he needs a different form of representation.

Typically, what the mortgage broker would deem a fairly impartial and objective representation of my money is a piece of paper issued by my bank that claims that it is true that I do have $100,000 in my account. In other words, once the mortgage broker receives that piece of paper, he can ‘take it to the bank’, so to speak.

That piece of paper is what we call a representation of a resource. The real money is nowhere to be found in that representation, yet in a somewhat superstitious manner, all the parties involved almost religiously obey and agree that a piece of paper is as good as the real thing.

Back on the Web

The exact same protocol abides on the web. There, as in everyday, non-virtual life, we have resources which are tucked away somewhere, and all we get to see, feel and touch are the representations. Resources on the web are merely concepts that are being represented using other concepts. On the web, as in real life, no one ever gets to see, hear, feel and touch a resource. All we get is mere representations.

We are free to attempt to manipulate those representations. And even in the cases when our manipulation yields perceptible differences, we have no grounds to claim the we have actually manipulated the resource itself. All we can conclude is that the resource representation has changed under the influence of our actions, nothing more, nothing less.

For example, if there is a resource such as a volleyball tournament published on the web, I can get its representation by sending a request for it. I may then decide to destroy that tournament by manipulating the tournament’s representation. And my action may result in an affirmative representation (i.e. the resource may respond by sending me its representation which states that it has destroyed itself). I may then conclude that the volleyball tournament has, indeed, been destroyed. But I really have no way of ascertaining that. All I can claim is that I have acted upon the initial representation of that volleyball tournament, I have sent it the request to destroy itself, and I have received the confirmation that it is now destroyed. However, the resource itself may still be alive and well, existing somewhere beyond the reach of the resource representation. The only thing that is manifestly certain is that from that moment on, the resource will refuse to render its representation for the incoming requests.

This is similar to how, in the real world, no one would ever suggest that I take the mortgage broker into my bank’s safety vault and point him to the pile of cash that’s sitting there, and tell him: “Here, here’s my $100,000, please count them and let’s get on with it!” No one goes straight to the resource itself in real life, and the same holds true in the digital life as it gets distributed on the web (not to mention that even the physical cash is merely a representation of some other concept, etc.; one can never possibly get to the bottom of it, that is, the real resource is nouminal, unreachable by us mere mortals).

Understanding this distinction is vitally important if we are to move forward successfully in building the functional web of information. It is my experience that none of the developers I’ve ever worked with understand this situation, and that all of them erroneously believe that they are, at all times, working with the ‘real thing’. Nothing could be farther from the truth, so I implore all developers to take a moment and try to digest the difference between resources and their representations.

August 14, 2007, 10:46 pm

ROA and Hypertext — a False Dichotomy

Filed under: Radical-simplicity, Resource Oriented Architecture — Alex Bunardzic @

It was around this time last year that I’ve published my first reference to Resource Oriented Architecture (August 8, 2006). I’ve received numerous feedback in the past year or so, most of which revealing the fundamental misunderstanding of what does Resource Oriented Architecture (a.k.a. ROA) really mean. One of the most virulent errors in judgment revolves around the false dichotomy between resources and hypertext.

This misapprehension, that I’ve been hearing a lot about, typically goes as follows: “yes, there are resources published on the web. But they could hardly be regarded as being pivotal to the architecture of the web. A much more fundamental concept that makes the web tick is hypertext.”

This line of reasoning belies a fairly feeble mind. It fails to recognize and acknowledge that hypertext is also a resource. Such reasoning takes one type of a resource (i.e. hypertext) and pits it against all other types of resources.

The false dichotomy described here serves only to confuse the issue. Nothing is clarified if we arbitrarily single out one resource out of many existing ones, unilaterally assign that resource some ’special’ status, and then claim that all other resources are of lesser importance. That smacks of sectarianism and therefore lacks the intellectual rigor of even the most basic kind.

It is high time we realize that the web is comprised of resources and resources only. Be it a regular text, a hypertext link, or any other media type. None of these resources warrant some elevated, special status. They are all equal citizens of the web.

Next Page »