<?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>System.Nerd.John.Blog &#187; best practices</title>
	<atom:link href="http://jsprunger.com/tag/best-practices/feed/" rel="self" type="application/rss+xml" />
	<link>http://jsprunger.com</link>
	<description>A Consultant&#039;s Adventures in Software Development</description>
	<lastBuildDate>Sun, 28 Feb 2010 20:51:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Search Engine Optimization 101</title>
		<link>http://jsprunger.com/search-engine-optimization-seo-101/</link>
		<comments>http://jsprunger.com/search-engine-optimization-seo-101/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 03:44:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[search engine optimization]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://jsprunger.com/?p=88</guid>
		<description><![CDATA[One thing that any web developer worth their salt should know is the basics of search engine optimization (SEO).  Much of SEO comes down to basic code-level best practices, and it isn&#8217;t terribly difficult to simply bake SEO into your development process when working on public facing web applications.  However, keep in mind that SEO [...]]]></description>
			<content:encoded><![CDATA[<p>One thing that any web developer worth their salt should know is the basics of search engine optimization (SEO).  Much of SEO comes down to basic code-level best practices, and it isn&#8217;t terribly difficult to simply bake SEO into your development process when working on public facing web applications.  However, keep in mind that SEO will always be an evolving, fuzzy science, changing on the whim of the indexing strategies of major search engines.  Immediate results are rare, and a long term process should be in place to truly understand the benefit (or detriment) incurred.</p>
<p>I break the concept of SEO down into a few categories that I&#8217;ll explain further below&#8230;</p>
<ol>
<li>Content SEO (internal factors)</li>
<li>Strategic SEO (external factors)</li>
<li>Insight and Tracking</li>
</ol>
<h3>Content / Internal SEO</h3>
<p>These &#8216;Content / Internal&#8217; best practices are things that a developer or content creator can bake in during the site development process.  Only a few of these items will make a difference on their own, but as a whole can make an enormous impact.  These basic factors should lay the foundation for any SEO strategy. However, these internal factors absolutely cannot be the only part of your SEO strategy.  Here are a few of the most important ones&#8230;</p>
<ul>
<li>Page Titles.  Arguably one of the most important content level factor, this is one of the few that can make an enormous difference on their own.  Your page titles (what goes in the HTML &lt;title&gt; tag) should be relevant to what is on the page whereas I often come across page titles that only contain the name of the site.  Instead, you should have the &#8216;title&#8217; of the page prefixed or appended to the name of your site.  Some believe that appending the name of your site to the page title is better than prefixing.</li>
<li>Page URLs.  This goes hand in hand with your Page Titles, as page URLs carry almost equal important.  The URLs of your pages should mirror closely the titles of your pages, but don&#8217;t need to be exact.  Popular opinion is that the closer keywords in your URL are to the end of your domain name, the better.  Search engines have a very &#8216;human&#8217; behavior in this case&#8230; tell me, which URL is more descriptive about this post? &#8211; &#8220;http://jsprunger.com/search-engine-optimization-101/&#8221; or &#8220;http://jsprunger.com/?p=88&#8243;.  Search engines think the same way.</li>
<li>Freshly updated and unique content.  The more your web site content is updated, the more often it will be indexed by search engines.  Sites with freshly updated content seem to get a bonus from most search engines.  Bloggers in particular should ensure that their sites are configured to &#8216;ping&#8217; a service like <a href="http://pingomatic.com/">Ping-o-Matic</a> whenever you create a new post, this will immediately notify Google and many other services of your new content.  Having unique content is perhaps one of the most important factors, simply rehashing or copying content will get you absolutely nothing from most major search engines &#8211; in fact, duplicate content can seriously hurt your rankings.</li>
<li>Keyword usage in your content.  Also a highly important factor, whatever keywords that you want to rank for &#8211; make sure you&#8217;re using them in your content.  Think about what your customers or clients going to search for.  A few guidelines for keyword usage&#8230;
<ul>
<li>Don&#8217;t overuse your keywords, don&#8217;t be spammy.  Find the right balance between keyword usage and having readable, engaging content.</li>
<li>Make sure you have your keywords in your page title and URLs.</li>
<li>Use keywords within the first 100 words of the page or within HTML headers.</li>
<li>Get your keywords used in external links to your site.  More on this later&#8230;</li>
</ul>
</li>
<li>Image alt tags.  This is a pretty minor SEO factor, but very important if you have any interest in getting results from services like Google Image Search.  The productivity from image search results is usually pretty low for most businesses, but every little bit can help sometimes.  Some web sites (i.e. e-commerce, product catalogs) can benefit from image search much more than others.  Make sure you have descriptive &#8216;alt&#8217; attributes on your &lt;img&gt; tags &#8211; this is a best practice for usability and accessibility in general though.</li>
<li>Meta keywords and descriptions.  Long gone are the days of meta tags being useful for SEO.  However, the meta description tag can still play a huge role in your pages getting click-through <em>from the search results. </em>Google will use the meta description of your page as the &#8216;teaser&#8217; for the search result, but if you&#8217;re missing this tag you&#8217;ll often just see garbage or irrelevant content for the teaser.  Users are much more likely to click through to your content in search results if the result description is accurate and compelling.</li>
<li>Updated Sitemap and sitemap.xml file.  Keeping an up to date listing all of the content on your site in a sitemap will greatly enhance the ability of search engines to properly index 100% of the content on your web site.  You can use a tool like the <a href="http://code.google.com/p/googlesitemapgenerator/">Google Sitemap Generator</a> to keep a continually updated sitemap file.</li>
<li>Avoid so-called &#8216;black hat&#8217; or any sort of sneaky SEO techniques.  These strategies usually revolve around hiding or cloaking text on your pages in an attempt to fool search engines.   It isn&#8217;t worth it &#8211; leading search engines can easily detect and adapt to these techniques, resulting in your search rankings taking a dive or even a complete blacklisting of your site.</li>
</ul>
<h3>Strategic / External SEO</h3>
<p>Strategic SEO includes all of the factors external to your website that can affect your search engine rankings.  The number one external factor is getting &#8216;backlinks&#8217; to your content, this is what made Google so ridiculously powerful and accurate &#8211; and their rankings are still very much based on the number, diversity, and quality of links to to your site.</p>
<p>Backlinking can be explained with this anecdote: Several years ago you could search for &#8216;Miserable Failure&#8217; on Google and the number one result was the White House biography page for George Bush.  This was due to a simple viral campaign to get people to put links on their websites, comments, blog posts, etc. linking to the biography page with the anchor text &#8216;Miserable Failure&#8217;.  That&#8217;s how backlinks work.  The more external, inbound links to your site, the more &#8216;authoritative&#8217; your site appears to be in the eyes of major search engines.</p>
<p>But how can you get these backlinks? A few examples&#8230;</p>
<ul>
<li>Mainstream media and press releases.  Old fashioned, but if this is relevant to your industry, press releases for important announcements make their way around the internet very quickly.  This obviously works best if the press releases link back to your web site.</li>
<li>Getting linked and promoted in blog posts.  Do your friends, colleagues, or business partners have blogs or websites? Ask or barter with them to promote your content, requesting specific keywords be used in links to your web site.  This is a two way street &#8211; the more you&#8217;re willing to promote content from other sites, the more they&#8217;ll be willing to promote you back.  However, popular opinion is that one-way links are deemed to be of higher quality in the eyes of major search engines.</li>
<li>Twitter (annoying or ridiculous as many believe it to be) can be a great way to spread the word about your content.  Maybe you&#8217;ll get lucky and someone with 30,000 followers will retweet your link if you&#8217;ve included the proper hashtags.  After this happens, you&#8217;ll start to see your links pop up all over the internet.</li>
<li>Social Bookmarking.  Submitting your content to social bookmarking sites like Del.icio.us, Reddit, and Digg or more niche-specific sites can be a great way to spread the word about your content.  These services will also often directly link to your content with the exact text that you&#8217;ve specified &#8211; bonus!  Don&#8217;t be a spammer though, if you have high quality, unique content that people actually want to see &#8211; submit it.  If not, don&#8217;t bother.</li>
<li>Make it easy for your readers to submit your content to social bookmarking sites, for example &#8211; drop an AddThis button on your website like the one at the top of this post.  This allows your users to easily link and promote your content if they find it valuable.</li>
<li>Targeted submissions.  Do you have niche content? Find targeted venues for submitting your content and articles. For example, you&#8217;ve written an article relevant to the Healthcare industry. Track down some Healthcare industry groups on LinkedIn and submit your article to the news sections. Contact industry publications, they&#8217;re often happy to include high-quality articles.</li>
<li>Alliances and partnerships.  Work with your business partners and allies to cross promote each other where applicable.  For example, you&#8217;re a partner for a specific vendor. If you work closely with that vendor, they&#8217;re often more than happy to promote their most capable partners by linking them on pages within their own websites.</li>
</ul>
<h3>Insight and Tracking</h3>
<p>As mentioned previously, part of SEO includes a process testing out your SEO changes and tracking their effectiveness over time.  A variety of free and paid tools are available to assist you in analyzing your search rankings, search terms, and keyword effectiveness.  Below I&#8217;ve listed a few tools that can help.</p>
<ul>
<li>Google Analytics &#8211; by far the best free website traffic tracking software that I&#8217;ve ever used.  Formerly known as Urchin, Google Analytics allows you to slice, dice, drill down, and report into your tracking data any way you like.  Even better, Google Analytics allows you to configure &#8220;goals&#8221; for your web site which are basically actionable things that users of your site can perform that are of value to you, the business owner.  For example, submitting a contact form, downloading a white paper, completing a transaction, etc.  Dollar amounts, if applicable, can be tied to goals, allowing you to determine the exact revenue per visitor.  This effectively allows you to determine the most valuable incoming keywords and most effective traffic sources for your web site.  Beyond visitor value, Google Analytics can help you determine many more important statistics.  For example&#8230;
<ul>
<li>Most popular content on your website</li>
<li>Browser capabilities of your visitors</li>
<li>Location and language preferences of your visitors</li>
<li>Most popular search terms used to find your web site</li>
<li>Tracking of your CPC ad campaigns</li>
<li>Tracking visitor loyalty</li>
<li>Tracking the top exit pages for your web site (pages where visitors leave)</li>
</ul>
</li>
<li>Keyword ranking monitoring and reporting.  There are a variety of free and paid tools that will allow you to continually monitor and report on current and historical keyword rankings for your own website, as well as the keyword rankings for your competitor&#8217;s websites.  These tools will allow you to see if you&#8217;re making progress on increasing your search rankings.
<ul>
<li>Free Tools
<ul>
<li><a href="http://www.kpmrs.com/" target="_blank">Keyword Position Ranking Monitoring Service</a></li>
<li><a href="http://www.digitalpoint.com/tools/keywords/" target="_blank">DigitalPoint</a></li>
</ul>
</li>
<li>Paid Tools
<ul>
<li><a href="http://www.advancedwebranking.com/" target="_blank">Caphyon Advanced Web Ranking</a></li>
<li><a href="http://www.checkrankings.com/" target="_blank">CheckRankings</a></li>
</ul>
</li>
</ul>
</li>
<li>SEO analysis tools such as the <a href="http://www.iis.net/expand/SEOToolkit" target="_blank">Microsoft SEO Toolkit</a> allow you to analyze the your website to check for content level flaws such as broken links and duplicate content that can affect your search engine rankings.  The Microsoft SEO Toolkit allows you to view detailed information about SEO problems on your website using built-in reports and dashboards &#8211; an extremely useful tool to use when analyzing the state of SEO on an existing web site.</li>
</ul>
<p>There is much more to search engine optimization than can be written up in a single blog post (see also: thousands of blogs dedicated purely to the subject).  However, I hope this quick guide to the basics will give you the tools necessary to implement numerous high impact SEO quick wins for a client or personal web site. For web developers, the factors listed above should be kept in mind whenever developing customer-facing websites that could benefit from enhanced search results and search rankings.  Most of the &#8216;content / internal&#8217; best practices can be easily baked into the development process of almost any e-commerce or content management system implementation project.</p>
]]></content:encoded>
			<wfw:commentRss>http://jsprunger.com/search-engine-optimization-seo-101/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>.NET CF and Windows Mobile Performance Best Practices</title>
		<link>http://jsprunger.com/net-cf-and-windows-mobile-performance-best-practices/</link>
		<comments>http://jsprunger.com/net-cf-and-windows-mobile-performance-best-practices/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 15:30:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.net cf]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[windows mobile]]></category>

		<guid isPermaLink="false">http://jsprunger.com/?p=78</guid>
		<description><![CDATA[The impact of performance is much more readily apparent in .NET Compact Framework applications.  The mobile devices commonly have a CPU that is 10 times slower than your desktop CPU, and possibly up to 100 times less RAM than a desktop or server.  In Agile or XP development, the mantra is often to ignore performance [...]]]></description>
			<content:encoded><![CDATA[<p>The impact of performance is much more readily apparent in .NET Compact Framework applications.  The mobile devices commonly have a CPU that is 10 times slower than your desktop CPU, and possibly up to 100 times less RAM than a desktop or server.  In Agile or XP development, the mantra is often to ignore performance considerations until necessary &#8211; I don&#8217;t think you can apply that to .NET CF development or it will really bite you in the end.  You don&#8217;t have to go nuts and optimize everything up front, but there are some very important things to keep in mind when developing a Windows Mobile application&#8230;</p>
<h3>Standard .NET Framework Performance Considerations</h3>
<p>Many of the standard .NET Framework performance best practices can become apparent very quickly including&#8230;</p>
<ul>
<li>Object Boxing and Unboxing.  Use generics wherever possible and avoid ArrayLists and type conversions.</li>
<li>String and StringBuilder.  Need to perform lots of string concatenations? Use a StringBuilder instead of the &#8216;+&#8217; operator.  When you use the &#8216;+&#8217; operator, a new string object is created each time you concatenate, increasing memory usage.  The &#8216;+&#8217; operator is much slower if you&#8217;re concatenating a large number of strings.</li>
<li>Memory leaks.
<ul>
<li>When doing .NET CF development, if an object implements the Dispose() method &#8211; call it when you are finished with the object.</li>
<li>One of the most common causes of memory leaks is unhandling events when they&#8217;re no longer needed.  If you manually hook up an event with the &#8216;+=&#8217; operator, ensure you&#8217;re unhandling it when finished with the &#8216;-=&#8217; operator.</li>
<li>Pre-allocate collections if possible.  Standard .NET behavior is to automatically double the size of a collection when the upper limit is reached while adding items.  If you know the number of elements that are are going to be in a collection, pre-allocate the size of the collection when instantiating it.</li>
</ul>
</li>
<li>Don&#8217;t use Exceptions for flow control in an application.  Exceptions are an expensive operation, performance wise.  I&#8217;m not saying don&#8217;t use exceptions, but don&#8217;t use them in areas where you can perform simple checks to prevent them from being thrown.  For example, if you might divide by zero &#8211; perform a simple check before the operation occurs rather than handling a DivideByZeroException.  The check is much less expensive than the exception.</li>
</ul>
<h3>.NET Compact Framework-Specific Performance Considerations</h3>
<p>However, the .NET Compact Framework is different than the full framework in many ways, leading to a slew of .NET CF specific performance considerations&#8230;</p>
<ul>
<li>Avoid making virtual function calls.  They are up to 40% slower than instance and static function calls.  I don&#8217;t completely understand the reason for this, but you can read more about it <a href="http://blogs.msdn.com/netcfteam/archive/2005/05/04/414820.aspx" target="_blank">here</a> if you&#8217;re interested.</li>
<li>There are a few things in .NET CF that are slow <em>because </em>of virtual calls and object boxing/unboxing.  These include:
<ul>
<li>Reflection.  Very slow in .NET CF.</li>
<li>XML Deserialization and DataSets.  Extremely slow  because reflection is slow.</li>
</ul>
</li>
<li>Avoid creating many copies of Form objects.  Creating a Form is an expensive operation, and unused Form objects are a common cause of memory leak issues. You may want to create your Forms once and cache them in the background for reuse.</li>
<li>You can increase the speed of binding data to controls by using the BeginUpdate and EndUpdate methods on a control before and after your data binding occurs.  This will cause the control to not repaint until the binding is finished.</li>
<li>Cache expensive resources.  For example, don&#8217;t create many different copies of a web service client.  Create a single, cached instance of it that can be used throughout your application.</li>
<li><strong>Always </strong>test your application on a wide range of physical devices.  If the target device is known, at least test on that device.  Some things seem to perform much betterwhen running on the emulator or when executing unit tests on your desktop environment.</li>
<li>This is a more general performance testing best practice, but <strong>always </strong>test with <strong>real data </strong>and <strong>real quantities of data. </strong>This can really bite you on deployment of your application.  I know this from experience &#8211; a great example is that deserializing a few hundred objects is MUCH much faster than deserializing 10,000 objects.  In my experience, deserializing 7,000 very simple DTO objects from an ASMX web service was taking up to 20 minutes in some cases.  To alleviate the issue, we ended up switching to a JSON web service, which was much faster to deserialize.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jsprunger.com/net-cf-and-windows-mobile-performance-best-practices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.NET CF and Windows Mobile Usability Best Practices</title>
		<link>http://jsprunger.com/net-compact-framework-and-windows-mobile-usability-best-practices/</link>
		<comments>http://jsprunger.com/net-compact-framework-and-windows-mobile-usability-best-practices/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 20:36:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[.net cf]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[compact framework]]></category>
		<category><![CDATA[usability]]></category>
		<category><![CDATA[ux]]></category>
		<category><![CDATA[windows mobile]]></category>

		<guid isPermaLink="false">http://jsprunger.com/?p=75</guid>
		<description><![CDATA[I&#8217;m starting up a short Windows Mobile project again, so I thought it would be a good time to collect some of my best practices for .NET Compact Framework development and post them.  I&#8217;m going to break them down into two sections -  usability, and performance best practices (in another post).
Windows Mobile Usability Best Practices
Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m starting up a short Windows Mobile project again, so I thought it would be a good time to collect some of my best practices for .NET Compact Framework development and post them.  I&#8217;m going to break them down into two sections -  usability, and performance best practices (in another post).</p>
<h3>Windows Mobile Usability Best Practices</h3>
<p>Microsoft has put together a very specific set of guidelines for Windows Mobile usability &#8211; the point of this is to get a consistent set of look and feel and application experiences on their platform.  Apple has the same sort of guidelines for iPhone development and it really pays off &#8211; most applications have the same consistent look and feel and excellent usability.  Of course, many of these usability guidelines are relevant across many development platforms, but there are some special considerations for mobile development.</p>
<p>Usability is a challenge in mobile development.  Some of the main concerns include&#8230;</p>
<ul>
<li>Limited screen real estate.  In Windows Mobile, the most common size is around 480 x 640 pixels.</li>
<li>Limited input options.  Touch screen.  Potentially no hardware keyboard.  No mouse, and no scroll wheel.</li>
<li>Lighting &#8211; Indoor / Outdoor usage.</li>
<li>Gloves (i.e. warehouse users)</li>
<li>Finger vs. Stylus</li>
</ul>
<p>Here are some of the most important usability guidelines that Microsoft has set forth&#8230;</p>
<ul>
<li>Only display the most relevant information and options on the screen, i.e. don&#8217;t clutter up the screen with 100 different rarely used options.  If a feature is rarely used, place it in a menu or submenu.  If a feature or action is used very often, think about assigning it to one of the standard left or right soft keys.</li>
<li>Use high contrast, sufficiently bright colors.   Lighting conditions are an important factor in mobile development.  For example, think about if your application could be used in low light or outdoor sunlight conditions.</li>
<li>Avoid very small font sizes.  The screen on a mobile device is very small as-is, and actions on a mobile device are often performed at arms length away from the user (in a warehouse, for example).  If a user has to interrupt their workflow to bring the device in front of their face to read the text, then your font is too small.</li>
<li>Make the user interface predictable and consistent in your application, keep &#8216;OK&#8217; and &#8216;Cancel&#8217; actions in the same location throughout your interface.  The same buttons should perform the same actions throughout your application.  To stay consistent with other Windows Mobile interfaces, one recommendation is to always assign the left soft key to &#8216;Back&#8217; or &#8216;Cancel&#8217; actions, and to assign the right soft key to &#8216;Next&#8217; or &#8216;OK&#8217; actions.  Another Microsoft recommendation is to avoid overriding the hardware buttons (i.e. the Home button).</li>
<li>Ensure your UI elements are appropriately sized.  Buttons sized for a stylus should be at least 21 pixels squared, buttons sized for fingerse should be at least 38 pixels squared.</li>
<li>Keep screen rotation in mind &#8211; developing to account for rotation is a pain, but very important for consumer applications.  Your options though are limited to either dynamically resizing the content, or to just design for a square screen.</li>
<li>Scrolling is discouraged in Windows Mobile applications, because it is kind of a pain for the end user.  Try to keep your content on one screen length/width if possible.</li>
<li>If your target devices may feature a keyboard, assign common actions to key shortcuts.  This can greatly increase efficiency for power users.</li>
<li>For displaying information, make use of Summary, Detail, and Edit views.  A &#8216;Summary&#8217; view displays only the most necessary and relevant information about an item.  To access less commonly used information about an item, the user can drill down to a more complete &#8216;Detail&#8217; view.  If a user needs to edit the information, they can access an &#8216;Edit&#8217; view.</li>
<li>Ensure you&#8217;re setting focus on the appropriate text entry fields in bar code scanning scenarios, etc.  If a user is wearing gloves and has to take them off to set focus on a field before they scan a pallet, they&#8217;re going to hate your application.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jsprunger.com/net-compact-framework-and-windows-mobile-usability-best-practices/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
