Tuesday, June 25, 2013

The Internet Wants To Be Free

The United States Congress wants to change the free nature of the Internet.  A free, open Internet allows communication.  That communication can be used for great good, or for evil.  It is no different than when the printing press became available.  The written word enabled the masses to communicate, and that was a threat to despotic leaders, who fought back by limiting those who would speak on dangerous subjects in public.  Jail time.  Founding Fathers.  Free Speech, a concept so important that it is the United States First Amendment.

Now the United States Congress seeks to constrain Free Speech on the Internet.  They seek a requirement to restrict use of encryption, the right to spy on all communications, back doors into systems.  Is your camera on?  No?

Also threatening the Internet is Big Media.  The fear of losing control of License and Copyright is driving Big Media to lobby Congress with Big Money in order to get bills that cripple peer-to-peer networks, filesharing and other means of information exchange.  To compormise Free Speech in order to ensure the profits of Big Media.  While they have a right to profits, that right does not trump the rights of people to communicate freely.

Other threats exist.  Organization that exist solely to collect information on people, to track their locations, their posts, their pcitures, their friends, their political beliefs.  Some of these companies collect the information and provide it to the government for free, as a work-around to limits on what information the government can collect.  The government cannot overtly spy on you, but a private citizen can, and if a private citizen spies on us through the Internet and gives that information to the government, then no laws are broken.

Big Data is the technology that allows analysts to quickly spot trends and isolate your sensitive information amongs the terabytes of information collected daily. 

All these factors threaten a free Internet, either by removing the freedom, or turning it against itself.  Think globally, act locally.  Be aware of bills such as HR1981, CISPA, SOPA and  the Cybersecurity Act of 2012.   Search for the "Electronic Frontier Foundation", information is power, don't let Congress take that powoer away from you.

How Internet Exploder fractures the Internet

In the late 1990's, Microsoft's browser was winning the market share war.  Microsoft Windows was, and still is, the predominant desktop O/S.  By bundling IE with the O/S, a society that was relatively new to computers tended to use whatever came installed. 

During the 1990's, Sun Microsystem, creator of Java, sued Microsoft repeatedly.  So did Europe.  The goal was to stop Microsoft from bundling IE with Windows.  Microsoft was able to argue that IE had been inextricably integrated into Windows, that Windows used IE in such a way that Windows would not work without IE.  Most developers laugh at the preposterous argument, but the judge granted an acquittal.  However the media attention resulted in more people trying browsers other than IE.

While IE had an overwhelming majority of the browser market, Microsoft could leverage that.  By not following javascript de facto standards, web pages were forced to be written for IE, and the cost of writing browser-specific web pages meant that many sites woudl run only on IE.  IE also employed tactics such as J-script, the Microsoft javascript variant that was slightly non-standard, so that scripts were even more likely to work only on IE. 

These days, IE is no longer claiming 90% of the devices.  IE share had waned to the 30% range for a while, but it is now back above 50%.  However, Microsoft no longer controls the browser landscape.  Moreover, the browser platforms have all kept pace with evolving HTML and javascript standards, leaving IE behind.  Finally, the browsers like Chrome, Opera and Safari have focused on performance so that they can support thick client applications.  IE9 is playing catch-up in this arena. 

So many people might not realize it, but there was a time a decade ago when the open, free nature of the Internet was not so sure of a reality.  Fortunately though we escaped a propritary grip, and have a incredible resource that unites the world.

Single Page Apps - Not your Grandparent's Thick Clients

Single Page Apps are the way to go.  They are the Holy Grail for which Client/Server has been striving since the 1990's.  Back in the the heyday of Client/Server, there was a desire to scale out applications by pushing CPU cycles to the client - distributed computing.  Technologies like COM or CORBA or RPC competed to enable applications to be installed on personal computers throughout and organization, and thus the death of the mainframe was surely imminent.

But it didn't happen.  The realization set in.  The machine-dependent code modules were nearly impossible to deploy.  Every Windows had slightly different O/S versions or MFC library differences.  Every Unix had differences in word sizes and bit orders.  organizations had more than one Operating System installed, so development required a lot of duplicity.  The platform market splintered into many small players, feracturing the development community.  People like Phillipe Khan got rich, but corporations got no where nearer their goal of removing the green screen mainframes.

With the advent of the web, the pendulum swung back the other way.  The web browser encouraged pages loaded from a server, and which submitted collected info to the server for processing.  Page submits acted very much like the old green screen apps.  But, the browsers made the apps widely available, and applications reach extended beyond the corporate walls for the first time en masse.  Now came Online Shopping, Insurance Self-Service, and Real Estate Searching.  And all was well.

But Netscape browser wanted to provide more than just statis pages whose look and feel was dictated by a back office server.  They gave us javascript, the messy, juvenile language berated by real developers.  But javascript had one tiny capability that would ultimately change the world off Application Delivery.  That feature was Xml Http Request, aka "XHR".

XHR fueled web pages could send and receive data without submitting the page.  Thick client apps could be created.  But this time, there were no deployment barriers.  The Browser platform provided an Operating System agnostic app delivery mechanism.  No installation was needed, users could run apps on demand.  The year 2010 saw the beginning of the age of the Single Page App, javascript fueled web applications that load one page and one page only - true thick-client apps.  HTML5, CSS3 and ECMAScript 5 deliver a complete thick-client platform for app development, delivered on browsers that run on any device and any O/S. 

Thank you javascript.

More Tools, More Troubles

Web development is awesome.  It is a wild frontier of rapidly evolving libraries and capabilities.  An endless plethora of puzzles to solve.  Web development is very much exposed to the HTTP protocol, and often times it is helpful to know what is going on at the HTTP layer. 

To that end, I find Fiddler is an indespensible tool.  Fiddler is like a packet-sniffer tuned to HTTP.  With it, you can diagnose the network traffic used by your web application.  If you get error responses, you can drill into detail.  You can examine cookies, request headers, response headers, whatever.  You can view query parameters in a web form, which makes reading url encoded querystring arguments recognizable at-a-glance.

Another great tool is Chrome's Advanced Rest Client.  This tools lets you consume RESTful services easily.  You can paste in an Url, and it will decompose it into querystring parameters.  You can save Urls, and organize them into projects.  And the response can be formatted as JSON, XML or Raw data.  It is very useful for debugging the RESTful services you create for your web app.

Platform and Culture

There are a few different platforms out there, the predominant being Microsoft, Java, and LAMP.  Sure there are others, but the 90% market share for client/server development is, arguable, those three.  Having worked in all three, repeatedly, for corporate enterprise project teams, I find some recurring behaviors in the culture and behaviors exhibited.

Microsoft's early history was departmental applications, whereas Java started as Enterprise-class projects.  The Departmental apps were usually less funded, and as a result attracted programmers with lower pay expectations and correspondingly lower programming skillset.  Back in the 90's, this phenomena was accepted as universally true. 

This has repurcussions today.  I find Microsoft shops to be unorganized, and characteristically they are suffer project overruns and compromise or failure.  Java shops on the other hand are usually expensive, but successful.

LAMP projects often fall into a space similar to Microsoft projects, because the community often has had little or no formal education in computer science, and is proud of its hack-approach.  However, I think that tide is turning, as the open source movement is attracting the best talent from every sector, and the open source community is based on LAMP.  LAMP is exciting, and I am glad to be a aprt of it and escape the horros of working in a Microsoft-oriented shop.