Saturday, 04 July 2009

The products listed above, and their associated names, icons and logos, are the intellectual property of Microsoft Corporation.
Via Windows Live Blog Syndicate  
Creating a Sample Icon using Expression Design
silverlight.net - In this Principles of Design Series video, Arturo Toledo of the Microsoft Expression team, shows how to design a full colored icon (a pencil). In fast-forward style you will see the artist take a simple shaped pencil icon turning it into a full colored...(read more)
View article..

Do you know one of these Messenger-etiquette offenders? How do YOU deal with them?
Inside Windows Live Messenger: -

Windows Live Messenger provides a great deal of freedom in how you can communicate and with whom, but I’m sure we all know people that like to push the boundaries of Messenger-etiquette…

Here’s a quick look the top 5 Messenger etiquette offenders:

1. The YELLERS CAPS-LOCK IS APPARENTLY ALWAYS ON FOR THESE USERS AND THEY HAVE A STRONG AFFINITY FOR THE EXCLAIMATION MARK!!!  REGARDLESS OF THE TOPIC, YOU CAN COUNT ON A LOUD RESPONSE!!!
2. Emoticon overload imageimage
3. Indecisive typers image image image
That’s what it looks like when I ask my co-worker Alfons a question on Messenger.  He’s either slow, indecisive or both.  Either way, I’m sure we all know someone like this.  The best part is that after 5 minutes all you get is a one word answer. :p
4. Status Ignorers Your status is set to busy and your message says  “DND – Do Not Disturb.  Delivering a mission critical demo or presentation.”  Not only will a Status Ignorer disregard your message and IM you anyways, but they also tend to start their conversations off with a less than ideal sentence such as:

“HeY DuDe, R we going Partying all wknd again?”

…which of course, everyone in your demo/presentation will see.
5. Never ending chat These are typically people that you genuinely care about, an old friend, your mom/dad, a long lost relative etc… You have a great 30 minute chat, which then drags into a 3 hour chat.  Every time you say '”bye”, they start a new topic or ask you a question.

This is somewhat parallel to the co-worker who keeps talking to you, even as you leave their office.  Then you have to come back and as ‘what was that?’… they tell you, then you try to leave again, and they again keep talking to you…


TELL US ABOUT YOUR EXPERIENCES WITH THESE TYPE OF PEOPLE AND HOW YOU WOULD DEAL WITH THEM.  I’ll write up another post down the road that integrates all of your wisdom along with some of my own thoughts. :)  Just post a comment.

On that topic, as we continue to lead up to the 10th Anniversary of Windows Live Messenger, here are 2 GREAT stories submitted by our user’s about what NOT to do… I was LOL the first time I read them.  Enjoy and thanks Jonathan and Tariq.

Jonathan (UK): The Invention of Group Chat (and Group Feedback)

“A couple of years ago, a new middle manager started working in my department. For the first couple of weeks he didn't make the greatest impression. He looked like he was falling asleep in meetings and generally looked fairly uninterested.

I found out that he'd come from a company that a good friend of mine works for, so I opened up a chat with my friend on Messenger to see if he knew this guy and what he thought of him. I said about the falling asleep in meetings and other negative things that had been discussed around the cooler about him.

My friend said that he didn't know the guy personally, but that some of the 80+ people that he was sharing his screen with in an internal conference obviously did because they were falling about laughing!”

Jonathan, UK


Tariq (USA/Brazil): Not the best Way to introduce a Girl Friend to Mom

“Junior year of high-school my Brazilian girlfriend, Marina, moved back  to Brazil with her family. We used messenger video chat to keep in touch every week (as we do to this day – she is my best friend still).

One day, after a lot of deliberation, she decided to get a tattoo and pinged me excited to show it off. So we opened up a video chat session. The tattoo, a red tropical flower that wrapped around her left side, was hard to see with the shirt she had on so she took it off to provide a better view.

Naturally, my mother walked in at that moment to see an extremely embarrassed, shirtless Marina on my monitor. I reacted the only way I knew how, “Mom, have you met Marina?”. We laugh about the encounter to this day.”

Tariq, USA/Brazil

Thanks again to everyone that submitted a story.  We’ll continue to post them leading up the big 10th anniversary day (July 22nd) so continue to check back.

Today’s Fun 10th Anniversary Fact:  The average chat session is 5 mins long. In the US, chat sessions tend to be shorter with an average 4 mins, while people in China take on average 8 mins for each of their sessions.

Interesting… so where is my father counted in this??? (My dad is a ‘Never ending chatter"’)… :)

Thanks for reading.
The Windows Live Messenger Team


View article..

Qixing’s Blend and SketchFlow Mini-Tutorials…
silverlight.net - Qixing Zheng just posted a series of short video tutorials on Blend 3 and SketchFlow. See them at: http://blogs.msdn.com/canux/archive/tags/Mini-tutorial/default.aspx Stay tuned, more on SketchFlow very soon…...( read more )...(read more)
View article..

Experimenting with User Interface Colors with Expression Design
silverlight.net - Learn more about how to apply the right colors for your user interface. In this video you will experiment how to apply colors to a user interface. Learn more about color while exploring Expression Design. Experimenting with User Interface Colors with...(read more)
View article..

Three great screencasts on Silverlight unit testing
silverlight.net - If you're looking to learn more about Silverlight unit testing, here are 3 screencasts of interest....( read more )...(read more)
View article..

Route Optimization in Bing Maps powered by OnTerra’s free Stop Optimization Service
Hannes's Virtual Earth Blog -

OnTerra is a Microsoft Partner specialized on tailored Bing Maps solutions and focussing on but not limited to tracking and fleet management. Recently they launched a free beta version of a Stop Optimization Service. The service allows you to send an unlimited list of stops for your route and receive a string with the order of the stops optimized for the shortest driving distance. Let’s have a quick look at how it works:

Bing Maps supports out-of-the-box Multi-Waypoint Routing for up to 25 stops through the method VEMap.GetDirections. However, the routing algorithm processes the stops always in the order in which they appear in the array of locations. If we want to start for example a trip in the Microsoft Office in Reading and want to visit Swindon, Oxford, Maidenhead and Newbury before we return to the Microsoft office we have to know in which order we want to visit these cities. If we just send the list in the order mentioned above it will guide us from one location to the next in exactly this order and come up with a route that is 185 miles long and takes about 3 hours and 20 minutes of drive time.

image

The free OnTerra Stop Optimization Service figures out in which order we should drive for the shortest distance. In the example above it will suggest that we go to Maidenhead first, then Oxford, Swindon and Newbury. This will save us 45 miles and about 40 minutes of drive time.

image

That’s not bad at all but if you would like to use it for example as a dispatcher in a fleet management application you also need to consider the times when you can make a pickup or a delivery, you may want to optimize for shortest time rather than shortest distance or you may need to consider height and weight restrictions that apply to your trucks. This is not part of the free service but in addition to the free stop optimization, OnTerra also offers such advanced features for a fee. If you are interested in this type of advanced service contact routeopt@onterrasys.com for more details.

To use the free stop optimization service you will need to register and apply for a token. It requires 3 parameters:

  1. the locations which we want to optimize as a string, The string contains a label for the location and the latitude and longitude separated by a comma. Multiple locations are separated by a ‘#’.
  2. a Boolean parameter that indicates weather we do a roundtrip or a one-way trip
  3. our token

You see that we need to geocode the locations before we send them to the stop optimization service. In the sample application above I use the Bing Maps AJAX control and use the callback function for the VEMap.Find-method to concatenate a string with the locations as expected by the stop optimization service, e.g. “txtStop1,51.461179,-0.925943#txtStop2,51.561765,-1.781815#txtStop3,51.522375,-0.727256#txtStop4,51.405876,-1.325891#txtStop5,51.756205,-1.259490”.

Now here is one thing so consider: The optimization service splits the locations-string whenever it finds the character ‘#’. Unfortunately there appears to be a bug(?) which doesn’t process the string correctly when you work with the full number of decimal digits that comes back from the Bing Maps geocoder. In order to work around this bug(?) we can truncate the number of decimal digits to 6. This does actually not have a noticeable impact on the precision of the result but solves our problem.

Once we have our last location we call a JavaScript-function StopOpt which actually creates an AJAX-call

//Build String for Route Optimization
function AppendLocations(layer, resultsArray, places, hasMore, veErrorMessage) {
    i = i + 1;
    if (locations.length > 0) {
        locations=locations+"#"
    }
    locations = locations + "txtStop" + i + "," 
+ places[0].LatLong.Latitude.toFixed(6) + ","
+ places[0].LatLong.Longitude.toFixed(6); if (i == numStops) { StopOpt(); } }

The AJAX-call goes to a web handler which will call the stop optimization service and hands over the locations-string as well as a parameter that indicates if we’re doing a roundtrip or a one-way-trip. The optimized order of the result is received as a string and we process it a bit before we call the VEMap.GetDirections method.

function StopOpt() {
    //Build URL to call the server
    var url = "./06-StopOpt.ashx?";
    url += "locations=" + locations;

    if (document.getElementById("cbRoundtrip").checked == true) {
        url += "&roundtrip=true"
    }
    else {
        url += "&roundtrip=false"
    }

    //Get the appropriate XMLHTTP object for the browser
    var xmlhttp = GetXmlHttp();

    //if we have a valid XMLHTTP object
    if (xmlhttp) {
        xmlhttp.open("GET", url, true); // varAsynx = true

        //set the callback
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4) //4 is a success
            {
                //web service returns the optimized order of the stops
                var result = xmlhttp.responseText
                var stopArray = result.split(" >> ");
                var stops = new Array();
                var order = "Order (Optimized):<br>";
                for (var i = 0; i < stopArray.length; ++i) {
                    order = order + document.getElementById(stopArray[i]).value + "<br>";
                    stops.push(document.getElementById(stopArray[i]).value);
                }
                if (document.getElementById("cbRoundtrip").checked == true) {
                    order = order + document.getElementById("txtStop1").value;
                    stops.push(document.getElementById("txtStop1").value)
                }

                var options = new VERouteOptions;
                options.RouteCallback = DistTime;

                document.getElementById("pOrder").innerHTML = order;

                map.GetDirections(stops, options);
            }
        }
        xmlhttp.send(null);
    }
}

Finally, here is our web handler that we have been calling with our AJAX-call and which in turn calls the OnTerra stop optimization service:

Imports System.Web
Imports System.Web.Services
Imports BM_Azure_01_WebRole.OnTerra

Public Class _06_StopOpt
    Implements System.Web.IHttpHandler

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        'Get the URL-Parameters
        Dim locations As String = context.Request.Params("locations")
        Dim roundTrip As Boolean = CBool(context.Request.Params("roundtrip"))

        Dim token As String = "YOUR TOKEN"

        Dim svcOT As New OnTerra.OnTerraStopOptClient("basicEndPoint")
        Dim output As String
        output = svcOT.GetStopOpt(locations, roundTrip, token)

        context.Response.ContentType = "text/plain"
        context.Response.Write(output)
    End Sub

    ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property

End Class


View article..

Silverlight 2 unit test framework binaries updated
silverlight.net - If you're doing Silverlight 2 development with the unit test framework, you might want to check out the latest release that includes bug fixes and a few small new features....( read more )...(read more)
View article..

Microsoft MVP (Most Valuable Professional)
silverlight.net - I got a MVP award from Microsoft for my activities on the online community, especially in the Silverlight category....( read more )...(read more)
View article..

Choosing Colors to Complement Your User Interface with Expression Design
silverlight.net - Learn more about how to choose the right colors for your user interface. In this video from the Principles of Design Series by Arturo Toledo, you will learn a few techniques to pick colors that work well with each other. Choosing the right colors for...(read more)
View article..

JUST RELEASED: p&p Acceptance Test Engineering Guide, Volume I - beta2
silverlight.net - Microsoft patterns & practices is excited to announce the latest addition to the p&p library of software engineering guidance: Acceptance Test Engineering Guide, Volume I (BETA 2) Codeplex site: http://codeplex.com/TestingGuidance Here is some...(read more)
View article..

PreviousNext
Copyright 2009. Sponsored by nsquared.   |  Terms Of Use  |  Privacy Statement
Content on this site is generated from the developer community and shared freely for your enjoyment and benefit. This site is run independently of Microsoft and does not express Microsoft's views in any way.