<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>non-linear thinking</title>
	<atom:link href="http://blog.nonlinearcreations.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nonlinearcreations.com</link>
	<description>nonlinearites musing on all things digital</description>
	<lastBuildDate>Mon, 30 Apr 2012 20:34:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Sitecore Workflow Security: A Simple Walkthrough</title>
		<link>http://blog.nonlinearcreations.com/2012/04/a-simple-sitecore-workflow-security-implementation-walkthrough/</link>
		<comments>http://blog.nonlinearcreations.com/2012/04/a-simple-sitecore-workflow-security-implementation-walkthrough/#comments</comments>
		<pubDate>Thu, 26 Apr 2012 13:36:38 +0000</pubDate>
		<dc:creator>Grant Bartlett</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Sitecore]]></category>

		<guid isPermaLink="false">http://blog.nonlinearcreations.com/?p=1234</guid>
		<description><![CDATA[<p>Workflows are essential to the content author experience in Sitecore. Along with security, they determine when (and by whom) content can be edited as well as identify when it is ready to be published.</p> <p>Outlined below are steps to reproduce NLC&#8217;s typical workflow security implementation. It focuses on flexibility, ensuring content authors can access multiple workflows [...]]]></description>
			<content:encoded><![CDATA[<p>Workflows are essential to the content author experience in Sitecore. Along with security, they determine when (and by whom) content can be edited as well as identify when it is ready to be published.</p>
<p>Outlined below are steps to reproduce NLC&#8217;s typical workflow security implementation. It focuses on flexibility, ensuring content authors can access multiple workflows and workflow states through the addition of roles to their profile. This implementation may not meet your exact needs, but it is a good starting point to consider.</p>
<p>For the purpose of this post, I will not be focusing a content author&#8217;s security access on the underlying item going through workflow, but instead I will focus on the security implementation on the workflows and workflow states themselves. It is important to note however, that a content author must have both write access to the content item in workflow as well as the workflow state the item is currently in before they can edit an item.</p>
<p><strong>My Goal:</strong></p>
<p>As a content author who is a member of the <em>WFEditor</em> role (created for this walkthrough):</p>
<ol>
<li>Secure the workflows in the build so members of the <em>WFEditor</em> role can see the <em>Sample Workflow</em> only.</li>
<li>Secure the <em>Draft</em> state in the <em>Sample Workflow</em> to allow members of the <em>WFEditor</em> role to see items in that state.</li>
</ol>
<p><strong>Setup:</strong></p>
<p>In addition to creating the <em>WFEditor</em> role, I&#8217;ve created a new workflow named<em> Test Workflow</em> which I will use with the out-of-the-box Sitecore <em>Sample Workflow</em> to illustrate the changes to the content author experience as the security changes.</p>
<p><strong>Security Implementation:</strong></p>
<p>1. As a member of the <em>WFEditor</em> role and without changing any Sitecore security, you can see all workflow states and both workflows in the Workbox.</p>
<p><img class="alignnone size-full wp-image-1238" title="Workflow Security 1" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/Workflow-Security-1.jpg" alt="Workflow Security - Workbox" width="576" height="329" /></p>
<p>2. The first step is to secure each workflow so that the workflows do not appear in the in the Workbox by default. You do that by securing each workflow via the <em>sitecore\Everyone</em> role.</p>
<p><img class="alignnone size-full wp-image-1239" title="Workflow Security 2" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/Workflow-Security-2.jpg" alt="Workflow Security - Security Dialog" width="312" height="384" /></p>
<p>3. The result of this security change is that a <em>WFEditor</em> role is no longer able to see anything in the Workbox.</p>
<p><img class="alignnone size-full wp-image-1240" title="Workflow Security 3" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/Workflow-Security-3.jpg" alt="Workflow Security - Workbox" width="375" height="384" /></p>
<p>4. Now that the role can&#8217;t see any workflows in the Workbox, go ahead and apply read permissions on the<em> Sample Workflow</em> itself so that the <em>WFEditor</em> role can see the workflow in the Workbox. There is no need to further change the <em>Test Workflow</em> security settings since the main goal of removing the content author&#8217;s ability to see it listed in the Workbox has been accomplished.</p>
<p><img class="alignnone size-full wp-image-1241" title="Workflow Security 4" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/Workflow-Security-4.jpg" alt="Workflow Security - Security Dialog" width="315" height="384" /></p>
<p>5. You may have noticed in the screenshot above that the <em>Descendants</em> have been denied read permissions. The reason for this is simple. Our scenario requires that the <em>WFEditor</em> role must have read access to only the <em>Draft</em> state, and not the other states. Granting read access to the <em>Descendants</em> would mean members of the <em>WFEditor</em> role would have read access to all workflow states.</p>
<p>6. The <em>WFEditor</em> can now see the following in their Workbox.</p>
<p><img class="alignnone size-full wp-image-1242" title="Workflow Security 5" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/Workflow-Security-5.jpg" alt="Workflow Security - Workbox" width="377" height="384" /></p>
<p>7. The next step is to grant the appropriate security access on the <em>Draft</em> state.</p>
<p><img class="alignnone size-full wp-image-1243" title="Workflow Security 6" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/Workflow-Security-6.jpg" alt="Workflow Security - Security Dialog" width="310" height="384" /></p>
<p>8. As a result, the <em>WFEditor</em> role is able to see and use the<em> Sample Workflow Draft</em> state.</p>
<p><img class="alignnone size-full wp-image-1244" title="Workflow Security 7" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/Workflow-Security-7.jpg" alt="Workflow Security - Workbox" width="380" height="384" /></p>
<p><strong>Conclusion:</strong></p>
<p>With the above scenario, we&#8217;ve secured a single role to a single workflow state without using security settings to explicitly deny the role access to any of the other workflow states. This is important. It means that this process can be repeated for additional roles across multiple workflows and workflow states. In the end, adding any of these roles to a content author&#8217;s profile will grant them access to those workflow states, ensuring that there is never a situation where <em>deny</em> permissions in one role overrides the <em>grant</em> permissions of another.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nonlinearcreations.com/2012/04/a-simple-sitecore-workflow-security-implementation-walkthrough/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Personalization with Profiles and Pattern Cards in Sitecore DMS</title>
		<link>http://blog.nonlinearcreations.com/2012/04/personalization-with-profiles-and-pattern-cards-in-sitecore-dms/</link>
		<comments>http://blog.nonlinearcreations.com/2012/04/personalization-with-profiles-and-pattern-cards-in-sitecore-dms/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 18:42:52 +0000</pubDate>
		<dc:creator>Houda Rachidi</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Sitecore]]></category>
		<category><![CDATA[Strategy]]></category>

		<guid isPermaLink="false">http://blog.nonlinearcreations.com/?p=1163</guid>
		<description><![CDATA[<p><a href="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/patterncards11.jpg"><br /> </a>As part of the Customer Engagement Platform, Sitecore’s Digital Marketing System (DMS) presents various tools to enhance content personalization within a website.</p> <p>For this purpose, Sitecore enables the concept of Predictive Personalization. A visitor’s behavior in the website is analyzed and mapped to predefined patterns.  Following this mapping, personalization rules can be [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/patterncards11.jpg"><br />
</a>As part of the Customer Engagement Platform, Sitecore’s Digital Marketing System (DMS) presents various tools to enhance content personalization within a website.</p>
<p>For this purpose, Sitecore enables the concept of Predictive Personalization. A visitor’s behavior in the website is analyzed and mapped to predefined patterns.  Following this mapping, personalization rules can be applied such that targeted content is displayed.</p>
<p>This blog post assumes a basic knowledge of Sitecore and gives a brief guide of how to configure profile and pattern cards in Sitecore using a very simple case study (a complete investigation on Profiling and Predictive Personalization can be found <a href="http://www.larsdk.dk/2011/12/profiling-and-the-power-of-predictive-personalization-with-sitecore-digital-marketing-system/">here</a>). However, we recommend clients undertake a thorough planning exercise before they begin experimenting with personalization. This post talks about the how but a future post will tackle the bigger questions of the why and when.</p>
<h3></h3>
<h3>Pre-requisites</h3>
<p>Prior to configuring the profile and pattern cards, an in-depth study of the targeted customers and their relevant content should be completed to ensure accurate results. We can’t underscore this point enough; when you’re looking to introduce personalization to your site there is a temptation to dive in and start experimenting right away. However, as discussed <a href="../2012/02/marketing-ethics-and-website-personalization-5-ways-to-prevent-your-site-from-being-creepy/">in a previous post on this blog</a>, getting personalization wrong can have dire consequences for your site and your company’s reputation. Hence, among others, the following pieces of information should be available for content authors:<strong></strong></p>
<ul>
<li><strong>What are your organizational goals for your site?</strong> All personalization activities should always lead back to your site’s ultimate goals.</li>
<li><strong>Who is your target audience? </strong>Does your site cater to groups with different needs? (e.g. new vs. returning visitors, amateur vs. professional, consumer vs. business, etc.) What are the characteristics and needs of each group? What does each group hope to achieve on your site?</li>
<li><strong>What are the stages in your sales/engagement/donation cycle?</strong> What stages do users go through before purchasing/signing up/donating?</li>
<li><strong>Which content is most relevant to each group and/or each stage in the cycle?</strong> One of personalization’s greatest benefits is the ability to show each user content that is relevant to them. So it is essential to identify which pieces of content are most useful for each group at each stage.</li>
<li><strong>Which areas of the site do you plan to personalize?</strong> Keeping personalization focused in one or two key areas of the site simplifies the process of planning and maintenance and prevents the user from getting trapped in a <a href="http://www.ted.com/talks/eli_pariser_beware_online_filter_bubbles.html">filter bubble</a>.</li>
</ul>
<h3></h3>
<h3>Definitions</h3>
<p>Below is a definition of the key terms used in this blog post.</p>
<ul>
<li><strong>Profile:</strong> is a category used to define the criteria by which you want to track visitors’ behavior.</li>
<li><strong>Profile Key:</strong> an attribute related to a specific profile.</li>
<li><strong>Profile Cards:</strong> a preset collection of profile key values gathered in one card that can be applied to content.</li>
<li><strong>Profile Cards – Persona: </strong> a profile card associated with a persona with specific aspects of a potential website visitor.</li>
<li><strong>Pattern Cards:</strong> cards with pattern values that are used to match a visitor profile in real time with its closest pattern.</li>
</ul>
<h3></h3>
<h3>Personalization using Profile and Pattern Cards</h3>
<p>For this example, let’s consider a website that sells bikes.  Different categories of bikes will suit different personas. Ideally, when visitors browse our site, we would like to show them the bikes that match best their profile/needs. To achieve this we are going to follow these steps:</p>
<ul>
<li>Configure Profile &amp; Pattern Cards</li>
<li>Profile Content</li>
<li>Configure Pattern Personalization Rules</li>
</ul>
<h4></h4>
<h4>Configure Profile &amp; Pattern Cards</h4>
<p>First, we would like to have our potential customer cyclists categorized according to reasons for bicycle use. We are considering this list of reasons:</p>
<ul>
<li>Fitness</li>
<li>Leisure</li>
<li>Off-Road Cycling</li>
<li>Travel to school</li>
<li>Travel to work</li>
</ul>
<p>In Sitecore Marketing Center, we create Cyclists Categories profile under Profiles. Then create the Profile Keys following the list above.</p>
<p><img class="aligncenter size-full wp-image-1219" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/Profiles-e1335192283803.jpg" alt="" width="431" height="416" /></p>
<p>Next, we create profile cards based on persona that combine a preset collection of profile key values related to a specific persona, with information about the latter, e.g. age, education, interests, psychographics, etc. For example, a middle-aged commuter cyclist who uses the bike to travel to work has the following combination of profile keys: Fitness 2, Leisure 1, Off-road cycling 0, Travel to school 0, and Travel to work 5. A young mountain cyclist will have a different combination of profile keys: Fitness 2, Leisure 2, Off-road cycling 5, Travel to school 1, and Travel to work 0 (see figure below).   This is a good opportunity to validate the legwork you did prior to starting down the path to personalization. If you can’t prepare a good persona for your key audiences, odds are you haven’t done the requisite amount of strategic thinking.</p>
<p><img class="aligncenter size-large wp-image-1194" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/patterncards32-1024x656.jpg" alt="" width="595" height="381" /></p>
<p>We then create the pattern cards for the Cyclists Categories profile against which the visitor profile will be matched in real time to decide in what cyclist category the visitor fits in.</p>
<p><img class="aligncenter size-large wp-image-1204" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/patterncards-4-1024x458.jpg" alt="" width="595" height="266" /></p>
<p>Profile Cards and Pattern Cards might look similar, as they both have a radar diagram. However, they are different in terms of usage. Profile cards are used to assign attribute values to content items.  Pattern cards allow personalization rules engine to assess how closely a visitor matches a predefined mix of attribute values.  In the following two sections we demonstrate the usage of these two cards.</p>
<h4></h4>
<h4>Profile Content</h4>
<p>Profiling content refers to assigning one or more profile cards to a content item. In the following screenshot, we assign George, as a commuter cyclist, to a content item representing a commuter bike by clicking on the right side profile icon <img class="size-full wp-image-1182" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/iconprofile-e1335187155869.jpg" alt="" width="36" height="37" />.   It is possible to create a customized profile during this step, but it is always a good practice to use the preset profile cards for consistency reasons, especially in case multiple content authors from different backgrounds are controlling the content.</p>
<p style="text-align: center;"> <img class="size-large wp-image-1207 aligncenter" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/patterncards-5-1024x295.jpg" alt="" width="595" height="171" /></p>
<p>&nbsp;</p>
<h4>Configure Pattern Personalization Rules</h4>
<p>The last step in configuring profiles and patterns is setting rules to personalize the component. In Page Editor, we select the component we would like to personalize, and click on the personalize icon <img class="size-full wp-image-1183" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/iconrules-e1335187175288.jpg" alt="" width="27" height="29" />.  We then choose to add a new condition and select rule from <em>Profiles and Patterns</em> list. Finally, we specify the content we would like to show if the condition is verified.</p>
<p><img class="aligncenter size-full wp-image-1214" src="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/patterncards-6-e1335191297658.jpg" alt="" width="835" height="337" /></p>
<p>You can see why you want to make sure you get the content profiling and persona development right from the start. When it comes to real-time content personalization, the opportunities are endless – for good and for bad. A good strategic foundation is key to ensuring the tactics outlined in this post are deployed effectively.<a href="http://blog.nonlinearcreations.com/wp-content/uploads/2012/04/patterncards-6.jpg"><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nonlinearcreations.com/2012/04/personalization-with-profiles-and-pattern-cards-in-sitecore-dms/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Database Sizing for the Sitecore Customer Engagement Platform – Part 3</title>
		<link>http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform-part-3/</link>
		<comments>http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform-part-3/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 19:14:21 +0000</pubDate>
		<dc:creator>Glen McInnis</dc:creator>
				<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Sitecore]]></category>

		<guid isPermaLink="false">http://blog.nonlinearcreations.com/?p=1113</guid>
		<description><![CDATA[<p>In the opening posts of this <a href="http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform-part-2/">series</a> I shared many guidelines for sizing Sitecore CEP data based on intended usage of the capabilities of the system.  Two additional factors must be considered.  First, your organization’s need for high availability, disaster recovery and backup will easily multiply the overall storage requirements.   Finally, the anticipated growth trajectory [...]]]></description>
			<content:encoded><![CDATA[<p>In the opening posts of this <a href="http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform-part-2/">series</a> I shared many guidelines for sizing Sitecore CEP data based on intended usage of the capabilities of the system.  Two additional factors must be considered.  First, your organization’s need for high availability, disaster recovery and backup will easily multiply the overall storage requirements.   Finally, the anticipated growth trajectory and life span of your site also must be considered.</p>
<h2>High availability, disaster recovery, and backups</h2>
<p>High availability (HA), disaster recovery (DR) and backup practices for Sitecore are well documented on SDN and the Sitecore community and are not covered here.  I will just mention briefly that your HA, DR and backup strategies must be accounted for in your total space computations.</p>
<p>Most of our clients use a SQL cluster with shared storage for HA, which means there is no additional storage footprint; however several enterprise customers choose to operate a fully replicated DR environment – again adding another copy of the database – possibly a total of 4 copies if dedicated reporting databases are in place.  With our previous example the growth over 6 months would now look more like:</p>
<p><img class="alignnone" src="http://www.nonlinearcreations.com/~/media/Images/Blog/DMS/dms-3-1.ashx" alt="" width="490" height="298" /></p>
<p>&nbsp;</p>
<p>Depending on your backup strategy and retention you will also need to add in considerable capacity.   As it is the definitive source, most customers only backup the database that is capturing information.  A 4 week retention cycle of a complete weekly backup is probably the most common.  Factoring in 4 weeks of retention on the data and ignoring compression the graph now looks like:</p>
<p><img class="alignnone" src="http://www.nonlinearcreations.com/~/media/Images/Blog/DMS/dms-3-2.ashx" alt="" width="490" height="301" /></p>
<p><em>Note: the backup size for any month is assumed to be 4x the data foot print for the month.  This results in a conservative number if only weekly full-backups are taken, but does not account for incremental backups. Actual backup requirements will depend on the level of compression available in your backup solution.</em></p>
<h2>Planning for success, growth of the DMS database</h2>
<p>The final consideration is how much growth you expect.  In most enterprises there is almost always some contention for space in the data center.  For the sake of example, let’s assume our fictional site has a growth in traffic of 25% annually and the capital expenditure committee needs 5 year projections.</p>
<p>If we are conservative and assume the growth happens at the end of the year we now arrive at an active data footprint of 600,000 MB in year 5.  You will also note that the database itself is approximately 70 GB.  Is your DBA ready to handle a SQL database of that size?</p>
<p><img class="alignnone" src="http://www.nonlinearcreations.com/~/media/Images/Blog/DMS/dms-3-3.ashx" alt="" width="492" height="300" /></p>
<h2>Conclusion</h2>
<p>We hope you have found this series helpful.  To summarize, in order to estimate your storage needs for DMS you will need to:</p>
<ol>
<li>Understand your projected number of visits, visitors and page views</li>
<li>Understand your project number of page events (goals, campaigns, etc)</li>
<li>Model any engagement plan you intend to deploy</li>
<li>Have clear understanding of high availability and disaster recovery needs</li>
<li>Have defined backup and retention policies</li>
<li>Account for some level of growth</li>
</ol>
<p><strong> </strong></p>
<p><strong> </strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Database Sizing for the Sitecore Customer Engagement Platform – Part 2</title>
		<link>http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform-part-2/</link>
		<comments>http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform-part-2/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 11:37:45 +0000</pubDate>
		<dc:creator>Glen McInnis</dc:creator>
				<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Sitecore]]></category>

		<guid isPermaLink="false">http://blog.nonlinearcreations.com/?p=1111</guid>
		<description><![CDATA[<p>In the <a href="http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform/">opening post</a> of this series I shared basic sizing guidelines for Sitecore CEP, but if your organization intends to fully leverage the capabilities of CEP you will also need to consider the impacts of goals, conversions and events.</p> Goals, Campaigns and Page Events <p>The PageEvents table holds a record of all page [...]]]></description>
			<content:encoded><![CDATA[<p>In the <a href="http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform/">opening post</a> of this series I shared basic sizing guidelines for Sitecore CEP, but if your organization intends to fully leverage the capabilities of CEP you will also need to consider the impacts of goals, conversions and events.</p>
<h2>Goals, Campaigns and Page Events</h2>
<p>The <em>PageEvents </em>table holds a record of all page events that occur on the published site.  This covers goals, campaigns and other events.  Our analysis of the data in this table indicates that a single event consumes approximately 0.635 KB of space for data and indexes.  While this number is not significant, it is comparable to the data required for a page hit (0.5905 KB).    While nowhere as substantial as the visitors and page views it can easily add 3% – 6% to the database and can have additional impacts when you consider backup, disaster recovery and other elements.</p>
<p>Being able to model the page event data requirement will be largely based on supposition in the early days.  If you have previous analytics, that should give you some indication of traffic that would follow a conversion funnel and trigger events.  Start there.  By way of anecdotal evidence, on NLC’s website there is approximately 1 page event for every 2 pages viewed.</p>
<p>Going back to our fictional example of a moderately busy site with 100,000 visitors / month and an average of 10 page views / session the data required for a single month was 727 MB.  If we now add on 50,000 page events this will increase the monthly size by:</p>
<p>(50,000 x 0.635) =  31,750 KB or 31 MB</p>
<p>This now brings our monthly data requirement to 758MB.</p>
<h2>Engagement plans and testing</h2>
<p>There are many other features of CEP that can generate significant data footprint; however at this time we do not feel that we have enough information to properly model their impact.  A/B testing and the engagement plans in particular are so dependent on your implementation that any guidance we can provide would potentially be misleading.  <strong>Our suggestion is that you setup your plans as early as possible and then use load generation software to mimic traffic to collect actual statistics.</strong>  <strong>These capabilities can generate several GB’s of data in a month. </strong></p>
<h2>Dedicated Reporting</h2>
<p>Many of our clients duplicate the analytics data captured on the website to a second database.  That second database is used entirely for reporting in order to isolate the performance load of heavy reporting from the website.    If you choose to do this it will effectively double your data needs.  In our fictional example our need to capture and store data has moved from 758MB to 1.48GB monthly and our total data footprint at 6 months to 8.88GB.  You can see the projected growth depicted in the following chart.</p>
<p><img class="alignnone" src="http://www.nonlinearcreations.com/~/media/Images/Blog/DMS/dms-2-1.ashx" alt="" width="493" height="298" /></p>
<p>For more on the topics of DMS database performance and dedicated reporting databases, please see Sitecore’s DMS tuning guide at <a href="http://sdn.sitecore.net/SDN5/Reference/Sitecore%206/DMS%20Performance%20Tuning%20Guide.aspx">http://sdn.sitecore.net/SDN5/Reference/Sitecore%206/DMS%20Performance%20Tuning%20Guide.aspx</a>.</p>
<h2>Conclusion</h2>
<p>Understanding your traffic patterns, usage of events and reporting requirements will provide a reasonable estimation of your DMS data requirements.  The remaining factors are projected site growth, high availability, disaster recovery and backup.  These topics will be covered in my third and final post of the series.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Database Sizing for the Sitecore Customer Engagement Platform</title>
		<link>http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform/</link>
		<comments>http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform/#comments</comments>
		<pubDate>Tue, 17 Apr 2012 13:24:55 +0000</pubDate>
		<dc:creator>Glen McInnis</dc:creator>
				<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Sitecore]]></category>

		<guid isPermaLink="false">http://blog.nonlinearcreations.com/?p=1103</guid>
		<description><![CDATA[<p>The Sitecore Customer Engagement Platform (CEP) provides rich capabilities that can transform the way you engage with your customers online. The technical foundation to that capability is Sitecore’s ability to capture and store visitor behavior. Planning for the storage of this invaluable data should be top of mind for any Sitecore architect.</p> <p>At first glance [...]]]></description>
			<content:encoded><![CDATA[<p>The Sitecore Customer Engagement Platform (CEP) provides rich capabilities that can transform the way you engage with your customers online. The technical foundation to that capability is Sitecore’s ability to capture and store visitor behavior. Planning for the storage of this invaluable data should be top of mind for any Sitecore architect.</p>
<p>At first glance the Analytics database of the Digital Marketing Suite (DMS) is a very simple data-model. While the data-model is simple, the sizing characteristics of the database are not as clear cut. Driven primarily by the features you have deployed on your site and your visitor’s behavior, some level of modeling is required to estimate capacity needs.</p>
<p>In order to tackle the sizing of the database, I have segmented this post into a series. The first post will focus on some basic lookup tables and the data required to track visits, visitors and page views.</p>
<p><strong>Technical note: the information in this post is based on Sitecore 6.5 revision 111230.</strong></p>
<h2>Lookup Data</h2>
<p>The following DMS database tables track data sets that &#8211; in most instances &#8211; will have little influence on the size of the database.  The level of effort to model these tables is likely not worth the return, but have been included to let you judge for yourself.</p>
<table>
<thead>
<tr>
<th>Table Name</th>
<th>Purpose</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">Browsers</td>
<td style="text-align: left;">Contains a list of distinct web browsers detected in use by website visitors. The browser name, major and minor version is tracked.</td>
</tr>
<tr>
<td style="text-align: left;">ItemUrls</td>
<td style="text-align: left;">Is the GUID and full path of the item. The table will only be of concern for installations with a large number of content items.</td>
</tr>
<tr>
<td style="text-align: left;">OS</td>
<td style="text-align: left;">Contains a list of distinct operating systems in use by website visitors.</td>
</tr>
<tr>
<td style="text-align: left;">ReferringSites</td>
<td style="text-align: left;">Contains a list of referring sites. If there is a large amount of traffic that is incoming from external sources this table can be several hundred MB.</td>
</tr>
<tr>
<td style="text-align: left;">Screens</td>
<td style="text-align: left;">Contains a list of distinct screen resolutions in use by website visitors.</td>
</tr>
<tr>
<td style="text-align: left;">TrafficType</td>
<td style="text-align: left;">Is a pre-populate list of traffic types.</td>
</tr>
<tr>
<td style="text-align: left;">UserAgents</td>
<td style="text-align: left;">Contains a list of user agents. Because of the relationship with visitor classifications and visitors some index space may need to be considered.</td>
</tr>
</tbody>
</table>
<h2>Visits, Visitors and Page Views</h2>
<p>In the simplest deployment, the DMS capabilities will track sessions (visits), visitors and the pages viewed.  For high volume sites the amount of data stored can be quite substantial.  Our testing indicates that the following data footprint is required:</p>
<ul>
<li>0.0888 KB / visitor</li>
<li>1.45 KB / visit</li>
<li>0.5909 KB / page view</li>
</ul>
<p>Sitecore recommends the Analytics database be provisioned with 3-6 months of space pre-allocated to ensure the fragmentation of the database is kept to a minimum.   For a moderately busy site with 100,000 visitors / month and an average of 10 page views / session the data required for a single month would be:</p>
<p>(100,000 x 0.0888) + (100,000 x 1.45) + (100,000 x 0.5909) = 744,780 KB or 727 MB.</p>
<p>Giving room for growth over 3-6 months you would provision the initial database with 2.2 GB – 4.3 GB.</p>
<p><img class="alignnone" src="http://www.nonlinearcreations.com/~/media/Images/Blog/DMS/dms-1-1.ashx" alt="" width="489" height="299" /></p>
<p>&nbsp;</p>
<h2>Conclusion</h2>
<p>For the initial launch of the CEP capabilities, modeling Visits, Visitors and Page Views should provide enough information to ensure a successful launch.  For high volume sites , deployment of the more robust capabilities of CEP and for long term planning you will also need to consider:</p>
<ol>
<li>How other features of CEP such as goals, and page events impact size</li>
<li>Additional considerations for dedicated reporting, availability, backup and disaster recovery</li>
<li>Growth over time and archival</li>
</ol>
<p>These topics will be covered in subsequent posts.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nonlinearcreations.com/2012/04/database-sizing-for-the-sitecore-customer-engagement-platform/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Upcoming event: Developer&#8217;s guide to interaction and interface design</title>
		<link>http://blog.nonlinearcreations.com/2012/03/upcoming-event-developers-guide-to-interaction-and-interface-design/</link>
		<comments>http://blog.nonlinearcreations.com/2012/03/upcoming-event-developers-guide-to-interaction-and-interface-design/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 15:10:13 +0000</pubDate>
		<dc:creator>Joe Boughner</dc:creator>
				<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://blog.nonlinearcreations.com/?p=1096</guid>
		<description><![CDATA[<p>Are you a developer who&#8217;s sick of complaints about the usability of your interfaces? Looking for some simple rules to follow to make nice looking, usable solutions?</p> <p>We might just be able to help.</p> <p>NLC&#8217;s own Amanda Holtstrom is hosting a two-hour workshop for <a href="http://www.meetup.com/Girl-Develop-It-Ottawa/" target="_blank">Girl Develop It</a> called &#8220;<a href="http://www.meetup.com/Girl-Develop-It-Ottawa/events/54027102/" target="_blank">A Developer&#8217;s Guide [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" title="Amanda" src="http://photos3.meetupstatic.com/photos/event/a/4/8/a/event_96702122.jpeg" alt="" width="125" height="125" />Are you a developer who&#8217;s sick of complaints about the usability of your interfaces? Looking for some simple rules to follow to make nice looking, usable solutions?</p>
<p>We might just be able to help.</p>
<p>NLC&#8217;s own Amanda Holtstrom is hosting a two-hour workshop for <a href="http://www.meetup.com/Girl-Develop-It-Ottawa/" target="_blank">Girl Develop It</a> called &#8220;<a href="http://www.meetup.com/Girl-Develop-It-Ottawa/events/54027102/" target="_blank">A Developer&#8217;s Guide to Interaction and Interface Design</a>&#8221; at the <a href="http://thecodefactory.ca/" target="_blank">Code Factory</a> in Ottawa on March 27 (don&#8217;t worry, boys are welcome too).</p>
<p>During this two-hour session, Amanda will review some common interface design patterns and test drive some pragmatic approaches you can use to create and validate simple, intuitive interactions.</p>
<p>The course will be packed with examples with plenty of time for hands-on exercises so <a href="http://www.meetup.com/Girl-Develop-It-Ottawa/events/54027102/" target="_blank">sign up</a> today!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nonlinearcreations.com/2012/03/upcoming-event-developers-guide-to-interaction-and-interface-design/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Marketing Ethics and Website Personalization: 5 ways to prevent your site from being creepy</title>
		<link>http://blog.nonlinearcreations.com/2012/02/marketing-ethics-and-website-personalization-5-ways-to-prevent-your-site-from-being-creepy/</link>
		<comments>http://blog.nonlinearcreations.com/2012/02/marketing-ethics-and-website-personalization-5-ways-to-prevent-your-site-from-being-creepy/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 14:09:07 +0000</pubDate>
		<dc:creator>Robyn Bragg</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Strategy]]></category>

		<guid isPermaLink="false">http://blog.nonlinearcreations.com/?p=1089</guid>
		<description><![CDATA[<p>Marketing automation tools and website personalization can transform your site from a source of static information into a two-way conversation with your users. But as in any real-world conversation you need to follow the social ground rules or risk alienating your users.</p> Don’t be “that guy” (or gal) <p>You know the one: the stranger on [...]]]></description>
			<content:encoded><![CDATA[<p>Marketing automation tools and website personalization can transform your site from a source of static information into a two-way conversation with your users. But as in any real-world conversation you need to follow the social ground rules or risk alienating your users.</p>
<h2>Don’t be “that guy” (or gal)</h2>
<p>You know the one: the stranger on the bus who asks you overly personal questions; the nosy neighbor who eavesdrops on your phone calls; the kid in school who just wouldn’t leave you alone no matter how many times you told them to go away. Creepy people don’t respect the unspoken rules of social interaction. Websites need to respect the same social rules or risk leaving their users with an icky feeling.</p>
<h2>5 ways to prevent your site from being creepy</h2>
<h3>1. Don’t ask for too much information up front</h3>
<p>Just like the stranger who asks you overly-intimate questions, websites shouldn’t ask users for detailed personal information too soon. Users want to get to know you before they tell you too much. The question in their mind is always “why do you want to know?” If they don’t feel comfortable, they will lie (you know it’s true, we’ve all done it). So, when requesting personal details:</p>
<ul>
<li>only ask for the most essential information (e.g. don’t ask for an address and phone number if users are signing up for an email newsletter)</li>
<li>let users know why you want the information and what you will do with it</li>
<li>let them know you won’t share their information with other organizations</li>
</ul>
<h3>2. Don’t try to move the relationship along too fast</h3>
<p>Remember that many of your users are “just browsing”. They’re not necessarily ready to buy, sign up, or join anything on the first visit. They probably want to take a look, see what you have and get to know you a little bit. Don’t rush them. Of course, there’s nothing wrong with putting offers in front of users. Just make sure that you give them the chance to walk away if they’re not interested. And if they’ve told you “no,” don’t keep bugging them. Sites that are overly aggressive in seeking conversions feel creepy.</p>
<h3>3. Don’t make too many assumptions</h3>
<p>When creating personalized content for users, getting it wrong is potentially worse than not personalizing at all. Like the 6’6” accountant tired of being asked if they’re a basketball player, nobody likes to have wrong assumptions made about them. It leaves them with the feeling that they’ve been stereotyped or misunderstood. The best approach to personalization is to start small, track your success, and validate your assumptions using analytics, user surveys and real customer data.</p>
<h3>4. Don’t be a stalker</h3>
<p>Finding things out about someone without asking them is pretty much the creepiest thing you can do – no one wants to feel like their every move is being tracked without their permission. It is important to let users know how you gathered the information you have about them. When presenting personalized content, provide some context as well, e.g. “Based on what you downloaded/bought/viewed we recommend…”</p>
<h3>5. Let your user get a word in edgewise</h3>
<p>Finally, it’s important to give your user a chance to participate in the conversation. You may not know as much as you think you do: people travel, use their friends’ computers or shop for gifts for people with different tastes or interests.</p>
<p>How do you let them talk back? Give them a way to correct your initial assumptions. Let them change their personalization settings, correct their location, or tell you what their interests are. And ideally, give them a chance to opt out of personalization entirely if they’re not comfortable with it. It shows that you respect their wishes and aren’t going to be “that creep” stalking them.</p>
<p>By giving your users an opportunity to talk, you gain an opportunity to get real, accurate information about them that you might never learn otherwise, opening the door to a true two-way conversation.</p>
<p><strong>What do you think? Are there other website behaviours that creep you out?</strong></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nonlinearcreations.com/2012/02/marketing-ethics-and-website-personalization-5-ways-to-prevent-your-site-from-being-creepy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to Parameter Templates: Accessing Sublayout parameters using the Sitecore API</title>
		<link>http://blog.nonlinearcreations.com/2012/01/introduction-to-parameter-templates-accessing-sublayout-parameters-using-the-sitecore-api/</link>
		<comments>http://blog.nonlinearcreations.com/2012/01/introduction-to-parameter-templates-accessing-sublayout-parameters-using-the-sitecore-api/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 14:33:14 +0000</pubDate>
		<dc:creator>Nick Allen</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Sitecore]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[parameter templates]]></category>
		<category><![CDATA[sitecore]]></category>

		<guid isPermaLink="false">http://blog.nonlinearcreations.com/?p=1053</guid>
		<description><![CDATA[<p>In part 1 of this series <a title="Introduction to Sitecore Parameter Templates: Making sublayout configuration more intuitive" href="http://blog.nonlinearcreations.com/2011/12/introduction-to-parameter-templates-making-sublayout-configuration-more-intuitive/">Introduction to Sitecore Parameter Templates: Making Sublayout configuration more intuitive</a> we looked at the advantages of using Parameter Templates.</p> <p>In part 2 of this series <a title="Introduction to Sitecore Parameter Templates: Sitecore client configuration deep dive" href="http://blog.nonlinearcreations.com/2011/12/introduction-to-sitecore-parameter-templates-sitecore-client-configuration-deep-dive/">Introduction to [...]]]></description>
			<content:encoded><![CDATA[<p>In part 1 of this series <a title="Introduction to Sitecore Parameter Templates: Making sublayout configuration more intuitive" href="http://blog.nonlinearcreations.com/2011/12/introduction-to-parameter-templates-making-sublayout-configuration-more-intuitive/">Introduction to Sitecore Parameter Templates: Making Sublayout configuration more intuitive</a> we looked at the advantages of using Parameter Templates.</p>
<p>In part 2 of this series <a title="Introduction to Sitecore Parameter Templates: Sitecore client configuration deep dive" href="http://blog.nonlinearcreations.com/2011/12/introduction-to-sitecore-parameter-templates-sitecore-client-configuration-deep-dive/">Introduction to Sitecore Parameter Templates: Sitecore client configuration deep dive</a> we took a closer look at the steps required to configure the author experience using the Sitecore client.</p>
<p>In this final part of the series we are going to take a developers look at how to retrieve the values of the parameters chosen by the content authors in our solution code and supply them to the Sublayout that will render the content on the page. There are 5 components in the approach taken</p>
<ol>
<li>A Sublayout base class</li>
<li>A parameter template base class</li>
<li>A class to represent our promotions parameters</li>
<li>A utility class interface</li>
<li>The Sublayout to render the promotions on the page</li>
</ol>
<p><span style="color: #339966;"><em><strong>NOTE:</strong></em></span>  <span style="color: #008000;"><em>For brevity the code samples provided have been simplified.</em></span></p>
<h2>1. The Sublayout base class</h2>
<p>Since any Sublayout (UserControl) in our solution can have a data source and parameter collection it makes sense to expose these properties in a base class that extends UserControl. The first property that we want to expose is the actual Sublayout itself, which is a container for your UserControl&#8230;</p>
<pre>private Sublayout Sublayout
{
    get { return Parent as Sublayout; }
}</pre>
<p>Now that we have a reference to the Sublayout we also want to access the data source&#8230;</p>
<pre>public Item DataSourceItem
{
    get { return Sitecore.Context.Database.GetItem(Sublayout.DataSource); }
}</pre>
<p>Finally a third property to expose the Sublayout parameters, which are supplied to us in a query string format. We can take advantage of a Sitecore utility method to obtain the parameters in a NameValueCollection object&#8230;</p>
<pre>public NameValueCollection Parameters
{
    get { return WebUtil.ParseUrlParameters(Sublayout.Parameters); }
}</pre>
<h2>2. The parameter template base class</h2>
<p>The parameter template base class has a single responsibility. Take a collection of Sublayout parameters, map them to properties of the parameter template class and set the mapped property values. The constructor takes a single argument, the Sublayout parameters, instantiates a utility class for setting the property values and then calls the method that will perform the mapping&#8230;</p>
<pre>public ParameterTemplateBase(NameValueCollection parameters)
{
    _propertySetter = new PropertySetter(); // implements IPropertySetter    

    MapParameters(this, parameters);
}

private void MapParameters(object template, NameValueCollection parameters)
{
    var templateType = template.GetType();

    // the parameter keys are the parameter template fields
    foreach (var key in parameters.AllKeys)
    {
        // protect ourselves from spaces in template field names
        var property = templateType.GetProperty(key.Replace(" ", string.Empty));

        if (property != null)
        {
            _propertySetter.SetProperty(property, template, parameters[key]);
        }
    }
}</pre>
<h2>3. The promotions parameter class</h2>
<p>The purpose of this class is to provide a strongly typed representation of the Sitecore parameter template item that can be used by the presentation layer. We need a public property with an appropriate type per field on our parameter template and the class needs to extend our parameter template base class to have it&#8217;s values set&#8230;</p>
<pre>public class PromotionsParameters : ParameterTemplateBase
{
    public PromotionsParameters(NameValueCollection parameters) : base(parameters) { }

    public int PromotionLimit { get; set; }
    public DateTime DisplayFrom { get; set; }
    public DateTime DisplayUntil { get; set; }
}</pre>
<h2>4. The utility class interface</h2>
<p>To carry out the property setting task we instantiate the PropertySetter utility class that implements IPropertySetter&#8230;</p>
<pre>public interface IPropertySetter
{
    void SetDateTime(PropertyInfo propertyInfo, object obj, string value);
    void SetInt(PropertyInfo propertyInfo, object obj, string value);
    void SetString(PropertyInfo propertyInfo, object obj, string value);
    void SetProperty(PropertyInfo propertyInfo, object obj, string value);
}</pre>
<p>The SetProperty implementation calls the appropriate utlility method depending on the property type, we can add additional methods to IPropertySetter as the need arises. Here is a sample implementation that uses a Sitecore date utility method&#8230;</p>
<pre>public void SetDateTime(System.Reflection.PropertyInfo propertyInfo, object obj, string value)
{
    propertyInfo.SetValue(obj, DateUtil.ParseDateTime(value, DateTime.MinValue) , null);
}</pre>
<h2>5. The Sublayout (UserControl)</h2>
<p>Now we have all of our required components we can code our presentation layer. We will bind our promotions to a simple repeater&#8230;</p>
<pre>&lt;asp:Repeater ID="RptPromotions" runat="server"&gt;
    &lt;HeaderTemplate&gt;&lt;ol&gt;&lt;/HeaderTemplate&gt;
    &lt;ItemTemplate&gt;
        &lt;li&gt;
            &lt;asp:HyperLink
            ID="LnkPromotion"
            runat="server"
            Text='&lt;%# ((Item)Container.DataItem).DisplayName %&gt;'
            NavigateUrl='&lt;%# Sitecore.Links.LinkManager.GetItemUrl((Item)Container.DataItem) %&gt;'/&gt;
        &lt;/li&gt;
    &lt;/ItemTemplate&gt;
    &lt;FooterTemplate&gt;&lt;/ol&gt;&lt;/FooterTemplate&gt;
&lt;/asp:Repeater&gt;</pre>
<p>In our code-behind we need the Sublayout to extend SublayoutBase to gain access to the data source and parameters, we then use the parameters to instantiate the promotions parameter template class&#8230;</p>
<pre>protected PromotionsParameters PromotionsParameters
{
    get { return _promotionsParameters ?? (_promotionsParameters = new PromotionsParameters(base.Parameters)); }
}</pre>
<p>Finally on page load we can bind the promotions to our repeater taking the parameters into account, in a full scenario we would also check the DisplayFrom and DisplayUntil rules..</p>
<pre>if (base.DataSourceItem != null)
{
    RptPromotions.DataSource = (from i
                                    in
                                base.DataSourceItem.Children
                                select i).Take(PromotionsParameters.PromotionLimit);
    RptPromotions.DataBind();
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.nonlinearcreations.com/2012/01/introduction-to-parameter-templates-accessing-sublayout-parameters-using-the-sitecore-api/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Simple Changes for Website Tablet Compatibility</title>
		<link>http://blog.nonlinearcreations.com/2012/01/simple-changes-for-website-tablet-compatibility/</link>
		<comments>http://blog.nonlinearcreations.com/2012/01/simple-changes-for-website-tablet-compatibility/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 15:32:16 +0000</pubDate>
		<dc:creator>Aaron Powell</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://blog.nonlinearcreations.com/?p=1046</guid>
		<description><![CDATA[<p>Tablets are a rapidly growing market in the world of internet accessible devices and should be taken into consideration when developing any usable website today. Tablet adoption rates are expected to increase from about 6% of internet users in 2010 to nearly 40% of internet users by 2015. Your website needs to be ready for [...]]]></description>
			<content:encoded><![CDATA[<p>Tablets are a rapidly growing market in the world of internet accessible devices and should be taken into consideration when developing any usable website today. Tablet adoption rates are expected to increase from about 6% of internet users in 2010 to nearly 40% of internet users by 2015. Your website needs to be ready for these devices. Luckily, since tablet screens carry a similar form factor to laptop and desktop displays, the changes to make your website tablet friendly are minimal.</p>
<p>Simply follow these functional and design principles for a positive tablet user experience:</p>
<p><strong>Screen width</strong>: The resolution of most major tablets is normally about 1024 pixels wide and 800 or at minimum 600 pixels tall. It is generally good practice to avoid designing any sites whose minimum width is greater than 1024 pixels to accommodate for lower resolutions and smaller laptops, so this is a no brainer. For optimal compatibility you can even detect screen resolution and deliver desktop, tablet or mobile friendly sites based upon the resolution instead of relying on user agent.</p>
<p><strong>Avoid using hover</strong>: One of the major differences between a touchscreen and devices using a mouse is the inability to “hover” over links or items when using a touchscreen. Some tablets allow the user to press and drag links in order to trigger hover events, however this functionality is inconsistent and requires a conscious effort by the user to perform. If there is a need to use hover on your site you should:</p>
<ul>
<li>Only use hover as an enhancement to functionality and not as a necessity.</li>
<li>Make the click event and the hover event of an item trigger the same functionality. This allows tablet users to trigger the same event, such as hover for menu dropdowns.</li>
<li>If you cannot do either of the above, you should ask yourself why this functionality is being hidden and only displayed on hover in the first place.</li>
</ul>
<p><strong>Increase spacing between links</strong>: A tablet user&#8217;s index finger is far less precise than a mouse; this makes clicking on individual links far more difficult in tightly spaced menus or paging systems. When clustering links on a page you should:</p>
<ul>
<li>Increase horizontal and vertical spacing between links to reduce the need for the tablet user to zoom in to increase precision.</li>
<li>Increase prominence of commonly used links; in a paging system the next button is the most commonly used button and should take prominence over the last button (if present) or other paging buttons. This can be achieved as simply as adding additional padding around the next button or using the word “next” instead of “&gt;” to increase its screen presence.</li>
</ul>
<p><strong>Don’t use flash</strong>: Some tablets support flash, however the tablet with the largest market share is the iPad and it does not. Subsequently, Adobe has now officially discontinued development on Flash for mobile devices and performance on existing devices is not always favourable. So don’t use a dying technology or, if you must use it, have a fallback for those that do not have flash.</p>
<p><strong>Test, Test, Test</strong>: Tablet browsers are still in their infancy and are simply lacking in some areas when compared to their desktop cousins. Test your site for any incompatibilities, be especially on the lookout for the following:</p>
<ul>
<li>Popups inside popups: This practice should be avoided in general, but many tablet browsers, such as the stock Android browser, will open popups in a special context window that cannot then launch another popup.</li>
<li>Scrollbars inside of scrollbars: This is another practice that should be avoided in general, but tablet browsers have particular difficulty with scrollable areas appearing inside pages, especially when scrollable areas are click and drag/scroll JavaScript events. Often the browser will trigger the page scroll when you click and drag inside a context pane on the page when the user’s intention is to scroll the content in the context pane.</li>
</ul>
<p>By following the above tips your website will be ready for the millions of tablet users that exist today and the hundreds of millions of users that will be adopting tablets as their primary web surfing device in the near future. Don’t get left behind.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nonlinearcreations.com/2012/01/simple-changes-for-website-tablet-compatibility/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to Sitecore Parameter Templates: Sitecore client configuration deep dive</title>
		<link>http://blog.nonlinearcreations.com/2011/12/introduction-to-sitecore-parameter-templates-sitecore-client-configuration-deep-dive/</link>
		<comments>http://blog.nonlinearcreations.com/2011/12/introduction-to-sitecore-parameter-templates-sitecore-client-configuration-deep-dive/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 17:51:51 +0000</pubDate>
		<dc:creator>Nick Allen</dc:creator>
				<category><![CDATA[Content Management]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Sitecore]]></category>
		<category><![CDATA[parameter templates]]></category>
		<category><![CDATA[sitecore]]></category>

		<guid isPermaLink="false">http://blog.nonlinearcreations.com/?p=998</guid>
		<description><![CDATA[<p>In part 1 of this series <a title="Introduction to Sitecore Parameter Templates: Making sublayout configuration more intuitive" href="http://blog.nonlinearcreations.com/2011/12/introduction-to-parameter-templates-making-sublayout-configuration-more-intuitive/">Introduction to Sitecore Parameter Templates: Making sublayout configuration more intuitive</a> we looked at the advantages of using parameter templates</p> <p>For the context of this article I will be working on a simple online department store, with multiple departments.</p> <p><a [...]]]></description>
			<content:encoded><![CDATA[<p>In part 1 of this series <a title="Introduction to Sitecore Parameter Templates: Making sublayout configuration more intuitive" href="http://blog.nonlinearcreations.com/2011/12/introduction-to-parameter-templates-making-sublayout-configuration-more-intuitive/">Introduction to Sitecore Parameter Templates: Making sublayout configuration more intuitive</a> we looked at the advantages of using parameter templates</p>
<p>For the context of this article I will be working on a simple online department store, with multiple departments.</p>
<p><a href="http://blog.nonlinearcreations.com/wp-content/uploads/2011/12/Tree-Structure.png"><img class="size-full wp-image-1023 aligncenter" src="http://blog.nonlinearcreations.com/wp-content/uploads/2011/12/Tree-Structure.png" alt="" width="600" height="300" /></a></p>
<p>I want to create a Sublayout that can be used on a department homepage, I want the Sublayout to display the latest promotions relevant to the department, I also want to be able to configure the behavior of the Sublayout after it has been created without writing code or editing global settings fields that would affect all instances of the Sublayout, in short it needs to behave differently for each department and it needs to be easily configurable.</p>
<p>As previously mentioned in part 1 we could use the &#8220;Additional Parameters&#8221; field to generate a NameValueCollection but this doesn&#8217;t help future users of the Sublayout to know what options are available to them and it does not provide us with a mechanism to restrict the values entered.</p>
<p><a href="http://blog.nonlinearcreations.com/wp-content/uploads/2011/12/screencap31.png"><img class="size-full wp-image-1001 aligncenter" src="http://blog.nonlinearcreations.com/wp-content/uploads/2011/12/screencap31.png" alt="namevaluecollection" width="486" height="369" /></a></p>
<p>&nbsp;</p>
<p>So let&#8217;s be more explicit about what options we can have, what their types are and let&#8217;s provide an appropriate user interface to make those choices. Sounds like a Sitecore template doesn&#8217;t it?</p>
<p>Sublayout parameter templates are applied on individual Sublayouts by first selecting the Sublayout and then selecting the Content tab, these parameters will then be available wherever the Sublayout is used. By default the parameters will be configurable in the Page Editor, to disable this uncheck the Editable option.</p>
<p style="text-align: center;"><a href="http://blog.nonlinearcreations.com/wp-content/uploads/2011/12/screencap41.png"><img class="aligncenter size-medium wp-image-1002" src="http://blog.nonlinearcreations.com/wp-content/uploads/2011/12/screencap41-300x68.png" alt="parameterstemplate" width="300" height="68" /></a></p>
<p>Our Sublayout parameters template then behaves like a regular Sitecore data template but with one important difference. Your template must inherit from&#8230;</p>
<p style="padding-left: 30px;">/sitecore/templates/System/Layout/Rendering Parameters/Standard Rendering Parameters</p>
<p>&#8230;instead of the normal Standard template, if you do not do this you will be prompted with an error message when you try to edit the Sublayout. So our finished Sublayout parameters template looks like this:</p>
<p><a href="http://blog.nonlinearcreations.com/wp-content/uploads/2011/12/screencap51.png"><img class="aligncenter size-medium wp-image-1003" src="http://blog.nonlinearcreations.com/wp-content/uploads/2011/12/screencap51-300x194.png" alt="finishedtemplate" width="300" height="194" /></a></p>
<p>So you can see we are providing options to limit the number of promotions displayed as well as a mechanism for only showing the promotions in certain date ranges or months. So now we can modify presentation details on the individual department items and take advantage of these new options.</p>
<p><a href="http://blog.nonlinearcreations.com/wp-content/uploads/2011/12/screencap6.png"><img class="aligncenter size-medium wp-image-1004" src="http://blog.nonlinearcreations.com/wp-content/uploads/2011/12/screencap6-300x182.png" alt="" width="300" height="182" /></a></p>
<p>This can also be done by content authors using the Page Editor by selecting the Sublayout, clicking the more button and then selecting the &#8220;Edit the Component Properties&#8221; option.</p>
<p>So what if we edit the configuration of a Sublayout on an item and the item template&#8217;s presentation details are updated on the standard values afterwards, related links were removed for example. Won&#8217;t the item not receive the changes? Yes and no, in Sitecore 6.4.0 rev.101012 layout deltas were introduced, which allows us to partially update an item&#8217;s presentation details without breaking inheritance on the Sublayouts/Renderings that were not changed, prior to this that assertion would be correct so this is a caveat to be aware of.</p>
<p>In the next installment of this series, we will look at how best to retrieve the Sublayout configuration values in our  codebase.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nonlinearcreations.com/2011/12/introduction-to-sitecore-parameter-templates-sitecore-client-configuration-deep-dive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

