Archive for the ‘Programming Languages’ Category

HTML5 - It’s the New Style?

There is nothing new under the sun, right?  History repeats time and again.  It’s iterative, like some sort of Agile approach.  While it is tempting to challenge this notion when it comes to something as cutting edge as the craft of Software Development where marketeers would have you believing that we are on the cusp of revolution and that the truly new is just around the bend, fact is even software is constrained by the fundamentals of physics.  Interestingly, after eighteen years in the software industry, in the very midst of the promise of the new, it’s pretty easy to see how someone might arrive at the conclusion  that old is new.  And just like Agile development and its iterative nature, life seems to turn in cycles.  Just as with that much-vaunted SDLC delivery pattern, we can only hope that we improve the quality and completeness of the things we are working on or through.  The beginning of 2011 finds us very much in the next iteration.

I came to web development in 1995 while working in the Product Development group at CompuServe.  The company as a culture had taken to the web with a passion in the couple years prior, but none of us had really seen it as a serious threat to the health of the business itself.  We were, in many respects, the original online service.  My group was responsible for supporting an utterly proprietary set of server software and protocols (anyone remember HMI?) which were consumed by thick clients running on the desktop.  Our highly curated content was accessible at a premium and only via our network.

This whole “web thing” was free and completely out of control.  How could it possibly represent a threat to our finely manicured for-profit eco-systems?  In 1995, somewhere in the long dim corridors of upper management, someone must have seen a change.  AOL, our chief competitor, had been keen to integrate their service with the web by implementing a browser in their client application.  We began to notice a loss of membership.

With seeming impending irrelevance in the face of Mr. Berners-Lee, the game was afoot.  The Product Development group was given the mandate to grab a web technology and make something cool happen.  At the time I was largely a Visual Basic and C developer responsible for tools implementations, reporting, training, and carrying a pager as third-tier support (the usual Junior Developer stuff) and at the time Flaming Text was pretty cool, so I decided the logical place to start was with HTML since whipping up reports seemed like a no-brainer and we had this beta product from Microsoft called Active Server Pages.

I remember the frustration I experienced at the hands of the two erstwhile techs.  Coding HTML by hand was a total mental shift from the WYSIWYG of Visual Studio and writing VBScript, a nightmare to debug, felt like the worst kind of rinse/repeat troubleshooting as you tweaked and tweaked to get your scripts to run without the benefit of a strongly typed compiler and handy IDE.  I began to grow suspicious of my choice as I watched my good friend and fellow CompuServer David Hays get to play with this nifty Java programming language and something called an Applet, which looked very much like the forms development I had come to know and love.

As history will testify, CompuServe never did pull out of its hubris-driven nose dive, with AOL cleaning our clocks and then coming in to buy us out and clean house in 1997.  But David and I, and many people like us, did go on to enjoy the rest of the bubble years, sinking into the luxuriant recesses of many a candidate technology and framework.  ASP, which should have died, flourished.  Applets, not so much.  But Java soared as it began to reign supreme on the server-side and Microsoft continued to operate their “embrace and extend” approach to the Internet.

But all the while HTML formed the basis of movement forward even if browsers could never quite get their implementations lined up.  Actually, this was such a tremendous nuisance as developers were forced to spin browser checks and conditional code and formatting.  So much so that entire technologies such as Shockwave, Flash, and even SVG sought to standardize the browser experience into a single, stationary target.  Even Microsoft seemed to sense the opportunity to wrest control of browser development away from the likes of HTML and its myriad “standard” implementations by bringing Silverlight into the mix (an absolute joy to work with, BTW).

But how things have changed.  There are calls for the death of the Java programming language as (gasps) scripting languages and DLRs shove aside our beloved standbys, JavaScript is being given full language status after its inauspicious rise from multiple personality disorder, Microsoft finally came round to a web applications development platform that actually works like a web applications development platform (ASP.NET MVC2 for the curious), wars rage over the fates of Flash and Silverlight in the face of a resurgent … HTML?

Well, HTML5.  But how can this be?  How many hours of development time have been given over to so many different presentation technologies in lieu of the mire of the HTML standard implementations across all those browsers?

Enter iOS and Android and a level of crack-happiness unparalleled in the history of gadgetry.  Imagine the power of a movement that can take fifteen years of evolution in the client software of the web and simply call a halt.  And in the stead of so many candidates, these mobile platforms would posit that HTML5, a specification that won’t even enter its recommendation status for another year or more, will be the preferred content format.  It seems to me that web apps have just suffered the most massive hard reboot in Internet history.  But even Microsoft, that leviathan of technology purveyors, has, in the face of their having just launched their own client development technology, acknowledged the dominance of HTML5 on the mobile client.

And here I am in 1995 again …  So, perhaps I am no longer a Junior Developer but only a fool operates in ignorance of the currents of their craft.  And this current is very strong indeed. I cracked a book on HTML5.

Actually, I added several promising titles to my O’Reilly Safari favorites (oh, to think of the thousands of dollars I paid for technical books in the ’90s) as well as some very good videos.  I highly recommend HTML5 Mobile Web Development by Jake Carter.  It is a grand survey of the HTML5 promise in solid fifteen to thirty minute chunks with lots of sample code that actually works.

My initial thoughts regarding HTML5 is that the moniker is misleading.  There are some fairly consequential additions in the elements department (especially the “audio” and “video” elements) and a few deprecations.  Some trimming of the fat on attributes and general streamlining of mark-up and some nifty in-built formatting and validation capabilities.  Geo-location support is massive as well if you’re concern is to establish presence-specific content.  And, of course, having local storage (cookies on crack) is a big deal as well.  But the major additions in terms of rendering User Interfaces come in the form of the “canvas” element and the inclusion of the SVG and CSS3 specifications under its implementation umbrella.

HTML is a declarative approach to rendering User Interfaces in a web browser.  SVG is also a declarative approach to rendering a User Interface, albeit in the form of vectors, for the purposes of creating graphically compelling presentations that use animation extensively (like Flash or Silverlight).  And I love SVG.  I used the technology extensively, along with JavaScript, in a 2002 project for a mobile phone company that allowed their advertising department to generate marketing campaigns, upload ad layouts and approved customizable content, which in turn could be edited online (enter SVG) by their franchisee users and subsequently generate print-quality custom advertising for each of their retail locations, on-the-fly, via the web.  No biggie now, but relatively untouched territory nine years ago.  All thanks to SVG and the Adobe plug-in, which they abandoned after they acquired Macromedia in favor of Flash.

My point is, however, that SVG was its own spec and has been languishing on the periphery since its initial release.  Its inclusion in the HTML5 specification seems like a coups for its adherents but those numbers are tiny in comparison to Flash’s or even Silverlight’s developer base.  And it seems that the browser implementations are fairly flakey in comparison to even Adobe’s now aging implementation.  And no one, and I mean no one, is even talking about the inclusion of SVG in the standard for commercial considerations.  It is very much in the domain of science departments and visualization projects the institutional world over.

An argument could be made that, as an applications development platform, SVG rounds out the many new ways in which HTML5 deals with its elements (formatting, validation, etc.), by providing for visually rich experiences using vector graphics and I would certainly join the throng in saying so.  But no one is.  Case in point, the excellent video series I mentioned above makes practically no, indeed I think none at all, mention of SVG as it conducts its HTML5 tour de force.

For all of SVG’s lack of traction in the HTML5 vanguard there is an equal amount of buzz around the new “canvas” element.  Which I could (and likely will) write an entire post on unto itself.  And here, as with SVG, it is imperative that you be a JavaScript development practitioner and, unlike with SVG, have a strong understanding of immediate mode 2D graphics concepts (which are nothing new under the sun but certainly go far afield of declarative software development) and, while better performing than SVG (scene-graph based), still performs somewhat underwhelmingly on mobile devices.

It is important to note how essential Javascript has become to web applications development.  jQuery, AJAX, and their ilk opened the door to language legitimacy for Javascript, HTML5 will propel the language to new levels of DLR respect as long, again, as browser implementations are consistent and performant.  And this is a continuing trend that HTML5 does not resolve adequately, IMO.  It really only exacerbates the browser flavor problem by bringing the web applications development everything and the kitchen sink in under the auspices of browser implementations.  Inconsistency will continue to rule as far as I can tell, with browsers implementing different Javascript engines and inconsistently implementing both canvas and SVG features.

So, now, rather than choosing your preferred plug-in to write standardized code across a variety of platforms in the vein of Flash or Silverlight, we will now need to select a specific browser to target and we are once again at the whim of consumers and their buy-in to particular browsers rather than their willingness to wait the fifteen seconds it takes to install a plug-in.

Now don’t get me wrong.  I’ve been to the mountain and I love the idea of a standards-based approach to web application development, which is ultimately the intent of the group that originally posited the HTML5 specification.  I’ve been at this game too long to not recognize the promise.  And I fully intend to get cracking on a new round of apps targeting mobile platforms but even then, as things stand, you can only get native performance from using native coding tools and environments which puts us back in the problem space HTML and the many technologies it spawned sought to propel us away from.  HTML5 is a reset to be certain even if it goes far beyond the scope of its namesake and is inappropriately named.  But it seems that, yet again, in the words of the Bard, “what’s past is prologue”.

On Deck, New Languages, Web Dev Frameworks, Game Rules and the Cloud

I’ve decided to start discussing the things that I’m actively working on (most of which will unlikely be related to my day job).  It seems the best hooks for this sort of thing are those open applications I find on my desktop each morning, remnants of the night before.

Today I find that I have the NetBeans IDE open to an ERb file I’ve been reviewing.  I say reviewing because it was auto-generated using the Rails framework rather than having issued forth as instructions from my own conceptions.  I’ve begun working with Ruby and Rails (gee, I’m only six years late to the party) in an effort to expand my understanding of the latest and greatest (yes, irony) in development tools out there.  I came to Ruby because Martin Fowler suggested it as a viable alternative to my old stand-byes: Java and C#.  In a past life I found myself alternating every three to nine months between the two programming language behemoths as a result of my day job.  Ruby had been mentioned to me by an employee as something I should look into but I chalked it up to his 23 years of age (way too sexy and unproven) and kept on with my Java product development.  As it turned out, the product source was purchased, shelved, and rewritten in C#, an example of the predation of enterprise software development.  Sort of like that snake that is eating itself in an infinite and recursive loop of a meal.

In any event, all things come round full circle.  Case in point, I actually received a job offer of sorts from this former employee who is now heading up a major product development effort of his own (has it really only been four years?) and it must have been his return to my life from my own personal BC (Before China) that caused Ruby to resurface.  He actually wanted me to come work with PHP, another interpreted language I failed to learn (although I did dabble with Python if that gets me any cred).

Ruby and Rails began to seriously intrigue me because, as I worked through the inevitable Hello, Indifferent Spheroid, I found myself deeply impressed by the level of ease and degree of productivity welling up before me.  I’ve also been dabbling with “the Cloud” and discovered Heroku, a fantastic service that sits atop Amazon Web Services and makes deployment into the cloud a, wait for it, breeze.  I think I have found my prototyping tool of choice for web applications.  More on that when more of it makes it to my desktop.

I also find I have the Homesteaders rule book open.  The Homesteaders is a board game in the vein of Puerto Rico but with an auction element and some other neat little twists.  I played it last week with some old gamer friends of mine and found it very enjoyable.  But that’s not why it’s open.  I realized over time that I have read many more game rules than actually played games.  Reading game rules is sort of my thing.  I have to believe it has something to do with my love of story coupled with a strong compulsion to see systems in everything.  In rules books I find a distillation of  a universe into, ideally, a balanced set of codifications that facilitate the ultimate in education, play.  So I read them to see how designers boil concepts down into expressions that can be engaged in.  In particular, I am reading these because I have been toying around with natural language parsing and domain specific languages (another reason to be interested in Ruby) and these concise documents remind me very much of software specifications.  I also have a PDF of a design document for a semi-popular Text Adventure authoring tool’s framework open.  The framework allows for the authoring of text adventures along the lines of Zork all in a robust and very natural language.  Perhaps you have a glimmer of the arc of my thinking.  More when I am ready.

The Thoughtworks Anthology from The Pragmatic Programmers is also open.  I read this collection of articles at the beginning of 2009 and I recalled a particular article on Ruby DSLs that I thought might be helpful.  As often happens, I found myself wander off to another topic (Project Vital Signs, a going concern for me these days) and, in any event, the article on Ruby DSLs was a bit too involved for me at the moment.  I’ll have to circle back after I have my Ruby sea legs.

Man, I must be in a Thoughtworks frame of mind because a friend forwarded to me their 2010 Technology Radar report and that is also on my desktop.  I wish he had forwarded it before I started this Ruby voyage.  While Thoughtworks are true believers in Ruby there is only one mention of it in the whole document (referencing the rspec and Cucumber test gems) while C# 4.0 actually gets recommendations.  This while I investigate Ruby and begin to become disappointed with the .NET Framework in general.  Impeccable instinct, eh?

The good news though is that the final document on my desktop is a Scala tutorial.  Because learning one new language and web development framework is not enough.  In my investigation into Rails I discovered the LIFT framework which lead to ravings regarding Scala.  In fact, there’s a reason I said “prototype” in reference to Ruby on Rails.  It turns out that there are performance reasons for considering alternatives.  Even Twitter arrived at the moment I happened on by happy coincidence.  A quick look at Google App Engine boards and I discover that there is a recommended alternative to Ruby on Rails.  So I will continue with Ruby and then move on to Scala and LIFT in order to make my comparisons.  Look for more on that as the war between Ruby, Rails, and Amazon Web Services versus Scala, LIFT, and Google App Engine heats up.  It will all hang on the ease of development and productivity comparison.  I suspect I will end up with a hybrid approach to my long-term plan for world domination.

  • Disciplines

    Get Product Management Posts Get Story-related Posts Get Posts on the Study of Language Get Simulation-related Posts
  • On My Bookshelf @ LibraryThing

  • Categories


Warning: exec() [function.exec]: Unable to fork [/usr/local/bin/curl -k -D "C:\Tmp\sno6F3E.tmp" -H "User-Agent: Twitter Tools http://alexking.org/projects/wordpress" -H "Host: twitter.com:80" -H "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*" -H "Cookie: guest_id=v1%3A139793795004725125" -H "Authorization: BASIC aXNhY3JhaWc6aW5maW5pdGU=" "https://twitter.com/statuses/user_timeline.json"] in \\NAWINFS02\home\users\web\b776\rh.mcwherter\wp-includes\class-snoopy.php on line 1009

Warning: exec() [function.exec]: Unable to fork [/usr/local/bin/curl -k -D "C:\Tmp\sno6F3F.tmp" -H "User-Agent: Twitter Tools http://alexking.org/projects/wordpress" -H "Host: twitter.com:80" -H "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*" -H "Cookie: guest_id=v1%3A139793795004725125" -H "Authorization: BASIC aXNhY3JhaWc6aW5maW5pdGU=" "https://twitter.com/statuses/user_timeline.json"] in \\NAWINFS02\home\users\web\b776\rh.mcwherter\wp-includes\class-snoopy.php on line 1009

Warning: exec() [function.exec]: Unable to fork [/usr/local/bin/curl -k -D "C:\Tmp\sno6F40.tmp" -H "User-Agent: Twitter Tools http://alexking.org/projects/wordpress" -H "Host: twitter.com:80" -H "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*" -H "Cookie: guest_id=v1%3A139793795004725125" -H "Authorization: BASIC aXNhY3JhaWc6aW5maW5pdGU=" "https://twitter.com/statuses/user_timeline.json"] in \\NAWINFS02\home\users\web\b776\rh.mcwherter\wp-includes\class-snoopy.php on line 1009

Warning: exec() [function.exec]: Unable to fork [/usr/local/bin/curl -k -D "C:\Tmp\sno6F41.tmp" -H "User-Agent: Twitter Tools http://alexking.org/projects/wordpress" -H "Host: twitter.com:80" -H "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*" -H "Cookie: guest_id=v1%3A139793795004725125" -H "Authorization: BASIC aXNhY3JhaWc6aW5maW5pdGU=" "https://twitter.com/statuses/user_timeline.json"] in \\NAWINFS02\home\users\web\b776\rh.mcwherter\wp-includes\class-snoopy.php on line 1009

Warning: exec() [function.exec]: Unable to fork [/usr/local/bin/curl -k -D "C:\Tmp\sno6F42.tmp" -H "User-Agent: Twitter Tools http://alexking.org/projects/wordpress" -H "Host: twitter.com:80" -H "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*" -H "Cookie: guest_id=v1%3A139793795004725125" -H "Authorization: BASIC aXNhY3JhaWc6aW5maW5pdGU=" "https://twitter.com/statuses/user_timeline.json"] in \\NAWINFS02\home\users\web\b776\rh.mcwherter\wp-includes\class-snoopy.php on line 1009