# Thursday, 30 January 2014
# Wednesday, 29 January 2014

Ajax refers to the pattern of calling server-side methods from client-side JavaScript. jQuery provides a simple, straightforward method for making Ajax calls. The syntax is

$.ajax({
            url: ServiceEndpoint,
            dataType: ReturnDataType,
            type: HttpVerb,
            data: Data,
            error: function (err) {
                // Code to run when error returned
            },
            success: function (data) {
                // Code to run when successfully returned
            }
          });

where

  • ServiceEndpoint is the URL of the method to call on the server
  • ReturnDataType is the data format we expect the server method to return (“xml”, “html”, “script”, “json”, “jsonp”, or “text”). You can specify multiple values and the server will return the first matching format type that is supported by this method.
  • HttpVerb is the HTTP verb (“GET”, “POST”, “PUT”, or “DELETE”) to use to send data to the server.
  • Data is the data (if any) that is sent from the client to the server.

By default the Ajax method executes asynchronously. When a call returns from the server, jQuery will run the function specified in the success parameter (if the call returned successfully); or the function in the error parameter if an exception occurred. These functions accept return data or error information returned from the server as parameters, so that your client-side code can handle return values effectively.

Ajax can provide a much more responsive experience to your web page and jQuery can make ease the process of making Ajax calls.

Wednesday, 29 January 2014 17:03:00 (GMT Standard Time, UTC+00:00)
# Tuesday, 28 January 2014
Tuesday, 28 January 2014 03:14:00 (GMT Standard Time, UTC+00:00)
# Sunday, 26 January 2014

In the last article, I showed how to use jQuery to select elements in the Document Object Model (DOM) of a web page. In this article, I will show things you can do with those selections.

Calling Methods on Selections

We can call methods on the list of objects returned by a selection simply by appending a dot, followed by the method call and any arguments to the selection syntax. For example, the following jQuery will hide all the anchor tags on a page:

$(“a”).hide();

Binding Functions to Selections

One of the powers of jQuery is the ease with which we can bind a function to the events of an object, so that this function executes whenever the event fires. To do so, simply append a selection with a dot followed by the name of the event; then, pass the function as an argument to the event, as shown below:

$(selection).eventname(function(){
…
}

For example, the click event fires when a user clicks on a page element. The following sample binds a function to the click event of an element with the ID “Div1”:

$(“#Div1”).click(function(){
…
}

The (document).ready event

The document variable is defined within the jQuery script. Selecting this variable with $(document) will return the document as a whole. The most common use for this selector is to bind a function to the document’s ready event. The syntax for this is

$(document).ready(function(){
    …
});

I have omitted the body of the function in this case, but notice the anonymous function declaration. In JavaScript, we don’t need to assign a name to a function if we are binding it to an event – we only need to pass that function to the method name. This is common syntax in JavaScript.

In fact, binding a function to the document ready event is so common, that its syntax can be shortened to simply surrounding a function with parentheses preceded by “$”, as shown in the following snippet, which does the same thing as the previous snippet

$(function(){
    …
});

Putting it All Together

We can nest functions in jQuery and we often do so by binding code to events when the document.ready event fires, as in the following example:
<script type="text/javascript" src="jquery-1.10.2.min.js"></script>
<script type="text/javascript">
   $(function(){
    $(“#HideTextDiv”).click(function(){
     $(“#Div1”).hide();
    });
    $(“#ShowTextDiv”).click(function(){
     $(“#Div1”).show();
    });
   });
</script>

In this article, I showed how to manipulate selected elements and bind events to those elements. This can be done when a page loads by adding code to the document.ready event.

Sunday, 26 January 2014 17:00:00 (GMT Standard Time, UTC+00:00)
# Saturday, 25 January 2014

How JavaScript Interacts with a Web Page

When a web page loads in a web browser, the browser loads all elements into memory. Each element on a page exists in a containership hierarchy – that is, each element is contained within another element with the document itself at the top of this containership hierarchy. Containership is defined by tags that are opened and closed between the opening and closing tags of another element. For example, the simple page in the listing below is loaded into memory in an object graph similar to that shown in Figure 1.

<html>
  <head>
    <title>My Page</title>
    <script
       type="text/javascript“
       src="http://code.jquery.com/jquery-1.7.1.min.js ">
    </script>
  </head>
  <body>
    <div>
       <p>
          This a <a href="Page2.htm">link</a>
       </p>
    </div>
    <div>
       Colors:
       <ul>
          <li>Red</li>
          <li>Orange</li>
          <li>Yellow</li>
       </ul>
    </div>
  </body>
</html>

image 
Fig. 1

jQuery keyword

Because jQuery is JavaScript, it can be mixed with native JavaScript in your script files. The jQuery object is defined in the jQuery file and you can use it via the “jQuery” keyword. This keyword tells the parser that what follows is jQuery syntax. This keyword is so common that it can be shortened to the simpler “$”.

“$” is used to define selectors and to call methods defined in the jQuery scripts.

Selectors

Most of what you will do with jQuery involves selecting a set of objects and performing some action on those objects, such as

· Changing the properties of each object in the set

· Binding code to an event of the objects

· Calling a method on each object

You can return a set of objects with the following jQuery syntax:

$(selector)

where selector is a snippet identifying which objects to select. The syntax of a jQuery selector is similar to the syntax for a CSS selector. The most common selectors are for a tag, and ID, and a Class Name, as shown in the list below.

Selector

Select by…

Example

“#xxx”

ID

$(“#MyDiv”)

“.xxx”

Class Name

$(“.MyClass”)

“xxx”

Element Type

$(“a”)

Xxx

Variable Name

$(document)

A selector preceded by “#” will be interpreted as an ID selector. jQuery will search the page for any element that matches the ID that follows “#” in the selector.

A selector preceded by “.” will be interpreted as a Class selector. jQuery will search the page for any element assigned the name of the Class that follows “.” in the selector.

A selector with no preceding characters will be interpreted as a Tag selector. jQuery will search the page for any element with the tag name identified in the selector.

Advanced Selectors

Combining Selectors

It is possible to combine selectors to either narrow your selection or establish containership.

Two selectors separated by a space indicate that jQuery should select the second selector only if it is found within the first selector. For example, $(“div a”) selects every anchor tag that is contained within a div tag.

Two selectors concatenated without a space indicate that jQuery should select only objects that match both selection criteria. For example, $(“div.BodyText”) selects any div tag that contains the attribute class=”BodyText”.

Set-based Selectors

By default, jQuery selectors always select a set of elements, even if that set may contain zero, one, or more than one element. However, we can refine a selection further by appending filters to a selection, such as “:first”, to select only the first element in the selected list of elements; “:last”, to select the last element in the selected list; “:even”, to select only the even-numbered elements; and “:odd”, to select only the odd-numbered elements. When even and odd selectors, it is important to note that the sets start with index number 1.

For example, $(“div:first”) selects the first div on the page, while $(“a:even”) selects every other anchor on the page, beginning with the second.

In this article, I described how to select objects on a web page with jQuery. In the next article, I will show things that we can do with those selections.

Saturday, 25 January 2014 17:56:00 (GMT Standard Time, UTC+00:00)
# Friday, 24 January 2014

Accessing jQuery From Your Site

To start using jQuery, simply add a reference to the jQuery library as in the following example:

<script 
    type="text/javascript" 
    src="scripts/jquery-1.10.2.min.js"></script>

Of course, you will need to download jQuery from http://jQuery.com and save it in your site’s scripts folder for the location above to work. Also, the currently downloaded version may have a slightly different name as the version number is included in the file name.

Using a Content Delivery Network

Alternatively, you can connect to jQuery on a Content Delivery Network (CDN), such as one provided by jQuery, Microsoft, or Google, in the following manner:

<script 
  type="text/javascript" 
  src=“http://ajax.microsoft.com/ajax/jquery/jquery-1.10.2.min.js">
</script>

or

<script 
  type="text/javascript"
  src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>

or

<script 
  type="text/javascript" 
  src="http://code.jquery.com/jquery-1.10.2.min.js ">
</script>

A CDN offers the following advantages:

  1. A CDN has servers around the world, so it can serve up files closer to the client that requested them, so they download faster.
  2. Most web clients cache files by default, so the client may already have a cached copy of the jQuery script file and may not need to download it again.

Adding jQuery to your site or page is simple and fast. In my next article, I will talk about the syntax of jQuery and how to use it to select objects on a web page.

Friday, 24 January 2014 17:42:00 (GMT Standard Time, UTC+00:00)
# Thursday, 23 January 2014

I began to write web applications in the 1990s and, from the beginning, I understood that client-side scripting would enhance my applications. If I wanted to update part of a web page, client-side scripting could do so quickly and elegantly and without sending a new request to the server or refreshing the entire page and I knew it.

JavaScript quickly became the de facto language of the web and, unfortunately, I was never very good at JavaScript. One reason I struggled with JavaScript was because each browsers implemented JavaScript in its own way and sometimes the language diverged from one browser to the next. For example, the following JavaScript code is necessary to perform the simple task of retrieving an element from a web page:

var id = "Div1";
var elm = null;
  if (document.getElementById)
  {
    elm = document.getElementById(id);
  }
  else if (document.all)
  {
    elm = document.all[id];
  }
  else if (document.layers)
  {
    elm = document.layers[id];
  }

Notice there are several different JavaScript commands that retrieve an element by its ID. Some commands work in some browsers, but not in others. The code snippet above has to test the validity of each command until it settles on one that works within the current browser.

This simple task is complicated by the different JavaScript engines.

Eventually, I discovered jQuery and the problem of cross-browser client-side program went away. jQuery is a JavaScript library that allows a developer to write code that works across disparate browsers, without the necessity of trying multiple commands. The jQuery core library takes care of the different JavaScript implementations. For example, the code above is simplified in jQuery to

var elm = $("#Div1");

This is a simple task, yet it underscores the terseness and simplicity of jQuery. All the cross-platform code is abstracted away when I use jQuery, making my JavaScript much easier to read and maintain.

Thursday, 23 January 2014 17:37:00 (GMT Standard Time, UTC+00:00)
# Wednesday, 22 January 2014

It was a little over five years ago in Sandusky, OH. I was attending Codemash - a conference that had yet to become as famous as it is today - and I had brought a video camera with me. My plan was to interview conference attendees on camera - asking them about a favourite technology or a project of which they were particularly proud. The first person who agreed to an interview was Steve Smith. Steve was delivering a talk later in the day on performance and scalability, so we talked about that. It went really well and gave me confidence to interview a few more people. I discovered that John Kellar also brought a video camera and was involved in a similar project. He had already released a couple episodes, so I interviewed him about his strategies for producing his show. It took me almost a month before I was able to edit the videos and produce something worth sharing. Originally, I posted them to my blog; but within a year, I had registered the TechnologyAndFriends.com domain and moved all episodes over to that site. 

I elected to make John’s interview Episode 1 because that served as a good intro to the show.

I’ve made a few changes to the format over the years: The show tends to be a little longer now than the first few episodes, some of which were under 5 minutes; I’ve created a couple different intros and outros for the show over the years; and I’ve experimented with the show’s music, now settling on an open source song recorded by DJ Cline, which I like and which won’t tempt copyright lawyers.

Last week, I published Episode 300, which featured clips from the previous 99 episodes. I marked episodes 100 and 200 with similar montages.

I’m proud to see the show last as long as it has; I’m proud that people still watch and tell me they enjoy it; I’m proud of the outstanding guests I’ve been able to persuade to appear on the show. I’ve learned enough over the years to improve the quality of the show – I’m better able to think on my feet and ask follow up questions, and I’ve bought much better audio equipment and become more proficient at my editing tools. One thing I’m particularly proud of is that I have released a new episode every week for the last 2 years. I believe this consistency is important in order to maintain a regular viewership.

I can’t predict how long I will continue this project, but my hope is it will be at least another 5 years and at least another 300 shows.

If you are a regular viewer, I thank you. If you are unfamiliar with the show, I welcome you to check it out at http://technologyandfriends.com.

TechnologyAndFriends

Wednesday, 22 January 2014 16:40:52 (GMT Standard Time, UTC+00:00)
# Tuesday, 21 January 2014
Are We There Yet? displays a list of popular vacation destinations, organized by destination type, such as national parks, cities, and attractions. Drill down into each destination to learn more about traveling there. The app also includes travel tips, and uesful links such as directions and weather. This is a small app, but useful if you are planning a vacation. You can download Are We There Yet? at this link.
Tuesday, 21 January 2014 20:47:16 (GMT Standard Time, UTC+00:00)
# Monday, 20 January 2014
Monday, 20 January 2014 22:22:00 (GMT Standard Time, UTC+00:00)
# Monday, 13 January 2014
# Wednesday, 08 January 2014

With the help of others in the developer community, Rob Gibbens hosted a Windows 8 / Windows Phone development hackathon. Despite the winter storm, over 2 dozen developers showed up and submitted 17 apps. Here are a few of the apps created that day:

Windows 8 Store apps

Text Adventure RT

http://apps.microsoft.com/windows/en-us/app/text-adventure-rt/0a74afaa-6524-47d8-b439-275d19f7d99a 
Tells a bit of an adventure story; then, asks the reader what to do next. The next bit of the story depends on the reader's choice.

CHRISTmas Music Videos

http://apps.microsoft.com/webpdp/app/83c829cc-a4b7-4942-9186-e8e8435db948
A collection of music videos featuring Christmas music played by Christian artists.

Khabree

http://apps.microsoft.com/windows/en-us/app/khabree/2e0d3a38-b2c1-442b-a748-5839a00b1ce4
An RSS reader that allows you to categorize your feeds
Screenshot.292259.100000[1]

JIMNA
http://apps.microsoft.com/webpdp/app/c843e38f-36f3-4cf3-9f88-6c897084ee2f
This app allows the customers ofJenptik Industrial Metrology North America designs (JIMNA) to view items in their system. One needs a username and password to use this app.

JIMNA

http://apps.microsoft.com/webpdp/app/c843e38f-36f3-4cf3-9f88-6c897084ee2f
This app allows the customers ofJenptik Industrial Metrology North America designs (JIMNA) to view items in their system. One needs a username and password to use this app.

SportsTube – Michigan State Football

http://apps.microsoft.com/windows/en-us/app/sportstube-michigan-state/c2f3b93b-d1c2-42d4-b857-c5e4e80a385b

A collection of videos of the storied MSU football team.

WINDOWS PHONE

Remember When

http://www.windowsphone.com/en-us/store/app/remember-when/0f72ad9c-9b35-44ed-b580-d895296ff66e

This app allows you to keep track of the last time you did something, such as changing your oil or getting a hair cut. It costs $.99 but there is a free trial.

Apps | Phone | Windows8
Wednesday, 08 January 2014 04:09:00 (GMT Standard Time, UTC+00:00)
# Tuesday, 07 January 2014
Tuesday, 07 January 2014 11:25:31 (GMT Standard Time, UTC+00:00)
# Monday, 06 January 2014
Monday, 06 January 2014 18:25:00 (GMT Standard Time, UTC+00:00)
# Saturday, 04 January 2014

2013 was a year of transition - a year of change. A lot of change. Big change.

In May, my father passed away after a long illness. He suffered from Alzheimer’s the last years of his life. During the last two years of his life, I was able to travel many times to Florida to see him. During that time, we became closer than we have ever been and I am still grateful I had the chance to connect with him at the end of his life, even though it was difficult watching him deteriorate during his illness. My last visit was just a few weeks before his death. In May, my sister called to tell me he was gone. My siblings and I traveled to Florida to say our last goodbyes. The funeral was an amazing event. I was able to deliver a eulogy (you can view it below or read a paraphrasing at http://www.davidgiard.com/2013/06/16/MyFatherTheSurvivor.aspx) and I the US Navy sent a team to perform full military honors outside the church (also shown below). Although we all mourned my father's death, I don't think most of us viewed it as tragic. It wasn't nearly the shock of losing my sister a few years ago. My father's long illness helped prepare us for his passing and gave us a chance to say goodbye. When he finally went, we were prepared and spent the time celebrating his life and appreciating those who remain.

My mother also has gone through many transitions this year, following the death of her husband with whom she shared over five decades. In October, she moved into an Assisted Living facility and put her house up for sale. The adjustments this year took a toll on her health and she spent several weeks in the hospital and in rehabilitation, but she seems to have rebounded in recent weeks.

My sons went through transitions this year. In August, they both moved out of state. I knew it was coming and I've always looked forward to their independence, but it was still a shock as they both moved out the same week. Timmy is now a freshman at Indiana University in Bloomington, IN and Nick graduated from Michigan State University (BBA, Management) and almost immediately enrolled in graduate school at the University of South Florida in Tampa, FL, where he is a graduate assistant for the basketball team. As a single father, I've planned nearly every weekend the last 10 years around the activities of one or both of my sons. Years ago, I moved here to Michigan and the only reason was to be closer to them. With both of them gone, my life has changed a great deal. Although I've missed them, I'm excited for them to move to the next phase of their lives and I see this as an opportunity to be more flexible with my own life (more on this later)

In 2013, I resolved to make an effort to be more optimistic. The most public display of this is my new habit of waking up each morning and thinking of at least one thing for which I am grateful. I’ve been sharing these thoughts on Facebook and Twitter and others have told me they appreciate and are inspired by them. I decided to do this because found that I was doing a lot of whining on social media and I realized this was not who I wanted to be and this was not the image I wanted to project to the world. My final negative post before my optimism resolution was a Facebook post on what would have been my 25th wedding anniversary. Publicly lamenting the loss of my marriage definitely did not sit well with my girlfriend, who is now my ex-girlfriend. Since committing to thinking of a new gratitude each morning, I've found my attitude is generally more positive and this helps me to accomplish more each day. Others have told me they've found inspirations in my daily gratitude posts. You can read more about this commitment at http://www.davidgiard.com/2013/08/07/DailyGratitudeAndANewAttitude.aspx

I continued my practice of public speaking in 2013, but I targeted some larger conferences. In June, I spoke at Tech Ed North America for the first time and in October, I spoke at DevConnections. You can view the Tech Ed presentation at http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/DBI-B220#fbid=. Of course, I also delivered dozens of talks at user groups and community events. Next year, I have been invited to speak at VSLive and I'm hopeful to speak at some international conferences.

October brought a big change in my career. After spending 15 years as a consultant, I accepted a job with Microsoft as a Technical Evangelist. This is a job I have pursued for some time, so when an opportunity came up, I applied and was hired. For years, I've been heavily involved in the developer community and this involvement took much of in my free time. With this Evangelism role, I can focus much more on teaching, organizing, and helping other developers in the community. There is a lot to my new job, but the biggest part involves helping people build applications for Windows 8, Windows Phone, and Windows Azure. I'm spending a lot of time teaching people how to build and submit apps and it's this teaching aspect that I'm enjoying the most. For the next six months, I'll be covering two districts (7 states), but I'll be moving to Chicago in mid-2014 and focusing primarily on developers in Illinois, Indiana, and Wisconsin. I spent much of the holidays getting my house ready for sale.

The move to Chicago will be a big change, but with my boys gone from Michigan, it is the perfect time to do this. I've worked in Chicago many times in the past and I enjoy the city and I'm looking forward to making it my home. I've spent many weeks there the past few months, meeting with my new team and with developers and community leaders and students and I really like the enthusiasm and passion I'm seeing in these folks.

As I've been going through my possessions these past couple months and deciding what to keep, I realize how much less emphasis I now place on ownership of physical things. I don't know when this change took place, but I am very happy to sell or give away many things I've held onto for years - sometimes decades. I see this as an area of great personal growth.

All in all, 2013 was a year of great growth for me. Even the challenges that arose this year came with opportunities to grow and connect with others and to change for the better.  It is because of this that I feel more optimistic at the beginning of this 2014 than I have in a long time.

Saturday, 04 January 2014 18:21:26 (GMT Standard Time, UTC+00:00)