<?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>Hugh Lashbrooke</title>
	<atom:link href="http://www.hughlashbrooke.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.hughlashbrooke.com</link>
	<description>I do nerdy things. True story.</description>
	<lastBuildDate>Wed, 16 Nov 2011 14:13:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Project: Phillip Crous Photography</title>
		<link>http://www.hughlashbrooke.com/phillip-crous-photography/</link>
		<comments>http://www.hughlashbrooke.com/phillip-crous-photography/#comments</comments>
		<pubDate>Thu, 29 Sep 2011 08:05:15 +0000</pubDate>
		<dc:creator>Hugh Lashbrooke</dc:creator>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[WooThemes]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.hughlashbrooke.com/?p=442</guid>
		<description><![CDATA[Phillip Crous is a Cape Town based photographer with exceptional skill. His request was for a photoblog that showcased his photographs with not much need for textual content. With only a logo and colour scheme to go on I did all the design and layout myself (along with some helpful ideas from my fiancée) with [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-450" title="Phillip Crous Photography" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/09/philcrous_head.png" alt="Phillip Crous Photography" width="381" height="105" />Phillip Crous is a Cape Town based photographer with exceptional skill. His request was for a photoblog that showcased his photographs with not much need for textual content. With only a logo and colour scheme to go on I did all the design and layout myself (along with some helpful ideas from my fiancée) with some later input from Phillip to make a few changes.</p>
<p><span id="more-442"></span>To reach Phillip&#8217;s goals for the site I used <a title="Wordpress" href="http://wordpress.org/" target="_blank">WordPress</a> (definitely my CMS of choice) and employed the <a title="Exposure - WooThemes" href="http://www.woothemes.com/2009/10/exposure/" target="_blank">Exposure</a> theme by <a title="WooThemes" href="http://www.woothemes.com/" target="_blank">WooThemes</a>. I chose this theme because it has fantastic support for multiple galleries and is easy for the client to manage. I did a lot of customisation of the theme though and as a result it looks and works strikingly differently to the basic functionality. I submitted this website to the WooThemes Showcase and as of 14 November 2011 it is featured there. <a title="Phillip Crous Photography on the WooThemes Showcase" href="http://showcase.woothemes.com/2011/11/phillip-crous-photography/" target="_blank">Check it out here</a>.</p>
<p>For the home page slider I used <a title="SlideDeck" href="http://www.slidedeck.com/">SlideDeck</a> (Pro version) as I find it to be hugely flexible and surprisingly simple to customise and implement. I made a few CSS modifications to the default view it gives, but on the whole I used just what the plugin gave me and it worked smoothly right out of the box.</p>
<p>Because I could handle the design however I wanted, I had a lot of fun building this site and making it look good. My fiancée gave some valuable UI input as well that helped me get the site looking just right for Phillip.</p>
<p>As far as the content on the site goes, that is all in Phillip&#8217;s hands &#8211; I gave him a brief lesson in how to use the WordPress back-end and he seemed to pick it up easily. Along with this was the decision to break up the content into categories and use those for the main navigation. For the type of photoblog that this is, that decision makes complete sense as it throws the user straight into the photos with no need for unnecessary preamble.</p>
<p><strong>Details:</strong></p>
<ul>
<li>URL: <a title="Phillip Crous Photography" href="http://www.phillipcrousphotography.co.za/" target="_blank">http://www.phillipcrousphotography.co.za</a></li>
<li>Platform/Framework: WordPress using Exposure by WooThemes</li>
<li>Javascript library: jQuery</li>
<li>Features: All content managed entirely by client | Home page image slider | Customisable galleries</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.hughlashbrooke.com/phillip-crous-photography/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Project: SARS Calculator</title>
		<link>http://www.hughlashbrooke.com/sars-calculator/</link>
		<comments>http://www.hughlashbrooke.com/sars-calculator/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 13:42:53 +0000</pubDate>
		<dc:creator>Hugh Lashbrooke</dc:creator>
				<category><![CDATA[Portfolio]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[SARS]]></category>

		<guid isPermaLink="false">http://www.hughlashbrooke.com/?p=419</guid>
		<description><![CDATA[I recently tried to work out exactly how much I should be getting taxed and how much I will be getting taxed next year. The South African Revenue Service (SARS) doesn&#8217;t have the most helpful website and the info to help you work this out is hard to come by if you don&#8217;t really know where [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter size-full wp-image-427" title="sars logo" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/08/sars-logo.gif" alt="" width="355" height="86" /></p>
<p style="text-align: left;">I recently tried to work out exactly how much I should be getting taxed and how much I will be getting taxed next year. The <a title="SARS" href="http://www.sars.gov.za/" target="_blank">South African Revenue Service</a> (SARS) doesn&#8217;t have the most helpful website and the info to help you work this out is hard to come by if you don&#8217;t really know where to look. Once I got hold of this info (from a helpful relative, not SARS itself), I decided to build a little tool to help others with the same problem that I was facing. Thus, the <a title="SARS Calculator" href="http://www.sarscalculator.co.za/" target="_blank">SARS Calculator</a> was born.</p>
<p style="text-align: left;"><span id="more-419"></span></p>
<p>It&#8217;s a fairly simple app &#8211; the only somewhat complex bit was getting the calculations to work correctly. The values that it uses to calculate the result are hard-coded straight into the PHP and not drawn from any database. I opted to do it this way because it only requires info for two different years and using a database seemed slightly overkill. I used jQuery to make sure the form only accepted positive integers and no other characters. Aside from all that there&#8217;s not much else that&#8217;s very interesting about the mini project from a technical perspective.</p>
<p>Feel free to use it and please let others know about it (+1, Like and Tweet buttons are on the site).</p>
<p><strong>Details:</strong></p>
<ul>
<li>URL: <a title="SARS Calculator" href="http://www.sarscalculator.co.za/" target="_blank">http://www.sarscalculator.co.za/</a></li>
<li>Javascript library: jQuery</li>
<li>Main features: No database used and all calculations performed on the fly</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.hughlashbrooke.com/sars-calculator/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Premium Android apps now available in South Africa</title>
		<link>http://www.hughlashbrooke.com/premium-android-apps-now-available-in-south-africa/</link>
		<comments>http://www.hughlashbrooke.com/premium-android-apps-now-available-in-south-africa/#comments</comments>
		<pubDate>Thu, 19 May 2011 13:31:18 +0000</pubDate>
		<dc:creator>Hugh Lashbrooke</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Apps]]></category>

		<guid isPermaLink="false">http://www.hughlashbrooke.com/?p=406</guid>
		<description><![CDATA[This isn&#8217;t an especially techie post, but I think it&#8217;s worthwhile mentioning it as I haven&#8217;t seen any other posts about it online. I just discovered this totally by accident as I browsing the Android Market, but us lowly South Africans now have access to the premium (paid for) Android apps! There does, however, seem [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-thumbnail wp-image-407" title="Android Market" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/05/android-market-logo-150x150.png" alt="Android Market" width="150" height="150" />This isn&#8217;t an especially techie post, but I think it&#8217;s worthwhile mentioning it as I haven&#8217;t seen any other posts about it online. I just discovered this totally by accident as I browsing the Android Market, but us lowly South Africans now have access to the premium (paid for) Android apps!</p>
<p><span id="more-406"></span></p>
<p>There does, however, seem to be some restrictions on it &#8211; I&#8217;m not sure what the criteria are, but some apps are available to us while a few others aren&#8217;t. I will update this post when I have an update on that situation. To get the apps just open up the Market app on your phone or head on over to <a title="Android Market" href="http://market.android.com/" target="_blank">http://market.android.com/</a> in your browser and shop to your heart&#8217;s content (or at least, until you find an app that you can&#8217;t buy). We can finally get those beautiful premium apps without having to go through the messy (and often unsuccessful) process of contacting developers directly.</p>
<p>For a list of some of the most useful (and free) Android apps that I&#8217;ve discovered <a title="My top (free) recommended Android apps" href="http://www.hughlashbrooke.com/my-top-free-recommended-android-apps/">have a look here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hughlashbrooke.com/premium-android-apps-now-available-in-south-africa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hiding elements using CSS</title>
		<link>http://www.hughlashbrooke.com/hiding-elements-using-css/</link>
		<comments>http://www.hughlashbrooke.com/hiding-elements-using-css/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 09:54:41 +0000</pubDate>
		<dc:creator>Hugh Lashbrooke</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Layout]]></category>

		<guid isPermaLink="false">http://www.hughlashbrooke.com/?p=387</guid>
		<description><![CDATA[The need to hide elements in an HTML document is fairly common, especially when dealing with things like drop-down menus, so here&#8217;s a run-down of the two best (and only properly semantic) ways to do this using simple CSS properties. These two properties, and their respective values for hiding your chosen element, are: display: none [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-391" title="Hiding elements using CSS" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/04/hiding-place-fail-300x225.jpg" alt="Hiding elements using CSS" width="194" height="146" />The need to hide elements in an HTML document is fairly common, especially when dealing with things like drop-down menus, so here&#8217;s a run-down of the two best (and only properly semantic) ways to do this using simple CSS properties.</p>
<p><span id="more-387"></span>These two properties, and their respective values for hiding your chosen element, are:</p>
<ul>
<li><code>display: none</code></li>
<li><code>visibility: hidden</code></li>
</ul>
<p>The first one is probably known to most, if not all, of you. It is used all over the place and is a simple way of switching an element on or off. If you set an element&#8217;s <code>display</code> value to <code>none</code> then it will still appear in the markup of the page, but its presence will have no effect on the visual display. This property is commonly used when working with Ajax forms or drop-down menus when elements need to temporarily be hidden from view.</p>
<p>The second of these properties is far less common than <code>display: none</code> &#8211; it uses the <code>visibility</code> property. The default value for this property is <code>visible</code>, which just means that the element will show just like normal in the document. If you set it to <code>hidden</code>, however, then it is quite obviously hidden from view. The big difference between this and <code>display: none</code> is that when you set <code>visibility</code> to <code>hidden</code> then the area the element would normally be displayed in is still reserved. What this means in practice is that if you use this method to hide an element that is, for example, 100 px high and 250 px wide then that 100 x 250 px area will just appear as blank space that is unoccupied and all surrounding elements will be displayed as if the content was still there.</p>
<p>There other methods for hiding the content of elements such as setting a left margin of -9999px and various other sneaky settings along those lines, but those are generally not considered best practice and I would not recommend them unless you have no other choice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hughlashbrooke.com/hiding-elements-using-css/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Help needed: Syncing Exchange Calendar with Google Calendar</title>
		<link>http://www.hughlashbrooke.com/help-needed-syncing-exchange-calendar-with-google-calendar/</link>
		<comments>http://www.hughlashbrooke.com/help-needed-syncing-exchange-calendar-with-google-calendar/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 13:30:07 +0000</pubDate>
		<dc:creator>Hugh Lashbrooke</dc:creator>
				<category><![CDATA[Help]]></category>
		<category><![CDATA[Calendar]]></category>
		<category><![CDATA[Exchange]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://www.hughlashbrooke.com/?p=363</guid>
		<description><![CDATA[I know this won&#8217;t be a very informative blog, but I&#8217;m looking for help and thought it would be easiest to explain myself here. I&#8217;m needing to set up my work calendar (Exchange) to automatically sync with my Google Calendar. My current setup is as follows: My work email &#38; calendar are running on an [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-365" title="Google Calendar" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/04/google-calendar-icon.png" alt="Google Calendar" width="205" height="205" />I know this won&#8217;t be a very informative blog, but I&#8217;m looking for help and thought it would be easiest to explain myself here. I&#8217;m needing to set up my work calendar (Exchange) to automatically sync with my Google Calendar. My current setup is as follows:</p>
<p><span id="more-363"></span></p>
<ol>
<li>My work email &amp; calendar are running on an Exchange server.</li>
<li>I use Linux at work (therefore no MS Outlook).</li>
<li>I use Google Calendar to keep track of personal and work appointments (in 2 separate calendars).</li>
<li>I manage my work email in my Gmail by having all my mail forwarded to my personal email address and then labelled correctly (this actually works very well because of Gmail&#8217;s smart filtering and labelling system).</li>
<li>When I am sent an event invite to my work address I cannot respond to the invite in Gmail &#8211; I need to open Outlook Web App (OWA) to do that.</li>
<li>I have an Android phone (HTC Desire HD) and I can receive my Exchange mail and event invites on there too, but when I accept an event it is added to my phone&#8217;s Exchange calendar and not my Google Calendar.</li>
<li>I am OK with using the Exchange app on my phone to respond to meeting invites because it is not a hassle, but I want the events to go into my Google Calendar.</li>
</ol>
<p>So, the most practical solution as far as I can see is to use my HTC&#8217;s native mail app to respond to event invites and have those invites added to my Exchange Calendar like normal, but then have the Exchange Calendar sync with my Google Calendar so the appointments end up just where I want them. Can anyone help me with this? Let me know in the comments or <a title="Contact" href="http://www.hughlashbrooke.com/contact/">drop me a mail</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hughlashbrooke.com/help-needed-syncing-exchange-calendar-with-google-calendar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code Snippet: A custom Twitter feed for your website</title>
		<link>http://www.hughlashbrooke.com/code-snippet-a-custom-twitter-feed-for-your-website/</link>
		<comments>http://www.hughlashbrooke.com/code-snippet-a-custom-twitter-feed-for-your-website/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 08:01:42 +0000</pubDate>
		<dc:creator>Hugh Lashbrooke</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Regex]]></category>
		<category><![CDATA[Snippets]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.hughlashbrooke.com/?p=333</guid>
		<description><![CDATA[If you&#8217;re using a CMS you can simply find a handy plugin that displays your Twitter feed on your site, but if you&#8217;re working in a non-CMS framework then it&#8217;s more tricky. Here&#8217;s a handy piece of code you can use to get your twitter feed as well as any tweets that mention your name. [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.hughlashbrooke.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
<p><img class="alignleft size-thumbnail wp-image-342" title="Twitter" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/twitter-150x150.png" alt="Twitter" width="150" height="150" />If you&#8217;re using a CMS you can simply find a handy plugin that displays your Twitter feed on your site, but if you&#8217;re working in a non-CMS framework then it&#8217;s more tricky. Here&#8217;s a handy piece of code you can use to get your twitter feed as well as any tweets that mention your name. I have also provided a simple function that uses regex to turn any URLs, hash tags or @mentions in your tweets into clickable links.</p>
<p><span id="more-333"></span>Here is the code to get the tweets you need &#8211; I have not stated what each of the lines do as the variable names are fairly self-explanatory, so if you would like a deeper understanding of it then I would recommend having a look directly at the XML that is processed here.</p>
<p><pre class="brush: php">function getTweets($username = false, $count = 5) {
  
  //Fetch data and process response
  $request = &quot;http://search.twitter.com/search.atom?q=$username&quot;;
  $response = file_get_contents($request);
  $response = str_replace(&quot;twitter:&quot;, &quot;&quot;, $response);
  $xml = simplexml_load_string($response);

  //Loop through specified amount of entries
  for($i=0;$i&lt;$count;$i++)
  {
    $id = $xml-&gt;entry[$i]-&gt;id;
    $id_parts = explode(&quot;:&quot;,$id);
    $tweet_id = array_pop($id_parts);

    $account_url = $xml-&gt;entry[$i]-&gt;author-&gt;uri;

    $image_url = getXMLattribute($xml-&gt;entry[$i]-&gt;link[1],&quot;href&quot;);

    $name = trim($xml-&gt;entry[$i]-&gt;author-&gt;name, &quot;)&quot;);

    $name_parts = explode(&quot;(&quot;, $name);

    $real_name = trim(array_pop($name_parts));

    $screen_name = trim(array_pop($name_parts));

    $published_time = strtotime(trim(str_replace(array(&quot;T&quot;,&quot;Z&quot;),&quot; &quot;,$xml-&gt;entry[$i]-&gt;published)));

    $tweet_url = getXMLattribute($xml-&gt;entry[$i]-&gt;link[0],&quot;href&quot;);

    $tweet = $xml-&gt;entry[$i]-&gt;content;
    $tweet = str_replace(array(&quot;&lt;b&gt;&quot;, &quot;&lt;/b&gt;&quot;), &quot;&quot;, $tweet);

    /* Now just create your HTML output */
  }
}</pre></p>
<p>Once you have your tweets you need to make the relevant parts clickable. Unfortunately due to the regex code used in this function I am unable to post the text of the function to do this in the blog post, so instead I have placed it in <a title="Twitify function" href="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/twitify.txt" target="_blank">this text file</a> (opens in a new tab). You simply need to run the tweet content through that function and it will make the URLs, hash tags and @mentions clickable.</p>
<p>UPDATE: You can see these functions in action here: <a title="The Brothers Streep" href="http://www.brothersstreep.com/" target="_blank">http://www.brothersstreep.com/</a> &#8211; in this case I actually used the Twitter handles of all the members of the band, so it includes tweets from (and mentioning) a few different Twitter users.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hughlashbrooke.com/code-snippet-a-custom-twitter-feed-for-your-website/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Using Nutch and Solr to crawl and index the web</title>
		<link>http://www.hughlashbrooke.com/using-nutch-and-solr-to-crawl-and-index-the-web/</link>
		<comments>http://www.hughlashbrooke.com/using-nutch-and-solr-to-crawl-and-index-the-web/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 08:00:53 +0000</pubDate>
		<dc:creator>Hugh Lashbrooke</dc:creator>
				<category><![CDATA[Solr]]></category>
		<category><![CDATA[Nutch]]></category>
		<category><![CDATA[Search]]></category>

		<guid isPermaLink="false">http://www.hughlashbrooke.com/?p=314</guid>
		<description><![CDATA[Nutch and S﻿olr are two solid tools created by the great folks at Apache that you can use to crawl the web (Nutch) and index your crawled data (Solr). There are obviously far more uses for these tools than just indexing random websites and I won&#8217;t go into those in this post, but seeing as though [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.hughlashbrooke.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
            <script type="text/javascript" src="http://www.hughlashbrooke.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p><img class="alignright size-full wp-image-322" title="Solr" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/solr.jpg" alt="Solr" width="230" height="126" /><a title="Nutch" href="http://nutch.apache.org/" target="_blank">Nutch</a> and <a title="Solr" href="http://lucene.apache.org/solr/" target="_blank">S﻿olr</a> are two solid tools created by the great folks at <a title="Apache" href="http://www.apache.org/" target="_blank">Apache</a> that you can use to crawl the web (Nutch) and index your crawled data (Solr). There are obviously far more uses for these tools than just indexing random websites and I won&#8217;t go into those in this post, but seeing as though I struggled to find documentation on all of this when I started using them I thought I&#8217;d put together a quick starter&#8217;s guide to crawling the web with Nutch and using Solr to index and search the data that you have crawled.</p>
<p><span id="more-314"></span>There could be many reasons for needing to do this kind of thing such as creating your own search engine, automatically importing public data into your database, or just trying to show off how sweet it is being a geek. In this starter&#8217;s guide I won&#8217;t go into a huge amount of detail on how these things work &#8211; instead I will tell you exactly what you need to do to run a crawl and the index that data. I will assume you know how to setup your server or it is already done for you.</p>
<ol>
<li>Make sure you have Java installed correctly and the JAVA_HOME and CLASSPATH variables are set up correctly (if you&#8217;re not sure about this then <a title="'Configuring JAVA_HOME and CLASSPATH' search results" href="http://www.google.com/search?sourceid=chrome&amp;ie=UTF-8&amp;q=configuring+java_home+and+classpath" target="_blank">ask Google</a>).</li>
<li>Download and unpack <a title="Nutch" href="http://nutch.apache.org/" target="_blank">Nutch</a> and <a title="Solr" href="http://lucene.apache.org/solr/" target="_blank">Solr</a> into separate folders.</li>
<li>Configure Nutch:
<ul>
<li>Edit <code>NUTCH_ROOT/conf/nutch-default.xml</code> and set the value of <code>http.agent.name</code> to be the name of your crawler. You can then fill in any other info about your crawler that you wish, but it is not necessary.</li>
<li>Create folder <code>NUTCH_ROOT/crawl</code></li>
<li>Create file <code>NUTCH_ROOT/urls/nutch</code> and into it type all the URLs you wish to crawl (one per line)  - make sure to include &#8216;http://&#8217; and the trailing slash.</li>
<li>Edit <code>NUTCH_ROOT/conf/crawl-urlfilter.txt</code> &#8211; beneath the line &#8216;# accept hosts in MY.DOMAIN.NAME&#8217; replace <code>MY.DOMAIN.COM</code> with the first of the URLs you wish to crawl and then make a new line for each of the URLs (formatted in the same way as the first one).</li>
</ul>
</li>
<li>Configure Solr:
<ul>
<li>Copy all the files from the <code>NUTCH_ROOT/conf</code> into <code>SOLR_ROOT/example/solr/conf</code> (overwrite any files it asks you to).</li>
<li>Edit  <code>SOLR_ROOT/example/solr/conf/schema.xml</code> and in line 71 change the <code>stored</code> attribute form <code>false</code> to <code>true</code>.</li>
<li>Edit <code>SOLR_ROOT/example/solr/conf/solrconfig.xml</code> and add the following <em>above</em> the first <code>requestHandler</code> tag:<pre class="brush: xml">&lt;requestHandler name=&quot;/nutch&quot; class=&quot;solr.SearchHandler&quot; &gt;
&lt;lst name=&quot;defaults&quot;&gt;
&lt;str name=&quot;defType&quot;&gt;dismax&lt;/str&gt;
&lt;str name=&quot;echoParams&quot;&gt;explicit&lt;/str&gt;
&lt;float name=&quot;tie&quot;&gt;0.01&lt;/float&gt;
&lt;str name=&quot;qf&quot;&gt;
content^0.5 anchor^1.0 title^1.2
&lt;/str&gt;
&lt;str name=&quot;pf&quot;&gt;
content^0.5 anchor^1.5 title^1.2 site^1.5
&lt;/str&gt;
&lt;str name=&quot;fl&quot;&gt;
url
&lt;/str&gt;
&lt;str name=&quot;mm&quot;&gt;
2&amp;lt;-1 5&amp;lt;-2 6&amp;lt;90%
&lt;/str&gt;
&lt;int name=&quot;ps&quot;&gt;100&lt;/int&gt;
&lt;str name=&quot;q.alt&quot;&gt;*:*&lt;/str&gt;
&lt;str name=&quot;hl.fl&quot;&gt;title url content&lt;/str&gt;
&lt;str name=&quot;f.title.hl.fragsize&quot;&gt;0&lt;/str&gt;
&lt;str name=&quot;f.title.hl.alternateField&quot;&gt;title&lt;/str&gt;
&lt;str name=&quot;f.url.hl.fragsize&quot;&gt;0&lt;/str&gt;
&lt;str name=&quot;f.url.hl.alternateField&quot;&gt;url&lt;/str&gt;
&lt;str name=&quot;f.content.hl.fragmenter&quot;&gt;regex&lt;/str&gt;
&lt;/lst&gt;
&lt;/requestHandler&gt;</pre></li>
</ul>
</li>
<li>Start Solr:
<ul>
<li><code>$ cd SOLR_ROOT/example</code></li>
<li><code>$ java -jar start.jar</code></li>
</ul>
</li>
<li>Start the crawl:
<ul>
<li><code>$ cd NUTCH_ROOT</code></li>
<li>The crawl command has the following options:
<ul>
<li><code>-dir</code> names the directory to put the crawled data into</li>
<li><code>-threads</code> determines the number of threads that will be fetched in parallel (optional)</li>
<li><code>-depth</code> indicates the link depth from the root page that should be crawled</li>
<li><code>-topN</code> determines the maximum number of URLs to be retrieved at each level up to the depth</li>
</ul>
</li>
<li>You can set these numbers to whatever you like, but the general rule is that the higher the numbers are then the more data you will crawl and the longer your crawl will take. This all depends on the setup of your server and what you want to do with your crawl. For example, this is a crawl command that will take a couple of days to complete:<br />
<code>$ bin/nutch crawl urls -dir crawl -depth 20 -topN 2000000</code></li>
</ul>
</li>
<li>Index the crawl results:
<ul>
<li><code>$ bin/nutch solrindex http://HOST_ADDRESS:8983/solr/ crawl/crawldb crawl/linkdb crawl/segments/*</code> (the port number here and in the next point will differ depending on your server set up &#8211; check the Solr wiki for more info about that).</li>
<li>Go to <code>http://HOST_ADDRESS:8983/solr/admin</code> for the default Solr admin panel to search the index. You can also hit the results XML directly by hitting the right URL &#8211; you will see this URL in the address bar when you get to the results.</li>
</ul>
</li>
<li>Profit.</li>
</ol>
<p>Once you&#8217;ve followed all these steps you will have your very own mini search engine. At the moment it will only search the URLs that you specify, but this can be changed and I encourgae you to learn more. Once you&#8217;ve done a bit of reading you will realise the power of Nutch and Solr and the amazing things you can do with them. Unfortunately there isn&#8217;t a huge amount of documentation on how to use these tools that is written in a user-friendly manner, but here are some links that should help get you started:</p>
<ul>
<li><a title="Nutch Wiki" href="http://wiki.apache.org/nutch/" target="_blank">Nutch wiki</a></li>
<li><a title="Solr wiki" href="http://wiki.apache.org/solr/FrontPage" target="_blank">Solr wiki</a></li>
<li><a title="Lucid Imagination" href="http://www.lucidimagination.com/" target="_blank">Lucid Imagination</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.hughlashbrooke.com/using-nutch-and-solr-to-crawl-and-index-the-web/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>How Google&#8217;s 2-step verification process works</title>
		<link>http://www.hughlashbrooke.com/how-googles-2-step-verification-process-works/</link>
		<comments>http://www.hughlashbrooke.com/how-googles-2-step-verification-process-works/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 08:00:24 +0000</pubDate>
		<dc:creator>Hugh Lashbrooke</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://www.hughlashbrooke.com/?p=298</guid>
		<description><![CDATA[Recently, the almighty Google launched a more secure way of logging in to your account &#8211; they call it the 2-step verification process (it&#8217;s not just a clever name, the new login process does actually require 2 steps). The whole thing sounds a bit complex when reading Google&#8217;s description of it, but it&#8217;s really rather [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.hughlashbrooke.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
            <script type="text/javascript" src="http://www.hughlashbrooke.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p><img class="alignleft size-thumbnail wp-image-301" title="Google" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/google_logo-150x150.jpg" alt="Google" width="150" height="150" />Recently, the almighty Google <a title="Google Blog" href="http://googleblog.blogspot.com/2011/02/advanced-sign-in-security-for-your.html" target="_blank">launched</a> a more secure way of logging in to your account &#8211; they call it the 2-step verification process (it&#8217;s not just a clever name, the new login process does actually require 2 steps). The whole thing sounds a bit complex when reading Google&#8217;s description of it, but it&#8217;s really rather simple. Here is a run down of how it works and how it will benefit you.</p>
<p><span id="more-298"></span></p>
<p>While the extra step may sound like more effort just to get into your Google services, in reality it actually makes barely any difference to your daily life. The setup process takes a few minutes and after that you can go about business as usual for the most part.</p>
<p>First off, to activate the 2-step verification process for your Google account you need to go to <a title="Google Account" href="http://www.google.com/accounts/ManageAccount" target="_blank">your account page</a> and click the activation link. This will start you on the process of getting yourself set up and it&#8217;s all rather straight forward &#8211; you just need to follow the on-screen instructions. It does help, however, to know what you&#8217;re getting yourself into when you sign up for this. There are two main areas that are affected when you set up the 2-step process:</p>
<ol>
<li>When you login to your Google account (via Gmail, Reader, Docs, etc.) online you will need to put in a second auto-generated password after you put in your usual one. You will only need to do this once every 30 days on any given computer.</li>
<li>You will need to use an auto-generated password for each of the other applications/devices you login to Google with (e.g. an Android phone, an IM client, etc.).</li>
</ol>
<p><img class="alignright size-thumbnail wp-image-300" title="Google Authenticator" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/auth-screenie-150x150.png" alt="Google Authenticator" width="200" height="200" />The first instance involves installing an app on your phone (available for most handsets) that you open up whenever you need to enter the second password. The app will give you a 6 digit code that you can use as your password. This code will be different each time you open the app, so it is truly random and only accessible by you. When you enter in the code you will have the option of making your computer remember this password for 30 days &#8211; this means that you will only need to do this once a month. If, for some reason, you don&#8217;t have your phone with you at the time you will be required to enter one of 10 codes that they give you at the time that you set up the 2-step process. You will receive these codes in an easily printable format and it is recommended that you keep them in your wallet or somewhere that will make sure you always have them with you. In case you ever lose them, you can regenerate these codes any time you like.</p>
<p>The second instance is a once-off thing and involves generating a random passcode of 16 characters for each of the applications/devices you wish to login on. For example, I have an Android phone so I have generated a passcode for it and entered it into the password field for my Google account on my phone. I also use Pidgin IM for accessing Gtalk and have generated a passcode for that as well. At any point I can revoke the access that these passcodes allow and generate new ones. This gives me handy control over any apps that I may use. So, for example, if my laptop is stolen I can simply revoke the access and my Google apps will be inaccessible.</p>
<p>On top of all of this you can also set up a back-up phone number that you can have your verification codes sent to should you lose absolutely everything else.</p>
<p>That&#8217;s pretty much all the 2-step process entails. It isn&#8217;t too complex, but I found Google&#8217;s description of it to be quite daunting and was hesitant to activate it until I knew more. In discovering more I thought it would be good to organise all the relevant info about it in one post to help anyone else who may be in the same situation as me.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hughlashbrooke.com/how-googles-2-step-verification-process-works/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP 101: Connecting to a MySQL database</title>
		<link>http://www.hughlashbrooke.com/php-101-connecting-to-a-mysql-database/</link>
		<comments>http://www.hughlashbrooke.com/php-101-connecting-to-a-mysql-database/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 13:58:32 +0000</pubDate>
		<dc:creator>Hugh Lashbrooke</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP 101]]></category>

		<guid isPermaLink="false">http://www.hughlashbrooke.com/?p=285</guid>
		<description><![CDATA[I thought it might be useful to occasionally post some basic PHP tips that I wish I had been given when I first started programming. These will feature simple PHP methods that are aimed more at beginners than experienced PHP devs, but they may also serve as handy little reminders for the latter. To start the [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.hughlashbrooke.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
            <script type="text/javascript" src="http://www.hughlashbrooke.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p><img class="alignright size-medium wp-image-290" title="Database" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/what-is-database-300x225.jpg" alt="Database" width="210" height="158" />I thought it might be useful to occasionally post some basic PHP tips that I wish I had been given when I first started programming. These will feature simple PHP methods that are aimed more at beginners than experienced PHP devs, but they may also serve as handy little reminders for the latter. To start the series I thought I&#8217;d give the simplest way to connect to a MySQL database using PHP.</p>
<p><span id="more-285"></span>When using a CMS or some other object-oriented framework there will be a handy database connection object you can use, but for other cases here is a simple method to connect to your MySQL database:</p>
<p><pre class="brush: php">$dbhost = &quot;localhost&quot;;
$dbuser = &quot;username&quot;;
$dbpass = &quot;password&quot;;
$dbname = &quot;database_name&quot;;

$conn = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname);</pre></p>
<p>The host name will only be &#8220;localhost&#8221; (as used in this example) if your database is on the same server that your code is on, otherwise it will be the address of the database server. This will depend on who hosts your website and you will most likely be able to find this information in the control panel for your domain.</p>
<p>Once you have connected to your database you simply need to use the <code>mysql_query()</code> function (using your SQL query as the only parameter) to query the database and get/add/modify the information you need.</p>
<p>If you have any specific issues you would like a hand with then please let me know in the comments or by <a title="Contact" href="http://www.hughlashbrooke.com/contact/">dropping me a mail</a> and I will cover it in my next PHP 101 post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hughlashbrooke.com/php-101-connecting-to-a-mysql-database/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My top (free) recommended Android apps</title>
		<link>http://www.hughlashbrooke.com/my-top-free-recommended-android-apps/</link>
		<comments>http://www.hughlashbrooke.com/my-top-free-recommended-android-apps/#comments</comments>
		<pubDate>Fri, 11 Mar 2011 08:00:23 +0000</pubDate>
		<dc:creator>Hugh Lashbrooke</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Apps]]></category>

		<guid isPermaLink="false">http://www.hughlashbrooke.com/?p=214</guid>
		<description><![CDATA[UPDATE [19 May 2011]: Premium (paid for) Android apps are now available in South Africa. Because I&#8217;m in South Africa, I only have access to the free Android apps and not to the paid ones. While this is a slight drawback, there are in actual fact plenty of free apps in the Android market that I [...]]]></description>
			<content:encoded><![CDATA[            <script type="text/javascript" src="http://www.hughlashbrooke.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushPhp.js"></script>
            <script type="text/javascript" src="http://www.hughlashbrooke.com/wp-content/plugins/wordpress-code-snippet/scripts/shBrushXml.js"></script>
<p><img class="size-medium wp-image-240 alignleft" title="Android Market" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/Market-300x300.jpg" alt="Android Market" width="168" height="168" /><strong>UPDATE [19 May 2011]:</strong> Premium (paid for) Android apps are <a title="Premium Android apps now available in South Africa" href="http://www.hughlashbrooke.com/premium-android-apps-now-available-in-south-africa/">now available in South Africa</a>.</p>
<p>Because I&#8217;m in South Africa, I only have access to the free Android apps and not to the paid ones. While this is a slight drawback, there are in actual fact plenty of free apps in the Android market that I have found invaluable. Here is a simple list of the apps that I have found the most useful.</p>
<p><span id="more-214"></span></p>
<h3><img class="size-full wp-image-247 alignright" title="SMS Popup" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/smspopup.png" alt="SMS Popup" width="48" height="48" />SMS Popup</h3>
<p><a title="SMS Popup" href="http://market.android.com/details?id=net.everythingandroid.smspopup" target="_blank">App details in market</a></p>
<p>This is a basic app that is a must have for any Android phone. As the name suggests, it generates a popup box whenever you receive an SMS (in much the same way that the iPhone does). It has various customisation and privacy options that allow you to make it even more useful. It&#8217;s an app that no Android phone can be without.</p>
<h3><img class="alignright size-full wp-image-255" title="Startup Cleaner" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/startup.png" alt="Startup Cleaner" width="48" height="48" />Startup Cleaner</h3>
<p><a title="Startup Cleaner" href="http://market.android.com/details?id=com.bright.startup2" target="_blank">App details in market</a></p>
<p>While I&#8217;ve already outlined in <a title="Why task killers are bad for your Android phone" href="http://www.hughlashbrooke.com/why-task-killers-are-bad-for-your-android-phone/" target="_blank">this post</a> why you should never use a task killer on your Android phone, I do highly recommend this app to make sure those pesky default apps you never use do not even start in the first place. That annoying Stocks app, for example &#8211; I never use it, but it&#8217;s always running on my phone. With Startup Cleaner you can stop it from ever starting and using up system resources. Once you have selected the apps you wish to block, you will need to restart your phone for the changes to take effect.</p>
<h3><img class="alignright size-full wp-image-261" title="ConnectBot" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/connectbot.png" alt="ConnectBot" width="48" height="48" />ConnectBot</h3>
<p><a title="ConnectBot" href="http://market.android.com/details?id=org.connectbot" target="_blank">App details in market</a></p>
<p>The other day I was on the train on the way to work and I got an SMS saying there was an emergency on one of our sites. From previous experience with this same issue I knew that the way to fix it is to simply restart the server. Because I had ConnectBot installed I could easily SSH into the server and restart it &#8211; the whole process took about 30 seconds and the problem was solved. ConnectBot is easily the most powerful SSH client that I&#8217;ve discovered. If you manage servers or even if you just want to impress your friends with how geeky you can be, then this app is perfect.</p>
<h3><img class="alignright size-full wp-image-263" title="Gmote" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/gmote_logo_small.png" alt="Gmote" width="48" height="48" />Gmote</h3>
<p><a title="Gmote" href="http://market.android.com/details?id=org.gmote.client.android" target="_blank">App details in market</a></p>
<p>Quite simply, Gmote turns your phone into a remote control for your PC and it works on Windows, Mac and Linux. It operates over WiFi, so you don&#8217;t need a Bluetooth connection &#8211; you just need an active wireless network. You need to install the Gmote server on your computer (a 23 MB download from <a title="Gmote website" href="http://www.gmote.org/" target="_blank">their site</a>) and tell it where you keep your media files. The app on your phone picks up the server&#8217;s existence immediately and you can browse your media files on your phone and select to either play them on the phone itself or on your PC. The playback is smooth and selecting files from your phone has an immediate effect on your PC &#8211; there&#8217;s little to no lag at all.</p>
<h3><img class="alignright size-full wp-image-264" title="Smart Shortcuts" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/smartshortcuts-e1299757691918.jpg" alt="Smart Shortcuts" width="48" height="48" />Smart Shortcuts</h3>
<p><a title="Smart Shortcuts" href="http://market.android.com/details?id=com.rhmsoft.shortcuts" target="_blank">App details in market</a></p>
<p>There are a few apps that perform a similar function to Smart Shortcuts, but this is definitely the best that I&#8217;ve used. You can use it to create shortcuts on your home screen that open up a popup filled with links to whatever you like. You can include apps, internet bookmarks, contacts, files, folders or any combination thereof. It&#8217;s a great app for saving space on your home screen and grouping your apps in handy little links.</p>
<h3><img class="alignright size-full wp-image-265" title="WhatsApp" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/whatsapp-e1299758848836.png" alt="WhatsApp" width="48" height="48" />WhatsApp</h3>
<p><a title="WhatsApp" href="http://market.android.com/details?id=com.whatsapp" target="_blank">App details in market</a></p>
<p>WhatsApp is a messaging client that automatically links into your phone&#8217;s contacts list and allows you to message any of them who also have WhatsApp installed. If you&#8217;ve ever user BlackBerry&#8217;s native messaging service, then you&#8217;ll know exactly how this would work. It&#8217;s customisable, easy to use and will save you a ton of money on your phone bill. A huge advantage of it is that you can chat to anyone who has the app installed no matter what phone they have &#8211; it works across Android, iPhone, Blackberry and Nokia.</p>
<h3><img class="alignright size-full wp-image-262" title="DroidStats" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/droidstats.png" alt="DroidStats" width="48" height="48" />DroidStats</h3>
<p><a title="DroidStats" href="http://market.android.com/details?id=nitro.phonestats" target="_blank">App details in market</a></p>
<p>Ever wondered how close you are to your SMS, data or call limits for the month? DroidStats will easily keep track of this info for you and also comes with various widgets that enable you to see that info right on your home screen. It also includes a handy feature that will estimate how close you will get to your limits by the end of the month based on your current usage. It&#8217;s basically a really useful tracking tool and will help keep you in check when it comes to saving money.</p>
<h3><img class="alignright size-full wp-image-258" title="App 2 SD Free" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/app2sd-e1299758938598.png" alt="App 2 SD Free" width="48" height="48" />App 2 SD Free</h3>
<p><a title="App 2 SD Free" href="http://market.android.com/details?id=com.a0soft.gphone.app2sd" target="_blank">App details in market</a></p>
<p>Some Android phones (the HTC Desire in particular) don&#8217;t have a huge amount of native hard drive space &#8211; they rely on the SD card for storage. In Android 2.2+ you are able to move some apps to your SD card in order to free up space on your hard drive. This will be an app specific option and depends on the app developer and whether they included that option. App 2 SD makes it easy to find out which apps are able to moved to the SD card and then move them across. It will also notify you if a freshly installed app can be moved as soon as it is installed.</p>
<h3><img class="alignright size-full wp-image-260" title="AVG Antivirus" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/avg-e1299758972707.png" alt="AVG Antivirus" width="48" height="48" />AVG Antivirus</h3>
<p><a title="AVG Antivirus" href="http://market.android.com/details?id=com.antivirus" target="_blank">App details in market</a></p>
<p>In this day and age, almost all your systems need an antivrius program of some kind &#8211; who better to trust to protect your Android device than <a title="AVG Antivirus website" href="http://www.avg.com/" target="_blank">AVG</a>? This app runs in the background scanning any received data including apps,downloads, SMSs and MMSs. It&#8217;s unobtrusive and will alert you to anything suspicious. There&#8217;s no reason not to install it really.</p>
<h3><img class="alignright size-full wp-image-259" title="Auto WiFi Off" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/autowifioff-e1299759015618.png" alt="Auto WiFi Off" width="48" height="48" />Auto WiFi Off</h3>
<p><a title="Auto WiFi Off" href="http://market.android.com/details?id=ws.inaction.android.autowifioff" target="_blank">App details in market</a></p>
<p>One of the main reasons for your phone battery depleting rapidly will be the continued use of WiFi even when you are not actually connected to a WiFi network. This simple little app monitors your WiFi usage and when you have been disconnected from a network for a specified period of time (30 seconds in my case) it will switch your WiFi antenna off. This will make a huge difference to your battery life. You will have to switch your WiFi on again when you return to a network, but that&#8217;s a small price to pay for that extra battery life.</p>
<h3><img class="alignright size-full wp-image-283" title="Elixir" src="http://www.hughlashbrooke.com/wp-content/uploads/2011/03/elixir.png" alt="Elixir" width="48" height="48" />Elixir</h3>
<p><a title="Elixir" href="http://market.android.com/details?id=bt.android.elixir" target="_blank">App details in market</a></p>
<p>Last, but certainly not least, is Elixir &#8211; this is the most user-friendly system monitor app that I&#8217;ve used so far. After searching for one that would give me hardware and system info in an easy to understand way I finally discovered this. If you want to know more about how your phone is running then this is the app for you. It comes with customisable widgets that you can use to view info and also switch phone features on or off.</p>
<p>This list is by no means complete and there are plenty more apps that are worthwhile, but I thought I&#8217;d keep this list to just a few to make it easier to digest. There are also paid versions of some of these apps, but they are sadly inaccessible in South Africa. If you have any more apps you can recommend then put them in the comments &#8211; the more functional we can make our phones the better.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hughlashbrooke.com/my-top-free-recommended-android-apps/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

