John's profileJohn West Blogs about Si...PhotosBlogLists Tools Help

Blog


    11/26/2009

    Sitecore Cache Configuration Reference Published

    Sitecore published the Cache Configuration Reference:

    “This document describes caching features of the Sitecore Web Content Management System (CMS). Developers and administrators should read this document to optimize caching, which can improve solution performance, reduce server load, and increase system capacity.”

    I updated my post that links to the best Sitecore documentation to include a link to this new resource.

    11/11/2009

    How to Evaluate Sitecore as a Developer

    Like any Web Content Management System (WCM or CMS), the best way for a developer to evaluate Sitecore is to build a prototype using the product. The best way to learn Sitecore is to attend at least the Sitecore .NET Developer or Sitecore HTML Developer training (the latter focuses on XSL). If you choose HTML training, then you should know HTML, JavaScript, and CSS. If you choose .NET training, then you should also know XML, ASP.NET, C#, and Visual Studio. And it never hurts to know a little about Microsoft SQL Server. But first, schedule a live Web demo of the product with Sitecore.

    Do some research before attending training, working with the technology, or involving any information and system architects, users, business analysts, or other parties in the prototyping process. Spend as much time as you can afford reading about Sitecore. Check out the Sitecore Web site and the Sitecore Developer Network (SDN), especially the SDN forums. Manage your profile and sign up for newsletters on the Sitecore Portal. If you are a Sitecore partner, check out the Sitecore Partner Network (SPN).

    Before architecting a solution, I think that developers should read through at least these in approximately the following order:

    Further reading before installing Sitecore:

    • I wrote another post about installing a local instance of SQL Server, which is the most convenient option.
    • The Sitecore Installation guide, including system requirements. I would read a little about the .zip installation to learn more about the system components, which include a file system, an IIS ASP.NET Web site, and supporting relational databases.
    • The Release Notes, which address known issues.
    • Sitecore requires specific Internet Explorer Configuration.
    • If you use Windows XP and have already configured an IIS Web site, then see this page on SDN.

    For some reason, organizations often want to start by configuring the production servers. I would first focus on the development environments, then test environments, then production content management, and finally production content delivery.

    You can get the latest Sitecore setup executable from this page on the Sitecore Developer Network, and you can get the Starter Kit there as well. If you are a Sitecore partner, you can download the Nicam demo site from the Sitecore Partner Network. Customers can contact Sitecore for access to Nicam. The Starter Kit and Nicam are useful for demonstrations and (to some extent) education, but neither follows best practices, and neither should form any basis for production solutions. If you run into any trouble installing Sitecore, see the Installation Troubleshooting guide, or contact your regional Sitecore office.

    Use the cookbooks to implement what you’ve read:

    If you want to use XSL, see the Presentation Component XSL Reference.

    For information about Sitecore Application Programmer Interfaces (APIs), see:

    Most Sitecore developers really appreciate NET Reflector from RedGate.

     

    If the above topics don’t cover what you need, check additional resources listed in this post that contains links to the best documentation, common forum topics, and other resources. These should be particularly helpful:

    You might want to review various blogs about Sitecore. Lars Fløe Nielsen maintains this list of current blogs relevant to Sitecore.

    Partners and customers can access the Sitecore Support Portal at http://support.sitecore.net.

    10/21/2009

    Sitecore Guide to Reusing and Sharing Data Published

    Sitecore recently published a guide to Reusing and Sharing Data.

    “Sitecore developers should read this document to determine a strategy for reusing data on multiple pages of a Web site or sharing data to multiple managed Web sites and external applications.”

    I updated my post that links to the best Sitecore documentation.

    Sitecore 6.2 WebDAV Configuration Guide Published

    With the release of CMS 6.2 (the release notes describe new features), Sitecore published the WebDAV Configuration Guide.

    “This document provides a technical overview and configuration details for the Sitecore Web-based Distributed Authoring and Versioning (WebDAV) implementation.  CMS administrators, architects, and developers should read this document before implementing WebDAV featutres in a Sitecore solution.”

    I updated my post that links to the best Sitecore documentation.

    10/20/2009

    Sitecore Online Marketing Suite Cookbook Published

    Sitecore recently published the Online Marketing Suite Cookbook. I updated my post that links to the best Sitecore documentation.

    “The Online Marketing Suite Cookbook contains instructions for marketers and content authors working with Sitecore Analytics. This guide contains step by step instructions on the key tasks involved in setting up and configuring the Sitecore Online Marketing Suite on your Web site. The topics covered include creating profiles, goals, and campaigns, as well as content profiling, multivariate tests, and using the Sitecore reports to analyze your analytics data.”

    9/15/2009

    Use the Sitecore 6.1 Rules Engine to Control Item Names

    Update: Shared source project created: http://trac.sitecore.net/ItemNamingRules.

    With Sitecore CMS 6.1, you can use the rules engine to control item names. For example, you may want to enforce character limits in the names of items that correspond to URLs. For more information about the rules engine, see the the Rules Engine Cookbook on the Sitecore Developer Network. You may also want to read my previous post about the rules engine and conditional rendering.

    Sitecore supports at least five techniques to control item names:

    1. You can use use the InvalidItemNameChars, ItemNameValidation, and MaxItemNameLength settings in web.config to control all item names. See the comment above each setting in web.config for further details. The disadvantage of these settings in this context is that they apply to all items, when you might want rules only for the names of certain items. For example, you might want to allow spaces and other special characters in any item that doesn’t correspond to a URL, or have special naming rules for media.
    2. You can use events to intercept actions that name items. One advantage of events is that you can trap all types of user actions and API events that rename items with a single handler. One disadvantage of events in this context is that you specify handlers and parameters in web.config rather than through a user interface. Another disadvantage of events in this context is that it can become cumbersome to configure different rules for different branches of items in the content tree.
    3. You can use pipelines to intercept user actions that name items. One advantage of pipelines is that you can interact with the user. Some disadvantages of pipelines in this context are that multiple pipelines can rename and item, but only user actions invoke certain pipelines, and you often have to . Some API calls that name items do not invoke any pipeline.
    4. You can use validation, and provide different validation actions for each of the types of rules a name could violate (too long, invalid characters, etc.). The problem with validation in this context is that the user has to navigate to the item and take some actions; it might be nice to fully automate the solution.
    5. You can use the rules engine to control item names as described in this post. One advantage of the rules engine is a convenient user interface to define parameters, such as the items to which the naming logic applies.

    You can continue to use settings, events, pipelines, and validation to control item names. But with 6.1, you can use the rules engine as well.

    A rule consists of one or more conditions and one or more actions. When Sitecore evaluates a rule, if the conditions specified in that rule evaluate to true, then Sitecore invokes the actions specified in that rule.

    For the condition part of this rule, users might want to apply the rule to one or more specific items, to all items based on a data template, to an item and its descendants, to the descendants of an item, to items matching a query, or to some other collection of items. I assume that the default conditions that ship with the product meet the most common requirements. Two conditions that might be helpful when determining whether or not to rename an item: whether the item has layout details for the default device, and whether the item has layout details for any device:

    [See http://trac.sitecore.net/ItemNamingRules for code.]

    For instructions to insert the condition definition items under the /Sitecore/System/Settings/Rules/Common/Conditions item using the System/Rules/Condition data template, or for instructions to use either of these conditions in a rule, see the Rules Engine Cookbook. Some strings for cutting and pasting:

     

    Name: When the item has layout details for the default device” using the System/Rules/Condition data template

    Text: when the item has layout details for any device

    Type: Sitecore.Sharedsource.Rules.Conditions.HasLayoutDetailsForDefaultDevice, Assembly

     

    Name: When the item has layout details for any device

    Text: when the item has layout details for any device

    Type: Sitecore.Sharedsource.Rules.Conditions.HasLayoutDetailsForAnyDevice,assembly

     

    Regarding the action part of the rule, there would be numerous parameters to specify for a single action. The solution should not force the user to specify parameters they don’t use. But because actions are not aware of each other, the user might have to specify the same parameters to multiple actions. More importantly, the user has to understand the impact of ordering actions. For example, it doesn’t make sense to ensure a minimum name length before removing invalid characters.

    I thought about merging certain actions and hard-coding certain parameters, but I generally like a flexible approach. Then I started prototyping, and realized that the flexible approach was more work for both me and any user. So I merged some of the actions (the strong words indicate parameters):

    • Replace characters that do not match the regular expression MatchPattern with ReplaceWith, replace sequences of ReplaceWith with a single instance of ReplaceWith, and remove leading and trailing instances of ReplaceWith.
    • Ensure a minimum name length by appending characters from DefaultName.
    • Ensure that the name is unique and does not exceed MaxLength characters.
    • Lowercase.

    It’s honestly a coincidence that this simplification eliminates all of the duplicate parameters that I would otherwise have to pass to additional actions. I also sorted the actions so that the user interface displays them in the order in which the user should add them to the rule.

    I started out with a base class for actions that rename items:

    [See http://trac.sitecore.net/ItemNamingRules for code.]

    Then I created classes for each action:

    [See http://trac.sitecore.net/ItemNamingRules for code.]

    For instructions to insert the action definition items under the /Sitecore/System/Settings/Rules/Common/actions item using the System/Rules/Action data template, or for instructions to use any of these actions in a rule, see the Rules Engine Cookbook. Some strings for cutting and pasting:

     

    Name: Replace Invalid Characters in Item Name

    Text: replace characters in the item name that do not match the regular expression [MatchPattern,Text,,pattern] with [ReplaceWith,Text,,this character sequence]

    Type: Sitecore.Sharedsource.Rules.Actions.Naming.ReplaceInvalidCharacters, Assembly

     

    Name: Ensure Minimum Length of Item Name

    Text: ensure a minimum name length by appending characters from [DefaultName,Text,,index]

    Type: Sitecore.Sharedsource.Rules.Actions.Naming.EnsureMinimumLength, Assembly

     

    Name: Ensure Item Name is Unique

    Text: ensure item name is unique and does not exceed [MaxLength,int,,maximum length] characters

    Type: Sitecore.Sharedsource.Rules.Actions.Naming.EnsureUnique, Assembly

     

    Name: Lowercase Item Name

    Text: lowercase letters

    Type: Sitecore.Sharedsource.Rules.Actions.Naming.Lowercase, Assembly

     

    Finally, insert the the rule definition item under the /Sitecore/System/Settings/Rules/Item Saved/Rules item using the System/Rules/Rule data template. For instructions to insert a rule, see the Rules Engine Cookbook.

    Before entering any parameters, my rule looks like this:

    image

    And after entering parameters:

    image

    Now, when I save any item that has layout details for any device, whether I save that item through the UI or through an API call, Sitecore replaces invalid characters with underscores, merges sequences of underscores into a single underscore, trims underscores from the beginning and the end of the item name, appends to the item name to ensure at least seven characters, appends a timestamp to the item name if required to make it unique among its siblings, and ensures that the item name does not exceed 35 characters.

    Warning: Like almost any customization, this could have dangerous repercussions, especially if configured incorrectly (for example, by renaming any item in the wrong branch, or in the Core database). Additionally, I didn’t significantly test this before posting, and there are definitely still some issues to think about. For example, you probably don’t want to rename the home item, you don’t want these rules to apply to the __Standard values of data templates (even though they may contain layout details), etc. But enough people ask about this topic that I thought it was time to describe this approach. After some refinement, I will try to make this a shared source project.

    9/11/2009

    SDN Poll: Do You Know of Sitecore Solutions that Embed Renderings in Rich Text Editor Fields?

    With some customization, Sitecore CMS users can embed renderings in the content of Rich Text Editor (RTE) fields. For example, a user editing an RTE field can insert a snippet that represents a video rendering, and use the properties of that rendering to select a video and enter any other parameters much like they could do in the Developer Center. The customization uses ASP.NET APIs to process renderings in RTE fields while rendering pages.

    Instead of using this approach, if acceptable to the users, I would add a field to the data template to allow the user to select one or more videos, and configure renderings to always embedding any selected videos in the same places on the page. I realize that this alternative solution does not account for all cases. But the RTE approach never seemed like a good idea to me for at least two reasons:

    • While some degree of WYSIWYG editing is critical to any CMS, any such editor violates a core CMS principles by mixing content with presentation. WYSIWYG editors can reduce consistency, which reduces usability, affecting user satisfaction with the site and ultimately return traffic. A WYSIWYG that allows users to insert renderings into WYSIWYG content seems to further violate this principle.
    • I know that this is not an issue for simple renderings, I would assume that because the CMS must parse these controls late in the page lifecycle, renderings used in this way would not follow the standard ASP.NET page lifecycle.

    In Sitecore 6, the Design Pane of the Page Editor gives non-technical users point-and-click control of where renderings appear on the page. In 6.1, conditional rendering and parameters templates could further reduce the need for the RTE customization in some solutions.

    To get an idea of if, how, and why people use this feature, or what alternatives they use to avoid it, I created a poll on the Sitecore Developer Network:

    http://sdn.sitecore.net/SDN5/Forum/ShowPost.aspx?PostID=20973

    Please take the time to make a selection. Your feedback on this issue is important to me.

    Thanks & regards,

       -John

    9/1/2009

    Windows 7 Tips, Tricks, and Annoyances for Sitecore Developers

    After about a week of light use, I find myself relatively happy with Windows 7. Some of the changes are helpful, others have little impact, while few make me less productive. Not much of a post at the moment, but it's only been a week, and I've probably already forgotten the initial annoyances. I will try to update this page to help other developers make the switch.

    When installing, I intended to update my post about configuring a Sitecore developer workstation. But the installation was so much like Windows Vista or 2008 that this didn't seem to be necessary.

    Probably the most important thing that I noticed is that by default, IIS application pools don't run as NETWORK SERVICE. It appears that Windows creates a transitory user named after the application pool. But these users don't appear in the list of users, apparently making it impossible to apply NTFS permissions for these accounts. I am sure there is a way to set permissions, but I couldn't find it. My workaround is to change the owner of the application pool to NETWORK SERVICE, though I assume this defeats some kind of stability, reliability, or security advantage to the transitory users.

    Update: One of my Most Valuable Colleagues did some research on this subject, primarily starting from http://learn.iis.net/page.aspx/624/application-pool-identities/. Apparently Windows 2008 Service Pack 2 introduced the “Application Pool Identities” security feature, which uses the “Virtual Accounts” feature to allow you to configure unique application pool owners without actually managing any accounts. These users don’t appear in the UI, so if you want to set permissions for the user, you have to type something like "IIS AppPool\DefaultAppPool" into the security dialog, where what appears as the machine/domain doesn’t mean much to me, and what appears as the username is actually the name of the application pool. Update again: one potential advantage of application pool identities: it should be easier to determine the correct w3wp.exe process to attach in the Visual Studio debugger.

    I use the QuickLaunch toolbar extensively. This toolbar doesn't appear in Windows 7, so you have to create it yourself. No big deal there, but this toolbar had the handy "Show the Desktop" icon, which minimizes all windows so that you can see the icons on the desktop. It took me a while to find the equivalent feature in Windows 7, but it's really easy - just click the rectangle at the far-right corner of the task bar (or press Windows-D).

    Update: It is really surprising how slow and unreliable the “Show Desktop” feature has become in Windows 7. For me, as long as the hard disk is thrashing due to application activity, nothing minimizes. It makes me very nervous when my operating cannot reliably perform such a simple operation. Update again: The Show Desktop feature in Windows 7 is absolutely terrible. You click it, it ignores you, you ALT-TAB to an application, you start typing, and THEN it minimizes that application. And this is not even when the disk is thrashing or the icon is the spinning wheel. I have no explanation, but I really want one from Microsoft.

    Update: I just rebooted, and my “QuickLaunch” toolbar disappeared. I was able to get it back somehow, but it had lost my preferences. I am starting to seriously question whether Windows 7 is any more stable than early betas of Vista, or if it’s just a new UI for the broken bits. I click on things and they just don’t respond. I often have to do the same thing several times to actually get that thing done. It’s like the UI is not aware of the mouse clicking as long as the disk is thrashing (this is a brand-new, well-equipped machine). And the cursor is not even the spinning wheel when this occurs. Maybe this is another new security feature – if you can’t use the computer, you can’t compromise its security?

    Update: I couldn’t get Microsoft File Transfer manager working on Windows 7. There is probably some browser security setting that would allow it, but no information from Microsoft. Yes, I did try the MSI, and no, it didn’t help. So I’m back in Windows 2008 to download from MSDN. Sigh…

    Update: My Windows 7 x64 C:\Windows folder is already over 16GB. That seems ridiculous for a consumer operating system. The same directory on my Vista partition is about 12GB, Windows 2008 is about the same as Windows 7. XP is under 7GB.

    Other than the language bar issues described below (which I believe descend from XP), for me, the most annoying thing so far is the changes to VPN. It's as if the entire "Manage Network Connections" area of the Network control panel is simply gone, replaced with a dumbed-down interface that might make some sense to end-users, but provides little value for me. I cannot find a way to add an icon to connect to a VPN to my “QuickLaunch” toolbar (or the Startup folder, as some people do to connect to the VPN automatically when they log in). Instead of clicking twice as I had in the past (the VPN icon on the QuickLaunch toolbar, and then the Connect button), I have to click three times - first the network icon in the notification area, then the VPN entry to show the Connect button, and finally the Connect button. Not a big deal, but I don't understand the reason for this change.

    Update: I installed all updates available through Windows Update, and Windows did not prompt me to reboot. But the Shut Down button on the Start menu indicates that I must reboot to install additional updates. This seems like a bug. Update again: I used that button to reboot and there was no indication that Windows actually installed any updates. The button is back to normal now.

    I really don't understand the default taskbar. I use a large monitor and I have good eyesight, I use the same applications every day, and I don't have hundreds of icons to differentiate, despite the fact that most softwares try to add useless icons everywhere they can (Adobe Reader? Give me a break, who opens that using an icon? And why does it need a startup program? For their terrible reader malware, Adobe doesn’t get a link from my blog, even though I have to use it because other PDF readers can’t open some files). So I don't need huge icons. Here's my taskbar configuration:

    image

    image

    image

    image

    image

    This isn't specific to Windows 7, but Windows 7 maintains many of the annoyances that Microsoft introduced with Windows Vista, such as User Account Control (UAC). For example, I frequently right-click on a file and open it with an application such as Notepad++, only to find that even though I am an administrator who has used Windows since 1995, Microsoft still doesn't trust me not to fat-finger everything all the time. So I can’t save changes to the file (typically hosts), or extract the archive where I want to, etc. So I have to copy whatever's in Notepad++ to the Windows clipboard, close the application, find the icon for that application (on my "QuickLaunch" toolbar), run it as administrator, and paste in the text. I configure certain icons in the QuickLaunch toolbar (Visual Studio, Notepad++, DOS prompt, 7-Zip, etc.) to run as administrator so I don't have to remember to right-click them and run them as administrator. And I have to open Windows explorer and find the hosts file to drag into Notepad++ because for some reason the directory doesn’t appear in the Open File dialog. Maybe I could type in the path, but this is another puzzler that just leaves me scratching my head. In the words of (horeslips)  Nancy Kerrigan, “Why? Why?”

    I also disable UAC to the extent possible so I don’t have to tell Microsoft “Yes, I really did press that button” all the time. I have been sure the last several thousand times that I clicked that icon. Maybe this is dangerous, but I've been using computers for a very long time and have never experienced any malware. UAC couldn't prevent social engineering tactics anyway, and I think we can all agree that those are the primary attack vectors.

    Some other annoyances seem to go further back. For example, Windows 7 sometimes adds “ – Shortcut” to the name of shortcuts. How does this help anyone, and why isn’t the icon overlay enough? It just looks dirty.

    Update: I am in Denmark this week, using a Danish keyboard. Microsoft still hasn’t fixed any of the issues with the language bar. It’s as if they expect that there are two keyboards connected to the machine, and it keeps switching randomly between their layouts. It is incredibly frustrating to not be able to type on a computer without several mouse clicks to reset the keyboard layout. Microsoft, you need to accommodate the fact that I use different keyboards at *different* times, but I only use *one keyboard at a time*, regardless of the number of open applications. I would assume that is the most common use case. So when I get to the office I have to log in (not sure which keyboard layout to use when entering special characters in my password), reset the default keyboard, log out, and log back in. And do the same when I go home at night, to use the laptop keyboard. And the same the next morning…

    Update: I think we may need two versions of Windows, one for people who know how to use computers, and one for people that are learning how to use computers. Microsoft seems to be targeting the learners with Windows 7, where most of their customers are in the other group. I think this is the wrong direction, and I am concerned that the next server version of Windows will have to follow Windows 7.

    Well, feel free to comment about where I'm wrong, post suggestions to address my annoyances, or add your own suggestions for Sitecore developers transitioning to Windows 7.

    7/31/2009

    Sitecore Security Hardening Cookbook Published

    Sitecore today published the Security Hardening Cookbook for the Sitecore Web Content Management System. I updated my post that links to the best Sitecore documentation.

    7/7/2009

    Sitecore CMS 6.1 (Rendering) Parameters Templates

    With Sitecore CMS, you’ve always been able to pass a data source item and any number of additional parameters to control how each sublayout and rendering functions. Prior to version 6.1, you could enter parameters in the control properties dialog as key=value pairs. Sitecore parses XSL code and uses reflection to determine the parameters available for XSL and .NET presentation components. For example, if you add the IncludeDetails parameter to the default sample XSL rendering:

    <xsl:param name="IncludeDetails" />

    Then you will see this parameter in the control properties dialog, along with the default parameters:

    image

    Sitecore 6.1 introduces parameters templates to let you define specific user interfaces to enter parameters for each rendering and sublayout. The Presentation Components Reference manual describes parameter templates in detail, but here’s my quick summary of how to implement a parameters template:

    • Create a parameters template data template that inherits from the System/Layout/Rendering Parameters/Standard Rendering Parameters data template.
    • Add fields to the parameters template data template (for this example, a checkbox field named IncludeDetails).
    • In the rendering or sublayout definition item, in the Editor Options section, in the Parameters Template field, select the parameters template created previously.

    The fields you defined in the parameters template now appear in the new control properties dialog:

    image

    7/6/2009

    Prevent Sitecore Reviewers from Approving their Own Changes

    In some organizations, Sitecore CMS users function as both editors and reviewers in a single workflow, but should not be able to review and approve their own changes. There is no “out-of-the-box” Sitecore feature that meets this requirement, but it’s relatively easy to add one.

    Add a class such as the following to the Visual Studio project:

    namespace Sitecore.Sharedsource.Workflow.Actions
    {
      using System;

      public class ValidateApprover
      {
        public void Process(Sitecore.Workflows.Simple.WorkflowPipelineArgs args)
        {
          if (String.Compare(
            args.DataItem.Statistics.UpdatedBy,
            Sitecore.Context.User.Name,
            true) != 0)
          {
            return;
          }

          Sitecore.Web.UI.Sheer.SheerResponse.Alert(
            "You cannot approve your own changes.");
          args.AbortPipeline();
        }
      }
    }

    In the Content Editor, under the Approve command under the Review state of the workflow, insert an item named ValidateApprover using the System/Workflow/Action data template. In the Data section, in the Type string field, enter the type signature:

    Sitecore.Sharedsource.Workflow.Actions.ValidateApprover, Assembly

    I added this class to the Sitecore Shared Source Library project and updated the corresponding documentation.

    6/30/2009

    Sitecore CMS 6.1 and OMS 1 Documentation

    In addition to releasing Sitecore Content Management System (CMS) 6.1 and Online Marketing Suite (OMS) 1, Sitecore today published new and updated documentation for both products. I updated my post that provides links to the best Sitecore documentation. I think the most significant changes include:

    Most other documents contain minor updates and corrections. As always, send corrections and suggestions to the documentation team using the email address listed in the footer of every page on the Sitecore Developer Network (SDN).

    6/13/2009

    Sitecore 6.1 Rules Engine and Conditional Rendering

    You’ve always been able to use code and configuration to control Sitecore behavior. Sitecore CMS 6.1, scheduled for release at the end of this June, 2009, includes a rules engine, allowing you to control Sitecore behavior through the browser-based user interface.

    The Sitecore rules engine supports the Online Marketing Suite (OMS), but also provides features such as conditional rendering. Conditional rendering allows you to define actions to invoke to control properties of each rendering dynamically bound to the page. You can use the rules engine to define other types of rules through the user interface, such as to control insert options, or to invoke specific operations after events on specific items, such as save or delete .

    The rules engine involves three primary concepts: conditions, actions, and rules. Like most concepts in Sitecore, each of these involves a definition item containing metadata.

    A condition definition item references a .NET class that contains a condition to evaluate, such as to determine whether an item is associated with a specific data template. Conditions define parameters, such as to allow the user to specify the data template. Sitecore provides a number of default conditions that you can use, such as checking whether an item is on the descendant-or-self axis of another item, or whether a specific field of an item contains a specific value. Of course you can implement custom conditions.

    An action definition item references a .NET class that contains an action to implement, such as to set the data source of a rendering. Actions define parameters, such as to allow the user to select the that data source. Sitecore provides a number of actions that you can use, such as hiding a rendering or adding a template to insert options. Of course you can easily implement custom actions.

    A rule definition item brings together some number of rules and actions, such as if the context item is on the ancestor-or-self axis of another item, then do not invoke a rendering. You have to define rules before you can use them. You can enter multiple conditions in a rule definition item (separated by “and” or “or”), , and you can select multiple actions to invoke when those conditions evaluate to True.

    The rules engine interface looks a lot like the Microsoft Outlook wizard for creating a rule, such as to move messages matching some criteria from one folder to another. You choose the conditions to evaluate and the actions that you want to invoke, and then enter parameters for both.

    You can see how Sitecore uses the rules engine internally by investigating the Rule field (a new data template field type in Sitecore CMS 6.1) in the Data section of the rule definition items beneath the /Sitecore/System/Settings/Rules item. For example, the /Sitecore/System/Settings/Rules/Insert Options/Rules/Conditional Renderings Conditions item defines that, when determining effective insert options for an item, if the selected item is a child of the /Sitecore/System/Settings/Rules/Conditional Renderings/Conditions item and is associated with the Common/Folder data template, then effective insert options should include the System/Rules/Condition data template:

    image

    In the first field of this user interface, you click conditions to add to the list of conditions to evaluate to determine whether to invoke the action(s). In the second field, you can select actions to invoke if those conditions evaluate to True. In the third field, clicking on any instance of the word “where” reverses the condition to “except where” – Sitecore applies the action when the condition is not true instead of when the condition is true. Clicking on the word “Conditions” allows you to select a parent item other than the /Sitecore/System/Settings/Rules/Insert Options/Rules/Conditional Renderings Conditions item (parameter of the condition and the action). Clicking on Folder or Condition allows you to select a data template other than Common/Folder or System/Rules/Condition (a parameter of the condition).

    Imagine a site in that consists of the home item (/sitecore/content/home) and its two children named A and B. All three of these items are currently associated with a single data template, and all use the layout details defined in the standard values of that data template. For the B item and all of its descendants, you don’t want to activate a rendering specified in layout details of the standard values of the data template.

    You could hard-code this logic in the rendering, or create a new data template inheriting from the existing data template, override standard values in the new data template, and change the data template associated with all of the items in the B branch to this new template. Or you could use conditional rendering features of the rules engine.

    To use the rules engine for this purpose, insert a conditional rendering rule definition item, and then edit the rule. The rule is blank by default:

    image

    The example rule applies to the B item and its descendants, so click “where item is a subitem of a specific item” condition to add that condition to the rule:

    image

    You could click the word “where” to reverse the condition to “except where”. The user interface displays the word “specific” is red to indicate that you need to enter a parameter value. Click the word “specific” to select an item to define that parameter (the B item):

    image

    The UI refreshes to show that the parameter definition. Now select the “hide rendering” rule to invoke that rule when the condition is true:

    image

    Actions can have parameters too, but this one doesn’t. This rule says that, before invoking any rendering associated with this conditional rendering rule, if the context item is B or a descendant of B, then don’t invoke that rendering.

    To apply the conditional rendering rule to all items associated with the data template, in the standard values for the data template, in layout details, in control properties for the rendering, select the conditional rendering rule:

    image 

    You can also configure global conditional rendering rules, that apply to all renderings, but too many of these could get expensive. The default global conditional rendering rule applies multivariate tests if multivariate tests are enabled, applying multivariate tests to all renderings for which the user has chosen to apply a multivariate tests. Multivariate tests basically vary the data source of the rendering using a .NET class to implement some randomization or other data source management strategy, which is really a form of conditional rendering.

    With the release of Sitecore CMS 6.1 and OMS 1, Sitecore will release documentation providing providing further details about the rules engine and conditional rendering.

    Update 30.June.2009: Sitecore today published the Rules Engine Cookbook, which also covers conditional rendering.

    6/10/2009

    Sitecore 6.1, the Page Editor, Edit Frames, and the Field Editor

    With all of the hype about the release of the Sitecore Online Marketing Suite (OMS) at the end of this June 2009, it’s important to remember that OMS depends on Sitecore CMS 6.1. This CMS release includes several useful new features:

    • Edit frames (described in this post).
    • The field editor (described in this post).
    • The rules engine (for features such as conditional rendering).
    • Parameters templates (for defining user interfaces to apply rendering parameters in layout details).
    • The Remember Me checkbox on the CMS login screen.
    • A reporting UI framework with some canned reports.
    • A variety of minor enhancements.

    This post describes two of these features that work well together: edit frames and the field editor.

    Sitecore 6.0 replaced WebEdit with the Page Editor. The Page Editor replaced content markers (green circles activating the Content Editor and context menus) with inline editing features that allow the user to edit directly in the page. It would not be possible for Sitecore to provide inline editing user interface components for every type of field. How would Sitecore know what user interface would make sense to change the value of a checkbox while inline editing on your Web site? What about your custom field types? So in the 6.0 Page Editor, you had to show the fields to edit certain types of data, or develop controls to let the user update those fields.

    Sitecore 6.1 introduces edit frames, which let you add menus of UI commands when inline editing in the Page Editor. 6.1 also introduces the field editor, which lets you edit fields using controls similar to those used in the Content Editor, but with a much more lightweight UI. You can use edit frames and the field editor to provide simplified editing for data template field types that don’t support inline editing.

    An edit frame creates something like an HTML <div> element around the enclosed components when the user is editing inline in the Page Editor. For example, I added a checkbox field named Boolean to the sample item data template and the following to the sample XSL rendering (of course you can do the same in .NET):

    <br />
    <br />
    <sc:editFrame>
      The condition is <xsl:value-of select="sc:fld('boolean',.)='1'" />
    </sc:editFrame>

    The result:

    image

    If the user hovers over anything in this <div>, the browser indicates the content enclosed in the <div>, and adds a control above the <div>:

    image

    If the user clicks the arrow in the control, the browser displays an edit frame menu, allowing the user to choose from Sitecore UI commands configured by an administrator:

    image

    Sitecore provides two default edit frame menu commands that you can use, and you can write your own. The Insert New edit frame menu command activates a user interface that allows the user to insert an item using the insert options defined for context item:

    image

    If the user creates an item, the Page Editor refreshes to that item:

    image

    The Edit Item edit frame menu command activates the field editor, and you can specify which fields to include. I specified my field named Boolean:

    image

    Just like after closing the Rich Text Editor, I have to save after changing any field in the field editor. Then:

    image

    The edit frame can contain any amount of markup, including inline editing controls for any number of fields, plus whatever other markup you enclose within the <sc:editFrame> element. You can have multiple edit frames on a page, each with different edit frame menu commands. You can implement your own edit frame menu commands, and of course use security to control access to edit frame commands.

    I was surprised at how easy it was to develop an edit frame menu command to list all fields in the item that don’t provide inline editing controls, excluding fields defined in the standard template.

    Sitecore will release this example as shared source when it releases Sitecore CMS 6.1. At that time, the Client Configuration Cookbook will describe edit frames and the field editor in more detail than this post.

    Update 30.June.2009: Sitecore today published the updated Client Configuration Cookbook describing edit frames and the field editor.

    6/1/2009

    Configuring a Sitecore Workstation Part 9: Issues I Still Have with Windows

    This post is the last in a series about Configuring a Sitecore Workstation. Previous post: Turn the System Over.

    I still have a few outstanding issues with Windows (or Microsoft maybe):

    • Windows sometimes loses local user profiles. It doesn’t lose the file systems, it just creates a new profile when the user logs in; browser bookmarks, quicklaunch icons, and almost all other settings are gone. I think this may be a sign that it’s time to rebuild Windows due to rot. Speaking of Windows rot, I think it’s best to rebuild a machine from scratch approximately every six months, at most once per year.
    • There’s an option in the Mouse control panel that causes the cursor to move to the default button when a new UI opens. It would be nice if there was an option to move the cursor back to where it was before the dialog opened (think about detaching multiple databases in SQL Server Management Studio). It would be even better if it had the intelligence to move the cursor to where the user is actually most likely to click in common dialogs including those in common applications.
    • Microsoft Live Messenger kept restarting itself, and configuring itself to restart when I log in, so I had to uninstall it.
    • There still seems to be a lot of software unavailable for 64-bit platforms and/or Windows 2008. There are hacks for some of it (such as Zune), but not others (for example, I seem to have to run a 32-bit browser to use Adobe Flash). It’s not clear to me why huge software companies like Adobe are having trouble with this transition.
    • Zune software is not available for all Windows editions, especially 64-bit. Zune is a Microsoft product and important enough to me that this deserves special mention. Ridiculous.
    • I might as well complain about Word too. Insert Cross-reference is one of the few Word features that I actually use. This dialog can show hundreds or even thousands of headings. Why doesn’t this dialog include a search feature? Why can’t I dock this dialog? Why do I have to resize this dialog from 426x338 every time I open it, when my monitor is 1920x1200? Why do I have to select the Heading Reference type every time I open this dialog?

    Configuring a Sitecore Workstation Part 8: Turn the System Over

    This post is part of a series about Configuring a Sitecore Workstation. Previous post: Configure a User Account.

    When turning a system over to a user:

    • Provide the bookkeeping department with a photocopy of the bottom of the machine with the owner’s username, the date, and the hardware order number written on it.
    • Ensure the time zone is set correctly for the user.
    • If time permits, defragment and check the hard drive for errors.
    • Eject any optical disk.
    • If the user has an Outlook archive, move it to their external hard drive, and add that archive file to Outlook. Otherwise, create an archive on the external hard drive.
    • Discuss spam subject headers and the Outlook accept/reject buttons with the user.
    • I tell the user they may need assistance installing the Outlook CRM client (avoid if possible), PDF writing software, phone software, configure gotomeeting with their account details, etc.
    • I honestly warn the user and ask them not to install anything, and even show Internet Explorer add-ins and AutoRuns to some of them.
    • I ask the user to install Microsoft updates after a few weeks unless they are informed not to, but to be careful to let the machine reboot completely whenever installing updates.
    • I warn the user to contact me if Vista decides it doesn’t like their license key, or if they have any issues with the system.

    At your discretion, on to the last post in the series: Issues I Still Have with Windows.

    Configuring a Sitecore Workstation Part 7: Configure a User Account

    This post is part of a series about Configuring a Sitecore Workstation. Previous post: Image the System

    Configure each user account as follows:

    • Where relevant, set the local username to the domain username, and the password to the domain password.
    • The password never expires.
    • Add the user to the Administrators and Remote Desktop Users roles.
    • Disable the Windows Welcome Center and the sidebar.
    • Select a screen saver and require a password on both resuming from the screen saver and waking from sleep or hibernate.
    • Show extensions for known file types.
    • Configure power settings such that the power button turns the machine off, the sleep button hibernates, and closing the lid does nothing.
    • ***JW: Create the VPN connection, configure Outlook, and confirm CRM access (not for administrators).***
    • ***JW: attach Outlook archive file, if any.***
    • On Windows Vista, Windows 2008, and presumably Windows 7, disable User Account Control.
    • For Vista, select Window Color and Appearance, and then select Windows Aero.
    • Disable the Language bar, the Windows Search Deskbar, and other useless features.
    • Configure Windows Taskbar and Start Menu Properties to show the quick launch toolbar and expand all menus.
    • Delete unnecessary desktop and Quick Launch toolbar icons.
    • Select the user’s time zone.
    • Check Autoruns, Internet Explorer add-ins, and services once more (see a previous post in this series, Configure Applications).
    • Empty the recycle bin and perform other cleanup operations as described in the previous post in this series, ***

    To configure Internet Explorer:

    • Add all local Web sites to the Trusted Sites zone in Internet Explorer.
    • Delete all browser bookmarks and bookmark folders.
    • Disable suggested sites.
    • Choose custom settings.
    • Download updates.
    • Disable accelerators.
    • Enable the SmartScreen (Phishing) filter.
    • Disable add-ins and toolbars, show small icons, and otherwise maximize screen space without hiding the status bar.
    • ***TODO: Protected mode? Tabs? Bookmarks? Trusted domains?***
    • Apply everything from the summary at http://sdn5.sitecore.net/sdn5/reference/sitecore%206/ie%20configuration%20reference.aspx. Specifically:
      • Install Adobe Flash (http://get.adobe.com/flashplayer/).
      • Install Windows Web Folders or the Windows Desktop Experience.
      • Add any CMS instances to Trusted Sites.
        • ***Sitecore specifics***
      • In regedit:
        • Create 32-bit DWORD HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main\SessionMerging with value 0.
        • Create 32-bit DWORDs HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Internet Settings\MaxConnectionsPer1_0Server and MaxConnectionsPerServer with decimal values of 10.
      • Configure Trusted Sites:
        • Allow script-initiated windows without size or position constraints.
        • Allow websites to open windows without address or status bars.
        • Disable the pop-up blocker.
        • Disable the SmartScreen filter.
        • Enable programmatic clipboard access.
        • Enable launching programs and files in an iframe.
      • On the General tab:
        • Open popups in new windows.
        • Clear browser cache when Internet Explorer starts.
        • Delete browsing history on exit.
      • On the Advanced tab:
        • Enable script debugging (for developers).
        • Display a notification about every script error (for developers).
        • Disable reuse of windows for launching shortcuts.
        • Disable friendly HTTP error messages.
        • Empty temporary Internet files folder when the browser is closed.

    If time permits, defragment and check the hard drive for errors.

    I configure the following on my own systems:

    • Show notification icons and activity animation for all network connections.
    • Don’t hide inactive notification icons.
    • Select the maximum pointer speed under Motion on the Pointer Options tab in the Mouse control panel.
    • Firefox to prompt for a directory when downloading (Tools > Options > Main).
    • Configure Windows Taskbar and Start Menu Properties to show exclude Help and Support from Windows Start menu so I don’t click them by accident, and select small icons so I can fit more on menus.
    • ***JW: Additional task bar/start menu configuration***
    • After installing the touchpad driver, disable the touchpad (I use an external mouse if I can, or the pointing stick if I have to, so the touchpad just causes interference). I can also do without the mouse icon in the notification area.

    My Word configuration instructions may be a little detailed, but I write technical documentation for a living:

    • Copy templates to \Documents and Settings\<user>\Application Data\Microsoft\Templates or \Users\jw\AppData\Roaming\Microsoft\Templates.
    • Configure ALT-1 through ALT-4 to apply heading styles 1 through 4 (CTRL-ALT-SHFT-S, right-click, Modify, Format, Shortcut Key, Assign). I also use CTRL-T for typewriter and ALT-C for and ALT-T for fixed-width fonts (code sample and “teletype”).
    • Click the Home tab, then click Clipboard dialog launcher, and then click Options. Note that I am currently evaluating http://www.cybermatrix.com/cmdownloads.html). This is what I choose, but these settings seem to cause issues for applications including Windows Live Writer.

    image_thumb2

    • It might be more reliable to show these than to describe them. Click the Office button at the top left, and then click Word Options.
    • On the Popular tab, show the Developer tab and disable Full Screen Reading:

    image_thumb211[1]

  • On the Display tab, Show and print most hidden things, and update references whenever possible:

    image_thumb5

  • On the Proofing tab, enable grammar strict grammar checking:

    image_thumb18

  • Set AutoCorrect Options:

    image_thumb16

  • And the AutoFormat at As You Type tab:

    image_thumb141 

    • Still on the Proofing tab, configure Grammar checking:

    image_thumb211

    • Including Use of first person:

    image_thumb27

    • On the Advanced tab, don’t change Default paragraph style as I have done:

    image_thumb12

    • I no longer change the options for pasting with formatting, Instead, when I need to, I CTRL-SHFT-ALT-V to paste unformatted text.
    • Buy as many socks as possible of the exact same color and style. That way they’re much easier to match, and it doesn’t really matter when you lose one.
    • Speaking of Word, here are some keyboard shortcuts for features I actually use (and remember to click a tab to hide or show the ribbon):
    ALT Show keyboard shortcuts.
    CTRL-F Find.
    CTRL-H Replace.
    CTRL-A, F9 Update cross-references.
    CTRL-ALT-E Insert footnote.
    CTRL-SHFT-8 Show or hide formatting marks.
    CTRL-SHFT-ALT-S Show or hide styles.

     

    • Also, I typically do the following each time I open a document:
      • Show styles.
      • Hide the Properties pallet that Word usually opens.
      • When I insert the first cross-reference, I move and resize the dialog so that it fits below the styles I use without obscuring text. For Reference type, I select Heading. Then I leave this dialog open, so I don’t have to do the same again later. I leave each Word document open and save frequently so that I don’t have to reapply such preferences.
      • To find broken cross-references in the document, search for “Error! Reference source not found”.

    On to the next post in the series: Turn the System Over.

  • 5/31/2009

    Configuring a Sitecore Workstation Part 6: Image the System

    This post is part of a series about Configuring a Sitecore Workstation. Previous post: Configure Applications.

    Image the system so that in the future you could easily restore it to its current state.

    • To minimize imaging time, clean up the hard drive to the extent possible.
    • Connect an external USB hard drive.
    • Install Norton Ghost, but do not install the LiveUpdate component.
    • Remember to eject the disk.
    • Reboot.
    • Image the machine.
    • Uninstall Ghost.

    When restoring an image:

    • Remember to apply Microsoft updates afterwards.
    • Uninstall Ghost.
    • Eject the disk.

    After imaging or restoring an image, rename the machine to identify the organization and include the vendor’s hardware identifier.

    On to the next post in the series: Configure a User Account.

    Configuring a Sitecore Workstation Part 5: Configure Applications

    This post is part of a series about Configuring a Sitecore Workstation. Previous post: Configure Core Components.

    Install and configure applications:

    • Install Microsoft Office, but exclude Access, InfoPath, and Publisher:

    clip_image002

    • Remember to eject the CD.
    • Install Office service pack 2.
    • Check windows updates again.
    • Install laptop utilities.
    • Install the optical disk writer and any updates. Remember to eject the CD.
    • Install the optical disk player and any updates. Remember to eject the CD.
    • Install the SysInternals suite. I usually put these in a directory named SysInternals under the (32-bit) Program Files directory, and create icons for AutoRuns and ProcessExplorer on the All Programs menu.
    • At this point, it’s probably a time to disable some software. Check for any Windows services you can configure to not start at boot, disable any IE add-ons you do not use constantly, use SysInternals AutoRuns to disable, and autoruns to disable anything you can, and then reboot.
    • Install 7Zip.
    • Install Notepad++. Select the option to make Notepad++ the default HTML viewer:

    image

    • Install TortoiseSVN. I clear a few unimportant options:

    image

    • Install SQL Server 2008 Express. See my post Install SQL Server Express Edition for Use with Sitecore. Most importantly, ensure mixed mode authentication, and install Management Studio Express.
    • At this point it’s useful to configure the browser as described in another post in this series, Configure a User Account
    • Install gotomeeting, but do not enter credentials.
    • Install Skype, but disable features you don’t need, such as Internet Explorer integration. Note that updates to software such as skype may re-enable such features or add similar features with slightly different names in order to defeat your preference (disable using Internet Explorer Add-Ins).

    image

    • Configure Windows Update to download but not install.
    • Check Windows Update.
    • If necessary, on Vista, to change the Windows product key, Control Panel > System and Maintenance > System > Change product key.
    • ***additional software to install***
    • Disable any optional software that you can live without as described towards the end of this post.

    Finally you can install Sitecore:

    • Create the C:\inetpub\sitecore directory. Grant the ASPNET and/or NETWORK SERVICE account(s) full control of this directory and grant the IUSR account read, execute, and list folder contents. Copy the Sitecore license to this folder.
    • Use the Sitecore installer(s) to install to C:\inetpub\sitecore\sitename (see http://sdn.sitecore.net/Products/Sitecore%20V5/Sitecore%20CMS%206/Installation.aspx).
    • In each web.config:
      • Set LicenseFile to C:\inetpub\sitecore\license.xml.
      • Set interval to 00:10:00 and update the URL in the Sitecore.Tasks.UrlAgent agent.
      • Set the timeout attribute of the <sessionState> element to 60.
      • Ensure that the enabled attribute of <trace> element is false.
      • Delete /data/license.xml.

    Add each site to the trusted sites zone, and test each site by at least viewing the home page and logging in to the CMS.

    Before making copies of each of the subdirectories within c:\inetpub\sitecore to create a template to restore the site to its current state, start a command prompt (as administrator):

    • net stop w3svc
    • net stop “sql server (sqlexpress)”

    For a developer workstation, install the relevant components described in a previous post in this series, First Boot and Preparation. For Visual Studio 2008, disable:

    • C++
    • Visual Basic
    • Dotfuscator
    • Tools for redistributing
    • Unit testing
    • Crystal
    • ***screen shot***

    Remember to eject the disk. Install Visual Studio 2008 Service Pack 1. Then launch Visaul Studio:

    • Choose C# developer settings when prompted.
    • See the section on optimizing Visual Studio in the Sitecore Presentation Component Cookbook. Specifically, in Visual Studio, click the Tools menu, then click Options:
      • Select Environment, and then clear the Animate environment tools checkbox.

    image

      • Expand Environment, then click Startup, and then clear the value in the Start Page news channel field. Clear the Download content every checkbox. For At Startup drop-down, select Show empty environment.

    image

      • Expand Projects and Solutions, and then clear the Track Active Item in Solution Explorer checkbox. Do not clear the three folders as shown in this image.

    image

      • Select Text Edior, and then clear the Track Changes checkbox.

    image

      • Click HTML Designer, and then for Start pages in, select the Source View option.

    image

      • Click Windows Forms Designer, and under Toolbox, set AutoToolboxPopulate to False.

    image

      • If you use JetBrains ReSharper, then expand Text Editor, then select C#, and then clear the Navigation bar checkbox.

    image 

    • Right-click the shortcut you use to start Visual Studio. In the Target property, add the /nosplash command line option. For example:
      "C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" /nosplash.
    • Before closing Visual Studio, close Visual Studio user interface components that you won’t need open the next time Visual Studio starts.

    For myself:

    • Install Visio 2007.
    • Remember to eject the optical disk.
    • Install Visio 2007 service pack 2.
    • Check for Microsoft updates.
    • Create one or more .cmd files to open Windows file system Explorer windows on directories that I access frequently using. I typically create something like C:\bin\open.cmd (where C:\bin is in the path) with contents such as the following, and then use the search or run feature on the Windows menu to launch:

    @echo off

    explorer /root,g:\current\deliverables

    explorer /root,c:\inetpub\sitecore\site\data\logs

    exit

    I try not to install any of the following, and especially don’t let them run at startup:

    • Fingerprint reader drivers.
    • Any branding of Microsoft IM software. Disable Microsoft IE add-ins.
    • Anything from blackberry.
    • Gotomeeting. Especially disable Outlook integration.
    • Microsoft Groove and OneNote. Disable Microsoft IE add-ins.
    • Google updater.
    • I don’t install Itunes, QuickTime, Safari, or any other software from Apple, especially anything that updates itself.
    • Roxio update manager.
    • Vista Sidebar.
    • I have to use Skype for work, but I don’t recommend it. Disable Skype IE add-ins.

    Now that everything is installed, clean up the system by emptying the recycle bin and removing anything unnecessary including all but the latest restore points, C:\dell, c:\temp\*, and c:\install.log.

    ***TODO: how to delete restore points?***

    On to the next post in the series: Image the System.

    Configuring a Sitecore Workstation Part 4: Configure Core Components

    This post is part of a series about Configuring a Sitecore Workstation. Previous post: First Boot and Preparation.

    To install Windows:

    • If installing more than one version of Windows, install editions in order of release (Windows XP Pro, Windows 2003, Windows Vista Enterprise or Ultimate, Windows 2008 Standard, Windows 7). As of May 2009, 64-bit software presents various challenges. Do not install 64-bit Windows without sufficient reason.
    • Insert the Windows installation disk, reboot the machine, and press F12 or the equivalent keystroke to activate the boot menu.
    • Select the optical drive containing the installation disk and be prepared to press any key within a few seconds.
    • Delete any hard drive partitions. To remove stubborn partitions, reboot into the existing operating system installation and see the information about diskpart in an earlier post in this series, Fist Boot and Preparation.
    • Create an NTFS partition of at least 40GB for each Windows edition. For a single Windows edition, create one partition consuming the entire hard drive. Quick format when new partitions when prompted.
    • When creating an image to ghost onto other machines, name the machine after the model number and order number. Otherwise, name the machine after the company and vendor hardware identifier (Dell service tag).
    • When prompted, enter the administrative username and password.
    • Set the password for the account named Administrator, but disable the account.
    • Use the Windows license key that came with the system when possible.
    • Copy the i386 folder from the Windows XP CD to C:\ so that later you don’t need the XP disk to install IIS and other components.
    • Eject the CD.

    To configure core components:

    • Install chipset driver(s).
    • Install security software. For Microsoft Forefront, note that AMD64 applies to any 64-bit edition of Windows (excluding Itanium). First run MP_AMBITS.MSI. It doesn’t provide a UI, so when it appears to have finished whatever it does, run FCSSSA.MSI, which doesn’t provide a UI either. Reboot. Don’t use the notification area icon to apply updates – get them later through Windows update.
    • Install the video driver.
    • Install the wired LAN driver and test the network.
    • Activate Windows without registering.
    • Install the wireless LAN driver, but make Windows manage Wireless networks. I think you install the Dell driver, and then disable the service or startup programs. My experience is that the Intel PROSet wireless driver installers don’t let you exclude components, so you have to remove the components afterwards using the Change option in the Add and Remove Programs control panel:

    image 

    • Connect to a wireless network and disconnect the physical LAN cable to test the wireless network. Then restore the physical LAN cable.
    • If Windows doesn’t appear to be downloading updates, activate Windows Update manually. Check for new updates until nothing remains (except optional language packs on Windows Vista Ultimate).
    • When installing or configuring IE8, see another post in this series, Configure a User Account.

    To install IIS on Windows XP (or do something similar on Windows 2003, and be sure to enable ASP.NET in IIS Web Service Extensions), in Add/Remove Windows Components wizard in the Add or Remove Programs control panel, install World Wide Web Service. While you’re there, you might as well remove MSN Explorer, Outlook Express, and Windows Messenger. 

    To install IIS on Windows 2008 (or something similar on Windows 2008 or Windows 7):

    • IIS 6 WMI Compatibility.
    • IIS Metabase and IIS 6 configuration compatibility.
    • IIS Management Console.
      • ASP.NET.
      • Default Document.
      • HTTP Errors.
      • HTTP Redirection.
      • Static Content.
      • HTTP Logging.
      • HTTP Compression Dynamic.
      • Static Content Compression.

    Now that IIS is is installed, check for Windows updates, and make sure .NET 3.5 service pack 1 is installed.

    On to the next post in the series: Configure Applications.