Jeroen's profileCaptain's BlogBlogLists Tools Help

Blog


    March 02

    3...2...1...Lift-off!!! - Muhimbi Company launch – Commercial SharePoint Products

    It has taken a good year to go from the initial idea to the full blown company launch, complete with a rich e-commerce website, full time employees, multiple products under development and a beta version of the first product available for download. But here we are and we are pretty pleased with what our hard work, dedication and countless sleepless nights have achieved.

    MuhimbiSite

    Our first product, a PDF Converter for SharePoint, will be released as a downloadable beta version in the next day or so. We will announce the availability on our Blog as well as our Twitter stream, so make sure you subscribe to our feeds.

    If you are interested in SharePoint news, announcements and articles then please subscribe to the new company blog as we will move all the SharePoint related content from the old (this) blog to the new one.

    More information can be found on www.muhimbi.com.

    February 17

    Using SharePoint Installer to deploy Web Application scoped solutions

    Please note that all new SharePoint related content is now hosted on the blog at www.muhimbi.com.

    As most SharePoint developers are aware, explaining to customers how to deploy SharePoint solution files using the command line can be a challenging exercise.

    Fortunately, some clever developers have created a GUI wrapper to make the entire process a bit more user friendly.

    SharePointInstaller

    Unfortunately this cool application does not allow Web Application or Web scoped features to be deployed as that results in the ‘Feature xxxxx is WebApplication-scoped, and can not be added to the Site.’ error message.

    There is a workaround, which is to delete the ‘FeatureID’ and ‘FarmFeatureID’ lines from the setup.exe.config files. The only drawback is that the administrator will need to manually activate the feature on the target Web Application.

    With thanks to Roel Hans Bethlehem for this useful trick.

    Please note that all new SharePoint related content is now hosted on the blog at www.muhimbi.com.

    February 09

    Switching Central Administration language in SharePoint

    Please note that all new SharePoint related content is now hosted on the blog at www.muhimbi.com.

    As we are providing our SharePoint solutions in multiple languages, we need to make sure that each and every translation is properly tested.

    As it is not feasible, even with virtualisation, to have an instance of Central Administration for every available language, we need to be able to quickly switch the language used by Central Administration to test any of our custom translations (Feature descriptions, custom admin pages, etc.)

    languages2
    There is no official ‘Microsoft way’ to switch the CA language, but if you are running in a test environment then you may want to consider the following trick. Although we have not experienced any problems we don’t recommend switching CA languages in a production environment as any manual changes to your SharePoint databases will void any support contracts you may have with Microsoft.

    Ok, enough talk, here is how to switch the language:

    1. Look up the Locale ID for the language in this table. E.g. Japanese = 1041.
    2. Use your favourite SQL Editor (e.g. SQL Server Management Studio) to open the ‘Webs’ table in the Content Database used by Central Administration.
    3. You will most likely find only a single row in this table. If not then you will need to navigate to the correct row.
    4. Update the ‘Language’ field to the correct locale, in our case 1041.

    That is it. There is no need to do any ‘IISRESETs’, just refresh whatever CA page you are on and it will automatically switch languages.

    A full list of languages for which Microsoft provides support in SharePoint can be found here.

    Please note that all new SharePoint related content is now hosted on the blog at www.muhimbi.com.

    February 06

    Which languages does SharePoint support?

    Please note that this posting has been moved to the blog at www.muhimbi.com.

    February 04

    Using the clipboard to Copy files to and from a Remote Desktop session

    At the risk of sounding backwards, and being pointed out that this functionality has existed for years, I would like to share this little Remote Desktop gem that I found out about today.

    network-remote-desktop-256x256

    In the latest Remote Desktop client (I am on Windows 7) it appears that you can copy files from your local machine to your remote desktop session (and vice versa) using the clipboard. There is no need to browse through ‘shared tsclient’ drives, just copy the source file, browse to the destination folder in your remote desktop session and paste.

    It even works when pasting files directly into your application, such as Outlook emails.

    Remote Desktop drive sharing doesn’t even need to be enabled.

    This is such a time saver.

    December 29

    Windows 7 Beta – First Impressions

    As I like living on the cutting edge I promised myself that I would convert my main laptop to Windows 7 the moment the official Beta version is released. Although this moment is still a few weeks away for most people, I have managed to get my hands on a shiny copy of the official Beta (Build 7000).

    So after a quick backup, full wipe of my Vista laptop and an approximately 20 minute wait for the Windows 7 installer to finish, the system booted without error.

    Windows7
    Shiny

    This is not a comprehensive review, but my impressions in bullet style and no particular order are as follows:

    1. It is stable. Haven’t had a single crash, not even after installing all my apps and doing a day’s work on it.
    2. It is fast. Again difficult to compare as my previous Vista install was nearly 3 years old, but it feels snappy.
    3. The new window manager is fab. ‘Docking’ windows left and right works great. Quick tip: when using multiple monitors it works slightly differently, use the Windows key in combination with the left and right cursor key to dock windows.
    4. You can minimise all applications except for the current window by ‘shaking’ it.
    5. The new task bar is very functional, but it looks messy. I can’t put my finger on it, but the different visual styles for applications, running application, applications with multiple windows and applications with a progress indicator just doesn’t feel right.

      Win7TaskManager

    6. I really don’t get the importance of Aero peek. So what if I can glance on my desktop, why would I want to do that?
    7. It appears that my battery lasts quite a bit longer. I have no exact figure but I estimate it lasts about 15% longer.
    8. Probably related to the previous point, but the fan of the laptop doesn’t come on nearly as often as under Vista.
    9. Multi monitor support has improved somewhat, you can now specify the monitor that gets the start menu. Unfortunately a separate task bar (like Ultramon provides) is still lacking.
    10. Before installing my main concern was IE8. I don’t know what the fuss is about, but it works just fine.
    11. The current version of Live Mesh disables Aero, which is very annoying. A patch (to Live Mesh) is promised for the beginning of the new year.
    12. The retarded Flip 3D is still present. Fortunately the excellent Expose clone that is Switcher works just fine.
    13. Manually running the Performance Index Calculator left my screen resolution quite low and I couldn’t set it back. A reboot fixed it.

    Windows Media Center, which I love, has had a significant update as well.

    1. Fewer menus to navigate / ignore (good).
    2. Overall look and feel has been improved.
    3. Not sure if this is new, but it is now possible to connect to a ‘Recorded TV’ folder on a different system. Unfortunately playing a TV Show that was recorded on my main Vista Media Center system crashed Media Center on Windows 7.
    4. All frikkin’ Codecs are finally included with Windows. Well, at least Divx is as my ripped DVDs play fine without the need for any 3rd party installers.
    5. It is beyond me why they still provide different menus for ‘Movie Library’ and ‘Video Library’. Try explaining that difference to my mum.

    All in all very good. I will continue to use it until they release the final version this summer.

    Updates:

    1. Tim Sneath has posted a lot of Windows 7 secrets. Very useful.
    2. Problems reporting feedback on Windows 7? Use this link to add Windows 7 to your Microsoft Connect account.
    3. Some Windows 7 specific drivers for Microsoft products such as their keyboard, mouse and webcam range of products.
    4. Completely forgot that you have to install the Windows Mobile Device Center to sync and use your Windows Mobile phone as a modem.

    December 24

    TFS Power tip – pasting screenshots in a Work Item.

    Wow, sometimes when trying something while not expecting it to work, it actually does work.

    I made a screenshot of a bug and was already dreading the ‘paste in MS-Paint / Save / Add / Browse for file’ dance when I tried pressing ‘CTRL-V’ in the TFS 2008 File attachments tab.

    TFSScreenshot 

    Guess what… it worked! A file was created and automatically attached. Brilliant.

    Update: It also works with other clipboard formats. Try copying content of an MS-Word file and pasting it.

    December 09

    SharePoint Quirks – Repairing the Hierarchical Object Store

    Please note that all new SharePoint related content is now hosted on the blog at www.muhimbi.com.

    Recently I was looking into what the best way is to store settings centrally in SharePoint. Not just for a single Site Collection, but rather at the Farm and Web application level.

    Sure, we could mess about in the web.config, which gets messy if the settings can be modified from a SharePoint screen, or use the ‘Settings’ property bag, which is available on Farm, Site as well some other objects, but this doesn’t provide much granular control in more complex scenarios.

    So, enter the Hierarchical Object Store (HOS). The HOS allows settings or other kind of data to be stored for nearly every existing SharePoint object that inherits from SPPersistedObject, which is pretty much everything. As this article is not about programming the HOS, check out this very simple example by Maurice Prather.

    Microsoft’s guidance and documentation on this subject is pretty thin, so I managed to corrupt the HOS within hours which had all kinds of nasty side effects such as not being able to call SPFarm.Update any more.

    corrupt

    Great, so I have managed to muck up my SharePoint installation and get all kind of very generic error messages such as ‘Security Exception’ and the somewhat more descriptive

    The platform does not know how to deserialize an object of type Muhimbi.Licensing.SharePoint.LicenseStore. The platform can deserialize primitive types such as strings, integers, and GUIDs; other SPPersistedObjects or SPAutoserializingObjects; or collections of any of the above. Consider redesigning your objects to store values in one of these supported formats, or contact your software vendor for support.   at Microsoft.SharePoint.Administration.SPAutoSerializingObject.
    DeserializeBasicObject(XmlElement xmlValue)

    What I could have done to resolve this is to restore the previous day’s backup (your are making backups right!) of the configuration database, but what would be the fun in that? I would learn very little about what is going on under the hood.

    After investigating the schema of the Config Database it became clear that HOS information is stored in 2 tables named ‘Classes’ and ‘Objects’. Similarly to C#, records in the Class table define some meta information about the makeup of a Class and the Objects table contains instance data for the class, basically the Object.

    By Querying these tables for the type specified in the error message above I was able to find and delete existing instances of the corrupted data.

    SELECT Id, BaseClassId, FullName FROM Classes where FullName like 'Muhimbi%'

    SELECT Id, ClassId, ParentId, Name, Status, Version, Properties FROM Objects WHERE Name LIKE 'Muhimbi%'

    Note that the Object table may also return some WSP files, don’t delete these. Always make sure that entries are removed from Objects before removing them from Classes as there is some referential integrity checking going on.

    After cleaning up the existing entries in these tables the error messages I received after calling Update on any SPPersistedObject changed from SecurityException to the more descriptive Deserialization error listed above. Clearly something was still finding a reference to the offending type.

    Some further investigation revealed that the Farm also has an entry in the Objects table. The Properties field for this entry stores a large blob of XML containing a reference to our dodgy HOS type. We stored our information using SPFarm as the parent, if you have used a different parent then just perform a ‘Like’ search for you type name in the Objects.properties field.

    Selecting the Farm object works as follows:

    SELECT * From Objects where ClassId = '674DA553-EA77-44A3-B9F8-3F70D786DE6A'

    The Properties field contains the following XML blob. The relevant section has been highlighted in red.

    <object type="Microsoft.SharePoint.Administration.SPFarm, Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"> <sFld type="Int32" name="m_PersistedFileChunkSize">4194304</sFld> <fld name="m_PairConnectionString2" type="null" /> <fld type="Microsoft.SharePoint.Administration.Pairing, Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" name="m_Pairing">None</fld> <sFld type="Boolean" name="m_SqmEnabled">True</sFld> <sFld type="Boolean" name="m_WatsonEnabled">True</sFld> <sFld type="Boolean" name="m_DownloadErrorReportingUpdates">True</sFld> <sFld type="Boolean" name="m_bUpgradeFinalized">True</sFld> <sFld type="Boolean" name="m_bCommandLineUpgradeRunning">False</sFld> <sFld type="Boolean" name="m_reghostOnUpgrade">False</sFld> <sFld type="Guid" name="m_clsidExternalBinaryStore">00000000-0000-0000-0000-000000000000</sFld> <fld type="System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Version, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="m_Versions"> <sFld type="Guid">00000000-0000-0000-0000-000000000000</sFld> <sFld type="Version">12.0.0.6318</sFld> <sFld type="Guid">77e7f90e-1989-46c2-ad65-361a53dcb2e0</sFld> <sFld type="Version">3.0.4.0</sFld> <sFld type="Guid">6ac833ea-3f8d-46b6-8b30-92ac4553a742</sFld> <sFld type="Version">12.0.1.0</sFld> </fld> <fld name="m_UpgradeContext" type="null" /> <fld type="System.Collections.Hashtable, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="m_UpgradedPersistedFields" /> <fld type="System.Collections.Hashtable, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="m_Properties"> <sFld type="String">Muhimbi.Licensing.Configuration.LicenseStore</sFld> <fld type="Muhimbi.Licensing.SharePoint.LicenseStore, Muhimbi.Licensing.SharePoint, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c9db4759c9eaad12" /> </fld> <sFld type="String" name="m_LastUpdatedUser">MUHIMBI\jeroen.ritmeijer</sFld> <sFld type="String" name="m_LastUpdatedProcess">w3wp</sFld> <sFld type="String" name="m_LastUpdatedMachine">GBSAVDWS002</sFld> <sFld type="DateTime" name="m_LastUpdatedTime">2008-12-08T15:03:02</sFld> </object>

    Basically what you are looking for is a ‘fld’ element with a name attribute of ‘m_Properties’. As my farm object only contained my own HOS data I replaced the section marked in red with:

    <fld name="m_Properties" type="null" />

    After a quick IISRESET, just to be sure, everything worked fine again.

     

    Note that the entire HOS seems immature, brittle and not very well thought through. I recommend you only use it if you really need to. If at all possible use the Properties collection on any of the existing objects. In the end I ended up creating a very simple object that only stores one value in the HOS, this value contains an XML Serialised object hierarchy of what I really want to store.

    Another day in my life gone that I will never see back.

    Please note that all new SharePoint related content is now hosted on the blog at www.muhimbi.com.

    October 13

    Using SQL 2008 reporting Service with Team Foundation Server 2008

    As I mentioned before, oh the joy of working on the cutting edge!

    This time I was installing Team Foundation Server 2008 (TFS) in combination with Report Server 2008, an officially supported scenario.

    At first look everything appeared to have been installed correctly, however any application that tries to talk to the Reporting Server using the web services interface (Most notably the famous TFS Administration Tool) fails horrible due to what appears to be a bug in TFS 2008.

    SQL-Reporting-Services
    TFS internally stores a number of URLs for support services such as SQL, SharePoint and Report Server and exposes these URLs via it’s object model. However the URL it maintains for the Reporting Service points to the Deprecated SQL 2000 Reporting Service Web Services Interface.

    Great, I really wanted the Administration Tool to work so I decided to dive straight in and see if I could fix it.

    Follow the steps outlined below to make everything work properly:

    1. Navigate to the TFS Tools directory. Note that mine is located on the E drive.
    2. CD "E:\Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Tools"
       

    3. Export TFS' current settings using the following command:
    4. tfsreg /EXPORT TFSReg.xml <name of sql server>
       

    5. Change the URL for the reportservice as follows:
       
      * notepad tfsreg.xml
      * search for ReportService.asmx
      * replace with ReportService2005.asmx
       
    6. Update the changed settings to TFS
    7. tfsreg /Overwrite TFSReg.xml <name of sql server>

    For some reason these settings appear to be only loaded the first time someone connects to TFS and are subsequently cached. I can only hope TFS expires this cache at least once a day otherwise making changes such as this is going to be a nightmare in organisations with more than a handful of developers.

    So, on the server as well as all clients, search and remove for all instances of ‘RegProxyFileCache.xml’ in the user profile directories. I used a search in "c:\users" (or "c:\documents and settings" if you are on XP or 2003) as the path contains an unfriendly GUID.

    Now, if you think that this will make the TFS Administration Tool work then you are sadly mistaken. The ReportService.asmx (SQL 2000) is incompatible with ReportService2005.asmx so some changes need to be made to the source code of the TFS Administration Tool.

    1. Download the code for version 1.3 (changeset 29980)Don't be tempted to download the latest code as it is a work in progress and some fields are hardcoded (Note to the author, hardcoding port numbers for SharePoint is not a good idea)
       
    2. If you are developing on an X64 workstation then update all projects in the solution to use X86 (Project Properties / Build / Platform Target), otherwise the 32bit GAC entries for TFS cannot be found.
       
    3. In the Microsoft.DDSolutions.SqlReportServer project open 'Web references' and change the "Web reference URL property of the ReportServer reference to http://<your reporting server>/ReportServer/reportservice2005.asmx. This URL is set at runtime, but manually setting it now updates the schema.
       
    4. In ReportingServiceProxy.cs change line 22 to:
    5. public ReportServer.ReportingService2005 SQLReportingServices = new Microsoft.DDSolutions.SqlReportServer.ReportServer.ReportingService2005();

    6. And in the same file line 66 to:
    7. ReportServer.Role[] rsRoles = SQLReportingServices.ListRoles(Microsoft.DDSolutions.SqlReportServer.ReportServer.SecurityScopeEnum.All);

    That is it. Everything is working fine now and as an added bonus your Team Explorer can connect properly to the reports as well.

    October 09

    Adding web parts to DispForm.aspx in SharePoint

    Please note that all new SharePoint related content is now hosted on the blog at www.muhimbi.com.

    For some reason the ‘Site Actions’ menu does not display the ‘Edit Page’ menu for all pages in SharePoint. This is particularly baffling considering the editing functionality is available in the background.

    Here is how you enable it:

    1. Navigate to the page you want to add a web part to, e.g. a Content Editor Web part.
       
    2. Remove everything on the URL after “?ID=#“
       
    3. Append the following to the end:

          &PageView=Shared&ToolPaneView=2

    SharePoint-Edit-DispFormThat is it. Common pages you may want to edit this way are the DispForm.aspx and EditForm.aspx pages for the files in a document library or any other list.

    A nice side effect is that once a page has been modified the ‘Edit Page’ menu becomes available in the ‘Site Actions’ menu.

    Please note that all new SharePoint related content is now hosted on the blog at www.muhimbi.com.

    October 01

    Installing SQL Server 2008 Client Components on any drive other than C:

    Oh the joy of operating on the cutting edge: Windows Server 2008 64 bit, Hyper-V, Visual Studio 2008 and SQL 2008 64 bit, I am just asking for it!

    As we properly partition our servers and dev workstations, we don’t just throw everything on the default C drive and hope for the best. Instead we reserve the C drive for the OS and use the E drive for all applications.

    sql2008

    For some reason this concept is beyond the SQL 2008 installer. Even when specifying the installation path it installs parts on the C drive. As a result when subsequently installing VS2008 you have no option other than accepting the C drive unless you uninstall the specified SQL bits. (The VS installer is fortunately quite clear on this)

    So we uninstalled the specified SQL bits, installed VS2008 and SP1 and then ran a SQL repair to get the missing SQL bits back in place. Unfortunately the SQL Installer fails horribly with a very friendly –2147467259 Unspecified error…sigh.

    A quick look in the installation logs shows that the installer is looking for ‘C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe.config’. Great…. that file is on the E drive. Let’s see if we can fool the installer by copying that file from the E drive to the C drive.

    Believe it or not, this fools the installer and it completes without errors. The only problem is that it leaves a number of SQL Design libraries (Reporting service, SSIS etc) for Visual Studio on the C drive. I don’t think it will work from there so I moved all content from

         C:\Program Files (x86)\Microsoft Visual Studio 9.0

    to

         E:\Program Files (x86)\Microsoft Visual Studio 9.0

    OK, we are getting somewhere. The only thing left to do is to repoint the 500 odd registry entries that point to ‘C:\Program Files (x86)\Microsoft Visual Studio 9.0’ to the E drive. We did it largely by hand, but with hindsight we should have used a simple registry search and replace utility.

    Anyway, all seems to be working well. Fingers crossed for when the next service pack needs to be installed.

    For those who are interested, the full error in the installation log file was as follows:

    <Func Name='Do_sqlCopyXML'>
    _LoadXMLFile(C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe.config).IID_IXMLDOMDocument->load returned 2147500037.
            Error Code: -2147467259
    Windows Error Text: Unspecified error
      Source File Name: sqlca\sqlxmlca.cpp
    Compiler Timestamp: Thu Jul  3 22:23:09 2008
         Function Name: Do_sqlCopyXML
    Source Line Number: 616

    September 22

    Wow, Credit Cards actually protect you for real.

    In August I received a bit of a shocker credit card bill. As I didn't recall splashing out on anything unusual I decided to actually look at my itemised billing for once.

    Crap, a baby stroller? Maybe I need to talk to my girlfriend to see if there is anything she needs to talk about. Hey... limo service, a new kitchen, concert tickets, exotic animals, I DON'T REMEMBER ANY OF THIS!

    To cut a long story short, some filthy criminal has gotten hold of my card details and went on a shopping spree.

    barclaycard

    This really pissed me off. When I use the card once or twice a month the transaction is frequently blocked as Barclay's clever fraud detection service thinks the transaction doesn't fit my usual spending habit, but apparently these 50 new transactions do match my spending pattern.

    Anyway, called Barclays, they send me a form and refunded my money. Great, I just hope they actually bother investigating this further, because it is the poor retailer that actually has to pay for my refund, not the bank.

    September 19

    Join the dark side - My Visual Studio colour scheme

    Now that I have started the new company I spend much more time behind a screen looking at code. The standard Visual Studio white background is really doing my head (eyes?) in so I browsed the web for some alternative VS Themes.

     VibrantInkv2

    Many were quite nice, but the contrast was not quite there. In the end I settled for Vibrant Ink v2, a Mac TextMate clone. You can download it here.

    Repairing Registry problems that prevent Windows from booting

    Oh my, the pain I cause myself by 'tweaking' my Windows installations. After all these years I should know better than making low level changes to things I don't fully understand.

    What did I do this time? Well, one of the computers I use was suffering from an overzealous Group Policy, which I have no control over, and locks down some useful windows features such as the ability to disable the crappy screen saver. Whenever I manually hack the registry to change these settings they are reset after a couple of minutes by the Group Policy updater.

    Grrr, what could I do, this screensaver is wasting at least 2 minutes of every day so let's do something that will take about 4 hours to recover from. YEAH! That is it, I'll revoke the System account's write rights and ownership on these registry keys so it cannot change them. HAHA, I win..... yep it worked until I rebooted... bloody Blue Screen Of Death with a very undescriptive error that no one else seems to suffer from according to Google.

    I quickly, as in subsecond, realised this BSOD was due to my faffing around with low level registry privileges. Now, how am I going to fix this considering I cannot boot into Windows (not even 'safe mode' or 'last known good mode' worked).

    windows_registry

    A quick Google pointed me to a Microsoft Knowledge Base article which describes how to restore a corrupt registry. Great, if it wasn't for the fact that it relies on a recent system backup (which I am too clever for to waste my time on) or Windows' System restore (which I cleverly disable to save disk space and banging around on the hard disk).

    So, it looks like I need to do this the hard way and figure out how to load the registry and change the privileges back. Fortunately the disk with the corrupt registry is a virtual hard disk so I mounted it as a second disk in another (Working) VMWare image. If the disk had not been virtual I would have had to take it out and attach it to another system.

    Once booted into the working VMWare image I found out that it is possible to load any registry hive from a file (<disk>\windows\system32\config) into the standard Windows Registry editor by selecting HKLM and then clicking Load Hive. The way this works is not very intuitive, click here for details.

    Once the corrupt registry was loaded, I reverted back the changes, unloaded the hive, kept my fingers crossed and rebooted....... and it bloody worked, woohoooo.

    August 29

    Share a Common VHD Disk Image in Hyper-V

    One of the great features in Hyper-V is the ability to share a common base (OS) image between multiple Virtual Machines. This would allow you, for example, to create a single Windows Server 2008 OS image and base several virtual servers on that image without duplicating or copying any data. In theory there is also a higher change that parts of this single image is in the file cache, resulting in better performance... in theory.

    virtualisation

    Now, this is all great and potentially very compelling, however Microsoft, or any other source I looked at, does not actually explain the process of sharing a disk between multiple VMs, so here goes:

    1. Create a new virtual machine (or use an existing one if already available).
       
    2. Install it, tune it, optimise it, configure whatever you want to be the same between all virtual machines that inherit this disk. Note that once other virtual machines start using this disk image you can longer make changes to it, at least to the common bit. Any changes made will become specific to the VM the changes are made in.
       
    3. Once happy with the common image, power down the VM and compact the disk using the Hyper-V Manager to make it as small as possible. I even remove the pagefile as that is dead space that cannot be shared anyway.
       
    4. Mark the common disk image as read only to prevent accidental changes and corruption to VMs using it.
       
    5. Create a new VM and assign the common disk image to it. DO NOT POWER ON!
       
    6. Now here is the trick, immediately make a snapshot of the new VM. All disk changes will from now on be written to the differential disk specific to the VM.
       
    7. You can now safely boot the new VM.
       
    8. Run NewSID, SysPrep or whatever your policy is to configure imaged ('ghosted') servers (I use NewSID) and install all software specific to that server.

    Repeat steps 5-8 for each new server.

    There you go, not difficult at all once you know what to do. In my environment all common disk images are located on a solid state drive, which provides phenomenal read-only speeds and seek times. The differential disks (snapshots) are located on a more traditional SATA drive that provides better write speed compared to the SSD.

    The 10+ virtual machines that use the same disk image quite happily boot in parallel without fighting over the same 'drive head'. For more details about the server see this blog post.
     
     
    Update: There is another way to achieve the same, which works better when you have multiple disks attached to a VM, but don't want to snapshot everything. The procedure is as follows:

    1. Create a new VM
       
    2. When asked to configure a hard disk select the option to 'configure one later'.
       
    3. Finish the new VM wizard and open its settings.
       
    4. Create a new disk of type 'Differential' and select the common image you previously created as the parent.

    August 12

    Server / network naming conventions

    I am currently defining an infrastructure plan for the new company and part of that plan describes how to name servers and workstations.

    Now, it is always tempting to name servers after Simpsons characters, Lord of the Ring characters, moons and planets of the solar system or even Kama Sutra positions. However, those names don't scale well and are completely incomprehensible to anyone who newly joins the organisation.

    So I have come up with the following sensible CONSISTENT naming convention:

    Name: Country/Location/[Virtualised]/D|T|P/Task/###

    Country

    GB – Great Britain

    NL – Netherlands

    etc

    Location

    SA – St. Albans

    AM - Amsterdam

    etc

    Virtualised

    Optional ‘V’ when virtualised

    D/T/P

    Dev, Test or prod

    Tasks

    WFE - SharePoint Web Front end
    IDX   - Index server (SharePoint / other)

    WS   - Workstations

    PR    -  Printers (not print servers)

    TS    -  Terminal Servers

    DC   Domain Controllers

    IIS   -  Web Servers

    ML   -  Mail Servers

    SQL -   SQL Servers

    SMS -  SMS Servers

    APP Application Servers

    CL   -  Cluster names

    SV   -  General purpose servers

    HV   -   Hyper-V root server
    TFS  -  Team Foundation Server
    ORC -  Oracle database server
    FS    -  Dedicated File Server
    PS    -  Dedicated Print Server

    ###

    3 digit number padded with zeroes

    August 07

    Solving Firefox slowdown / high CPU utilisation

    I really like Firefox, especially version 3's excellent address bar, I really miss that in IE 7. Unfortunately both Firefox 2 and 3 seem to suffer from random high CPU utilisation. Not only does this slow down my system, but it has the annoying side effect that all system fans spin up.

    I am able to reproduce this on several different operating systems and hardware platforms including a MacBook, VMWare, Vista, XP and Windows server 2003.

    firefox_slow_as_hell_opener-300x150

    The problem appears to be Flash related (I run the latest version 9.0r124) as disabling Flash (Tools / Options / Main Tab / Manage Add-ons / Plugins tab / Shockwave Flash) makes the problem disappear. Unfortunately it makes all the nice Flash technology disappear as well.

    It must be related to the way Flash Interacts with Firefox as IE7 on the same machine does not suffer from the same problem.

    Update: The web without Flash is broken nowadays. Rather than disabling Flash in Firefox I now use the Flashblock extension that automatically disables all Flash content (whitelists allowed), but still allows the content to play when clicking the placeholder.

    August 04

    Windows Server 2008 - Excellent for both servers and desktops

    I bought quite a powerful server for my new company (I am not listing the specs here, just look at the screenshot below), which is the perfect opportunity to evaluate the recently released Windows Server 2008. Even though I had already heard good things about it, I was still pleasantly surprised with its new features and improvements.

    TaskMan-8Core16GB

    Many improvements have been made, but the key areas of interest for me are:

    1. Hyper-V: Microsoft has made true virtualisation part of the operating system. When enabled even the 'root' copy of the OS is loaded as a VM, although one that has direct access to the hardware. My new box will definitely run many parallel Win2K instances.
       
    2. Terminal Server: I have always loved Terminal server, but Citrix is just a better product when you look at it from a day to day usage perspective. I am not saying that Terminal server is now the better product, but the new Terminal Server Gateway, Web Portal and Application Publishing functionality in combination with the ease of installation is good enough for me to stop considering Citrix for smaller deployments.

    Actually, it is so good that I am going to wipe Vista of my main laptop and run Win2k8 as a workstation OS. Many people seem to do the same.

    Links of interest:

    July 06

    Windows Media Centre HD Channels in the UK

    I have been a big fan of Windows Media Centre ever since my friend Mike introduced me to it a couple of years ago. The Vista version currently powers my main TV and I use it in the bedroom using an XBOX 360 as a Media Centre Extender.

    MCE

    In the UK we are blessed with Free Digital Over The Air (Freeview DVB-T), which is great, but unfortunately it doesn't support HD like it does in the US. This lack of HD is one of the main reasons I haven't updated my 8 year old SD (tube) widescreen television as I fear that an upscaled Freeview signal is not going to look too fantastic.

    Recently some vendors have started to make some noise about Freesat, a free digital satellite service backed by the BBC and ITV. What makes this particularly compelling is that in addition to SD, HD channels are supported as well. Unfortunately the current Vista version doesn't support the technology behind it (DVB-S), however a leaked version of the next Media Centre Fiji update appears to have support for it.

    For details on what is new in Fiji (and download it) as well as read some experiences with Freesat, check out this thread on the Digital Spy forum. Paul Thurrott has some screenshots as well.

    It looks like we are getting there and the required tuner hardware is cheap as well.

    So..... Mike, can you please have a look at this, go through all the pain, sort it out and let me know if it is worth upgrading. You are the MCE sensei after all.


    Got Myself an Asus EEE 900

    After a backbreaking experience lugging my massive Acer 8204 Laptop around London during the warmest day of the year while the train route was blocked for the night, I decided to end the madness and buy something more portable.

    I have been following the Ultra Portable laptop market ever since Asus released their original groundbreaking eee PC. One of my friends ran out to buy one and after a short play I decided that great as it was, the screen was just too small.

    It was just a matter of time before Asus released a new version with a larger screen, the eee 900 range. Although the market is heating up with announcements from competitors (Acer Aspire One, MSI Wind etc) every week, the only one I was able to find in the open market (Toys R Us believe it or not was the only place) was the Asus eee 900.

    eee900

    Most laptops in this segment are in the £200-£300 range and the eee 900 is no exception. I got the Black Version running Windows XP, 1GB of RAM and 12GB of solid state storage.

    I was tempted to go with the Linux version as I wanted to be one of the cool guys, but in the end decided to take a practical approach as the main purpose of the machine is to edit MS-Office documents and connect to the Internet using my 3G Windows mobile phone. Although it is possible to do this in Linux I didn't want to spend weeks faffing around in order to get that to work.

    I am not going to write a full blown review, but my main observations are:

    1. XP Doesn't need much disk space so the 12GB of storage space is plenty
    2. Office 2007 works great, but you need to install a patch first or the installer will fail. Most office applications launch faster or as fast as on my big laptop. No doubt this will have to do with the solid state storage.
    3. The trackpad supports multi touch, so you can zoom into your docs 'the apple way' and scroll pages using 2 fingers. Sweet... The single and double tap doesn't always work so perhaps I have to do some tweaking.
    4. Performance in general is great although occasionally Windows seems to freeze up for a second or 2. Not quite sure what this is related to, perhaps it was installing updates in the background.
    5. Asus pre-installs all kind of software bundles, which I find a bit weird on a device with limited storage. 2 Full blown but competing office suites, DVD Player software on a unit without a DVD reader. I uninstalled most and cleaned up afterwards using CCleaner.
    6. Battery life is reasonable, though not great. I didn't keep track of time, but I think I got just over 2 hours out of it.

    So, all in all pretty good. Definitely good enough to write this Blog Posting using Live Writer.