<?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>Distractable &#187; How Tos</title>
	<atom:link href="http://distractable.net/category/how-tos/feed/" rel="self" type="application/rss+xml" />
	<link>http://distractable.net</link>
	<description>embracing distractions of the digital age</description>
	<lastBuildDate>Mon, 05 Jul 2010 00:35:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Monitoring Keyword Bounce Rates with Google Analytics</title>
		<link>http://distractable.net/how-tos/monitoring-keyword-bounce-rates-google-analytics/</link>
		<comments>http://distractable.net/how-tos/monitoring-keyword-bounce-rates-google-analytics/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 00:33:52 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[How Tos]]></category>
		<category><![CDATA[analytics]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=821</guid>
		<description><![CDATA[It&#8217;s confession time. Firstly, I have a blog. Secondly, it has a very high bounce rate. Now I&#8217;m not trying to make money from blogging or anything like that, but I do shed a small tear when I think: &#8220;Most people stop by for a quick visit, and then leave without looking around.&#8221; Now there [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s confession time.  Firstly, I have a blog.  Secondly, it has a very high bounce rate.  Now I&#8217;m not trying to make money from blogging or anything like that, but I do shed a small tear when I think: &#8220;Most people stop by for a quick visit, and then leave without looking around.&#8221;  </p>
<p>Now there are a lot of articles out there that give pointers on how optimize your blog/site to reduce bounce rate, so I&#8217;m not even going to try and talk about that here.  If you are after a good source of information, however, I&#8217;d recommend checking out <a href="http://www.problogger.net/">problogger</a>.  What I am going to talk about though, is how you can use Google Analytics to determine where to focus your efforts.  Google Analytics is very good at showing your overall bounce rate, but you can get more detail and start targeting particular posts and keywords to reduce that bounce rate.</p>
<p><span id="more-821"></span>Right, let&#8217;s get started:</p>
<p><strong>Update:</strong> While the instructions below definitely give a good overview of how to complete the task, I subsequently decided to put together a screencast that guides you through the process more slowly.  For those who like textual instructions, the original instructions are below the screencast.</p>
<p><object id="scPlayer" width="640" height="480"><param name="movie" value="http://content.screencast.com/users/distractable/folders/Default/media/7f91ae1c-98e5-48a1-984b-6ea224711a10/mp4h264player.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/users/distractable/folders/Default/media/7f91ae1c-98e5-48a1-984b-6ea224711a10/FirstFrame.jpg&#038;containerwidth=640&#038;containerheight=480&#038;content=http://content.screencast.com/users/distractable/folders/Default/media/7f91ae1c-98e5-48a1-984b-6ea224711a10/monitoring_keyword_bounce_rates.m4v"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param><param name="base" value="http://content.screencast.com/users/distractable/folders/Default/media/7f91ae1c-98e5-48a1-984b-6ea224711a10/"></param>  <embed src="http://content.screencast.com/users/distractable/folders/Default/media/7f91ae1c-98e5-48a1-984b-6ea224711a10/mp4h264player.swf" quality="high" bgcolor="#FFFFFF" width="640" height="480" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/distractable/folders/Default/media/7f91ae1c-98e5-48a1-984b-6ea224711a10/FirstFrame.jpg&#038;containerwidth=640&#038;containerheight=480&#038;content=http://content.screencast.com/users/distractable/folders/Default/media/7f91ae1c-98e5-48a1-984b-6ea224711a10/monitoring_keyword_bounce_rates.m4v" allowFullScreen="true" base="http://content.screencast.com/users/distractable/folders/Default/media/7f91ae1c-98e5-48a1-984b-6ea224711a10/" scale="showall"></embed></object></p>
<div class="step"><a href="http://distractable.net/wp-content/uploads/2010/02/top-content.png" rel="lightbox[821]" title="Google Analytics Top Content Report"><img src="http://distractable.net/wp-content/uploads/2010/02/top-content-150x150.png" alt="Google Analytics Top Content Report" title="Google Analytics Top Content Report" width="150" height="150" class="alignright size-thumbnail wp-image-829" /></a>Firstly, head over the Google Analytics top content report, which can be found under Content > Top Content.</div>
<div class="step">
<a href="http://distractable.net/wp-content/uploads/2010/02/content-keywords.png" rel="lightbox[821]" title="Display Keywords for Content"><img src="http://distractable.net/wp-content/uploads/2010/02/content-keywords-150x150.png" alt="Display Keywords for Content" title="Display Keywords for Content" width="150" height="150" class="alignright size-thumbnail wp-image-826" /></a>Next, add the keywords for the content to the report.  The image to the right shows how to do this, but basically look for the drop-down list to the right of the Page column heading.
</div>
<div class="step">
<a href="http://distractable.net/wp-content/uploads/2010/02/advanced-filter.png" rel="lightbox[821]" title="Activate the advanced filter"><img src="http://distractable.net/wp-content/uploads/2010/02/advanced-filter-150x129.png" alt="Activate the advanced filter" title="Activate the advanced filter" width="150" height="129" class="alignright size-thumbnail wp-image-824" /></a>Activate the advanced filter so we remove all of those pages that haven&#8217;t been hit as the result of an organic search.
</div>
<div class="step">
<a href="http://distractable.net/wp-content/uploads/2010/02/advanced-filter-details.png" rel="lightbox[821]" title="Advanced Filter Details: Exclude (not set)"><img src="http://distractable.net/wp-content/uploads/2010/02/advanced-filter-details-150x150.png" alt="Exclude (not set)" title="Advanced Filter Details: Exclude (not set)" width="150" height="150" class="alignright size-thumbnail wp-image-823" /></a>Add a filter to exclude the string &#8220;(not set)&#8221;, removing those non organic search pages.
</div>
<div class="step">
<a href="http://distractable.net/wp-content/uploads/2010/02/performance.png" rel="lightbox[821]" title="Switch to the Performance Display"><img src="http://distractable.net/wp-content/uploads/2010/02/performance-150x150.png" alt="Switch to the Performance Display" title="Switch to the Performance Display" width="150" height="150" class="alignright size-thumbnail wp-image-827" /></a>Now switch Google Analytics to the performance view of the report.  This can be done by selecting the third icon along in the views selector, which is located top-right above the report table.
</div>
<div class="step">
<a href="http://distractable.net/wp-content/uploads/2010/02/specify-bounce-rate.png" rel="lightbox[821]" title="Select Bounce Rate for Performance Reporting"><img src="http://distractable.net/wp-content/uploads/2010/02/specify-bounce-rate-150x150.png" alt="Select Bounce Rate for Performance Reporting" title="Select Bounce Rate for Performance Reporting" width="150" height="150" class="alignright size-thumbnail wp-image-828" /></a>Now that you are in performance reporting mode, switch the performance field over to reporting on bounce rate.  This can be done by selecting &#8220;Bounce Rate&#8221; from the individual page performance drop-down in the column heading of the report.
</div>
<p style="clear: right">
The end result will look something like what&#8217;s displayed below.  Thankfully I&#8217;m not too susceptible to stats-envy <img src='http://distractable.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
</p>
<p><img src="http://distractable.net/wp-content/uploads/2010/02/end-result.png" alt="Final Report" title="Final Report" width="600" height="371" class="alignnone size-full wp-image-846" /></p>
<p>
Now to make this report truly useful, I would recommend extending the timeline for the report to longer than a month (at least when first analysing the data).  For my blog, I chose a six-month period.  It&#8217;s certainly very telling.  For me, I can see that I&#8217;m getting a fair bit of organic search traffic for android web applications on my <a href="/coding/iphone-android-web-application-frameworks/">iPhone and Android Web Application Frameworks</a> post.  Certain keyword combinations do better than others, but overall this could definitely be improved.  So what does this tell me.  Well if I have a few posts in the wings, then if I&#8217;m thinking about one related to Android that should take priority.  Post it, and make sure I promote it from the post getting good organic traffic.
</p>
<p>
Finally, I used the Google Analytics export to PDF functionality to provide myself a good optimization worksheet.  Before I did this though I did add an additional filter to cull some of the lesser visited pages on my site.
</p>
<p>Anyway, I hope that&#8217;s as helpful to someone else as I found it myself, and certainly if there are other useful Google Analytics tips that people know I&#8217;d certainly love to hear about it.</p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/how-tos/monitoring-keyword-bounce-rates-google-analytics/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Make your Google Chat Log Markdown Friendly</title>
		<link>http://distractable.net/how-tos/make-your-google-chat-log-markdown-friendly/</link>
		<comments>http://distractable.net/how-tos/make-your-google-chat-log-markdown-friendly/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 12:38:02 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[How Tos]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=584</guid>
		<description><![CDATA[I am using Unfuddle for keeping some of my projects organised, and recently wanted to push a chat log into a unfuddle notebook so it could be discussed and reviewed by other people on the project. In unfuddle I am using Markdown syntax, which I think is fantastic. Formatting a Google chat log by simply [...]]]></description>
			<content:encoded><![CDATA[<p>I am using Unfuddle for keeping some of my projects organised, and recently wanted to push a chat log into a unfuddle notebook so it could be discussed and reviewed by other people on the project.  In unfuddle I am using <a href="http://daringfireball.net/projects/markdown">Markdown syntax</a>, which I think is fantastic.  Formatting a Google chat log by simply copying and pasting from my gmail account into Unfuddle, however, needs a little help.</p>
<p><span id="more-584"></span>The trick here is to call on your old friend, regular expressions.  There are a few things you need to do to make it all look pretty.  In my case, I wanted to have line breaks where they appeared in the chat log, the time entries displayed in italics and the chat participants names bolded.</p>
<p>So without further ado; using your favourite regular expression powered text editor run the following regular expressions (you will probably need to break them into component parts to run them):</p>
<p><strong>Step 1 &#8211; Get Linebreaks into the chat log</strong><br />
2 Spaces required at the each of every line to tell markdown to insert a line break:</p>
<p><code>/(.)$/$1  /g</code></p>
<p><strong>Step 2 &#8211; Italicise the time markers</strong><br />
*blah* instructs markdown to italicise the text:</p>
<p><code>/(\d{1,2}\:\d{2}\s(A|P)M)/*$1*/ig</code></p>
<p><strong>Step 3 &#8211; Bold the participants names</strong><br />
**blah** instructs markdown to bold the text:</p>
<p><code>/((\*|M|^)\s\w+\:)/**$1**/ig</code></p>
<p>That oughta do it.  You can now drop your chat log into any markdown syntax enabled tool (including unfuddle).</p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/how-tos/make-your-google-chat-log-markdown-friendly/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting Started with Django on Google AppEngine</title>
		<link>http://distractable.net/how-tos/getting-started-with-django-on-google-appengine/</link>
		<comments>http://distractable.net/how-tos/getting-started-with-django-on-google-appengine/#comments</comments>
		<pubDate>Wed, 27 May 2009 13:06:18 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[How Tos]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=506</guid>
		<description><![CDATA[Django is a pretty interesting looking web application framework available for python, and a lot of the inspiration for Google AppEngine (in terms of the python implementation at least) have apparently come out of use of Django. Presently AppEngine has out of the box support for Django 0.96 but if you want to get up [...]]]></description>
			<content:encoded><![CDATA[<p>Django is a pretty interesting looking web application framework available for python, and a lot of the inspiration for Google AppEngine (in terms of the python implementation at least) have apparently come out of use of Django.  Presently AppEngine has out of the box support for Django 0.96 but if you want to get up and running with the latest stable version of Django you have to jump through a few hoops.</p>
<p><span id="more-506"></span>The following article gets you well on your way:<br />
<a href="http://code.google.com/appengine/articles/django.html">http://code.google.com/appengine/articles/django.html</a></p>
<p>One problem, however, is that there have been some changes in django that mean the code they provide to call initialize django from your main.py script doesn&#8217;t work.  Change your main.py script it to what is displayed below, however, and it all works fine:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">logging</span>, <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">sys</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Google App Engine imports.</span>
<span style="color: #ff7700;font-weight:bold;">from</span> google.<span style="color: black;">appengine</span>.<span style="color: black;">ext</span>.<span style="color: black;">webapp</span> <span style="color: #ff7700;font-weight:bold;">import</span> util
&nbsp;
<span style="color: #808080; font-style: italic;"># Remove the standard version of Django.</span>
<span style="color: #ff7700;font-weight:bold;">for</span> k <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: black;">&#91;</span>k <span style="color: #ff7700;font-weight:bold;">for</span> k <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">modules</span> <span style="color: #ff7700;font-weight:bold;">if</span> k.<span style="color: black;">startswith</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'django'</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>:
  <span style="color: #ff7700;font-weight:bold;">del</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">modules</span><span style="color: black;">&#91;</span>k<span style="color: black;">&#93;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Force sys.path to have our own directory first, in case we want to import</span>
<span style="color: #808080; font-style: italic;"># from it.</span>
<span style="color: #dc143c;">sys</span>.<span style="color: black;">path</span>.<span style="color: black;">insert</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">0</span>, <span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">abspath</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">os</span>.<span style="color: black;">path</span>.<span style="color: black;">dirname</span><span style="color: black;">&#40;</span>__file__<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Must set this env var *before* importing any part of Django</span>
<span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'DJANGO_SETTINGS_MODULE'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'settings'</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>
<span style="color: #ff7700;font-weight:bold;">import</span> django.<span style="color: black;">core</span>.<span style="color: black;">signals</span>
<span style="color: #ff7700;font-weight:bold;">import</span> django.<span style="color: black;">db</span>
<span style="color: #ff7700;font-weight:bold;">import</span> django.<span style="color: black;">dispatch</span>.<span style="color: black;">dispatcher</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> log_exception<span style="color: black;">&#40;</span><span style="color: #66cc66;">*</span>args, <span style="color: #66cc66;">**</span>kwds<span style="color: black;">&#41;</span>:
 <span style="color: #dc143c;">logging</span>.<span style="color: black;">exception</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Exception in request:'</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># create a new signal object</span>
sig = django.<span style="color: black;">dispatch</span>.<span style="color: black;">Signal</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Log errors.</span>
sig.<span style="color: black;">connect</span><span style="color: black;">&#40;</span>log_exception, django.<span style="color: black;">core</span>.<span style="color: black;">signals</span>.<span style="color: black;">got_request_exception</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Unregister the rollback event handler.</span>
sig.<span style="color: black;">disconnect</span><span style="color: black;">&#40;</span>django.<span style="color: black;">db</span>._rollback_on_exception, django.<span style="color: black;">core</span>.<span style="color: black;">signals</span>.<span style="color: black;">got_request_exception</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
  <span style="color: #808080; font-style: italic;"># Create a Django application for WSGI.</span>
  application = django.<span style="color: black;">core</span>.<span style="color: black;">handlers</span>.<span style="color: black;">wsgi</span>.<span style="color: black;">WSGIHandler</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #808080; font-style: italic;"># Run the WSGI CGI handler with that application.</span>
  util.<span style="color: black;">run_wsgi_app</span><span style="color: black;">&#40;</span>application<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
  main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>The key being that django.dispatch.dispatcher no longer works, and you need to create a django.dispatch.Signal instance and use that in place of the dispatcher.connect and dispatcher.disconnect function calls.</p>
<p><strong>Update:</strong><br />
Thanks to <a href="http://twitter.com/joerussbowman">@joerussbowman</a> for the heads up on <a href="http://code.google.com/p/app-engine-patch/">app-engine-patch</a> which is a quick and easy way to get up and running with django on appengine.  Definitely recommend checking it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/how-tos/getting-started-with-django-on-google-appengine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using GIMP to create Tileable Textures</title>
		<link>http://distractable.net/how-tos/using-gimp-to-create-tileable-textures/</link>
		<comments>http://distractable.net/how-tos/using-gimp-to-create-tileable-textures/#comments</comments>
		<pubDate>Fri, 01 May 2009 03:35:26 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[How Tos]]></category>

		<guid isPermaLink="false">http://distractable.net/?p=448</guid>
		<description><![CDATA[There are a lot of good texture libraries currently available online at the moment. Some which are absolutely top-notch. One of my personal favourites is Lost and Taken but there are numerous list posts (like this one at Web Design Ledger) which point to more. Now these textures are great but you are probably going [...]]]></description>
			<content:encoded><![CDATA[<p>There are a lot of good texture libraries currently available online at the moment.  Some which are absolutely top-notch.  One of my personal favourites is <a href="http://lostandtaken.com/">Lost and Taken</a> but there are numerous list posts (like <a href="http://webdesignledger.com/freebies/29-most-useful-texture-packs-of-2008">this one at Web Design Ledger</a>) which point to more.</p>
<p>Now these textures are great but you are probably going to have to use some really large images if you want to use them on your site, and I really didn&#8217;t want to have to.  Thankfully <a href="http://www.gimp.org/">the GIMP</a> includes a filter to make an object seamless, which means you can tile it effectively as the page background of your site.</p>
<p><span id="more-448"></span>To make an image file tileable, simply open the image in GIMP, and then from the Filters menu, select Map > Make Seamless.  No options are required, it just works (see below for a before and after pics).</p>
<p><strong>Before</strong><br />
<div id="attachment_449" class="wp-caption alignnone" style="width: 460px"><img src="http://blog.distractable.net/wp-content/uploads/2009/05/img_2064.jpg" alt="Before" title="Before" width="450" height="342" class="size-full wp-image-449" /><p class="wp-caption-text">Before</p></div></p>
<p><strong>After</strong><br />
<div id="attachment_450" class="wp-caption alignnone" style="width: 460px"><img src="http://blog.distractable.net/wp-content/uploads/2009/05/img_2064_tileable.jpg" alt="After" title="After" width="450" height="342" class="size-full wp-image-450" /><p class="wp-caption-text">After</p></div></p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/how-tos/using-gimp-to-create-tileable-textures/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Website Monitoring Strategy</title>
		<link>http://distractable.net/how-tos/website-monitoring-strategy/</link>
		<comments>http://distractable.net/how-tos/website-monitoring-strategy/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 12:59:30 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[How Tos]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[infrastructure]]></category>
		<category><![CDATA[quality]]></category>

		<guid isPermaLink="false">http://conceptualadvantage.com/?p=160</guid>
		<description><![CDATA[As corporates and small business engage the web more and more heavily, the need to ensure a website is up at all times becomes more and more critical.  There are a number of services (wikipedia has a great list) that offer to monitor website availability by using various traffic types (ping, http, etc) to ensure the site is available to the public.

At what point should you use one of these services, and additionally, what kind of monitoring should you do (assuming you have the appropriate network infrastructure) to enhance your monitoring strategy.]]></description>
			<content:encoded><![CDATA[<p>As corporates and small business engage the web more and more heavily, the need to ensure a website is up at all times becomes more and more critical.  There are a number of services (wikipedia has a <a href="http://en.wikipedia.org/wiki/Comparison_of_website_monitoring_tools">great list</a>) that offer to monitor website availability by using various traffic types (ping, http, etc) to ensure the site is available to the public.   At what point should you use one of these services, and additionally, what kind of monitoring should you do (assuming you have the appropriate network infrastructure) to perform monitoring also.  If you are a company with some internal hosting capability or with a number of servers hosted in a data centre somewhere, then I think implementing a solution as illustrated below is wise.</p>
<p><span id="more-160"></span><div id="attachment_163" class="wp-caption alignright" style="width: 267px"><a href="http://blog.distractable.net/wp-content/uploads/2009/02/website_monitoring.png" rel="lightbox[160]" title="Website Monitoring"><img class="size-medium wp-image-163" title="Website Monitoring" src="http://conceptualadvantage.com/wp-content/uploads/2009/02/website_monitoring-257x300.png" alt="Website Monitoring Strategy Architecture" width="257" height="300" /></a><p class="wp-caption-text">Website Monitoring Strategy Architecture</p></div></p>
<p><strong>Monitoring Architecture</strong></p>
<p>The design of this architecture is focused on getting the best &#8220;bang for your buck&#8221; monitoring.  That is, services that you can monitor from your own internal network you should, but obviously you want something keeping an eye on the the monitoring service (who watches the watchmen?).  This is where the services listed in the wikipedia article should be investigated.  In addition to implementing the external monitors to ensure the internal monitoring services are operating, it is probably worthwhile having the external service monitor some of the key services also (you usually get more that one monitored service with hosted monitoring solutions).</p>
<p>In terms of how you monitor the internal solution, there are a number of options, but depend on how you can set things up.  The simplest strategy that is fairly effective, is to write a small file (deleting any existing file first)  on one of the monitored webservers as one of the actions the internal monitoring server completes during its &#8220;rounds&#8221;.  That webserver should then have a very lightweight script deployed to it to check that the creation date of the file is within certain tolerances (say up to 5 minutes).  This script is an example of what I call a &#8220;full stack health check&#8221;, which I cover in the next section.</p>
<p><strong>Implementing &#8220;Full Stack Health Checks&#8221;</strong></p>
<p>In my opinion, the most efficient and effective way to implement health-checking on web and application servers is to write lightweight scripts that do what your application is going to do.  For instance, a health checking script that is being used to monitor the health and availability of a web application that uses a database (fairly common), should at least make a connection to the database and perform a simple select statement to ensure that the database is available as well as the webserver.  In most instances, it can be possible to attach a monitoring service to the main page of a website to achieve a similar result; however, it is common for high-traffic webservers to use caching mechanisms to improve response times and in these cases, a monitoring solution would not pick up a problem that will show itself to the public soon enough.  Given this example, implementing  health check scripts and deploying them in their own directory on the webserver (and setting up some caching exceptions where appropriate) might give you a heads-up to fixing a problem before the general site public even notice.</p>
<p>When writing a &#8220;full stack&#8221; check, my recommendation would be to simply return the text &#8220;OK&#8221; in the case that the stack of services validated in the call are operational.  When a particular component of the stack is not operational, however, rather than simply returning &#8220;Broken&#8221; (or something similar) you should return something helpful, and this could be the text of an exception message, or something that you have determined to be the cause of an error with that component.  This failure message text (if kept short) can be emailed and SMSed to the on-call staff, and give them a heads up as to any other key members of staff they might need to involve to fix a problem.  For example, a message such as &#8220;database blah could not accept connection&#8221; could give a web support programmer the heads up they will probably need to get a database administrator on the phone to help with assisting the problem.</p>
<p><strong>Build a Monitoring Catalogue</strong></p>
<p>Still on my to-do list is to build a catalogue of monitoring end-points that relates back to critical websites and applications that I am responsible for maintaining at the company where I work.  This catalogue is then used to ensure that suitable coverage of key services is covered by whatever monitoring strategy is put in place.</p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/how-tos/website-monitoring-strategy/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>MSI Wind U100 and Ubuntu Linux</title>
		<link>http://distractable.net/how-tos/msi-wind-u100-ubuntu-linux/</link>
		<comments>http://distractable.net/how-tos/msi-wind-u100-ubuntu-linux/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 04:04:33 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[How Tos]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://fragmentedcore.com/?p=38</guid>
		<description><![CDATA[The MSI Wind  U100 is a fantastic ultraportable, but for some reason in Australia is only available pre-installed with WinXP preinstalled.  Now I'm definitely not a windows hater, but I really did want linux on my ultraportable so I installed Ubuntu 8.10.  The process itself was quite painless, but did require a few little tricks to get started and then complete with a fully functional ultraportable under linux.]]></description>
			<content:encoded><![CDATA[<p>The MSI Wind  U100 is a fantastic ultraportable, but for some reason in Australia is only available pre-installed with WinXP preinstalled.  Now I&#8217;m definitely not a windows hater, but I really did want linux on my ultraportable so I installed Ubuntu 8.10.  The process itself was quite painless, but did require a few little tricks to get started and then complete with a fully functional ultraportable under linux.</p>
<p><span id="more-8"></span><strong>Installing Ubuntu 8.10</strong></p>
<p>Installation of linux on the wind can be done in one of two ways:</p>
<ul>
<li>By using an external DVD/CD drive to install the OS (very simple)</li>
<li>By using a bootable USB key.  This is the method I used, and <a title="Ubuntu 8.10 usb key installation instructions" href="http://www.pendrivelinux.com/2008/10/15/ubuntu-810-persistent-flash-drive-install-from-live-cd/">these instructions</a> proved invaluable to complete the process.</li>
</ul>
<p><strong>Getting the Inbuilt Wifi device working</strong></p>
<p>My recommendation is to download the appropriate drivers and compile the new required modules for the current kernel version.  Detailed instructions on how to do this can be found on the <a href="http://wiki.msiwind.net/index.php/Ubuntu_8.04_Hardy_Heron#Option_2:_Compiling_Drivers_for_the_Supplied_Wireless_Card">wind wiki</a>.</p>
<p><strong>Installing the touchpad driver installed</strong></p>
<p>Now apparently there are two different versions of touchpads, so depending on which one you have your experience may vary to mine.  My wind shipped with the synaptic touchpad, and apparently I&#8217;m quite lucky as it worked out of the box.  I believe MSI have changed touchpad vendor and the experience isn&#8217;t quite as pleasant for that variant.  </p>
<p>Once I have figured out how to configure the touchpad (currently investigating tpconfig) I will update this post.</p>
<p><strong>Card Reader Configuration</strong></p>
<p>The following blog post has some excellent pointers:</p>
<p><a href="http://kd-signofthetimes.blogspot.com/2008/09/advent-4211-sd-cardsolved.html">http://kd-signofthetimes.blogspot.com/2008/09/advent-4211-sd-cardsolved.html</a></p>
<p><strong>Summary</strong></p>
<p>All the information is out there for anyone to install linux on their wind, and personally I recommend it. In the ultraportable space I believe linux kills the competition.  I would highly recommend the <a href="http://msiwind.net/">msiwind.net</a> site, as the forums and wiki are invaluable for all things windy.</p>
]]></content:encoded>
			<wfw:commentRss>http://distractable.net/how-tos/msi-wind-u100-ubuntu-linux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Installing MySource Matrix on Ubuntu</title>
		<link>http://distractable.net/how-tos/mysource-matrix-ubuntu/</link>
		<comments>http://distractable.net/how-tos/mysource-matrix-ubuntu/#comments</comments>
		<pubDate>Sun, 31 Aug 2008 07:45:21 +0000</pubDate>
		<dc:creator>Damon</dc:creator>
				<category><![CDATA[How Tos]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://implementsdistractable.wordpress.com/?p=9</guid>
		<description><![CDATA[Having been through the experience of getting MySource Matrix up and running in on an Ubuntu Linux (8.04) server installation (which took a little bit of effort); I thought I'd document the process so others could use the info.  So without further ado...]]></description>
			<content:encoded><![CDATA[<p>Having been through the experience of getting MySource Matrix up and running in on an Ubuntu Linux (8.04) server installation (which took a little bit of effort); I thought I&#8217;d document the process so others could use the info. </p>
<p><span id="more-20"></span><br />
<strong>Step 1 &#8211; Linux Installation</strong></p>
<p>Well I started with an Ubuntu 8.04 server install, selecting the LAMP, OpenSSH and PostgresSQL server options.</p>
<p><strong>Installing Extra Packages that will be required during the install</strong></p>
<p>Some additional packages will need to be installed to handle the installation succesfully.  Running the following commands should take care of this:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> curl
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> php5-cli
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> php5-pgsql
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">apt-get</span> <span style="color: #c20cb9; font-weight: bold;">install</span> php-pear</pre></div></div>

<p><strong>PHP Pear Packages Configuration</strong></p>
<p>In addition to some ubuntu packages, you will need some php packages installed as per the <a href="http://matrix.squiz.net/resources/requirements">matrix prerequisites</a>.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> pear <span style="color: #c20cb9; font-weight: bold;">install</span> DB Mail Mail_Mime XML_HTMLSax XML_Parser Text_Diff</pre></div></div>

<p><strong>Step 2 &#8211; Database Configuration and Preparation</strong></p>
<p>As per the <a href="http://matrix.squiz.net/resources/installation/postgresql-setup">instructions on the matrix site</a>, we need to prepare the database for the installation of the MySource Matrix product.  Now most of the information that I am using to setup the Postgres installation comes straight from the postgres page on the ubuntu community site:</p>
<p><a href="https://help.ubuntu.com/community/PostgreSQL">https://help.ubuntu.com/community/PostgreSQL</a></p>
<p><strong>Creating the database users</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #660033;">-u</span> postgres createuser <span style="color: #660033;">-D</span> <span style="color: #660033;">-P</span> matrix
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #660033;">-u</span> postgres createuser <span style="color: #660033;">-D</span> <span style="color: #660033;">-P</span> matrix_secondary</pre></div></div>

<p>To the prompts regarding superuser and roles, answer no to both questions.  The -P password parameter tells the createuser command that you want to set a password for the user.  Initially I didn&#8217;t use the password parameter but found the matrix database installation failed when I used no password (as such, I ended up having to use the psql console to alter the users).</p>
<p><strong>Creating the database</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #660033;">-u</span> postgres createdb <span style="color: #660033;">-O</span> matrix <span style="color: #660033;">-E</span> SQL_ASCII mysource_matrix</pre></div></div>

<p><strong>Installing the PLPGSQL language into the new database</strong></p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #660033;">-u</span> postgres createlang plpgsql mysource_matrix</pre></div></div>

<p>At this stage we should now have the database installed and available for the matrix installation, so let&#8217;s get cracking with that.</p>
<p><strong>Step 3 &#8211; Matrix MySource Download and Installation</strong></p>
<p>From here, you can pretty much pick up from the matrix installation instructions as per the Squiz site:</p>
<p><a href="http://matrix.squiz.net/resources/installation">http://matrix.squiz.net/resources/installation</a></p>
<p>There are only a few differences:</p>
<ul>
<li>When changing the ownership of the data and cache directories, use the user and group of &#8220;www-data&#8221; instead of &#8220;apache&#8221;.</li>
<li>Configuring hosts on apache on Ubuntu can be done better that what is specified in the installation instructions (see below), so I&#8217;d recommend having a bit of a read on the apache documentation.  But in essence, what you will probably be doing is creating a config file in the /etc/apache2/sites-available directory and then creating a symbolic link to it in the /etc/apache2/sites-enabled directory.</li>
</ul>
<p><strong>Step 4 &#8211; Leaning up your Machine</strong></p>
<p>If you like me have created a virtual machine for your Matrix install, then you probably want to get rid of some of the extra stuff that has been installed as part of an out-of-the-box Ubuntu server installations (using the installation options I indicated towards the beginning of the article).    Based on the 8.04 version of the install, I performed the following steps to clean up a little:</p>
<p><em>TO BE COMPLETED&#8230;</em></p>
<p><strong>Some Extra Notes &#8211; Port Forwarding with VirtualBox<br />
</strong></p>
<p>As I have set up my Matrix install as a VirtualBox virtual machine using NAT networking, it was important to enable port forwarding to enable access to the webserver on the machine (as well as the SSH server).  To assist with this process the following article has some excellent information on how to set this up:</p>
<p><a href="http://www.aviransplace.com/2008/06/12/virtualbox-configuring-port-forwarding-with-nat/">http://www.aviransplace.com/2008/06/12/virtualbox-configuring-port-forwarding-with-nat/</a></p>
<p>To make this process a little quicker, I created a batch file so I could do take care of things with one command:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">SET <span style="color: #007800;">VBOXPATH</span>=C:Program FilesSunxVM VirtualBox
<span style="color: #ff0000;">&quot;%VBOXPATH%VBoxManage&quot;</span> setextradata <span style="color: #000000; font-weight: bold;">%</span>1 <span style="color: #ff0000;">&quot;VBoxInternal/Devices/pcnet/0/LUN#0/Config/%2/Protocol&quot;</span> TCP
<span style="color: #ff0000;">&quot;%VBOXPATH%VBoxManage&quot;</span> setextradata <span style="color: #000000; font-weight: bold;">%</span>1 <span style="color: #ff0000;">&quot;VBoxInternal/Devices/pcnet/0/LUN#0/Config/%2/GuestPort&quot;</span> <span style="color: #000000; font-weight: bold;">%</span>3
<span style="color: #ff0000;">&quot;%VBOXPATH%VBoxManage&quot;</span> setextradata <span style="color: #000000; font-weight: bold;">%</span>1 <span style="color: #ff0000;">&quot;VBoxInternal/Devices/pcnet/0/LUN#0/Config/%2/HostPort&quot;</span> <span style="color: #000000; font-weight: bold;">%</span>4</pre></div></div>

<p>Which allows me to run the following command, instead of having to execute the three separate commands as per the article above:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">VBoxPortForward <span style="color: #ff0000;">&quot;Local Matrix Server&quot;</span> Apache <span style="color: #000000;">8080</span> <span style="color: #000000;">8080</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://distractable.net/how-tos/mysource-matrix-ubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
