Virtual Earth For Government -
For more than a year I have been blogging on the Virtual Earth platform and sharing the different and clever ways the Public Sector customers are applying it for business intelligence applications. During this time, I have also occasionally shared my thoughts about ways that Virtual Earth (VE3D especially) could be used for crime and intelligence. As the saying goes, you are only limited by your imagination.
Well the writers of the popular television show CSI: New York are not lacking in imagination. Apparently they have included Virtual Earth in some recent episodes but none so much as last night's episode in which our hero's use Virtual Earth to track a killer.
Virtual Earth appears as early as as early as 26:32 but the best footage comes around 36:40 when Virtual Earth is used to locate a firehouse first through satellite imagery on a desktop machine, and then zooming in on the building in Virtual Earth 3D on a big screen (where Virtual Earth belongs!). I love the transition from the 3D model to the actual building because it illustrates the photo-realistic and accurate nature of the Virtual Earth 3D models that I have been preaching about all this time.
You can see the episode here. You can single-click the slider bar under the screen to jump ahead but note that you’ll watch a commercial each time you do.
It is SO worth it! Thanks to Roger Mall of the Virtual Earth team for arranging and sharing this.


Writer Zone -
Instructional video demonstrations for how to use Windows Live Writer are now available. Check them out on Soapbox and YouTube!
1 – Getting Started
2 minutes, 26 seconds
This instructional video demonstration shows how to setup Windows Live Writer to work with your blog and, if you don't already have a blog, how to create a new blog on Windows Live.
2 - Basic Authoring
2 minutes, 16 seconds
This instructional video demonstration shows how to do basic authoring of a blog post using Windows Live Writer.
3 - Pictures, Videos, Maps and Plug-ins (oh my!)
5 minutes
This instructional video demonstration shows how to insert and edit rich content - like pictures, videos and maps - using Windows Live Writer.
4 – Open, Save, Publish and Help
2 minutes, 44 seconds
This instructional video demonstration shows how to open, save, print and publish blog posts using Windows Live Writer. You will also learn about how to get more information and send feedback to the Windows Live Writer team.
5 - Windows Live Writer
11 minutes
This is a single video that covers the all the same content in the videos listed above (1 - 4).
Enjoy!
Windows Live Agents -
The standard reporting suite on the Knowledge Management Console covers the most important metrics -- Unique Users, Total Sessions, etc. However, you'll often want (or be asked) to provide additional reports based on the special needs of the customer and/or the particular tasks of the agent. This article won't cover all the details of configuring usage reports, but will hopefully demonstrate how to log a simple data point and have it show up on the console as a graph or table.
Before configuring usage, we should look briefly at how logging works. The agent's log is an object variable called SYS.Log -- anything written there is a candidate to show up in usage reports. This is completely separate from the User Profile: the agent may store the user's birthplace in a variable called G_USER.birthplace, but it won't show up in usage unless we also write it to, for example, SYS.Log.birthplace. It is also completely separate from the server component logs on the console.
So let's actually use birthplace as our example, and look at what we need to record and display that statistic.
Say we have a procedure called CollectBirthplaceFromUser() that takes care of collecting the user's birthplace and resolving it into a valid place name we can record.
procedure CollectBirthplaceFromUser()
BIRTHPLACE = ""
[...]
call WriteBirthplaceToProfile(BIRTHPLACE)
call LogBirthplace(BIRTHPLACE)
WriteBirthplaceToProfile assigns the value of BIRTHPLACE to G_USER.birthplace. LogBirthplace writes the same value to the SYS.Log.birthplace variable.
procedure LogBirthplace(BIRTHPLACE)
SYS.Log.birthplace = BIRTHPLACE
Now that we're confident birthplaces are being collected and logged, let's move on to configuring Usage. We do this by editing a file at the root directory of the project, called usage_config.xml.
usage_config.xml controls the presentation of log data in the Usage Reports section of the console. It's completely separate from the actual logging of data -- we can log something in the BuddyScript, for example, but not add the necessary sections in usage_config.xml for another month, at which point the data the agent has been logging for the last month will be displayed. However, the opposite is not true -- adding a section in usage_config.xml doesn't cause data to be collected.
There are two main parts: a "sections" element containing all the configuration options for the usage reports, and a "usagestats" element containing the variables and datapoints to be used in the sections element.
The sections element itself contains two subsections labeled "all_ids" and "individual_id", which correspond to views of usage statistics broken out by individual buddyid or all buddyid's combined, exposed as a drop-down list in the console. First we'll look at the all_ids section, which is somewhat simpler than the individual_id section.
The first section here is called Volume Summary, and contains a number of elements for reporting usage data. You can get a good idea of the syntax we'll be using later by examining this section.
<section name="Volume Summary" id="volume_summary" shared-graph-type="barline" shared-graph-title="Usage">
<element name="Total Queries" key="message_count" calc-type="normal" default-graph-state="on" graph-type="shared"/>
<element name="Total Sessions" key="session_count" calc-type="normal" default-graph-state="on" graph-type="shared"/>
<element name="Unique Users" key="unique_users" calc-type="normal" default-graph-state="off" graph-type="none"/>
<element name="New Users" key="new_users" calc-type="normal" default-graph-state="off" graph-type="shared"/>
<element name="Average Queries Per Session" key="message_count" calc-type="per" subkey="session_count" graph-type="shared"/>
<element name="Average Sessions Per Unique User" key="session_count" calc-type="per" subkey="unique_users" graph-type="none"/>
<element name="Average Session Length (in seconds)" key="total_session_length" calc-type="per" subkey="session_count" graph-type="shared"/>
</section>
The "name" identifier is the text displayed on the console, the "key" is the datapoint, "calc-type" can be normal or something else depending on whether we want to perform some math on the number before displaying it, "subkey" is the other datapoint to use when calc-type is not normal, "default-graph-state" toggles whether a particular element shows up on the graph, "graph-type" controls what kind of graph, if any, to display the data on. In this case, multiple elements are sharing a "barline" graph -- a combination bar graph and line graph where the user selects which data goes on the bar, and which goes on the line.
We could add our own section for birthplace, but it turns out there is already a section for demographics, so we'll just add an element within that section:
<element name="Birthplace Distribution" key='[birthplace][%]' keyName="Birthplace" valueName="Sessions" calc-type="distribution" graph-type="pie" display-type="percentage"/>
This will pull all the values of SYS.Log.birthplace and display them in a pie graph, distributed by the number of sessions they occur in, along with a key. ("name", "keyName", and "valueName" are all labels and have no effect on the display of the data.) [%] represents a wildcard, meaning "all values of birthplace" -- we could choose instead to report on only [birthplace]['New York'], for example.
Since there are potentially a large number of birthplaces (depending on how smart CollectBirthplaceFromUser is), it probably makes sense to dispense with the graph, and just display a table:
<element name="Birthplace Distribution" key='[birthplace][%]' keyName="Birthplace" valueName="Sessions" calc-type="distribution" display-type="percentage"/>
That's all we need to do for the all_ids section. For the individual_ids section, because we'll be filtering by buddyid, we need to go to the bottom of the file and add a datapoint:
<var name="userBirthplace" default="">value('[birthplace]')</var>
<datapoint buckets="+hour" key="sessions where userBirthplace=${userBirthplace};buddyid=${buddyid}">
<filter>userBirthplace != ''</filter>
</datapoint>
First we create a variable called userBirthplace, which is assigned the value of SYS.Log.birthplace. Then we create an hourly bucket for that data with a key for pulling the number of sessions within a particular buddyid where a particular birthplace was recorded. In the demographics section of the individual_id section, we'll add this:
<element name="Birthplace Distribution" key='sessions where userBirthplace=%;buddyid=%var:buddyid%' keyName="Birthplace" valueName="Sessions" calc-type="distribution" display-type="percentage"/>
This is similar to the element we created for the all_ids section, but birthplace (userBirthplace=%) and buddyid (buddyid=%var:buddyid%) are interpolated into their actual values, and we see only the number of sessions for a birthplace recorded for the buddyid currently selected. Now we can use the buddy dropdown on the console as a filter.
In practice, displaying a list of arbitrary names of places is not going to be very useful because there are many thousands of place names the user can enter. We'd probably want to constrain the list to countries, states, or other large areas, depending on the mission of the agent. Still, this example will hopefully get you started experimenting with Usage, which is the best way to learn. Chances are, usage_config.xml probably already contains most of the necessary pieces for whatever report you need to create.

Virtual Earth / Live Maps -
It's been a rough month here on Earth as far as natural disasters go between the Cyclone in Myanmar and the earthquake in China this week. One of the folks working on our local search team is from the Sichuan province, an area very near the center of the quake that was hit very hard. Happily for Hong she was able to reach her family as communications came back online and they were all ok, but for thousands more the news is not so good. if you want to help with a donation to the relief effort, Hong suggested the China Tomorrow Education Foundation, an organization focused on bringing education to children in rural areas, who have set up an earthquake relief fund this week.
For those in China, the Ditu.Live team is maintaining this map of events. I also found this map animation and this BBC map helpful in understanding the geography.

meraTechPort - Video.Show is a reference-quality blueprint for implementing a user-generated video content site. It provides everything you need to create a website for uploading, encoding, cataloguing, publishing and commenting on videos, using Silverlight, Expression Encoder and Silverlight Streaming by Windows Live. Setting up your own video community website can be a real headache. There's a lot to worry

Virtual Earth For Government -
I only recently blogged on this but want to just quickly remind everyone to register for TOMORROW'S webinar:
Microsoft Virtual Earth partner IDV Solutions is offering free 2 day training for customers interested in building mapping applications using the Virtual Earth platform and IDV's Visual Fusion offering. The offer provides personal training for up to 6 attendees at IDV's office and enables attendees who successfully complete the training to build and maintain an application within just a few hours.
The offer, valued at $12,500, will be fully explained in a webinar that IDV will host May 14, 2008, 2:00 PM - 3:00 PM ((GMT-05:00) Eastern Time (US & Canada)). The webinar will also provide participants with a better understanding of the applicability of Virtual Earth and Visual Fusion to address public sector customer's needs for enhanced clarity and collaboration around critical business data.
The registration for the webinar can found on IDV's web site here: http://www.idvsolutions.com/federaloffer2008.aspx
meraTechPort - By now you must have already installed and enjoying the awesome experience of Microsoft WorldWide Telescope (WWT). If not download Now to try it. Here are some of the interesting features tips as you start using it. - You can use WWT for 4 different Looks: Panorama, Sky, Earth, or Planets. Default is looking into the Sky, You can view planets of the Solar System in 3D or view a panoramic shot
