<?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>The Nuclear Bunny Blog &#187; Technology</title>
	<atom:link href="http://blog.nuclearbunny.org/category/technology/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nuclearbunny.org</link>
	<description></description>
	<lastBuildDate>Tue, 27 Dec 2011 01:19:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Robustness in the Midst of Chaos</title>
		<link>http://blog.nuclearbunny.org/2011/04/29/robustness-in-the-midst-of-chaos/</link>
		<comments>http://blog.nuclearbunny.org/2011/04/29/robustness-in-the-midst-of-chaos/#comments</comments>
		<pubDate>Fri, 29 Apr 2011 17:50:17 +0000</pubDate>
		<dc:creator>chadwick</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[chaos]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[netflix]]></category>
		<category><![CDATA[scale]]></category>

		<guid isPermaLink="false">http://blog.nuclearbunny.org/?p=747</guid>
		<description><![CDATA[I&#8217;ve been catching up on technology news this week, after a few months of completely ignoring it. One of my favorites so far has been Netflix&#8217;s brief post on 5 Lessons We&#8217;ve Learned Using AWS. Within, they discuss the importance of testing your systems ability to survive failure in a infrastructure that is inherently chaotic [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been catching up on technology news this week, after a few months of completely ignoring it. One of my favorites so far has been Netflix&#8217;s brief post on <a href="http://techblog.netflix.com/2010/12/5-lessons-weve-learned-using-aws.html">5 Lessons We&#8217;ve Learned Using AWS</a>. Within, they discuss the importance of testing your systems ability to survive failure in a infrastructure that is inherently chaotic and prone to failure (a fundamental characteristic of massively scalable clouds).</p>
<p>One way Netflix has tested their ability to survive failure is to constantly <em class="em rangy_2">force</em> failure within their system. They built a system component named ChaosMonkey that randomly kills part of their architecture to ensure that the rest of it can survive and continuing offering service to customers. I love this approach. Not only does it show a lot of maturity within the Netflix engineering team about what systems failure really means, but also shows that they understand the importance of constantly ensuring that failures are expected and recoverable; I still see too many enterprises today that have yet to learn that important lesson. </p>
<p>ChaosMonkey reminds me greatly of what I used to do, albeit manually, when I was in charge of systems architecture at a company in the early a part of my career. We had a wonderfully horizontally scalable system architecture, back in an era when most enterprises would only use mainframes for systems of such size and importance. It was a critical part of our ability to provide high levels of service and performance at a relatively low cost. We did a good job of giving our operations team plenty of opportunity to test system failure and ensure that we could survive catastrophic failure, but I found it was never quite enough as the system grew more complex. </p>
<p>About the time we began implementing RAID drive subsystems for our database nodes, I began a systematic approach to destroy parts of our architecture on a regular basis. At first, it was a way to make sure the RAID subsystem would act appropriately in a degraded state &#8211; and they did, but we had plenty of software modifications to make to allow our systems to perform better in such a state. My experiments quickly became a little more aggressive&#8230; a few times a week, I would randomly pull drives out of their carriers, or kill processes on production nodes, or even cause an entire system crash. </p>
<p>Remarkably, it was rare when any of this activity would even be noticed. Our architecture was so good at surviving single points of failure that the operations team would often not even notice that anything at all had happened. When they did, it was usually a sign of a weak-point in our architecture that needed to be fixed. Occasionally, hardware actually failed from my little experiments, and I always felt bad about that, but the reality is that same hardware would have failed at a much more inconvenient time. </p>
<p>Alas, once our company was purchased by a publicly-traded company, development was no longer allowed access to the data center. For the most part, this was a very positive thing, but it also prevented people like myself from twiddling with the system to make sure it would work well. Our operations staff was good however, and many of the lessons development learned over the years were picked up by them. Today&#8217;s trend of dev-ops is a welcome return to some of that way of thinking, as it really does show that you need developer mindsets when running your operations.</p>
<p>I can distill my experiences doing dev-ops work in the past into some key points:</p>
<ol>
<li>Build your systems with the assumption that failure happens, and happens regularly. </li>
<li>You must test your ability to fail and recover, and do it constantly. </li>
<li>Hardware &#038; software solutions for vertical scaling are inherently inflexible and likely much more expensive in the long run. This was true in the 1980s, and even more true today now that more shops understand the nature of horizontal scalability. </li>
<li>Beware of the mindset that wants high uptime for individual systems. It&#8217;s cool for your server at home, but in an operations scenario that system represents one that might not startup properly if it does fail. Inability for a system to startup properly was, and remains, a hugely common problem. Reboot all of your systems regularly.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuclearbunny.org/2011/04/29/robustness-in-the-midst-of-chaos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Breaking the High-Information Habit</title>
		<link>http://blog.nuclearbunny.org/2011/02/16/breaking-the-high-information-habit/</link>
		<comments>http://blog.nuclearbunny.org/2011/02/16/breaking-the-high-information-habit/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 02:56:03 +0000</pubDate>
		<dc:creator>chadwick</dc:creator>
				<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://blog.nuclearbunny.org/?p=736</guid>
		<description><![CDATA[In January of 2011 I took a deliberate break from my high-information diet. No news, television or on-line, no blogs, no Facebook, no Twitter for a whole month. It was awesome, and highly effective at completely breaking my high-information diet habit. I&#8217;ve been a voracious consumer of information since I was a kid. As part [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.nuclearbunny.org/wp-content/uploads/2011/02/748277_96857240.jpg"><img class="alignright size-medium wp-image-742" title="748277_96857240" src="http://blog.nuclearbunny.org/wp-content/uploads/2011/02/748277_96857240-300x224.jpg" alt="" width="300" height="224" /></a>In January of 2011 I took a deliberate break from my high-information diet. No news, television or on-line,  no blogs, no Facebook, no Twitter for a whole month. It was awesome, and highly effective at completely breaking my high-information diet habit.</p>
<p>I&#8217;ve been a voracious consumer of information since I was a kid. As part of the first home computing generation, I grew up with the assumption that I had access to information on-line without much effort. In the first few years it was just the traditional dial-up bulletin board model, but quickly that gave way to the predecessor of the Internet available through the local universities and proto-ISPs. The amount of information and news we had available then was simply amazing, and it has only continued to grow since then.</p>
<p>It wasn&#8217;t difficult to imagine that we&#8217;d have access to this much information back then &#8211; science fiction authors and nerds have been thinking along those lines for much longer than I&#8217;ve been around, but to actually witness coming to fruition was wonderful &#8211; and so easy to take for granted.</p>
<p>The bottom-line is that many of us, and especially me, are addicted to information. News is no longer fed to us in an hour long program on television very night; there are plenty of young adults now who never lived when there were no 24/7 news channels. We all have the expectation that news and information is freely available anytime, and all the time, wherever we are.</p>
<p>As technology continued to advance, so did our ease of accessing this wealth of information. We could get all of our news via the web, and could skip the cable networks if we wanted. Eventually, we could watch the cable networks live over the Internet at the office, or wherever we might be. A plethora of applications let us aggregate and present all of this information in one place for our consumption, in real-time. The upshot being that there is ample opportunity to be distracted by information at any time &#8211; there&#8217;s no waiting any more.</p>
<p>We certainly don&#8217;t need 24/7 news and the Internet to procrastinate, but they both sure make it easy for anyone who works with a computer. As mobile computing devices become more common place, I believe we&#8217;ll start to see procrastination in the hands of everyone. Just wait until the clerk at Taco Bell is too busy checking Facebook instead of taking your order! Oh wait, you mean that&#8217;s already happened?</p>
<p><span id="more-736"></span><br />
When I decided to take a month off from information I did so deliberately with the intent to break the procrastination habit. I was taking several months off of work, and without the deadlines imposed by business needs, I knew I would have a tendency to slow down a bit and find ways to kill time. That was great, for a few weeks, but quickly I wanted to get back down to work and focus on some big personal projects. Stopping the information habit was one tool I had planned to use to make sure I&#8217;d focus on what I needed to, not just what was at hand.</p>
<p>Breaking the habit turned out to be surprisingly easy. There were a few days of the expected psychological addiction withdrawal symptoms to contend with, but they were blessedly minor. The bigger hurdle to overcome was the feeling that I was missing out on STUFF! THINGS were happening and I wasn&#8217;t keeping up! Naturally, none of it really mattered in the end.</p>
<p>In fact, looking back on what actually occurred in the news during January and early February, it is remarkable how little actually occurred that was worth paying attention to. The big stories during this time period? The shootings in Arizona, the crisis in Egypt, and if you enjoy sensationalized stories, the massive bird kill in Arkansas or wherever.</p>
<p>All of these stories were impossible not to hear about, even without the news. All I had to do was visit the local coffee shop or interact with another human and these invariably would come up in conversation, direct or overheard.</p>
<p>The shooting story seemed to cause the most emotional reaction from the people I saw discussing it, as is the tendency for that sort of tragedy.</p>
<p>The crisis in Egypt had the appeal of seeing something positive possibly occur, in a region of the world where it is so desperately needed, and it&#8217;s incredibly appealing to human nature to feel like you are a part of history as it happens.</p>
<p>The bird kill story, well, that&#8217;s just a classic example of sensationalism that&#8217;s exacerbated by the existence of the 24/7 news &amp; information society. Would it have really had such a strong headline impact if there had been a day or two to gather more information before the panic-like headlines appeared? Perhaps&#8230;</p>
<p><!--more--><br />
The reality is that not one of these stories had any impact on my life &#8211; or on most of humanity&#8217;s life for that matter. The simple existence of quick and efficient information delivery creates an artificial feeling that this stuff is really important, and that it is important RIGHT NOW! But in reality, you could read a synopsis of world and local events once a month, or even once a year, and probably be better informed about the world than you are right now. You&#8217;d simply have less noise to sift through before getting to what really matters.</p>
<p>I didn&#8217;t miss world and local news one bit during my hiatus &#8211; in fact, I haven&#8217;t picked up the habit of checking it again. I&#8217;m finding it much more effective to discuss events with other people rather than constantly reading or watching about the latest events. If I need to dive into a story, I can do that after I determine if it&#8217;s worth spending time on.</p>
<p>I do have a bit of consternation on the news and happenings that are technology related, as it affects my career more directly than traditional world events. But here, too, I think I&#8217;m finding that a low-information diet is actually more efficient than trying to constantly keep up with the never-ending surge of what&#8217;s available. That sounds like a key to success to me &#8211; pay more attention to what really matters, and ignore what doesn&#8217;t. Life is ultimately an equation of time, and the more of that we can make use of, the more effective, productive, and happier our lives will be.</p>
<p>Now, if you excuse me, I have to go post a picture of the beer I&#8217;m drinking on Facebook.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuclearbunny.org/2011/02/16/breaking-the-high-information-habit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comparing the Garmin ForeRunner 310XT and Edge 500</title>
		<link>http://blog.nuclearbunny.org/2010/12/13/comparing-the-garmin-forerunner-310xt-and-edge-500/</link>
		<comments>http://blog.nuclearbunny.org/2010/12/13/comparing-the-garmin-forerunner-310xt-and-edge-500/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 19:58:01 +0000</pubDate>
		<dc:creator>chadwick</dc:creator>
				<category><![CDATA[Cycling]]></category>
		<category><![CDATA[Sports]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[athlete]]></category>
		<category><![CDATA[bicycling]]></category>
		<category><![CDATA[edge]]></category>
		<category><![CDATA[forerunner]]></category>
		<category><![CDATA[garmin]]></category>
		<category><![CDATA[gps]]></category>
		<category><![CDATA[powertap]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[Running]]></category>

		<guid isPermaLink="false">http://blog.nuclearbunny.org/?p=684</guid>
		<description><![CDATA[In July, 2009 I started using a Garmin Forerunner 310XT T to keep track of my workouts. At first I just used the running features of the device, but shortly after I started using it for my cycling workouts as well. Previously I had been using a Polar system for cycling data capture, and soon [...]]]></description>
			<content:encoded><![CDATA[<p>In July, 2009 I started using a <a href="http://www.amazon.com/gp/product/B0025VKW5K/ref=as_li_ss_tl?ie=UTF8&amp;tag=thenucbun-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=B0025VKW5K">Garmin Forerunner 310XT</a><br />
T to keep track of my workouts. At first I just used the running features of the device, but shortly after I started using it for my cycling workouts as well. Previously I had been using a Polar system for cycling data capture, and soon I found the ForeRunner 310XT to be a better solution by far than the Polar one (see <a href="http://blog.nuclearbunny.org/2009/08/23/review-garmin-forerunner-310xt/" target="_blank">my previous review</a> of the ForeRunner 310XT for more details).</p>
<div id="attachment_722" class="wp-caption alignright" style="width: 310px"><a href="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/20101213_7891_800px1.jpg"><img class="size-medium wp-image-722" title="20101213_7891_800px" src="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/20101213_7891_800px1-300x225.jpg" alt="Garmin Edge 500, Garmin ForeRunner 310XT and CycleOps PowerTap CPU" width="300" height="225" /></a><p class="wp-caption-text">Garmin Edge 500, Garmin ForeRunner 310XT and CycleOps PowerTap CPU</p></div>
<p>Starting in February, 2010, I added a power meter to my cycling gadget list, and the ForeRunner proved a great partner to cycling with power, especially when compared to the PowerTap CPU unit that came with the power meter. I found the ForeRunner easy to use, accurate, and the integration with both <a href="http://connect.garmin.com/" target="_blank">Garmin Connect</a> and the software solutions from <a href="http://home.trainingpeaks.com/" target="_blank">TrainingPeaks</a> more useful and easier to use than the other options.</p>
<p>In June, 2010, I rode the wonderful <a href="http://blog.nuclearbunny.org/2010/07/14/2010-ride-the-rockies/" target="_blank">Ride the Rockies</a> event in Colorado and used the ForeRunner 310XT to track the entire week of riding. One problem I discovered in an event like this is that the ForeRunner did not have enough onboard memory to store the entire week’s worth of riding. I discovered this before the trip and so I lugged a small netbook around with my camping gear just so I could download data after the rides. Not quite the best way to unplug on a holiday.</p>
<p>When Garmin announced the <a href="http://www.amazon.com/gp/product/B002O0QBE8/ref=as_li_ss_tl?ie=UTF8&amp;tag=thenucbun-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=B002O0QBE8">Garmin Edge 500 Cycling GPS</a><br />
it looked like a great solution for use on my bike. Since it was cycling specific, it had a few more features designed for cycling, whereas the ForeRunner 310XT was definitely intended to be used for multi-sport activities. Since I’m always in need of a new gadget to play with, I went ahead and bought one and started using it for cycling in August, 2010.</p>
<p>I’ve found it to be as good as promised, but there still are times when the ForeRunner 310XT is a better choice. In the rest of this post, I’ll show you the various differences between the two devices and how one might be better than the other depending upon your circumstances.</p>
<hr />
<h2>Memory Capacity</h2>
<p>As the memory limitation of the ForeRunner 310XT was the first thing that made me interested in the Edge 500, it’s good to start here. In my use, I’ve found the ForeRunner only has enough onboard memory to store between 24 and 36 hours of workouts &#8211; certainly not enough for a week long cycling tour. Garmin doesn’t provide specifications on how much actually memory is installed on this device, so it is a bit of a mystery to the actual capacity.</p>
<p><img class="alignright size-full wp-image-688" title="Garmin Edge 500 disk capacity" src="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/Screen-shot-2010-12-07-at-16.17.11.png" alt="" width="304" height="405" /></p>
<p>Meanwhile, the Edge 500 has 56.4 MB of flash based storage, at least according to my Mac’s view of it. I’ve got every cycling workout since I started using the Edge still stored on it &#8211; about 50 hours worth so far &#8211; and the device still has 48.7 MB of storage free! This is an amazing amount of usable storage and means even the most active cyclists will find they have room for months of data without issue. No need to take a laptop with you on holiday!</p>
<p>Advantage: Edge 500, handily.</p>
<hr />
<h2>Data Transfer</h2>
<p>The data transfer mechanism is very different in the two devices. The ForeRunner 310XT uses a wireless ANT+ based data transfer mechanism, while the Edge 500 appears as a simple USB flash drive to your computer.</p>
<p>To exchange data between your computer and your ForeRunner 310XT you have to use a ANT+ dongle provided by Garmin that connects to your computer’s USB port along with a software application that provides drivers for the dongle. It works, and depending upon your computer configuration it is easily a setup-once-and-forget operation. You don’t need to plug in any more wires, and you just bring your ForeRunner 310XT within a few feet of the dongle and you are good to go.</p>
<p>In practice, though, this approach was not perfect. I found during my cycling holiday that a cheap netbook did not have enough CPU performance to reliably handle the data transfer job if it was not plugged into A/C power. That was a surprise and made downloading data from the ForeRunner a hassle during my trip, since I did not frequently have access to A/C power while camping out.</p>
<p>By comparison, the Edge 500 requires you to use a USB cable to physically plug the Edge 500 unit directly to a USB port on your computer. The Edge then shows up as USB flash disk, so once you are done you have to eject the device to prevent your computer from complaining.</p>
<p>Because the Edge 500 uses a direct USB connection, it is much more reliable and faster to do any data transfer than the ForeRunner 310XT. The USB cable is not really any more or less hassle than the ANT+ dongle, so you aren’t gaining a lot of advantage by having a wireless based data transfer mechanism.</p>
<p>Advantage: Edge 500, but just so.</p>
<hr />
<h2>Charging</h2>
<p>Directly related to the data transfer mechanism is how the devices are charged. Both devices can be charged via a USB connection to a computer, or using a USB to A/C adaptor, which Garmin provides.</p>
<p>The primary difference here is that the ForeRunner 310XT requires a large binder-like clip that grabs onto the unit and touches two electrical connectors on the rear of the unit. Meanwhile, the Edge 500 simply uses the same USB connection for data transfer. This means a lot less bulk when traveling.</p>
<p>Garmin provides an excellent A/C adaptor system that includes several international wall-plug adaptors as part of their standard kit for both devices, so you&#8217;re set for all kinds of power scenarios.</p>
<p>Advantage: Edge 500.</p>
<hr />
<h2>Battery Life</h2>
<p>How about battery life? Garmin says the ForeRunner 310XT’s battery life is up to 20 hours, and the Edge 500’s is up to 18 hours. In my experience these estimates are spot on. Both units battery life means you can get a few days worth of use before you need to recharge, but if you are traveling you should plan on bringing a charging solution with you.</p>
<p>The Edge 500 clearly consumes more power than the ForeRunner 310XT, and given that, Garmin provided more software features to help. The Edge 500 is very quick to auto power-off if it is not receiving any data, and this helps avoid unnecessary battery consumption if you’ve stopped to take a long break or after finishing a ride.</p>
<p>Advantage: ForeRunner 310XT, but just so.</p>
<hr />
<h2>Display</h2>
<p>The display on each device is similar, but there are numerous small differences.</p>
<p>The ForeRunner’s display is covered in glass &#8211; which I dropped and broke once, resulting in an expensive repair bill &#8211; while the Edge’s display feels like a type of plastic, but I’m not 100% positive on that.</p>
<div id="attachment_723" class="wp-caption alignright" style="width: 310px"><a href="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/20101213_7903_800px.jpg"><img class="size-medium wp-image-723 " title="20101213_7903_800px" src="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/20101213_7903_800px-300x225.jpg" alt="Display Comparison of Edge 500 and ForeRunner 310XT" width="300" height="225" /></a><p class="wp-caption-text">Display Comparison of Edge 500 and ForeRunner 310XT</p></div>
<p>Both units provide a high-contrast, easy to read display, with an optional backlight. Both units are exceptionally easy to see in outdoor light, although they are both prone to glare if the sun hits them at just the right angle &#8211; just like every other cycling computer I’ve ever used.</p>
<p>Each unit provides multiple pages of data, and multiple data items per page. The ForeRunner limits you to 4 data fields maximum per page, with 4 total pages, plus a workout specific page. Since the ForeRunner 310XT is a multi-sport device, each sport setting has its own independent set of customizable pages and data fields.</p>
<p>The Edge 500’s display is slightly taller than the ForeRunner’s, and as such you can have up to 8 data fields per page. This also means that for those pages with few fields, you can make certain key data items very large and easy to read. The Edge 500 limits you to 3 pages of data, with one additional page for workouts.</p>
<p>Advantage: neither. Both devices are champs with slight benefits to their intended audience.</p>
<hr />
<h2>Workouts</h2>
<p>Another software feature that is different between the two units is the Workouts feature. Both units have the ability to program complex workouts with a variety of steps, targets, repeats, etc. Both let you create courses to follow, and set alerts for time, distance, calories, or heart rate; the Edge 500 also adds support for cadence and power alerts.</p>
<p>The ForeRunner 310XT, however, has a great shortcut for creating interval workouts. With a quick, easy-to-use 2-page setting wizard, you can select intervals that are time or distance based, along with recoveries, and then choose the number of repetitions and if you want warm-up and cool-down intervals added. For a lot of workouts, this is all you need.</p>
<p>Programming the more advanced workouts in either device is not very difficult, but it’s enough steps that many people will just avoid doing it altogether. Programming these workouts is easier if you use Garmin Training Center and then download the workout to the device, but this software isn’t the best quality itself and I find myself just programming the workouts directly on the devices.</p>
<p>Advantage: ForeRunner 310XT.</p>
<hr />
<h2>Mounting Options</h2>
<p>The ForeRunner 310XT is a sports watch, but there are a few different bike mounting options available as well. I&#8217;ve found when doing multi-sport activities it&#8217;s better to just leave it on your wrist, but when primarily biking, having it mounted on the bike was a better option.</p>
<div id="attachment_699" class="wp-caption alignleft" style="width: 160px"><a href="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/IMG_0990.jpg"><img class="size-thumbnail wp-image-699" title="IMG_0990" src="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/IMG_0990-150x150.jpg" alt="ForeRunner 310XT Quick Release Kit" width="150" height="150" /></a><p class="wp-caption-text">ForeRunner 310XT Quick Release Kit</p></div>
<p>The bike mount option I used for the ForRunner 310XT is the <a href="http://www.amazon.com/gp/product/B003V1TL9G/ref=as_li_ss_tl?ie=UTF8&amp;tag=thenucbun-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=B003V1TL9G">Garmin Quick Release Kit</a>. This kit replaces the watch strap of the ForeRunner with one that includes a mounting bracket that then snaps into place on an adaptor that mounts directly to your bike with twist-ties. The replacement watch strap wasn&#8217;t as comfortable as the original strap that came with the ForeRunner, and it increased the width of the device slightly, but overall this is a very good mounting solution.</p>
<p>Garmin also sells a <a href="http://www.amazon.com/gp/product/B000VK5BMQ/ref=as_li_ss_tl?ie=UTF8&amp;tag=thenucbun-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=B000VK5BMQ">Forerunner Bicycle Mount Kit</a>for ForeRunner devices that lets strap the device to the mount directly. I haven&#8217;t used this option, but it&#8217;s a convenient way of solving the mounting problem as well.</p>
<div id="attachment_700" class="wp-caption alignright" style="width: 160px"><a href="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/IMG_0984.jpg"><img class="size-thumbnail wp-image-700" title="IMG_0984" src="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/IMG_0984-150x150.jpg" alt="Edge 500 with Quarter Turn Mounting Kit" width="150" height="150" /></a><p class="wp-caption-text">Edge 500 with Quarter Turn Mounting Kit</p></div>
<p>The mounting solution for the Edge 500 is similar to the Quick Release Kit option for the ForeRunner, but attaches to the bike in a very different way. The mounting bracket itself uses high-quality bands (ethylene propylene diene monomer, a synthetic rubber!) of various sizes to secure the mounting bracket to the bike. The Edge 500 comes with a handful of different size bands and two mounting brackets, so you can easily attach it to multiple bikes. Moving a bracket to a different bike takes just seconds, but you can always buy another <a href="http://www.amazon.com/gp/product/B004XHRJQ4/ref=as_li_ss_tl?ie=UTF8&amp;tag=thenucbun-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=B004XHRJQ4">quarter turn bike mount kit</a>if two mounts are not enough.</p>
<div id="attachment_703" class="wp-caption alignleft" style="width: 310px"><a href="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/IMG_0987.jpg"><img class="size-medium wp-image-703" title="IMG_0987" src="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/IMG_0987-300x182.jpg" alt="Edge 500 Bike Mount" width="300" height="182" /></a><p class="wp-caption-text">Edge 500 Bike Mount</p></div>
<p>The design of this mounting system is simple and elegant. The bands are extremely strong and pliable enough that stretching them to secure the mounting bracket is trivial. The back of the mounting bracket rests on either your bicycle stem or handlebars using a rubber piece that keeps it from moving. Once it&#8217;s attached with the bands, the mount just isn&#8217;t going to go anywhere.  The Edge 500 slides into the bracket quickly and once its turned, it also isn&#8217;t going to fly off, even on the bumpiest of routes.</p>
<div id="attachment_701" class="wp-caption alignleft" style="width: 310px"><a href="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/IMG_0991.jpg"><img class="size-medium wp-image-701     " title="IMG_0991" src="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/IMG_0991-300x224.jpg" alt="Edge 500 Bike Mount using the ForeRunner 310XT's Mount" width="300" height="224" /></a><p class="wp-caption-text">Edge 500 Bike Mount using the ForeRunner 310XT&#39;s Mount</p></div>
<p>One nice surprise is that the quarter-turn mounting bracket design is the same between the ForeRunner 310XT&#8217;s Quick Release Kit and the Edge 500&#8242;s mounting brackets. On my road bike, I&#8217;m actually using the bracket that came with the ForeRunner&#8217;s kit instead of the Edge 500&#8242;s rubber band brackets &#8211; but only because it was already attached. There is a small screw in this mounting bracket that lets you change the orientation of the attached device, and this is one difference between the two different devices. It only takes a couple of seconds to change this, and chances are good you won&#8217;t be going back and forth between the two devices if you happen to have both (I only use the ForeRunner 310XT with its original wrist strap after buying the Edge 500).</p>
<div id="attachment_702" class="wp-caption alignright" style="width: 310px"><a href="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/IMG_0994.jpg"><img class="size-medium wp-image-702 " title="IMG_0994" src="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/IMG_0994-300x224.jpg" alt="forerunner 310xt bicycle mount" width="300" height="224" /></a><p class="wp-caption-text">ForeRunner 310XT Bicycle Mount</p></div>
<p>The quarter-turn quick release mounting design is a great solution for putting either of these devices on your bike. It allows them to be installed and removed in about a second without having to fuss with any tools. I especially like to take off the devices whenever at a rest stop &#8211; a $200+ bike gadget that&#8217;s so easily pocketed is going to be tempting for the unscrupulous out there.</p>
<p>Advantage: neither, both have excellent, and compatible, options.</p>
<hr />
<h2>Training with Power</h2>
<p>Both devices have great support for receiving data from any ANT+ enabled power meter. Over time, the firmware has been updated on both and support for showing more power data has been added. As of version 3.00 on the ForeRunner 310XT, and 2.40 on the Edge 500, the following power-related data fields are available:</p>
<ul>
<li>Power (current power measurement)</li>
<li>Power &#8211; % FTP</li>
<li>Power &#8211; 30s Avg</li>
<li>Power &#8211; 3s Avg (my personal favorite)</li>
<li>Power &#8211; Avg</li>
<li>Power &#8211; kilojoules</li>
<li>Power &#8211; Lap</li>
<li>Power &#8211; Max</li>
<li>Power Zone (current power measurement)</li>
</ul>
<p>I tend to ride with my display set to show the 3-second average power, the cadence and the current lap time. This keeps me focused on what matters most during training, but hides all the other data that might be distracting, but it ultimately depends upon what kind of ride I am doing at the time.</p>
<p>If you are interested in training with power, but don&#8217;t yet know much about it, start by reading <a href="http://www.amazon.com/gp/product/1934030554/ref=as_li_ss_tl?ie=UTF8&amp;tag=thenucbun-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399349&amp;creativeASIN=1934030554">Training and Racing with a Power Meter</a>. Training with power is great fun, but the bottom line is that you either need to be analytical (okay, a bit of a geek), or have a coach that uses your power data to keep track of your progress. Otherwise, you aren&#8217;t likely to realize the benefits of the tool.</p>
<p>Advantage: both devices are equally capable.</p>
<hr />
<h2>Bottom Line</h2>
<p>Both devices are excellent at what they do, and either is a powerful training companion. If you are just a bicyclist, and do no multi-sport activities, then the Edge 500 is the right choice for you. If you are into multi-sport, the ForeRunner 310XT is all that you will need, but the Edge 500 does have a few advantages, such as the large memory capacity.</p>
<p>The Edge 500 is also a little bit cheaper than the ForeRunner 310XT, especially if you already own a compatible heart-rate monitor or power meter.</p>
<div id="attachment_716" class="wp-caption alignleft" style="width: 160px"><a href="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/Screen-shot-2010-12-13-at-13.40.06.jpg"><img class="size-thumbnail wp-image-716 " title="Garmin Connect screen shot" src="http://blog.nuclearbunny.org/wp-content/uploads/2010/12/Screen-shot-2010-12-13-at-13.40.06-150x150.jpg" alt="Garmin Connect screen shot" width="150" height="150" /></a><p class="wp-caption-text">Garmin Connect screen shot</p></div>
<p>A lot of folks are buying Garmin sports devices these days so that they can upload and share their data using <a href="http://connect.garmin.com/" target="_blank">Garmin&#8217;s excellent Connect</a> website. If you haven&#8217;t tried Garmin Connect, go there and give it a shot. It&#8217;s worth the price of admission and continues to get better as Garmin adds features, albeit rather slowly.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuclearbunny.org/2010/12/13/comparing-the-garmin-forerunner-310xt-and-edge-500/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>You Don&#8217;t Need Flash for Rich Graphs on a Web Page</title>
		<link>http://blog.nuclearbunny.org/2010/04/11/you-dont-need-flash-for-rich-graphs-on-a-web-page/</link>
		<comments>http://blog.nuclearbunny.org/2010/04/11/you-dont-need-flash-for-rich-graphs-on-a-web-page/#comments</comments>
		<pubDate>Sun, 11 Apr 2010 21:35:33 +0000</pubDate>
		<dc:creator>chadwick</dc:creator>
				<category><![CDATA[Jobs]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Zenoss]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[graphs]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[ria]]></category>

		<guid isPermaLink="false">http://blog.nuclearbunny.org/?p=593</guid>
		<description><![CDATA[Adobe&#8217;s Flash has a lot of uses, but one of the most impressive to me has been the the creation of interactive graphs on a web page. One just has to visit Google Finance to see a great example of this in action; it&#8217;s fast, effective and fits seemlessly within the rest of the page. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.adobe.com/flashplatform/">Adobe&#8217;s Flash</a> has a lot of uses, but one of the most impressive to me has been the the creation of interactive graphs  on a web page. One just has to visit <a href="http://www.google.com/finance?q=NASDAQ:GOOG" target="_blank">Google Finance</a> to see a great example of this in action; it&#8217;s fast, effective and fits seemlessly within the rest of the page.</p>
<p>Many times, however, Flash isn&#8217;t an appropriate technology to use. If you&#8217;re an open-source product like Zenoss, Flash presents a licensing issue. If you&#8217;re targeting mobile platforms like the <a href="http://www.apple.com/iphone/">iPhone</a>, Flash isn&#8217;t available. And, sometimes, you may just not like Flash; it does have it&#8217;s own security problems and overhead, for example. What&#8217;s a web developer to do? Enter HTML5 to the rescue&#8230;</p>
<p><a href="http://en.wikipedia.org/wiki/Html5" target="_blank">HTML5</a> is not yet an approved standard, but it&#8217;s well on its way and surprisingly well-supported by the browser community already. One of the nice new features provided in HTML5 is the <a href="http://en.wikipedia.org/wiki/Canvas_element" target="_blank">canvas element</a> which allows for two-dimensional drawing functionality. Between this new feature and JavaScript, we should be able to create a rich graph display.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuclearbunny.org/2010/04/11/you-dont-need-flash-for-rich-graphs-on-a-web-page/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>An Early iPad Review</title>
		<link>http://blog.nuclearbunny.org/2010/04/05/an-early-ipad-review/</link>
		<comments>http://blog.nuclearbunny.org/2010/04/05/an-early-ipad-review/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 01:33:11 +0000</pubDate>
		<dc:creator>chadwick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://blog.nuclearbunny.org/2010/04/05/an-early-ipad-review/</guid>
		<description><![CDATA[I&#8217;ve been using the iPad heavily for 2 days now. There is an awful lot of potential in this device, ands there is no doubt that the best is yet to come. If you are already an iPhone user, the iPad will simultaneously feel familiar but also so incredibly rich and powerful compared to it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using the iPad heavily for 2 days now. There is an awful lot of potential in this device, ands there is no doubt that the best is yet to come.</p>
<p>If you are already an iPhone user, the iPad will simultaneously feel familiar but also so incredibly rich and powerful compared to it&#8217;s little brother. The extra screen real estate is in itself nice, but more importantly is how the iPhone OS&#8217;s approach to user interaction makes use of this extra room.</p>
<p>For example, the Mail app shows each message in full screen glory, but with a fast overlay window to show message and folder navigation. The usability effect is wonderful. Using Safari is now like browsing on a regular computer, except with a multi-touch interface.</p>
<p>I don&#8217;t play very many games on the iPhone or iPad, but the Words With Friends game (think Scrabble) is almost worth getting an iPad for just to play it. I suspect the casual gaming crowd I&#8217;ll a have a lot to look forward to with their new toy.</p>
<p>Battery life on the iPad has been better than I expected. A little over 48 hour into ownership and I&#8217;m down to 10% battery life. I&#8217;ve used it a lot, including a lot of reading, so it seems to hold up well there. While it does not compare to the extra long battery life of a Kindle, the device does so much more it seems like a good trade-off.</p>
<p>As far as being an e-reader, I like the iPad better than the Kindle DX (that I normally read from), but not as much as the regular Kindle 2. That device is sized so well, and the battery life is so good, it&#8217;s easy to see it remaining the king of its segment for a while. That said, I am a guy, so i like big screens, and here the iPad wins over the DX. The iPad is a touch heavier, but it still feels natural to hold. A minor, but very nice feature in the iPad is the physical orientation lock button, something which the DX has as a software feature that is hard to use.</p>
<p>I plan on using my iPad as a replacement for my laptop for casual computing. It seems like it is going to do that job well. They keyboard is easy enough to use even for this blog entry, and the heavy writers out there may find the keyboard dock option even better than lugging around a laptop.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuclearbunny.org/2010/04/05/an-early-ipad-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Zenoss Development Environment &#8211; Part 3</title>
		<link>http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-3/</link>
		<comments>http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-3/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 22:01:01 +0000</pubDate>
		<dc:creator>chadwick</dc:creator>
				<category><![CDATA[Jobs]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Zenoss]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.nuclearbunny.org/?p=545</guid>
		<description><![CDATA[In Part 1 of this series we discussed getting an initial Zenoss environment checked out and running on a Mac OS X or Ubuntu system. In Part 2 we discussed how to configure Eclipse to use the Zenoss source. In this part, we&#8217;ll discuss how to handle day-to-day operations such as branch management and working [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="../2009/10/22/my-zenoss-development-environment-part-1/" target="_blank">Part 1</a> of this series we discussed getting an initial <a href="http://www.zenoss.com/" target="_blank">Zenoss</a> environment checked out and running on a <a href="http://www.apple.com/macosx/" target="_blank">Mac OS X </a>or <a href="http://www.ubuntu.com/" target="_blank">Ubuntu</a> system. In <a href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-2/" target="_self">Part 2</a> we discussed how to configure <a href="http://www.eclipse.org/" target="_blank">Eclipse</a> to use the Zenoss source. In this part, we&#8217;ll discuss how to handle day-to-day operations such as branch management and working with multiple versions.</p>
<h2>Branch-Based Development</h2>
<p>At Zenoss we do all development, including bug fixes and small maintenance tasks, in a private development branch within the subversion repository. This allows us to independently work-on changes, check-them into the repository for safe-keeping, and then perform code reviews with team members without having to share files or using <a href="http://pastebin.com/" target="_blank">pastebin</a> style tools (even though we do both at times).</p>
<ol>
<li>Create a branch within your user&#8217;s sandbox. In this example, I&#8217;ve decided to name the sandbox <code>new-widget</code> to identify what I&#8217;m working on. If I were fixing a defect, I&#8217;d use the defect number from the defect tracking system. Create the branch by copying the trunk folder to the sandbox branch. In Subversion this is a low-overhead operation and doesn&#8217;t actually copy files.<code><br />
svn copy http://dev.zenoss.org/svn/trunk http://dev.zenoss.org/svn/sandboxen/cgibbons/new-widget -m " * Copying trunk to sandbox branch."<br />
</code></li>
<li>Switch your working directory to use the new sandbox branch. You can do this either from the command-line or using Eclipse. From the command line, you&#8217;d do the following:<code><br />
cd $HOME/zenoss/core<br />
svn switch http://dev.zenoss.org/svn/sandboxen/cgibbons/new-widget<br />
</code>From within Eclipse, secondary-click on the <code>core</code> project and choose <em>Switch to Another Branch/Tag/Revision&#8230;</em> option from the Team menu. On the dialog that appears, enter in the sandbox URL. After switching, your Eclipse will show the new location next to the core project item.<br />
<a rel="attachment wp-att-549" href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-3/picture-8/"><img class="aligncenter size-full wp-image-549" title="svn switch" src="http://blog.nuclearbunny.org/wp-content/uploads/2009/10/Picture-8.png" alt="svn switch" width="670" height="491" /></a></li>
</ol>
<p>Once your development environment has been switched, you can make changes and commit to the Subversion repository as desired. If you&#8217;re unsure if you are in the right branch, you can always use the <code>svn info</code> command to see which directory is being used.</p>
<h2>Merging Branches</h2>
<p>Once you have completed changes in a branch and have had them reviewed by a peer, it is time to merge them into trunk (or another branch, if using a maintenance release). Merging can be tricky, but a consistent process can make it much easier to handle.</p>
<ol>
<li>Change your working directory to a checked-out and clean version of the branch you want to merge into. For example, I keep a <code>$HOME/zenoss/clean-trunk</code> directory that I never make changes to, except for merging.</li>
<li>Determine the base working revision of your working branch. There are a variety of ways to do this, but one of the best is to view the revision log graph within the Trac system directly. For example, for the branch discussed above we can browse to <a href="http://dev.zenoss.org/trac/log/sandboxen/cgibbons/new-widget" target="_blank">http://dev.zenoss.org/trac/log/sandboxen/cgibbons/new-widget/</a> and see that revision <strong>15513</strong> is the base.</li>
<li>Perform a dry-run on the merge to get a general idea of what the changes into the branch will be. You should see your expected changes, plus any conflicts from changes to the other branch while you have been working in the sandbox branch.<code><br />
svn merge --dry-run --revision <strong>15513</strong>:HEAD <strong>http://dev.zenoss.org/svn/sandboxen/cgibbons/new-widget</strong> .<br />
</code></li>
<li>If the merge results look satisfactory, rerun the command without the dry-run argument.</li>
<li>Look at the final merge results using <code>svn status</code> and <code>svn diff</code>, and once you&#8217;re ready, issue an <code>svn commit</code>.</li>
</ol>
<h2>Multiple Branches and Zenoss Configuration</h2>
<p>As you switch between branches you will often render your Zenoss configuration useless.  Resetting your database after each branch switch is usually a good practice, and being able to quickly recreate any test data you may need makes this process less painful.</p>
<p>After switching a branch, my process is usually the following:</p>
<ol>
<li>Shutdown zenoss and restart only zeo.<code><br />
zenoss stop<br />
zeoctl start</code></li>
<li>Run the zenwipe script from the inst source directory.<code><br />
$HOME/zenoss/inst/zenwipe.sh --no-prompt</code></li>
<li>Run <code>zenmigrate</code> to install any database changes available within the current branch.</li>
</ol>
<p>Depending upon the task at hand, I may install additional ZenPacks and add new devices through the command-line if those are needed. Helper scripts, such as <code>install-windows.sh</code> to install of the Windows ZenPacks and create several local test devices in the instance, are useful tools to have for your typical configurations.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My Zenoss Development Environment &#8211; Part 2</title>
		<link>http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-2/</link>
		<comments>http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-2/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 19:26:36 +0000</pubDate>
		<dc:creator>chadwick</dc:creator>
				<category><![CDATA[Jobs]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Zenoss]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.nuclearbunny.org/?p=511</guid>
		<description><![CDATA[In Part 1 of this series we discussed getting an initial Zenoss environment checked out and running on a Mac OS X or Ubuntu system. In this part, we&#8217;ll discuss configuring Eclipse to use this environment. Mac OS X Prerequisites Install Eclipse Classic 3.5.x Mac Cocoa 32-bit. Ubuntu Prerequisites Install the Sun Java JDK. Why? [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-1/" target="_blank">Part 1</a> of this series we discussed getting an initial <a href="http://www.zenoss.com/" target="_blank">Zenoss</a> environment checked out and running on a <a href="http://www.apple.com/macosx/" target="_blank">Mac OS X </a>or <a href="http://www.ubuntu.com/" target="_blank">Ubuntu</a> system. In this part, we&#8217;ll discuss configuring <a href="http://www.eclipse.org/" target="_blank">Eclipse</a> to use this environment.</p>
<h2>Mac OS X Prerequisites</h2>
<ol>
<li>Install <a href="http://www.eclipse.org/downloads/" target="_blank">Eclipse Classic</a> 3.5.x Mac <a href="http://blog.zvikico.com/2009/06/eclipse-galileo-for-mac-cocoa-or-carbon.html" target="_blank">Cocoa 32-bit</a>.</li>
</ol>
<h2>Ubuntu Prerequisites</h2>
<ol>
<li>Install the Sun Java JDK. <strong>Why?</strong> Eclipse is a Java application and requires a full-fledged Java environment to run properly.<code><br />
sudo apt-get -y install sun-java6-jdk<br />
</code></li>
<li>Install <a href="http://www.eclipse.org/downloads/" target="_blank">Eclipse Classic</a> 3.5.x Linux 32-bit.</li>
</ol>
<h2>Eclipse Configuration</h2>
<ol>
<li>In part one, we created a Zenoss root project directory of <code>$HOME/zenoss</code> &#8211; use that directory, or the one you created, for the rest of these steps.</li>
<li>Launch Eclipse and configure it to use the Zenoss root project directory. <strong>Why?</strong> Eclipse needs a workspace directory to keep track of configuration settings for a group of related projects. By placing the workspace directory inside of the Zenoss root workspace, we can separate the requirements for a Zenoss workspace from other projects you may be using.<a rel="attachment wp-att-484" href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-1/eclipse-workspace-2/"><img title="eclipse-workspace" src="http://blog.nuclearbunny.org/wp-content/uploads/2009/10/eclipse-workspace1.png" alt="eclipse-workspace" width="677" height="324" /></a></li>
<li>Install the <a href="http://pydev.org/" target="_blank">PyDev</a> plug-in for Eclipse. <strong>Why?</strong> PyDev provides Python language support to Eclipse.
<ol>
<li>Go to the Help Menu and choose<em> Install New Software</em>.</li>
<li>In the Available Software dialog, choose <em>Add</em> and enter in <code>http://pydev.org/updates/</code> as the Location and close the dialog. Eclipse will return to the Available Software dialog.<a rel="attachment wp-att-498" href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-1/picture-5/"><img title="PyDev" src="http://blog.nuclearbunny.org/wp-content/uploads/2009/10/Picture-5.png" alt="PyDev" width="555" height="260" /></a></li>
<li>Software matching PyDev will appear in the dialog; pick the <em>PyDev</em> option but do not pick <em>PyDev Mylyn Integration</em>. Click <em>Next</em> and install the plug-in.</li>
</ol>
<p><a rel="attachment wp-att-500" href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-1/picture-6-2/"><img title="PyDev" src="http://blog.nuclearbunny.org/wp-content/uploads/2009/10/Picture-61.png" alt="PyDev" width="725" height="643" /></a></li>
<li>Install the <a href="http://subclipse.tigris.org/" target="_blank">Subclipse</a> plug-in. <strong>Why?</strong> Subclipse allows you to work with the Subversion version control system directly from within Eclipse.
<ol>
<li>In the Available Software dialog add the Subclipse plug-in update site: <code>
<p>http://subclipse.tigris.org/update_1.6.x</p>
<p></code></li>
<li>In the Available Software dialog, choose the <em>Subclipse</em>, <em>Subversion Client Adapter</em>, <em>Subversion JavaHL Native Library Adapter</em> and the <em>Subversion Revision Graph </em>items.<a rel="attachment wp-att-553" href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-2/picture-5-2/"><img class="aligncenter size-full wp-image-553" title="Subclipse" src="http://blog.nuclearbunny.org/wp-content/uploads/2009/10/Picture-51.png" alt="Subclipse" width="798" height="742" /></a></li>
</ol>
</li>
<li>Go to the Window menu, choose Open Perspective and then SVN Repository Exploring (you may have to choose Other&#8230; to see this option).</li>
<li>Choose the New Repository Location button in the SVN Repositories panel. Add the Zenoss SVN site at <code>http://dev.zenoss.org/svn</code></li>
<li>Open the SVN repository and select the <code>trunk</code> folder. Secondary-click the folder and choose the <em>Checkout&#8230; </em>option. Be sure to change the Depth option to be <em>Only this item</em> so that we don&#8217;t check out any of the sub-folders of trunk just yet (many of the folders within trunk are not needed for development, but we want to keep the directory structure). In the next dialog you will be asked to choose a Project Wizard. Open the Pydev tree item and select the <em>Pydev Project</em> option.<a rel="attachment wp-att-554" href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-2/picture-6-3/"><img class="aligncenter size-full wp-image-554" title="svn checkout" src="http://blog.nuclearbunny.org/wp-content/uploads/2009/10/Picture-62.png" alt="svn checkout" width="605" height="556" /></a></li>
<li>Create the project in the Pydev Project dialog:
<ol>
<li>Use <code>core</code> as the project name and use the default location. This should create a core project at <code>$HOME/zenoss/core</code>.</li>
<li>Make sure the <em>Python</em> project type is selected.</li>
<li>Select<em> 2.4</em> as the Python Grammar version.</li>
<li>Uncheck the <em>Create default &#8216;src&#8217; folder..</em>. option.</li>
<li>Click the Click here to <em>configure an interpreter not listed&#8230;</em> option in order to add the python interpreter built by the Zenoss installation scripts.
<ol>
<li>In the Preferences Dialog, choose the Interpreter &#8211; Python item underneath Pydev and select the <em>New&#8230;</em> button to add a new Python interpreter.</li>
<li>Browse to the <code>$ZENHOME/bin</code> directory and choose the <code>python2.4</code> executable from that directory.</li>
<li>Name the interpreter <code>python-2.4</code>, <code>zenoss-python</code> or some other variant.</li>
<p><a rel="attachment wp-att-529" href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-2/picture-13/"><img class="aligncenter size-full wp-image-529" title="Picture 13" src="http://blog.nuclearbunny.org/wp-content/uploads/2009/10/Picture-13.png" alt="Picture 13" width="632" height="303" /></a>After the new Python interpreter has been added, return to the Pydev Project dialog and choose that interpreter from the list and then click <em>Finish</em> to create the project.</ol>
</li>
<li>Update the <code>core</code> folder from the command-line SVN client so you can selectively pull the sub-folders of the core project and not all of them:<code><br />
cd $HOME/zenoss/core<br />
svn update Products<br />
</code></li>
<li>Move the Products directory the installation checked out and create a symbolic link to the one updated above. <strong>Why?</strong> This allows the Products source tree to be worked on from Eclipse and then also used by the Zenoss run-time.<code><br />
cd $ZENHOME<br />
mv Products Products.old<br />
ln -s $HOME/zenoss/core/Products Products</code></li>
<li>Return to Eclipse and choose the <em>Refresh</em> option from the File menu so that Eclipse notices the updated directory and builds necessary dependencies.</li>
<li>Secondary-click on the core project folder in Eclipse and choose <em>Properties</em>. Choose the <em>PyDev &#8211; PYTHONPATH</em> item and add source folders so PyDev can reference the project from within itself.
<ol>
<li>In the Source Folders tab choose the <em>Add source folder</em> button and pick the root <code>core</code> folder from the provided list.<a rel="attachment wp-att-532" href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-2/picture-2/"><img class="aligncenter size-full wp-image-532" title="Picture 2" src="http://blog.nuclearbunny.org/wp-content/uploads/2009/10/Picture-2.png" alt="Picture 2" width="860" height="617" /></a></li>
<li>In the External Libraries tab choose the <em>Add source folder</em> button and choose the <code>$ZENHOME/lib/python</code> directory.<a rel="attachment wp-att-533" href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-2/picture-3/"><img class="aligncenter size-full wp-image-533" title="Picture 3" src="http://blog.nuclearbunny.org/wp-content/uploads/2009/10/Picture-3.png" alt="Picture 3" width="860" height="617" /></a></li>
</ol>
</li>
</ol>
<p>At this point, your Eclipse project should allow you to navigate between dependencies within the Zenoss project. You can also simultaneously switch between using the Team feature within Eclipse to update and manage Subversion or do so using the command-line svn client.</p>
<h2>Next&#8230;</h2>
<p>In <a href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-3/" target="_blank">Part 3</a> of this series, we&#8217;ll discuss how to manage day-to-day activities such as creating sandbox branches for changes and dealing with multiple versions are done from within the same environment.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My Zenoss Development Environment &#8211; Part 1</title>
		<link>http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-1/</link>
		<comments>http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-1/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 17:05:46 +0000</pubDate>
		<dc:creator>chadwick</dc:creator>
				<category><![CDATA[Jobs]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Zenoss]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://blog.nuclearbunny.org/?p=469</guid>
		<description><![CDATA[Over the past 18 months the developers at Zenoss have used a variety of development environments and methods to productively work with Zenoss, but there are a lot of best practices that have emerged out of this diversity. I develop Zenoss primarily on Mac OS X, with some work done on Ubuntu when necessary. I [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past 18 months the developers at <a href="http://www.zenoss.com/" target="_blank">Zenoss</a> have used a variety of development environments and methods to productively work with Zenoss, but there are a lot of best practices that have emerged out of this diversity.</p>
<p>I develop Zenoss primarily on <a href="http://www.apple.com/macosx/" target="_blank">Mac OS X</a>, with some work done on <a href="http://www.ubuntu.com/" target="_blank">Ubuntu</a> when necessary. I normally use <a href="http://www.eclipse.org/" target="_blank">Eclipse</a> as my development editor, although I&#8217;ll often just use <a href="http://www.vim.org/" target="_blank">vim</a> when doing quick changes or bug fixes. In either case, careful setup of the Zenoss environment is key to being able to productively work with both the new development version and with the shipping versions that require maintenance.</p>
<p>The environment you get by default when you check out the source version of Zenoss from the source repository, or from a source tarball, is not necessarily setup in the best way to develop productively using tools like Eclipse.</p>
<p>The rest of this post will document how both my Mac OS X and Ubuntu environments are initially configured so that a working source Zenoss installation is realized.</p>
<h2>Mac OS X Prerequisites</h2>
<p>These prerequisite instructions assume Mac OS X 10.5 Leopard; 10.6 Snow Leopard will not be able to compile Zenoss&#8217;s third-party dependencies, so an additional work-around is required for that platform until Zenoss moves to <a href="http://www.python.org/download/releases/2.6/" target="_blank">Python 2.6</a>.</p>
<ol>
<li>Install <a href="http://developer.apple.com/technology/xcode.html" target="_blank">Xcode</a>. <strong>Why?</strong> Installs the GNU C/C++ compiler and other command-line development tools needed to build dependencies used by Zenoss.</li>
<li>Install <a href="http://www.open.collab.net/downloads/community/" target="_blank">Universal Subversion 1.6.x from CollabNet Community</a>.<strong>Why?</strong> Leopard only comes with Subversion 1.4.x. This version is not compatible with the Subclipse plug-in for Eclipse that will be used later. In order to be able to use both the command-line and Eclipse Subversion versions simultaneously on the same checked our source, the release of subversion should match. This installation will place the Subversion binaries in <code>/opt/subversion</code> and should automatically add it to your <code>PATH</code>.</li>
<li> Install <a href="http://dev.mysql.com/downloads/" target="_blank">MySQL Community Edition 5.1 32-bit</a>. <strong>Why?</strong> Zenoss needs MySQL for storage of event data.</li>
</ol>
<h2>Ubuntu Prerequisites</h2>
<p>These prerequisite instructions assume Ubuntu 9.04 32-bit Desktop Edition. Installing the server edition or one with different options may require additional prerequisites to be installed.</p>
<ol>
<li>Install Subversion. <strong>Why?</strong> Working with the Zenoss product in source form requires Subversion to access the source repositories (it is also possible to build directly from a source tarball, but this is not discussed here).<br />
<code>sudo apt-get -y install subversion<br />
</code></li>
<li>Install MySQL. <strong>Why?</strong> Zenoss needs MySQL for storage of event data.<br />
<code>sudo apt-get -y install mysql-client mysql-server libmysqlclient15-dev<br />
</code></li>
<li>Install additional development environment tools. <strong>Why?</strong> Zenoss third-party dependencies require several binaries to be built from source.<br />
<code>sudo apt-get -y install patch make vim gcc g++ autoconf</code></li>
<li>Install SNMP support. <strong>Why</strong>? Zenoss requires SNMP libraries for monitoring, and having a local SNMP agent is useful for testing.<code><br />
sudo apt-get -y install libsnmp-base snmp snmpd</code></li>
<li>Install Liberation TrueType fonts. <strong>Why?</strong> Graphs generated by RRDtool will not contain the correct glyphs without this font package.<code><br />
sudo apt-get -y install ttf-liberation</code></li>
</ol>
<h2>Environment Configuration</h2>
<p>Configuring Eclipse will require determining where you want to work with your Zenoss installation, and installing Eclipse plug-ins to provide the features required for Python and Subversion support.</p>
<ol>
<li>Create your Zenoss root directory:<code><br />
mkdir $HOME/zenoss<br />
</code></li>
<li>Create and run a <code>setup.sh</code> script that will configure needed environment variables for zenoss. This script can be started from your log in profile if desired.<code><br />
cd $HOME/zenoss<br />
cat &gt; zenoss-config.sh &lt;&lt;EOF<br />
ZENHOME=$HOME/zenoss/zenhome<br />
PYTHONPATH=$ZENHOME/lib/python<br />
PATH=\$ZENHOME/bin:\$PATH<br />
export ZENHOME PYTHONPATH PATH<br />
EOF<br />
chmod +x zenoss-config.sh<br />
. zenoss-config.sh<br />
mkdir $ZENHOME<br />
</code></li>
<li>Checkout the Zenoss source installation tree. <strong>Why?</strong> This tree is used to bootstrap the installation from the source repository and create a running Zenoss installation. We&#8217;ll need this before we modify it to fit the needs of our development environment.<code><br />
svn co http://dev.zenoss.org/svn/trunk/inst inst<br />
</code></li>
<li>Run the installation script to checkout, compile, and configure a zenoss environment. If you need to customize your MySQL configuration at all do not use the <code>--no-prompt</code> argument.<code><br />
cd inst<br />
./install.sh --no-prompt<br />
</code></li>
<li>Modify the <code>zensocket</code> file to be setuid root. <strong>Why?</strong> Some of the Zenoss daemons use a privileged port and making the file owned by root and accessible by the Zenoss user allows the daemons to be run as a non-priviledged user but still use the privileged port.<code><br />
sudo chown root:`id -g` $ZENHOME/bin/zensocket<br />
sudo chmod 04750 $ZENHOME/bin/zensocket<br />
</code></li>
</ol>
<p>At this point, you should have running zeo and zope processes and be able to log on to the local Zenoss instance. Your Zenoss root directory should look similar to the following:<br />
<a rel="attachment wp-att-491" href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-1/picture-4/"><img class="aligncenter size-full wp-image-491" title="zenoss workspace" src="http://blog.nuclearbunny.org/wp-content/uploads/2009/10/Picture-4.png" alt="zenoss workspace" width="492" height="393" /></a></p>
<h2>Next&#8230;</h2>
<p>In <a title="Part 2" href="http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-2/" target="_self">Part 2</a> of this series, we&#8217;ll download and configure the Eclipse IDE.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuclearbunny.org/2009/10/22/my-zenoss-development-environment-part-1/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Why is my car&#8217;s satellite navigation system so stupid?</title>
		<link>http://blog.nuclearbunny.org/2009/09/18/why-is-my-cars-satellite-navigation-system-so-stupid/</link>
		<comments>http://blog.nuclearbunny.org/2009/09/18/why-is-my-cars-satellite-navigation-system-so-stupid/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 23:57:27 +0000</pubDate>
		<dc:creator>chadwick</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Cars]]></category>
		<category><![CDATA[gps]]></category>
		<category><![CDATA[lame]]></category>
		<category><![CDATA[rant]]></category>

		<guid isPermaLink="false">http://blog.nuclearbunny.org/?p=474</guid>
		<description><![CDATA[I have two different late model (a 2006 and a 2007) GM vehicles with satellite navigation systems. Both are manufactured for GM by Denso, although they clearly have different implementations and features. The one thing they both share, however, is blatant stupidity when calculating routes. I travel quite a bit between Houston and Austin and [...]]]></description>
			<content:encoded><![CDATA[<p>I have two different late model (a 2006 and a 2007) GM vehicles with satellite navigation systems. Both are manufactured for GM by Denso, although they clearly have different implementations and features. The one thing they both share, however, is blatant stupidity when calculating routes.</p>
<p>I travel quite a bit between Houston and Austin and there are really only three reasonable ways to go: US-290; I-10 &amp; TX-71; or I-10 &amp; TX-183. Over the years my preference has moved from US-290 to I-10 &amp; TX-71 as traffic along US-290 has increased on the eastern fridges of the Austin area, but the distance and time between the two is very similar and really it depends upon where in Austin you might be headed.</p>
<p><img class="alignright" style="border: 1px solid black; margin: 2px;" title="GM GPS Route" src="http://farm3.static.flickr.com/2622/3913527957_5875c4fbf4.jpg" alt="" width="300" height="225" /></p>
<p>The GPS systems in my cars have three route options when you pick a destination: fastest, shortest and other. In both cars, the route displayed is none of the above three, but instead a long, out-of-the-way route of I-10 to Seguin before heading north on TX-123 to San Marcos, and then heading into Austin on I-35. This option is a whopping 222 miles with an estimated travel time of 3 hours and 39 minutes.</p>
<p>Now, the fastest route is usually not the shortest. Route calculations are supposed to take into account the actual speeds of the road segments involved, and since interstate highways are almost always faster than anything else, there is a natural preference to these roads. In this case, however, the calculation is way off. Taking I-10 to US-71 (via US-59 &amp; TX-8 inside of Houston for those familiar with the area) is only 166 miles and estimated to take 3 hours 29 minutes according to Google. Likewise, taking US-290 is only 168 miles and estimated to take 3 hours 22 minutes.</p>
<p>Of course these time estimates are usually worst case scenario. Driving a few miles per hour over the speed limit I often make my trip in 2 hours and 30 minutes; worst case has been 3 hours and 10 minutes when driving 55 as an experiment (a painful one at that).</p>
<p>What about the shortest route option in the GPS system? That does actually route you onto I-10 &amp; US-71 in this example, but the shortest route calculations are always incredibly stupid, too. They will often take you onto side streets for half a mile or less just to maintain the shortest possible distance. Once, when driving through Memphis, TN, the GM GPS took us on and off the interstate highway three times when driving through town, often for just a couple of blocks, just to maintain the shortest distance. Granted this is a clear example of a GPS system not being there to replace your own intelligence, but if you don&#8217;t know the town&#8230;</p>
<p>In the early days of consumer-level GPS systems, one of the common problems was having accurate speed data for different road segments. In western states especially, secondary highways often have the same speed limits as interstate highways. In Texas, the past 20 years has seen many of these highways improved so they route around the smaller towns, rather than going through them and stopping at every light. Consequently it is often better to take these roads than the interstates whenever possible. If the GM GPS systems do not have accurate speed data then it can account for some of this behavior, but not all.</p>
<p>On my normal route, once you finally hit TX-71 and the GPS decides you mean it, suddenly the estimated arrival time drops dramatically along with the distance. Is it computing this arrival time based upon your actual speed so far, or based upon the speed data of the road?</p>
<p>Over the years I&#8217;ve gone from absolutely wanting a satnav system in the car to wishing mine didn&#8217;t. I get much better results using a smart phone with Google Maps to get a general idea of the route to take and then consulting with it now and then if things get tricky. But for the most part, they seem poorly done enough that they just get in the way rather than help. Will the newer generations out now that provide real-time traffic data and have hard-disk based data improve their logic and performance enough that these problems are solved?</p>
<p>One final note for embedded systems developers: you don&#8217;t get to break the interactive response time rule of 250ms just because you are writing code for an embedded system.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuclearbunny.org/2009/09/18/why-is-my-cars-satellite-navigation-system-so-stupid/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IcyBee needs a new maintainer</title>
		<link>http://blog.nuclearbunny.org/2009/09/03/icybee-needs-a-new-maintainer/</link>
		<comments>http://blog.nuclearbunny.org/2009/09/03/icybee-needs-a-new-maintainer/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 23:16:05 +0000</pubDate>
		<dc:creator>chadwick</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://blog.nuclearbunny.org/?p=472</guid>
		<description><![CDATA[The IcyBee project is a client for the ICB chat network with a graphical user interface and written in the Java language for cross-platform portability. The current version of the software has several years of stability behind it and few user requests, but there is always more work to do. The project is currently hosted [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://www.nuclearbunny.org/icybee/" target="_blank">IcyBee project</a> is a client for the <a href="http://www.icb.net/" target="_blank">ICB chat network</a> with a graphical user interface and written in the Java language for cross-platform portability. The current version of the software has several years of stability behind it and few user requests, but there is always more work to do. The project is currently hosted on <a href="http://sourceforge.net/projects/icybee/" target="_blank">SourceForge</a> and all of the source is already available.</p>
<p>I&#8217;m looking for a maintainer that will take the reins of the project from me and give the project some much needed love as time and platforms march on. If interested, drop a comment on this post and we can discuss the possibility.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.nuclearbunny.org/2009/09/03/icybee-needs-a-new-maintainer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

