Web Technology is Dead: Long Live Web Technology.
I almost exclusively blog about Drupal here, but I decided to write about something different for once.
Its been 15 years since I built my first 'web page' and when you've been with anything for 15 years (in this case web technology) you wonder if its time for something new. I think the new thing I'm interested in is web technology. Really that's a long way of saying web tech is dead, long live web tech.
So what are the things that got me excited about the web again recently?
Having worked with database driven web applications for nearly a decade I've had to address scalability issues on occasion. If some part of your web application technology stack becomes a bottleneck you have to scale up or out. When its the database that's the problem you often scale by adding another database server and balance the load between them. But, in order to do that you have to make sure that you're databases are synchronized. Most database software these days can easily handle replication, but you have to decide on topologies and relationships between servers and which is in charge of what and when in the replication process. Long story short, you need to know a heck of a lot more about your database software and your application is all of a sudden way more complex than it used to be because the technology stack got a lot more complex.
What if you could make scaling your application data storage way easier? What if you could also communicate with that data storage system without using database connection libraries? What if you completely rethought data storage for web applications? You'd dream up CouchDB. (I don't know if the authors of it were thinking about those exact questions when they dreamed up CouchDB, but lets pretend they did).
CouchDB is a schemaless database that stores key:value pairs. You read and write to CouchDB via RESTful HTTP requests (including PUT and DELETE). You scale CouchDB by adding another node and CouchDB takes care of replication (eventually).
That's the good news. The bad news for people that have worked with traditional Relational Database Management Systems is that you completely have to rethink the way you store your data (remember CouchDB is schemaless) and have to rethink how you retrieve data (remember CouchDB is schemaless). That means wrapping your head around storing a lot more information together in a denormalized way and then wrapping your head around querying denormalized 'documents' for the bits of data you're interested in.
I'm very much in the 'wrap my head around that' phase.
HTML5 got me interested. The main reason its finally got my interest is that there are plenty of modern browsers that support most of the proposed features of HTML5 now. This includes audio and video tags (i.e. native in browser support for audio and video without the need for a plug-in like flash player). HTML5 also includes new ways of storing data on the client side beyond browser cache and cookies. There is even work on client side data storage in an SQL database and work that combines HTML5 features to provide a client side CouchDB like storage.
If you ponder stuff like low latency web application and distributed storage that last point is pretty interesting.
Finally HTML5 has two other features that I'll go into a bit more detail below.
I haven't played with this yet, but I can already see plenty of applications for it. The web workers can't manipulate the DOM, but they can make use of XMLHttpRequest. Start using your imagination or take a look at some - demos.
By now I'm sure you've heard about the HTML5 canvas element. This is an element that you can put into a page that you can programatically draw on via a standard API. You can not only draw, but you can manipulate your drawing. And by manipulate I mean you can animate, redraw, slice and dice. And by draw I mean you can draw some standard shapes and lines, but also grab and existing image and draw that onto the canvas.
Combine that power with web workers and you can start building in browser games or other fun interactive components to enhance the user experience on your site. Here's one simple game (without web workers)
Over the years we've moved from platform dependent fat clients that sat on the desktop and occasionally communicated with networked resources. Some of those apps evolved to use HTTP to make use of web serves still remaining platform dependent fat clients. All the while we saw the rise of web applications that made use of very thin clients (really nothing more than the browser as a dumb terminal).
Now we've got a world where our applications are platform independent. But, we can still be aware of limitations of the physical platform (desktop, laptop, netbook, smartphone) and make clients as thin or fat as we need them to be.
And all this is possible because of web technologies. All the old ones still support the creation of thin client apps. A lot of the newer ones make more complex fat client apps a reality. Some new ones make both fat and thin clients better with easily scaleable data storage that can live either in the client or in the cloud (or both). That is all very exciting stuff.