<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Andy Goodwin</title>
    <link rel="alternate" type="text/html" href="http://unf.net/" />
    <link rel="self" type="application/atom+xml" href="http://unf.net/atom.xml" />
    <id>tag:unf.net,2008-03-13://1</id>
    <updated>2009-12-28T02:53:50Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.32-en</generator>

<entry>
    <title>Anatomy of an Asterisk rick roll</title>
    <link rel="alternate" type="text/html" href="http://unf.net/2009/12/asterisk-rick-roll.php" />
    <id>tag:unf.net,2009://1.12</id>

    <published>2009-12-27T20:48:41Z</published>
    <updated>2009-12-28T02:53:50Z</updated>

    <summary><![CDATA[I was inspired by a friend (EFNet - steve nash aka oz) on IRC - he (or his friend(s)) had setup an incoming phone number that would just rickroll you.&nbsp; Nothing else.Well, hell, that's easy to setup with Asterisk, but...]]></summary>
    <author>
        <name>Andy Goodwin</name>
        
    </author>
    
        <category term="programming" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="asterisk" label="Asterisk" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="commandlineinterface" label="Command-line interface" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="database" label="Database" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mysql" label="MySQL" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="programming" label="Programming" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rickroll" label="Rickroll" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://unf.net/">
        <![CDATA[I was inspired by a friend (<a href="http://www.efnet.org/">EFNet</a> - steve nash aka oz) on <a class="zem_slink" href="http://en.wikipedia.org/wiki/Internet_Relay_Chat" title="Internet Relay Chat" rel="wikipedia">IRC</a> - he (or his friend(s)) had setup an incoming phone number that would just <a href="http://www.youtube.com/watch?v=dQw4w9WgXcQ">rickroll</a> you.&nbsp; Nothing else.<br /><br />Well, hell, that's easy to setup with <a href="http://asterisk.org/">Asterisk</a>, but I was determined to do one better.&nbsp; Not only would I setup a phone number that would rickroll you, but I would also make the number call you back and rickroll you again.<br /><br />With <a href="http://asterisk.org/">Asterisk</a>, <a href="http://www.php.net/">PHP</a>, <a href="http://dev.mysql.com/">MySQL</a>, and great <a class="zem_slink" href="http://en.wikipedia.org/wiki/Session_Initiation_Protocol" title="Session Initiation Protocol" rel="wikipedia">SIP</a> service, this is cake.&nbsp; First things first -- I made a new musiconhold class (musiconhold.conf):<br /><br /><blockquote>[rickroll]<br />mode=files<br />directory=/var/lib/asterisk/custom-moh/rickroll<br /></blockquote>And the extension logic (extensions.conf) - this goes into your incoming SIP context:<br /><br /><blockquote>exten =&gt; 6302061300,1,Answer<br />exten =&gt; 6302061300,n,AGI(rickroll)<br />exten =&gt; 6302061300,n,Ringing<br />exten =&gt; 6302061300,n,Wait(4)<br />exten =&gt; 6302061300,n,MusicOnHold(rickroll)<br />exten =&gt; 6302061300,n,Hangup<br /></blockquote><br />Bam - if you call 630-206-1300, you will get rickrolled.&nbsp; However, if you notice the AGI(rickroll) on the second line of the extension logic -&nbsp; that's what makes this rickroll funnier.<br /><br />I created a MySQL table:<br /><br /><blockquote>CREATE TABLE rickroll (<br />&nbsp; rickrollid bigint(20) NOT NULL auto_increment,<br />&nbsp; phonenum varchar(10) NOT NULL default '',<br />&nbsp; dialtime int(11) default NULL,<br />&nbsp; calls tinyint(4) default NULL,<br />&nbsp; PRIMARY KEY (rickrollid),<br />&nbsp; UNIQUE KEY (phonenum),<br />&nbsp; KEY (dialtime)<br />); <br /></blockquote><br />And created an AGI with command line PHP -- in /var/lib/asterisk/agi-bin -- make sure it's got execute permission (chmod 755 it when yer done):<br /><br /><blockquote>#!/usr/bin/php -q<br />&lt;?<br /><br />$stdin = fopen('php://stdin', 'r');<br />$stdout = fopen('php://stdout', 'w');<br /><br />while (!feof($stdin)) {<br />&nbsp;&nbsp;&nbsp; $temp = fgets($stdin);<br />&nbsp;&nbsp;&nbsp; $temp = str_replace("\n", "", $temp);<br />&nbsp;&nbsp;&nbsp; $s = explode(":", $temp);<br />&nbsp;&nbsp;&nbsp; $agivar[ $s[0] ] = trim($s[1]);<br />&nbsp;&nbsp;&nbsp; if (($temp == "") || ($temp == "\n")) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br /><br />$mysql=mysql_connect("localhost","RICKROLLUSER","RICKROLLPASS","rickroll");<br />mysql_select_db("rickroll");<br /><br />$callerid = $agivar[agi_callerid];<br />$newd = time() + 300;<br /><br />$q = "INSERT INTO rickroll (phonenum, dialtime, calls) VALUES ('$callerid','$newd',0)";<br />$qid = mysql_query($q, $mysql);<br /><br />mysql_close($mysql);<br /><br />exit;<br /></blockquote><br />There.&nbsp; We now have incoming rickroll calls getting logged to a database.&nbsp; It sets the dialtime to the current time + 300 seconds (5 minutes) - so in 5 minutes, the cronjob will pick the call up and make it.<br /><br />Here's where the fun comes in.&nbsp; We need a cronjob that uses the manager interface of Asterisk to initiate calls after they're read out of the database.&nbsp; Add this to manager.conf in asterisk:<br /><br /><blockquote>[rickroll]<br />secret = MANAGER_PASSWORD_HERE<br />deny=0.0.0.0/0.0.0.0<br />permit=127.0.0.0/255.255.255.0<br />read = system,call,log,verbose,command,agent,user<br />write = system,call,log,verbose,command,agent,user<br /></blockquote><br />Now we're ready for the evil.&nbsp; Here's the PHP cronjob (heavily commented so you can understand the flow) - I wrote a couple functions for sending manager commands so I could reuse the code in other stuff:<br /><br /><blockquote>#!/usr/bin/php -q<br />&lt;?php<br /><br />// Set some variables<br />$callerid = "";&nbsp; // Holds the caller ID we'll use to rickroll the person back<br />$time = time();&nbsp; // Current time - in epoch (seconds since 1970)<br />$del = array();&nbsp; // Array of entries to delete/update after we call<br /><br />// Connect to the database<br />$mysql=mysql_connect("localhost","RICKROLLUSER","RICKROLLPASS","rickroll");<br />mysql_select_db("rickroll");<br /><br />// Open a socket to the manager interface of Asterisk.<br />$ast_man = fsockopen("127.0.0.1","5038", $errno, $errstr, 30);<br /><br />// Read in the version string<br />$in = fread($ast_man, 4096);<br /><br />// Login with the manager credentials we used in manager.conf<br />fwrite($ast_man, "Action: login\r\n");<br />fwrite($ast_man, "Username: rickroll\r\n");<br />fwrite($ast_man, "Secret: MANAGER_PASSWORD_HERE\r\n");<br />fwrite($ast_man, "Events: off\r\n\r\n");<br /><br />// Get the response<br />$resp = get_response($ast_man);<br /><br />// If we get a login error - die.<br />if ($resp['response'] != "Success") {<br />&nbsp;&nbsp;&nbsp; exit;<br />}<br /><br />// Get the list of people that need a return call from <a class="zem_slink" href="http://www.rickastley.co.uk/" title="Rick Astley" rel="homepage">Rick Astley</a><br />$q = "SELECT rickrollid, phonenum, dialtime, calls FROM rickroll WHERE dialtime &lt; $time";<br />$qid = mysql_query($q, $mysql);<br /><br />while ($r = mysql_fetch_assoc($qid)) {<br />&nbsp;&nbsp;&nbsp; // Set the variables from the array -- this is for pure laziness:<br />&nbsp;&nbsp;&nbsp; $rickrollid = $r['rickrollid'];<br />&nbsp;&nbsp;&nbsp; $phonenum = $r['phonenum'];<br />&nbsp;&nbsp;&nbsp; $calls = $r['calls'];<br />&nbsp;&nbsp;&nbsp; $dialtime = $r['dialtime'];<br /><br />&nbsp;&nbsp;&nbsp; if ($calls == 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Never been called back yet -- set the caller ID to the rickroll #<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $callerid = "6302061300";<br />&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // They got one callback already.&nbsp; This is the second (last) one -- so<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // we'll randomize the last 4 digits of their phone # and use that as our<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // caller ID.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $callerid = substr($phonenum, 0, 6) . rand(0,9) . rand(0,9) . rand(0,9) . rand(0,9);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; // Set the array of asterisk manager parameters to initiate the call:<br />&nbsp;&nbsp;&nbsp; $evil = array('Action' =&gt; 'Originate',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Channel' =&gt; "LOCAL/$phonenum@rickroll",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Context' =&gt; 'rickroll',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Exten' =&gt; '1000',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Priority' =&gt; '1',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Callerid' =&gt; $callerid,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Timeout' =&gt; '30000');<br /><br />&nbsp;&nbsp;&nbsp; // We're not going to call ourselves back.<br />&nbsp;&nbsp;&nbsp; if ($phonenum != '6302061300') {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; send_command($ast_man, $evil);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; // Add this phone number to the array - so we can update/delete the records<br />&nbsp;&nbsp;&nbsp; $del[] = array('phonenum' =&gt; $phonenum, 'calls' =&gt; $calls, 'rickrollid' =&gt; $rickrollid);<br />&nbsp;&nbsp;&nbsp; }<br /><br />// Process the array of delete/updates<br />foreach($del as $r) {<br />&nbsp;&nbsp;&nbsp; if ($r['calls'] == 0) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // This was their first call -- the next one will be done in a random amount of time.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // The next call will be in some random amount of time 15 minutes from now.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // I did 3 rand's of 0-300 to increase the odds of it not calling right back.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $newd = time() + rand(0,300) + rand(0,300) + rand(0,300);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Update their entry in the database with the new call time.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $q = "UPDATE rickroll SET dialtime = $newd, calls = 1 WHERE rickrollid = " . $r['rickrollid'];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $qid = mysql_query($q, $mysql);<br />&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Second call - just delete them from the table.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $q = "DELETE FROM rickroll WHERE rickrollid = " . $r['rickrollid'];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $qid = mysql_query($q, $mysql);<br />&nbsp;&nbsp;&nbsp; }<br />}<br /><br />fclose($ast_man);&nbsp; <br /><br />mysql_close($mysql);<br /><br />exit;<br /><br />function send_command($fp, $cmdarray) {<br />&nbsp;&nbsp;&nbsp; $_t = "";<br /><br />&nbsp;&nbsp;&nbsp; foreach($cmdarray as $k =&gt; $v) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $_t .= "$k: $v\r\n";<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; $_t .= "\r\n";<br /><br />&nbsp;&nbsp;&nbsp; fwrite($fp, $_t);<br />}<br /><br />function get_response($fp) {<br /><br />&nbsp;&nbsp;&nbsp; $ret = "";<br /><br />&nbsp;&nbsp;&nbsp; while(1) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $pkt = fread($fp, 1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ret .= $pkt;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (substr($ret, -4) == "\r\n\r\n") break;<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; $a = explode("\r\n", $ret);<br /><br />&nbsp;&nbsp;&nbsp; foreach($a as $k =&gt; $v) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strlen($v) &lt; 5) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unset($a[$k]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list($param, $value) = explode(": ", $v, 2);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $p = strtolower($param);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $r[$p] = trim($value);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; return $r;<br />}<br /></blockquote><br />The comments should hopefully explain it all, if not, feel free to drop me a line w/ questions.&nbsp; Basically, the cronjob grabs all the upcoming calls, and then proceeds to make them.&nbsp; If its their first callback - it will set the callerID to the rickroll phone number (630-206-1300).&nbsp; If its their second/last - it will set the caller ID to a number similar to the caller's # - if you call from 303-555-1122, it will use the same NPA-NXX - 303-555, and then append 4 random #'s.&nbsp; I figured if someone notices rickroll is calling them back, they'll ignore the callback.&nbsp; A call phone a number in their same area code + prefix might make someone answer.<br /><br />To install the cronjob - stick the cronjob bin (make sure it has execute permission) somewhere.&nbsp; /usr/local/bin works for me.&nbsp; Add this to your crontab:<br /><br /><blockquote>*/2 * * * *&nbsp;&nbsp;&nbsp; /usr/local/bin/cron_rickroll.php&nbsp; &gt;&gt; /tmp/rickroll.log 2&gt;&amp;1<br /></blockquote><br />The last piece is the extension context [rickroll].&nbsp; In extensions.conf:<br /><br /><blockquote>[rickroll]<br /><br />;&nbsp; The extension we connect the called party to -- rickroll!<br />exten =&gt; 1000,1,Answer<br />exten =&gt; 1000,n,MusicOnHold(rickroll)<br />exten =&gt; 1000,n,Hangup<br /><br />;&nbsp; The outbound calling of our rickroll victims - standard outdial<br />exten =&gt; _NXXNXXXXXX,1,Dial(SIP/1${EXTEN}@primary-sip-out)<br />exten =&gt; _NXXNXXXXXX,n,Dial(SIP/1${EXTEN}@secondary-sip-out)<br />exten =&gt; _NXXNXXXXXX,n,HangUp<br /></blockquote><br />The code isn't super pretty, and I'm sure there are a thousand improvements that can be made to the code/logic, but for a quick one hour joke - its not too bad.<br /><br />Feel free to comment/email with questions :)<br /><br />Andy<br /><br />Links for more information:<br /><br /><a href="http://asterisk.org/">Asterisk</a><br /><a href="http://www.voip-info.org/wiki/view/Asterisk+AGI">Asterisk AGI</a><br /><a href="http://www.voip-info.org/wiki/view/Asterisk+cmd+Dial">Asterisk Dial Command</a><br /><a href="http://www.voip-info.org/tiki-index.php?page=Asterisk%20config%20extensions.conf">Asterisk extensions.conf</a><br /><a href="http://www.voip-info.org/wiki/view/Asterisk+manager+API">Asterisk manager</a><br /><br />

<div style="margin-top: 10px; height: 15px;" class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/df8f2bc3-9f16-4338-b8a0-8206d189adb3/" title="Reblog this post [with Zemanta]"><img style="border: medium none ; float: right;" class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_e.png?x-id=df8f2bc3-9f16-4338-b8a0-8206d189adb3" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>]]>
        
    </content>
</entry>

<entry>
    <title>2009 Hydroponic Garden Week 1</title>
    <link rel="alternate" type="text/html" href="http://unf.net/2009/03/2009-hydroponic-garden-week-1.php" />
    <id>tag:unf.net,2009://1.11</id>

    <published>2009-03-22T16:22:15Z</published>
    <updated>2009-03-22T16:32:17Z</updated>

    <summary><![CDATA[This is the beginning of my 2009 indoor garden.&nbsp; I have started tomatoes (Roma + Beefsteak), strawberries, oregeno, chives, basil, and cilantro.&nbsp; I'm going to use the lessons learned of last year (maintenance/upkeep/trimming) to have a better garden this time.I...]]></summary>
    <author>
        <name>Andy Goodwin</name>
        
    </author>
    
        <category term="gardening" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="gardeninghydroponics2009" label="gardening hydroponics 2009" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://unf.net/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://www.flickr.com/photos/thegoodwinfamily/3373901937/" title="2009 Hydroponic Garden - Week 1 by AndyGoodwin, on Flickr"><img src="http://farm4.static.flickr.com/3624/3373901937_45fde6f83c.jpg" alt="2009 Hydroponic Garden - Week 1" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="333" width="500" /></a></span><p>This is the beginning of my 2009 indoor garden.&nbsp; I have started tomatoes (Roma + Beefsteak), strawberries, oregeno, chives, basil, and cilantro.&nbsp; I'm going to use the lessons learned of last year (maintenance/upkeep/trimming) to have a better garden this time.</p><p>I went to Home Depot and purchased some cinderblock and shelves, so now under the light is two tiers of shelving, one for the self contained hydroponic buckets and the other for all my herbs and anything else I wish to grow.</p><p>The picture shows progress after six days.&nbsp; This year I've got a plastic moisture hood over the seedlings, as well as a heat pad underneath (to promote better root growth).</p>]]>
        
    </content>
</entry>

<entry>
    <title>From seeds to plants - 2008 version</title>
    <link rel="alternate" type="text/html" href="http://unf.net/2009/03/seeds-to-plants-round-1.php" />
    <id>tag:unf.net,2009://1.10</id>

    <published>2009-03-16T04:05:20Z</published>
    <updated>2009-03-16T05:08:27Z</updated>

    <summary><![CDATA[Has it already been a year?!It's been some time since I've posted the progress on the tomato plants.&nbsp; Unfortunately, the demands of work and life have prevented me from giving the time necessary to accurately document the growth, as well...]]></summary>
    <author>
        <name>Andy Goodwin</name>
        
    </author>
    
        <category term="gardening" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="2008gardeninghydroponics" label="2008 gardening hydroponics" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://unf.net/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://www.flickr.com/photos/thegoodwinfamily/2479157192/"><img alt="2008-05-08-plants.jpg" src="http://unf.net/2009/03/15/2008-05-08-plants.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="500" width="333" /></a></span><p><br />Has it already been a year?!<br /><br />It's been some time since I've posted the progress on the tomato plants.&nbsp; Unfortunately, the demands of work and life have prevented me from giving the time necessary to accurately document the growth, as well as take care of the tomato plants.</p><p>The plants ended up overgrowing the green/leaf/vegitation and the fruit wasn't the size I wanted.&nbsp; These three were a first lesson in tomato growing.&nbsp; This was a lot of fun for me, and there will be round two (which is already started).</p><p>After the jump - I will share what I did document in progress, and the link to the photostream on Flickr that has more detail.</p><p>The next post I'll show the beginnings of my next round of indoor gardening!<br /></p>]]>
        <![CDATA[<hr>
<br />
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://www.flickr.com/photos/thegoodwinfamily/2406523891/" title="Hydroponics - Tomato Plants (Week 3) by AndyGoodwin, on Flickr"><img alt="growlings.jpg" src="http://unf.net/growlings.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" height="160" width="240" /></a></span><br /><br />Starting with the little plants that are ready to be moved into the hydroponic buckets - I setup the hyrdoponic bucket.<br /><br /><br /><br /><br /><br /><br /><br />

<form class="mt-enclosure mt-enclosure-image" style="display: inline;" contenteditable="false"><a href="http://www.flickr.com/photos/thegoodwinfamily/2406525019/" title="Power Grower Eco Unboxed by AndyGoodwin, on Flickr"><img src="http://farm3.static.flickr.com/2120/2406525019_7244c742d2_m.jpg" class="mt-image-right" alt="Power Grower Eco Unboxed" style="margin: 0pt 0pt 20px 20px; float: right;" border="0" height="160" width="240" /></a></form><p align="right">This is the contents of what came with the <a href="http://www.amazon.com/General-Hydroponics-Power-Grower-Eco/dp/B00164XM4A/ref=sr_1_1?ie=UTF8&amp;s=home-garden&amp;qid=1237178195&amp;sr=8-1">Power Grower Eco</a>.&nbsp; This self contained hydroponic system comes with everything - the clay pellets, the hoses, the air compressor (to circulate the nutrients), and and chemicals/nutrients to get started.</p><p align="right"><br /></p><p align="right"></p><form class="mt-enclosure mt-enclosure-image" style="display: inline;" contenteditable="false"><a href="http://www.flickr.com/photos/thegoodwinfamily/2406535181/" title="Well developed root structure after 3 weeks by AndyGoodwin, on Flickr"><img src="http://farm4.static.flickr.com/3226/2406535181_949cfe6df9_m.jpg" class="mt-image-left" style="margin: 0pt 20px 20px 0pt; float: left;" alt="Well developed root structure after 3 weeks" height="160" width="240" /></a></form><p align="left"><br /></p><p align="left">The root structure from just being planted in the rockwool.&nbsp; The roots have overtaken most of the rockwool and they're quite healthy!</p><p align="left"><br /></p><p align="left"><br /></p><p align="left"><br /></p><p align="left"></p><form class="mt-enclosure mt-enclosure-image" style="display: inline;" contenteditable="false"><a href="http://www.flickr.com/photos/thegoodwinfamily/2406535873/" title="Tomato plant in power grower hydroponic bucket by AndyGoodwin, on Flickr"><img src="http://farm3.static.flickr.com/2163/2406535873_464892dca3_m.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" alt="Tomato plant in power grower hydroponic bucket" border="0" height="160" width="240" /></a></form><p align="right"><br /></p><p align="right">This is the tomato plant in its final home.</p><p align="right">The nutrients cycle through the bucket, from the bottom where the reservoir is kept through the verticle tube (as air is forced in from the bottom) and through the ring around the plant.</p><p align="right">The tomato plant's roots will expand throughout the clay pellets, and grow.<br /></p><p align="right"><br /></p><p align="center">For the full tour of the assembly -- <a href="http://www.flickr.com/photos/thegoodwinfamily/sets/72157604204425769/detail/?page=2">see my photostream on my Flickr</a>.</p><p align="center"><br /></p><p align="center"><br /></p>]]>
    </content>
</entry>

<entry>
    <title>Three weeks of great progress.</title>
    <link rel="alternate" type="text/html" href="http://unf.net/2008/04/three-weeks-of-great-progress.php" />
    <id>tag:unf.net,2008://1.8</id>

    <published>2008-04-11T23:24:03Z</published>
    <updated>2008-04-12T19:56:13Z</updated>

    <summary><![CDATA[ These are the tomato plants now after 3 weeks or so.&nbsp; They've developed quite a bit since the simple seedlings that popped out of the rockwool.&nbsp; With watering everyday and plenty of light, they have really grown strong.&nbsp; The...]]></summary>
    <author>
        <name>Andy Goodwin</name>
        
    </author>
    
        <category term="gardening" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="gardening" label="gardening" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="hydroponics" label="hydroponics" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://unf.net/">
        <![CDATA[<span style="display: inline;" class="mt-enclosure mt-enclosure-image"><a href="http://www.flickr.com/photos/thegoodwinfamily/2407354198/"><img width="354" height="235" border="0" style="margin: 0pt 20px 20px 0pt; float: left;" class="mt-image-left" src="http://unf.net/2008/04/12/week3-tomato1.jpg" alt="week3-tomato1.jpg" /></a></span> <p>These are the tomato plants now after 3 weeks or so.&nbsp; They've developed quite a bit since the simple seedlings that popped out of the rockwool.&nbsp; With watering everyday and plenty of light, they have really grown strong.&nbsp; The roots have completely enveloped the rockwool and they are ready for a bigger place.</p> <p>I have to transplant/move them into bigger pots - and I have already done so.</p> <p>I will be stating another seedling&nbsp; run soon as well.</p> <p>&nbsp;</p> <span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://www.flickr.com/photos/thegoodwinfamily/2407353892/"><img width="315" height="212" border="0" alt="week3-tomato2.jpg" src="http://unf.net/2008/04/12/week3-tomato2-thumb-512x341.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" /></a></span> <p>I have already used my camera to completely document all the steps I have taken, which I will be posting this weekend.</p> <p>So far - I am very excited with the rapid rate of progress that I have in my garden, and I really can't wait to have tomatoes hanging off these plants.</p> <p><b>Check back this weekend</b> - for the full photo/instructionals/comments from a beginner.&nbsp; Also - feel free to ask me questions, or leave comments on your thoughts!</p>]]>
        
    </content>
</entry>

<entry>
    <title>Indoor Gardening (hydroponics)</title>
    <link rel="alternate" type="text/html" href="http://unf.net/2008/03/indoor-gardening-hydroponics.php" />
    <id>tag:unf.net,2008://1.6</id>

    <published>2008-03-23T19:43:31Z</published>
    <updated>2008-04-12T08:38:20Z</updated>

    <summary><![CDATA[While it may appear to the people that know me that I'm always into gadgets/computers/electronic stuff, I'm also fascinated by many other things outside of computers.&nbsp; Last year I started getting more into cooking, watching the Food Network and trying...]]></summary>
    <author>
        <name>Andy Goodwin</name>
        
    </author>
    
        <category term="gardening" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="gardening" label="gardening" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="hydroponics" label="hydroponics" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://unf.net/">
        <![CDATA[<span style="display: inline;" class="mt-enclosure mt-enclosure-image"><img width="100" height="67" style="margin: 0pt 20px 20px 0pt; float: left;" class="mt-image-left" src="http://unf.net/2008/03/23/2008-03-23-seedling-thumb.jpg" alt="2008-03-23-seedling-thumb.jpg" /></span><p>While it may appear to the people that know me that I'm always into gadgets/computers/electronic stuff, I'm also fascinated by many other things outside of computers.&nbsp; Last year I started getting more into cooking, watching the Food Network and trying things I watched on TV.&nbsp; I've made some pretty great stuff (details I'll save for another blog post).<br /><br />One of the things I learned is the tomatoes in the grocery stores are un-ripe, and given a chemical to treat them and make them red.&nbsp; I feel <strike>cheated</strike> <strike>robbed</strike> like I'm missing out on the true taste of tomatoes.&nbsp; I've also always wanted to grow my own tomatoes (after growing a bunch of stuff in my window), so I went nuts at a local hydroponic supply store.<br /><br />I have a 400W grow light, reflector, hydroponic grow buckets, rockwool seed starting cubes, and I have started with tomato seeds.&nbsp; I have 3 kinds of tomato seeds - beefsteak, roma, and a yellow one.</p>]]>
        <![CDATA[Here is a picture of the reflector, the ballast, and socket assembly:<br /><br />

<a href="http://www.flickr.com/photos/thegoodwinfamily/2351923529/" title="Hydroponics - Reflector by AndyGoodwin, on Flickr"><img src="http://farm4.static.flickr.com/3151/2351923529_0e3940854c.jpg" alt="Hydroponics - Reflector" height="333" width="500" /></a><br /><br />And this is the setup in my guest bedroom - I used a wire shelf unit to hang the light from (so I can easily adjust the height).&nbsp; This picture was taken at night, and let me say - its the sun in a bulb.<br /><br />

<a href="http://www.flickr.com/photos/thegoodwinfamily/2351924309/" title="Hydroponics - Setup by AndyGoodwin, on Flickr"><img src="http://farm4.static.flickr.com/3275/2351924309_e0413a7df5.jpg" alt="Hydroponics - Setup" height="333" width="500" /></a><br />

<br />The rockwool sits in this plastic tray that allows the liquid to drain into the bottom tray:<br /><br />

<a href="http://www.flickr.com/photos/thegoodwinfamily/2351924855/" title="Hydroponics - Seedlings by AndyGoodwin, on Flickr"><img src="http://farm3.static.flickr.com/2029/2351924855_01518fd1f7.jpg" width="500" height="333" alt="Hydroponics - Seedlings" /></a><br />

<br />And after 3 days, you can see the seeds beginning to sprout:<br /><br />

<a href="http://www.flickr.com/photos/thegoodwinfamily/2352753688/" title="Hydroponic - Seedlings by AndyGoodwin, on Flickr"><img src="http://farm3.static.flickr.com/2032/2352753688_49952b0fd4.jpg" width="500" height="333" alt="Hydroponic - Seedlings" /></a><br /><br />After I took that picture - the next day the seedlings broke free:<br /><br />

<a href="http://www.flickr.com/photos/thegoodwinfamily/2352755924/" title="Hydroponics - Seedlings by AndyGoodwin, on Flickr"><img src="http://farm3.static.flickr.com/2284/2352755924_9161ec07c5.jpg" width="500" height="333" alt="Hydroponics - Seedlings" /></a><br /><br />So I am pretty excited - this project should really pay off nicely, and while pictures really can't show the difference in taste (between store bought and home-grown), I would like to document the progress and the methods/techniques for others to try their hand at growing yummie yummie right here tomatoes.<br /><br /><br />]]>
    </content>
</entry>

<entry>
    <title>New Blog</title>
    <link rel="alternate" type="text/html" href="http://unf.net/2008/03/new-blog.php" />
    <id>tag:unf.net,2008://1.4</id>

    <published>2008-03-14T01:15:46Z</published>
    <updated>2008-03-23T23:08:36Z</updated>

    <summary><![CDATA[So, I have decided to go back to a blog (instead of the couch picture of me).&nbsp; I've been wanting a better platform to post/share things, and while I'm a bit fanatical about wanting to code it all myself, it...]]></summary>
    <author>
        <name>Andy Goodwin</name>
        
    </author>
    
        <category term="personal" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="2008" label="2008" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="personal" label="personal" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="webdevelopment" label="web development" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en-US" xml:base="http://unf.net/">
        <![CDATA[So, I have decided to go back to a blog (instead of the couch picture of me).&nbsp; I've been wanting a better platform to post/share things, and while I'm a bit fanatical about wanting to code it all myself, it seems some things are better left to others.<br /><br />I have chosen Movable Type over Wordpress (booooo, perl over PHP!?), but while I code PHP all day and really detest Perl (reasons belonging in another post), I rather like how Movable Type uses the database to publish static files.&nbsp; Plus, the back-end interface is really snazzy!<br /><br />As for this blog, I have a bunch of PHP code snippets, some lessons/things I've learned over the years, and just general geek info I want to share with the world.&nbsp; Everybody has big goals for their little blog to be read by many - I just want to have a nice repository for all these snippets/things I've learned/hacked up in the past.<br /><br />Stay tuned!<br />]]>
        
    </content>
</entry>

</feed>
