Sager NP7680 Unboxing: The Packing Tape

These packing tape shots prove that my Sager NP7680 was shipped with professional care:

Sager NP7680 Unboxing: Sexy packing tape...
Sager NP7680 Unboxing: Sexy packing tape...
Sager NP7680 Unboxing: Sexy packing tape...

The next three shots really drive this point home, down into the basement and several hundred feet into the sewers:

Sager NP7680 Unboxing: Sexy packing tape...
Sager NP7680 Unboxing: Sexy packing tape...
Sager NP7680 Unboxing: Sexy packing tape...

It’s the last image that’s the non sequitur. Now, it’s the only recorded image of my Sager logo intact. You see folks… I tore off the sharp, descending terminal of the R in “Sager” with the bleeding palm of my hand while sliding this thing into my bag. This is another strange voodoo-style injury that goes along with the bizarre furniture accident.

There is no such thang as “complete” safety for a living organism—and even the stones cannot escape change.

Hours and Hours and Hours of SharePoint

Buy this Book at Amazon.com! This is my SharePoint turning point. It’s 4pm on a W2-labor-camp holiday and I have not eaten a thing. This is what I’ve learned so far:

  • Master Pages do not allow code blocks. So showing something as simple as the current date on every page is not possible directly in the master page.
  • This attribute __designer="" is actually used by SharePoint Designer to render design-time previews and has nothing to so with your code—but these things (at times) show up in your code. From a Visual Studio point of view, this “feature” is outrageous crap.
  • It has been said that Windows SharePoint Services (WSS) “will not accept” relative URLs. Specifically, the $SPUrl syntax does not work in WSS—this depends on Microsoft.SharePoint.Publishing which is a part of MOSS—not WSS.
  • Without $SPUrl, the only relative URLs you have at your disposal in SharePoint are: /_vti_bin, /_controltemplates, /_layouts, /_admin, /_vti_adm. It’s the /_layouts path (or with the ASP.NET tilde syntax to ensure parent-level access: ~/_layouts) that’s most important for WSS UI designers. For more information, see “Figure 8 Common File Locations Accessible from WSPs” in “10 Best Practices For Building SharePoint Solutions.”
  • There must be other relative-URL conventions in SharePoint because I see that some ASP.NET controls use ~site/ to obtain a relative path—but this, it seems, is not a global convention.
  • SharePoint slang: “the 12” or “the 12 hive” refers to %CommonProgramFiles%\Microsoft Shared\Web server extensions\12. In my earlier (failed) forays into SharePoint “branding” I refused to take this raggedy folder seriously. But the Microsoft documentation clearly compels me to reconsider (or buy into MOSS).
  • ASP.NET Expressions in SharePoint page files, like $Resources:wss,navigation_accesskey, use files, like wss.resx, in the App_GlobalResources folder of your SharePoint Site Collection.
  • The great and powerful Heather Solomon’s “Minimal or Base Master Pages” are invaluable. WSS users only need to worry about HeathersBaseCollaborationMasterPage.master because the other file refers to Microsoft.SharePoint.Publishing which is a part of MOSS—not WSS.
  • The asp:ContentPlaceHolder with id="PlaceHolderNavSpacer" uses a spacer image (/_layouts/images/blank.gif) to ensure “proper” layout of columns. I have failed to prevent this control from inserting an image even when it is supposedly hidden. I haven’t taken the use of spacers in Web page layout seriously for almost a decade. I can excuse the semantically- and accessibility-hostile use of table elements for layout but this is ridiculous! (But I hear tell that SharePoint cash-cow herding is a profitable business.)

So scrawling all those ragged notes above is actually a celebration with mixed feelings of being able to customize pages in SharePoint (WSS especially) using Master Pages. Yeah. Wow. Literally, an entire day was taken from my wretched life… This better pay off later! But it would be a welcome (and hurtful) surprise to hear a Microsoft announcement about how Scott Guthrie finally got his capable technological hands on a future version of SharePoint that dog foods all of the modern Web development technologies from Microsoft. SharePoint should be a showcase of cutting-edge Microsoft technologies… ASP.NET MVC should be in SharePoint, ADO.NET Data Services should be in SharePoint, ASP.NET Dynamic Data forms, ASP.NET AJAX (featuring jQuery) should be in SharePoint, etc. Microsoft has the technology to actually make SharePoint elegant and exceptional… like in most large organizations, the issues are most likely political, logistical and administrative…

MIX09 Video: State of the Art in Web Site Design on Microsoft SharePoint

This March 2009 video from self-described New Zealand Hobbit, Chris Auld, is the first video of the auspices of Microsoft that shows before a live audience how to customize SharePoint using themes in an automated, professional manner:

http://videos.visitmix.com/MIX09/C20F

Some important points:

Theme generation and deployment is shown in this video using a brand-new tool for Visual Studio 2008 called Visual Studio 2008 extensions for SharePoint (VSeWSS) 1.3

Theme development does not touch any HTML—only CSS and images are involved. According to the speaker this is “easier” and faster than using SharePoint designer to modify Master Pages. But, to get “easier” in perspective, please see Heather Solomon’s SharePoint 2007 CSS Reference Chart—this chart is about 14 pages long!

For more information please read these entries from New Zealand: “My Sessions from MIX09 last week,” “Useful Stuff for Building SharePoint Themes” and “Creating the Structure for a SharePoint Theme in VSeWSS v1.3.”

SharePoint Services and SQL Reporting Services Must Start Manually on My Server

Buy this Book at Amazon.com! Here among the cubicles, a consultant from Microsoft told us to install SQL Server 2005 with Microsoft Office SharePoint Services. Since my development VM disk suffered hard disk sector and index problems for the first time, I am thinking of reasons why he told us to stay away from SQL Server 2008.

The Application Log of my VM was defiled by actual errors! It was SharePoint trying to log into my SQL Server 2008 instance but it wasn’t ‘ready’ to accept connections… I strongly suspect that SharePoint services will try to access the database during system startup and shutdown—when services SPTimerV3, SPTrace, SPAdmin and SPSearch are set to start automatically. What’s a dangerous possibility is that SharePoint might try to write to the database during a system shutdown. The 2008 SQL instance might ‘abandon’ SharePoint, leaving it to perhaps damage the disk with its unmanaged, wild-ass DCOM parts.

So it turns out that I have already written a PowerShell script to shut down services so I can run SyncToy 2.0 against things like *.mdf files. I run these backups from my VM before shutdown. Now with SharePoint and SQL Server 2008, I’m going to have to run this script after startup—to kick off the SharePoint services (SPTimerV3, SPTrace, SPAdmin and SPSearch) I have set to “manual.”

It’s been a tough week.

Random Screenshot: A “Blank” SharePoint Site in a GNOME Folder

Random Screenshot: A “Blank” SharePoint Site in a GNOME Folder

So let’s take a peek at what Windows SharePoint Services (WSS) generates for a “Blank” Collaboration Site. What jumps out at my inexperience with the inelegant innards of SharePoint is the absence of .ASPX files. There’s locale resources, some FrontPage-looking (WebDAV) stuff, some kind of browser capability database (see “Add Blackberry support to Forms Server 2007 or SharePoint 2007”), a *.DLL file for SOAP, a *.DLL file for ‘application pages,’ two different web.config files and the global.asax file that is probably doing most of the heavy lifting.

I assume the rest of the site is in the Content Database. And, oh, by the way, I had some kind of disk catastrophe yesterday and lost a 300meg WSS Content Database! Because the log had some open transactions I could not recover the database. I got almost everything back as disk files (not in SharePoint) from a backup.