Friday, March 27, 2009

Exporting Files from SharePoint Content Database

Murphy's Law can apply anywhere anytime and my recent re-installation of SharePoint is certainly no exception to the rules.

Soon after I finished recreating our SharePoint intranet, I stared sharing it with my immediate colleagues. While I was not really expecting some "Oh!" and "Aaah!" cheerful comments, I was still hoping for some kind of "Cool, it's back, thanks for the tool.".

But no, even that was expecting too much. The very first comment I received was an assassin comment like: "And I suppose you managed to retrieve all files stored in the previous SharePoint database ?". That comment triggered a machine-gun like stare from me to my colleague. No, I did not manage so far to retrieve these files and yes I had tried already. SQL Management Studio did not really help me by the way.

I had been cornered and really had to find a solution this time. So I returned to the web, googling frantically, trying various unsuccessful solutions until finally my patience and stubbornness got rewarded. I found found a great article from Keith Richie describing how to export the site content from a SharePoint Database for recovery purpose.

His article include a small source code and instruction to compile and run the program. It worked almost like a charm from the first run. Yet, as some of the recovered files were quite large, I had to boost the buffer size (as I worked locally this was not a problem) and even tweak the SQL query to work on a per directory basis to limit the execution run time. Happily this time SQL Server Management Studio was of great help to test and fine-tune the queries. Within 30 minutes from the moment I read Keith's post I had recovered all files I needed.

Today all files are imported in the new SharePoint and I preciously kept the program source and instruction ... just in case one day I need to recover files from another SharePoint database.

Wednesday, March 25, 2009

The Revenge of SharePoint

Remember my SharePoint article from 2 months ago ? Well, believe it or not, but I have crashed my SharePoint site beyond my repair skills capabilities. It happened after a domain migration and was due to some dark account permission problem on the SQL 2005 database.

After having wasted a few hours on the problem, I decided to re-install it from scratch on a new and better set up virtual machine. After all, it was only a prototype without too much production data in it.

The first thing I did was using my previous SharePoint installation article as guideline and i will say it was definitively worth writing it and I got my payback for it. While I was at it, I also wanted to bring in a couple of improvement to my initial setup.

As SQL Server 2005 was installed on the C:\ drive, I needed to move the SharePoint databases to the D:\ drive which was designed to contain the data. I proceeded as follow after having installed Sharepoint Services:

In order to move a Microsoft SQL Server 2005 SharePoint database, I needed to:
- Stop the IIS SharePoint site.
- Stop all Windows SharePoint Services: Administration, Timer & Tracing.
- Backup the SharePoint content and configuration database.
- Detach these databases using SQL Server Management Studio.
- Move the database files (.ldf & .mdf) to the new location.
- Attach these files back to SQL Server 2005 still using the SQL Server Management Studio.
- Restart the SQL server.
- Restart all SharePoint services.
- Restart the iis SharePoint site.
And it worked like a charm.

I decided to add some better web parts to the portal and as such downloaded and installed What's New, Chart, AutoComplete, and Copy Paste web parts from the SmartTools suite on CodePlex. The What's New web part is probably the best of them. All these parts are ridiculously easy to install and deploy.

I also wanted to change my security strategy and to really use two Web Applications: one for the Central Administration on some exotoc port and the SharePoint content sites on port 80. As I had already recreated my content sites under the Central Administration, I needed to move them all to a different application in order to better manage their security. Therefore I had to first move the Central Administration from port 80 to another port (see my article for instructions), then create a new web application on port 80, export all created sites and re-import them into the newly created Web Application on port 80. The export/import operation was made simple thanks to the stsadm command line tool. Afterwards I simply had to uninstall and re-install the CodePlex SmartTools to have them active under the new Web Application.

And that's it, my SharePoint site is now back and ready to be used.

Friday, March 13, 2009

Twenty years of World Wild Web

Happy birthday, Tim. ;)

The Web is indeed wide today ... but no less wild.

Friday, February 13, 2009

Sync Story

Since over a decade I have been using Microsoft Outlook. I started with Outlook Express then used Outlook 2000, XP, 2003, and currently 2007. With time, I have learned to master the product and to truly enjoy it. As a result, I used it for both professional and private emails, contacts, and calendar. A few years ago, I even started synchronizing my contacts and calendar events with my previous Nokia mobile phone. I liked very much having a calendar with me without having to carry a paper version on top of all accessories that a modern man must carry: wallet, keys (home and car), mobile, sun glasses, pens ... this without even talking about the laptop. But what I appreciated the most was being notified by my mobile about my appointments. Even when away from my computer, I was sure not to forget anything (as long as I had encoded it).

Then I changed of job and got a new laptop with that so wonderful application named Lotus Notes along with a BlackBerry already synchronized with it. My opinion about Lotus did not change since last year. I still do not like it and rarely miss an opinion to criticize it for many good (and bad let's remain honest) reasons: not user-friendly, slow to answer, not compatible with most Web2.0 portals like Facebook, LinkedIn or Naymz and I could continue my list of rants. In parallel of using Notes for business mails, contacts, and calendar, I kept using my Outlook for personal emails, contacts, and events. However, while the separation of mails is good for productivity reasons, and while I could take care of contacts by synchronizing my BlackBerry with my Outlook using the BlackBerry Desktop Manager application. Since years, I am indeed using a contact sub-folder of Outlook to organize and backup my mobile contacts.

So there I was, sitting between two seats for the calendar part and not really happy about it. Then one day I woke up deciding to fix the inconvenience of having private events in Outlook and business events in Lotus and on my Blackberry. I was looking for a simple and free solution but obviously the words simple and Lotus do not exist in the same sentence, and it gets worse when talking about software. Useless to say that I could never manage to connect directly my Outlook to the Domino server and always ended with some error message.

Ultimately I found out that Google Calendar proposes a tool to synchronize your Outlook Calendar with your Google Calendar. Google also proposes another tool to synchronize your BlackBerry calendar with your Google Calendar.

By transitivity and because 1+1=2, I have my solution: my outlook is synchronized with Google, which synchronizes with my BlackBerry, which in turn synchronizes with Lotus. Yes, it works. Yes, it is easy to install and no, there is nothing complex to configure. I'm happy as I have all my events on my BlackBerry and in Outlook and I still do not plan to use the Google Calendar interface itself.

So what's next ?
I seriously consider definitively dropping Lotus now as I can download emails from the Domino server using POP.

Monday, January 26, 2009

Kongregate: Casual Meta-Game ?

Since a few weeks now, I play some casual games and other flash games on Kongregate. Kongregate is a portal promoting new games and helping developers to develop better games by getting more feedback and to earn more money because it remains the main reason for work.

By playing Kongregate's games, it is possible to earn points, badges, and level up. Earned badges and total scores appear on the players' profiles; often motivating them to play earn more badges by playing more games.

This game-around-the-games mechanism - or Meta-game - is quite interesting as players are motivated to play more to games they like; until they earn all badges for example. It also pushes players to discover and play new games.

This mechanism is also enforced thanks to the existence of Kongai, an online battle-oriented card game. Kongai relies on similar (but less complex) concepts than older classical card games like Magic The Gathering or Decipher' Star Wars Customizable Cards Game. Cards can be of course purchased but also and preferably earned through playing any game hosted on Kongregate. This is called challenges). More cards can be earned by playing Kongai itself. As for any collectible cards game, these come with several editions and you can view them through an online card album.


This concept of Meta-games or games around games is quite thrilling. Once you start caring for your score, the race is up and you will quickly try to reach just another level. As Kongregate proposes thousands of games, you will always find some that you like or care enough to earn one more badge. The online card game attached around is also a good idea even if in this particular case the Kongai game itself could probably be a bit more sophisticated.

Now I wonder if a meta-game concept could be used with massively multiplayers online role-playing games (MMORPG) ?

Saturday, January 17, 2009

Google is the Heir of Sun Tzu

A few days ago I posted a pretty long article about my experience with setting up a SharePoint intranet. Less than twenty-four hours later, I received a LinkedIn invitation from someone working for the same company as I do but located at the other side of the world. That person kindly introduced himself to me, wrote a couple of nice words about my SharePoint article, and asked to be connected to each other. My first reflex was to immediately accept his network invitation - after all we are colleagues - and to thank him for his kind word.

I then started wondering how he had found my SharePoint blog article. My article was not the first one to be written about SharePoint. It is surely not the most detailed or the most complete article about that topic. Additionally my blog is not (yet ?) one of the most read and famous blogs of the world wide web. So how could he find me through that article so quickly ? Not even a day had passed since I had posted it on BlogSpot.

I then remembered that a few hours before getting the LinkedIn invitation, I had received my usual Google Alert digest. For those ignorant of Google Alerts mechanism, Google Alerts are email updates of the latest relevant Google results (web, news, etc.) based on your choice of query or topic. In other words, you enter a keyword or two and Google will bring you the search results right into your mail and when something new it added on the Internet concerning that keyword then a it will appear in your next Google Alert. And on that day, my Google Alert digest tuned for my company name contained my SharePoint article. Needless to say that from there it became as clear as 1 + 1 = 2. All people using Google Alerts with the same keyword had received the link to my blog. This was the right explanation. It could not be otherwise and a few hours later I even received the written confirmation. It was a good guess.

So what is the true meaning of this story ?
Google knows it all. It knows everything available online about you, about your company, about your competitors. It knows what has changed or what is new, and it knows it before you do. As such, Google sets itself in straight line with Sun Tzu so famous principle:
Know thy self, know thy enemy. A thousand battles, a thousand victories.

Wednesday, January 14, 2009

Installing SharePoint Services 3.0 in a Snap

Whenever you have to implement an Intranet project, there is always a time when someone asks something like "Could you come with a very cheap solution for an small Intranet proof-of-concept in the coming days ?"

So last week I decided to create a small Intranet prototype with limited features for a limited audience and using Windows SharePoint Services 3.0. Why WSS ? Simply because we started implementing SharePoint Server 2007 (MOSS 2007) for another project and as such I tried to remain coherent in my implementation choices.

I started with a virtual machine running Windows Server 2003 R2 and checked it was fully patched before going further. I then installed the .Net Framework 3.0 on it.

The second step was to enable the Internet Information Services (IIS) role on that server. Once enabled I needed to check if ASP.NET 2.0 was indeed used by IIS. For that, go to IIS manager -> Websites -> Properties and check that ASP.NET 2.0 is used. If an older version is used then under command prompt type:

%windir%\Microsoft.NET\Framework\[version]\aspnet_regiis.exe" -i

then

regsvr32 %windir%\Microsoft.NET\Framework\[version]\aspnet_isapi.dll

Don not forget to replace [version] by your ASP.NET version. In my cas, it was v2.0.50727.

The next step is about installing Windows SharePoint Services and I strongly advice to read beforehand this Microsoft document about how to create the right accounts. Even if you think that Microsoft recommendations are way too complex, the minimum is to use a different account to install WSS and SQL. Use an administrator or generic installer account but do not use your own domain account to perform the installation on the server.

Once you have created the (right) accounts (including your installer account), you can download WSS. Simply follow the instruction and use the same installer account to configure your database.

Once done, under command prompt, type stsadm. If that command is unknown then add this file to the PATH environment variable: C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN.

I then decided to immediately Install most of the SharePoint Fantastic 40 Applications Templates, starting with the ApplicationTemplateCore.wsp. The installation is quite simple still using command prompt:

stsadm -o addsolution -filename [path to file]\ApplicationTemplateCore.wsp

stsadm -o deploysolution -name ApplicationTemplateCore.wsp -allowgacdeployment -immediate

stsadm -o copyappbincontent


The complete installation instructions for the templates installation are available from Microsoft. In short, you only need to pull the solution file, template_name.wsp, from the extracted distribution. To add the solution file to the solution store, type the following commands:

stsadm -o addsolution -filename [file_path]\.wsp

stsadm -o deploysolution -name template_name.wsp -allowgacdeployment -immediate


To check the deployment status, browse to the WSS Central Administration site. Click the Operations tab, and then click Solution management under global configuration.
Once all solutions are marked as "Globally Deployed", run iisreset from the command line.

I then realized that IIS had a default website running on port 80 and the WSS Centra Administration site was running on some exotic port. As I did not need the default IIS site, i decided to disable it (from the IIS Manager console) and to switch the WSS site to the port 80. Happily I found an excellent article on TechNet explaining how to change the Central Administration Web site port number (Windows SharePoint Services).

At this point, I had a small SharePoint site up and running and started creating some sites in order to test the templates and get familiar with the permissions and other settings of SharePoint. I was slowly getting to where I wanted to be.

The next step involved the upgrade of the standard SharePoint search engine to Search Server 2008 Express and this TechNet article about Search Server 2008 installation was of great help.

I got a small frustration when noticing that SharePoint and Search Server did not support PDF documents. After googling a bit, I found a solution for the missing PDF icon display and even a simple way to have Search Server crawling through and indexing PDF documents. The solution involves installing Adobe Reader 8.x or 9.x on your SharePoint server. While the above article was written for Adobe Reader 8, it worked just fine with Adobe Reader 9. While testing the search server, I noticed that no Adobe PDF documents were returned in the search results but i could quickly fix it thanks to a KB article. (Microsoft KB 927675)

As I felt confident now that everything worked as expected, I even spent some time to add a company theme which is a simple operation perfectly described this article about custom site theme for SharePoint 2007. Well to be honest, I merely threw out the foundation of the theme and still have to update the CSS file.

Finally I even cared about online presence using MSN accounts. Once you fill in the SIP address of your user account personal settings with your MSN or Windows Live email address then you have a cheap way to see if some of your colleagues are online, providing your company does not block all MSN traffics. The trick here is to have a recent Windows Live messenger client on your PC (and not an old v4.x like I still had) and to add your colleagues on your contact list.

For those wishing to consult their WSS / MOSS log files through the Central Administration, there is a cool Log Viewer project on CodePlex allowing so. Simply download the WPS file and install it like any other solution using your installer account. Then do not forget to perform an iisreset to be able to see the link in your Operations tab under Logging and Reporting.

And that's it.
Within 3 to 4 days you have (at least I have now) a very cheap and decent Intranet perfectly suited for small department or projects management. By cheap I mean it only costs one Windows 2003 R2 license and a few days of work. For that price you get an Intranet platform with simple workflows, pre-defined themes and templates, some simple document management features including approvals and versioning, a decent search engine crawling Office documents and PDFs, and even a simple online presence add-on. On top of that, you got familiar with the basics of that monster which is SharePoint. Those days were quite well spent if you ask me.