<?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>Werx Limited &#187; it industry</title>
	<atom:link href="http://werxltd.com/wp/category/it-industry/feed/" rel="self" type="application/rss+xml" />
	<link>http://werxltd.com/wp</link>
	<description>We make IT work.</description>
	<lastBuildDate>Thu, 29 Jul 2010 19:00:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>HipHop for PHP</title>
		<link>http://werxltd.com/wp/2010/04/29/hiphop-for-php/</link>
		<comments>http://werxltd.com/wp/2010/04/29/hiphop-for-php/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 12:00:15 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[c++]]></category>
		<category><![CDATA[it industry]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[high performance]]></category>
		<category><![CDATA[hiphop]]></category>
		<category><![CDATA[web scale]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=573</guid>
		<description><![CDATA[Earlier this year Facebook developers caused quite a stir in the PHP community by releasing HipHop, the central piece in their high-performance arsenal. Here is the video of the initial announcement along with some juicy technical details: If you are interested in seeing how your PHP project fares when run through HipHop, check out the [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier this year <a href="http://developers.facebook.com/blog/post/358">Facebook developers</a> caused quite a stir in the PHP community by releasing <a href="http://en.wikipedia.org/wiki/HipHop_(software)">HipHop</a>, the central piece in their high-performance arsenal.</p>
<p><a href="http://www.ustream.tv/recorded/4409735">Here is the video</a> of the initial announcement along with some juicy technical details:<br />
<object id="utv946196" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="386" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="utv_n_687056" /><param name="flashvars" value="loc=%2F&amp;autoplay=false&amp;vid=4409735&amp;locale=en_US" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.ustream.tv/flash/video/4409735" /><embed id="utv946196" type="application/x-shockwave-flash" width="480" height="386" src="http://www.ustream.tv/flash/video/4409735" allowscriptaccess="always" allowfullscreen="true" flashvars="loc=%2F&amp;autoplay=false&amp;vid=4409735&amp;locale=en_US" name="utv_n_687056"></embed></object></p>
<p>If you are interested in seeing how your PHP project fares when run through HipHop, check out the official <a href="http://github.com/facebook/hiphop-php">HipHop project page</a>.</p>
<p>With tools like HipHop, scripting languages like PHP are no longer subject to the charges of gross computational inefficiency. In short, it&#8217;s a great day to be a web developer.</p>
]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2010/04/29/hiphop-for-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A few helpful bash command-line one-liners</title>
		<link>http://werxltd.com/wp/2010/03/30/a-few-helpful-bash-command-line-one-liners/</link>
		<comments>http://werxltd.com/wp/2010/03/30/a-few-helpful-bash-command-line-one-liners/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 12:00:47 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[it industry]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=545</guid>
		<description><![CDATA[[HT Peter, commandlinefu] Query SVN log history and filter by username svn log &#124; sed -n '/username/,/-----$/ p' Run the last command as root sudo !! Save a file you edited in vim without the needed permissions :w !sudo tee % Why is this command so awesome? Peter described it quite well: This happens to [...]]]></description>
			<content:encoded><![CDATA[<p>[HT <a href="http://www.catonmat.net/blog/top-ten-one-liners-from-commandlinefu-explained/">Peter</a>, <a href="http://www.commandlinefu.com/commands/browse/sort-by-votes">commandlinefu</a>]</p>
<p>Query SVN log history and filter by username</p>
<pre class="brush:bash">svn log | sed -n '/username/,/-----$/ p'</pre>
<p>Run the last command as root</p>
<pre class="brush:bash">sudo !!</pre>
<p>Save a file you edited in vim without the needed permissions</p>
<pre class="brush:bash">:w !sudo tee %</pre>
<p>Why is this command so awesome? Peter described it quite well:</p>
<blockquote><p>This happens to me way too often. I open a system config file in vim and edit it just to find out that I don’t have permissions to save it. This one-liner saves the day. Instead of writing the while to a temporary file :w /tmp/foobar and then moving the temporary file to the right destination mv /tmp/foobar /etc/service.conf, you now just type the one-liner above in vim and it will save the file.</p></blockquote>
<p>Change to the previous working directory</p>
<pre class="brush:bash">cd -</pre>
<p>Run the previous shell command but replace string “foo” with “bar”</p>
<pre class="brush:bash">^foo^bar^</pre>
<p>Find the last command that begins with “whatever,” but avoid running it</p>
<pre class="brush:bash">!whatever:p</pre>
<p>Copy your public-key to remote-machine for public-key authentication</p>
<pre class="brush:bash">ssh-copy-id remote-machine</pre>
<p>Capture video of a linux desktop</p>
<pre class="brush:bash">ffmpeg -f x11grab -s wxga -r 25 -i :0.0 -sameq /tmp/out.mpg</pre>
]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2010/03/30/a-few-helpful-bash-command-line-one-liners/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s the best way to make sure my data is safe?</title>
		<link>http://werxltd.com/wp/2010/03/18/whats-the-best-way-to-make-sure-my-data-is-safe/</link>
		<comments>http://werxltd.com/wp/2010/03/18/whats-the-best-way-to-make-sure-my-data-is-safe/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 12:30:46 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[it industry]]></category>
		<category><![CDATA[data storage]]></category>
		<category><![CDATA[hard drives]]></category>
		<category><![CDATA[network attached storage]]></category>
		<category><![CDATA[online backup]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=537</guid>
		<description><![CDATA[I get asked many times from friends and family what the best storage solution is for ensuring data they find to be critical is not lost or corrupted. Whatever storage solution you decide to use it needs to be unobtrusive and largely automated because, if not, then you&#8217;ll find out at the worst possible time [...]]]></description>
			<content:encoded><![CDATA[<p>I get asked many times from friends and family what the best storage solution is for ensuring data they find to be critical is not lost or corrupted.</p>
<p>Whatever storage solution you decide to use it needs to be unobtrusive and largely automated because, if not, then you&#8217;ll find out at the worst possible time (usually in a crisis) that actually <a href="http://www.joelonsoftware.com/items/2009/12/14.html">recovering your data</a> is nearly impossible and often times, incomplete.</p>
<p>The most unobtrusive solution I&#8217;ve found so far is to use a <a href="http://en.wikipedia.org/wiki/Network-attached_storage">Network Attached Storage</a> solution. The one I use and highly recommend is the <a href="http://www.dlink.com/products/?pid=666">D-Link DNS-321</a> which accepts standard SATA drives (which means they are fast and reliable) in a <a href="http://en.wikipedia.org/wiki/RAID">RAID</a>-1 configuration. <a href="http://en.wikipedia.org/wiki/RAID#RAID_1">RAID-1</a> means the drives are mirrored, meaning the data is automatically duplicated to two internal drives. Just about any NAS system will work but make sure it includes RAID (most don&#8217;t) and isn&#8217;t simply a more fancy external hard drive.</p>
<p>Being attached a network attached device also gives you the benefit of not having to rely on too many additional moving parts. For a long time I used to use spare computer systems as storage units but what I quickly found out is that the individual parts in them posed as multiple unnecessary points of failure. Motherboards, RAM, even graphics cards can cause significant headaches when all you care about is the hard drives and the data they contain.</p>
<p>In fact, since Google&#8217;s high powered cloud computing infrastructure runs on common hardware like the kind you and I use, it is significant to note <a href="http://www.datacenterknowledge.com/archives/2008/05/30/failure-rates-in-google-data-centers/">the hardware failure rate</a> they discovered from constantly pushing common hardware to it&#8217;s limits over long periods of time. This simply means that when you are planning a computational strategy (in this case, storage of sensitive data) you need to plan for failure instead of hoping for the best.</p>
<p>In contrast, having a system that only consists of a minimal operating system and two drives should be able to give you enough time to replace one drive if/when the other one fails and the NAS unit itself is cheap enough that you could easily have a spare mothballed for the rainy day when you&#8217;ll need it.</p>
<p>It&#8217;s also a good idea to keep a copy of your data in an offsite location. The principle being that if one place storing your data were flattened then the you should be able to recover from the offsite location. The best way to achieve this is through a continuous online storage solution. I personally don&#8217;t use an online storage solution but some things to look for in one would be the backing company&#8217;s reliability, whether they back your data up to a cloud or a single server, and how well put together their interface software is. Try the free services first, chances are that if they are really as good as they claim to be (and they all claim to be good) you&#8217;ll quickly find out during the trial period (which often is a certain amount of allowed data storage). <a href="http://www.readwriteweb.com/archives/free_online_storage_services.php">Here are a few free ones</a>, I have used box.net before (for random file storage, not for regular automated backups) and can say it is pretty good.</p>
<p>I&#8217;ve also adopted the strategy of using as many online solutions (such as Gmail for email) which allow me to leverage reliable 3rd party clouds which provide inherent protection from data loss and provide the added benefit of allowing me to access my data from a wide variety of computers without having to sync data between every system I want to use.</p>
<p>Finally, focus on only backing up the files you know you will need. There is no reason to back up the entire computer in terms of applications, operating system, etc. Backing up unnecessary data will only serve to max out your storage capacity and quickly overtax your backup solution. Instead, plan on replacing your whole PC (and the operating system it uses, but keep a copy of the applications you use) in the event of catastrophic data loss. If you stick with reasonably reliable hardware your failure rate should be much higher than Google&#8217;s (3-4 years). Average costs of new and decent systems are low enough now that treating a computer as a disposable device (like a cell phone) isn&#8217;t all too uncommon or that bad of an idea.</p>
]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2010/03/18/whats-the-best-way-to-make-sure-my-data-is-safe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Governments calling citizens to ditch Internet Explorer</title>
		<link>http://werxltd.com/wp/2010/01/28/governments-calling-citizens-to-ditch-internet-explorer/</link>
		<comments>http://werxltd.com/wp/2010/01/28/governments-calling-citizens-to-ditch-internet-explorer/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 12:00:26 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[hosting]]></category>
		<category><![CDATA[it industry]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[malware]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=471</guid>
		<description><![CDATA[Google was recently hit by an exploit McAfee has named &#8220;Aurora&#8221;. This exploit involves all versions of Internet Explorer (though version 6 is getting most of the attention) which has prompted the governments of France and Germany to warn it&#8217;s citizens not to use Internet Explorer at all. Microsoft initially tried to claim that this exploit was trivial [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://siblog.mcafee.com/cto/operation-“aurora”-hit-google-others/">Google was recently hit</a> by an exploit <a href="http://www.avertlabs.com/research/blog/index.php/2010/01/14/more-details-on-operation-aurora/">McAfee has named &#8220;Aurora&#8221;</a>. This exploit involves all versions of Internet Explorer (though version 6 is getting most of the attention) which has prompted <a href="http://www.darkreading.com/security/vulnerabilities/showArticle.jhtml?articleID=222301436&amp;cid=RSSfeed_DR_News">the governments of France and Germany to warn it&#8217;s citizens</a> not to use Internet Explorer at all.</p>
<p>Microsoft initially tried to claim that this exploit was trivial but has since <a href="http://www.microsoft.com/technet/security/bulletin/MS10-002.mspx">issued an out-of-cycle emergency patch</a> for all versions of Internet Explorer.</p>
<p>Looks like now is the perfect time to switch to one of the more superior browsers like <a href="http://www.google.com/chrome">Chrome</a> or <a href="http://www.getfirefox.com">Firefox</a>.</p>
<p>Here&#8217;s a video detailing <a href="http://praetorianprefect.com/archives/2010/01/the-aurora-ie-exploit-in-action/">how this hack works in action</a> in case you are like me and interested in the juicy technical details:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="178" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=8771582&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="178" src="http://vimeo.com/moogaloop.swf?clip_id=8771582&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=1&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2010/01/28/governments-calling-citizens-to-ditch-internet-explorer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passwords revisited</title>
		<link>http://werxltd.com/wp/2010/01/26/passwords-revisited/</link>
		<comments>http://werxltd.com/wp/2010/01/26/passwords-revisited/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 12:00:13 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[hosting]]></category>
		<category><![CDATA[it industry]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[passwords]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=468</guid>
		<description><![CDATA[An analysis of 32million leaked passwords provided some interesting insights into the password selection practices of users. Among the key findings are: The shortness and simplicity of passwords means many users select credentials that will make them susceptible to basic forms of cyber attacks known as “brute force attacks.” Nearly 50% of users used names, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.net-security.org/secworld.php?id=8742">An analysis of 32million leaked passwords</a> provided some interesting insights into the password selection practices of users. Among the key findings are:</p>
<blockquote>
<ul>
<li>The shortness and simplicity of passwords means many users select credentials that will make them susceptible to basic forms of cyber attacks known as “brute force attacks.”</li>
<li>Nearly 50% of users used names, slang words, dictionary words or trivial passwords (consecutive digits, adjacent keyboard keys, and so on). The most common password is “123456”.</li>
<li>Recommendations for users and administrators for choosing strong passwords.</li>
</ul>
</blockquote>
<p>Also, here are the top 10 most commonly used passwords they found:</p>
<blockquote><p>1. 123456<br />
2. 12345<br />
3. 123456789<br />
4. Password<br />
5. iloveyou<br />
6. princess<br />
7. rockyou<br />
8. 1234567<br />
9. 12345678<br />
10. abc123</p></blockquote>
<p>I&#8217;ve <a href="http://werxltd.com/wp/2010/01/12/password-policy-creating-and-remembering-strong-passwords/">said it before</a>, the first step in computer security is having a strong password policy.</p>
]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2010/01/26/passwords-revisited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taming the blogosphere with Google Reader</title>
		<link>http://werxltd.com/wp/2010/01/05/taming-the-blogosphere-with-google-reader/</link>
		<comments>http://werxltd.com/wp/2010/01/05/taming-the-blogosphere-with-google-reader/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 12:00:25 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[hosting]]></category>
		<category><![CDATA[it industry]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[rss reader]]></category>
		<category><![CDATA[social media]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=415</guid>
		<description><![CDATA[What are blogs? Many of you are wondering what the big deal is with blogs. Well here is a short video on blogs and why they are important/useful: What&#8217;s so great about blogs? Aside from being able to access specialized information put out on a regular basis, there is one other reason I enjoy reading [...]]]></description>
			<content:encoded><![CDATA[<h2>What are blogs?</h2>
<p>Many of you are wondering what the big deal is with blogs. Well <a href="http://video.google.com/videoplay?docid=5980861656829941065#docid=3809351315039423858">here is a short video on blogs</a> and why they are important/useful:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/NN2I1pWXjXI&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/NN2I1pWXjXI&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>What&#8217;s so great about blogs?</h2>
<p>Aside from being able to access specialized information put out on a regular basis, there is one other reason I enjoy reading blogs and consider them to be an essential element in our modern forms of communication.</p>
<p>Blogs help you connect with people.</p>
<p>You learn a lot about someone&#8217;s character, thoughts, and passions if you follow what they say on their blog. The trouble is that since blogs are generally authored by one person on individual website it can become time consuming and cumbersome to visit each blog you&#8217;re interested in to check for and read any new posts.</p>
<h2>How can I keep up with blogs?</h2>
<p>The easiest tool I&#8217;ve found to help bring a variety of different blogs together into one place is by utilizing the <a href="http://en.wikipedia.org/wiki/RSS">RSS feed</a> offered by most blogs.</p>
<p><a href="http://www.google.com/reader/">Google Reader</a> is a web-based <a href="http://en.wikipedia.org/wiki/Aggregator">RSS reader</a> which requires a <a href="https://www.google.com/accounts/NewAccount">Google account</a> and a little bit of setup, but once you get it going its pretty much automated and will allow you to check a number of blogs without having to spend time visiting each and every website to get updates.</p>
<p><a href="http://googlereader.blogspot.com/2009/01/google-reader-for-beginners.html">Here is a short video to help you get started</a> with Google Reader:<br />
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/PvKFP67GwSY&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/PvKFP67GwSY&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2010/01/05/taming-the-blogosphere-with-google-reader/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hacking your router for effective internet monitoring</title>
		<link>http://werxltd.com/wp/2009/12/01/hacking-your-router-for-effective-internet-monitoring/</link>
		<comments>http://werxltd.com/wp/2009/12/01/hacking-your-router-for-effective-internet-monitoring/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 12:00:42 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[it industry]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[dd-wrt]]></category>
		<category><![CDATA[firmware]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[openwrt]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[wrt54gl]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=245</guid>
		<description><![CDATA[The Why: Preamble Working in the information technology sector, one of the most common questions I get asked by parents is about monitoring internet access of their children.1 Most parents want to know what their children are doing online but also recognize that most off-the-shelf products are just as easy to disable or circumvent (or are [...]]]></description>
			<content:encoded><![CDATA[<h2>The Why: Preamble</h2>
<p>Working in the information technology sector, one of the most common questions I get asked by parents is about monitoring internet access of their children.<sup>1</sup></p>
<p>Most parents want to know what their children are doing online but also recognize that most off-the-shelf products are just as easy to disable or circumvent (or are far more restrictive/bloated than they want) as they are to install or operate. And sadly, <a href="http://www.mcafee.com/us/enterprise/products/email_and_web_security/web/web_gateway.html">enterprise solutions</a> that capture and control network traffic at the most basic level (making circumvention next to impossible) is still very expensive and therefore out of reach for the average family.</p>
<p>What I needed was a cheap and hackable router that I could modify to send captured URLs to a central source for storage and processing.</p>
<h2>The What: WRT54G</h2>
<p><a href="http://books.google.com/books?id=GBtJdvMeAJQC&amp;dq=Linksys+WRT54G+Ultimate+Hacking&amp;printsec=frontcover&amp;source=bn&amp;hl=en&amp;ei=06oTS_GDHpC1tgfyqeCsCQ&amp;sa=X&amp;oi=book_result&amp;ct=result&amp;resnum=4&amp;ved=0CB4Q6AEwAw#v=onepage&amp;q=&amp;f=false"><img class="alignright size-full wp-image-264" style="margin: 5px;" title="Linksys-WRT54G-Ultimate-Hacking" src="http://werxltd.com/wp/wp-content/uploads/2009/11/Linksys-WRT54G-Ultimate-Hacking.jpg" alt="Linksys-WRT54G-Ultimate-Hacking" width="210" height="258" /></a>After studying my options I remembered reading a lot about the Linksys WRT54G-series routers and how they were originally based on a heavily modified version of Linux and how <a href="http://www.linuxinsider.com/story/43996.html?wlc=1259579841">Linksys made headlines</a> when it lost a court case regarding the GPLed code it used in their router&#8217;s firmware.</p>
<p>So I did a little digging.</p>
<p>What I found was a whole router-hacking subculture built around the WRT54G. While it seems that much of the initial fervor has subsided, many of the packages show a last update time of 2007 or so, the documentation is still valid for the most part. The most popular projects which provide custom firmware are the <a href="http://openwrt.org/">OpenWRT</a> and DD-WRT. While OpenWRT is the original, I found DD-WRT to be a lot more polished and (as we&#8217;ll see later) configurable without much headache.</p>
<p>It&#8217;s important to note here that the WRT54G has many variants and its easy to fall into the trap of thinking that any old WRT54G will do but a little diligence and <a href="http://en.wikipedia.org/wiki/Linksys_WRT54G_series#Hardware_and_revisions">study of the differences between the hardware revisions</a> will certainly save you time and money.</p>
<p>After buying a few different routers and bricking one (a Buffalo AirStation WHR-HP-54G<sup>2</sup> ) and a false start with a newer WRT54G v7 (anyone need a highly configurable, albeit not-very-hackable router?) I discovered that the best router for hacking is the <a href="http://www.linksysbycisco.com/US/en/products/WRT54GL">WRT54GL</a> (which was designed by Linksys to allow for user modifications).</p>
<h2>The How: URLSnarf and custom shell scripts</h2>
<p>Space on a router is very limited. On the WRT54GL model I eventually ended up using I had 4Megs of space to work with.</p>
<p>The first order of business was to find a package that could monitor all of the network connections (wired and wireless) on the router and capture requested URLs. For this task I discovered  that <a href="http://www.irongeek.com/i.php?page=backtrack-3-man/urlsnarf">URLSnarf</a>, part of the <a href="http://en.wikipedia.org/wiki/DSniff">dsniff</a> <a href="http://downloads.openwrt.org/whiterussian/newest/packages/">OpenWrt package</a>, worked quite well.</p>
<p>To install packages I used DD-WRT&#8217;s <a href="http://www.bitsum.com/firmware_mod_kit.htm">firmware modification kit</a> which allowed me to simply add the scripts and packages I wanted without having to recompile everything.</p>
<p>Next I needed to transform the captured URL into a URLencoded string in order to send it to my monitoring service via a simple wget request. Initially I tried using several variations of user-generated Python and PHP packages but they both took up far more space than I could afford so, instead, I searched for a pure command-line based solution.</p>
<p>After some more digging I <a href="http://www.unix.com/shell-programming-scripting/59936-url-encoding.html">found a handy sed substitution script</a> that worked like a charm. The script worked in two parts, the first one being the substitution script (/usr/bin/urlencode.sed):</p>
<pre class="brush:bash">s/%/%25/g
s/ /%20/g
s/ /%09/g
s/!/%21/g
s/"/%22/g
s/#/%23/g
s/\$/%24/g
s/\&amp;/%26/g
s/'\''/%27/g
s/(/%28/g
s/)/%29/g
s/\*/%2a/g
s/+/%2b/g
s/,/%2c/g
s/-/%2d/g
s/\./%2e/g
s/\//%2f/g
s/:/%3a/g
s/;/%3b/g
s//%3e/g
s/?/%3f/g
s/@/%40/g
s/\[/%5b/g
s/\\/%5c/g
s/\]/%5d/g
s/\^/%5e/g
s/_/%5f/g
s/`/%60/g
s/{/%7b/g
s/|/%7c/g
s/}/%7d/g
s/~/%7e/g
s/	/%09/g</pre>
<p>and the command line to use it:</p>
<pre class="brush:bash">sed -f urlencode.sed</pre>
<p>To tie it all together, we can pass captured URLs to it via pipes from the command-line with:</p>
<pre class="brush:bash">urlsnarf | sed -f urlencode.sed</pre>
<p>At this point, the only missing link of the capture chain is a script to continually read from the command line and send the urlencoded capture data to our storage application (described in the next part). For this task I used the following script (/usr/bin/urlmon.sh):</p>
<pre class="brush:bash">HOSTNAME=`hostname`
while read url; do
    DATE=`date +%s`
    echo $(wget -q -O- "http://myapp.appspot.com/log?l=$url&amp;h=$HOSTNAME&amp;t=$DATE")
done

exit 0</pre>
<p>Finally, we need to have the router start listening for URLs as soon as it is booted. In a Linux environment this is generally done by init scripts. Since our router has limited capabilities, we don&#8217;t need to write a full init script. Here is the slimmed down <a href="http://www.debian-administration.org/article/Making_scripts_run_at_boot_time_with_Debian">init script</a> I used (/etc/init.d/S50urlmon):</p>
<pre class="brush:bash">#!/bin/sh

/usr/sbin/urlsnarf -v "/(192.168.1.1|https\://myapp\.appspot\.com)/" | sed -f /usr/bin/urlencode.sed | /usr/bin/urlmon.sh</pre>
<h2>The Where: Google App Engine</h2>
<p>I&#8217;ve been itching to try out <a href="http://code.google.com/appengine/">Google&#8217;s App Engine</a> for a while now and this project seemed to be a great fit since I didn&#8217;t know how much data to expect and I needed my receiving/processing/display application to be highly available and scalable. Especially if this works well enough that others might want to use it.</p>
<p>Since my initial phase is to merely capture the URLs requested from devices behind the router, and since the capture process should be as efficient and lean as possible (I don&#8217;t want the router to take very long logging a URL when it&#8217;s primary job is to retrieve that URL for the initial requester) I decided to make a simple Java servlet which simply takes the URLencoded log line generated by URLSnarf.</p>
<p>Google App Engine uses <a href="http://en.wikipedia.org/wiki/Java_Data_Objects">Java Data Objects</a> enhanced by <a href="http://www.datanucleus.org/">DataNucleus</a> to store data in Google&#8217;s massive cluster. Here is the annotated JDO (LogLine.java) I used to store the captured URL:</p>
<pre class="brush:java">import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class LogLine {
	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Long id;

	@Persistent
	private String host;

	@Persistent
	private Long time;

	@Persistent
	private String line;

	public void setId(Long id) {
		this.id = id;
	}

	public Long getId() {
		return id;
	}

	public void setLine(String line) {
		this.line = line;
	}

	public String getLine() {
		return line;
	}

	public String getHost() {
		return host;
	}

	public void setHost(String host) {
		this.host = host;
	}

	public Long getTime() {
		return time;
	}

	public void setTime(Long time) {
		this.time = time;
	}
}</pre>
<p>And here is the <a href="http://www.apl.jhu.edu/~hall/java/Servlet-Tutorial/">servlet</a> that processes the GET request (containing the captured URL in <a href="http://httpd.apache.org/docs/1.3/logs.html#common">Apache Common Log format</a>)</p>
<pre class="brush:java">import java.io.IOException;
import java.net.URLDecoder;

import javax.jdo.PersistenceManager;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.werxltd.webmon.data.LogLine;

public class Log extends HttpServlet {
	private final static long serialVersionUID = 3;

	public void doGet(HttpServletRequest req, HttpServletResponse resp)
    	throws IOException {
			try {
				resp.setContentType("text/plain");

				LogLine logline = new LogLine();
				String logStr = URLDecoder.decode(req.getParameter("l"));
				logline.setLine(logStr);
				logline.setHost(req.getParameter("h"));
				logline.setTime(Long.parseLong(req.getParameter("t")));

				PersistenceManager pm = PMF.get().getPersistenceManager();
				pm.makePersistent(logline);
				pm.close();	

				resp.getWriter().println("OK");
			} catch (Exception e) {
				e.printStackTrace();
				resp.getWriter().println("FAIL");
			} finally {

			}

	}
}</pre>
<h2>The future</h2>
<p>This project is still in it&#8217;s early stages. There is no real way to view the captured data just yet, though I plan on incorporating <a href="http://polliwog.sourceforge.net/">Polliwog</a>, and the router software hasn&#8217;t been tested as much as I would like. I&#8217;m also leery of any security holes I may have introduced.</p>
<p>So if you have any suggestions or would like to know more, feel free to leave a comment below!</p>
<ol class="footnotes"><li id="footnote_0_245" class="footnote">Most actually ask about &#8220;controlling what their kids see online&#8221; but I generally argue for a observe-only approach as it helps open lines of communication with your child whereas silently blocking &#8220;bad&#8221; sites will only start a silent war which will only frustrate you once they do find a suitable workaround, <a href="http://www.google.com/search?sourceid=chrome&amp;ie=UTF-8&amp;q=web+proxy">such as a proxy</a>.</li><li id="footnote_1_245" class="footnote">I might have had better luck had I seen <a href="http://dotmrt.wordpress.com/2008/07/03/wifi-router-firmware-tomato-on-buffalo-whr-hp-54g/">this helpful guide</a>. Oh well, this gives me a future project in figuring out how to de-brick my WHR-HP-54G</li></ol>]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2009/12/01/hacking-your-router-for-effective-internet-monitoring/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Beginner&#8217;s guide to load testing</title>
		<link>http://werxltd.com/wp/2009/11/12/beginners-guide-to-load-testing/</link>
		<comments>http://werxltd.com/wp/2009/11/12/beginners-guide-to-load-testing/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 10:32:12 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[it industry]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[grinder]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[load testing]]></category>
		<category><![CDATA[stress testing]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=244</guid>
		<description><![CDATA[Recently I got tasked with load testing an internal system and producing statistics for the team to show how well it will scale once it is put into production. After some intense research I decided to go with &#8220;The Grinder&#8221; which allows multiple tests to be run by multiple machines which can all funnel their [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I got tasked with load testing an internal system and producing statistics for the team to show how well it will scale once it is put into production.</p>
<p>After <a href="http://ask.slashdot.org/article.pl?sid=02/08/16/2346212">some intense research</a> I decided to go with <a href="http://grinder.sourceforge.net">&#8220;The Grinder&#8221;</a> which allows multiple tests to be run by multiple machines which can all funnel their collected statistics back up to a central &#8220;console&#8221;. Tests are written in <a href="http://en.wikipedia.org/wiki/Python_(programming_language)">Python</a> which, in turn, gets fed through <a href="http://www.jython.org/">Jython</a> and converted into native Java bytecode to be run by participating Grinder agent instances. <span style="background-color: #ffffff;">Grinder works on a single, user-definable port, for both pushing scripts to listening agents as well as gathering statistics from tests.</span></p>
<p>Initially I decided to try and capture the results of each individual test in a MySQL database but abandoned that idea when the tests ended up overloading the MySQL database server before the web app we were primarily testing. Logging results also proved to be an interesting feat since it swampped the agent&#8217;s filesystems after less than an hour (we were running multiple processes and threads) as well.</p>
<p>We eventually settled on simply capturing the combined statistical data at the root console level (the way Grinder is designed) and displaying it via a <a href="http://wiki.hudson-ci.org/display/HUDSON/Grinder+Plugin">plugin</a> in <a href="http://hudson-ci.org/">Hudson</a>.</p>
<p>Overall Grinder worked great for testing the load of our web app (which passed with flying colors). And since Grinder works natively in Java we are also planning on testing specific Java classes directly in the future as well as their overall performance through a web based front-end such as a servlet.</p>
]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2009/11/12/beginners-guide-to-load-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Social justice and technology</title>
		<link>http://werxltd.com/wp/2009/11/03/social-justice-and-technology/</link>
		<comments>http://werxltd.com/wp/2009/11/03/social-justice-and-technology/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 12:00:15 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[it industry]]></category>
		<category><![CDATA[equality]]></category>
		<category><![CDATA[feminism]]></category>
		<category><![CDATA[forced equality]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[preferential treatment]]></category>
		<category><![CDATA[social justice]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=251</guid>
		<description><![CDATA[Recently I attended the Atlanta Linux Fest where a keynote (deceptively entitled &#8220;Standing Out in the Crowd&#8220;) was given, and I still don&#8217;t understand why they felt the need to make this a keynote when there was already a workshop scheduled on the same subject. I, and others at the conference, tweeted and tried to [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I attended the <a href="http://atlantalinuxfest.org/">Atlanta Linux Fest</a> where a keynote (deceptively entitled &#8220;<a href="http://atlantalinuxfest.org/node/108">Standing Out in the Crowd</a>&#8220;) was given, and I still don&#8217;t understand why they felt the need to make this a keynote when there was <a href="http://atlantalinuxfest.org/node/46">already a workshop scheduled</a> on the same subject. I, and others at the conference, tweeted and tried to make known that we didn&#8217;t appreciate the importation of social justice concerns into an area that, by all rights and purposes, <a href="http://www.mithral.com/~beberg/manifesto.html">ought to be coldly logical</a>.</p>
<p>At first I thought this was merely a fluke. That some random feminist organization managed to persuade the organizers of the event into allowing them to come and try and persuade us that we are somehow all intolerant and misogynistic simply because fewer<sup>1</sup> women are members. However, after <a href="http://news.slashdot.org/story/09/10/12/1512238/FOSS-Sexism-Claims-Met-With-Ire-and-Denial?art_pos=2">seeing an article to the same effect</a> on <a href="http://slashdot.org/">Slashdot</a> recently I started looking into the so-called <a href="http://geekfeminism.wikia.com/wiki/Geek_Feminism_Wiki">feminist open-source movement</a> and <a href="http://www.linuxchix.org/women-open-source-free-software-bibliography.html">found it to be neither new nor isolated</a>.</p>
<p>Now while I have no problem with people pursuing their own agendas <em>per se</em> I do have a big problem when it comes to pursuing an agenda that is purely fabricated and detrimental to what it is purporting to help. Feminism, for example, has been a corrosive cancer to every single thing it has touched and I hold no illusions to what sort of effects it will have in the realm of science and technology. I also have a big problem when, in the name of tolerance and equality, feminism manages to wield a giant club beating down any dissenters in an effort to make everyone get in line. Get in line with what, though? The isolated incidents of sexism and questionable jokes/comments are not enough to convince me that the issues that need to be address fall primarily within the domain of gender-equality. As one attendee of the Atlanta Linux Fest so poignantly put it: &#8220;Aren&#8217;t these problems really <em>human</em> problems as opposed to problems that only women face?&#8221;</p>
<p>Social justice seems to be a pretty effective means of &#8220;turning the tables&#8221; by being just as biased as those you are decrying without fear of reprisal. After all, who&#8217;s going to dare speak out against the supposed victims? Interestingly enough, this whole movement has also <a href="http://winteryknight.wordpress.com/2009/10/28/feminists-urge-preferential-treatment-for-women-in-math-and-science/">found it&#8217;s way into the current US administration&#8217;s agenda</a>.</p>
<p>When they said they were going to champion science and technology they failed to mention they were only interested in the social aspect, as if that is what is harming the competitiveness of the US tech industry.</p>
<ol class="footnotes"><li id="footnote_0_251" class="footnote">Which is still more than none.</li></ol>]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2009/11/03/social-justice-and-technology/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Diskless computing vs distributed computing</title>
		<link>http://werxltd.com/wp/2009/09/03/diskless-computing-vs-distributed-computing/</link>
		<comments>http://werxltd.com/wp/2009/09/03/diskless-computing-vs-distributed-computing/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 14:56:35 +0000</pubDate>
		<dc:creator>wes</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[it industry]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[cluster computing]]></category>
		<category><![CDATA[diskless computing]]></category>
		<category><![CDATA[distributed computing]]></category>
		<category><![CDATA[headless computing]]></category>
		<category><![CDATA[network administration]]></category>
		<category><![CDATA[parallel processing]]></category>
		<category><![CDATA[seti@home]]></category>
		<category><![CDATA[terminal server]]></category>

		<guid isPermaLink="false">http://werxltd.com/wp/?p=197</guid>
		<description><![CDATA[A friend of mine recently asked me about cloud computing, what it was, and the ramifications of it on where we will see technology in the coming years. In his question he demonstrated a common confusion among most people between the difference between cloud computing and diskless computing. Both of these are interesting areas of computer [...]]]></description>
			<content:encoded><![CDATA[<p>A friend of mine recently asked me about cloud computing, what it was, and the ramifications of it on where we will see technology in the coming years. In his question he demonstrated a common confusion among most people between the difference between cloud computing and diskless computing.</p>
<p>Both of these are interesting areas of computer science, they do sometimes overlap, and they are both going to change computing in general in significant ways as time rolls on, but they are not the same.</p>
<p>Here&#8217;s are the differences to help  you can tell them apart.</p>
<h3>Diskless computing</h3>
<p><a href="http://en.wikipedia.org/wiki/Diskless_node">Diskless computing</a> is best demonstrated in the <a href="http://ltsp.org/">Linux Terminal Server Project</a> (excellent project, I&#8217;ve use it before to deploy over 150 diskless workstations in a company before) and Microsoft&#8217;s pathetic rival, <a href="http://www.microsoft.com/windowsserver2003/technologies/terminalservices/default.mspx">Windows Terminal Services</a>. Sun has their <a href="http://www.sun.com/desktop/sun-ray-clients.jsp">own solution</a> as well and there are countless 3rd party utilities, but the basic idea behind them all is that you have one big computer (or series of computers) that all these &#8220;headless&#8221; computers connect to in order to retrieve an operating system, store files, etc. For large networks this network model is absolutely amazing.</p>
<h3>Cloud Computing</h3>
<p><a href="http://en.wikipedia.org/wiki/Cloud_computing">Cloud computing</a>, however, is the concept that you have a large problem that requires a lot of computing power to solve. Rather than buy bigger and bigger hardware, what we&#8217;ve found out (going back to <a href="http://www.cray.com/Home.aspx">Cray supercomputers</a>) is that it is far better to split the problem down into iterative chunks and push those through multiple processors all at once rather than try to get a single processor to process everything. This is called <a href="http://en.wikipedia.org/wiki/Distributed_computing">distributed computing</a>.</p>
<p>You might have heard of one of the major platforms for this type of computing, <a href="http://www.beowulf.org/">Beowulf</a>, from the popular <a href="http://en.wikipedia.org/wiki/Internet_meme">internet meme</a> &#8220;imagine a beowulf cluster of&#8230;&#8221; Another very popular distributed computing platform (popular because it is far easier to install, operate, and write code for than the Beowulf project) is <a href="http://werxltd.com/wp/2009/08/26/getting-starte-with-hadoop-and-mapreduce/">Hadoop</a>. Hadoop is a project inspired by Google&#8217;s implementation of the MapReduce design paradigm written in Java which makes it a lot more portable.</p>
<h3>Projects using Cloud Computing</h3>
<p>Parallel processing is done today in a wide variety of settings including:</p>
<ul>
<li>3D rendering farms for companies such as Disney&#8217;s Pixar</li>
<li>indexing the web with Google, Yahoo, Microsoft, etc.</li>
<li><a href="http://werxltd.com/wp/2009/08/31/an-introduction-to-statistics-and-data-mining/">data mining</a> of all sorts with companies like Wal-Mart, etc.</li>
</ul>
<h3>Join in!</h3>
<p>There are some very popular projects using distributed computing technologies that regular people with CPU cycles to spare are encouraged to join in on like:</p>
<ul>
<li><a href="http://setiathome.ssl.berkeley.edu/">SETI@home</a> where you can help process data that might help us identify extraterrestrial signals</li>
<li><a href="http://folding.stanford.edu/">Folding@home</a> where you can help search for cures to various diseases</li>
<li><a href="http://genomeathome.stanford.edu/">Genome@home</a> where you can help map the human genome (again), this is tied closely to the folding@home project above</li>
<li><a href="http://www.boingboing.net/2004/05/26/shrekhome-bluesky-pr.html">Shrek@home</a> which was a pioneer project that a few of us got to participate in</li>
<li><a href="http://www.friedbeef.com/9-world-changing-projects-that-your-computer-can-participate-in/">others</a>, including <a href="http://fightaidsathome.scripps.edu/">fightaids@home</a> to help fight AIDS and <a href="http://lhcathome.cern.ch/">lhc@home</a> to process the massive amounts of data coming from the <a href="http://en.wikipedia.org/wiki/Large_Hadron_Collider">CERN&#8217;s Large Hadron Collider</a></li>
</ul>
<p>So while diskless computing and cloud computing can have some areas of overlap (I configured the LTSP network I mentioned earlier to assist with the genome@home project when the systems were idle) they aren&#8217;t necessarily tied together.</p>
]]></content:encoded>
			<wfw:commentRss>http://werxltd.com/wp/2009/09/03/diskless-computing-vs-distributed-computing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
