Tuesday 16 December 2008

WSS 3.0 vs MOSS 2007

The Microsoft WSS/MOSS product comparison table can be found here:

WSS doesn't include the features listed here:

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Friday 12 December 2008

Search 2 Launched on westernaustralia.com

It's been a busy week at Tourism! In addition to pushing out new web sites, my team has also been busy launching the next iteration of search on www.westernaustralia.com. Although wa.com is a MOSS-based web site, it uses a custom search system built in-house to meet an exacting set of requirements and keep half the planet happy. 

Search 2, as it's known internally, started out as a retrofit of the tours search sub system but quickly evolved into a full rewrite to make search faster, more accurate, and more configurable while introducing new features like spelling suggestions. 

Tourism WA has a paid membership model where tourism operators pay an annual fee to join the Tourism WA Network in return for a listing on westernaustralia.com. As a result, everyone wants to see their product listing on top of the pile when it comes to search results. We also have a lot of custom content on the web site: if you search for "Perth", the MOSS content page related to Perth is listed first; if you search for "hotel", you're probably after accommodation products but the display of the hotel listings in WA are randomised to ensure fairness. Trust me, these are some simple examples--what we end up with is a complex business logic that dictates how search results are weighted and ranked. 

The search implementation on wa.com has a long and sordid history. We started out using the in-built MOSS search and the BDC, crawling MOSS page content and tourism product stored in the Australian Tourism Data Warehouse. The BDC is a great tool for unifying disparate data sources but MOSS search simply didn't give us the configurability required to deliver on the business requirements. 

When panic set in, a Google search box was evaluated. While it did search, as you might expect, it only searched the Google way; it's still sitting in the server room, unused. As everyone fretted over the many problems we were facing, Rick, the developer working on search, went "underground" and built the RDC--or Rick's Data Catalog. The RDC would eventually replace the BDC and MOSS search in our little world. wa.com was launched with this solution, which is actually build on SQL Server Full Text indexing.

The RDC got us across the line after a never ending round of user acceptance testing but fell down in the tours category. It also abused some of the more horrific technologies from some of our older sites like XSLT and inline C#. It was also just a messy proof of concept at the code level and had some major design flaws. An example of the latter was a crawler that couldn't be scheduled and cleared the main index table before initiating the crawl; the problem with this approach was no search results would be returned while the crawler was run--apart from the manual administrator intervention required to actually kick it off and verify the results.

Search 2 is one of those engineering marvels you come across so rarely in the software world. The underlying design is fairly straightforward for what it does and it uses the chosen technology set appropriately--judiciously and as required. In other words, it's not over-engineered and gets on with the job in a logical, unobtrusive way. The grunty data work is relegated to the database where it belongs and the main UI is composed of configurable web parts. 

That's not to say Search 2 didn't take a while to build. Nico, one of most experienced team members when it comes to MOSS and search, has been hard at work on this project since April. UAT progressed over a month and deployment took three days! 

We're already building on top of the Search 2 fundamentals Nico has in place. An online booking engine has passed the proof of concept stages and a new itinerary planner should be out in the new year. Search 2 will also form the basis for a search re-release on the partner sites, which adds another few dimensions to the mix. Working with the Search 2 code base to integrate these components has almost been pleasurable. Either way, who can complain when all of the project stakeholders are happy?!  

Nico's off for a well-deserved Christmas break and I'm quietly confident we won't have any major bedding in problems during the four weeks he's away (unless the database server dies but that's another story). Meanwhile, Search 2 should be humming happily along--have a look for yourself!

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Fourth Internet-Facing MOSS 2007 Site Launched!

I'm happy to announce we rolled out our latest MOSS 2007-based internet facing web site yesterday afternoon. The Australia's Coral Coast site is the latest (and greatest?) web site to re-launch on the Tourism WA partner site platform, as it's known internally, since June. The dev team did most of the hard development work earlier in the year and we've pretty much handed over to the service delivery and content management team; SDCM are now restructuring each site's information architecture and updating and SEO-ing the content as it's brough across from a corresponding, legacy MCMS site. Even though the dev effort is tapering off (we're still fixing bugs and tweaking), it's amazing to see these templated but distinct internet sites rolling off the line without a hitch.

This site is the last of the regional tourism organisation sites to be relaunched this year but we've got two more to go before this phase of the project wraps up and we move forward with the stack of visitor centre sites and campaign sites. Compare the new Coral Coast site with the MCMS-based Experience Perth site and let me know what you think.

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Tuesday 9 December 2008

No mapping between account names and security ids was done

Ran into a bit of stupid today--I doubt the details matter too much but I was attempting to install the Hyper-V MSU and the Hyper-V role in Windows Server 2008 when I came up against this message in both cases:

No mapping between account names and security ids was done

Naturally I told Windows I don't care and to sort itself out but it wouldn't listen.

I finally realised I'd renamed the Administrator account as I normally do but hadn't logged off or rebooted. I rebooted just to be safe and that fixed the problem.

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Windows Server 2008 with Hyper-V vs VMWare Server

Back in March I wrote about my first experience with Windows Server 2008 RTM and the pre-release version of Hyper-V. Despite a fiddly installation issue with my locale set to Australia, I eventually got the problem sorted out and declared that I liked Hyper-V. Then I read Andrew Connell's post extolling the virtues of VMWare Server 2.0 and I abandoned Hyper-V to try it out (we run ESX at Tourism and I'd already noted the portability issues with a Hyper-V-based VM during my own trial). I didn't have a ton of joy with the 2.0 beta so stuck with v1.x while v2.0 RTMd--haven't tried it again since. 

I'm an Andrew Connell fan and when he mentioned he was switching back to Hyper-V I figured I'd revisit. The first real version of Hyper-V has now been released and I was curious to see whether the locale issue went away. AC also cited performance and since I had some gripes with the VMWare Server web interface I wanted to see how it would fare. 

The installation was painless today. Install W2k8 x64, install the MSU, install the Hyper-V role and hey presto. I'm currently installing a W2k8 x86 VM and haven't run into any problems with the VMM service not starting or anything else for that matter. My aim is to build out a base image of the OS, copy or snapshot it, and then go from there with a small farm MOSS build out for dev purposes. 

I'm also very curious to find out for myself how easily I can move VMs around and how far I can get with VPC 2007 VMs under Hyper-V... and maybe vice-versa if possible.

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Wednesday 3 December 2008

Christmas Came Early

We're in the throws of all sorts of things physcial here at Tourism WA. Apart from an office refit (no more trestle tables but the dev team is currently stuck in the training room with no windows), the ICT team are completely rebuilding our virtual environment.

So what does that mean? To start with, redundancy in terms of mirrored setups at head office and the data centre. Each environment is getting a rack full of new blades and some of these things shown in the picture--$170k worth of SAN or 10 usable terabytes of storage.

On the software side, we're going VMware ESX 3.5, Windows Server 2008 x64, SQL Server 2008 , MOSS 2007 x64, and .NET 3.5 SP1 (upgrading from Windows Server 2003 x86, SQL Server 2005, MOSS 2007 x86, and .NET 3.0). Should be interesting. 

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Thursday 13 November 2008

Fixing the IE7/MOSS/HTTP 413/Client SSL/View State White Screen of Death

Content on the Tourism WA partner sites like Australia's Golden Outback needs to be accessible by content editors over the internet. To facilitate this, we use client certificates over SSL to authenticate users. Each certificate is additionally mapped to an Active Directory account to support granular control over specific assets and provide standard "auditing" (in the MOSS version history sense) of user activity. Users additionally benefit from a single sign-on experience since IE hands off the client certificate in a relatively seamless manner.
In the image below the first box describes how client certifcates are created and provided to the content editors; the second box describes how IE and IIS authenticate the user to MOSS via AD.

This approach looks pretty nice on paper apart from the manual task of creating the client certificate and the potential distribution security. Our external content editor user base is fairly small and well-known, however.

Following the launch of the first partner site using this security model, we came across a painful situation I'll describe here but hope you never encounter in the field. If you have come across this problem, hopefully this post will steer you in the right direction. 

So the problem: 

When attempting to save, check in, or publish a page, IE content editors were presented with a white screen (a page with nothing in it, more specifically) in a relatively short timeframe. The problem appeared to be sporadic and definitely affect some pages but not others.

Inspecting the content editor's machine revealed no hardware or software issues and nothing was logged to the client's event logs. The HTML source was nothing special with the IE Dev Toolbar telling the same story:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<META http-equiv=Content-Type content="text/html; charset=windows-1252"></HEAD>

Although some basic IE security and JS settings were tweaked, friendly error messages were already turned off. As our initial user base was regionally-based and we mistakenly believed we couldn't reproduce the problem on the local network, we initially ascribed the problem to a lousy, congested regional network connection. I say we mistakenly believed we couldn't reproduce the problem because we generally use the non-SSL-secured internal site at head office due to an unrelated issue. 

This wasn't a lot to go on and we struggled to diagnose the problem while waiting for the installation of a WAN accellerator upgrade to our own regional office to prove or disprove our theory about the network infrastructure. Meanwhile, our third partner site came online and the content editors logged the same issue; this time, those content editors were sitting in Perth on metropolitain ADSL 2+ wires.

With the installation of a broadband connection at home I decided to see what I could find out outside the corporate environment. I logged into to one of the secure sites and got lucky--I was finally able to reproduce the problem on one of every five or so attempts to save a rather large page. 

With that achievement under my hat I fired up my trusty friend Fiddler 2 and reloaded the site. As I mentioned above, the partner sites are delivered to content editors over an SSL-secured (443) connection; in other words, that means inspecting the HTML request/response data outside the browser would normally be a bit tricky. Luckily Fiddler 2 makes this easy--you simply need to check the Decrypt HTTPS traffic checkbox in the Fiddler settings (under Proxy Settings) and Fiddler will present you with the goods. 

In my case that was step one but step 2 meant I'd also have to hand over a valid client certificate since Fiddler essentially does the man in the middle thing to pull off the SSL decryption bit. Fiddler's documentation is pretty good on this subject so after exporting my existing certificate with a .cer extension I dropped it into My Documents\Fiddler2\ClientCertificate.cer (named exactly as shown). At long last I could not only reproduce the problem but I could even see under the covers of the HTTP protocol!

And it was that simple: hitting the same problem page a few times and Fiddler told me it was all about a lousy HTTP 413 error--all this for a bloody error code IE should have been showing me in the first place. 

Here's the request:

POST /en/ThisPageIsTroubba.aspx HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/x-shockwave-flash, application/x-silverlight, application/x-silverlight-2-b2, */*
Referer: https://edit.problemsite.com/en/ThisPageIsTroubba.aspx
Accept-Language: en-au,en-GB;q=0.5
Content-Type: application/x-www-form-urlencoded
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Host: edit.problemsite.com
Content-Length: 71069
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: WSS_KeepSessionAuthenticated=443; MSOWebPartPage_AnonymousAccessCookie=443; s_cc=true; s_sq=%5B%5BB%5D%5D
HTTP/1.1 413 Request Entity Too Large
Content-Length: 0
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Sun, 02 Nov 2008 10:47:22 GMT
Connection: close

"What is an HTTP 413 error," I asked, just like you may be doing now? It means the server rejected the request because it considered it too big. Weird, considering the request was only just over 71KB but at least we could rule out the network--a good thing because a lot of our future content editors are very much regional.

The w3c tells us the following about HTTP 413:

"The server is refusing to process a request because the request entity is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request.
If the condition is temporary, the server SHOULD include a Retry- After header field to indicate that it is temporary and after what time the client MAY try again."

I mentioned page weight previously and the title of this posting also ties in viewstate. Why? I've already suggested the white screen problem seemed to affect some pages but not others. While investigating this problem, I noted the viewstate on most of the anonymous partner site pages is very low at a <2KB.

Still with me? 

We're currently running on Windows 2003 and IIS 6.0. When IIS has to deal with client certificates, the server uses the UploadReadAheadSize metabase property during the SSL preload process to determine the maximum buffer size for the incoming request. The default buffer size is 48KB to prevent denial of service attacks and for that reason Microsoft doesn't recommend setting it too high. In our case, the 71KB request was considered too large and IIS wouldn't let it through. Why the save/check-in/publish worked sporadically I can't say, but increasing the value assigned to this property instantly fixed the problem. We increased this setting on every relevant IIS web site using this command:

cscript adsutil.vbs set w3svc/1/uploadreadaheadsize 204800

Note the setting represents bytes, not kilobytes, and the TechNet article on changing this is incorrectly specifies a value of 200.

In theory the HTTP 413 should have come up in the server logs but if it did, we never caught it. 

For more information about the metabase changes, the following blog posts may be of use:

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Great SQL Server Database Performance Article

Zach Nichter has written a very approachable article for TechNet Magazine on the subject of SQL Server performance measurement. It's brief and very much to the point, covering performance counters, profiling, and dynamic management views. It's by no means MOSS-specific but nonetheless applicable and the author obviously has a wealth of experience on this topic.

"Optimizing SQL Server CPU Performance"


Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Tuesday 11 November 2008

Firefox 3 Penetration

I was vaguely surprised when I checked our Omniture stats for the last three months: 58.6% of Firefox users visiting all of the eMarketplace sites over the last three months were using version 3. So it's official, we're now supporting IE6/7 and FF2.x/3 across the MOSS-based anonymous sites.

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Stacking Windowed Elements and Flash Movies with z-index and wmode in IE

There exists a common misconception z-index will solve all of your DHTML stacking problems. While this is true for DHTML elements, the assumption falls down in the face of Internet Explorer and the way this browser treats "windowed" components like drop down lists based on the select tag. Flash objects aren't immune but for different reasons. Firefox will honour stacking orders for all elements but this is not the case when you're dealing with IE6/7. Windowed elements maintain a different stacking order than DHTML elements (they're added to a different plane than your windows elements) and therein lies the problem.

IE7 is better than IE6 when it comes to the select element but Flash requires some additional finessing, which I'll detail below. If you're still supporting IE6, consider using an IFrame (perhaps dynamically positioned) between your windowed component and your DHTML object to mask the underlying windowed component. The concept is generally referred to as an "IFrame shim". Don't forget, IFrames can be configured with a transparent background; either way, simply point the IFrame URL at nothing. The IFrame is no longer a windowed element as of IE5.5; although some people don't like IFrames for security and because they're frames, in this case the IFrame is your friend because it bridges the gap between windowed elements and windowless elements. The one main gotcha with this approach is how the user interacts with an IFrame: button clicks and mouse actions will be sent to the IFrame and the underlying content won't be interactive while the IFrame is visible.

Flash--being Flash and an ActiveX-wrapped plugin--is a different beast. IE places embedded content in a DHTML layer above all other layers by default and this is not always where you want your Flash content. On the westernaustralia.com home page, a fancy combination of DHTML and Flash elements known as the Tourism Australia overlay sits above the wa.com Flash banner (it's only visible to international site visitors); the DHTML-based navigation likewise has to sit above the central "experience panel" and the global site selector drop down in the right column.

To reign in your Flash objects and their stacking order you need to use an extra parameter named wmode:

&lt;param name="wmode" value="opaque" />

By doing so the Flash object and surrounding DHTML elements will team up to honour z-index styles as you intend. It's also a good idea to add a corresponding wmode="opaque" attribute to your element tag. Opaque and transparent modes may compromise your animations and video--we haven't had any problem on our sites, however, and use both animations (the wipe) and video. 

Here are a few additional tips for dealing with Flash:
  • Add Flash elements to a predefined placeholder element using JavaScript to ensure the object is activated automatically (otherwise users will have to click the Flash movie to run it and movies that should play automatically without user interaction may not start when the page loads). SWFObject will do this for you but it's really easy to write the JavaScript into your existing .js files, thereby avoiding the need to weigh down your page with yet another script library.
  • Don't rely solely on the embed tag. Use the object tag for IE and nest an embed tag within it for Mozilla and everyone else.
  • Always explicitly configure the wmode parameter as a child of the object tag and an attribute of the element tag.
  • Avoid the wmode "transparent" setting unless your Flash movie actually has transparent sections. Use "opaque" in most cases to increase rendering performance. The default is "window".
  • Consider a Flash alternative like Silverlight ;-)
Microsoft's windowless vs windowed summary:

Adobe's semi-useful KB article about wmode:

How to create an IFrame shim:

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Monday 10 November 2008

CSS Style Guide

For a brief but useful CSS style guide see http://www.phpied.com/css-coding-conventions/

The tip about cascading style names caught my eye in particular--it's incredible how much code I've seen that simply ignores this simple concept at the cost of breaking things.

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Thursday 6 November 2008

Microsoft offers startups free software

Microsoft has just launched the BizSpark program to provide startups with a complete fit out of MS software for next to nothing. You have to associate yourself with a 'network provider' (eg. a venture firm) and you pay $100 to exit the program, which is forced after three years; apart from any stake the venture firm may take in your business and the exit fee, the software is free. There are some additional prerequisites to meet as well.

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Third Internet-Facing MOSS Site Launched

The third of five regional tourism organisation (RTO) sites built on MOSS 2007 launched yesterday afternoon: www.australiasgoldenoutback.com. After this lot we've got another 25-odd partner sites to go--all to be run on the same platform.

This site replaces its MCMS 2002-based legacy equivalent and follows on the heels of the ASW and ANW sites. 

Congratulations to AGO and the team!

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Monday 27 October 2008

Dynalink RTA1046VW DMZ Config Kills VoIP

While trying to speed up my P2P downloads yesterday I decided to configure a DMZ host in my Dynalink RTA1046VW router (on advice from a mid-2006 forum thread). My P2P ports were forwarded correctly, according to portforward.com, but I figured it would be worth the experiment.

As I'm now on a naked ADSL 2+ plan, I no longer have a traditional land line and all inbound and outbound calls are shunted across the internet; to facilitate this, my analog phone plugs directly into the back of my modem. My new ADSL account was live on Friday and I spoke with my sister in Canada successfully for an hour straight on Saturday morning. On Sunday I configured the DMZ host and from that point forward I noticed I could no longer hear anything in the phone's earpiece. The internet connection was otherwise fine, apart from a few dropouts every so often, but there was absolutely nothing coming out of the phone's earpiece; calls were otherwise going through (sporadically) but the caller could hear me fine. To top it all off I got home tonight and successfully replayed my phone messages. The problem was reproducible with another phone. Weird. 

The only thing left to do was remove the DMZ host configuration and behold--the tin cans work! I don't get it--I really don't know much about VoIP but my guess is VoIP runs over a port and the port was being forwarded by the router to the DMZ host... dunno, especially considering the default setting is to simply discard packets not belonging to an application configured in the port forwarding table. 

[Update: Silly me, of course VoIP runs over a port--the port I set when I configured VoIP in the first place, duh. Anyway, I still reckon it was being forarded the DMZ host but I've noticed the kitchen microwave interferes with the phone and produces a similar problem where, after successfully initiating a call, I can hear the person I'm speaking to but they can't hear me.

By the way, my P2P speed reached about 180KBps down--a dizzying new height for the likes of someone who had no internet before this point.]

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Thursday 23 October 2008

Chrome Crash

Never thought I'd see the day--first time in nearly two months of heavy use:

Outlook was also crashing at the same time so I blame Outlook personally ;-)

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

sgen.exe /compiler:/keyfile Doesn't Allow Spaces

While implementing a bit of .NET code that will ultimately live in SQL Server 2005, we came across a few minor problems with the auto-generated XmlSerializers.dll and, in particular, signing it with a key file. The assembly calls out to a web service, hence the need for the XmlSerializers.dll.

Normally you can tell Visual Studio to build this assembly for you at compile time: Project properties -> Build Tab, Generate serialization assembly = On | off (note this is set per configuration, eg. Debug, Release). SQL Server had a few problems around versioning with the generated assembly, however, so we decided to add a post-build event and use sgen.exe explicitly to manage this at build time. 

Soon after we also decided the main assembly and XmlSerializers assembly would need to be signed, as it's also being called from another bit of code in MOSS; we naturally figured adding the /compiler:/keyfile flags would take care of this.

The path to our .snk file has spaces, however, and the keyfile flag doesn't seem to like spaces. Initially I thought we would simply xcopy the .snk file to the c: drive and then reference it directly from there but that's dirty. 

In the end, there is a way to escape the quotes in the string: 

"C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\sgen.exe" /compiler:"\"/keyfile:$(ProjectDir)MyKeyFile.snk"\" /force "$(TargetPath)"

Custom-Built Microsoft Office SharePoint Server 2007 Branded Sites and Webpart Development - info@mediawole.com

Sunday 19 October 2008

Conent Delivery Network (CDN) Alternatives

If you're looking to deliver your website via a content delivery network or content distribution network like Akamai, Limelight, or CDNetworks, you've got a few alternatives to consider (especially on the cost point). 
  • Amazon is set to release a new pay-as-you-go content delivery service before the end of the year. It's also built to integrate with Amazone S3 for storage. 
  • Coral is a free CDN built on peer-to-peer technologies. Seems like it's being run as some sort of test project but it's free.
In case you're interested, www.westernaustralia.com has been delivered through Akamai since early August. We reduced international load times from an average of 43.5 seconds to 5.5 seconds on go-live but pay a hefty annual fee for the privilege. We're using their standard geographic caching service and their Dynamic Site Accellerator product to speed up requests that do have to hit our Perth-based servers.

CSS Reset Fundamentals

I'm not much of a visual designer but this little CSS reset snippet from Karinne Legault's article on The Web Squeeze is easily added to an existing CSS file instead of referencing yet another style sheet (not that I don't trust Yahoo!). Karinne's article also discusses the construction of a full, floated HTML layout from mockup to markup to styling.

html, body { margin: 0; padding: 0; }

Saturday 18 October 2008

Free eBook: Introducing Microsoft SQL Server 2008 (MS Press)

Microsoft Press is offering the Introducing Micorosoft SQL Server 2008 ebook (by Peter DeBetta, Greg Low, and Mark Whitehorn) as a free download

Tuesday 14 October 2008

Silverlight Penetration

Silverlight 2 RTM'd yesterday with a personal hero of mine, Scott Guthrie, doing the press release thang

We've been taking very small steps in the Silverlight direction for a month or so now (the fancy bits on Tourism sites are currently all Flash-based) but have yet to commit due to take-up rates of the Silverlight player--it's still early days on that front, despite decent penetration rates given the player's only been around for a year or so. The official press release claims Silverlight is installed on one out of every four desktops but the install base is as high as 50% in some countries. The Beijing olympics and a number of other high-profile partner sites are cited as major penetration drivers.

Flash has been around a lot longer and obviously has a greater penetration rate so I thought it would be useful to compare the number of global visitors to all of the Tourism WA eMarketplace sites running Silverlight versus the number running Flash. The results were pulled from Omniture and are as follows:
  • 15% of visitors to the eMarketplace sites have Silverlight installed
  • An average of 17.6% of internet users have Silverlight installed (so not quite one out four just yet)
  • 101.6% of visitors to the eMarketplace sites have Flash installed (yes, 101.6%...)
  • An average of 87.5% of internet users have Flash installed
I'll keep an eye on these stats and report back in another six months. 

Guthrie's a superstar and in typical Scott Gu fashion--despite being and MS VP, he's got a dandy blog post to get you started with Silverlight:


I'm planning to do some MOSS/Silverlight posts in the coming months to detail my experience integrating Silverlight with SharePoint and may even have a Silverlight web part available for download before long! Watch this space...

[Update: no cool Silverlight dev to report unfortunately :-( but I have posted current penetration stats along with some links to related posts of mine.]

Thursday 9 October 2008

Man Down

We lose a good man here on Friday. Elliot's been a gun programmer since his debut as a quirky 17 year-old work experience student nearly two years ago. I had my doubts about yoof in general back then--nearing thirty, as I am--but Elliot's earned his keep many times over (his keep being negligible as a state government contractor). 

Elliot's one of those people you meet in life who keep the world interesting. He's still a young fella but the potential he's demonstrated during his time at Tourism suggests he can go wherever he wants with his career and his life. Apart from being a strong developer with a keen interest in everything code, he's got an outstanding personality for a geek. He can flirt with the CEO between debugging lines of code and chewing random pieces of metal. As a dev, he's got an incredible knack for quickly thinking through a problem, weighing up solutions, and implementing a feature-rich app in under ten minutes. 

I was one of the first team members to work with the guy when he arrived in early 2007 and while I like to think I may have contributed something to his professional development I know in reality his own drive and raw brain power make him who he is. It would blow your mind to hear about some of the MOSS-integrated applications he's written on a whim. 

Elliot's been poached by our venerable BA, who runs his own contracting firm; he's now off to the Department of Education and Training in Perth to rock out with his cock out, no doubt, and do some crazy MOSS 2007 and CRM mashup. 

Memorable highlights have to include the green suit, wookie sounds, fire alarm tip-offs, and the didgeridoo; I'll leave it up to the team to add to that list as comments.

Dude, it's been great working with you over the last while and while it's not going to be the same around the office without you, I know you'll fly no matter what you do or where you're working. Your contribution has been massive and it's been an abosolute pleasure working with you. We'll miss you buddy ;-)


Don't Touch that Database!

Microsoft and urban legend have been harping on for yonkers now that we must never, ever touch MOSS content databases or risk voiding any hope of support. This basically includes modifying a content database in any way--from extending it with new functionality (sps, triggers, etc) to modifying existing data. This isn't always easy to avoid but luckily the API gives us access to most things in MOSS.

If you're wondering what exactly qualifies as database modifications or have modified a content database and now require support, you might want to read this:


Tuesday 7 October 2008

Channels (SBS, Nine) Disappear in Windows Media Center

I've been having a problem for years on Vista MCE with SBS dropping out (being unwatchable) every few days. A restart wouldn't correct the issue and I'd have to a full re-scan. The problem was quite strange because it was unpredictable: sometimes SBS would disappear every day, sometimes I'd go a full week before having to re-scan. Summer always seemed better, oddly enough. Since we moved into the new house with a brand new antenna the problem's only worsened. Luckily my wife's comfortable doing a re-scan as required and she doesn't much care about SBS anyway ;-)

The other day I finally decided to install Vista SP1 and update the drivers for the ancient Hauppauge Nova-T PCI tuner card I'm running. I was previously running the Vista RTM drivers instaleld by the OS but Hauppauge has released an updated set since then. SP1 went smoothly but the driver update was disastrous with SBS and Channel 9 disappearing completely. Re-scans weren't helping. Reboots weren't helping. The wife does watch Channel 9 so my manhood was at stake. Luckily a quick driver rollback fixed that one in a hurry but the growing lost channel problem led me to see if I could find anything new on Google since the last time I looked. 

A few others seem to have this sort of problem but there doesn't seem to be a definitive answer out there. This title of this hotfix led me to breathe a sigh of relief until I noted it was included in SP1. Reading through and pretty much on a whim I thought I might try disabling actual stream opportunistic scanning, whatever that means, and lo, it did the trick. SBS and 9 came back and a few weeks on and I haven't lost SBS once! 

As per the hotfix instructions (down the bottom), I created a new DWORD called DisableActualStreamOpportunisticScanning with a value of 1 under HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Media Center\Service\GLID

Apparently this key tells WMC to stop reading the latest channel info coming down from the station so in theory your channels might get stuffed up if the station changes some of this info. I'm not using a program guide at the moment but I don't think this has anything to do with program guides--it's more about the channel's meta data. Something like that. I don't really care but it worked!

Friday 3 October 2008

Burning with FeedBurner - MyBrand and CNAME and 404

I just decided to burn this blog with FeedBurner. You can now subscribe from http://feeds.mediawhole.com/DirtyWords if you haven't already ;-)

The blog is hosted on Blogger and integrated with the mediawhole.com domain, with DNS provided by everydns.net (thank you, I love you guys!). I've previously blogged about this setup.

The DNS settings allow me to point the default Blogger URL (http://michhes.blogspot.com) to http://blog.mediawhole.com via a CNAME record. When I noticed the MyBrand option in FeedBurner, I naturally jumped at yet another CNAME/mediawhole.com branding opportunity! Sad geek, yes... 

Anyway, the setup was a bit finicky so I thought I'd detail it here. 

To start, I created a FeedBurner account and burned my feed by pointing FeedBurner to http://blog.mediawhole.com. That presumably adds me to the FeedBurner database and syndicates my content through FeedBurner but it doesn't tell Blogspot about the connection so my Subscribe button goes to the default Blogspot address and I get not FeedBurner subscription stats. That's one of the key points for me. 

Next up, I clicked into My Account --> MyBrand in FeedBurner. MyBrand is PRO feature but all their PRO features seem to be free now (thanks Google!?). This page tells you to create a new CNAME record so I did that at everydns.net... Fully Qualified Domain as feeds.mediawhole.com, Record Type as CNAME, Record Value as feeds.feedburner.com. I then entered my feeds.mediawhole.com address into the MyBrand page and activated the service. 

Finally I told Blogger about the change under Settings --> Site Feed. The Post Feed Redirect URL I supplied was http://feeds.mediawhole.com/DirtyWords because the Blogger default (http://feeds.mediawhole.com/feeds/posts/default) was returning a FeedBurner error page complaining about 404. 

As a PS, I then created a new subscribe chicklet in FeedBurner and added it to this blog. It created the subscribe URL using the original URL I supplied when first burning the feed so I updated that manually in the HTML. 

Sezai is a MOSS MVP!

One of the very best MOSS-men I know here in WA, Sezai Komur, has just been declared a MOSS MVP! Not only that, but he's the first MOSS MVP in Western Australia!

I had the pleasure of working with Sezai for a year or so back in 2006 when I first arrived at Tourism. At the time we were running MCMS 2002 with a SharePoint seach backend and he was one of the team gurus in both areas. From that point he moved into MOSS 2007 as the team developed the westernaustralia.com site before leaving to go to Vivid. Sezai's since presented at the Perth SharePoint User Group and I come across his blog frequently when searching for answers to my MOSS questions. 

Apart from being a really nice guy, Sezai's got a great enthusiasm for his work and he's a top ambassador for the MOSS platform. Congratulations dude!!

TWATS Wiki (or implementing a wiki at work)

My dev manager at Tourism (Steve) recently suggested we implement a wiki with the intention of improving our project and software documentation and making easily accessible. He'd been involved with the launch of a wiki at a previous job and found it beneficial. 

We previously built a wiki on our MOSS-based intranet using one of the MOSS templates but it was ugly, weird, boring, and wasn't adopted by the team. This time we've gone with MediaWiki and setting it up has taken the form of a mini project with our junior dev Tim assigned the task of learning/doing the configuring. We work for Tourism Western Australia so naturally we've named the wiki TWATS (Tourism WA Technical Support). 

The three of us also sat down to plan the wiki's structure: we settled on top level categories for project documentation, third-party application/platform documentation and training, templates, and code snippets/work-arounds/etc. Our customer service (help desk) training materials will also fit in there somewhere. Tim hasn't quite launched the wiki but I'm already thinking to myself "hey, I could wiki this if the wiki were up" every time I unearth some rare bit of info (I've been doing some legacy project work recently...). 

At this point I think the wiki is a brilliant idea and building it on a trusted platform (MediaWiki) means it should be easy for the team to use--both in terms of accessing content and updating wikis. We've traditionally stored our documentation as Word docs on the intranet; a document gets "finished" and quickly forgotten about because people are too scared to touch it--it's too formal and it's "finished". In theory this should be less of a problem with a brief wiki page. With the wiki being broadly accessible (eg. http://twats or http://wiki) and editable by nature, I'm hoping it will also get read and that should lead to the content being maintained as required. 

Sunday 28 September 2008

Understanding Paths in MOSS, .ddf files, manifest.xml files, and elements.xml files

Understanding the various MOSS file paths can be a bit frustrating at times. Here's my cheatsheet:
  • Package.ddf: The ddf directives specify the path to the physical files to be copied to the .cab/.wsp file. .Set DestinationDir sets the target location within the .cab file (like a folder); all other paths are relative to the file system location of the .ddf file itself. 
  • Manifest.xml: Instructs SharePoint where to deploy the files held in the cabinet. File paths depend on the containing XML element: assembly paths are relative to the target /bin directory, TemplateFiles are relative to the 12-hive's TEMPLATE directory, DwpFiles are relative to the wwwroot\wss\VirtualDirectories\wpcatalog directory, and FeatureManifests and Resources are both relative to the 12-hive's TEMPLATE\FEATURES directory.
  • Feature.xml: ElementFile locations are relative to the directory structure where the feature is installed (eg. as specified in Manfiest.xml)
  • Elements.xml (via Feature.xml): Module URLs are targets within MOSS; File URLs are relative to the Module URL
This list is a work in progress--your feedback is appreciated!

Batch file variables

Admitedly, I'm not a big batch file geek but like most of you I infrequently dive in and whip up a batch file for any number of reasons. 

So with that preface, here's my stupid tip: 

When setting a variable, don't included spaces between the assignment operator

This probably isn't what you want:

set myvar = hello
echo %myvar%

But this works as expected:

set myvar=hello
echo %myvar%

Inspect the contents of a .wsp solution file

Did you know a WSS deployment file with a .wsp extension (the kind you create using .ddf files and makecab.exe) can be renamed with a .cab extension and its contents inspected in an archive viewer? You can also deploy a .cab file directly to MOSS via stsadm so for convenience our build scripts output a .cab file; if we ever need to double-check the presence of a particular file it's easily opened with 7zip or something similar. 

To do this yourself, simply rename the file output by makecab.exe by modifying the CabinetNameTemplate setting. 

Visual Studio 2008 Remote Debugger Location

C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Remote Debugger

There are different remote debuggers for VS2005 and VS2008 so make sure you get the appropriate version (or both).
Update: here are the details for VS2010.

Dirty Words (Michael Hanes) - blog.mediawhole.com mailto:info@mediawole.com