Welcome to MSDN Blogs Sign in | Join | Help

My personal blog is now http://blog.maslan.com

Please examine some aerial images if you can.

Yahoo Messenger Group SkinningKarsten had a great time working with the Yahoo team on their Windows Vista Messenger client. They've posted a video preview of the app with some fun features like the group skinning in the fantasy football league example.

Karsten - at the risk of exacerbating the speculation that my office is at the beach, hook me up with a rippling ocean water skin to rendezvous with surf buddies.  What will the voice visualization do with the background surf noise? :)

If you're on a web page that displays a book with its ISBN/ISSN number, you can search or reserve the book at our local library with one click using this bookmarklet:

  1. Right-click on this link:  Peninsula Library System and select "Add to Favorites..."
  2. Select "Yes" when prompted with "You are adding a favoirte that may not be safe.  Do you want to continue?" (only because this link comes from a trusted son :) Usually say "No" if you see this)
  3. Select "Links" from the "Create in:" folder prompt, then press the "Add" button.
  4. Right-click on any blank area of the browser's toolbar above and select "Links" if there is no check-mark next to it.

Now, whenever you're on a web page showing a book you want, just click the "Peninsual Library System" link on your toolbar.  If there's an ISBN/ISSN number on the web page, then a new window will open with the search results for that book in our local library.  The search includes all these San Francisco Peninsula libraries.  You can then reserve the book online and pick it up at your local library.

If you're not my Mom, and want a bookmarklet for a different library system, check out The LibraryLookup Project.

Update: the link now looks for the ISBN/ISSN on the web page itself if no number was found in the URL.  So clicking the link from step 1 above should now jump to the Barack Obama best seller because "ISBN: 0307237699" is on this page.

Soma's post mentioned three specific Windows Vista applications (The North Face, British Library, and Avenue A | Razorfish) on www.seewindowsvista.com

Since other people may also want to link directly to the videos of specific applications, here are the URLs for each one:

Click2Call SearchCall me lazy, but I often just want to search, click, and talk. Now, this Live.com gadget lets me do it by using the Click2CallU beta service from Vonage.  When you click on a search result, you receive a call that connects you automatically to the desired number (no dialing). 

I hope Vonage adds WS-Security protocol support to this service (even better using WCS and WCF).  They currently only provide POST and GET over https, which makes it challenging for gadgets like this one.  Why?  Because this gadget simply wants to act as a pass-through intermediary for connecting me securely to Vonage's service.  Even when gadget frameworks don't have SSL proxies or SSL iframe support, it should be simple to connect securely at the application message level. That way, even if javascript requires that I talk back only to my original http domain, my domain could be a credential-blind, trustworthy relay on the way to Vonage's service. 

It's a bit inconvenient to be prompted for your Vonage password whenever you refresh the page, but it's better than storing or transmitting your password in the clear. Your password remains client-side, and is only transmitted via the https GET call to the Vonage service.  There's still a risk of an evil inline gadget walking the DOM looking for the global variable with your Vonage password.  We'll have to contact Vonage to work with them on a WCS and WCF implementation.

Click2Call icon   If you see "authorization failed" or this disabled phone icon after clicking "click 2 call" on a search result, it means that you haven't yet specified your Vonage account settings for this gadget.  Click the gadget's "edit" link, and enter your:

  1. Vonage phone number (formatted like 15556667777)
  2. Vonage username

Also, kudos to MarkL and team for the v0.1 ajax search control I used in this version of the gadget.  (Yes, Google is a rival, but he added VirtualEarth-like simplicity to hosting a search control).  I'll post the Live Search version that I have running on my localhost as soon as my hoster  Server Intellect (add your vote) adds support for either .asbx or .axd tunneling used by Atlas

Accruent InterviewJason's Channel 9 interview with Accruent provides some background on the real estate application shown on www.seewindowsvista.com.  If you only have 10 minutes, jump to the clip of the Windows Vista application for visualizing demographic data surrounding store locations.  The whole category of "Data Visualization" is hot - especially now that subsystems like WPF make it easier to aggregate multiple data sources/servicesd into hi-fi UI.  Jason included a post with resource links.

Steve Marx has really lengthened The Long Tail.  His risky prank and SwansonVision Atlas app qualify him as the undisputed king of post-ophthalmologic-surgery geek humor.

The new Virtual Earth Interactive SDK does a great job making the platform discoverable and easy to use.  The SDK is organized by the things you want to do, and each of those things is correlated to a live running sample, source code, and reference documentation - all one tab click away.  Go check out http://dev.live.com/virtualearth/sdk/.  Also, ignore all the old code I posted; version 3 makes it simple to add custom pushpins.

 

Typing keywords into a search box is tedious – especially when most of the relevant search terms are staring you in the face in the application you’re using! For example, as we close the fiscal year, I’m reviewing budgets, purchase orders, invoices, and expense reports while correlating them with quarterly line item projections and cross-team charge agreements. All of these line of business apps should provide a simple search function based on the current state of the app.

Viewing a list of open purchase orders for a specific budget code?
Search all spreadsheet projections and email exchanges that reference that budget code.

Approving an invoice from a vendor?
Search my email exchanges with that vendor.

Confirming that a purchase order is using the right budget code?
Search the intranet for explanation of the budget codes associated with my cost center.

Etc, etc...

Jeremy posted five minute video explaining how to use Windows Vista Search from within your application. The video doesn’t illustrate the context-based search examples above, but at least it shows the simplicity of embedding search into your application. 

Karsten's 5-day WPF training agenda looks great.  Karsten has helped partners design and develop some of the best showcase applications, so I trust his editorial judgment.

We had guests queue up their favorite dance music for our DJ in advance of a party we hosted last month.  The party site used this ASP.NET 2.0 control to call the Amazon E-Commerce Web Service to search for music and bind the selected items to a database table recording everyone's selections.

It's a hack to put a static database schema in the control, and you'll have to bind to your own MusicTableAdapter ; but here's the source for the control if you want to use it for something similar.  It's based on the Amazon code sample.

Add the control to your page with a line like:
<uc1:AmazonItemSearchControl ID="AmazonItemSearchControl1" SubscriptionID="YOURIDHERE" runat="server" EnableTheming="true" />

The yellow "music cart" that floats on the right was styled with:
#musicCart

{
z-index: 2;
position: absolute;
right:1cm;
top:3cm;
background-color:Yellow;
width: 7cm;
padding: 10px;
border: red 2px dashed;
}

My therapist wife Mimi is literally my exact opposite on the Myers-Briggs personality type test. I think one of the reasons she’s so good at what she does is that she’s very grounded – results-oriented with a pragmatic assessment and prioritization of things needing immediate attention. She completely understands my late nights working towards a critical deadline. But she’s amazed (not in a flattering way) when I stay up late “playing” with software… like tonight.

I set out post a rudimentary web site with Mimi’s basic information. I did that, but then got lost in experimenting with Windows Live Local Beta for Mimi's office location page. How do you style a Windows Live map control? How do you create custom pushpins? In the absence of bird’s-eye coverage, wouldn’t it be nice to have a street level view of Mimi’s office? etc... So now, an otherwise mundane web site design has a fun map control that, for IE browsers at least, lets you pan, zoom, and hover on pushpins for street level photos - all in-place on the page:

Mimi's Office

Since this is a simple common scenario, I'm pasting the code I assembled from the various programming resources on the Web for Windows Live Local:

<link href="http://dev.virtualearth.net/standard/v2/MapControl.css" type="text/css" rel="stylesheet" />
<
script type="text/javascript" src="http://dev.virtualearth.net/standard/v2/MapControl.js"></script>
<
script type="text/javascript" src="http://local.live.com/JS/VE.js"></script>
<
link href="VEPanel.css" type="text/css" media="screen" rel="stylesheet" />
<
script type="text/javascript">
var map = null;
var tMimi = "Mimi's Office";
var bMimi = "205 East 3rd Ave,San Mateo, CA<br><img src='officebuildingstreetPointer.jpg'>";
var tParking = "Parking Garage";
var bParking = "on Ellsworth between 3rd and 4th";
var p;

function MyOnLoad()
{
var params = new Object();
params.latitude = 37.564999;
params.longitude = -122.323074;
params.zoomlevel = 17;
params.mapstyle =
'h';
params.showScaleBar =
false;
params.showDashboard =
true;
params.dashboardSize =
"small";
params.dashboardX = 3;
params.dashboardY = 3;
map =
new Msn.VE.MapControl(document.getElementById ("map"), params);
map.Init();
map.AddPushpin(1, 37.565148, -122.323043, 20, 20,
null, "<DIV onclick='HidePopup()' onmouseover='DisplayPopup(event.clientX, event.clientY, 260, 220, tMimi, bMimi)'><img src='mimiFramedSmall.jpg' width='20'></DIV>", 2);
map.AddPushpin(2, 37.564621, -122.322625, 20, 20,
null, "<DIV onclick='HidePopup()' onmouseover='DisplayPopup(event.clientX, event.clientY, 180, 100, tParking, bParking)'><img src='parkingicon.jpg' width='20'></DIV>", 2);

}

function GetToolbar()
{
var html = "<table cellpadding=\"0\" cellspacing=\"0\" ";
html +=
"border=\"0\" align=\"left\">";
html +=
"<tr><td valign=\"top\" align=\"center\">";
html +=
"View Live: <a href='http://local.live.com/default.aspx? v=2&cp=37.565148~-122.323043&style=r&lvl=15&sp=aN.37.564666_-122.322596_Parking%20Garage_on% 20Ellsworth%20between%203rd%20and%204th~aN.37.565148_-122.323043_Mimi%27s%20Office_Medical%20Arts%20Building%0d% 0a205%20East%203rd%20Ave%0d%0aSan%20Mateo%2c%20CA'>Road</a> or <a href='http://local.live.com/default.aspx?v=2&cp=37.565144~- 122.323043&style=h&lvl=18&sp=aN.37.564666_-122.322596_Parking%20Garage_on%20Ellsworth%20between%203rd% 20and%204th~aN.37.565148_-122.323043_Mimi%27s%20Office_Medical%20Arts%20Building%0d%0a205%20East%203rd%20Ave%0d% 0aSan%20Mateo%2c%20CA'>Aerial</a>"
html +=
"</td></tr><tr><td> </td></tr></table>";
return html;
}

function DisplayPopup(x,y,w,h,title, body)
{
HidePopup();
IOSec =
new OutputEncoder();

p =
new VE_Panel("MyPanel",x+3,y,
w,h,
"blue",
31,
title,
body,
"",
"Mouse Over!",true);
p.SetToolbar(GetToolbar());
p.SetFooter(
"Get directions <a href='http://local.live.com/default.aspx? v=2&cp=37.565144~-122.323043&style=h&lvl=18&sp=aN.37.564666_-122.322596_Parking%20Garage_on% 20Ellsworth%20between%203rd%20and%204th~aN.37.565148_-122.323043_Mimi%27s%20Office_Medical%20Arts%20Building%0d% 0a205%20East%203rd%20Ave%0d%0aSan%20Mateo%2c%20CA'>to here</a>");
p.onCloseClick =
function(e) { p.Hide(); };
}

function HidePopup()
{
if (p != null)
{
p.Destroy();
p =
null;
}
}

</
script>

Also, thanks to Omar for his recommendation of Server Intellect for ASP.NET 2.0 and SQL Server 2005 web hosting. 

Since Jeff stayed up late getting www.microsoftgadgets.com ready for today's announcement of Windows Live, I thought I'd give gadgets a try.  Remembering back in the day at Inktomi when major portals were reluctant to allow a 3rd party to control anything other than a GIF file served up to a high traffic page, I'm a bit amazed that we're finally able to offer near total customization.  My first gadget is just a current map of Bay Area Traffic that refreshes itself every 60 seconds.  From the Windows Live sidebar, select "Add Content / Advanced Options / Add a Gadget by URL" using http://www.maslan.org/bayareatrafficmap/bayareatrafficmap.xml.  The javascript source is derived from the Clock sample on www.microsoftgadgets.com:

registerNamespace("Gadget");

Gadget.BayAreaTrafficMap = function(p_elSource, p_args, p_namespace)

{

   Gadget.BayAreaTrafficMap.initializeBase(this, arguments);

   var mapHTML = '<img src="http://traffic.511.org/homepage.gif">';

   var legendHTML = '<img src="http://traffic.511.org/images/color-legend.gif">';

   var objClock;

   function UpdateTraffic()

   {

      p_elSource.innerHTML = "As of " + new Date() +

         "<BR>" + mapHTML +

         "<BR>" + legendHTML;

   }

   this.initialize = function(p_objScope)

   {

      Gadget.BayAreaTrafficMap.getBaseMethod(this, "initialize", "Web.Bindings.Base").call(this, p_objScope);

      UpdateTraffic();

      objClock = setInterval(UpdateTraffic, 60000);

   }

   this.dispose = function(p_blnUnload)

   {

      Gadget.BayAreaTrafficMap.getBaseMethod(this, "dispose", "Web.Bindings.Base").call(this, p_blnUnload);

      clearInterval(objClock);

   }

}

Gadget.BayAreaTrafficMap.registerClass("Gadget.BayAreaTrafficMap", "Web.Bindings.Base");

You can download PDC session content here: http://commnet.microsoftpdc.com/content/downloads.aspx

More Posts Next page »
 
Page view tracker