No WPF support in Vista's Sidebar

Development, Windows Vista Comments

Sidebar

Two days ago I've installed the new Windows Vista CTP February 2006. I'm excited that the sidebar found its way back, though it took it me some time to find it:

Click the Start button, then click on All Programs. The Windows Sidebar can be found under the “Accessories” folder.

But as much as I like its return, there's one big bummer: In contrast to my previous assumption, the sidebar does not support XAML gadgets. Yes, only DHTML gagdets are possible. I read the Development Overview and the Object Model , but no hint how to develop WPF gadgets. Then I found following post by Bruce Williams in the Microsoft Gadgets Forum:

Actually, what we want the press to say is "Vista looks amazing!  The sidebar is beautiful!  The gadgets are cool, useful, and easy to make."  With DHTML gadgets, we could make the Vista schedule, and accomplish that goal.  Trying to get WPF gadgets in would have put the entire sidebar at risk for Vista, since our team is pretty small and it would have taken resources off of our DHTML efforts.

Having said that - we love WPF. We looked very seriously at adding WPF support; we did some prototyping and other investigations. Maybe we could have done it; but given the time frame it was just too risky, and a little too architecturally-rushed, for us to be comfortable attempting it for Vista. I will be personally disappointed if the next version of the sidebar after Vista doesn't include gadgets whose manifests read <type>WPF</type>.

Though I understand the point, I'm still disappointed. I've had several ideas for sidebar gadgets, but all of them require more than what can be achieved with DHTML.

Process Explorer v10 released

Tools Comments

Process Explorer v10

Somehow I missed it till now, but last week SysInternals released version 10 of their must-have tool Process Explorer:

What's new in Version 10.0:

  • The process column is locked on the left side so that it doesn't scroll horizontally out of view
  • You can configure custom column selections and save them as easy-to-access column sets
  • Image verification option now verifies images in the background
  • More refresh intervals
  • Runas menu entry in the File menu
  • Run as Limited User menu entry in the File menu to run a process without administrative privileges and group membership
  • Process menu includes Restart item to kill and then restart a selected process
  • Can suspend individual threads on Threads page of Process Properties dialog
  • The Find Window target moves Process Explorer's main window to the back to get it out of the way
  • Close Window command uses same End Task functionality as Task Manager
  • Show New Processes option scrolls display to make new processes visible
  • Heuristics to detect more image packers
  • User name of account in which Process Explorer is running is shown in the title bar
  • Services can be stopped, resumed, and paused from the Services tab of the Process Properties dialog
  • The DLLs that host SvcHost processes are listed in the Services tab of the Process Properties dialog
  • Services running within a process display on the process' tooltip
  • As a parallel to the CPU Usage History column there's now a Private Bytes Usage History column
  • The Process view includes columns that show the working set breakdown of the process in shared, shareable and private pages
  • New delta private-bytes column to show changes in private virtual memory usage
  • Can copy lines from the Process, DLL and Handle views to the clipboard
  • Option to show pagefile-backed (unnamed) sections in DLL view
  • DLL and handle searching consolidated
  • The DLL view includes columns that show the working set contributions in shared, shareable, and private pages
  • The DLL a Rundll32 process hosts is shown in its process tooltip
  • Packed DLL highlighting in DLL view
  • Image signing verification available for DLLs
  • Better DLL properties dialog
  • Object address shown in Object Properties dialog
  • File object share flags column for Handle view

coComment Logo for my blog

coComment Comments

Jayson Knight requested a logo for coComment to put on his blog. Though I think he refered to the comment form, I created two different "blog buttons" (or how these 80x15 images are called). Here they are:

  • is shown on every page and indicates that my blog supports coComment. It links to my coComment conversations.
  • is used in the comment form to inform the user that she can use coComment with my blog.

Update: I added a small explanation to define the scope of each of the images.

More coComment

coComment Comments

Dave Burke entered the coComment zone and said:

The thing is, there's no way to know if a blog (particularly a CS blog) supports CoComment. We CS guys may want to add a "CoComment Enabled" message or something to our blog comment form until the CoComment capture process is finalized.

Well, apparently they are working on it:

For advanced bloggers who would like to more fully integrate coComment features in their own blog, coComment will offer:

  • The ability to add elements of the coComment service to blogs based on non-standard blogging platforms in order to ease the usage of coComment for commenters (automated capture).

and just a couple of minutes ago Jayson Knight confirmed it in a comment to Dave's post:

Wahoo! Dual shoutouts...thanks! I've actually been in pretty close communication (both on and offline) with the CoComment devs about this service, namely this thread: http://www.cocomment.com/teamblog/?p=27#comments and this one: http://www.cocomment.com/teamblog/?p=21#comments. Merlin (the guy who seems to be in charge) has stated that he has his designers working on a solution where coco enabled blogs will display some sort of icon in the comment form box to let folks know it accepts coComments. I then asked "hey, why not ditch the bookmarklet all together and automate it"...they're one step ahead of me and said they'd have some new code for us early this week (their blog is already automated; if you have a coco account and leave a comment it's automatically tracked...look ma, no bookmarklet!). I highly recommend keeping up w/ their blog, so far they've been extremely receptive to ideas concerning coco. These guys are gonna be rock stars!

BTW, when I hear the term coComment, somehow I must think of coconut. This leads me to a better name for their service: coCoNet.

Revised coComment support

Yesterday Jayson Knight described how to add coComment support to CommunityServer. I'm a user of coComment too, therefore I added Jayson's hack to my blog.

However, I don't like how the URL to the blog post is rendered (it's the rewritten URL, not the friendly one), so I decided to fix that. Furthermore, his solution does not work if you're logged in in CommunityServer, because in this case there's no field for the comment author's name. No offense, Jayson, since you admitting that your implemention is only a quick hack 😉

Anyway, here's what I came up with:

<%@ Import Namespace="CommunityServer.Components" %>
<%@ Import Namespace="CommunityServer.Blogs.Components" %>
<% WeblogPost currentPost = WeblogPosts.GetWeblogEntry(CSContext.Current.BlogGroupID, CSContext.Current.PostID); %>
<% bool isAuthor = CSContext.Current.IsAuthenticated && CSContext.Current.User.UserID == currentPost.AuthorID; %>
<script type="text/javascript">
    var blogTool                = "<%=SiteStatistics.CommunityServerVersionVersionInfo %>";
    var blogURL                 = "<%=Globals.FullPath(currentPost.Weblog.HomePage) %>";
    var blogTitle               = "<%=currentPost.Weblog.Name %>";
    var postURL                 = "<%=Globals.FullPath(BlogUrls.Instance().Post(currentPost)) %>";
    var postTitle               = "<%=currentPost.Subject %>";
    var commentAuthorLoggedIn   = <%=Convert.ToString(isAuthor).ToLower() %>;
<% if (isAuthor) { %>
    var commentAuthor           = "<%=CSContext.Current.User.DisplayName %>";
<% } else{ %>
    var commentAuthorFieldName  = "<%=tbName.UniqueID %>";
<% } %>
    var commentFormName         = "__aspnetForm";
    var commentTextFieldName    = "<%=tbComment.UniqueID %>";
    var commentButtonName       = "<%=btnSubmit.UniqueID %>";
</script>

Update: There were two bugs: the value for commentAuthorLoggedIn was quoted and must be lower cased, and commentButtonID must be commentButtonName. I updated the script above.