James has really outdone himself here – he’s built a PowerShell script that will create lovely word clouds (ala Wordle but without quite so many options) directly into PowerPoint. This means you have something you can easily adjust afterwards (rather than just an image) and of course PowerPoint is often where you’d use these types of picture anyway. (It also doesn’t require Java which I’m not prepared to install just for Wordle). This is in addition to the various PowerShell Twitter scripts James has created (if you want to create some visual representation of tweets, James’s scripts are ideal and he describes how to do that in his post).
Here I’ve taken the press release for one of the developer keynotes at PDC09 and created a word cloud from it.

I love it. I did think (briefly) about trying to convert it to a WPF app but after looking at the script I think I’ll leave it to James :)
I’m sure this is documented somewhere but as I’ve just run into it I thought I would share. As I’m sure you know, Windows 7 (and IIRC Windows Vista) will generate a backup for you in a VHD format. When I was rebuilding my machine earlier this week, I decided to do a full machine backup and simply mount the resulting VHD afterwards to copy across any files I needed. Simples.
After performing the backup I ended up with two VHD files (corresponding to the two partitions Windows 7 creates by default on the disk) buried somewhere in the resulting folders. Job #1 was to make sure I could mount the “main” disk and extract files from it before flattening the machine.
Trouble was, on mounting either of the VHDs, the result looked something like this in Disk Management:

I was mounting the VHDs read-only. This turned out to be at the heart of the issue.
Before I could successfully mount them read-only, I first had to mount them once read/write. As soon as I had done that I could then detach and re-mount as read-only.
That done, it worked perfectly and I’ve happily extracted all the files I need as well as knowing I have a full backup to hand just in case.
With the announcement and release of Silverlight 4 Beta, I thought it might be useful to bring together a shortlist of some useful resources to get to grips with what’s new. Silverlight’s momentum is incredible, overwhelming almost. It seems like only a few months ago we shipped Silverlight 3 (oh yeah, it was only a few months ago we shipped SL3) and yet here we are already talking about Silverlight 4 and with a beta release to play with. So here goes in my Silverlight 4 resources countdown
Not bad for starters.
One of the new “features” of the ASP.NET Ajax library is the refactoring of said library into 15 or so separate scripts. As the capabilities of the library have grown, inevitably so has its size. To maximise performance it’s important to be able to specify only the parts of the library you need for the task at hand.
Of course this in itself creates another problem – how to manage dependencies. MicrosoftAjaxWebForms.js for example has dependencies on MicrosoftAjaxComponentModel.js and MicrosoftAjaxNetwork.js. These too have there own dependencies. Fortunately, someone has compiled a nice little graph for us:

Even better is the news that someone spotted this was all a bit cumbersome and awkward and came up with a very clever way around it. Enter start.js and the client script loader whose job it is to figure out, for a given component or script, what its dependencies are and load them in an optimised fashion.
ScottGu talks a little about the client script loader in preview 6 over here. While I was playing around with it, I got a little confused as I couldn’t get Scott’s example to work. I’d copied the script files from the MicrosoftAjaxLibrary_Preview6\MicrosoftAjax folder as normal but
<script type="text/javascript">
Sys.require([Sys.components.watermark]);
</script>
simply didn’t work. However the samples supplied with preview 6 worked okay. I noticed an additional script reference in there
<script src="../Scripts/ACT/ACTRegisterExtended.js" type="text/javascript"></script>
What was this ACTRegisterExtended.js script it referred to (and why wasn’t it in the MicrosoftAjax folder)? Well, the script itself looks like this:
Sys.loader.defineScripts({
releaseUrl: "%/../ACT/" + "{0}.js",
debugUrl: "%/../ACT/" + "{0}.js"
},
[
{ name: "ACTWatermark",
executionDependencies: ["ACTExtenderBase"],
behaviors: ["AjaxControlToolkit.Watermark"],
isLoaded: !!(window.AjaxControlToolkit && AjaxControlToolkit.Watermark)
},
{ name: "ACTExtenderBase",
executionDependencies: ["ACTCommon"],
isLoaded: !!(window.AjaxControlToolkit && AjaxControlToolkit.ControlBase)
},
{ name: "ACTCommon",
executionDependencies: ["ComponentModel", "Globalization"],
isLoaded: !!(window.AjaxControlToolkit && AjaxControlToolkit.TextBoxWrapper)
}
]
);
It was quite clear it’s job was to specify the dependency graph for the Ajax Control Toolkit Watermark component allowing the client script loader to do its work. Clever eh? And one would assume one could do the same things for any script including ones I’d created myself.
The recently released ASP.NET Ajax Library 0911 Beta extends this script (now named simply ExtendedControls.js) to include many more of the Ajax Control Toolkit controls. I wont include it here as it’s now quite lengthy :).
What triggered me to write this post was a great post from Bertrand Le Roy titled “Enabling the ASP.NET Ajax script loader for your own scripts” which takes you through the way this works in some detail and explains how to enable the script loader goodness for your own scripts.
Oh, and the script loader supports jQuery too so you can simply write
Sys.require([Sys.components.watermark, Sys.scripts.jQuery]);
To add jQuery to the page.
Download the ASP.NET Ajax Library 0911 Beta
Read (a lot) more detail about the client script loader from James Senior
By default, the menu control in ASP.NET 4.0 now renders tableless markup. Here’s the default ASP.NET Web Forms template (see my previous post) which uses an <asp:Menu> control for navigation.
Below you should be able to see it highlighted on the page (outlined in blue) and the corresponding markup in the IE8 Developer Tools window. You can see the <asp:Menu> renders as a <div> containing a <ul> of menu items rendered as <li> elements. This gives you scope to style it any way you choose.
(of course it is still possible to reinstate the old <asp:Menu> behaviour for backward compatibility).
There’s been a few changes to the project templates in ASP.NET 4.0 to make things cleaner and simpler. I really like them. First off is the streamlining of web.config by moving boilerplate configuration to machine.config. Applications simply inherit these settings.
Apart from anything else (like being able to find that elusive entry in your web.config file) this also reduces the dependence on Visual Studio to create new web projects (or finding an “old” web.config to copy").
If you create an Empty Web Site in VS2010 Beta 2, this is what your web.config file looks like:
The standard ASP.NET Web Site template has also been changed to add basic layout, styles and functionality such as membership. The ASP.NET Web Forms template takes its lead from the ASP.NET MVC template here.
This is the default content for an ASP.NET Web Forms site in VS2010 – note the Account folder (membership pages), Scripts folder (jquery scripts), Styles folder (stylesheet), site master and global.asax.
This is what the “vanilla” app looks like running.
And if you click on the Log In link in the top right hand corner.
According to the documentation the default site should be a two-column layout but in Beta 2 I don’t think it’s quite there. The stylesheet looks to be still in a state of flux. Anyway, the design is fully XHTML 1.0 strict compliant markup giving you a solid foundation for customising to your desired design.
A bit behind the times here but in my defence I’ve been up to my ears in nappies and things :). I’ve just been having a read of the ASP.NET 4 and Visual Studio 2010 Web Development Beta 2 Overview whitepaper and spotted a few things which I don’t think were there in Beta 1 (I’m sure this list isn’t exhaustive but let’s have a stab at it anyway):
- Expanding the range of allowable URLs
- Alter the max path / query string length
- Specify invalid characters used for the valid URL character check
- Request validation logic is customisable
- You can customise HTML, URL and HTTP Header encoding
- Perf monitoring for individual apps in a single worker process
- JSONP support in ASP.NET AJAX allowing you to access services in a different domain
- <asp:chart /> control
- HTML encoded expressions (automatic HTML encoding of markup expressions)
- New project templates include basic styling and membership functionality
- Controls render XHTML 1.0 Strict markup by default
- For controls such as FormView, Login, ChangePassword etc the outer table element they render can be suppressed
- CheckBoxList / RadioButtonList can render as <ul> / <ol>
- <asp:menu> renders as <ul>, keyboard navigation improved, gets ARIA roles / attributes
- More control over HTML generated by Wizard / CreateUserWizard controls
And of course all the other good stuff is still there.
Also check out the breaking changes document. I spotted a minor discrepancy wrt to ClientIDMode between the overview and breaking changes documents. The overview states that controls will default to AutoID whereas the breaking changes doc states that the default setting is Predictable. I did a quick test and it looks to me that the breaking changes document is correct. ie Predictable is the new default.
General availability is 21st October. Visit the Visual Studio 2010 / .NET Fx 4 Beta site for more information, downloads, forums and to submit feedback.
There have been significant changes to the SKU line-up / packaging and licensing to simplify the SKU structure and provide better value for money.
You’ll also notice that MSDN website has undergone a redesign and MSDN subscribers will also see new benefits such as Azure compute hours, Team Foundation Server and e-learning options.
Update: Link to Soma's blogpost announcing Visual Studio 2010 / .NET Fx 4.
The official launch date for VS2010 / .NET Fx 4 has also been announced – 22nd March 2010.
Time to start that download (if you’re an MSDN subscriber, otherwise you’ll have to wait, sorry).
If you’re on the Azure CTP (and specifically one of the early participants, eg a PDC attendee) then there’s a good chance you’ll have received an email like this one:
I do have a couple of problems with this mail. i think it could be a bit clearer in some respects and it gives me no indication of how I might “Copy any data you wish to preserve”. As it happens I don’t have any data I want to keep but I do have an application up there I’d like to keep.
Heading to the portal I could find no way of “backing up” my application and I don’t have the original source (well I do but it’s been hacked about something chronic as I blogged about various aspects of it so I’d rather not have to piece it all back together).
I admit this is my fault but it didn’t stop me muttering under my breath (and to our local Windows Azure people) about the Windows Azure team causing me pain. Anyway, I decided to take them up on their offer of help so I replied to their mail….
Knock me down with a feather but the last thing I expected was this reply
Talk about a no-brainer. Windows Azure Team, I take back all I muttered about you :).
A few days ago I posted about my adventures with the SEO Toolkit and some of its features for ensuring your site is as SEO friendly as possible. Today I noticed that K.Scott Allen has an article in the September issue of MSDN Magazine entitled "Search Engine Optimization with ASP.NET 4.0, Visual Studio 2010 and IIS7” (quite a mouthful but very SEO friendly). This covers a much broader set of SEO topics than just the toolkit itself and is definitely worth a read, especially if you’re new to SEO in ASP.NET.
And on another SEO-related note, Scott also has a post about enforcing lower-case URLs in ASP.NET MVC.
Via Mithun Dhar
- Kickoff | Mithun Dhar & Mark Hindsbo | Download
- Keynote | Scott Guthrie | Download
- Silverlight Key Scenarios & Features | Tim Heuer | Download
- Expression 3 Overview | Adam Kinney | Download
- Sketch Flow | Janete Perez | Download
- Toolkit & Controls | Marco Matos | Download
- RIA Services | Brad Abrams | Download
- XAML Power Toys | Karl Shifflett | Download
- Q & A Panel | Download
The slides are also available on Mithun’s blog.
I’d already started to install Windows 7 as a “host OS” on an old machine simply to be able to use boot from VHD to fire up an existing (VHD based) Windows 7 installation when I stopped myself with the thought “surely you don’t need to install a whole OS just to be able to use boot from VHD”.
I was right. And let me tell you it’s not often that happens.
There’s a bit of work involved – there’s a bit of command-line stuff in there to get the boot medium sorted out – but essentially it’s pretty straightforward.
- You need a bootable Windows PE Media – for me, creating this was the fiddly bit
- You need a “native boot” Windows 7 VHD file (I already had one but see below)
- You need to follow some instructions
Step 1 - Create a bootable Windows PE CD / DVD
To create the bootable Windows PE Media you can follow the instructions here. I already had the Windows Automated Installation Kit (Windows AIK) from creating my earlier Windows 7 native-boot VHD. You can download the Windows® AIK for Windows® 7 from the Microsoft Download Center.
Using various tools from the AIK, the instructions help you create a bootable CD/DVD with the Windows Preinstallation Environment (WinPE) installed. This is a lightweight version of the OS that will allow you to set up the boot environment and configuration to boot from your VHD file.
Step 2 – Create a “native boot” Windows 7 VHD file (if necessary)
If you don’t have a native-boot VHD file, you can start at Step 1 in the Walkthrough: Deploy a Virtual Hard Disk for Native Boot. Steps 1 and 2 help you create the VHD - this requires a Windows 7 image (.wim) file. Alternatively, check out my previous posts here and here for other, simpler options. I had a SysPrep’d image created from the techniques outlined in the first of those links.
Step 3 – Deploy the VHD and enable for boot
Follow from Step 3 onwards in Walkthrough: Deploy a Virtual Hard Disk for Native Boot to prepare the target machine, deploy the VHD and enable for boot. This essentially consists of cleaning the target machine and partitioning the disk, copying the VHD (I copied mine from an external USB drive and was pleasantly surprised this was detected without issue) and using BCDboot to create the necessary configuration.
You’re done.
One nice option this gives me is to create multiple differencing disks based off the same parent and enable each of them for boot. Or perhaps have a single parent with a differencing disk for native boot and another for Virtual PC. In my case, it was just an easy way to boot an existing Windows 7 VHD on a different machine. And the reason I wanted to do that? I don’t have an external monitor at the moment but sometimes really need that capability. Running a 2nd machine is a temporary solution. All I have to do now is buy a monitor and I can retire it again…
A little while ago I wrote about how impressed I was with boot from VHD in Windows 7. This morning I was trying to convince Mike that using this technique with a base Windows 7 VHD and differencing disks would be a great way to get VS2010 Beta1 and Beta2 (when it arrives) installed on his machine.
He wanted to know if he could just create a VHD from his existing install ie snapshot his native Windows 7 installation to VHD. That had me foxed although we talked about whether or not Windows Backup might be a possibility.
Then, as if by magic, I came across Disk2vhd which does exactly that – “create virtual hard disks copies of the physical disks that are attached … Another potential use is to allow you to move a physical installation of Windows 7 to a “boot from VHD” configuration.” Bingo!
Direct download link is here.
Technorati Tags:
vhd,
windows 7,
boot
Well, TBH, things didn’t get off to the best of starts as my attempts to install the SEO Toolkit via the Web Platform Installer failed. I hunted around but couldn’t find it. Funny though that if you click the link on the SEO Toolkit page, Web PI fires up and offers you the option to install the SEO Toolkit. Either I’m plain stupid or there are certain applications that aren’t advertised via Web PI but can be installed by it.
Anyway, I digress, it’s also very easy to install from the Microsoft Download Center so that’s what I did. To give it its official title, the IIS Search Engine Optimization Toolkit is currently at v1.0 Beta 2. Its role in life is to help you improve your luck with search engines. In other words how to improve search relevance by making your site as search-engine friendly as possible.
The SEO Toolkit is an IIS7 extension so IIS7.x must be installed on your machine. That said you can use it to analyze both local and remote websites and these don’t have to be IIS. It includes a Site Analysis module, a Robots Exclusion module and a Sitemaps and Site Indexes module. The Toolkit will perform analysis, offer recommendations and assist you in making changes to your site.
The SEO Toolkit appears as a feature in IIS Manager

Open the SEO Toolkit and you’re presented with 3 options; analysis, sitemaps and robots exclusions
Analysis
For analysis, supply a URL and report name and the SEO Toolkit will head off and crawl the site, reporting back in a number of key areas such as SEO “violations”, content summary, performance issues (eg slow pages) and links (eg pages with most links, most linked pages etc). You can see the sorts of violations that get flagged below (I’ve run the tool against my default site which has very little content).
Here’s a report I ran partially (it can take a while to run an analysis on a big site) on microsoft.com which gives a much broader range of results as well as their associated priority
Sitemaps
The sitemaps and sitemaps index feature allows me to create and modify sitemaps and sitemap index files for my (local) site.
This generates a sitemap file thus
Robots.txt
Similarly for robots.txt I can add Disallow and Allow rules
Which results in the robots.txt file
All in all, extremely useful, particularly the site analysis features which flag up potential issues that may otherwise have gone unnoticed.
Check it out at the SEO Toolkit page on IIS.net. There are additional articles on using the SEO Toolkit linked at the bottom of that page as well as a dedicated forum.
Some time back I did a video and some demos on how to create IE8 accelerators, search providers and web slices based around a traffic information site I called Trafficify (I know, it’s not pretty, it was never meant to be published but Ian wanted it up on the IE Add-On Gallery so up it went).
Since then, we’ve released the Web Application Toolkit for IE8 which makes it *even easier* (as if that were possible after my explanation) to create these things. In particular it includes some clever ASP.NET controls which do most of the hard work for you.
As you can see there are 3 Extenders (controls that you can attach to other controls to add new functionality), one each for search, accelerator and web slice. There’s also a “stand alone” control for web slices which just takes its content as the web slice content. And there’s the BrowserHelperControl which identifies the browser type and enables / disables IE8 specific functionality on the page as well a providing the capability add helpful messages for the user.
VisualSearchControlExtender
The VisualSearchExtenderControl extends a button or similar control that the user will use to install your search provider. As well as allowing you to easily specify search and suggestion URLs etc, the Toolkit also comes with handlers and templates to make it very straightforward to create a new search provider. The control is automatically hidden if the user already has the search provider installed.
The markup for my VisualSearchControlExtender for Trafficify looks like this:
<asp:Button ID="SearchButton" runat="server" Text="Button" />
<IE8:VisualSearchControlExtender ID="VisualSearchControlExtender1" runat="server"
TargetControlId="SearchButton"
TargetControlText="Install Trafficify Seach Provider"
OpenSearchDescriptionHandlerUrl="~/OpenSearchDescription.ashx"
SearchUrlTemplate="~/Search.aspx?road={searchTerms}"
SuggestionsUrlTemplate="~/SearchSuggestions.ashx?road={searchTerms}"
SearchProviderTitle="Road Search" />
I have a standard ASP.NET Button with ID SearchButton that the user can use to install the search provider. OpenSearchDescription.ashx comes with the Toolkit and generates the OpenSearchDescription file based on the properties you set on the control. I have a search page (Search.aspx) and a suggestions handler (SearchSuggestions.ashx) that takes partial search terms and offers different alternatives. It’s possible (quite easy in fact) to add unique images to the suggestions but my application doesn’t lend itself well to that.
AcceleratorControlExtender
Similarly the AcceleratorControlExtender extends and installation control and makes it easy to build a new accelerator
The markup for my AcceleratorControlExtender for Trafficify looks like this:
<asp:Button ID="AcceleratorButton" runat="server" Text="Button" />
<IE8:AcceleratorControlExtender ID="AcceleratorControlExtender1" runat="server"
DiscoveryControlId="AcceleratorButton"
DiscoveryControlText="Install Trafficify Accelerator"
InstallDescriptionFileUrl="~/traffic.xml" />
In this case I had an OpenServiceDescription file already (from my original implementation of Trafficify) so I just used that – these controls are happy with either a file URL or the handler + template approach.
WebSliceControl / WebSliceControlExtender
With web slices you have the choice to use the WebSliceControl (in which case you simply include the content you want to turn into a web slice as the content of the control itself) or the WebSliceControlExtender in which case you set the TargetControlId to the ID of the control you want to turn into a web slice. The control supports alternative update and display sources (ie it the refresh tigger and content don’t need to come from the original page).
The markup for my WebSliceControl for Trafficify looks like this:
<IE8:WebSliceControl ID="WebSliceControl1" runat="server" WebSliceTitle="Traffic Info">
<uc1:TrafficSummary ID="TrafficSummary1" runat="server" />
</IE8:WebSliceControl>
I’ve incorporated all the content I want in my web slice as a user control which makes life nice and easy.
BrowserHelperControl
The BrowserHelperControl detects the type of browser and optionally displays a suitable message / hides IE8 specific controls on the page for non-IE8 browsers.
The markup for my BrowserHelperControl for Trafficify looks like this:
<IE8:BrowserHelperControl ID="BrowserHelperControl1" runat="server"
CheckSupportedScenarios="true" />
Quite simply I’m using it to hide the IE8 controls when appropriate with the CheckSupportedScenarios property.
Here’s the results – a slightly updated (but still very ugly) version of Trafficify.
Note the notification of the web slice and the buttons to install the accelerator / search provider.
The web slice provides me access to latest traffic information whatever web page I’m viewing.

The accelerator shows me a preview of traffic conditions at a particular location (whatever I’ve selected). Note that the button to install the accelerator is hidden as the accelerator is now installed.
The visual search includes search suggestions as I type in the search box.
Note that now the search provider is installed, its install button is also hidden.
I’d definitely encourage you to take a look at the Web Application Toolkit for IE8 as a great way to ramp-up on extending IE8.
Links
IE8 Homepage
Web Application Toolkits
Web Application Toolkit Videos