| Jeroen's profileCaptain's BlogBlogLists | Help |
|
March 02 3...2...1...Lift-off!!! - Muhimbi Company launch – Commercial SharePoint ProductsIt 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. 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 solutionsPlease 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.
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 SharePointPlease 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.)
Ok, enough talk, here is how to switch the language:
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 sessionAt 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. 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 ImpressionsAs 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. This is not a comprehensive review, but my impressions in bullet style and no particular order are as follows:
Windows Media Center, which I love, has had a significant update as well.
All in all very good. I will continue to use it until they release the final version this summer. Updates:
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. 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 StorePlease 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.
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. 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:
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 2008As 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.
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:
CD "E:\Program Files\Microsoft Visual Studio 2008 Team Foundation Server\Tools" tfsreg /EXPORT TFSReg.xml <name of sql server> 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.
public ReportServer.ReportingService2005 SQLReportingServices = new Microsoft.DDSolutions.SqlReportServer.ReportServer.ReportingService2005(); 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 SharePointPlease 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:
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. 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'> 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. 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 schemeNow 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. 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 bootingOh 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). 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-VOne 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. 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:
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.
August 12 Server / network naming conventionsI 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/###
August 07 Solving Firefox slowdown / high CPU utilisationI 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. 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 desktopsI 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. Many improvements have been made, but the key areas of interest for me are:
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 UKI 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. 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 900After 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. 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:
So, all in all pretty good. Definitely good enough to write this Blog Posting using Live Writer. |
|
|