<?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>Matthew C Good &#187; matt</title>
	<atom:link href="http://www.matthewcgood.com/blog/author/matt/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.matthewcgood.com/blog</link>
	<description>Musician, Web Developer, Hobbyist.</description>
	<lastBuildDate>Sun, 25 Jul 2010 20:56:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Vonnegut Talks About Art</title>
		<link>http://www.matthewcgood.com/blog/2010/01/21/vonnegut-talks-about-art/</link>
		<comments>http://www.matthewcgood.com/blog/2010/01/21/vonnegut-talks-about-art/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 05:07:20 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.matthewcgood.com/blog/?p=751</guid>
		<description><![CDATA[Some of my friends were trying to have an aesthetics discussion on twitter today.  And I wanted to quote this bit from Kurt Vonnegut&#8217;s &#8220;Timequake&#8221; that I thought was rather applicable, but being as it was twitter, I couldn&#8217;t fit it in 140 characters, so I just made a snide comment instead.  But [...]]]></description>
			<content:encoded><![CDATA[<p>Some of my friends were trying to have an aesthetics discussion on twitter today.  And I wanted to quote this bit from Kurt Vonnegut&#8217;s &#8220;Timequake&#8221; that I thought was rather applicable, but being as it was twitter, I couldn&#8217;t fit it in 140 characters, so I just made a snide comment instead.  But I promised I would post the excerpt on my blog, so here it is.  It&#8217;s a bit long, but it is very good.</p>
<blockquote><p>So much for science, and how helpful it can be in these times of environmental calamities. Chernobyl is still hotter than a Hiroshima baby carriage. Our underarm deoderants have eaten holes in the ozone layer.<br />
And just get a load of this: My big brother Bernie, who can&#8217;t draw for sour apples, and who at his most objectionable used to say he didn&#8217;t like paintings because they didn&#8217;t <em>do</em> anything, just hung there year after year, has this summer become an artist!<br />
I shit you not! This Ph.D. physical chemist from MIT is now the poor man&#8217;s Jackson Pollock! He squoozles glurp of various colors and consistencies between two flat sheets of impermiable materials, such as windowpanes or bathroom tiles. The pulls them apart, <em>et voila!</em> This has nothing to do with his cancer. He didn&#8217;t know he had it yet, and the malignancy was in his lungs and not in his brain in any case. He was just farting around one day, a semi-retired old geezer without a wife to ask him what in the name of God he thought he was doing, <em>et voila!</em> Better late than never, that&#8217;s all I can say.<br />
So he sent me some black-and-white Xeroxes of his squiggle miniatures, mostly dendritic forms, maybe trees or shrubs, maybe mushrooms o umbrellas full of holes, but really quite interesting. Like my ballroom dancing, they were <em>acceptable.</em> He has since sent me multicolored originals, which I like a lot.</p>
<p>The message he sent me along with the Xeroxes, though, wasn&#8217;t about unexpected happiness. It was an unreconstructed technocrat&#8217;s challenge to the artsy-fartsy, of which I was a prime exemplar. &#8220;Is this art or not?&#8221; he asked. He couldn&#8217;t have put that question so jeeringly fifty years ago, of course, before the founding of the first wholly American school of painting, Abstract Expressionism, and the deification in particular of Jack the Dripper, Jackson Pollock, who also couldn&#8217;t draw for sour apples.<br />
Bernie said, too, that a very interesting <em>scientific phenomenon</em> was involved, having to do, he left me to guess, with how different glurps behave when squoozled this way and that, with nowhere to go but up or down or sideways. If the artsy-fartsy world had no use for his pictures, he seemed to imply, his pictures could still point the way to better lubricants or suntan lotions, or who knows what? The all-new Preparation-H!<br />
He would not sign his pictures, he said, or admit publicly that he had made them, or describe how they were made. He plainly expected puffed-up critics to sweat bullets and excrete sizable chunks of masonry when trying to answer his cunningly innocent question: &#8220;Art or not?&#8221;</p>
<p>I was pleased to reply with an epistle which was frankly vengeful, since he and Father had screwed me out of a liberal arts college education: &#8220;Dear Brother: This is almost like telling you about the birds and the bees,&#8221; I began. &#8220;There are many good people who are beneficially stimulated by some, but not all, manmade arrangements of colors and shapes on flat surfaces, essentially <em>nonsense.</em><br />
&#8220;You yourself are gratified by some music, arrangements of noises, and again essentially <em>nonsense.</em> If I were to kick a bucket down the cellar stairs, and then say to you that the racket I had made was philosophically on par with <em>The Magin Flute,</em> this would not be the beginning of a long and upsetting debate. An utterly satisfactory and complete response on your part would be, &#8216;I like what Mozart did, and I hate what the bucket did.&#8217;<br />
&#8220;Contemplating a purpoted work of art is a social activity. Either you have a rewarding time, or your don&#8217;t. You don&#8217;t have to say <em>why</em> afterward. You don&#8217;t have to say anything.<br />
&#8220;You are a justly revered experimentalist, dear brother. If you really want to know whether your pictures are, as you say, &#8216;art or not,&#8217; you must display them in a public place somewhere, and see if strangers like to look at them. That is the way the game is played. Let me know what happens.&#8221;</p>
<p>I went on: &#8220;People capable of liking some paintings or prints or whatever can rarely do so without knowing something about the artist. Again, the situation is social rather than scientific. Any work of art is half of a conversation between two human beings, and it helps a lot to know who is talking at you. Does he or she have a reputation for seriousness, for religiosity, for suffering, for concupiscence, for rebellion, for sincerity, for jokes?<br />
&#8220;There are virtually no respected paintings made by persons about whom we know zilch. We can even surmise quite a bit about the lives of whoever did the paintings in the caverns underneath Lascaux, France.<br />
&#8220;I dare to suggest that no picture can attract serious attention without a particular sort of human being attached to it in the viewer&#8217;s mind. If you are unwilling to claim credit for your pictures, and to say why you hoped others might find them worth examining, there goes the ball game.<br />
&#8220;Pictures are famous for their humanness, and no for their pictureness.&#8221;</p>
<p>I went on: &#8220;There is also the matter of craftsmanship. Real picture-lovers like to <em>play along,</em> so to speak, to look closely at the surfaces, to see how the illusion was created. If you are unwilling to say how you made your pictures, there goes the ball game a second time.<br />
&#8220;Good luck, and love as always,&#8221; I wrote. And I signed my name.</p></blockquote>
<p>(From Vonnegut&#8217;s 1997 novel &#8220;Timequake,&#8221; which I kinda liked, even though it was kindof all over the place, because it occasionally contained some really good stuff like this. Please don&#8217;t sue me, owners of Vonnegut&#8217;s rights.  Just trying to make conversation.)</p>
<p>This little bit does a fairly tidy job of responding to the volumes of stuff that has been written trying to pin down really specific definitions of what this crazy thing called art is.  Coming from a technical background (with a little artistic goodness thrown in), my inclination was to try to come up with a really nice reductive definition of art (of course ignoring the social conversation going on).  But good ol&#8217; Kurt does a good job of making sense, as always.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewcgood.com/blog/2010/01/21/vonnegut-talks-about-art/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>My thoughts on AMC&#8217;s Prisoner remake</title>
		<link>http://www.matthewcgood.com/blog/2009/12/07/my-thoughts-on-amcs-prisoner-remake/</link>
		<comments>http://www.matthewcgood.com/blog/2009/12/07/my-thoughts-on-amcs-prisoner-remake/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 00:25:41 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Be Seeing You]]></category>
		<category><![CDATA[McGoohan]]></category>
		<category><![CDATA[Pop Culture]]></category>
		<category><![CDATA[Prisoner]]></category>
		<category><![CDATA[SciFi]]></category>
		<category><![CDATA[Whimsical]]></category>

		<guid isPermaLink="false">http://www.matthewcgood.com/blog/?p=736</guid>
		<description><![CDATA[
You tell &#8216;em, McGoohan.
]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-737" title="Not Amusing." src="http://www.matthewcgood.com/blog/wp-content/uploads/2009/12/not_amused.jpg" alt="Not Amusing." width="760" height="553" /></p>
<p>You tell &#8216;em, McGoohan.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewcgood.com/blog/2009/12/07/my-thoughts-on-amcs-prisoner-remake/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FishApp &#8211; Water Change Detection</title>
		<link>http://www.matthewcgood.com/blog/2009/10/24/fishapp-water-change-detection/</link>
		<comments>http://www.matthewcgood.com/blog/2009/10/24/fishapp-water-change-detection/#comments</comments>
		<pubDate>Sun, 25 Oct 2009 03:50:46 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Aquariums]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[FishApp]]></category>
		<category><![CDATA[netbooks]]></category>
		<category><![CDATA[Programming/Tech]]></category>

		<guid isPermaLink="false">http://www.matthewcgood.com/blog/?p=734</guid>
		<description><![CDATA[The other day, I went to the mall with Kristin.  I usually finish up quicker than her, and this time being in possession of a shiny tiny netbook, I was able to code and tweak the water change detection algorithm for the FishApp while sitting on a bench outside of Macy&#8217;s.  I had a couple [...]]]></description>
			<content:encoded><![CDATA[<p>The other day, I went to the mall with Kristin.  I usually finish up quicker than her, and this time being in possession of a shiny tiny netbook, I was able to code and tweak the water change detection algorithm for the FishApp while sitting on a bench outside of Macy&#8217;s.  I had a couple rather confused onlookers.  I may or may not be on a &#8220;do-not-fly&#8221; list now.</p>
<p>To refresh your memory, the FishApp keeps track of water changes, and gives you a graph showing weighted-age values for the water in your fish tank.  This requires you to pay attention while you&#8217;re doing the water change, and to log in to the website and report how much water you changed when.  Well, I want to have the FishApp sense, measure, and publish water changes for me.  To those ends, I designed a system that can measure the water level in the tank over time, report it to a computer, figure out when and how much water was changed, and report that back to the main fishapp web application.  The measurement is done using a Ping))) ultrasonic rangefinder, and data from that (and other sensors) is fed into a computer.</p>
<p>But just how is the computer supposed to figure out when a water change happened?  It&#8217;s input is just a string of numbers, and it&#8217;s gotta be smart enough to filter out random noise from tank cleanings, frisky fish, the water filter starting and stopping for one reason or another, or any of a hundred other situations.  What to do?</p>
<p>If you&#8217;ve read the last post about the FishApp, you know where to start &#8211; smooth out the data.  To recap, I have the sensor set to read the water level every half-second, and report it to the computer.  The raw data is pretty noisy:</p>
<p><a href="http://www.matthewcgood.com/gallery/main.php?g2_itemId=89846"><img class="alignnone" title="Raw Water Change Data" src="http://www.matthewcgood.com/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=89848&amp;g2_serialNumber=2" alt="" width="640" height="483" /></a></p>
<p>but if we make new data points from the median of  every 20 samples, things smooth out pretty quickly:</p>
<p><a href="http://www.matthewcgood.com/gallery/main.php?g2_itemId=89840"><img class="alignnone" title="Smoothed Water Change Data" src="http://www.matthewcgood.com/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=89842&amp;g2_serialNumber=2" alt="" width="640" height="483" /></a></p>
<p>The system should be able to handle this muuuch easier.</p>
<p>The algorithm works by keeping a queue of recent (smoothed) samples.  By comparing the oldest sample with the newest sample, you can get a &#8220;slope&#8221; value.   On the graph above, for example, it doesn&#8217;t take very many samples until the oldest will be just over 600 but the most recent will be around 800 or so, and you&#8217;ll have a large positive slope.  Once the algorithm sees this large positive slope (above a certain trigger value), it knows that a water change is beginning, and notes the water level beforehand.  At some point in the process of a water change, I start filing the tank up again, and we see a large negative slope (around 55-60 on the graph above).  The algorithm notes the capitulation and the minimum water level.  If the absolute value of the slope stays low enough for long enough, the algorithm detects a steady state, and calls it the end of the water change.  The &#8220;steps&#8221; you see on the graph are because I do my water changes bucket-by-bucket, but because the algorithm is using a slope from a queue maybe 10 samples long, it already does a pretty good job of smoothing these steps out, and not getting too confused.</p>
<p>After running the algorithm against the data above, it worked flawlessly.  Take a look at this graph:</p>
<p><a href="http://www.matthewcgood.com/gallery/main.php?g2_itemId=89849"><img class="alignnone" title="Water Change Detection Algorithm" src="http://www.matthewcgood.com/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=89851&amp;g2_serialNumber=2" alt="" width="640" height="483" /></a></p>
<p>The gray lines are where the important steps in the process were detected.  For example, the first gray line @ x=10 is where the algorithm first noticed we were emptying water out of the tank.  It looks late &#8211; and it is, but that&#8217;s merely a consequence of using a queue of 10 samples to generate the slope.  The actual &#8220;before&#8221; water level value it uses is not the one at the gray line, but the minimum one in the queue &#8211; which is correct (enough for rock and roll).  Then, at x=54, the algorithm detected a large negative slope and decided that we were filling the tank up again.  It started looking for the start of a steady state, which it found at x=121, and it stayed steady long enough that at x=150, the algorithm wrapped up and decided that we&#8217;ve done a water change.  NIFTY!</p>
<p>If you think about what is going on here, it&#8217;s really calculus, under the covers.  The slope value is the derivative of the function, and we look for the points that derivative changes sign.  But the function we&#8217;re using isn&#8217;t perfect, and isn&#8217;t continuous, and so we&#8217;ve got to build in a little extra wonkitude-resistance.  The algorithm has inputs for the size of the queue, the trigger value for large positive/negative slopes, a tolerance value to ignore noise during steady states, and the number of samples to go during a steady state before deciding we&#8217;re really done with the water change &#8211; so in theory, this algorithm could be adapted and tuned for a wide range of input sources with little-to-no modification.</p>
<p>Right now, the algorithm is coded in python, but I think it might even be possible to do the crunching on the Arduino.  If I did that and wired the Arduino up to an ethernet shield, I could ALMOST eliminate the computer altogether.  I still need the computer to run the webcam, however, so there&#8217;s no point in trying to run this code on the chip or anything like that.  But I think it would be possible in theory, if you don&#8217;t want the cam server running.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewcgood.com/blog/2009/10/24/fishapp-water-change-detection/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Orange Monster</title>
		<link>http://www.matthewcgood.com/blog/2009/10/24/the-orange-monster/</link>
		<comments>http://www.matthewcgood.com/blog/2009/10/24/the-orange-monster/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 18:57:02 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Arty Things]]></category>
		<category><![CDATA[orange monster]]></category>
		<category><![CDATA[Photos]]></category>
		<category><![CDATA[seiko]]></category>
		<category><![CDATA[watches]]></category>
		<category><![CDATA[x-files]]></category>

		<guid isPermaLink="false">http://www.matthewcgood.com/blog/?p=728</guid>
		<description><![CDATA[
The watch is a  Seiko affectionately called the &#8220;Orange Monster.&#8221;  It&#8217;s a huge, loud, fun, heavy watch &#8211; and it makes me quite happy.  I also made and put up a giant X-Files &#8220;I Want To Believe&#8221; poster.  There are several different images for this poster floating around on the net, and much to my [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-large wp-image-729" title="Orange Monster Wants to Believe" src="http://www.matthewcgood.com/blog/wp-content/uploads/2009/10/CIMG6645-768x1024.jpg" alt="Orange Monster Wants to Believe" width="768" height="1024" /></p>
<p>The watch is a  Seiko affectionately called the &#8220;Orange Monster.&#8221;  It&#8217;s a huge, loud, fun, heavy watch &#8211; and it makes me quite happy.  I also made and put up a giant X-Files &#8220;I Want To Believe&#8221; poster.  There are several different images for this poster floating around on the net, and much to my chagrin, it turns out it&#8217;s NOT the one that I see behind Mulder&#8217;s desk in the series.  Ah, well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewcgood.com/blog/2009/10/24/the-orange-monster/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>What A Water Change Looks Like to the FishApp</title>
		<link>http://www.matthewcgood.com/blog/2009/10/04/what-a-water-change-looks-like-to-the-fishapp/</link>
		<comments>http://www.matthewcgood.com/blog/2009/10/04/what-a-water-change-looks-like-to-the-fishapp/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 05:21:29 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Aquariums]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[DIY]]></category>
		<category><![CDATA[FishApp]]></category>
		<category><![CDATA[Programming/Tech]]></category>

		<guid isPermaLink="false">http://www.matthewcgood.com/blog/?p=719</guid>
		<description><![CDATA[One of the goals of the FishApp is to have automatic water change detection available in phase 1.  In order to do this, I have a Ping))) ultrasonic distance sensor pointed down at my fishtank.  This little guy works by producing a sound above human hearing range, and listening for it to bounce [...]]]></description>
			<content:encoded><![CDATA[<p>One of the goals of the <a href="http://www.matthewcgood.com/fishapp" target="_blank">FishApp</a> is to have automatic water change detection available in phase 1.  In order to do this, I have a<a href="http://www.parallax.com/StoreSearchResults/tabid/768/txtSearch/ping/List/0/SortField/4/ProductID/92/Default.aspx" target="_blank"> Ping))) ultrasonic distance sensor</a> pointed down at my fishtank.  This little guy works by producing a sound above human hearing range, and listening for it to bounce back.  If you know the speed of sound, you can calculate how far away the object was that caused the reflection.  The sensor I am using is mounted above the tank in a piece of 1/4 inch wood to help shield it from the moisture, and samples the water level at predetermined intervals, sending its data over a serial connection to a host computer via an <a href="http://www.arduino.cc" target="_blank">Arduino</a> controller.</p>
<p>The host computer gets this stream of numbers, and has to have some way of determining when I&#8217;ve done a water change, and how much water I&#8217;ve changed.  I got the feeling that random variation (noise) in the data from the sensor could throw off whatever method I use to compute all of this, so I needed to figure out exactly what the data looks like coming in to the computer, preferably saving it so I can test my algorithms against it without having to do a water change after each revision &#8211; that would be a heck of a lot worse than just waiting for the code to recompile.</p>
<p>So I fired up Arduino and Python did a water change, saving the raw data from the Ping))) sensor to a file.  Without further ado, this is what a water change looks like to a computer:</p>
<p><a href="http://www.matthewcgood.com/gallery/main.php?g2_itemId=89846"><img class="alignnone" title="Raw Ping))) Data" src="http://www.matthewcgood.com/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=89848&amp;g2_serialNumber=2" alt="" width="640" height="483" /></a></p>
<p>Pretty cool, huh?  When I do a water change, I siphon water out of the tank into a 3 gallon bucket, and empty it a bucket at a time, until I&#8217;ve taken out as much as I like, and then I re-fill the think 3 gallons at a time.  You end up with the very visible &#8220;steps&#8221; on the graph.  While the data looks mostly consistent, you can see some wonkiness in some of the steps &#8211; which almost looks like thick lines.  The sensor isn&#8217;t quite reading the distance regularly in this case.  This looks to me like the kind of data which could really throw of my detection algorithm.  So I had the bright idea of taking a median of 5 samples for each data point and using that series for detection.  Here&#8217;s what a median-of-five graph looks like:</p>
<div class="wp-caption alignnone" style="width: 650px"><a href="http://www.matthewcgood.com/gallery/main.php?g2_itemId=89843"><img title="Median of Five Graph" src="http://www.matthewcgood.com/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=89845&amp;g2_serialNumber=2" alt="Median of Five Graph" width="640" height="483" /></a><p class="wp-caption-text">Median of Five Graph</p></div>
<p>You should notice two things: 1) there are fewer datapoints by an order of five, because of the median, and 2) the curve is smoother.  I could prove this by computing the standard deviation on some of those trouble spots from above, but I don&#8217;t think it&#8217;s necessary: it&#8217;s plain to see when graphed.  The data could still be better though &#8211; look at the jaggies around 100.  We&#8217;ve got plenty of data, so we should be able to create a very smooth line and still have enough resolution to see each step, etc.</p>
<p>I&#8217;ll spare you all the gory details, but suffice it to say that the larger the median used, the better.  A median of 10 was better, but still not good.  A median of 15 was nearly perfect, but there was still just a <em>little</em> weirdness.  A median of 20 was perfect:</p>
<div class="wp-caption alignnone" style="width: 650px"><a href="http://www.matthewcgood.com/gallery/main.php?g2_itemId=89840"><img title="Median of 20 graph" src="http://www.matthewcgood.com/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=89842&amp;g2_serialNumber=2" alt="Median of 20 graph" width="640" height="483" /></a><p class="wp-caption-text">Median of 20 graph</p></div>
<p>That&#8217;s more like it.  We&#8217;ve still got enough data there to see the water change in detail, but smoothed out all the ugliness that could throw off the computer.  Cool stuff.</p>
<p>More details on the detection algorithm&#8217;s implementation to follow.  Charts generated with my new favorite tool, Python.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewcgood.com/blog/2009/10/04/what-a-water-change-looks-like-to-the-fishapp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FishApp Update &#8211; It&#8217;s Doing Stuff</title>
		<link>http://www.matthewcgood.com/blog/2009/08/21/fishapp-update-its-doing-stuff/</link>
		<comments>http://www.matthewcgood.com/blog/2009/08/21/fishapp-update-its-doing-stuff/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 22:30:23 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Aquariums]]></category>
		<category><![CDATA[FishApp]]></category>
		<category><![CDATA[Programming/Tech]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[Wildlife]]></category>

		<guid isPermaLink="false">http://www.matthewcgood.com/blog/?p=707</guid>
		<description><![CDATA[It looks like the FishApp is already providing me with some really neat and useful insights into my aquarium.  I recently added the ability to overlay and toggle multiple series on the graphs it displays, to make it easy to see if one parameter has an effect on another.  Take a look at this snapshot [...]]]></description>
			<content:encoded><![CDATA[<p>It looks like the <a href="http://www.matthewcgood.com/blog/2009/06/04/a-sneak-peak-at-the-fishapp/">FishApp</a> is already providing me with some really neat and useful insights into my aquarium.  I recently added the ability to overlay and toggle multiple series on the graphs it displays, to make it easy to see if one parameter has an effect on another.  Take a look at this snapshot I took today:</p>
<div id="attachment_708" class="wp-caption alignnone" style="width: 768px"><img class="size-full wp-image-708" title="Water Age and Nitrate Levels" src="http://www.matthewcgood.com/blog/wp-content/uploads/2009/08/FishApp-Chart.gif" alt="Water age &amp; nitrate levels over time" width="758" height="303" /><p class="wp-caption-text">Water age &amp; nitrate levels over time</p></div>
<p>This chart shows the average age (in days) of the water in my tank compared with the levels of Nitrate I measure using an aquarium test kit.  I compute the water age using information I record about water changes I do to my tank (a more detailed explanation can be found in the original <a href="http://www.matthewcgood.com/blog/2009/06/04/a-sneak-peak-at-the-fishapp/">FishApp post</a>), and Nitrate is a mildly-bad chemical the can build up in your tank over time.  It&#8217;s the end-product of the <a href="http://fins.actwin.com/mirror/begin-cycling.html">Nitrogen Cycle</a> in most fish tanks, and can only be removed by water changes or chemical absorption (which some plants and special filter media can do).</p>
<p>At least that&#8217;s the theory.  What this chart is showing me is that the theory seems to actually work out in practice, and that my tests are precise enough to actually be useful &#8211; always a good thing.  Even though I only have five data points for the nitrate series (because I don&#8217;t always test as much as I should), it is easy to see the nitrate curve following the water age curve.  They actually track pretty well, I think. You can see an ugly spike in the water age when I wasn&#8217;t paying enough attention to the tank, and the resulting high nitrate levels, which backed down after a series of regular water changes.  When the water age started creeping back up again, so did Nitrate levels, and then both went down again after we moved from Tennessee to North Carolina (and changed out about 2/3 of the tank water for fresh in the process).  Very cool.</p>
<p>Since nitrate is the last state that fish poo reaches in the nitrogen cycle, it would not surprise me if there were a delay between water age and its effects on nitrate levels.  I don&#8217;t really have the data to support that right now, but I will try to be more diligent in my testing, and perhaps we can figure that out soon.</p>
<p>If there are any aquarium owners out there who are interested in the FishApp, you can sign up free and track your own fish tank in a similar fashion. <a href="http://matthewcgood.com/fishapp/admin/index.php"> Here&#8217;s a link to sign up</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewcgood.com/blog/2009/08/21/fishapp-update-its-doing-stuff/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Today</title>
		<link>http://www.matthewcgood.com/blog/2009/06/27/today/</link>
		<comments>http://www.matthewcgood.com/blog/2009/06/27/today/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 01:48:02 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.matthewcgood.com/blog/?p=697</guid>
		<description><![CDATA[Nothing much to report.  Went to the zoo again, which I never really get tired of.  Even in 90 degree heat and high humidity.
Get the Flash Player to see this player.
var s1 = new SWFObject("https://media.dreamhost.com/mp4/player.swf","ply","320","260","9","#FFFFFF"); s1.addParam("allowfullscreen","true"); s1.addParam("allowscriptaccess","always"); s1.addParam("flashvars","file=http://www.matthewcgood.com/blogpics/CIMG6273_320x240.flv"); s1.write("mvcontainer");
]]></description>
			<content:encoded><![CDATA[<p>Nothing much to report.  Went to the zoo again, which I never really get tired of.  Even in 90 degree heat and high humidity.</p>
<div class="wp-caption alignnone" style="width: 650px"><a href="http://www.matthewcgood.com/gallery/main.php?g2_itemId=89664"><img title="Hyacinth Macaws" src="http://www.matthewcgood.com/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=89666&amp;g2_serialNumber=2" alt="Nashville Zoos Hyacinth Macaws" width="640" height="480" /></a><p class="wp-caption-text">Nashville Zoo&#39;s Hyacinth Macaws</p></div>
<div class="wp-caption alignnone" style="width: 650px"><a href="http://www.matthewcgood.com/gallery/main.php?g2_itemId=89667"><img title="Sloth" src="http://www.matthewcgood.com/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=89669&amp;g2_serialNumber=2" alt="Sloth" width="640" height="480" /></a><p class="wp-caption-text">Sloth</p></div>
<div id="mvcontainer"><a href="http://www.macromedia.com/go/getflashplayer">Get the Flash Player</a> to see this player.</div>
<p><script type="text/javascript" src="https://media.dreamhost.com/mp4/swfobject.js"></script><script type="text/javascript">var s1 = new SWFObject("https://media.dreamhost.com/mp4/player.swf","ply","320","260","9","#FFFFFF"); s1.addParam("allowfullscreen","true"); s1.addParam("allowscriptaccess","always"); s1.addParam("flashvars","file=http://www.matthewcgood.com/blogpics/CIMG6273_320x240.flv"); s1.write("mvcontainer");</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewcgood.com/blog/2009/06/27/today/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Sneak-Peak at the FishApp</title>
		<link>http://www.matthewcgood.com/blog/2009/06/04/a-sneak-peak-at-the-fishapp/</link>
		<comments>http://www.matthewcgood.com/blog/2009/06/04/a-sneak-peak-at-the-fishapp/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 20:26:37 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.matthewcgood.com/blog/?p=690</guid>
		<description><![CDATA[As many of you are aware of by now, I have a (un)healthy obsession with fish.  I also have a terrible memory.  And the ability to program web applications.  And the tendency to enjoy taking ideas all the way to their logical conclusions.
Possessing any of these attributes in isolation is not so [...]]]></description>
			<content:encoded><![CDATA[<p>As many of you are aware of by now, I have a <a title="Delicious bookmarks tagged &quot;Aquarium&quot;" href="http://delicious.com/matthewcgood/aquarium" target="_blank">(un)healthy obsession with fish</a>.  I also have a terrible memory.  And the ability to <a title="blog entries tagged &quot;programming&quot;" href="http://www.matthewcgood.com/blog/topics/programming/">program web applications</a>.  And the tendency to enjoy taking ideas all the way to their logical conclusions.</p>
<p>Possessing any of these attributes in isolation is not so bad of a thing.  But when all of them combine into one person, well&#8230;  You end up with some really oddball (yet fun) projects.</p>
<p>Bearing all that in mind, I&#8217;d like to tell you about a project I&#8217;m in the middle of right now &#8211; <a title="FishApp" href="http://matthewcgood.com/fishapp/" target="_blank">the FishApp</a>.  FishApp started out as a PHP/MySQL web application that I created to help keep track of the water quality in my fish tank, and to view changes in water parameters over time (to identify trends and causal relationships, for example).  That didn&#8217;t sound like such a difficult project&#8230;</p>
<div id="attachment_691" class="wp-caption alignnone" style="width: 710px"><a title="FishApp" href="http://matthewcgood.com/fishapp/" target="_blank"><img class="size-full wp-image-691" title="FishApp Screenshot" src="http://www.matthewcgood.com/blog/wp-content/uploads/2009/06/fishapp.jpg" alt="FishApp Screenshot" width="700" height="536" /></a><p class="wp-caption-text">FishApp Screenshot</p></div>
<p>This is where things started getting out of hand (in a good way).  I decided that there may be other fish nerds on the internet who may want to use the service, so I added multi-user capability to the FishApp.  Which meant I had to make everything more user-friendly and build out the Admin area a little btter.  I had to give users the option to upload a fish tank picture (and resize it for them, etc).  And what if they had multiple tanks?  And so on.  All of those features are currently built into the fishapp.  We&#8217;ll see if anyone decides to use it or not!</p>
<p>There&#8217;s nothing too crazy going on in the FishApp code.  The graphs are generated by <a title="Flot on Google Code" href="http://code.google.com/p/flot/" target="_blank">Flot</a> (using a custom PHP wrapper I wrote and dubbed &#8220;phlot&#8221;).  There&#8217;s<a title="jQuery.com" href="http://jquery.com/" target="_blank"> jQuery</a> and the <a title="jQuery UI Framework" href="http://jqueryui.com/" target="_blank">jQuery UI</a> tools all over the admin area, and of course a rather simple MySQL database in the back.</p>
<p>There were a few technical challenges to address, however.  The last graph on the page displays the average &#8220;age&#8221; of the water in your fish tank.  It is a <a title="How and why to do water changes" href="http://www.aquahobby.com/articles/e_waterchange.php" target="_blank">good idea to periodically change out some of the water</a> in the fish tank for fresh water (to reduce things like Nitrates and accumulated minerals).  This reduces the weighted average age of the water in your fish tank.  This is my favorite feature, as it adds a visual display to an important piece of information that is normally <em>invisible.</em></p>
<p>I also wanted the app  to send reminders to do maintenance tasks now and then.  However, if you have a large fish tank, you may only do a water change once a month, but if you have a small tank, you may want to do it every week.  I needed to give the users the opportunity to decided their own parameters for alerts.  In addition, I wanted users to be able to get an alert when their tank&#8217;s water age reached a certain number of days.  The SQL code necessary to aggregate across all the different maintenance types and tanks and users became quite large, however well-placed database indexes keep things running smoothly.</p>
<p><em>If you haven&#8217;t nodded off yet,</em> you might be thinking that I&#8217;ve just about pushed this idea as far as it can go.  You would be mistaken.</p>
<p>Sometime in the middle of the project, I discovered this awesome open-source hardware/software microcontroller project called <a title="Arduino.cc" href="http://arduino.cc/" target="_blank">Arduino</a>.  The Arduino project does what frustrated software engineers have longed to do since they days they first fired up QBasic on their friends&#8217; computers &#8211; interface with the REAL WORLD.  Easily.  You can program the Arduino using a comfortable C-like language in its easy-to-use development environment.  It can read sensor values, move servos, control motors, light LEDs, make sounds, etc.  Anything you can wire up to it, you can use (basically).  People were doing cool stuff like <a title="Arduino + Coffee = Nirvana" href="http://espressoproject.blogspot.com/" target="_blank">improving their espresso machines</a>, building <a title="Tom Igoe's Pong Rule" href="http://www.tigoe.net/pcomp/code/category/Processing/454" target="_blank">real-life pong interfaces</a>, <a title="Tweet-a-Watt" href="http://twitter.com/tweetawatt" target="_blank">tweeting their energy usage</a>, and the like.  So naturally I decided my fish tank had to be web-enabled.</p>
<p>I am still in the middle of this section of the project, but here are some ideas of what I plan on doing with the FishApp:</p>
<ul>
<li>Use an <a title="Parallax Ping))) sensor" href="http://www.parallax.com/Store/Sensors/ObjectDetection/tabid/176/ProductID/92/List/1/Default.aspx?SortField=ProductName,ProductName" target="_blank">ultrasonic distance sensor</a> &amp; some code to determine when I have just done a water change, and automatically post JSON data to the FishApp&#8217;s API.  No more forgetting to put water changes into the app.</li>
<li>Monitor the tank&#8217;s temperature over time using a <a title="Nat'l Semi LM34 sensor" href="http://www.national.com/mpf/LM/LM34.html" target="_blank">neat little National Semiconductor chip</a>.  I should be able to detect and diagnose any big swings in temperature in real time.</li>
<li>Control some LED moonlights for my tank, both on a programmed schedule, and using an infrared remote control.</li>
<li>Allow web users to feed my fish a special treat (once a day) by pushing a button on the web page.  AJAX + Arduino + Servos for the win!</li>
<li>Set up a FishCam &#8211; a webcam to view the action in the tank.</li>
<li>Every now and then, <a title="LanceTheFish's twitter account" href="http://twitter.com/LanceTheFish" target="_blank">tweet</a> what is going on in the fish tank.</li>
<li>Buy a <a title="PH Probe" href="http://www.drsfostersmith.com/product/prod_display.cfm?pcatid=4496" target="_blank">PH probe</a> and graph real-time PH values (especially important if I decide to do some CO2 injection in the tank at some point).</li>
<li>Build a <a title="Turbidity (Wikipedia)" href="http://en.wikipedia.org/wiki/Turbidity" target="_blank">turbidity</a> meter to measure the water clarity (following instructions from an <a title="Science &amp; Communication Circuits and Projects" href="http://www.amazon.com/Science-Communication-Circuits-Projects-Forrest/dp/0945053320/ref=sr_1_1?ie=UTF8&amp;qid=1244147036&amp;sr=8-1" target="_blank">awesome Forrest Mims electronics book</a>).</li>
</ul>
<p>As you can see, the list goes on and one.  The first few features are already in development, the rest may follow afterward.</p>
<p>As I said, the FishApp is not finished.  It is not very polished currently, and not really ready for prime-time.  I just wanted to post this blog to give a sneak-peak of what&#8217;s in the works.  Now go <a title="FishApp" href="http://matthewcgood.com/fishapp/" target="_self">check it out</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewcgood.com/blog/2009/06/04/a-sneak-peak-at-the-fishapp/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>My First Piece of Behringer Gear.</title>
		<link>http://www.matthewcgood.com/blog/2009/05/21/my-first-piece-of-behringer-gear/</link>
		<comments>http://www.matthewcgood.com/blog/2009/05/21/my-first-piece-of-behringer-gear/#comments</comments>
		<pubDate>Fri, 22 May 2009 05:02:26 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Conrad]]></category>
		<category><![CDATA[Recording]]></category>
		<category><![CDATA[Behringer]]></category>
		<category><![CDATA[control surfaces]]></category>
		<category><![CDATA[Elated Music Rants]]></category>
		<category><![CDATA[gear]]></category>
		<category><![CDATA[Music News]]></category>
		<category><![CDATA[reviews]]></category>

		<guid isPermaLink="false">http://www.matthewcgood.com/blog/?p=678</guid>
		<description><![CDATA[I just got two Behringer BCF2000 Control Surfaces (because they were ridiculously cheap) and they are pretty nice so far.  Check em out, ready to mix:
I scored these two as scratch and dent deals on MusiciansFriend.com for $161 each (including shipping, no tax).  I was worried that they wouldn&#8217;t play nicely with ProTools, but [...]]]></description>
			<content:encoded><![CDATA[<p>I just got two Behringer BCF2000 Control Surfaces (because they were ridiculously cheap) and they are pretty nice so far.  Check em out, ready to mix:</p>
<div class="wp-caption aligncenter" style="width: 650px"><a href="http://www.matthewcgood.com/gallery/main.php?g2_itemId=89660"><img title="Behringer BCF2000s in the studio" src="http://www.matthewcgood.com/gallery/main.php?g2_view=core.DownloadItem&amp;g2_itemId=89662&amp;g2_serialNumber=2" alt="Behringer BCF2000s in the studio" width="640" height="428" /></a><p class="wp-caption-text">Behringer BCF2000s in the studio</p></div>
<p>I scored these two as scratch and dent deals on MusiciansFriend.com for $161 each (including shipping, no tax).  I was worried that they wouldn&#8217;t play nicely with ProTools, but it turns out that they do a great job working with the software.  Expect a forthcoming full review, but for now, I&#8217;ll just say that I really, REALLY like faders.</p>
<p>Also, I was not able to find anywhere on the internet that could confirm if you could use multiple units at the same time with Pro Tools.  Well, I&#8217;m here to tell you that you can.  I probably could have hooked up a THIRD one of these if I wanted to.  You just set up each one in the Setup-&gt;Peripherals menu in Pro Tools (use the baby HUI emulation) and they work like a charm.  Shifting through the banks works as expected and everything.  Spiffy.  This should make my mixes better.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewcgood.com/blog/2009/05/21/my-first-piece-of-behringer-gear/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why My Next Laptop Will Be A Netbook</title>
		<link>http://www.matthewcgood.com/blog/2009/05/20/why-my-next-laptop-will-be-a-netbook/</link>
		<comments>http://www.matthewcgood.com/blog/2009/05/20/why-my-next-laptop-will-be-a-netbook/#comments</comments>
		<pubDate>Wed, 20 May 2009 23:22:28 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[arduino]]></category>
		<category><![CDATA[computers]]></category>
		<category><![CDATA[I love technology!!]]></category>
		<category><![CDATA[laptops]]></category>
		<category><![CDATA[netbooks]]></category>
		<category><![CDATA[Programming/Tech]]></category>

		<guid isPermaLink="false">http://www.matthewcgood.com/blog/?p=665</guid>
		<description><![CDATA[@joshuacaddell asked me why I wanted a netbook so bad on twitter today.  The answer is too much for 140 characters, so here goes&#8230;
I think a lot of people don&#8217;t put nearly enough thought into how they use a computer before they purchase one.  This is especially true of laptops, since the ways people [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://twitter.com/joshuacaddell">@joshuacaddell</a> asked me why I wanted a netbook so bad on twitter today.  The answer is too much for 140 characters, so here goes&#8230;</p>
<p>I think a lot of people don&#8217;t put nearly enough thought into how they use a computer before they purchase one.  This is especially true of laptops, since the ways people use them are (or at least potentially are) so varried and different.  They just buy something kinda flashy looking that is big and relatively powerful, because they want the kitchen sink.  The Swiss Army Laptop, as it were.  Of course, doing all things equally well sometimes means doing all things equally poorly.</p>
<p>Having been with my current &#8216;top for nearly 8 years now (and not being a very &#8220;typical&#8221; computer user), I have a pretty good idea of how I use computers.  Specifically, I like to take them places.  I crave long battery life.  I have a high-powered desktop to handle the really crazy stuff.  I have been doing a lot of web development rather than Win32 stuff.  I also have recently been very interested in microcontroller programming on platforms like the <a href="http://arduino.cc/">Arduino</a>.  I don&#8217;t use MS Office much, and think I could get by pretty well with the Google Gears versions of Google Docs in many cases.</p>
<p><a href="http://www.newegg.com/Product/Product.aspx?Item=N82E16834220505">The particular netbook I&#8217;m interested in</a> has a ridiculous battery life.  They claim up to 9.5 hours, but I&#8217;ve seen people citing real-world usage of around 6-8 hours, which is very impressive.  It&#8217;s sufficiently light and you don&#8217;t have to carry around a bunch of crap to make it work. (Don&#8217;t be fooled into thinking that all netbooks have great battery life.  Many are terrible.  I personally think the lackluster battery life of most netbooks defeats their purposes.)  The web dev work that I&#8217;d be doing on it is (for the most part) scripting languages and light database stuff (LAMP), which this unit could handle as a development machine.  Any ASP.NET or C#  development would primarily be off this computer, but I&#8217;ll probably do some basic edits to some stuff on this machine anyway in a generic text editor (it is occasionally handy to not have to rely on the Wizzards for everything).</p>
<p>I once heard somebody say that the easiest way to drastically improve the quality of your photographs was to carry a camera around with you everywhere.  The quality doesn&#8217;t matter; you&#8217;ll get better shots if you&#8217;re the only guy around with a camera when something cool happens.  The same principle applies here for computers, too.  I plan on making a rugedized &amp; modularized Arduino to go with the netbook to carry around so that virtually anywhere I am, I can do really cool computing and interface with the &#8220;real world&#8221; in literally a few minutes.  That&#8217;s roughly equivalent to a super-nerdy MacGyver.  And that&#8217;s what I want.</p>
<p>Plus, I&#8217;m going to be building a powerhouse beast of a recording/programming machine for home soon anyway.</p>
<p>P.S. I don&#8217;t have a data plan for my phone, and probably won&#8217;t get one for a while at least.  So I will have to rely on WiFi for my internet connectivity in the short term.  Ergo, no service charge.  But that&#8217;s okay, I can do what I need to offline in many cases.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewcgood.com/blog/2009/05/20/why-my-next-laptop-will-be-a-netbook/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->