Wednesday, March 14, 2007

Ajax made simple


Any article about Ajax should probably start by explaining that it's not a new programming language. Rather, it's a methodology that enables a greater level of user interactivity in web-based applications. Ajax is based on two languages that have been around for quite a while: JavaScript and eXtensible Markup Language (XML). The "A" in Ajax stands for asynchronous, which literally means, "not at the same time." This is the key that separates Ajax from the classic web page.
In your standard web application model, there is a "back and forth" kind of action. The user requests a web page, the page is served, and in order for the user to see any additional information, he/she must make a separate call for data for more data, which causes (at a minimum) the page to reload. Requests and responses for the new data set occur at the same time, or synchronously.
Using the Ajax methodology, you can add the same level of interactivity to your web-based applications that, previously, was unique to desktop applications. In this model, the user requests a web page and the page is loaded as normal. The difference is that each time the user needs to be presented with more data, a JavaScript makes a call back to the server and retrieves the data in an XML format. This allows the developer to change the content of the page without reloading the entire page. As you can imagine, this can be extremely appealing to the end user. Ok, so lets get started...
In order to fully understand this article, I have to assume that you already have a firm understand of HTML, JavaScript and XML. Teaching these components of Ajax is outside the scope of this article, but you can find some excellent tutorials at http://www.w3schools.org.
Now, let's describe what you are going to create. We are going to create two select boxes from which we can select a Make and Model of vehicle. The Models that we can select from will be determined by the Make that is first selected.
Aside from the HTML present, you'll need an XML file. If you don't have one handy, you can use the one from this example (20070314.xml). After you have an XML file, you'll need a JavaScript that you can call to load the XML document. For this you can copy the script below:
function ajaxRead(url, method, parameters, functionToRunWithXMLResponse) {
          var xmlObj = null;
          if (document.all) { 
               xmlObj = new ActiveXObject("Msxml2.XMLHTTP"); 
          } else { 
               xmlObj = new XMLHttpRequest(); 
          }
          
          xmlObj.onreadystatechange = function() {
               if(xmlObj.readyState == 4) {
                    if (xmlObj.status == 200) {
                         eval(functionToRunWithXMLResponse + "(xmlObj)");
                    }
                    else {
                         alert("The requested operation returned an error code: " + xmlObj.status + "\n\n" + xmlObj.statusText);
                         return;
                    }
               }
          }
          
          xmlObj.open (method, url, true);
          if (method == "POST") {
               xmlObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
               xmlObj.setRequestHeader("Content-length", parameters.length);
               xmlObj.setRequestHeader("Connection", "close");
          } else {
               parameters = "";  // Just to make sure it was called correctly.
          }
          xmlObj.send (parameters);
     }

  
The ajaxRead function will access the given URL to read the XML file once it reads the XML file it then passes the XML Document Object to whatever function you specify in the functionToRunWithXMLResponse parameter. Here is an example of how the ajaxRead function should be called:
ajaxRead('/xml/cars.xml', 'GET', '', 'loadMakes');
Once you have the XML Document Object, you can simply crack open the XML document itself with JavaScript using the Document Object Model (DOM) and have your way with the data. In the example above I have chosen to simply load the names of the Makes and Models into a pair of select boxes.
function loadMakes(objXML) {
          // Get a handle on the XML Document Object passed from the ajaxRead function.
          var xmlDoc = objXML.responseXML.documentElement;
          var arrLevelOne = xmlDoc.childNodes;
          var intLength;

          //Populate the Makes
          for (var x = 0; x < arrLevelOne.length; x++) {
               intLength = document.form1.selectMake.options.length;
               document.form1.selectMake.options[intLength] = new Option(xmlDoc.childNodes(x).childNodes(0).text, xmlDoc.childNodes(x).childNodes(0).text);
          }
          document.form1.selectMake.options[0] = new Option("Select a Make", "Select a Make");
          document.form1.selectMake.options.selectedIndex = 0;
     }
The last thing I did to complete the example given was create another JavaScript function that loaded the Models based on make that ran when the onChangeevent fired from the Make select box.
Using this method of web application development, developers can create fully interactive applications that enrich the user's experience and actually change the way your site's visitors think about the web.
Supporting documents:

Wednesday, March 7, 2007

PowerPoint tip for giving a presentation on a tight schedule


If you have a tight schedule and a lengthy presentation or class to give, you can add a little something to the master slide of your presentation to make sure you stay on time. Using the steps outlined below, you will be able to add a small notice (for yourself) to let you know when you need wrap up the current topic and move on to the next slide.
Open the master slide of your presentation and place a small graphic in one of the bottom corners. Right-click on the graphic and select Custom Animation. Add an entrance effect of your choosing. (I find that the Fade effect works very well since it is subtle.) After you have selected an effect, it will appear in the window below. Click on the effect, click on the down arrow next to the effect, then select Timing. Set the start event to With Previous, and then set the Delay. This would be however long you want to give yourself for each slide. (I give myself 2.5 minutes for each slide, so I would set the Delay to 150 seconds.) Click Ok and you're done.
Now that you have this set up, as you are going through the presentation glance up at the screen every so often. When you see the graphic appear, you know its time to move on. Be careful to not go crazy watching the screen or your students will notice and will be distracted. I’ve found that this little trick is extremely useful.
Until next time, remember: When working on something important, it's not possible to hit CTRL-S (Save) too many times.

Monday, September 18, 2006

Senator Kennedy Makes a Stand for Net Neutrality (op/ed)


This short post is meant to publicize a video posted by Senator Ted Kennedy on youtube.com. 
Senator Kennedy is one of the first politicians to voice his opinion in favor of Net Neutrality.

Friday, August 25, 2006

Clorox won't make the web any better... but AJAX will!


In 1995 Netscape hired Brendan Eich to take charge of a development project in which they were creating a new programming language to add interactivity to web pages.  This language was called LiveScript by the developers because of its ability to change itself and web page content.  Later, when the language was released to the public, it was announced as JavaScript.  As it turns out, this was a change that didn't make much difference to the marketers who made the decision, but have made things very confusing for up-and-coming web developers ever since.
Just following, the eXtensible Markup Language (XML) was developed in 1996.  Simply put, XML is a markup language (not a programming language) that is used to define and describe data. 
While these two languages have been around for quite some time, it has only been during recent years that people have discovered the potential made possible by combining them.
By combining JavaScript, a primarily web-based programming language, with XML, which is used to define and describe data, it is possible to dynamically access data and data descriptions over the web.  This method of combining these two is known as AJAX: Asyncronous Javascript + XML.  Now, I know that sounds like a lot at once, but take a look at our example and you'll see how easy it can be.
In order to demonstrate how cool AJAX can be, I created an AJAX-based Instant Messenger (click here).
Notice that when you post a message, or receive one, the window does not refresh; there is no "post back".  This is because every time you send a message, there is a JavaScript that is dynamically creating a new browser instance with which to send the message.  It then receives an XML response with all of the current messages that have been posted.  Feel free to dig around in the source code.
The term "Web 2.0" is being used to describe where we are headed once all web-based applications are using AJAX to interact with users.  Imagine the possibilities...

Tuesday, August 8, 2006

If my math is right, Bill Gates owes me $1.78 million!


A few years ago an email started it's way around the Internet that was, supposedly, from Microsoft.  In this email, it stated that Microsoft had placed a tracing mechanism in the body of the message and that Microsoft was going to pay $1 for each person that received the email because of you.  The idea was that you might send it to four people ($4), and those four might send it to four more ($20).  Five generations later, Microsoft owes you $21,844!
There are several different versions of this email and all of them are hoaxes.  I know, I know... It's unbelievable to think that something you receive in your email might not be pure facts. 
One of the more recent emails being forwarded to hither and yon shows several pictures of muslim people demonstrating.  This email says that the photos are from a demonstration in London that was titled the "Religion of Peace Demonstration".  The photos depict several hundred protesters holding signs that are not exactly... what's the word... "friendly."
However, this email is only a half-truth which, according to the way my Dad raised me, is far from a complete truth.
The pictures in this email were taken on February 3, 2006.  There was, in fact, a demonstration on this day in London, but it was to protest the political cartoons that were originally published in a Danish newspaper and later reprinted in several other publications.  These "cartoons" were very offensive to Muslims world-wide.  (Click here to read more on this story.)
Emails of this kind are becoming more and more common.  The old axiom that, "You can't believe everything you read," stays especially true for email. 
Now, I have to go check  my Hotmail account... I'm expecting some information from the Prince of Botswana who needs my bank account information so that he can escape the military coup that is after his money.

Friday, July 28, 2006

Microsoft officially decides to use the Internet (op/ed)


Ray Ozzie, Microsoft's Chief Software Architect (the position formerly held by Internet mogul Bill Gates), announced yesterday to a conference of investors and share-holders that Microsoft will be officially changing it's primary focus from PC-based applications to those that are more more net-centric. 
The difference, of course, is that PC-based applications are installed on (and run from) your computer, where net-centric (aka Internet-based or web-based) applications do not require installation on your computer and are run from a web server.  The biggest advantage to using web-based applications is support and maintenance.  You don't have to touch each and every machine when you are ready to upgrade to a new version of software or apply a patch if your application is web-based.  You can just install it on the web server once, and each user gets to reap the benefits.
Getting back to Microsoft's announcement: What I have a hard time understanding is... What took so long?
With Google's latest web-based applications (i.e. EarthVideoMapsLocal and especially Google Spreadsheets) it's obvious that Microsoft has been called out on the carpet to make the move to web-based applications.  With all the latest advances with AJAX (asyncronous JavaScript used in conjuction with XML), web-based applications can now perform most of the same functions as desktop applications.
To me this move seems economical, logical, intelligent, and well... obvious.  While the rest of the world is busy writing AJAX enabled web-based applications, Microsoft is putting the finishing touches on Office 12. 
How will this announcement effect you?  Keep an eye out for MS Office 13 on a web server near you.

Tuesday, June 13, 2006

Is the Net Neutrality Bill dying?


I was digging for stories for our next podcast, when I saw a headline that caught my eye.  "Don't bet on 'net neutrality,' senator says." (link)  If you haven't already been familiarized with this, here is a brief synopsis...
The backbone of the Internet consists of the worlds largest telco's: AT&T, Southwestern Bell, and the like.  They, as most people on the planet, don't think they make enough money for there services.  They are already charging you, the consumer, for your Internet access.  But they have realized that, like a bad night at the roxbury, there are two parties involved in an Internet transaction.  So if 95% of their bandwidth is going to Google, then they want to be able to send Google a bill.
Now, if you don't already see the HUGE problem here then allow me to spell it out for you.  If Yahoo pays AT&T for their bandwidth, and Google does not, then do you think you will be able to get to Google anymore?  If you said "no", then go buy yourself a melon.
If the Network Neutrality Bill (or at least some version of it) fails, we can all sit back and watch the Internet fall apart.  The House of Representatives has already voted on and denied the bill, but the Senate has not yet voted.  Please contact your Senator's office (link) soon and tell them to vote FOR the Network Neutrality Bill.  Don't let the giant corporations ruin the Internet for all of us.