1/15/2008

Book Reviews

My students are always asking about book recommendations. I'm a bit hesitant to make recommendations as often a good book for one person is useless to another, and I'm a tough book customer and way too critical. Technology books are expensive and have a short life and I only buy those that have something special.

Here's what I look for in a book:
  • Something that I can't find on the web. This usually means the book must be a complete, detailed and an ongoing reference. In contrast the web is full of tiny fragments on information (blogs, etc) and mind grinding endless documentation (MSDN for example).
  • Full of stuff I can use today, and tomorrow.
  • Examples that are complete and work.
  • Not fluff, marking material or a meandering conversation.
Two excellent examples are:


So here we go...Book review #1: Professional SharePoint 2007 Development (Programmer to Programmer)
more to come...

I have just not had time to write the book reviews I wanted to. So for now, here's a list of books that I have purchased and read, and highly recommend...


InfoPath Books:

For InfoPath books see here: http://techtrainingnotes.blogspot.com/2007/11/infopath.html

SharePoint Developer Books:

The best book for those getting started is "Inside Microsoft Windows SharePoint Services 3.0". The core framework for both WSS and MOSS is the same, so this book is the starting point.  I have not seen it yet (it's not out at the time of this note), but there's a 2010 version in the works...



SharePoint Administrator Books:
It's been around for a while, but if you are looking for the best complete book on MOSS then consider:


SharePoint Excel Services Books:
It may sound "Basic" but the best book I have seen on Excel Services is "Beginning Excel Services".

1/13/2008

SharePoint MOSS Bootcamp notes...

First of all, thanks for attending the MOSS Bootcamp. Please let me know how you did on the exam! Below of some of the links we talked about in class...

 

If you would like to attend a second class on SharePoint administration, consider:

MX-SPA401 Professional SharePoint Server 2007 Administration This is a four day class with about a 50% overlap with the 5061 class that the bootcamp was based on. Sometimes seeing something for a second time from a different perspective can help a lot.

 

Need more experience as a SharePoint end-user or Site Owner / Department Admin?

MS-50196 Microsoft Office SharePoint Server 2007 Power User (MOSS)

 

Want a quick introduction into what can be done with SharePoint customization? This class introduces both Visual Studio and SharePoint Designer for SharePoint customization.

MX-3530 Customizing SharePoint 2007 Applications

MA-1019 SharePoint Designer 2007 - Customizing and Branding SharePoint

 

Developers? Here are a few of out other classes that may be of interest:

MA-1038 Advanced SharePoint Training for Developers

MA-1032 Introduction to SharePoint Workflows for Developers - Microsoft SharePoint 2007: Business Processes

1/10/2008

SharePoint VPCs

SharePoint 2010 VHDs are now available… see here: http://techtrainingnotes.blogspot.com/2010/02/sharepoint-2010-vhds-now-available.html

(the info below is for SharePoint 2007)

Update! OUCH!  Microsoft has updated the MOSS 2007 image below… and it now only works under Hyper-V, and only under Windows Server 2008 64 bit!  I cannot find a 32 bit version!

See here: http://techtrainingnotes.blogspot.com/2010/05/sharepoint-microsofts-eval-sharepoint.html

Create one!
"How to Create a MOSS 2007 VPC Image: The Whole 9 Yards"
A great step by step set of instructions by Tony Zink.
http://www.pptspaces.com/sharepointreporterblog/Lists/Posts/Post.aspx?ID=28

Create one for development work:
http://weblogs.asp.net/erobillard/archive/2007/02/23/build-a-sharepoint-development-machine.aspx

Download one!
WSS: Microsoft also has a downloadable VPC image with a full WSS install that includes Visual Studio 2008 and Visual Studio 2008 extensions for Windows SharePoint Services 3.0, v1.1:
http://www.microsoft.com/downloads/details.aspx?FamilyID=1beeac6f-2ea1-4769-9948-74a74bd604fa&displaylang=en

MOSS: Microsoft also has a downloadable VPC (now only works with Hyper-V!) image with a full MOSS Enterprise install that includes Office 2007:  
http://www.microsoft.com/downloads/details.aspx?FamilyID=67f93dcb-ada8-4db5-a47b-df17e14b2c74&DisplayLang=en
VPCs for more Microsoft products here: http://technet.microsoft.com/en-us/bb738372.aspx

The general requirements for using these VHDs are:
- A system with supported Operating Systems: Windows Server 2003 or Windows XP or Windows Vista
- Other Requirements: Personal Computer with 1.5 GHz or higher processor and at least 1 GB RAM.
- Free hard drive space as required by the VHD
- Super VGA (1024x768) video adapter/monitor
- Microsoft Virtual Server 2005 R2 software


Want to get rid of "Shutdown Event Tracker" popup you see every time you shutdown the VPC?
Here's a great article describing the feature and how to turn it off: http://www.windowsnetworking.com/articles_tutorials/Disable-Shutdown-Event-Tracker-Windows-2003.html

And here's the official article from Microsoft:
http://support.microsoft.com/kb/293814

1/07/2008

SharePoint: SmallSearchInputBox tip

If you are looking here to find out how to get Advanced Search or custom search scopes to show up then also check here.

 

While researching the SharePoint DelegateControl I found some misleading information on the value of the sequence attribute that should be used with a custom Feature to replace the default search box (SmallSearchInputBox). Most of the blogs say that sequence should be less than 100 to make your search control be used in place of the default. Turns out that sequence must be less than 25, not 100.

I think that many of the articles on the web may have been tested on WSS, not MOSS. MOSS has it's own Features to replace the search box.

On my server these Features also override SmallSearchInputBox:

    ContentLIghtup   sequence=100
    OsearchBasicFeature   sequence=50
    OsearchEnhancedFeature   sequence=25

So any custom Feature you add needs a sequence number less than 25.

 

.

1/01/2008

Book review: Professional SharePoint 2007 Development

I always have mixed emotions about books written by more than one author, especially when each writes their own chapter. This is one of those... Professional SharePoint 2007 Development (Programmer to Programmer) WROX ISBN: 978-0470117569 To start with, the title of the book includes the word "Development" and "Programmer to Programmer". To me that usually means coding. Several of the chapters have no or little code and are really an introduction to selected SharePoint features. That said, the chapters with code do make the book worth the price. Keep in mind that this book is not a "how to write code for SharePoint" book. It is a collection of articles from eight different authors. There is no obvious starting place to learn how to write SharePoint code. For that matter almost half of the book is really "Introduction to SharePoint". Other the other hand, the other half of the book is quite good, and I think justifies it's purchase. If you think I'm a bit negative in the review below, just remember I was looking for hardcore coding bookand was disappointed to find so much overview material. (If you want good detailed and very complete overview and admin material you should be looking at "Microsoft® Office SharePoint® Server 2007 Administrator's Companion" by Bill English) Do I recommend the book? Will I keep it in my library? Yes. Especially for the chapters written by John Holiday (11, 12, 13, 14, 15) and the last half of chapter 2. Those justify the cost of the book, and the rest is ok as filler. (my applogies to those other authors) As each chapter was written independently of the others, I guess I will need to review each chapter! (scored on a 1=bad to 5=good scale) Chapter 1: The Microsoft Application Platform and SharePoint This is just an overview of SharePoint and positioning with other Microsoft products. Coding Value? 0 General Info Value? 3 Chapter 2: MOSS 2007 Overview for Developers The first 10 some pages is just an overview, again. But, the next 20 pages are execelent! And these 20 pages have nothing to do with the title of the chapter. What are they about? Building a Virtual PC development environment! Combine this with the "Whole 9 Yards" blog article and you have everything you need to build SharePoint VPCs. Coding Value? 0 for code, but 5 for building VPCs General Info Value? 3 for the first 10 pages and 5 for the rest Chapter 3: The SharePoint User Experience An introduction to SharePoint with a small detour into coding "cross-list queries" and an introduction to using SharePoint with mobile devices. The one coding example is kind of out of place in that this is the first sample of code in the book and none of the objects have been explained yet. For that mater the author does not even mention how the code might be used or tested. I.e. custom page, web part, or whatever... Coding Value? 2 General Info Value? 3 Chapter 4: WSS v3 Platform Services This is one of the larger chapters and introduces Site Definitions, Custom Field Types, Features, Solutions and Web Parts. All of these are very important to the developer. The only complaint that I have is the large number of tables of XML elements, most likely copied from Microsoft online content. Coding Value? 1 (very little code) General Info Value? 5 (all very important topics around deployment) Chapter 5: Programming Windows SharePoint Services An decent introduction to the SharePoint object model and some Visual Studio basics. Again, way too many lists copied from Microsoft content with no additional value. Coding Value? 3 General Info Value? 3 Chapter 6: A Sample Collaboration Solution A step by step on how to create a site and lists??? The one good thing in this section is how to create a SharePoint event receiver. A better title for this chapter might have been "Creating an Event Receiver (and testing in a sample site)" Coding Value? 4 General Info Value? 3 Chapter 7: RSS, Blogs, and Wikis Yet another "Introduction to SharePoint" chapter! No code at all (except for a sample RSS XML file). Coding Value? 0 General Info Value? 1 Chapter 8: Building Personalized Solutions If you are just starting development work with SharePoint then save this chapter for later. It covers Profiles, MySites and Audiences. Coding Value? 4 General Info Value? 3 Chapter 9: Using Enterprise Search Another intro chapter with a mix of administration and development stuff. A real opportunity was missed by not spending a good amount of time on creating custom search pages. Coding Value? 0 General Info Value? 2 Chapter 10: Using the Business Data Catalog Another overview chapter. But 29 pages of raw XML listings of BDC files is a joke. (WROX must have demanded at least 700 pages for this book. It has 715.) The only real code example dumps the info from the BDC XML file. I would have like to have seen an example of a web part or ASPX page using data delivered via the BDC. Coding Value? 0 General Info Value? 1 Sounds pretty bad so far? Hang on, we are getting to the good stuff! Chapter 11: Building Document Management Solutions Chapter 12: Building Records Management Solutions Chapter 13: Building Web Content Management Solutions I listed all three of these together as they are all written by the same author and all have great content and examples. Coding Value? 5 General Info Value? 5 Chapter 14: Electronic Forms in MOSS 2007 Oops, back to basics. Almost no coding here. But as far as "basics" chapters go, this is one of the better ones and may give you some ideas (but no code to get them done). Coding Value? 0 General Info Value? 4 Chapter 15: Building Workflow Solutions This pretty decent coverage of workflows! And it's one of the larger chapters at 70 pages or so. Coding Value? 5 General Info Value? 5 Chapter 16: Business Intelligence and SharePoint Server 2007 Another overview chapter. The only code here is straight from an MSDN article. If you have not looked into Excel services, there is some good info here on what can and cannot be done with Excel. Coding Value? 0 General Info Value? 3 Appendix A: Using the Microsoft Visual Studio 2005 Extension One of the more useful chapters in the book! You may want to start with this one. If you've gotten this far... Yes, I would by the book just for the chapters written by John Holiday (11, 12, 13, 14, 15) and the last half of chapter 2.

WSS401

Links for students of Max's WSS-401 class. MSDN Webcast: Microsoft ASP.NET AJAX 1.0 and SharePoint (Level 300) Event ID: 1032340725 http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032340725&EventCategory=3&culture=en-US&CountryCode=US A good Forms Based Authentication set of web parts:http://weblogs.asp.net/paulballard/archive/2007/05/01/sharepoint-moss-2007-forms-based-authentication-login-registration-web-part.aspx Minimal master pages http://www.heathersolomon.com/blog/articles/BaseMasterPages.aspx CSS Chart http://www.heathersolomon.com/content/sp07cssreference.htm SharePoint Visual Studio Project and Deployment Templates http://blogs.msdn.com/gderun/archive/2008/01/11/sharepoint-visual-studio-project-and-deployment-templates.aspx Setting up Kerberos for SharePoint http://blogs.msdn.com/martinkearn/archive/2007/04/23/configuring-kerberos-for-sharepoint-2007-part-1-base-configuration-for-sharepoint.aspx U2U CAML Query Builder for SharePoint 2003 and SharePoint 2007 http://www.u2u.net/res/Tools/CamlQueryBuilder.aspx Sample application to extract XML definitions of Lists, Columns and Content Types (not fancy, just a quick example. you are on your own with this one!) http://www.microsmithinc.com/Blogstuff/SharePointXmlGetter.zip Microsoft's workflow samples: http://www.microsoft.com/downloads/details.aspx?FamilyId=2611A6FF-FD2D-4F5B-A672-C002F1C09CCD&displaylang=en WF Tutorials and Samples http://www.microsoft.com/downloads/details.aspx?familyid=C1863E23-482C-4B79-9F3C-417A92D8D1D9&displaylang=en 10 hours of hands-on labs for WF http://www.microsoft.com/downloads/details.aspx?familyid=2E575633-E357-4EE7-AAFF-34138F00E830&displaylang=en WSS SDK http://www.microsoft.com/downloads/details.aspx?familyid=05E0DD12-8394-402B-8936-A07FE8AFAFFD&displaylang=en

12/21/2007

Renaming a Server Breaks SQL Server!

If you've not run across this one yet, you will one of these days. It's been around for a long time and is pretty easy to fix by rerunning Setup. How does your server get renamed?
  • The obvious answer: you did it! You renamed the server.
  • No so obvious: you installed SharePoint on a test server using local accounts and then decided to add Active Directory or join the server to a domain so you can play with all of the email features. (typical error code in the Event viewer is 17204)

Just Re-run Setup...

To fix it just rerun SQL Setup and let it repair the installation. But what about Microsoft Sql Server Embedded Edition (SSEE), the free, default and well hidden edition of SQL server that does not come with a setup program? Several Knowledgebase articles describe how to do this with a command line tool, but they never tell you enough. Here's one: http://support.microsoft.com/kb/929665 They show you this line: Msiexec CALLERID=OCSetup.exe REINSTALL=ALL REINSTALLMODE=omus /qn REBOOT=ReallySupress /l*v But they don't tell you the MSI_File_Name and it leaves out one switch. Here's one that worked for me: Msiexec /i "C:\Program Files\MSECache\wssv3\database\SSEE_10.msi" CALLERID=OCSetup.exe REINSTALL=ALL REINSTALLMODE=omus /qn REBOOT=ReallySupress /l*v c:\log.txt Note: If you are doing this to fix a SharePoint problem remember to run the SharePoint Products and Technologies Configuration Wizard to let it fix the internal database names. Some notes on SSEE:

  • Does not include any management tools, but you can connect to it using SQL Server Studio (regular or Express) with this "server name": \\.\pipe\mssql$microsoft##ssee\sql\query
  • It lives here: C:\WINDOWS\SYSMSI
  • The databases are here by default: C:\WINDOWS\SYSMSI\SSEE\MSSQL.2005\MSSQL\Data

12/08/2007

Which Conference or Event to Attend in 2008?

Too many choices! So little time and money... DevConnections? April 20-23 Orlando, FL 5 shows in 1! SharePoint Connections, ASP.Net Connections, SQL Server Connections, Architect Connections, Visual Studio & .Net Connections. http://www.devconnections.com/ Microsoft Office System developer conference? Feb 10-13 2008 San Jose, California https://microsoft.crgevents.com/ODC2008/ SharePoint Conference 2008 March 2-6 Seattle, Washington http://mssharepointconference.com Can't decide between Office Developer Conference 2008 vs. SharePoint Conference 2008? Check out this SharePoint Product Group blog SharePoint Information Worker Conference 2008 Feb 2-6 Nashville, TN http://sharepointsolutions.com/sharepoint-conferences/sharepoint-conference.html TechEd 2008 Orlando, FL Oh No! There are two of them this year! Tech·Ed U.S. 2008 Developers June 3-6, 2008 Tech·Ed U.S. IT Professionals June 10-13, 2008 http://www.microsoft.com/events/teched2007/default.mspx Microsoft Office Visio Conference 2008 Feburary 5-6 Redmond, WA http://www.msvisioconference.com/

12/05/2007

Replacement HTML Editor for SharePoint

You are probably aware that the rich text editor supplied with SharePoint does not work with non-Internet Explorer browsers and that there is a free replacement editor from www.telerik.com. If you need more features, then take a look at their "Full Featured" version. To see how it compares to the built-in editor and to see the differences between the free and paid versions see: http://www.telerik.com/documents/RadEditorMOSS_Feature_Comparison.pdf The following comments are about the free version... Positives:
  • Free! (The "lite" version anyway)
  • Works with most browsers, including FireFox, Netscape and with some limitations, Safari.
  • Has a search box, the Image Manager, to find pictures in SharePoint libraries. (this alone might be worth the upgrade) (only works with MOSS, not WSS)
  • Has a HyperLinks Properties panel with a Browse button to browse to any content in your site collection.
  • Includes a "Format Stripper" button to remove various formatting information included with Copy and Paste operations including Font, Word Formatting, All HTML and CSS.

Negatives:

  • Not out of the box SharePoint, and could be impacted by future SharePoint service packs and versions.
  • Does not work in SharePoint Basic Pages - these still include the built-in editor.
  • Does not work with "HTML Fields" and the Content Editor Web Part.
  • The default use will show the RadEditor in non-IE browsers and the built-in Editor in IE browsers. You can enable a second feature to display the RadEditor in both types of browsers.
  • Something else to add to your disaster recovery planning documention. (You do have this don't you?) You will have to reinstall after rebuilding a server.
  • It has to be turned on at the site level. So once installed it will have to be turned on for every site and sub-site. Their FAQ has the steps change the Feature to the Site Collection (web) level.
Are you using this editor? Please let me know how well it has worked for you and any issues, and fixes, you have found.

12/01/2007

Exploring SharePoint CMP Export Files

Exploring SharePoint CMP Export Files And how to restore a single file from the export!

The missing example project has been found! (see below)


This article started as a quick exploration of SharePoint site export files. Along the way I found a handy way to recover a single file from a CMP and even wrote a utility to both explore these files and to extract individual files from these CMPs. There are multiple strategies to back up SharePoint, SharePoint’s native backup (Central Admin and stsadm.exe backup), stsadm.exe's Site Export, SQL Server backups and third party products. As you are probably aware, there is no way to recover a single file from a SQL Server backup and Microsoft did not supply a means to extract a single file from a native SharePoint backup. One of the features of the third party tools is the ability to recover a single file, library or list item from their backup. Well it turns out that there is at least a reasonable easy to extract single files from SharePoint site exports.

The SharePoint CMP Export File
The SharePoint CMP backup file is a CAB file in disguise. Rename the .CMP file to .CAB and you can then explore the contents using Windows Explorer or extract it with extrac32.exe (C:\Windows\System32). Between the XML files and the DAT files SharePoint has recorded everything needed to recreate the site. Just an odd note... all of the files inside of the CAB file are date stamped "9/18/2002"!

Here is a sample export:

stsadm -o export -url http://yourservername/a_site -filename c:\a_sitebackup


The files in the CMP file include:

File
Contents
Notes
Manifest.xml The list of “everything” in the export
Lists, Libraries, ASPX files, Library files, etc
ExportSettings.xml
   
Requirements.xml
A list of “things” needed by the target server to support the exported site.
Language, site template, web parts and features
RootObjectMap.xml
The URL the site was backup up from
Example: Url="/SiteDirectory/walkthrough"
SystemData.xml
Top level details of the backup
SharePoint and database version numbers, manifest file name…
UserGroup.xml
Site users and groups
 
ViewFormsList.xml
A list of views and forms
(seems to be redundant as the same data is in Manifest.xml)
????????.dat
One DAT file for each file in the export
ASPX, Master, plus every file in document libraries and list attachments. Just rename and you have the original file

Restoring a Single File

(this is the manual approach… see below for a program to do it for you…) All of the files, including your library documents and every ASPX page in the site, are stored in the CMP file as sequentially named files starting with 00000001.dat. Each of these files is documented in the Manifest.xml file in their own SPObject node.

To find and extract a single file:
  1. Extract the Manifest.xml file:
    extrac32.exe backupfile.cmp /L outputPath manifest.xml /E /Y
    I.e. extrac32.exe C:\MySiteBackup.cmp /L C:\Temp manifest.xml /E /Y
  2. Open the Manifest file in Notepad of some other editor and then search for the filename. Keep searching until you find the element that includes the filename. In that element you will then find in the FileValue attribute the name of the file stored in the CMP file.
    Here’s what you might find:

    <File Url="Shared Documents/Walkthrough Presentation.pptx" Id="b089eb84-4bbd-4197-b14b-cdb9366f7b1c" ParentWebId="f41ba9ed-2298-45c4-a472-c166946776bc" ParentWebUrl="/SiteDirectory/walkthrough" Name="Walkthrough Presentation.pptx" ListItemIntId="1" ListId="bd6ac39c-8516-4f13-89d6-220a4b61d3e2" ParentId="eb24be0f-d49f-4e84-8b18-f8158bf47c63" TimeCreated="2006-09-08T02:41:09" TimeLastModified="2006-09-08T02:41:09" Version="1.0" FileValue="00000037.dat" Author="15" ModifiedBy="15">
      <Properties>
        <Property Name="vti_title" Type="String" Access="ReadWrite" Value="Walkthrough Presentation" />
        <Property Name="xd_Signature" Type="Boolean" Access="ReadWrite" Value="false" />
        <Property Name="ContentTypeId" Type="LongText" Access="ReadWrite" Value="0x0101002C9F3418595D5642A69D915990334521" />
        <Property Name="vti_parserversion" Type="String" Access="ReadOnly" Value="12.0.0.4518" />
        <Property Name="Slides" Type="Integer" Access="ReadWrite" Value="3" />
        <Property Name="vti_filetype" Type="String" Access="ReadWrite" Value="pptx" />
      </Properties>
    </File>

  3. Extract the file:
    extrac32.exe C:\MySiteBackup.cmp /L C:\Temp 00000037.dat /E /Y
  4. Rename the file and you are done! (from 000000037.dat to “Walkthrough Presentation.pptx”)
  5. If you need the metadata (custom columns) associated with the document then explore the section of the XML.
Restoring a List Items
List items are not stored as files. The full text of a list item is recorded in the XML. Simply follow the first two steps above to extract the Manifest file and then search for the list name or some text from the item. Look for a element with a URL (DirName) that matches your list.

Here’s a sample:

<ListItem FileUrl="Lists/Announcements/1_.000" DocType="File"

ParentFolderId="e893aa18-01a4-4e11-994f-7f58829154b5"

Id="31d6d1cc-86eb-4822-aad9-9d22b068641c"

ParentWebId="f41ba9ed-2298-45c4-a472-c166946776bc"

ParentListId="675b5d94-79a4-41a0-9714-819647b7b48b" Name="1_.000"

DirName="SiteDirectory/walkthrough/Lists/Announcements" IntId="1"

DocId="d1ad54e5-c884-465d-b80c-fea560ea3a37" Version="1.0"

ContentTypeId="0x010400ECBBB05350418B428CBF8BDE561A874B"

Author="1073741823" ModifiedBy="1073741823"

TimeLastModified="2006-09-08T00:26:59" TimeCreated="2006-09-08T00:26:59"

ModerationStatus="Approved">

  <Fields>

<Field Name="Title" Value="Get Started with Windows SharePoint Services!"

FieldId="fa564e0f-0c70-4ab9-b863-0177e6ddd247" />

<Field Name="_ModerationComments"

FieldId="34ad21eb-75bd-4544-8c73-0e08330291fe" />

<Field Name="File_x0020_Type"

FieldId="39360f11-34cf-4356-9945-25c44e68dade" />

<Field Name="Body" Value=""&lt;div class="ExternalClass0F1CE1F788734CE3A8682DBFA3F34E5F">Microsoft Windows SharePoint Services helps you to be more effective by connecting people, information, and documents. For information on getting started, see Help.</div>" FieldId="7662cd2c-f069-4dba-9e35-082cf976e170" />

<Field Name="Expires" Value="09/08/2006 00:26:57"

FieldId="6a09e75b-8d17-4698-94a8-371eda1af1ac" />

  </Fields>
</ListItem>

 


My SharePoint Export Explorer (and file extractor) Program

To help understand the Manifest file I wrote a small .Net program to list the SPObject elements and a handful of attributes from each one.

The first step is to open the CAB file and extract the Manifest.xml file. As I have always been amazed at the features found in the .Net libraries, I figured I would find a CAB extractor library in the Framework. Turns out there was one in the one of the Betas, there is not there now. (There is a Zip library!) So I ended up using the CAB extractor found in Windows, extrac32.exe. (For details type extrac32 /? at the command prompt.) So within the app I used System.Diagnostics.Process to run extrac32 to extract the files. The Manifest.xml file is then loaded into an XmlDocument object, parsed into a DataTable and then displayed in a GridView. I'll post a link the EXE and source shortly...

(What happened to the sample EXE and code? It was lost when my laptop crashed! I'll recreate it one day...)

It’s been found!  See here…


.

Note to spammers!

Spammers, don't waste your time... all posts are moderated. If your comment includes unrelated links, is advertising, or just pure spam, it will never be seen.