//-->

Ethical Software by Alex Bunardzic

February 5, 2009, 7:40 am

The Age of Unlimited Copying

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

I have a mix of good news/bad news to deliver today. The realization came about when I was pondering the choice of notions and words when evaluating our strategies geared toward our future survival and sustainability. One of the issues is that we seem to collectively believe that we’re at the cusp of entering the Age of Ubiquitous Computing (or Ubiquitous Computation). You know, what with the World Wide Web and all that jazz.

But wait a minute, what if the notion/word ‘computing’ (or, ‘computation’) is a misnomer? After all, what is it that we’re all so ubiquitously computing? As the clear answer to the above question is not forthcoming to me, that is always a surefire sign that we’re dealing with a misnomer here. While there is definitely no denying that we are pushing vigorously toward the ‘ubiquitous’ something, what that ’something’ is isn’t quite clear yet. Allow me now to examine that elusive activity. And please bear with me, because this examination is going to prove very useful during the forthcoming analysis.

There isn’t really that much computation, or math, that is transpiring in a day-to-day usage of the web. On the web (which is this machinery that is seemingly busting at the seams in its attempts to reach ubiquity), most of the activities revolve around searching/browsing/consuming/publishing/participating etc. Very little math overall.

That being the case, isn’t it then kind of wrong to call all the above activities ‘computations’? Yes, but if those are not ‘computations’, what are they? I’d suggest switching to another notion, a different concept: these are largely acts of copying.

So the world-wide machinery that we have collectively built (i.e. the World Wide Web), which we’re now nursing and growing in the hopes of seeing the day when, to use Bruce Sterling’s precious analogy, it will become a fully qualified varnish on barbarism, is basically best suited for one, and pretty much only one activity — copying.

As Cory Doctorow had put it so eloquently, there is never going to come a day when copying will get any harder than it actually is today (forgive the absence of the source, I promise that I will work on digging up the link documenting this gem uttered by Doctorow). Starting today and moving forward, copying on the web is only going to get easier and easer. So we see plainly that, as long as we stay on the web, in the cloud, etc., the activity of copying has a real bright future. So why is copying so important, and why would it be so desirable? Isn’t the act of copying in itself kind of worthless? If you have an original, and then you make a copy, isn’t that like degrading the original? Since when is being derivative so desirable? True, in the pre-internet days (that is to say, in the days when digital technology was in its early infancy), the act of copying couldn’t amount to much. And the situation in the pre-digital days was even worse, much, much worse. To copy anything worth copying in the olden days would mean wasting a lot of time and energy producing something that was destined to end up being merely a pale copy of the original. Because of that, only few very specialized craftspeople have ever been engaged in the copying activities.

However, the unstoppable march of human inventiveness and ingenuity had shown us that we humans are pretty much hitching our star, our overall destiny, to the technology bandwagon. And that being the case, we have gladly accepted the fact that a digital artifact, a digital replica, is often times just as good as its analog counterpart (and in some cases it is perceived as being even better than the analog original). So now we already find ourselves in the position where we often times prefer getting our greedy little hands on a digital copy of a book/article/song/photo/movie etc. then perusing the original, analog object. Digital version seems infinitely more pliable for our consumption, because it is demonstrably easer to thumb forward/backward through a digital copy without the fear of wearing it out, search through it at will (and at random), get it to follow us everywhere we go, store it safely and forward it to our friends, and so on. Not only that, but once digitized, the copy of our analog object becomes infinitely more malleable to any ad hoc efforts toward remixing and cutting and pasting through it to our heart’s content.

In other words, a digitized copy opens up completely new and unforeseen doors of creativity and imaginative actions. We humans seem to, for some reason, like that a lot.

But one thing that barely crosses our minds as we’re perusing and (ab)using these digitized representations of our analog object is that, each time we do something to it, it gets copied. And the cost of copying it is so negligible, that no one ever notices it. Now this fact is very significant, as it points to the very future of human society. Please make a mental note of this fact now, as it will come very handy a bit later in this essay.

Let me now talk for a moment about the maturing of our overall technological strategy. In the olden times, when human technology was in its germinating stages, we lived in the world of customers. This was the industrial society, where customers were expected to buy/consume products (physical objects) that were being produced by the machines. These crude days of the initial introduction of technology into the human society are now largely behind us.

According to Bruce Sterling, we have now made the transition from the customer/consumer-based economy to the end-user-based economy. Bruce claims that we now live in the world flooded with gizmos (one such gizmo being a cell phone, a veritable staple of the early 21st century economy). Just by casually glancing around, it’s getting increasingly hard to argue with that claim.

We can actually track all these advancements of technology by matching it up with the breakthrough advancements in the general purpose machines. The first major breakthrough that pretty much announced that a change everything movement was afoot, was Alan Turing’s universal ordinating machine (a.k.a. the predecessor of today’s ubiquitous computer). What this invention offered was a platform, a ground to stand on. From there, another groundbreaking invention wasn’t far off — the Internet (or, the ubiquitous planet-wide network, built on the end-to-end organizing principle).

The above two groundbreaking inventions have indeed become so ubiquitous that they have penetrated lives of all people who today coexist under the auspices of Western Civilization. It basically took a meagre 50 - 60 years for this portentous event to take hold and penetrate almost every pore of our social lives. One crucial thing to remember when we’re talking about those sorting/ordinating machines (i.e. computers) and their network effects once these machines get plugged into the world-wide cloud (i.e. the Internet, or the World Wide Web), is that both the machines and the resulting network are general purpose by design. This is significant, because the general purpose nature of these technological inventions is what turns them into tools capable of bringing different kinds of freedoms to humans.

For example, the most liberating aspect of this technological platform is that it is a general purpose copying machinery. Being a general purpose copying machinery, it has the capacity to free us from numerous constraints by offering a generous sharing platform for many of the important artifacts that our culture is comprised of. As we’ve already mentioned, it is never going to be harder to copy something on the web than it is today. This fact gives us a reason to rejoice, as it offers each and every one of us a free chance to participate in sharing many facets of our cultural heritage.

As described thus far, this generous technological platform, this stupendous copying machine, is founded upon two legs: one leg is the general purpose filtering/sorting machine (a.k.a. the computer, the ordinator), the other leg is the general purpose end-to-end communications mechanism (a.k.a. the Internet). However, for this platform to be fully functional, a third leg is required. This third leg is needed in order to give the platform true stability, so that it could reach out into the material, three dimensional world. We’ve seen that the giant ubiquitous copying machine can even today afford us the ability to make limitless copies, at practically no cost, of any cultural artifact that is of interest to us. It goes without saying that any residual cost of making a copy, no matter how tiny, will continue to shrink rapidly, until it approaches the ideal no-cost asymptote.

This is significant for various reasons. The most important reason today is that this arrangement is allowing us to rescue, at a marginal cost, copious amounts of otherwise doomed cultural artifacts. By this we mean countless out-of-print books and magazines, as well as countless other artifacts, such as sound and visual recordings. In addition to that, this ability to endlessly copy at little or no cost has opened up the doors for many talented people to freely express themselves without having to wait to be ‘discovered’ by the officially established publishing mechanisms. By far, the most interesting and exciting aspect of this newly arrived situation is our ability to produce, at will (or on a whim), something that we call object on demand. If someone discovers in their grandparents’ attic an interesting, out-of-print archival photograph, and then they make a copy of it by digitizing it using their digital camera, they can then further copy that cultural artifact by downloading it into their computer or mobile phone, publish it on the web with a simple push of a button, thus allowing anyone in the world to continue copying it till the proverbial cows come home. What’s even more exciting than that is how anyone who obtains that copy can treat it as an object on demand, meaning they can, on a whim, demand that this copy be rendered as an object (e.g. a photo) that could be framed and hung up on their kitchen wall.

This production cycle, sometimes described as cradle to cradle, is definitely a novel way to look at how we handle our everyday affairs. The most interesting and revealing change that has made its way into the mainstream society is the turning of the tides in the way we regard the hardware/software equation. In the olden days, hardware was traditionally meant to be used for hosting software. Today, the tables have turned on us, and we now view software as the platform for hosting hardware. Things got turned on their head, all thanks to the simple fact that we have built a stupendous, ubiquitous general purpose copying machinery. What we have at our disposal today is the ability to demand hardware products at will, and on the cheap (this demand comes with minimal, or sometimes no cost at all). Thus I can copy as many Linux servers as I wish and demand that my hosting provider renders them for my perusal. All that power at a ridiculously low price (which is going to quickly erode in no time). Compare that with millions of dollars that businesses of yesteryear were expected to shell out for a single server (and a pretty lame one at that). The million dollars price tag was the norm not that long ago.

Times have changed all right, but that’s nothing compared to the change that is afoot. Right now we have the ability to render, on demand, an inexpensive replica of a mind-blowing plethora of very desirable cultural artifacts, such as an out-of-print book, and out-of-circulation vinyl record, a rare photo, a forgotten TV show, a salvaged old newsprint, a powerful web hosting server, and so on. But the interesting thing is that we don’t stop there; once we’re satisfied with consuming the rendered object, we can safely pass it on, share it with our friends, neighbors, the community, the world. All that with a simple click of a button, at a next-to-nothing cost. Fantastic, right? And quite unthinkable only 15 - 20 years ago.

But what if we wanted to demand an object such as a plain glass of water? Where do we find a copy of that object, so that we could demand it?

In order to answer that question, we need to look a bit more deeply into how is it that we are able to demand, from the comfort of our homes, objects such as books, photos, movies, music, web servers and such. The answer is actually quite simple — we can afford to demand such objects because we have obtained the blueprints of these objects. If I spend some time building and configuring a web server, such as a Linux box, I have in effect created a blueprint of that object. Once created, that blueprint can be freely copied and distributed at no extra cost. Anyone in the world who has the need to demand a web server can conjure it up by utilizing the blueprint I have provided. Here’s another example: if I record my guitar performance and publish it on the web, others can freely demand that object (i.e. the recording of my performance) due to the fact that I have provided the blueprint for that object. In this case, the blueprint used for rendering my performance comes in the form of a special arrangement of bits that get copied all around the world. This unique arrangement of bits is then used by the machinery to render the signal that will be interpreted by the listeners’ brains as a ‘guitar performance.’

So we see that once we obtain the blueprint, we can demand that the object that is represented by that blueprint be rendered. Following that logic, before I can demand an object such as a plain glass of water, I need to first obtain the copy of that object’s blueprint. However, such a blueprint doesn’t seem to be available anywhere. Hence the conundrum.

“But wait”, I can already hear your cries, “even if such a blueprint was available, of what use would it be? Surely you cannot hope to be able to produce a glass of water by using an LCD screen or a pair of speakers or even some fancy holographic whachamacallit projector!”

True, my hopes of obtaining a blueprint for the plain glass of water are nothing more than castles in the sky. It’s wishful thinking, mere daydreaming.

It is precisely because of this vanity that we don’t see any blueprints for things such as plain glass of water being published. The exact same thing held true in the days before the invention of a phonograph — no one was producing vinyl records (i.e. blueprints for reproducing musical performances) before they knew that there exists a machinery that can read the blueprints and render the object on demand. So instead of putting the cart before the horse, the community is waiting for the machinery that will be capable of rendering various blueprints of various objects. But unlike machinery such as phonographs and TV screens and headphones etc., which are highly specialized machines, this hypothetical machinery must not be specialized. It must be general purpose.

This necessity simply stems from the already established two legs of the technological platform. Recall that both the ordinating machinery (the computer) and the end-to-end communication network (the internet) are general purpose machines. For the third leg (the one that will give the platform its final stability) to function properly, it must also be a general purpose machine. Once we have three general purpose legs supporting the world wide technological platform, we will get pretty darn close to understanding what does it mean to change absolutely everything.

If the general purpose ordinating machine is called ‘the computer’, and if the general purpose end-to-end communication machine is called ‘the Internet’, what is the general purpose object-on-demand machine called? Not surprisingly, we already have a name for that machine — it is called general purpose nano assembler (also called molecular assembler). A general purpose nano assembler is a machine capable of ordering and ordinating the building bricks of material reality (i.e. molecules and atoms) according to the instructions contained within the supplied blueprint. Allow me to provide a hypothetical example:

Suppose I wish to bake a loaf of bread, but then realize that I am out of wheat flour. Suppose now that I have a general purpose nano assembler mentioned in the previous paragraph, and that furthermore I can ask for a copy of the blueprint containing instructions on how to render wheat flour. I should then be able to feed that blueprint to the nano assembler, which will then, following Michael Braungart’s and William McDonough’s waste=food model, allow me to exercise my object-on-demand privileges. The outcome of this exercise will be a bag of flour made out of waste. Needless to say, I could then use that waste-turned-food bag of flour to bake a loaf of bread.

In and of itself, the above hypothetical event illustrating the act of turning waste into food on demand is mind blowing. However, much larger mind blowing things lay ahead. Let’s examine it this way: in the event of reaching the point of actually producing the general purpose nano assembler (which today still feels like pure speculative science fiction), the question remains — who are those among us who will be privileged to own these revolutionary machines? But the funny thing is that anyone who asks that question is actually missing the point, because what is being overlooked here is the fact that the first, initial general purpose nano assembler, the one with a bar code that specifies its serial number as reading something like 0000000001, has been assembled from a blueprint. What that means is that a general purpose nano assembler can bootstrap itself and assemble more versions of itself. All it basically takes to produce another general purpose nano assembler is a simple push of a Copy button. So if I have access to a nano assembler, and my less fortunate friend over there doesn’t have access to it, that’s a non-issue, because I can exercise my object-on-demand rights and produce a copy of a nano assembler for him.

So we see that a general purpose nano assembler is akin to the genie who resides inside Aladdin’s magic lamp. A wish fulfilling genie who obeys his master’s orders and can conjure up different kinds of objects — render them on demand. But the nano assembler we’re talking about here is capable of going one up on the genie — it can replicate itself, thus endlessly spreading the joy and the wealth. (in the original fairy tale, genie’s masters were not able to give genie an order to create more genies)

Conceived in this fashion, the giant general purpose copying machine has the capacity to encompass the entire planet, fulfilling many of our wishes by rendering various objects on demand by recycling waste (even in this aspect general purpose copying machines are superior to the genie since they conjure up objects by reusing waste, unlike the genie who conjures objects out of thin air, thus not doing anything useful toward reducing waste; in fact, the traditional genie only litters the place, which means he is downright harmful). So far, all of this has been nothing but good news, excellent news in fact. So where’s the catch?

As I’ve mentioned at the beginning of this article, I also have some bad news to communicate. Consider the following: in the age of unlimited copying, where pretty much any object can get copied as many times as we wish, while at the same time eliminating waste, money all of a sudden begins to pale and lose its luster. Pretty soon, money becomes meaningless. When that starts happening, we’ll all find ourselves staring at a universal crisis of ownership. In an age of unlimited copying, where absolutely everyone is entitled to produce as many copies of any object as they wish (while at the same time reducing and recycling waste), it gets impossible to continue assigning the concept of ownership to any particular person or legal entity. The days of exclusivity-based economy then come to a screeching halt.

Consider now how everything, absolutely bloody everything that we know about human life revolves around this concept of ownership and exclusivity. We have been bred, for countless generations, to deal with scarcity in our lives by employing and applying the concepts of ownership and exclusivity, and, by extension, the concept of control. In order to control something, you need to first own it by excluding others from getting anywhere near it. If we hope to get to the point where the very idea of ownership disappears, where, as John Lennon sang “Imagine no possessions, I wonder if you can?“, how are we to deal with it, if we can’t even imagine it?

If I go on the web today and I download a wikipedia article that I wish to read, can I honestly feel that I ‘own’ that article simply by the fact that I’ve downloaded its copy onto my screen? Knowing that, at the same moment, potentially millions and millions of people worldwide have also downloaded that same copy to their screens, I cannot possibly feel the pride of ownership. This artifact, this wikipedia article is an object rendered on demand, and does not entitle me to assume any exclusive position in society.

The same sentiment will prevail once we get to the point where we’re able to demand any object from the giant copying machine. The pride of ownership and exclusivity will simply not be present in that transaction.

This will then pose huge problems for most humans. Human civilization and human culture in its entirety is a veritable treasure throve filled to the brim with nuggets of wisdom on how to deal with scarcity. Scarcity comes natural to us, almost like breathing. We have never, ever in the recorded history been forced to deal with universal abundance. Making this inevitable transition from the economy that’s based on scarcity to the post-scarcity and post-exclusivity economy (the one that’s based on limitless and harmless universal abundance), will have a completely unpredictable freak-out effect on most of us. Outbursts of mindless violence will be almost unavoidable.

The most interesting thing, however, is that we have already been through this transition from scarcity to all-inclusive abundance once, and we’ve seen the consequences, and they were mostly ugly. I am talking about the infamous days of Napster, the first massively popular online resource sharing machinery. Back in the prehistoric days of the ancient web (8 - 9 years ago), Napster gave us the first glimpse and the first foretaste of things to come. Many of us, including myself, got our first cognitive dissonance shock upon experiencing Napster’s object-on-demand genie in action. One thing that most of us had trouble initially wrapping our heads around was the concept of turning scarcity into abundance; turning exclusivity into all-inclusive abundance. Here is how the cognitive dissonance typically went (at least for me, but I’ve also checked this with some of my friends, and they all share similar war stories): We all intuitively know, deep down in our bones, that you can’t have your cake and eat it too. If, for example, I obtain a bag of apples, the more I consume them, the less apples remain in the bag. Therefore, apples are a scarce resource, the one that has to be rationed and consumed carefully. That’s common sense knowledge, the one every child learns in kindergarten, if not at a much earlier age.

Applying that common wisdom to the machinery such as Napster, I knew that if there is a rare out-of-print song that is much coveted by the community, and was then suddenly made available to the community, that event should create a so-called race condition. In other words, whoever gets lucky enough to be there first and grab the much coveted object, consumes it, squirrels it away, thus winning the race, and as a consequence ends up being the envy of the group. That person can now claim victory and the rest of us can only curse our bad luck.

But shockingly, this ‘the more you grab and consume, the less of it remains’ mentality got drastically turned on its head when using Napster. On Napster, a strange thing became apparent — the more we rush to grab the object and consume it, the more that same rare and coveted object becomes readily available. More consumption actually paves the way toward much smoother, easier consumption. Sheep shit grass. Amazing! But how’s that possible? Again, we were mystified because at that time (back in 1999 - 2000) we weren’t aware of the fact that we are, for the first time ever, dealing with a massive machinery that offers unlimited, general purpose copying free of charge! By consuming all those super rare and out of print cultural artifacts, we were getting engaged, for the first time in history, in the object-on-demand revolutionary activities. Not only that, but with each individual, and let’s face it, selfish action of consuming an artifact, we were making the world for the ones who follow in our footsteps much smoother, much friendlier. Thanks to our efforts, the next wave of object demanders could get those once scarce and coveted objects much faster. Hence the cycles were getting shorter and shorter.

Until, of course, those who fancy themselves as exclusively ‘owning’ the blueprints that were being shared on Napster, issued a court injunction on March 5, 2001, ordering Napster to cease and desists and to shut down its machinery. Thus, the first innocuous attempt at turning scarcity into all-inclusive abundance and making the transition from scarcity based economy to the post-scarcity economy was a spectacular failure.

There are no indicators that would point to a different scenario once we start entering the next phase ushering into the post-scarcity economy. The crisis of ownership that this movement will entail will definitely stir up many negative, even violent sentiments, and those who view the world as consisting of the ‘haves’ and the ‘have nots’ will insist, with all their might, that they remain in the ‘haves’ camp, and that the ‘have nots’ remain in the gutter, as they always have been, labeled as the ‘unwashed masses’.

How will that conflict play out is anyone’s guess, but I am personally not convinced that the resolution could be reached in a peaceful manner.

In conclusion, we have seen that historically, all our efforts invested so far in the technological progress seem to be now converging toward the universal, all-inclusive general purpose technological platform. In other words, the odds seem to be in our favor when it comes to reaching the age of unlimited copying. What that means is that, thanks to the fundamentally generous nature of this general purpose technology, every human being is entitled, by their birthright, to engage in this copying activity to their heart’s content. And because the objects rendered on demand will use waste as the source material, no danger of over-consumption is imminent. If anything, the more we consume under this model, the more we get rid of the waste. This arrangement is unprecedented in human history. It by far surpasses even the most imaginative fairy tales (such as the already discussed Aladdin’s magic lamp). Only the Buddhist lore, which has been, from the very outset, portraying the worlds of bewildering abundance, talks about something similar to what we’ve discussed here (the Buddhist portrayal of the abundance that surpasses even the wildest imagination has its utmost culmination in the world famous Diamond Sutra).

But just as much as this prophecy excites us, the flip side of it should gravely concern us. As we’ve already mentioned, arriving at a non-rivalrous position, whereby any desirable goods could be easily rendered on demand by each and every human being, means almost certain death of economy as we know it (simply due to the fact that economy is based on the exclusive ownership of the means of production which, once everyone owns all the imaginable means of production, becomes a non-issue). Once that happens, uncontrollable outbursts of violence may be imminent. Managing and channeling this irrational side of our collective minds will be our biggest challenge in the future — the future that is rapidly and unstoppably rushing toward us.

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.

Next Page »