Wednesday, September 24, 2008

Thoughts about Microsoft's future

In 2000, when I picked up a book about ASP.NET Beta, I was impressed with Microsoft’s ability not only to copy Java, but make it simpler and better. In the next couple of years I switched from doing Java/Oracle projects to .NET/SharePoint projects. It turned out to be a great call. SharePoint is a product that Microsoft got right even with all of the problems it has. .Net has practically became a standard within the enterprise and now promotes all of Microsoft server products.

I am fairly loyal to Microsoft products even outside of the corporate world. I have an Xbox and a Zune (and this is after a couple of IPods).

So why I am writing this? Microsoft is clearly losing the battle on the consumer side and it’s only a matter of time until Google/Apple make a much stronger case in the corporate world with Google documents/Gmail/Iphone/Android etc.

Why is Microsoft losing the battle? Steve Ballmer’s ineffective leadership and poor execution.

Some of the major execution failures under his watch:

- Zune (F) – failed to copy Apple feature set; horrible desktop software.
- Live.com (C-) – took too long to roll out; did a couple of reactionary to Google/overpaid acquisitions.
- Vista (B-) – perceived performance is bad; lied about system requirements on the initial roll out (I like Vista with 4GB of RAM, but XP was still faster).

Shareholders should demand a better track record from a CEO of the largest software company in the world. Microsoft still has a lot software power and a few simple adjustments would really help the company and likely the stock price:

- Get a new CEO – somebody from a successful Microsoft business unit such as Xbox or SharePoint.
- Lay off hordes of contractors and limit frivolous hiring. In the last year, the number of employees Microsoft hired is equivalent to 55% of Google’s total workforce. And I though Google hired too many. Contractors make Microsoft more and more like IBM.
- Focus on performance. Stop assuming that the hardware will get better and better. Deliver products that require less RAM and CPU.

Saturday, June 28, 2008

Why is SharePoint valuable?

Being one of the few people flying around like a maniac teaching SharePoint classes on a Mac, I'm obviously not a Windows fanboy or Microsoft shill. If you ask them, SharePoint is the best of everything and can do anything.

While that may be true to a certain extent (anything that is as openly customizable as it is can be configured and added on to to do most everything that a computer can), there is a point where you may as well have written your entire solution from scratch.

And well, the things that it offers are not best of breed. I can't name a single feature of SharePoint that is not better had somewhere else. Why would I suggest that anyone use the product, ever?

Note that I said "single feature." SharePoint is much more than a single feature. There might be a better document management system, but not one that also gives you a portal, collaboration on random things, and a central place to base a company intranet from.

With SharePoint, you can build something pretty close to MySpace in a couple days. Its not identical, and some stuff is definitely missing, but you can get really close. That is precisely where SharePoint offers value.

For the majority of things in business, 90% of the way there is more than good enough. Sure, you can spend another 6 months customizing everything to make it perfect, but living with a few idiosyncrasies or a nav element in its default position instead of precisely where they designers wanted it gets you being productive immediately.

So, what am I trying to say? SharePoint has value if you're willing to work with its design and modify your ideas to fit in with it - so work on understanding the product. It's a waste if you're going to spend 6 or 7 figures trying to make it work like it should - you'd be better served writing your own solution from scratch.

Saturday, June 14, 2008

Application.master and Default.master

These files are indeed extremely important to any SharePoint deployment.  From time to time, though, someone gets the bright idea to tinker with them and break the site.  How?  Well, say someone decides to open up application.master in SharePoint Designer to make some changes for application pages.  Whoops - it's dead.

Anyhow, since I have run into this situation more than once at client sites I figure that what is needed is a really easy place to get replacement default versions of each of these files so that you can go back to happily sharing and pointing.

If you need them, here are some download links.  Anyone without SharePoint will have no use for these files anyhow, and there's no magic in them at all, but if someone at Microsoft has a problem with me linking to them feel free to let me know.




Happy SharePointing.

Saturday, May 3, 2008

WebDAV, Finder, and Terminal

NOTE: If the portion of an image that is displayed gets the point across for you, then that's great.  If something seems missing, then it's getting truncated by the browser against our wishes - click it to view.

Question:  How do I get Explorer View working on a Mac?

Answer: Mount the Document Library in finder over WebDAV.  Downloads and deletions will function fine, but uploads need to be done via cp or curl from a command prompt.

If that made sense to you, then read no further.  If you have no idea what I'm talking about but would still like to get multiple files at once from sharepoint to your mac (or if you need to upload large files and it keeps timing out on you), then read on for a detailed walkthrough.

STEP 1

Navigate to your library in Safari, and copy the URL of the actual library to your clipboard.  My example is on a machine called spbase.

Photobucket

STEP 2

Go back to Finder, and Connect to the Server.

Connect to Server in Finder

Connect to Server 2

STEP 3

Ignore the domain field, as for some reason I can't make it work correctly (I blame either Apple or Microsoft on this one, not sure who screwed it up), and specify your domain and username on the next line as follows.  Give your password as well.

WebDAV Prompt

STEP 4

The Library should open in Finder as shown below.  If you try to drag and drop (finder copy) a file out of it it will work correctly.  It will also allow you to delete things that you have checked out.  What will not work (as is also shown in the picture below) is a copy TO the location.  It is likely a character set issue.


Finder Broken Copy to

STEP 5

If you want to copy a file TO the library from your macintosh, open up Terminal and navigate to where the library was mounted on your file system.  Mine was called Docs, so it was found under /Volumes/Docs.  The first image illustrates that you can drag a file to the Terminal window and the path will be inserted for you at the prompt.  The second shows the full syntax and results for a cp copy as well as one using curl.

Copy with CP
Copy with Curl

Notes: The error after running the cp command is irrelevant, as losing the extended attributes will mean nothing to Windows users that you were collaborating with.  Curl will show you progress, and also has the ability to pick up where a "download" left off.  In our case we're using it for an upload, but trickery is part of the game when you're trying to get Apples to play nicely with Windows.

Check back here for updated information or utilities to make this sort of thing even easier.

Wednesday, April 16, 2008

ReportViewer?

So after tinkering with Visual Studio 2008 Express on a SharePoint development machine, I made the obvious eventual move of uninstalling Express Edition and replacing it with Visual Studio 2008.

Surprisingly, SharePoint stopped working.

Checking the Event Viewer revealed an issue in ASP.net rearing it's head on line 110 of a web.config file.  I first tried to comment out the entire offending block of xml, just to see if I could get something to load at all, and was confronted with a SharePoint custom error page (better than before).

This led me to believe that that was indeed where the problem was, so I uncommented the block in question and investigated the GAC.  Everything looked fine, aside from the version numbers now reading 9.0.0.0 instead of the desired 8.0.0.0.  I went back to the web.config file and modified the assembly reference to point to the new dll, and everything was back up and running.

Below is what the error looked like in the event viewer, so you can see what I did.  I bolded the most useful piece of this error message.

Event code: 3008 
Event message: A configuration error has occurred. 
Event time: 4/16/2008 7:25:43 AM 
Event time (UTC): 4/16/2008 2:25:43 PM 
Event ID: 0779893478a24b24a2ad40d3ec8f7869 
Event sequence: 4 
Event occurrence: 1 
Event detail code: 0 
 
Application information: 
    Application domain: /LM/W3SVC/1427747289/Root-1-128528295098437500 
    Trust level: WSS_Minimal 
    Application Virtual Path: / 
    Application Path: C:\Inetpub\wwwroot\wss\VirtualDirectories\80\ 
    Machine name: SPBASE 
 
Process information: 
    Process ID: 3340 
    Process name: w3wp.exe 
    Account name: SPBASE\Administrator 
 
Exception information: 
    Exception type: ConfigurationErrorsException 
    Exception message: Could not load file or assembly 'Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. (C:\Inetpub\wwwroot\wss\VirtualDirectories\80\web.config line 110) 
 
Request information: 
    Request URL: http://spbase/_layouts/error.aspx 
    Request path: /_layouts/error.aspx 
    User host address: 127.0.0.1 
    User: SPBASE\Administrator 
    Is authenticated: True 
    Authentication Type: NTLM 
    Thread account name: SPBASE\Administrator 
 
Thread information: 
    Thread ID: 8 
    Thread account name: SPBASE\Administrator 
    Is impersonating: True 
    Stack trace:    at System.Web.Configuration.ConfigUtil.GetType(String typeName, String propertyName, ConfigurationElement configElement, XmlNode node, Boolean checkAptcaBit, Boolean ignoreCase)
   at System.Web.Configuration.HttpHandlerAction.InitValidateInternal()
   at System.Web.Configuration.HttpHandlersSection.ValidateHandlers()
   at System.Web.Configuration.HttpHandlersSection.FindMapping(String verb, VirtualPath path)
   at System.Web.HttpApplication.GetHandlerMapping(HttpContext context, String requestType, VirtualPath path)
   at System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)
   at System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

Welcome!

We thought it would make sense to share some solutions to random problems that we have thus far run into during the myriad of SharePoint implementations that we have been a part of.

So, here it is, and welcome!  Hopefully there is some overlap between our random solutions and your random issues.