# Wednesday, October 2, 2013

Today I am grateful for a trip to Las Vegas and a chance to speak at DevConnections.

Today I am grateful for those who worked so hard to put on a successful Bar Camp Tamp 2013 - The first bar camp I have experienced.

Today I am grateful for the health of my mother and for dinner last night with her and with my cousins Kevin and Kathleen, who drove up from Sarasota to meet us.

Today I am grateful that I'm heading to Florida this morning to visit my mother and my son.

Today I am grateful for the Detroit Tigers who have provided an exciting baseball season this summer.

Today I am grateful that I live in an area where there are so many user groups, giving me so many opportunities to learn and to meet smart people.

Today I am grateful for my blog, which has given me a forum to share my thoughts with anyone who wants to read them.

Today I am grateful to Julie Lerman and all those who helped her make the Vermont Code Camp an excellent event and my first visit to the Green Mountain state enjoyable.

Today I am grateful for a night on the town last night in downtown Burlington with Russell Fustino.

Today I am grateful that I'm visiting Vermont this morning for the first time in my life.

Today I am grateful to all those who came to my presentation at the Great Lakes Area .NET User Group last night.

Today I am grateful for exactly 5 years at Sogeti, for the people I've met, and for the things I've learned as a result of these years.

Today I am grateful for this coffee and the effect it is having on me this morning.

Today I am grateful for My first trip to Citi Field An exciting finish featuring a 2-out walk-off Mets RBI in the bottom of the 11th. The kindness of Becky Isserman, who helped me navigate NYC public transportation.

Today I am grateful to Stephen Bohlen and the other organizers of CodeCampNYC for their hard work in putting on a successful conference and for dinner and drinks with old and new friends in midtown last night.

Today I am grateful for a weekend in Manhattan and a chance to speak at #CodeCampNYC

Today I am grateful for the team on my current project. Some of our daily tasks are mundane, but I always enjoy interacting with this bright group of developers.

Today I am grateful for optimistic reports on the progress of Jeff Blankenburg's son Miles, who fell very ill recently and is now recovering from a brain operation.

Today I am grateful for an unexpected visit with John Avgoustis and Randy Eager.

Today I am grateful that I found my wallet that had been missing since Friday.

Today I am grateful for the opportunity to read the word of God to the congregation in church and for those who tell me they like the way I do it.

Today I am grateful for dinner with Pat, Brian, and Kelly and for the fact that we've remained friends for 33 years (so far)

Today I am grateful for Spartan football. Excited to attend my first MSU game of the fall today.

Today I am grateful for the Shrimp Louis Salad last night at Petterino's on Randolph & Dearborn in Chicago - one of the best salads I've ever eaten.

Today I am grateful for a relaxing train ride across the Midwest.

Today I am grateful that my very first Windows 8 app was approved for the app store.

Today I am grateful for the many times over the years that my son Timmy lifted my spirits when I was feeling down. Happy birthday Timmy!

Today I am grateful for a peaceful Sunday evening spent sitting outdoors, eating sushi, sipping espresso, and watching the world go by.

Today I am grateful that, after many years and many thousands of dollars, I just sent the last check, putting a financial end to an emotional tragedy in my life.

Today I am grateful for 1. The organizers of the CloudDevelop conference for inviting me to speak and for putting on a great event. 2. That the back pain that plagued me all day yesterday seems to have vanished after a good night's sleep.

Today I am grateful to Dennis Burton, who literally went the extra miles to pick up the laptop I left at home and bring it to Columbus, OH.

Today I am grateful for the help of Jeff Yates, who showed me how to implement scrolling in a Windows 8 XAML app last night.

Today I am grateful that I actually made it to the gym for the second time in a week. First time in months that has happened.

Today I am grateful that my sons each begin the next phase of their lives today as they each begin classes at a new college.

Today I am grateful I was able to cross off some items from my To-Do list that have been there for months.

Wednesday, October 2, 2013 3:33:00 AM (GMT Daylight Time, UTC+01:00)
# Monday, September 30, 2013
Monday, September 30, 2013 8:57:00 PM (GMT Daylight Time, UTC+01:00)
This past Saturday, I experienced my first bar camp - The Bar Camp Tampa Bay. For those who don't know, a bar camp is a technical conference run by the attendees. Unlike a code camp, sessions are not selected in advance; instead, any attendees can sign up to deliver a presentation during an open slot. Technically, I attended this same event last year. However, last year, the Bar Camp was combined with the Tampa Code Camp and I delivered five presentations, which prevented me from visiting the Bar Camp side of the event. This year, I experienced Bar Camp head on. I signed up to deliver a presentation titled "Connecting the Dots: Using HTML5, jQuery, and Web API Together". It went really well. The room was packed and, after every seat was filled, people sat on the floor in the aisles. The only downside was that I ran out of time, but a number of people came out in the hallway with questions. It was a good experience because I'm delivering the same (but longer) presentation at DevConnections this week. I attended a few sessions: students showing off robotics, how to write a successful blog, and lessons from the Game of Thrones (Winter/death is coming to us all eventually and we should be ready). Although most of the attendees were technologies, I noticed that most of the sessions were not about technology - many were about startups and social media and marketing and soft skills. Still, people were engaged and I didn't hear a single complaint about a disappointing session. I also had a chance to meet a number of new people. Most attendees were not Microsoft developers, but we still found common ground and I came away impressed by the Tampa area developer community.
Monday, September 30, 2013 1:36:48 AM (GMT Daylight Time, UTC+01:00)
# Tuesday, September 24, 2013
Tuesday, September 24, 2013 1:24:59 AM (GMT Daylight Time, UTC+01:00)
# Tuesday, September 17, 2013
I recently completed and published my first Windows 8 application. The app is simple: Click a button and the app selects 1 or more random numbers in a given range; the user can select the range of numbers and whether or not to re-use numbers. I wrote it because my user group needed such an app and because I wanted to learn how to write a Windows 8 application. I chose XAML/C# for this app pretty much by a coin flip. I still plan to write a Windows 8 app using HTML5/JavaScript. For me, the biggest challenge was were getting the correct layout using a combination of StackPanels and tables. I solicited the help of Jeff Yates, who explained the syntax to me and help me to fix the layout. The app was rejected the first time because I had checked a box on the property page stating that it was network-aware and I had not included a privacy statement page. My solution was to uncheck this box because it requires no network access. If you would like to see this app in action, you can download it at http://apps.microsoft.com/windows/en-us/app/raffle-picker/24508bc8-4e8e-4ba5-a77f-934df4a0018c


Tuesday, September 17, 2013 5:03:48 AM (GMT Daylight Time, UTC+01:00)
Tuesday, September 17, 2013 2:57:36 AM (GMT Daylight Time, UTC+01:00)
# Monday, September 9, 2013
Monday, September 9, 2013 6:59:00 PM (GMT Daylight Time, UTC+01:00)
# Tuesday, September 3, 2013

Recently, I was asked to give a presentation to a group of brand-new software consultants about what to focus on with your customer. Here are the highlights.

First impressions are important!
You never get a second chance to do this. It's important to hit the ground running on every project. A win on day 1 is much more impressive to the customer than a loss on day 1 and a win on day 5.

Think about privacy
Lock your unattended workstation. Think twice before forwarding an internal e-mail to an external person. Be conscious of your customer's intellectual capital - be cautious about what you reveal when having casual hallway conversations.

Delight your customer!
As a consultant, this is the single best thing you can do to increase sales. It is far easier to sell more services to a happy customer than to find a new customer.

Listen to your customer
As we gain more experience, we tend to think we know the answer more quickly. Resist the temptation to tell the customer what they want before allowing them to explain the problem. Interrupting and answering questions before they are asked can come across as arrogant.

Be professional
If this is your first "real world" job, there are some adjustments. Know the dress code (if you don't know, ask); be punctual; stay focused during work hours

Communicate early; Communicate often.
I have made many mistakes in my career. The ones for which I payed the heaviest price are those that went unnoticed for weeks or months. Keep your customer and/or supervisor informed about what you are working on and any potential roadblocks. I often send a weekly status report to accomplish this.

Stay Positive
There will be times in your career when you don't feel motivated. Don't take this out on your team. Don't be the guy who constantly complains about management or the project status. Every project has positive and negative things. You'll be happier if you accentuate the positive.

Look for opportunities
Keep your ears open for pain points expressed by the customer - even if they don't relate directly to your project. If this is something your company can help with, communicate to your manager or sales rep. If a consulting company can solve a customer's business problem, both parties win.

Know the strengths of your company
Be aware of what your company does well. This will help you to look for opportunities and know who to call when you have a technical question.

Learn the technology stack
There is a lot to learn in this business, so you better get started. Take the time to learn the basics of your job and dive deep into 1 or 2 other areas. Read books and blogs, attend conferences and user groups, and listen to podcasts. There is plenty of information available.

Focus on teamwork
If your team succeeds, you succeed. Share the credit with others and you will find that you will generally share in the team's successes.

Learn names
This is something I'm not very good at but it can make a big difference in how you are perceived. The first day of a project, I always create a folder under "My Documents" for the customer and I add a text file to store the names of the people I meet. Whatever method works for you, remembering the names of those with whom you interact can make a big difference in the impression you create.

Bring passion to each project
Software consulting is an exciting way to earn a living. We get paid to play with toys all day and we are constantly learning. Embrace that. Your passion will tend to be reflected in your work.

Tuesday, September 3, 2013 6:43:00 PM (GMT Daylight Time, UTC+01:00)


The Google GeoCode API offers a service for retrieving driving directions between 2 addresses.


The service is exposed through a URI. The syntax of the URI is


output is the format in which I want to receive result – either “json” or “xml”. I prefer the simplicity of json.

parameters is an ampersand-delimited list of name value pairs to pass to the API. The parameters I care about are


The starting address


The ending address


”true”, if you want the service to return more than one possible route. Unless I have a reason to provide multiple routes, I prefer “false”


”imperial” to return data in feet and miles; “metric” to return data in meters and kilometers. This should depend on the country where the data is going to be used.


”true”, if I am using a sensor to provide location; otherwise “true”. I don’t own such a sensor, so I set this to false.

Sample Code

Here is a sample URI to request directions from my old office to my new one, returned as JSON data.

http://maps.googleapis.com/maps/api/directions/json?origin=31555 W 14 Mile Road, Farmington Hills, MI, 48334&alternatives=false&units=imperial&destination=26957 Northwestern Highway, Southfield, MI, 48076&sensor=false

This is a nice function to call from JavaScript. I prefer the simple jQuery syntax for making Ajax calls like this.

var startAddress='439 East 31st Street #214, Chicago, IL 60616';

var endAddress='30 North LaSalle St, Chicago, IL 60616’;

var requestUrl = 'http://maps.googleapis.com/maps/api/directions/json?origin=' + startAddress + '&alternatives=false&units=imperial&destination=' + endAddress + '&sensor=false';

url: requestUrl, 
dataType: "json", 
type: "GET", 
data: {}, 
error: function (err) { 
$(#distanceDiv).html("Error calling Web Svc.<br/>Calculate."); 
success: function (data) { 
var distance = data["routes"][0]["legs"][0]["distance"].text; 
$(# distanceDiv).text(distance); 

The code above calls the service; then parses the resulting JSON to retrieve the distance and displays that distance in a DIV with the ID distantDiv. In this example, I hard-coded the 2 addresses, but you could use jQuery selectors to retrieve the address from elements on the page or user input.


Below is part of the Json response to the service call

JSON Results


There are some limitations you should be aware of. I am a cheapskate, so I’m using the free version of this API. With the free version, I can only send 2500 addresses per day. If I try to send more, the service will respond with a status of “REQUEST_DENIED” and no results will be returned.

Also, Google expects you to display the results on a Google Map. I’m not sure how they enforce this, but they don’t allow you to use the Geocoding API to display data on someone else’s map.

Tuesday, September 3, 2013 6:02:00 PM (GMT Daylight Time, UTC+01:00)
# Monday, September 2, 2013
Monday, September 2, 2013 6:16:00 PM (GMT Daylight Time, UTC+01:00)