<?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>Geek-Tips</title>
	<atom:link href="http://www.geek-tips.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.geek-tips.com</link>
	<description>Miscellaneous and sundry projects and such</description>
	<lastBuildDate>Wed, 13 Mar 2013 21:36:32 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Install Linux Mint on a Mac Mini 2.1</title>
		<link>http://www.geek-tips.com/2013/03/09/install-linux-mint-on-a-mac-mini-2-1/</link>
		<comments>http://www.geek-tips.com/2013/03/09/install-linux-mint-on-a-mac-mini-2-1/#comments</comments>
		<pubDate>Sat, 09 Mar 2013 21:15:29 +0000</pubDate>
		<dc:creator>James L</dc:creator>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.geek-tips.com/?p=715</guid>
		<description><![CDATA[Over the past six or seven years, I&#8217;ve managed to build-up quite a repertoire of Apple hardware products. As OS/X progresses, unfortunately, some of my older hardware just isn&#8217;t able to perform with the latest OS in a way that makes the machine useful. This, most recently, was an issue with one of my Mac <a href='http://www.geek-tips.com/2013/03/09/install-linux-mint-on-a-mac-mini-2-1/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Over the past six or seven years, I&#8217;ve managed to build-up quite a repertoire of Apple hardware products. As OS/X progresses, unfortunately, some of my older hardware just isn&#8217;t able to perform with the latest OS in a way that makes the machine useful. This, most recently, was an issue with one of my Mac Minis which happens to be a 2.1, 32bit model from 2007. I&#8217;ve been using this machine as one of my home automation servers and have been running Snow Leopard on it for a while. I decided that I wanted to give the machine new life by scrapping OS/X and installing Linux Mint.</p>
<p>If you&#8217;re reading this post then you, most likely, have already discovered that the process isn&#8217;t as simple as it sounds. For those that don&#8217;t know, Apple Macs use what is known as Extensible Firmware Interface (EFI) to handle the boot process rather than the older Basic Input Output System (BIOS) mechanism that has been around for so long and has been a staple on PCs until recently. The details of these two systems is beyond the scope of this article but suffice it to say that, unfortunately, most Linux distributions are not able to leverage the alternative architecture that controls/manages the boot process on these Mac machines.</p>
<p>The good news for us in our quest to install an alternative operating system on our Mac is that Apple has included a mechanism on its machines that allows it to present an emulated BIOS and a Master Boot Record (MBR) that Linux will need to install and boot. These are some of the features that are provided via Apple&#8217;s &#8220;Bootcamp&#8221; multi-boot system.</p>
<p><strong>What We&#8217;ll Need</strong></p>
<p>Really all we need is a copy of the Linux ISO for whatever distro we plan to install.</p>
<p>Many of the guides that cover this subject talk about using <a href="http://unetbootin.sourceforge.net/" title="unetbootin" target="_blank">Unetbootin</a> to install the Linux ISO to a USB stick. The idea is to then boot off of the USB stick and then perform the Linux installation. This has worked for me on 64bit Mac Minis but it did not work on my 32bit Mini 2.1. There are articles that claim to be able to force these machines to boot via USB but it&#8217;s just as easy to burn our ISO to DVD and boot/install from that.</p>
<p>Many of these same guides also talk of using rEFIt or <a href="http://www.rodsbooks.com/refind/index.html" title="rEFInd" target="_blank">rEFInd</a>, but neither are needed to accomplish our goal of installing and booting Linux on a Mac Mini.</p>
<p><strong>The Process</strong></p>
<p><em><strong>Note:</strong> Following these steps will not set up a dual boot instance of Linux on your Mac. These steps will completely remove OS/X from your computer.</em></p>
<p>Boot up your Mac Mini target into OS/X and then follow along:</p>
<p><strong>Step 1:</strong> Download the 32bit version of the Linux Mint Mate ISO and burn it to a DVD.</p>
<p><strong>Step 2:</strong> Pop the Linux DVD image into the Mini and reboot your Mac and hold down the option key (alt key on Windows Keyboards) being sure to select the Optical boot option from the list of available options. <em>Don&#8217;t be surprised if it says Windows.</em></p>
<p><strong>Step 3:</strong> Run the Linux Mint installer from the desktop, during the install, select <em>use all space</em> during the partition setup step.</p>
<p><strong>Tweaks</strong></p>
<p>For me, this process worked just fine. When I would reboot the machine, I would be presented with the normal Apple white / gray screen, I would hit enter a few times and Linux Mint would boot right up. I did notice that I had to press enter to force the boot. If I didn&#8217;t the computer would appear to lock-up. </p>
<p>After a bit more research, I discovered that I needed to tell the Mac to boot in BIOS mode rather than attempting a normal EFI boot. The easiest way to accomplish this is to insert a copy of your OS/X media into the Mini&#8217;s optical drive and reboot. In my case, it boots right up off of the optical drive but you may have to hold the option key down and select your optical drive as your boot option. Once the install screen comes up, select Terminal from the utilities menu and run the following command to determine which partition is your boot partition.</p>
<pre class="brush: bash; title: ; notranslate">diskutil list</pre>
<p>My boot partition was <em>disk0s1</em>. Once I knew this, I was able to issue the following command:</p>
<pre class="brush: bash; title: ; notranslate">bless --device /dev/disk0s1 --setBoot --legacy --verbose</pre>
<p>Much better! Now turning the computer on resulted in an instantaneous boot into Linux. Now I noticed that a warm boot would result in the computer just hanging on the white / gray screen just as before but a cold boot would work every time. The key to fixing this issue is to modify the reboot kernel parameter from its default of <em>kbd</em> to <em>cold</em>. To do this, I needed to modify the the GRUB_CMDLINE_LINUX_DEFAULT line in /etc/default/grub to include <em>reboot=cold</em>. In my case this modified line now reads GRUB_CMDLINE_LINUX_DEFAULT=“quiet splash reboot=cold”.</p>
<p>After making these changes, My Mac Mini would boot Linux Mint perfectly every time and is much much faster than it was when it was running OS/X!</p>
<p><strong>A Couple of Gotchas</strong></p>
<p><strong>(1)</strong> When trying to go back and configure my Mac to &#8220;legacy&#8221; boot, I did notice that trying to boot off of my Mountain Lion DVD would not work. I didn&#8217;t try troubleshooting the issue but instead tried booting off of my Snow Leopard DVD which worked just fine.</p>
<p><strong>(2)</strong> When I did my initial install, I did use the rEFIt Boot Loader. In an attempt to fix the lock-up I was experiencing, I issued the following command from a Linux terminal to change my partition table from GUID Partition Table (GPT) to the more common Master Boot Record (MBR). </p>
<pre class="brush: bash; title: ; notranslate">mklabel msdos</pre>
<p>This blew away the rEFIt Boot Loader and put me back to the default Apple bootloader. After reinstalling Linux Mint, I found that this change didn&#8217;t resolve or otherwise help the &#8220;hang-up&#8221; issue and therefore was a totally unnecessary step. This did show me, however, that using an alternative bootloader was unnecessary as the Apple bootloader works just fine.</p>
<p>Until next time – GEEK OUT!</p>
<p>~GT~</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geek-tips.com/2013/03/09/install-linux-mint-on-a-mac-mini-2-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacking a Fireplace</title>
		<link>http://www.geek-tips.com/2013/02/23/hacking-a-fireplace/</link>
		<comments>http://www.geek-tips.com/2013/02/23/hacking-a-fireplace/#comments</comments>
		<pubDate>Sat, 23 Feb 2013 13:24:20 +0000</pubDate>
		<dc:creator>James L</dc:creator>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.geek-tips.com/?p=638</guid>
		<description><![CDATA[I&#8217;ve been building my home automation system for years and have achieved extensive lighting, climate, entertainment, security and entry control. Never satisfied, I&#8217;m forever pondering potential refinements that would enhance the overall effectiveness and capability of my system. I recently concluded that one of those refinements would involve automating the control of the natural-gas fireplaces <a href='http://www.geek-tips.com/2013/02/23/hacking-a-fireplace/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been building my home automation system for years and have achieved extensive lighting, climate, entertainment, security and entry control. Never satisfied, I&#8217;m forever pondering potential refinements that would enhance the overall effectiveness and capability of my system. I recently concluded that one of those refinements would involve automating the control of the natural-gas fireplaces in my home.</p>
<p><em>Let me interject here that one should exercise EXTREME caution before deciding to implement any kind of automated home controls such as those I will outline below!</em></p>
<p>The key to gaining control of a fireplace is to have some kind of automated ignition system. In my case, I had Skytech remote control systems installed on each fireplace when I built our home. This system makes starting and terminating a fire as simple as pressing a button. </p>
<p><a href="http://www.geek-tips.com/wp-content/uploads/2013/02/1001LCD.jpg"><img src="http://www.geek-tips.com/wp-content/uploads/2013/02/1001LCD.jpg" alt="" title="1001LCD" width="300" height="600" class="aligncenter size-full wp-image-639" /></a></p>
<p><strong>Why</strong><br />
As I&#8217;ve built my home automation system, I have focused on centralization and ease of control. Most of the house can be managed through a <a href="http://www.geek-tips.com/2012/01/22/home-automation-overview/" title="Central Console">central console</a>, but the interface is also accessible from a myriad of other devices throughout the house. My motivation was to get rid of the &#8220;ugly&#8221; Skytech remotes and incorporate control of the fireplaces into the central control system. This is not only more elegant than the current system, it, more importantly, allows me to incorporate the fireplaces into my HA scenes. Another reason for implementing automated control of the fireplaces is safety. Imagine, if you will, that one of my children are the last to leave the house for the day and forgets to turn off a fireplace. With centralized control, the HA system can now automatically turn off all fireplaces when it senses that the house is empty or when the security system is engaged. Another scenario would be to automatically shut-off the fireplaces if the HA system senses a structure fire or if high levels of carbon monoxide are detected.</p>
<p><strong>The Plan</strong><br />
Since I&#8217;ll replace the every-day use of the fireplace remotes with my centralized control system, I thought the easiest way to accomplish my goal was to use an Arduino and a couple of reed relays to simulate button presses on the remote.</p>
<div id="attachment_662" class="wp-caption aligncenter" style="width: 510px"><a href="http://www.geek-tips.com/wp-content/uploads/2013/02/Fireplace_schem2.jpg"><img src="http://www.geek-tips.com/wp-content/uploads/2013/02/Fireplace_schem2.jpg" alt="Circuit Schematic" title="Fireplace_schem2" width="500" height="414" class="size-full wp-image-662" /></a><p class="wp-caption-text">Circuit Schematic</p></div>
<p>Since my goal is to automate control, I decided to use an Ethernet Shield so I could make a simple URL call to turn a fireplace on and another call to turn a fireplace off. </p>
<p>The schematic above shows what I actually implemented.</p>
<p><strong>The parts</strong></p>
<ol>
<li>Breadboard</li>
<li>1 x Arduino Uno</li>
<li>1 x Ethernet Shield</li>
<li>2 x <a href="http://www.nteinc.com/relay_web/pdf/R56_57.pdf" target="_blank">Reed Relays</a></li>
<li>Spool of solid 22 AWG wire</li>
</ol>
<p>The relays I had on-hand were NTE Electronics SPST NO R56-1D.5-6D, although the on-board diode contained in this model is unnecessary, these would work just fine for this application.</p>
<p><strong>The Implementation</strong><br />
The key to accomplishing our goal is to open the remote and locate the buttons. In this case, the buttons are <a href="https://www.sparkfun.com/products/97?" target="_blank">mini push button switches</a>. I then turned the PCB over and located the pads for both the ON button and the OFF button. Once I knew where I needed to connect my relays, I then set up my soldering iron and proceeded to connect a six inch lead to two pads on each button and then put the remote unit back together. </p>
<p>Next I wired up my circuit: </p>
<p><em>ON Relay</em></p>
<ul>
<li>Arduino PIN2 to relay PIN2</li>
<li>Arduino GRD to relay PIN6</li>
<li>Relay PIN1 to remote ON lead</li>
<li>Relay PIN7 to remote ON lead</li>
</ul>
<p><em>OFF Relay</em></p>
<ul>
<li>Arduino PIN3 to relay PIN2</li>
<li>Arduino GRD to relay PIN6</li>
<li>Relay PIN1 to remote OFF lead</li>
<li>Relay PIN7 to remote OFF lead</li>
</ul>
<p><a href="http://www.geek-tips.com/wp-content/uploads/2013/02/Photo-Feb-22-9-39-03-PM.jpg"><img src="http://www.geek-tips.com/wp-content/uploads/2013/02/Photo-Feb-22-9-39-03-PM-300x300.jpg" alt="" title="Photo Feb 22, 9 39 03 PM" width="500" height="500" class="aligncenter size-medium wp-image-643" /></a></p>
<p>Now we need software to drive the circuit. The simple sketch below will tell the Arduino to engage our ON button relay, which should turn the fireplace on when <strong>192.168.1.10/?RELAY=1</strong> is called from an external application. Calling <strong>192.168.1.10/?RELAY=2</strong> will tell the Arduino to fire the off relay, which should turn the fireplace off.</p>
<pre class="brush: arduino; title: ; notranslate">
#include &lt;SPI.h&gt;
#include &lt;Ethernet.h&gt;

// MAC address from Ethernet shield sticker under board
byte mac[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
IPAddress ip(192, 168, 1, 10); // IP address, may need to change depending on network
EthernetServer server(80);  // create a server at port 80

String HTTP_req;          // stores the HTTP request

void setup()
{
    Ethernet.begin(mac, ip);  // initialize Ethernet device
    server.begin();           // start to listen for clients
    Serial.begin(9600);       // for diagnostics
    pinMode(2, OUTPUT);       // relay on pin 2
    pinMode(3, OUTPUT);       // relay on pin 3
}

void loop()
{
      EthernetClient client = server.available();  // try to get client

    if (client) {  // got client?
        boolean currentLineIsBlank = true;
        while (client.connected()) {
            if (client.available()) {   // client data available to read
                char c = client.read(); // read 1 byte (character) from client
                HTTP_req += c;  // save the HTTP request 1 char at a time
                // last line of client request is blank and ends with \n
                // respond to client only after last line received
                if (c == '\n' &amp;&amp; currentLineIsBlank) {
                    // send a standard http response header
                    client.println(&quot;HTTP/1.1 200 OK&quot;);
                    client.println(&quot;Content-Type: text/html&quot;);
                    client.println(&quot;Connection: close&quot;);
                    client.println();
                    // send web page
                    ProcessRequest(client);
                    Serial.print(HTTP_req);
                    HTTP_req = &quot;&quot;;    // finished with request, empty string
                    break;
                }
                // every line of text received from the client ends with \r\n
                if (c == '\n') {
                    // last character on line of received text
                    // starting new line with next character read
                    currentLineIsBlank = true;
                } 
                else if (c != '\r') {
                    // a text character was received from client
                    currentLineIsBlank = false;
                }
            } // end if (client.available())
        } // end while (client.connected())
        delay(1);      // give the web browser time to receive the data
        client.stop(); // close the connection
    } // end if (client)

}

// process request
void ProcessRequest(EthernetClient cl)
{
    if (HTTP_req.indexOf(&quot;RELAY=1&quot;) &gt; -1) {  // see if request is for the ON relay
        digitalWrite(2, HIGH);
        delay(1500);
        digitalWrite(2, LOW);
        cl.println(&quot;1&quot;);
    }
    
    if (HTTP_req.indexOf(&quot;RELAY=2&quot;) &gt; -1) {  // see if request is for OFF relay
        digitalWrite(3, HIGH);
        delay(1500);
        digitalWrite(3, LOW);
        cl.println(&quot;2&quot;);
    }
}
</pre>
<p>That&#8217;s it! </p>
<p>If you have more than one fireplace, just add additional relays and modify the sketch accordingly.</p>
<p><strong>Conclusion</strong><br />
This method worked like a charm! I didn&#8217;t have to remove the fascia from the fireplaces themselves to access and modify the electronic valve control system. This method also leaves the remotes fully functional even though they have a tethered connection to the Arduino. This allows me to use the remote to start a fire even if there is a power failure in the house and the HA system is inaccessible.</p>
<p>Last but not least, another benefit of this implementation approach is the fact that there is no permanent damage. When I decide to sell my home, I&#8217;ll just snip the leads off of each remote and the new owners can use the remotes the &#8220;old fashioned&#8221; way!</p>
<p>Until next time &#8211; GEEK OUT!</p>
<p>~GT~</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geek-tips.com/2013/02/23/hacking-a-fireplace/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TNG 9 &#8211; Sheets Mod</title>
		<link>http://www.geek-tips.com/2012/12/21/tng-9-sheets-mod/</link>
		<comments>http://www.geek-tips.com/2012/12/21/tng-9-sheets-mod/#comments</comments>
		<pubDate>Fri, 21 Dec 2012 04:05:06 +0000</pubDate>
		<dc:creator>James L</dc:creator>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[Geneology]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.geek-tips.com/?p=547</guid>
		<description><![CDATA[I&#8217;ve worked with a LOT of genealogy software applications over the years and all of them have left me, for one reason or another, unsatisfied. I started experimenting with The Next Generation of Genealogy Sitebuilding, also known as TNG, back in mid-2010, but really started digging deep into the application over the past few months. <a href='http://www.geek-tips.com/2012/12/21/tng-9-sheets-mod/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve worked with a LOT of genealogy software applications over the years and all of them have left me, for one reason or another, unsatisfied.</p>
<p>I started experimenting with <a href="http://www.lythgoes.net/genealogy/software.php" target="_blank">The Next Generation of Genealogy Sitebuilding</a>, also known as TNG, back in mid-2010, but really started digging deep into the application over the past few months.  What makes TNG so unique is that it&#8217;s a web based app instead of a Windows or Mac fat-client application. I love this approach as it gives me total access to my data, and since the application is written in PHP and has a built-in Mod architecture and manager, it&#8217;s really, REALLY easy to extend the application to make it do things that it doesn&#8217;t do natively.</p>
<p>I&#8217;m currently editing a book for a particular line in my database and needed the Person and Group Sheets to include divorce information. Unfortunately the reports that ship with TNG 9, the latest version, do not support this. My first thought was to export a GEDCOM and import it into an application like Reunion, but without going into the details, I HATED the results. That led me to creating my own Mod to extend both the Person Sheet and Group Sheet PDFs to include divorce information.</p>
<p>To use the mod, save the code below or download <a href='http://bit.ly/UjnQFt'>this file</a> to gt_sheet_v9.0.0.1.cfg in your tng/mods folder and then install like any other mod.</p>
<p><em>I&#8217;ve only tested the Mod with TNG V9, so I can&#8217;t speak to its compatibility with previous versions.</em></p>
<pre class="brush: jscript; title: ; notranslate">
%name:GT Custom Sheet%
%version:V9.0.0.0%
%description:This mod will modify the person and group sheet pdf reports to add divorce information.%

%target:tngdblib.php%
%location:%
//Get most family data for a known spouse
function getSpouseFamilyDataPlusDates($tree, $spouse1, $spouse1ID, $spouseorder) {
    global $families_table;

        $query = &quot;SELECT gedcom, husband, wife, familyID, marrdate, marrdatetr, marrplace, marrtype, living, private, branch,
                YEAR(marrdatetr) as marryear, MONTH(marrdatetr) as marrmonth, DAYOFMONTH(marrdatetr) as marrday, marrplace, sealdate, sealplace
                FROM $families_table
                WHERE $spouse1 = \&quot;$spouse1ID\&quot; AND gedcom = \&quot;$tree\&quot;
                ORDER BY $spouseorder&quot;;

    return dbExecuteQuery($query);
}

//Get most family data for a known spouse with unknown gender
function getSpouseFamilyDataUnionPlusDates($tree, $spouse1ID) {
    global $families_table;

        $query = &quot;SELECT gedcom, husband, wife, familyID, marrdate, marrdatetr, marrplace, marrtype, living, private, branch,
                        YEAR(marrdatetr) as marryear, MONTH(marrdatetr) as marrmonth, DAYOFMONTH(marrdatetr) as marrday, marrplace, sealdate, sealplace
        FROM $families_table
        WHERE husband = \&quot;$spouse1ID\&quot; AND gedcom = \&quot;$tree\&quot;
        UNION
            SELECT gedcom, husband, wife, familyID, marrdate, marrdatetr, marrplace, marrtype, living, private, branch,
                                YEAR(marrdatetr) as marryear, MONTH(marrdatetr) as marrmonth, DAYOFMONTH(marrdatetr) as marrday, marrplace, sealdate, sealplace
            FROM $families_table
            WHERE wife = \&quot;$spouse1ID\&quot; AND gedcom = \&quot;$tree\&quot;&quot;;

    return dbExecuteQuery($query);
}
%end:%
%replace:%
//Get most family data for a known spouse
function getSpouseFamilyDataPlusDates($tree, $spouse1, $spouse1ID, $spouseorder) {
    global $families_table;

        $query = &quot;SELECT gedcom, husband, wife, familyID, marrdate, marrdatetr, marrplace, marrtype, divdate, divplace, living, private, branch,
                YEAR(marrdatetr) as marryear, MONTH(marrdatetr) as marrmonth, DAYOFMONTH(marrdatetr) as marrday, marrplace, sealdate, sealplace
                FROM $families_table
                WHERE $spouse1 = \&quot;$spouse1ID\&quot; AND gedcom = \&quot;$tree\&quot;
                ORDER BY $spouseorder&quot;;

    return dbExecuteQuery($query);
}

//Get most family data for a known spouse with unknown gender
function getSpouseFamilyDataUnionPlusDates($tree, $spouse1ID) {
    global $families_table;

        $query = &quot;SELECT gedcom, husband, wife, familyID, marrdate, marrdatetr, marrplace, marrtype, divdate, divplace, living, private, branch,
                        YEAR(marrdatetr) as marryear, MONTH(marrdatetr) as marrmonth, DAYOFMONTH(marrdatetr) as marrday, marrplace, sealdate, sealplace
        FROM $families_table
        WHERE husband = \&quot;$spouse1ID\&quot; AND gedcom = \&quot;$tree\&quot;
        UNION
            SELECT gedcom, husband, wife, familyID, marrdate, marrdatetr, marrplace, marrtype, divdate, divplace, living, private, branch,
                                YEAR(marrdatetr) as marryear, MONTH(marrdatetr) as marrmonth, DAYOFMONTH(marrdatetr) as marrday, marrplace, sealdate, sealplace
            FROM $families_table
            WHERE wife = \&quot;$spouse1ID\&quot; AND gedcom = \&quot;$tree\&quot;&quot;;

    return dbExecuteQuery($query);
}
%end:%

%target:rpt_ind.php%
%location:%
                if($rights['both']) {
                    $cite = reorderCitation($marriagerow['familyID'].&quot;_MARR&quot;, 0);
                    doubleLine($text['married'], displayDate($marriagerow['marrdate']), $text['place'], $marriagerow['marrplace'], $cite);
                }
%end:%
%replace:%
                if($rights['both']) {
                    $cite = reorderCitation($marriagerow['familyID'].&quot;_MARR&quot;, 0);
                    $citex = reorderCitation($marriagerow['familyID'].&quot;_DIV&quot;, 0);
                    doubleLine($text['married'], displayDate($marriagerow['marrdate']), $text['place'], $marriagerow['marrplace'], $cite);
                    doubleLine($text['divorced'], displayDate($marriagerow['divdate']), $text['place'], $marriagerow['divplace'], $citex);
                }
%end:%

%target:rpt_fam.php%
%location:%
        // married
        if ($frights['both']) {
            $cite = reorderCitation($familyID.&quot;_MARR&quot;, 0);
            dateLine($text['married'], displayDate($fam['marrdate']), $fam['marrplace'], $cite);
        }
%end:%
%replace:%
        // married
        if ($frights['both']) {
            $cite = reorderCitation($familyID.&quot;_MARR&quot;, 0);
            $citex = reorderCitation($familyID.&quot;_DIV&quot;, 0);
            dateLine($text['married'], displayDate($fam['marrdate']), $fam['marrplace'], $cite);
            dateLine($text['divorced'], displayDate($fam['divdate']), $fam['divplace'], $citex);
        }
%end:%
</pre>
<p>Until next time – GEEK OUT!</p>
<p>~GT~</p>
]]></content:encoded>
			<wfw:commentRss>http://www.geek-tips.com/2012/12/21/tng-9-sheets-mod/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UPDATED: “Hack A Day” Hack with Greasemonkey</title>
		<link>http://www.geek-tips.com/2012/11/21/updated-hack-a-day-hack-with-greasemonkey/</link>
		<comments>http://www.geek-tips.com/2012/11/21/updated-hack-a-day-hack-with-greasemonkey/#comments</comments>
		<pubDate>Wed, 21 Nov 2012 19:16:57 +0000</pubDate>
		<dc:creator>James L</dc:creator>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.geek-tips.com/?p=511</guid>
		<description><![CDATA[Back in February of this year, I released a Greasemonkey Script that would modify the theme from the Hack A Day site so it was a little easier on my &#8220;old eyes&#8221;! The script works by changing CSS and HTML elements after they have been received by my browser. The good folks over at Hack <a href='http://www.geek-tips.com/2012/11/21/updated-hack-a-day-hack-with-greasemonkey/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>Back in February of this year, I released a Greasemonkey Script that would modify the theme from the Hack A Day site so it was a little easier on my &#8220;old eyes&#8221;!</p>
<p>The script works by changing CSS and HTML elements after they have been received by my browser.</p>
<p>The good folks over at <a href="http://hackaday.com/" title="Hack A Day" target="_blank">Hack A Day</a> overhauled their <a href="http://hackaday.com/2012/11/16/the-new-template-has-arrived/" title="Theme Update" target="_blank">theme</a> last week which meant my old hack needed quite a few modifications so it would work as it had with the old site.</p>
<p>Just as before, I&#8217;m a Firefox user so I&#8217;ve only tested the script with Firefox, but it should work just fine with other browsers. Other Hack A Day readers reported that my previous script worked with Opera and Chrome.</p>
<p>To use the script, do the following: </p>
<ul>
<li>Install the Greasemonkey extension (Firefox.. Tools.. Add-ons)</li>
<li>Save the script as hackaday.user.js</li>
<li>Restart firefox</li>
<li>Drag the hackaday.user.js script from your desktop to Firefox</li>
</ul>
<p>A couple of items to be aware of:</p>
<ul>
<li>I didn&#8217;t take the time to test each of the previous modifications to see if they were still being used. That means the code could be tightened-up a bit, but it works just fine as is.  <em>If you care to take the time to test each of the old changes to see if they are still required, please do so and let me know your findings and I&#8217;ll update the code listing below</em>.</li>
<li>I&#8217;m using a different logo image in my header (see screenshots) than the logo that Hack A Day is using. If you choose to use your own image, you&#8217;ll need to modify the link in the code. <strong>I don&#8217;t have permission to share my image, so don&#8217;t ask!</strong></li>
</ul>
<p>For more information on my original hack, please read my <a href="http://www.geek-tips.com/2012/02/23/hack-a-day-hack-with-greasemonkey/" title="Original Hack A Day Theme Hack" target="_blank">original post</a>.</p>
<pre class="brush: jscript; title: ; notranslate">
// ==UserScript==
// @name           Hackaday
// @namespace      http://localhost
// @description    Re-Theme hackaday.com
// @include        http://hackaday.com/*
// @grant          GM_getValue
// @grant          GM_setValue
// @grant          GM_addStyle
// ==/UserScript==

// Let's change the body background to white
document.body.style.background = &quot;#fff&quot;;

// Let's set our link hover, heading3 and paragraph settings
GM_addStyle(&quot;a:hover {background-color: transparent; border-bottom:0px;}&quot;);
GM_addStyle(&quot;h3 {color: #000;}&quot;);
GM_addStyle(&quot;p {color: #000; background-color: #fff; font-size: medium; line-height: normal}&quot;);

// Let's get rid of the border around the body text
GM_addStyle(&quot;#container {border-width: 0px;}&quot;);

// Change comment block backgrounds, colors and margins
GM_addStyle(&quot;.comment-body {background-color: #fff;}&quot;);
GM_addStyle(&quot;li.depth-2 {background-color: #fff;}&quot;);
GM_addStyle(&quot;li.depth-1 {background-color: #fff;}&quot;);
GM_addStyle(&quot;.comment-body {margin-left: 6px; margin-right: 6px;}&quot;);
GM_addStyle(&quot;.fn {color: #888;}&quot;);
GM_addStyle(&quot;.says {color: #888;}&quot;);
GM_addStyle(&quot;.cle h3 {color: #fff;}&quot;);

// Change the color of each link
var zElements = document.getElementsByTagName(&quot;a&quot;);
for (var i=0; i&lt;zElements.length; i++) {
   zElements[i].style.color=&quot;red&quot;;
}

// Change the color of each blogroll block
var zElements = document.getElementsByClassName(&quot;statsclass1&quot;);
for (var i=0; i&lt;zElements.length; i++) {
   zElements[i].style.backgroundColor=&quot;#959595&quot;;
}
var zElements = document.getElementsByClassName(&quot;statsclass2&quot;);
for (var i=0; i&lt;zElements.length; i++) {
   zElements[i].style.backgroundColor=&quot;#aaa&quot;;
}

// Change the color of each sharedaddy instance
var zElements = document.getElementsByClassName(&quot;sharedaddy&quot;);
for (var i=0; i&lt;zElements.length; i++) {
   zElements[i].style.backgroundColor=&quot;#555&quot;;
   zElements[i].style.color=&quot;#fff&quot;;
}

// Change the sharedaddy title settings
var zElements = document.getElementsByClassName(&quot;sd-title&quot;);
for (var i=0; i&lt;zElements.length; i++) {
   zElements[i].style.color=&quot;#fff&quot;;
   zElements[i].style.marginLeft=&quot;6px&quot;;
}

// Change the color of the comment counts
var zElements = document.getElementsByClassName(&quot;cat-item&quot;);
for (var i=0; i&lt;zElements.length; i++) {
   zElements[i].style.color=&quot;#000&quot;;
}

// Added on 06/11/2012
// Change images
var images = document.getElementsByTagName (&quot;img&quot;);
var x=0;
while(x&lt;images.length)
{
  if(images[x].src.indexOf(&quot;hackaday-logo.gif&quot;) != -1)
  {
    images[x].src = &quot;http://use.yourownimage.com/hackaday-logo.gif&quot;;
  }
  else if(images[x].src.indexOf(&quot;tips1.jpg&quot;) != -1)
  {
    images[x].src = &quot;http://use.yourownimage.com/tips1.jpg&quot;;
  }
  else if(images[x].src.indexOf(&quot;feed1.jpg&quot;) != -1)
  {
    images[x].src = &quot;http://use.yourownimage.com/feed1.jpg&quot;;
  }
  else if(images[x].src.indexOf(&quot;store1.jpg&quot;) != -1)
  {
    images[x].src = &quot;http://use.yourownimage.com/store1.jpg&quot;;
  }
  else if(images[x].src.indexOf(&quot;forum.jpg&quot;) != -1)
  {
    images[x].src = &quot;http://use.yourownimage.com/forum.jpg&quot;;
  }
 
  x=x+1;
}

// Added on 11/21/2012 to account for 11/16/2012 Theme Changes
// http://hackaday.com/2012/11/16/the-new-template-has-arrived/

// Let's change the header bg color and image
GM_addStyle(&quot;body, p, select, textarea {color: rgb(0,0,0)}&quot;);
GM_addStyle(&quot;#header {background-color: rgb(255,255,255)}&quot;);
GM_addStyle(&quot;.header-image #title-area {background-image: url(\&quot;http://use.yourownimage.com/hackaday-logo.gif\&quot;);}&quot;);
GM_addStyle(&quot;.header-image #title-area {width: 457px;}&quot;);
GM_addStyle(&quot;#header .widget-area {width: 450px;}&quot;);
GM_addStyle(&quot;.header-image #title-area {height: 130px;}&quot;);
GM_addStyle(&quot;#header {min-height: 130px;}&quot;);

// Let's tweak the menu-bar
GM_addStyle(&quot;.menu {height: 25px;}&quot;);
GM_addStyle(&quot;.menu a {padding-top: 4px;}&quot;);
GM_addStyle(&quot;.menu {background-color: rgb(160,160,160)}&quot;);
GM_addStyle(&quot;#nav .s {margin-right: 10px;}&quot;);
GM_addStyle(&quot;input {vertical-align: middle;}&quot;);
GM_addStyle(&quot;input.s {height: 12px;}&quot;);
GM_addStyle(&quot;input.searchsubmit {height: 18px;}&quot;);
GM_addStyle(&quot;input.searchsubmit {padding-top: 0px;}&quot;);

// Let's change the wrap DIV bg color
GM_addStyle(&quot;#wrap {background-color: rgb(248,248,248)}&quot;);
GM_addStyle(&quot;span.date.published.time {color: #000;}&quot;);
GM_addStyle(&quot;span.categories {color: #000;}&quot;);
GM_addStyle(&quot;span.tags {color: #000;}&quot;);

GM_addStyle(&quot;#tl_ad {background-color: rgb(248,248,248)}&quot;);
GM_addStyle(&quot;.sidebar .widget {background-color: rgb(248,248,248)}&quot;);
GM_addStyle(&quot;.sidebar .widget p {background-color: rgb(248,248,248)}&quot;);
GM_addStyle(&quot;.widget-area h4 {background-color: rgb(85,85,85)}&quot;);
GM_addStyle(&quot;.header-image #title {opacity: 0;}&quot;);

// Let's change the comment boxes
GM_addStyle(&quot;.odd {background-color: rgb(255,255,255)}&quot;);
GM_addStyle(&quot;.even {background-color: rgb(255,255,255)}&quot;)

// Let's tweak the category box
GM_addStyle(&quot;.widget_archive select, #cat {background-color: rgb(85,85,85)}&quot;);
GM_addStyle(&quot;.widget_archive select, #cat {color: rgb(255,255,255)}&quot;);
</pre>
<p>Following is a before and after image that shows the transformation.</p>

<a href='http://www.geek-tips.com/2012/11/21/updated-hack-a-day-hack-with-greasemonkey/before/' title='before'><img width="150" height="150" src="http://www.geek-tips.com/wp-content/uploads/2012/11/before-150x150.png" class="attachment-thumbnail" alt="before" title="before" /></a>
<a href='http://www.geek-tips.com/2012/11/21/updated-hack-a-day-hack-with-greasemonkey/after/' title='after'><img width="150" height="150" src="http://www.geek-tips.com/wp-content/uploads/2012/11/after-150x150.png" class="attachment-thumbnail" alt="after" title="after" /></a>

<p>Until next time &#8211; GEEK OUT!</p>
<p>~GT~</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style"><a class="addthis_button_facebook"></a> <a class="addthis_button_twitter"></a> <a class="addthis_button_digg"></a> <a class="addthis_button_stumbleupon"></a> <a class="addthis_button_reddit"></a> <a class="addthis_button_delicious"></a> <a class="addthis_button_bitly"></a> <a class="addthis_button_myspace"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_compact"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_email"></a> <a class="addthis_button_favorites"></a></div>
<p><script src="http://s7.addthis.com/js/250/addthis_widget.js#username=xa-4d32ffd93e1ec328" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geek-tips.com/2012/11/21/updated-hack-a-day-hack-with-greasemonkey/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Saving Data From a Failed Laptop</title>
		<link>http://www.geek-tips.com/2012/03/02/recovering-hdd-data/</link>
		<comments>http://www.geek-tips.com/2012/03/02/recovering-hdd-data/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 02:16:20 +0000</pubDate>
		<dc:creator>James L</dc:creator>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.geek-tips.com/?p=436</guid>
		<description><![CDATA[As a rule, I don&#8217;t help family and friends with their computer needs! That said, I make two and ONLY two exceptions to that rule, one of which is my Mom. A couple of weeks ago, she called me complaining that her laptop was randomly powering-down. I went over to have a look and decided <a href='http://www.geek-tips.com/2012/03/02/recovering-hdd-data/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>As a rule, I don&#8217;t help family and friends with their computer needs! That said, I make two and ONLY two exceptions to that rule, one of which is my Mom. A couple of weeks ago, she called me complaining that her laptop was randomly powering-down. I went over to have a look and decided the first thing to do was run a backup. A few minutes into the backup &#8211; BAM &#8211; no power &#8230; her laptop was &#8220;dead&#8221;. I made another three or four attempts to backup her data but each time the computer would loose power. She was already talking about buying a new computer and since the existing machine was about four years old, I agreed that <strong>new</strong> was a prudent choice.</p>
<p>When I asked how long it had been since she last backed up she told me it had been more than a year &#8211; YIKES!!! With hundreds of photos, email, documents and music at risk, I needed to find a way to save her data. My first thought was to remove her hard-disk and connect it to another computer via USB and just copy the data off. The problem with this idea was how to connect the drive! I recalled having a number of older USB drives in my hacking stash&#8221;. I decided that I would disassemble one of them and use its SATA-USB controller to connect the drive to the new laptop and simply copy the data to her new machine.</p>
<p>The drive I selected was a &#8220;Western Digital My Passport Elite 320GB&#8221;. This drive was perfect because the SATA-USB controller didn&#8217;t require any type of external power as it takes power from the USB connection to power itself and the drive. This would make it really easy to hook up for this temporary assignment. Now that I had my drive selected, I needed to take it apart.  This is where things get tricky.</p>
<p><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/drive03-1024x768.jpg" alt="" title="Step 01" width="695" height="521" class="aligncenter size-large wp-image-437" /></p>
<p>To remove the SATA-USB controller you&#8217;ll need a screwdriver and something you can use to wedge into the case as you slowly work your way around the unit prying the edges apart. I used a stack of vinyl stickers but business cards, old hotel room keys or something similar would work.</p>
<p><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/drive04-1024x768.jpg" alt="" title="Step 01" width="695" height="521" class="aligncenter size-large wp-image-437" /></p>
<p>Use a screwdriver to slowly and carefully pry the edge open. There are a lot of snap-connectors that hold the unit together. Be very careful, or the case will break! Once you manage to get it open, slip in a card to hold the unit apart.</p>
<p><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/drive05-1024x768.jpg" alt="" title="Step 01" width="695" height="521" class="aligncenter size-large wp-image-437" /></p>
<p>Continue working around the unit VERY slowly and methodically. In order to remove the drive and controller assembly, you&#8217;ll have to pull the case apart on both the front and back sides.</p>
<p><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/drive06-1024x768.jpg" alt="" title="Step 01" width="695" height="521" class="aligncenter size-large wp-image-437" /></p>
<p>When you&#8217;ve managed to get around both sides of the case, it should look something like this.</p>
<p><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/drive1.jpg" alt="" title="Step 01" width="695" height="521" class="aligncenter size-large wp-image-437" /></p>
<p>Now slip the center drive assembly out of the case.</p>
<p><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/drive08-1024x768.jpg" alt="" title="Step 01" width="695" height="521" class="aligncenter size-large wp-image-437" /></p>
<p>Before we can remove the drive and access the controller there are three screws that have to be removed.  Mine had a specialized star head that I didn&#8217;t have a bit for. To get around this I used a small flat-head bit that I could seat into the screw-head instead.</p>
<p><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/drive12-1024x768.jpg" alt="" title="Step 01" width="695" height="521" class="aligncenter size-large wp-image-437" /></p>
<p>Now slide the drive out of the tray. That&#8217;s the controller protruding from the end of the drive.</p>
<p><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/drive13-1024x768.jpg" alt="" title="Step 01" width="695" height="521" class="aligncenter size-large wp-image-437" /></p>
<p>FINALLY we have access to the controller. To remove the controller from the drive, firmly grasp the drive with one hand and the controller with the other and pull the controller off of the drive.</p>
<p><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/drive2.jpg" alt="" title="Step 01" width="695" height="521" class="aligncenter size-large wp-image-437" /></p>
<p>With my controller in-hand, now I need to remove the drive from the old laptop so I can install the controller and copy my data.</p>
<p><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/drive3.jpg" alt="" title="Step 01" width="695" height="521" class="aligncenter size-large wp-image-437" /></p>
<p>Now I connect the drive to the new laptop via USB and I can simply copy the data.</p>
<p>Until next time &#8211; GEEK OUT!</p>
<p>~GT~</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style"><a class="addthis_button_facebook"></a> <a class="addthis_button_twitter"></a> <a class="addthis_button_digg"></a> <a class="addthis_button_stumbleupon"></a> <a class="addthis_button_reddit"></a> <a class="addthis_button_delicious"></a> <a class="addthis_button_bitly"></a> <a class="addthis_button_myspace"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_compact"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_email"></a> <a class="addthis_button_favorites"></a></div>
<p><script src="http://s7.addthis.com/js/250/addthis_widget.js#username=xa-4d32ffd93e1ec328" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geek-tips.com/2012/03/02/recovering-hdd-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Hack A Day&#8221; Hack with Greasemonkey</title>
		<link>http://www.geek-tips.com/2012/02/23/hack-a-day-hack-with-greasemonkey/</link>
		<comments>http://www.geek-tips.com/2012/02/23/hack-a-day-hack-with-greasemonkey/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 03:38:26 +0000</pubDate>
		<dc:creator>James L</dc:creator>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.geek-tips.com/?p=276</guid>
		<description><![CDATA[If you have regular web sites that you visit, I bet I&#8217;m safe in guessing that at least one of them has something about it that you wish was different. You know what I mean &#8212; a different background color, larger fonts, menus in a different location, etc. That site for me is &#8220;Hack A <a href='http://www.geek-tips.com/2012/02/23/hack-a-day-hack-with-greasemonkey/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>If you have regular web sites that you visit, I bet I&#8217;m safe in guessing that at least one of them has something about it that you wish was different. You know what I mean &#8212; a different background color, larger fonts, menus in a different location, etc.</p>
<p>That site for me is &#8220;Hack A Day&#8221;. I love to see what other hackers are up to, but reading posts on the site with their green and white, small point text on a black background is killer on my eyes.</p>
<p>The great thing about the way the web works is that the page formatting is delivered to the browser right along with its contents.  Once I have it, I can do with it as I please. That means I can change colors, fonts and just about any other stylistic or functional element on the page.</p>
<p>I&#8217;m an avid Firefox user and use a plugin called Greasemonkey that allows me to execute javascript on any page I choose so I can make the page look and/or act the way I want it to. I&#8217;m not, by any means, a javascript expert but it was a cinch to hack together a solution that allowed me to completely reformat the &#8220;Hack A Day&#8221; site to a more color neutral theme that is much less strenuous on my eyes.</p>
<pre class="brush: jscript; title: ; notranslate">
// ==UserScript==
// @name           Hackaday
// @namespace      http://localhost
// @description    Re-Theme hackaday.com
// @include        http://hackaday.com/*
// ==/UserScript==
 
// Let's change the body background to white
document.body.style.background = &quot;#fff&quot;;
 
// Let's set our link hover, heading3 and paragraph settings
GM_addStyle(&quot;a:hover {background-color: transparent; border-bottom:0px;}&quot;);
GM_addStyle(&quot;h3 {color: #000;}&quot;);
GM_addStyle(&quot;p {color: #000; background-color: #fff; font-size: medium; line-height: normal}&quot;);

// Let's get rid of the border around the body text
GM_addStyle(&quot;#container {border-width: 0px;}&quot;);

// Change comment block backgrounds, colors and margins
GM_addStyle(&quot;.comment-body {background-color: #fff;}&quot;);
GM_addStyle(&quot;li.depth-2 {background-color: #fff;}&quot;);
GM_addStyle(&quot;li.depth-1 {background-color: #fff;}&quot;);
GM_addStyle(&quot;.comment-body {margin-left: 6px; margin-right: 6px;}&quot;);
GM_addStyle(&quot;.fn {color: #888;}&quot;);
GM_addStyle(&quot;.says {color: #888;}&quot;);
GM_addStyle(&quot;.cle h3 {color: #fff;}&quot;);

// Change the color of each link
var zElements = document.getElementsByTagName(&quot;a&quot;);
for (var i=0; i&lt;zElements.length; i++) {
   zElements[i].style.color=&quot;red&quot;;
}

// Change the color of each blogroll block
var zElements = document.getElementsByClassName(&quot;statsclass1&quot;);
for (var i=0; i&lt;zElements.length; i++) {
   zElements[i].style.backgroundColor=&quot;#959595&quot;;
}
var zElements = document.getElementsByClassName(&quot;statsclass2&quot;);
for (var i=0; i&lt;zElements.length; i++) {
   zElements[i].style.backgroundColor=&quot;#aaa&quot;;
}

// Change the color of each sharedaddy instance
var zElements = document.getElementsByClassName(&quot;sharedaddy&quot;);
for (var i=0; i&lt;zElements.length; i++) {
   zElements[i].style.backgroundColor=&quot;#555&quot;;
   zElements[i].style.color=&quot;#fff&quot;;
}

// Change the sharedaddy title settings
var zElements = document.getElementsByClassName(&quot;sd-title&quot;);
for (var i=0; i&lt;zElements.length; i++) {
   zElements[i].style.color=&quot;#fff&quot;;
   zElements[i].style.marginLeft=&quot;6px&quot;;
}

// Change the color of the comment counts
var zElements = document.getElementsByClassName(&quot;cat-item&quot;);
for (var i=0; i&lt;zElements.length; i++) {
   zElements[i].style.color=&quot;#000&quot;;
}
</pre>
<p>Following is a before and after image that shows the transformation.</p>

<a href='http://www.geek-tips.com/2012/02/23/hack-a-day-hack-with-greasemonkey/hack1-2/' title='Before'><img width="150" height="150" src="http://www.geek-tips.com/wp-content/uploads/2012/02/hack11-150x150.jpg" class="attachment-thumbnail" alt="Before" title="Before" /></a>
<a href='http://www.geek-tips.com/2012/02/23/hack-a-day-hack-with-greasemonkey/hack2-2/' title='After'><img width="150" height="150" src="http://www.geek-tips.com/wp-content/uploads/2012/02/hack21-150x150.jpg" class="attachment-thumbnail" alt="After" title="After" /></a>

<p>If you&#8217;re not a Firefox user, it may still be possible to achieve these same results with your browser of choice. Run a few Google searches on how to run Greasemonkey Scripts in your favorite browser and chances are you&#8217;ll find a way to make it work</p>
<p>Until next time &#8211; GEEK OUT!</p>
<p>~GT~</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style"><a class="addthis_button_facebook"></a> <a class="addthis_button_twitter"></a> <a class="addthis_button_digg"></a> <a class="addthis_button_stumbleupon"></a> <a class="addthis_button_reddit"></a> <a class="addthis_button_delicious"></a> <a class="addthis_button_bitly"></a> <a class="addthis_button_myspace"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_compact"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_email"></a> <a class="addthis_button_favorites"></a></div>
<p><script src="http://s7.addthis.com/js/250/addthis_widget.js#username=xa-4d32ffd93e1ec328" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geek-tips.com/2012/02/23/hack-a-day-hack-with-greasemonkey/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Build a Vernam Cipher</title>
		<link>http://www.geek-tips.com/2012/02/15/build-a-vernam-cipher/</link>
		<comments>http://www.geek-tips.com/2012/02/15/build-a-vernam-cipher/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 20:19:35 +0000</pubDate>
		<dc:creator>James L</dc:creator>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Science]]></category>

		<guid isPermaLink="false">http://www.geek-tips.com/?p=414</guid>
		<description><![CDATA[The current issue of 2600: The Hacker Quarterly has an article on cryptography that outlines the use of the Vernam Cipher (aka One-time pad) to encrypt text by hand. What makes this technique interesting is its ease of implementation, but even more interesting than that is the fact that the Vernam Cipher is the only <a href='http://www.geek-tips.com/2012/02/15/build-a-vernam-cipher/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>The current issue of <a href="http://www.2600.com/cgi-bin/covers.pl?issue=wi11" target="_blank">2600: The Hacker Quarterly</a> has an article on cryptography that outlines the use of the Vernam Cipher (aka One-time pad) to encrypt text by hand. What makes this technique interesting is its ease of implementation, but even more interesting than that is the fact that the Vernam Cipher is the only known method of encryption that is <a href="http://en.wikipedia.org/wiki/Claude_Shannon" target="_blank">proven to be unbreakable</a> when implemented/used correctly. </p>
<div id="attachment_393" class="wp-caption aligncenter" style="width: 310px"><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/406px-One-time_pad.svg_-300x84.png" alt="" title="406px-One-time_pad.svg" width="300" height="84" class="size-medium wp-image-393" /></a><p class="wp-caption-text">Sample One-Time Pad</p></div>
<p>So how does it work? In simple terms, each character from your text, known as plaintext, is encrypted by <a href="http://en.wikipedia.org/wiki/Modular_addition" target="_blank">modular arithmetic</a> with a character from a secret random key (or pad) of the same length as your plaintext. What results is a ciphertext. If the key is TRULY random and as large as the original text and has never been used then the ciphertext will be impossible to decrypt without knowing the key. </p>
<p>This got me to thinking &#8212; what would it take to create a web application to easily implement this encryption method for use on data that I wanted to store, let&#8217;s say, in my file based <a href="www.dokuwiki.org" target="_blank">wiki</a>!? Sure, there are numerous tools out there that one could leverage to encrypt text but this seemed like an interesting challenge and an excuse to learn a bit more about this cryptography method.</p>
<p><strong><em>Before I proceed, let me just state that I am not a cryptographer and that the technique I devised for implementing my cipher is for informational purposes only!</em></strong></p>
<p>The first step to encrypting our text is to convert our letters, and if we choose, our punctuation, to numbers so we can perform our modular arithmetic operations. The 2600 article described what is known as a <a href="http://en.wikipedia.org/wiki/Straddling_checkerboard" target="_blank">straddling checkerboard</a> which gives us numeric values for our non-number text characters while simultaneously introducing fractionation. </p>
<div id="attachment_319" class="wp-caption aligncenter" style="width: 606px"><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/cipher.jpg" alt="" title="cipher" width="596" height="111" class="size-full wp-image-319" /><p class="wp-caption-text">Example Straddling Checkerboard Grid</p></div>
<p>Using this particular implementation of the straddling checkerboard, <strong>Geek Tips</strong> would translate into <strong>245527 18607</strong>. When encrypting by hand, it&#8217;s common to break the data up into smaller, easier to manage, groups.  In this case we&#8217;ll use groups of five digits. Since our third group is less than five digits, we&#8217;ll fill in with zeros. Following this pattern, our string becomes, <strong>24552 71860 70000</strong>, which is now ready for the next stage of the ciphering process which is to perform modular arithmetic with a key. </p>
<p>As I stated before, to implement this cipher properly, the key should be completely random and at least as long as our new string of numbers. For this example, let&#8217;s say our key is <strong>20247 88641 30412</strong>. Now I subtract each digit in the key from each digit in the plaintext. If the result is less than zero, I add 10. For example, in the fifth column, I calculate 2 &#8211; 7, which results in -5. Because this is less than zero, I add 10 to get 5 as the final answer. In the first column, the result of 2 &#8211; 2 is 0, which is not less than zero, so I leave that as my final answer.</p>
<pre>
  24552 71860 70000 (plaintext)
- 20247 88641 30412 (key)
-------------------------
  04315 93229 40698 (encrypted)</pre>
<p>Decrypting our string is as simple as reversing the modular arithmetic by adding the key to the encrypted string. This will reproduce our original plaintext string. To convert the string back to the original message we simply refer back to our straddling checkerboard grid to recompose the message &#8211; SIMPLE!!</p>
<p>The first thing I needed to do to move this project forward was write a simple form to gather my data:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
&lt;body&gt;
&lt;form action=&quot;process.php&quot; method=&quot;post&quot;&gt;
&lt;p&gt;Your message:&lt;br /&gt;&lt;textarea name=&quot;text&quot; rows=&quot;40&quot; cols=&quot;180&quot; /&gt;&lt;/textarea&gt;&lt;/p&gt;
&lt;p&gt;Decode: &lt;input type=&quot;checkbox&quot; name=&quot;decode&quot; value=&quot;yes&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Enter Key: &lt;input type=&quot;password&quot; value=&quot;&quot; name=&quot;key&quot; autocomplete=&quot;off&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;input type=&quot;submit&quot; value=&quot;Encode/Decode&quot; /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;input type=&quot;reset&quot; value=&quot;Reset&quot; /&gt;&lt;/p&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>With my form in place, now I could start developing the code to replicate the straddling checkerboard cipher that was described in the 2600 article. The resulting script was fully functional but WAY more complex than I wanted. As I thought about ways to simplify my code, I recalled that most programming languages have a number of built-in <a href="http://en.wikipedia.org/wiki/Bitwise_operation" target="_blank">bitwise operators</a> that I might be able to leverage to really simplify what I was trying to accomplish. </p>
<p>The operator that I narrowed in on is called XOR. It works by looking at two bit patterns of equal length and performs a logical exclusive OR operation on each pair of corresponding bits. The result in each position is 1 if only the first bit is 1 OR only the second bit is 1, but will be 0 if both are 0 or both are 1. This is equivalent to being 1 if the two bits are different, and 0 if they are the same. </p>
<div id="attachment_354" class="wp-caption aligncenter" style="width: 499px"><img src="http://www.geek-tips.com/wp-content/uploads/2012/02/xor.jpg" alt="" title="xor" width="489" height="95" class="size-full wp-image-354" /><p class="wp-caption-text">Calculating an XOR result (2 ^ 7 = 5)</p></div>
<p>As this example shows, the 4, 2 and 1 columns have bits in the ON position. Since the 2 column bit is ON for both our numbers it becomes OFF, that leaves the 4 and 1 columns. When we add those together the resulting number is five.  Since this XOR functionality is built-in to PHP the complexity of building this computational logic was removed thus allowing me to really simplify my code. Following are the results:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

 $key = $_POST['key'];

 // Our plaintext/ciphertext
 if (strtolower($_POST['decode']) == &quot;yes&quot;) {
   $text = base64_decode($_POST['text']);
 } else {
   $text = $_POST['text'];
 }
  
 // Iterate through each character
 for($i=0;$i&lt;strlen($text);)
 {
     for($j=0;$j&lt;strlen($key);$j++,$i++)
     {
         $outText .= $text{$i} ^ $key{$j};
     }
 }
 
 if (strtolower($_POST['decode']) == &quot;yes&quot;) {
   echo &quot;&lt;p&gt;Your message:&lt;br /&gt;&lt;textarea name=\&quot;text\&quot; rows=\&quot;40\&quot; cols=\&quot;180\&quot;&gt;&quot;  . $outText  . &quot;&lt;/textarea&gt;&lt;/p&gt;&quot;;
 } else {
   echo &quot;&lt;p&gt;Your encoded message:&lt;br /&gt;&lt;textarea name=\&quot;text\&quot; rows=\&quot;40\&quot; cols=\&quot;180\&quot;&gt;&quot;  . base64_encode($outText)  . &quot;&lt;/textarea&gt;&lt;/p&gt;&quot;;
 }
 
 echo &quot;&lt;br /&gt;&lt;br /&gt;&lt;a href='https://www.example.com/form.html'&gt;Return&lt;/a&gt;&quot;;
 
?&gt;
</pre>
<p>If the key provided matches the criteria outlined previously then the output from this script should be a true one-time pad. The reality, however is that it&#8217;s highly impractical to meet the one-time pad key criteria to make our ciphertext unbreakable. If you choose to use the same key for all of your enciphering (more practical) then the resulting ciphertext is, obviously, less secure. If your key is shorter than your plaintext, thus requiring the key to repeat then the resulting ciphertext is now encoded in what is known as a stream cipher.</p>
<p>I wouldn&#8217;t necessarily use the results of this script for anything of significant value but it was nonetheless and interesting exercise for gaining a deeper understanding of ciphers and how they can be implemented for obfuscation purposes in ones own solutions. </p>
<p>Until next time &#8211; GEEK OUT!</p>
<p>~GT~</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style"><a class="addthis_button_facebook"></a> <a class="addthis_button_twitter"></a> <a class="addthis_button_digg"></a> <a class="addthis_button_stumbleupon"></a> <a class="addthis_button_reddit"></a> <a class="addthis_button_delicious"></a> <a class="addthis_button_bitly"></a> <a class="addthis_button_myspace"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_compact"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_email"></a> <a class="addthis_button_favorites"></a></div>
<p><script src="http://s7.addthis.com/js/250/addthis_widget.js#username=xa-4d32ffd93e1ec328" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geek-tips.com/2012/02/15/build-a-vernam-cipher/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Home Automation Overview</title>
		<link>http://www.geek-tips.com/2012/01/22/home-automation-overview/</link>
		<comments>http://www.geek-tips.com/2012/01/22/home-automation-overview/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 17:56:22 +0000</pubDate>
		<dc:creator>James L</dc:creator>
				<category><![CDATA[DIY]]></category>
		<category><![CDATA[Home Automation]]></category>
		<category><![CDATA[Insteon]]></category>

		<guid isPermaLink="false">http://www.geek-tips.com/?p=200</guid>
		<description><![CDATA[When we receive a first-time visitor to our home they ALWAYS ask about the whole-home control panel mounted in our family room. This panel allows us to control and obtain status on just about every aspect of our house from a single location.  This, invariably, leads to questions about what my Home Automation (HA) system <a href='http://www.geek-tips.com/2012/01/22/home-automation-overview/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>When we receive a first-time visitor to our home they ALWAYS ask about the whole-home control panel mounted in our family room. This panel allows us to control and obtain status on just about every aspect of our house from a single location.  This, invariably, leads to questions about what my Home Automation (HA) system can do.</p>
<p>While not an exhaustive list, following are some of the features I&#8217;ve integrated so far:</p>
<ul>
<li>Turn on the lights in the house when arriving home after dark and nobody is home</li>
<li>Announce when the garage door opens</li>
<li>Notify me and the police if the alarm is tripped</li>
<li>Notify me if a motion detector is activated and the house is in AWAY mode</li>
<li>Notify me when the alarm state changes (enabled / disabled)</li>
<li>Display the alarm status (set / not set) on keypads throughout the house</li>
<li>Display garage door status (open / closed) on keypads throughout the house</li>
<li>Open / Close the garage door from keypads throughout the house</li>
<li>Turn on / off porch lights with the setting / rising of the sun</li>
<li>Log upstairs and downstairs temperature and humidity</li>
<li>Log incoming and outgoing phone calls</li>
<li>Control alarm, fans, lights and thermostats from a central command console</li>
<li>Control alarm, fans, lights and thermostats from an iphone / iPad</li>
<li>Control alarm, fans, lights and thermostats via SMS</li>
<li>Control alarm, fans, lights and thermostats via IR</li>
<li>Display incoming caller information on TV</li>
<li>Log all motion activity</li>
<li>Control household music library and radio stations from central command console</li>
<li>Play household music library and radio stations on audio zones throughout the house</li>
<li>Notify me when one or more Printer Ink cartridges need to be replaced</li>
<li>Display on command console
<ul>
<li>Replace air filters</li>
<li>Add salt to softener system</li>
<li>Purge water system</li>
<li>Printer Ink Cartridge Levels</li>
<li>Motion in zones throughout the house</li>
<li>Who is home</li>
<li>Garage Door status</li>
<li>Alarm status</li>
<li>Voicemail status</li>
</ul>
</li>
<li>Lights Out timer for my daughter (10 / 30 / 60 min intervals)</li>
<li>Panic Mode &#8211; all lights on instantly</li>
<li>Sleep Mode &#8211; all lights off instantly</li>
<li>Notify me when a HA device needs attention (battery replacement, etc)</li>
<li>Backup offsite server data (Wiki / Mail / etc)</li>
<li>Automatically filter all internet traffic</li>
<li>Notify me when power fails</li>
</ul>
<p>Developing all of this capability over the years means the inter-workings of my HA system have become increasingly complex.  This is most evident when something ceases to function correctly and I have to jump in and troubleshoot the problem.  As the system grew I started documenting the details in a wiki which has proved invaluable for troubleshooting. I also found it helpful to maintain a high-level visual overview of my network and data flow.</p>
<p>Since these are areas that are the subject of so many of the questions that I receive, I thought I would post some images to give you some inspiration on how you might architect your own HA system.</p>

<a href='http://www.geek-tips.com/2012/01/22/home-automation-overview/home-network-v3/' title='Home Network'><img width="150" height="150" src="http://www.geek-tips.com/wp-content/uploads/2012/01/Home-Network-v3-150x150.png" class="attachment-thumbnail" alt="Home Network" title="Home Network" /></a>
<a href='http://www.geek-tips.com/2012/01/22/home-automation-overview/ha-data-movement-v3/' title='HA Data Movement'><img width="150" height="150" src="http://www.geek-tips.com/wp-content/uploads/2012/01/HA-Data-Movement-v3-150x150.png" class="attachment-thumbnail" alt="HA Data Movement" title="HA Data Movement" /></a>
<a href='http://www.geek-tips.com/2012/01/22/home-automation-overview/photo6/' title='Control Panel'><img width="150" height="150" src="http://www.geek-tips.com/wp-content/uploads/2012/01/photo6-150x150.jpg" class="attachment-thumbnail" alt="Control Panel" title="Control Panel" /></a>
<a href='http://www.geek-tips.com/2012/01/22/home-automation-overview/dash-ha/' title='Dashboard HA'><img width="150" height="150" src="http://www.geek-tips.com/wp-content/uploads/2012/01/Dash-HA-150x150.jpg" class="attachment-thumbnail" alt="Dashboard HA" title="Dashboard HA" /></a>
<a href='http://www.geek-tips.com/2012/01/22/home-automation-overview/dash-audio/' title='Dashboard Audio'><img width="150" height="150" src="http://www.geek-tips.com/wp-content/uploads/2012/01/Dash-Audio-150x150.jpg" class="attachment-thumbnail" alt="Dashboard Audio" title="Dashboard Audio" /></a>
<a href='http://www.geek-tips.com/2012/01/22/home-automation-overview/dash-graph/' title='Dashboard Environment Graphs'><img width="150" height="150" src="http://www.geek-tips.com/wp-content/uploads/2012/01/Dash-Graph-150x150.jpg" class="attachment-thumbnail" alt="Dashboard Environment Graphs" title="Dashboard Environment Graphs" /></a>

<p>Until next time &#8211; GEEK OUT!</p>
<p>~GT~</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style"><a class="addthis_button_facebook"></a> <a class="addthis_button_twitter"></a> <a class="addthis_button_digg"></a> <a class="addthis_button_stumbleupon"></a> <a class="addthis_button_reddit"></a> <a class="addthis_button_delicious"></a> <a class="addthis_button_bitly"></a> <a class="addthis_button_myspace"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_compact"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_email"></a> <a class="addthis_button_favorites"></a></div>
<p><script src="http://s7.addthis.com/js/250/addthis_widget.js#username=xa-4d32ffd93e1ec328" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geek-tips.com/2012/01/22/home-automation-overview/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Learning to Ride</title>
		<link>http://www.geek-tips.com/2011/11/14/learning-to-ride/</link>
		<comments>http://www.geek-tips.com/2011/11/14/learning-to-ride/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 01:11:27 +0000</pubDate>
		<dc:creator>James L</dc:creator>
				<category><![CDATA[DIY]]></category>

		<guid isPermaLink="false">http://www.geek-tips.com/?p=185</guid>
		<description><![CDATA[My little girl hit a new milestone today by learning to ride her bike! Getting here, I can honestly attest, has been a very bumpy ride (pun intended), but alas she prevailed! Let me start with a little bit of context. Every child is different. I put my son on a bike at about five <a href='http://www.geek-tips.com/2011/11/14/learning-to-ride/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>My little girl hit a new milestone today by learning to ride her bike!</p>
<p>Getting here, I can honestly attest, has been a very bumpy ride (pun intended), but alas she prevailed!<br />
<img class="size-medium wp-image-186 alignleft" title="Barbie Bike" src="http://www.geek-tips.com/wp-content/uploads/2011/11/0008787658326_500X500.jpg" alt="" width="180" height="180" /></p>
<p>Let me start with a little bit of context. Every child is different. I put my son on a bike at about five years of age and he was riding his bike in, literally, a matter of minutes. He only needed a small bit of guidance and he took care of the rest himself. My daughter, on the other hand, is a completely different story. She is currently eight years old. We bought her first bike about three years ago and she rode it for a long time with training wheels. About 18 months ago I took the training wheels off and I spent many hours running with her up and down the street, but she was never able to grasp the whole balance thing. As she continued to grow we got her a bigger bike and spent many additional hours practicing , but again, she just couldn&#8217;t manage to keep her balance. Finally in a moment of frustration I searched the Internet for alternative learning methods and ran across a video that demonstrated the &#8220;Balance Bike&#8221; method.</p>
<p>The idea behind this method is really simple. All you do is remove the pedals and then let your child push themselves and then lift their feet until they get a firm grasp of the balance required to keep the bike upright. What&#8217;s great about this technique is that the child stays in control and isn&#8217;t hindered by a parent holding their shoulders or the bicycle&#8217;s handle bars, and what&#8217;s even better is that the parent doesn&#8217;t end up with an aching back.</p>
<p><iframe width="695" height="521" src="http://www.youtube.com/embed/HnZlat1yFCU?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>After seeing the video I took the pedals off and let her try to push herself along a few times but she kept hitting the crankarms with her chins and she was ready to quit within a few minutes of starting. I did a bit more research and found that were are a number of bicycles on the market specifically made to teach balance. The only thing that was different about them was that they didn&#8217;t have pedal cranks. It seemed silly to me to spend money to buy one of these when I could achieve the same thing for free. Using the examples I saw on the internet as inspiration, I then proceeded to remove the crank assembly, chain and chain guard from my daughters bike and we spent a few minutes on three or four occasions over the next few weeks practicing totaling 30 to 40 minutes.</p>
<p style="text-align: left;"><a href="http://www.target.com/webapp/wcs/stores/servlet/p/Smart-Gear-Wooden-Balance-Bike-Classic/-/A-10904864"><img class="size-full wp-image-194 aligncenter" title="Balance Bike" src="http://www.geek-tips.com/wp-content/uploads/2011/11/unnamed.jpg" alt="" width="220" height="220" /></a></p>
<p>Today my daughter decided she was ready to try riding &#8220;with the pedals&#8221; again so I put everything back together, she loaded up and on her first try she was riding her bike down the street without any help!</p>
<p>So the moral of this story is give the &#8220;Balance Bike&#8221; method a try if your youngster is having difficulty learning to ride and chances are they will acquire the necessary skills in no time!</p>
<p>~GT~</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style"><a class="addthis_button_facebook"></a> <a class="addthis_button_twitter"></a> <a class="addthis_button_digg"></a> <a class="addthis_button_stumbleupon"></a> <a class="addthis_button_reddit"></a> <a class="addthis_button_delicious"></a> <a class="addthis_button_bitly"></a> <a class="addthis_button_myspace"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_compact"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_email"></a> <a class="addthis_button_favorites"></a></div>
<p><script src="http://s7.addthis.com/js/250/addthis_widget.js#username=xa-4d32ffd93e1ec328" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geek-tips.com/2011/11/14/learning-to-ride/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Troy-Bilt Pump Repair</title>
		<link>http://www.geek-tips.com/2011/07/23/troy-bilt-pump-repair/</link>
		<comments>http://www.geek-tips.com/2011/07/23/troy-bilt-pump-repair/#comments</comments>
		<pubDate>Sat, 23 Jul 2011 22:28:00 +0000</pubDate>
		<dc:creator>James L</dc:creator>
				<category><![CDATA[DIY]]></category>

		<guid isPermaLink="false">https://littonlnx1.thelittonfamily.com/wordpress/?p=6</guid>
		<description><![CDATA[I bought myself a gasoline power-washer last year to replace my old washer and was really pleased with its performance.&#160; At the beginning of summer this year, I set up my new washer for my annual outdoor cleaning.&#160; I hooked everything up and gave the engine a pull. As expected it cranked right up and <a href='http://www.geek-tips.com/2011/07/23/troy-bilt-pump-repair/'>[...]</a>]]></description>
			<content:encoded><![CDATA[<p>I bought myself a gasoline power-washer last year to replace my old washer and was really pleased with its performance.&nbsp; At the beginning of summer this year, I set up my new washer for my annual outdoor cleaning.&nbsp; I hooked everything up and gave the engine a pull. As expected it cranked right up and then all of a sudden &#8211; BAM &#8211; it stopped!!&nbsp; It wasn&#8217;t a &#8220;ran out of gas&#8221; kind of stop it was a very sudden &#8220;the engine has seized&#8221; kind of stop.</p>
<p>I gripped the pull-crank, gave it a pull and the pull-cord ripped right out of my hand.&nbsp; The engine wouldn&#8217;t budge.&nbsp; I take meticulous care of my stuff so I was perplexed &#8230; what could it be?&nbsp; A visual inspection of the crankcase didn&#8217;t show any blowouts or cracks &#8230; hmmmm.&nbsp; I pulled the spark plug and inspected the top of the piston and cylinder, all seemed fine.&nbsp; I then pulled the top of the engine off and again, everything was fine.&nbsp; That left one thing &#8212; the water pump itself.&nbsp; I pulled the pump off and manually rotated the engine&#8217;s crankshaft and thankfully it turned with very little effort, so I knew the engine was fine.</p>
<p>The pumps that ship with store bought pressure washers are notoriously &#8220;cheap&#8221; but my unit had less than 10 hours of use, it shouldn&#8217;t have failed already! I continued my investigation by removing the three external valve caps from the pump.&nbsp; I immediately noticed a fowl smell &#8230;. that&#8217;s strange, what could that be? I then pulled one of the valves out and found the remains of, what we call locally, a lizard (<a href="http://en.wikipedia.org/wiki/Carolina_anole" target="_blank">Carolina Anole</a>)!&nbsp; My guess is he had decided to make the water-hose or the water intake on the pump itself his home &#8230;. poor little guy!</p>
<p>The pump has a total of six valves which, unfortunately, are made of plastic.&nbsp; Most of the valves were damaged as I removed them from their seats which meant I had to order a replacement pump or buy a new kit.&nbsp; The replacement pump would have been easier but this kind of DIY project is therapeutic for me so I ordered the kit ($72) and did the repair myself.</p>
<p>Following is a 60 second video that captures the repair.</p>
<p><iframe src="http://player.vimeo.com/video/26819517" frameborder="0" height="359" width="574"></iframe>&nbsp;</p>
<p>Until next time &#8211; GEEK OUT!</p>
<p>~GT~</p>
<div class="addthis_toolbox addthis_default_style addthis_32x32_style"><a class="addthis_button_facebook"></a> <a class="addthis_button_twitter"></a> <a class="addthis_button_digg"></a> <a class="addthis_button_stumbleupon"></a> <a class="addthis_button_reddit"></a> <a class="addthis_button_delicious"></a> <a class="addthis_button_bitly"></a> <a class="addthis_button_myspace"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_compact"></a> <span class="addthis_separator">&nbsp;</span> <a class="addthis_button_email"></a> <a class="addthis_button_favorites"></a></div>
<p><script src="http://s7.addthis.com/js/250/addthis_widget.js#username=xa-4d32ffd93e1ec328" type="text/javascript"></script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.geek-tips.com/2011/07/23/troy-bilt-pump-repair/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
