Carter Maslan
view rss
New Blog Location (blog.maslan.com)
14/3/2007 external link
My personal blog is now http://blog.maslan.com
Help find Jim Gray's boat
5/2/2007 external link
Please examine some aerial images if you can.
Yahoo! Messenger for Windows Vista
8/1/2007 external link
Karsten 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? :)
Peninsula Library System Bookmarklet for my Mom
18/11/2006 external link
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: Right-click on this link:  Peninsula Library System and select "Add to Favorites..." 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) Select "Links" from the "Create in:" folder prompt, then press the "Add" button. 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.
Deep Link URLs for www.seewindowsvista.com
24/8/2006 external link
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: The North Face Avenue A | Razorfish British Library OTTO Dassault Systems Skelta UGS Areva Source Code / K2.net Dollar Thrifty Automotive Group 90 Degree Software Hierarchical Carousel View Prototype Fabrikam Prototype Knowledge Computing / Coplink Right Hemisphere The Scripps Research Institute Allscripts Prototype Accruent Heuristix Labs iBloks
Click2Call on Local Search Results using your Vonage
24/7/2006 external link
Call 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.   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: Vonage phone number (formatted like 15556667777) 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. 
Fantastic Work in Data Visualization
12/7/2006 external link
Jason'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.
The Long Tail includes post-ophthalmologic-surgery geek humor
6/7/2006 external link
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.
This is the future of SDKs
25/6/2006 external link
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.  
Better Search via Application Context
22/6/2006 external link
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. 
WPF training agenda - from humility to awe
16/6/2006 external link
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.
Queue-up the DJ with ASP.NET 2.0 Control for Amazon Web Service
21/5/2006 external link
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; }
Mimi is on the Map
11/5/2006 external link
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: 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. 
Windows Live Gadget for Bay Area Traffic
2/11/2005 external link
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");
PDC 2005 Content Download Location
20/9/2005 external link
You can download PDC session content here: http://commnet.microsoftpdc.com/content/downloads.aspx