SharePoint Zip Logo A Black Blade Associates blog. Struggling with SharePoint? We can help.


Blog moved: This blog has moved to http://thingsthatshouldbeeasy.wordpress.com. Go there now to see the new posts.


Thursday, July 30, 2009

Creating 64-bit Virtual Machines

I’ve heard a bit of confusion recently over just what is needed to create 64-bit virtual machines using Microsoft technologies. Part of the confusion stems from the very liberal use of the term “64-bit support” by much of the Microsoft marketing folks in relation to their virtualization offerings. So lets clear things up.

First, here’s the list of Microsoft operating system virtualization products:

  • Virtual PC 2007
  • Virtual Server 2005 R2
  • Hyper-V for Windows Server 2008
  • Hyper-V R2 for Windows Server 2008 R2

Next, lets get some terms straight:

  • Host: This is the physical server that is running the operating system virtualization software.
  • Guest: This is the virtual machine running within the operating system virtualization software on the host.

The confusion I mentioned earlier comes from the Microsoft marketing folks use of the term “64-bit support”. So what does “64-bit support” mean?

According to Microsoft marketing:

The operating system virtualization software that can be installed on a 64-bit host.

According to everyone else:

The virtualization software can be used to create 64-bit guests.

Now that we have our terms in order, we will answer the real question: what Microsoft products can be used to create 64-bit guests? The answer: Hyper-V and Hyper-V R2. That’s it. Virtual PC and Virtual Server can only create 32-bit guests, even when installed on 64-bit hosts. What does this mean for you?

If you want to create 64-bit virtual machines using Microsoft products, you need:

  • Windows Server 2008 x64, Standard or Enterprise or Windows Server 2008 R2 x64, Standard or Enterprise running on a 64-bit host computer
  • Hyper-V or Hyper-V R2
  • The host computer CPU(s) must have the VT extensions turned on. These are turned off by default on many desktop and workstation class machines.

It also means that you can not run 64-bit guest virtual machines using Microsoft virtualization software on Windows XP, Vista, Windows 7, or Windows Server 2003 host operating systems, even if using the 64-bit versions of these operating systems. If you want to run 64-bit guests on any of these operating systems, you will need to look at virtualization software from another vendor, such as VMware, which also has a number of free virtualization offerings: VMware Server and VMware ESXi.

Wednesday, July 29, 2009

Over 3000 visits last month

This blog just hit a milestone: over 3000 visits last month! Now I know that 3000 visits in a month pales in comparison to the stats many of my fellow SharePoint MVPs get on their blogs, but this is a personal best for me. So, I’m twisting open a cap on a 20oz Mountain Dew and tearing open a movie-sized bag of Peanut M&Ms, and I’m celebrating. These stats are just beautiful <wiping away the tears of joy>:

image

But I’m not resting. I’m going to put some effort in over the next few months to try and expand the readership of this blog. I got a lot of good advice from several of my fellow MVPs, and I wanted to take a moment and thank them:

Stay tuned for the progress reports. In my next post on this subject, I’ll tally up what I’ve done so far. And of course, thanks for reading.

Tuesday, July 28, 2009

File not found error uploading multiple files to SharePoint

A colleague of mine recently had an odd issue when trying to uploading files to a SharePoint site. Here’s what happened…

When he tried to upload multiple document to a MOSS 2007 document library from a Vista desktop that has IE8, things worked fine if he was using documents that are in his user profile. But when he selected documents that were not in his user profile (Ex: folder on c: drive or USB drive), he got a file not found message when trying to upload.  If he upload a single file from the same location, or if he dragged and dropped via the explorer view he have no issue.

I hadn’t seen that particular issue before, but I have seen weird behavior with Vista about accessing certain files when UAC is enabled. Basically, Vista wants to raise the UAC dialog box to allow you to access files off of root drive directories, including USB drives. But, I thought I remembered that Vista sometimes cannot or does not display the UAC from Internet Explorer. So IE just fails if it needs to access these files.

I recommended that he disable UAC on his Vista machine as an easy way to test. Good news: it worked. The moral of the story: if Internet Explorer is behaving oddly when needing to access certain files on a Vista machine, try disabling UAC.

Microsoft’s Tim Sneath has a how-to on disabling Vista UAC.

Sunday, July 26, 2009

Motorola Cell Phones: Buyer Beware!

A few months back I was in the market for a new phone. I read a bunch of reviews and went to my local AT&T store to compare models. At the time, I was choosing from the Motorola Q9 Global, Blackberry Curve, and Blackjack II. I ultimately chose the Q9. This post is not really about my decision criteria nor is it a review of the Q9. Rather this post is about my experience with the Q9 since I purchased it 8 months ago.

I was happy with the phone for the most part. It performed well, had good reception, and a great speakerphone.

The Honeymoon’s Over

Then the phone broke a few weeks ago.

And did it ever. The power adapter receiver / head phone jack receiver completely broke and actually came out of the phone. It even took a bit of the phone’s main board out with it!

Here’s the hole in the Q9 where the power adapter receiver used to be…
img058

Here’s the power adapter receiver after it came out of the Q9. You can see the pins on the second image that are supposed to be attached to the Q9’s motherboard.
img060  img059

Ok. I’ve had phones break before. The phone is less than 8 months old, so I call AT&T tech support and start the warranty exchange process. I go through the drill about resetting the phone, checking for water damage, and checking for other signs of abuse to the phone. Nothing, just a few scuff marks on the screen. I actually treated this phone pretty well.

Alright, now that 20 questions is done, I’m expecting the tech support rep to take my shipping information so she can send me my warranty replacement.

Warranty Denied!

The tech support rep explained to me that apparently it is Motorola’s policy that physical damage is NOT covered under warranty! Physical damage is not covered? Isn’t that the whole point of a warranty? I could understand that damage resulting from mistreatment of the phone would not be covered, such as my driving over the phone with my car. But, when an internal piece of the phone breaks off and comes OUT OF THE PHONE, surely that should be covered under warranty. Just to be clear, the AT&T support rep told me that this was Motorola’s warranty policy for ALL Motorola phones, not just the Q9.

The only thing that saved me from having to pay a tidy $300 to replace the phone is that I had purchased additional phone insurance. Even with the insurance, I still had to pay $74 ($3 monthly premium plus $50 deductible) to replace a defective phone that should have been covered under warranty.

Call to Action

So what can we as consumers do to keep from being mistreated like this? Simple: make Motorola feel your displeasure financially. How? Here’re a few ideas:

  1. Thinking of buying any Motorola phone? Don’t. Buy one from a competitor instead.
  2. Already have a Motorola phone? Post a rating anywhere that sells the phone or a comment anywhere that reviews the phone. Rate the phone 2 points less than you otherwise would, and make it clear that it is for the terrible support policies. For example, if you were going to rate the phone 4 out of 5 stars, rate the phone 2 stars. Here’s a list of sites that have reviews or sell the Motorola Q9:
  3. Tell your friends, family, and co-workers. Word-of-mouth is still the most trusted form of information dissemination.

Anyone from Motorola reading this? Please change your support policies. You’re poor support policies are tarnishing what is otherwise an excellent product.

Friday, July 24, 2009

Getting paid for your SharePoint software, part 3

Table of contents

Part 1
Part 2
Part 3   <--- You are here
Part 4


This is the third part of my series on getting paid for your SharePoint software. If you have not already done so, please read part 1 and part 2.

In part 1, I discussed how you need to be able to do four things to transform a piece of software into a product that you can get paid for:

  1. Distribute the software
  2. Deploy the software
  3. License the software
  4. Copy protect the software

Of these, licensing and copy-protecting the software prove to be the most difficult on the SharePoint platform.

In part 2, I laid out two options that address licensing and copy-protecting SharePoint software:

  1. Licensing and copy-protecting the installer
  2. Licensing and copy-protecting the application assemblies

While the first option is the easiest way to get started, it also provides the least amount of protection and capabilities. The second option is what you would ultimately want to get to, but it can require a significant level of effort to implement, somewhere between several weeks to several months.

The unwritten assumption in part 2 was that all of the software that makes up your product is installed on the customer’s SharePoint farm. In fact, this is probably the most common model for distributing new SharePoint capabilities, but it does come with some challenges from a licensing and copy-protection perspective. Lets take a look at some alternatives…

Option 3: Give away the web parts for free

Wait! Don’t post that angry comment yet. While many people hear “SharePoint application”, they think of web parts. But there is certainly a whole lot more to SharePoint than just web parts. In fact there is a whole lot more to SharePoint applications than just user interface. There is data and processing of the data. Typically, while the data is stored in SharePoint as lists and libraries, and the user interface resides in SharePoint as web parts, the processing of the data can be neatly abstracted from and need not have any reliance on SharePoint at all.

For example… lets say you wanted to build a “web part” that would allow the user to select a Word document in SharePoint and convert that document to a PDF file. You could do that all within the web part (I wouldn’t recommend that), but then you are limited to the licensing and copy-protection options discussed in part 2 of this series. But what if you were to de-couple the user interface (the web part) and data (the Word document) from the processing (converting a Word document into a PDF file)?

You could allow a customer’s user to select a Word document in the customer’s SharePoint farm to convert using your web part, and once the user selected the file, your web part could send that file off to your Web Service running out on the Internet for conversion to a PDF file. Once the conversion is complete, the web service could upload the file back to the customer’s SharePoint farm.

Not only is this is a different application architecture (SOA) but also a different business model (cloud / utility computing). This option completely negates the requirement to license and copy-protect the code running on the customer's SharePoint farm. The service the web part is accessing is licensed and copy-protected.

  • Licensing – Licensing is much easier here as the code running on the customer’s SharePoint farm is freely distributable. The service usage is what is licensed. There are many options available including:
    • Per-use licensing
    • Flat monthly / yearly subscription
    • Base monthly / yearly subscription with additional usage licensing
    • Data size-based usage
    • Service resource utilization-based usage
    • etc, etc, etc
      The only licensing model that is a bit of a challenge to enforce is a per-user model, though that can be done with some work.
  • Copy protection –  Copy-protection is no longer needed for the web parts as they are freely distributable. Nor is copy-protection needed for your Internet service that the web parts access as you are not distributing the service. What you do have to “copy-protect” or validate is the identity of the invoker of the web service, since the invocation of the web service is ultimately tied to billing.
    • Username and password: This can be done easily using a username and password that the customer uses when they configure the web parts. It is in the customer’s best interest not to distribute that username and password because that will incur more charges to their account. The downside here is that you have to maintain a secure identity repository that is tied to your billing system.
    • Client certificate: Issuing a client certificate to each of the customer’s SharePoint web front end servers is a much more secure way to validate the identity of the server invoking the web service. You can program your web parts edit menu to have an option for an administrator to request a client certificate from your certification authority. If your certification authority runs on Windows Server 2008 R2, you can leverage Windows Server’s out of the box web service for requesting certificates.
  • Level of effort – The question of level of effort is a trick question for this option. The level of effort for actually doing the licensing and copy protection is fairly low. However, architecting or re-architecting an application to use a service model can be high, especially if a high percentage of the application’s codebase makes direct calls into the SharePoint object model. Depending on the current application codebase, the level of effort to re-architect an application using a SOA could be as high or higher than the level of effort for designing the original application.

    That begs the question: Is it worth it? This is obviously depends on the application or capability being developed, but if your application can support this model, the answer is YES, it is definitely worth at least investigating delivering the application as a secure service with web parts freely distributed to customers and prospects. In addition to ease of licensing and copy-protecting the application you gain other benefits:
    • Support: Ongoing support is one of the biggest hidden costs in application sales. Once an application baseline has been tested and gone through QA, the most common cause for new bug discoveries is platform configuration variations of the platform on which the application is being installed. We’ve all seen too often how an operating system update can “break” software that had previously been working.

      If 100% of your application is installed on the customer’s SharePoint farm, then 100% of your application code may break as operating system updates and other applications are installed onto the customer’s SharePoint farm. With a services architecture you can greatly reduce the impact of these changes to your application by simply not having nearly as much code deployed to the customer’s farm.
    • Maintainability: Maintaining an application is closely related to the support costs discussed earlier. As with providing support, great percentage of maintenance costs and complexity in an application result from adding code to allow the application to deal with variations in the customers’ platforms on which the application is installed.

      How does a services application architecture help minimize the impacts of customer platform variations? By simply reducing the amount of code deployed to the customers’ platforms, you reduce the amount of code that needs to account for platform variations. The codebase for your hosted service does not need to account for platform variations because you control your service’s platform.

      Here is just a small list of customer platform variations to consider:
      • WSS V3 / V4, MOSS 2007 / SharePoint Server 2010
      • Windows Server 2003 / 2003 R2 / 2008 / 2008 R2 / Service Pack 1/ Service Pack 2, etc…
      • Windows Server x86 / x64. By the way, if you think this variation doesn’t matter, read my other post on things that don’t work on x64 platforms.
      • SharePoint authentication model: NTLM / Kerberos / FBA / Smartcard, etc…

All services all the time?
On first thought, the services model really does sound great. On second thought though, we can start to see some potential issues with this approach as well.

The first issue is bandwidth. While your customers may have a fast local area network (LAN), say 1000 mbps, they probably have only a small fraction of that bandwidth available on their wide area network (WAN), probably 10 mbps. That’s only 1 percent (or less) of LAN bandwidth available over the WAN. The WAN of course is what is used to connect to the Internet, where your service is hosted. We can quickly see that while occasionally processing documents by sending them to a hosted service over the WAN may be feasible, processing even moderate amounts of data can quickly consume the scarce WAN bandwidth.

The second issue is security. From your customer’s perspective, they are using your service, along with potentially a large number of your other customers. What guarantee do they have that you have taken adequate measures to prevent one of your other customers from seeing their data? This is a big concern in multi-tenant systems, regardless of where the systems are hosted. This risk is in addition to the general risk of exposing your customers’ data to the hackers and viruses prolific on the Internet.

Another potential issue is one of user context or single sign on (SSO). This issue is tangentially related to the security issue mentioned earlier. In essence, if your service needs to do work in the context of the user who initiated the processing, it is much more difficult to do this when the service doing the work (your Internet hosted service) is not connected to the same authentication source as the system that received the initial user request, I.e. your customer’s SharePoint farm.

This list of issues is by no means exhaustive, but it does show some of the most common issues with hosted services or cloud computing application architectures.

To be continued in part 4…

Check back soon for the fourth article in the series. In part 4 of this series, I will show how modify a traditional services application architecture can allow us to gain the benefits of services in licensing and copy-protection while avoiding the potential issues with the architecture.

Windows 7 and Windows Server 2008 R2 RTM!

Microsoft has released both Windows 7 and Windows Server 2008 R2 to manufacturing!

MSDN subscribers will be able to download Windows 7 RTM in English on August 6th and remaining languages by October 1st. TechNet subscribers will be able to download Windows 7 RTM in English on August 6th and remaining languages by October 1st. Read the full story on the Windows 7 Team Blog.

MSDN subscribers will be able to download Windows Server 2008 R2 RTM in English, French, German, Japanese, Italian, and Spanish on August 14th and all remaining languages starting August 21st. TechNet subscribers will be able to download Windows 7 RTM in English on August 6th and remaining languages by October 1st. Read the full story on the Windows Server Team Blog.

Thursday, July 16, 2009

Getting paid for your SharePoint software, part 2

Table of contents

Part 1
Part 2   <--- You are here
Part 3
Part 4


This is second part of my series on getting paid for your SharePoint software. If you have not already done so, please read part 1.

In part 1, I discussed how you need to be able to do four things to transform a piece of software into a product that you can get paid for:
  1. Distribute the software
  2. Deploy the software
  3. License the software
  4. Copy protect the software

Of these, licensing and copy-protecting the software prove to be the most difficult on the SharePoint platform. Please read part 1 of this series for details on why. Because licensing and copy-protecting software are closely related, I will discuss various options for structuring SharePoint software and their impacts on licensing and cop-protecting the software.

 

Option 1: License and copy-protect the installer

You could spend a lot of time, effort, and money trying to create the "un-piratable SharePoint app". And what if it doesn't sell? You spent all that effort protecting something people don't want. Consider incorporating the licensing and copy-protection into the installation utility only, and not the rest of the application.
  • Licensing - Package your SharePoint application WSP with SharePoint Solution Installer. Add a wizard step to call your license validation component. You can check for things like the number of servers in the farm, validate the entered license key with another piece of information like the person's email address, check whether the farm is WSS, MOSS Standard, or MOSS Enterprise. This provides a minimal level of licensing validation but does not allow for things like activating features over time, trial-ware, responding to changes in server count, users count or other changes in the farm.
  • Copy protection - There is very little in the way of copy protection with this method. There is nothing to prevent a malicious customer from taking the files and assemblies from your application and manually copying them to another farm.
  • Level of effort - This is by far the fastest option to implement as it does not require any changes to the application itself. You could easily complete this within a few days to a week.
Option 2: License and copy-protect the application assemblies

This option is more involved than option 1, because SharePoint lacks the infrastructure to easily deploy the types of components that are typically present in off the shelf license validation tools. Please read part 1 of this series for details. I would only recommend this option if you already have software that is either selling or broadly distributed; i.e. you know people like and user your software.

  • Licensing – You have a number of options here since the licensing can now be more deeply integrated into the application logic itself. You have the potential to activate different features based on the type of key the user enters, implement time-limited or feature limited software (trial-ware), or just about anything else you can imagine and your license validation components support. The down-side: you have to modify your application code, perhaps extensively.

  • Copy protection – This option has a better copy-protection story. Since you are modifying and recompiling your application assemblies, you can integrate the copy-protection features of your license management components into the assemblies. However, this generally means that you need to issue and store environment-specific keys, like Windows and Office does. For example, the user enters a product key that is combined with information like the farm ID or farm server hardware signature to store an activation key (not the original product key) on the customer’s environment.

    The trick is to store those activation keys securely and prevent the software from being moved from one environment to another. One difficulty with environment-bound keys is that you will need a central repository that you control that will be used to keep track of which product keys have been activated on which environments. This means that the customer’s SharePoint will need connectivity to the Internet to activate the product keys. But, the servers will only need Internet connectivity when the server or farm-bound key is being activated. This is what key activation schemes like the one that Windows uses do. The problem with this scheme is that you have to be able to handle servers that don’t have Internet connectivity. Microsoft handles this by providing a call-in number.

  • Level of effort – The level of effort here is significantly higher than option 1. You could easily spend anywhere from a couple of weeks to a few months retooling the application to incorporate license-awareness and writing the necessary infrastructure code to deploy, manage, and revoke licenses. You will need to build or procure a license activation repository. I have used Quick License Manager from Interactive Studios with good results. They provide a license management runtime that can handle environment-bound keys and a license activation repository. For an extra fee they will even host the repository for you. Also, because this option requires modifications to the application, you will need to do full regression testing on the application functions and the deployment, updated, and un-installation processes.

To be continued in part 3…

Check back soon for the third article in the series. In part 3 of this series, I will show how some creative changes to the application design and to the business model for the application can give you the best of all worlds.

Wednesday, July 15, 2009

WCF errors from SharePoint event receiver

I find it strange that I am writing this post as it would never have occurred to me that I would run into this particular issue. I’ve seen several articles on getting SharePoint to host a Windows Communications Foundation (WCF) service, but I have not seen very much on issues when SharePoint needs to invoke a WCF service.

I had a WCF service running with a SharePoint farm. Lets call that “Farm A”. I had a SharePoint event receiver running on a remote SharePoint farm. Lets call that “"Farm B”. I wanted a very simple procedure to happen: when a list item gets added to a list in Farm B, I wanted to invoke the WCF service running on Farm A.

Simple right? I certainly thought so. I followed excellent article series on hosting WCF services in SharePoint by Sahil Malik, a fellow SharePoint MVP. I deployed the service to Farm A and tested it using a simple Windows Forms application test harness. Everything worked as expected.

So then I copied over my WCF client code from my working test harness to my event receiver running in Farm B. And then the errors started.

When I have the IIS in Farm A configured to use NTLM authentication, I got the error:

The HTTP request is unauthorized with client authentication scheme 'Ntlm'. The authentication header received from the server was 'NTLM'

When I have the IIS in Farm A configured to use Basic authentication, I got the error:

The HTTP request is unauthorized with client authentication scheme 'Basic'. The authentication header received from the server was 'Basic realm="192.168.161.135"'

Now before jumping to the conclusion that there must have been something wrong with my WCF service configuration in Farm A or my client code in Farm B, let me again say that I had been able to successfully invoke the service from my test harness using both Ntlm and Basic authentication schemes using the IP address. So clearly, there was something happening between the combination of the WCF client code and the SharePoint event receiver framework that was invoking the WCF client.

Unfortunately I could not fix the problem as I would have liked, but I was able to find a workaround. Rather than use the WCF client proxy (Add Service Reference in Visual Studio), I used a Web Service client proxy (Add Web Reference in Visual Studio). The only thing I had to change in the WCF service configuration on Farm A was change the message encoding (messageEncoding) format from Mtom to Text. On the Web Service client running in the event receiver on Farm B, I had to specify that the message format was SOAP 1.1 (System.Web.Services.Protocols.SoapProtocolVersion.Soap11).

Certainly this is not an ideal solution, but it allows me to proceed with my project. Here’s hoping that SharePoint 2010 and WCF play a little more nicely together :)

Monday, July 13, 2009

Why SharePoint Scares Me … commentary

I recently read a post by Peter Campbell titled “Why SharePoint Scares Me”. Now being a Microsoft SharePoint MVP, you might think I’m about to go into a scathing criticism of Peter’s post. But I won’t. In fact, you may be surprised when I say that I liked his post very much.

Peter’s post was an honest and objective view on SharePoint from the perspective of someone who is neither a Microsoft zealot nor an oppositionist. Peter seems to be someone who doesn’t really care that much about the tech but is looking for something to get the job done with minimal upfront and ongoing investment. I run into similar conceptions about SharePoint very frequently. This is exactly the type of person we (the SharePoint MVPs) and Microsoft need to educate. 

To summarize Peter’s post, it conveyed concerns about SharePoint’s complexity, costs, learning curve, and operational impact. Unfortunately a lot of people share Peter’s viewpoint. I wanted to share my perspective on some of his points...

"advanced programming and integration with legacy systems can get really complicated"

This is true of all technologies, not just SharePoint. SharePoint actually has several tools that can make the job much easier. For example, many times you can implement a no-code integration with an external / legacy system using SharePoint Designer 2007 and the DataForm (aka DataView) web part. This does not require the more expensive SharePoint enterprise CAL.

"MOSS is actually two major, separately developed applications (Windows Sharepoint Services and Content Management Server) that were hastily merged into one app"

CMS was integrated, but the integration is better than one would think. It works very well for intranet and extranet scenarios. SharePoint for Internet sites can still be a challenge, but a fair amount of large Internet sites use SharePoint today. Check out this impressive list of public Internet sites using SharePoint from wssdemo.com.

"Without careful planning, Sharepoint can easily become a junkyard"

This is true of any content repository. The integrated search helps a great deal with content discovery, especially for new users, and the content expiration and records management features help to keep archives from cluttering up the works.

"Licensing for use outside of my organization is complicated and expensive"

Check with your MS sales rep. Microsoft has many programs to help smaller organizations qualify for better pricing, including BizSpark. BizSpark offers relatively new and small business free software for a period of three years! it’s a fantastic program.

The unlimited license is typically used only by public Internet sites that don't want to or can't track individual users. Intranets and extranets should use the per-user license. You may even get a volume discount as well. You can also start with Windows SharePoint Services (WSS) for core collaboration and document sharing, and move to MOSS later, if you need to. WSS is included with the Windows Server license.

"Compared to most Open Source portals, Sharepoint's hardware and bandwidth requirements are significantly high"

The great thing about SharePoint is that you can start small and scale out as your needs grow. Start with a small pilot group of users. If more people want to join in (and they will once they see what SharePoint has to offer), add hardware then. You can even scale up servers without taking the farm offline.

While bandwidth can be an issue, especially for transferring large documents, this is true for any CMS.

<Shameless-plug>
Black Blade Associates (my company) has a product called SharePoint Zip. SharePoint Zip allows users to transfer files between SharePoint and their desktops as compressed Zip files. Users can transfer individual files, folders, or even a complete document library with a single click. Users can also upload multiple files as a compressed Zip file, which will be expanded into the document library. No additional client software, ActiveX, or plug-ins required.
</Shameless-plug>

"The database stores documents as database blobs, as opposed to linking to files on disk, threatening the performance of the database and putting the documents at risk of corruption."

This actually works better than storing the documents on disk. You are able to leverage database transactions, load balancing, backup, maintenance, and failover to guarantee uptime and ensure disaster recovery. SQL Server has made great gains in storing BLOBs, and SharePoint continues to benefit from those gains.

"I'm much better off with apps like Drupal, KnowledgeTree, Plone, or Salesforce, all of which do big pieces of what Sharepoint does"

I began my IT career doing enterprise application integration. I can tell you from experience that getting multiple applications to talk to one another in a way that is meaningful to your end users is always much more expensive than procuring one, integrated application. You're generally looking at a 3X cost increase for the labor costs to do the integration. Also, don’t forget to budget extra time on top of deploying the systems to do the integration work.

"I might lose all of that out of the box integration with my MS network"

Don't underestimate the costs of losing integration with the Office desktop applications with which your users are familiar. User productivity loss and user training costs are two very high hidden costs to deploying any CMS or collaboration system. SharePoint minimizes those costs by leveraging the expertise and familiarity users already have with the Office desktop applications.

All that said, I don’t want to give the impression that SharePoint is perfect or that Peter’s points are not valid. SharePoint is not perfect, and Peter has definitely done some due diligence before implementing a core business capability for his organization. However, when compared to the alternatives, SharePoint is a very capable and cost-effective offering, especially when you factor in comparing the hidden costs of user training, user productivity (you know, the reason you’re planning on deploying a collaboration or CMS in the first place), ease of scale-out, and general management features. Even CMSWire, a site typically critical of SharePoint, posted a lengthy reference to a Gartner report positioning SharePoint 2007 in the “magic quadrant” for enterprise CMS. Considering that SharePoint is sharing the position with products that have much higher price tags that is a high praise indeed.

By the way, if you have not already done so, you should really check out the SharePoint 2010 videos Microsoft just posted. They show many improvements to the underlying SharePoint infrastructure and development experience, and the videos address many of Peter’s concerns.

Microsoft releases SharePoint 2010 sneak peak videos

This is for everyone chomping at the bit to know more about the new version of SharePoint, SharePoint 2010: Microsoft has released three sneak-peak videos on SharePoint 2010. Check out the videos here:
http://sharepoint.microsoft.com/2010/Sneak_Peek

There are three videos: an overview video, one target for IT pros, and one for developers. Now, I know what you’re thinking: oh great <sigh>, these are more stupid animated Flash movies from the marketing department that are packed full of moving document, people and web page icons but really have no useful information.

Not so! These videos have some real meat them. You can actually get a glimpse of what working with some of the new and augmented features of SharePoint 2010 is like, including what it takes to develop applications for it.

Sunday, July 12, 2009

Great together: Windows Live Write and Blogger

I’ve had my blog on Blogger for a few years now. I’ve tried various methods of posting blog entries to Blogger, including Microsoft OneNote / Word. That method worked ok, but including rich media was always a manual and painful process.

I then started using the Blogger web user interface. It worked well most of the time. Including rich media was much easier than with Word. But, due to glitches between the web user interface, my browser, and / or network connection (still not sure exactly what happened) I lost several posts. I’m not one of those natural writer types who can whip out a post in a few minutes. Writing is an arduous, and sometimes painful process for me and my wife (she has to listen to me complain about it), so losing even one post was a big setback.

I’d seen Window Live Writer a while ago, and even tried it in passing, but it did not integrate well with Blogger. But, I am happy to report that the recent update I downloaded is a huge improvement. If you are using anything older than version 14.0…., download the latest version of Live Writer and give it a shot. Inserting images and screen shots (which I use a lot!) is incredibly easy. I just did a print screen from Windows, and pasted this image directly into my blog post.

about Windows Live Writer 14

No messing around with saving the file locally, then uploading, then re-linking into the post. I can easily control the size of the image, various effects, and text wrapping.

The best part is that I can open previous blog posts and drafts directly from Blogger to make updates. Live Writer will even import my blog template so I can get an accurate preview of my post as I’m writing it.

There are lots of other great reasons to give Windows Live Writer 14 a try, especially if you have tried a previous version and have been unimpressed. Go ahead, give it a shot. Download Windows Live Writer today.

Saturday, July 11, 2009

Getting paid for your SharePoint software, part 1

Table of contents

Part 1   <--- You are here
Part 2
Part 3
Part 4


What's the issue?

If you're reading this post, you're already aware of the tremendous velocity with which SharePoint grown in the web-based collaboration market. You are probably also aware of the huge community of application developers, IT pros, UI designers, information architects, content managers, and users that have sprung up around this extremely popular product. I sure did. But what really struck me was how few add-on products there are for such a popular collaboration platform. Now sure, there are lots of free and open source tools and utilities out there, but not many "real products"; you know, the kind that you can buy and actually get support for.

That's a big barrier to SharePoint adoption. Most companies don't have SharePoint developers and don't want to install some code they find on Codeplex in their production environment. Real organizations want real software that comes with real support. Unfortunately, providing real support costs money. That means that the person writing the software needs to be able to make at least enough money from the software to cover the support costs, including coming out with updates.

In order to get paid for your software and provide support for it, you need to be able to:
  • Distribute the software
  • Deploy the software
  • License the software
  • Copy protect the software

If you can't do those four things, you don't have a product; you have a utility for which you will not likely get paid, and for which you will not likely be able offer support.

Ok, so that's software development 101. Back to the main question: Why are there so few real SharePoint products on the market? Based on the size of the SharePoint community one would think there would lots good ideas for SharePoint software for which people would gladly pay. Distributing software is fairly easy, just post it on a web site, and let people download it. Don't have a web site? The list of free web site providers is too numerous to mention. Deploying SharePoint software is not hard. SharePoint has a deployment framework that makes use of Cab files with a ".wsp" extension, called "Solutions". there are several tools to create WSP files and deploy them with a GUI. Check out WSP Builder and SharePoint Solution Installer.

It turns out that the hard part of getting paid for your SharePoint software is the last two items: licensing and copy-protecting the software.

Licensing

Lets talk about licensing fist. You don't want to write your own license management software. It is much better to use some off the shelf software for this purpose. License management software is relatively inexpensive and does a much better job of storing the license keys securely than you will likely do. The problem is that most of that software requires the deployment of un-managed (native) DLLs or COM objects and direct registry access on each server in the SharePoint farm. Un-managed DLLs require a different version of the DLL depending on whether you are deploying to a 32-bit server vs. a 64-bit server. COM objects need to be registered on each server in order to function. SharePoint does not have a good mechanism for easily deploying and managing these types of components. Yes it can be done, but you will likely spend as much much writing the infrastructure code as you did creating the actual software.

Copy protection

Copy protection is also problematic for SharePoint applications. Yes, you can strong name your assemblies, and with a licensing and obfuscation mechanism, secure them and bind them to the farm for which they were purchased. The problem is that a real SharePoint application is not just a set of assemblies. In fact, it may not have any assemblies at all. Here are just a few types of objects that must be stored in clear text on each web server:

  • Site and list definitions
  • Content types
  • Features
  • ASPX pages

Even if you are able to secure your assemblies, the bulk of your SharePoint application may be required to be unprotected. If you can not copy-protect a large portion of your application, you may still get some sales, but will likely lose significant revenue from people using pirated copies.

To be continued in Part 2...

Rest assured that there are solutions to the problems of licensing and copy-protecting your SharePoint software. I will discuss several options in part 2 of this series.

Thursday, July 09, 2009

Speaking at the SharePoint Best Practices Conference

I'm very excited to speak again at the upcoming SharePoint Best Practices Conference in the Washington, DC area. The conference will be August 24-26, 2009 at the Hyatt Regency in Reston, VA, a short hop from Dulles International Airport (IAD).

I'll be speaking about "Using Service Oriented Methodologies to Create SharePoint Products", a topic that's near and dear to my heart. If you have an idea for a SharePoint-related product but don't know how to make that idea pay, or you already have some SharePoint software that you would like to take to the next level, this is the session for you. Here is full abstract:

This presentation focuses on applying development methodologies and software architectural concepts of Services Oriented Architecture (SOA) to the task of creating complex SharePoint applications. We will see how a SOA approach can help us achieve a stable and scalable product, decrease support and maintenance costs by decreasing the product’s complexity, and greatly simplify the copy-protection and licensing requirements for the product.

While the topics in this presentation are of great benefit to new software development efforts, they can be even more valuable to organizations with an existing product set. We will look at a case study of how a traditionally architected application was converted using the SOA tenets discussed in this presentation and the benefits that conversion brought about.

Oh, and did I mention that Arpan Shah, Director of the Microsoft SharePoint Team, is giving the keynote?! Take a look at the great list of topics and speakers. Register today for what is sure to be an exceptional conference!