<?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>layer8</title>
	<atom:link href="http://www.netfluvia.org/layer8/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.netfluvia.org/layer8</link>
	<description></description>
	<lastBuildDate>Thu, 31 Jan 2013 11:50:21 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Scraping Data from the Netbotz 500</title>
		<link>http://www.netfluvia.org/layer8/?p=185</link>
		<comments>http://www.netfluvia.org/layer8/?p=185#comments</comments>
		<pubDate>Sat, 07 Jan 2012 21:31:19 +0000</pubDate>
		<dc:creator>jrh</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[netbotz]]></category>

		<guid isPermaLink="false">http://www.netfluvia.org/layer8/?p=185</guid>
		<description><![CDATA[A datacenter decommissioning last year gave me access to some old Netbotz (now APC) monitoring gear. I jumped at the chance to save it from the garbage, as I remembered it being a pretty slick way to get basic environmental data (temp, door switches, etc.) and it was a small physical footprint way to control <a href='http://www.netfluvia.org/layer8/?p=185'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>A datacenter decommissioning last year gave me access to some old <a href="http://www.netbotz.com/products/appliances.html" target="_blank">Netbotz</a> (now APC) monitoring gear. I jumped at the chance to save it from the garbage, as I remembered it being a pretty slick way to get basic environmental data (temp, door switches, etc.) and it was a small physical footprint way to control a number of networked cameras at once.</p>
<p>My recollection was right, and while the management server appliance proved both annoying to work with and massive overkill for my home projects, I&#8217;ve had some luck scraping data out of its web UI.</p>
<p>I wrote a few python classes to make it reasonable to programmatically access the data generated by the cameras and sensors in my backyard chicken coop; you can <a href="https://pachube.com/feeds/42803" target="_blank">see the end result at pachube</a>.</p>
<p>The <a href="http://www.netfluvia.org/code/pybotz_dot_py" target="_blank">code is available here</a>.  It&#8217;s driven by a small db schema that holds basic location info for the monitoring gear and metadata about sensors being watched (e.g. polling intervals and alert thresholds), and produces simple name/value pairs with sensor data satisfying given conditions.  By &#8220;conditions&#8221; here I mean things like &#8220;it&#8217;s time to report this sensor value&#8221; or &#8220;this value changed too much, so I&#8217;m reporting on it&#8221; &#8212; this is by no means meant to replace actual monitoring systems (though it could easily be used to interface with them).</p>
<p>While I wrote fairly thorough pydoc, the overall documentation is hardly extensive, so I&#8217;d be happy to answer questions if getting at netbotz data from python is interesting to anybody else.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netfluvia.org/layer8/?feed=rss2&#038;p=185</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trivial python interface to update Pachube data feeds</title>
		<link>http://www.netfluvia.org/layer8/?p=175</link>
		<comments>http://www.netfluvia.org/layer8/?p=175#comments</comments>
		<pubDate>Mon, 02 Jan 2012 17:59:35 +0000</pubDate>
		<dc:creator>jrh</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[pachube]]></category>
		<category><![CDATA[sensors]]></category>

		<guid isPermaLink="false">http://www.netfluvia.org/layer8/?p=175</guid>
		<description><![CDATA[Pachube provides an API-exposed store of sensor data from pretty much anything, but with a focus on sensor data.  It&#8217;s free to use and has what seems to be a pretty complete, reasonably designed, and easy to use API with a nicely flexible authorization model. I&#8217;ve been working on some code to scrape data out <a href='http://www.netfluvia.org/layer8/?p=175'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p><a href="https://pachube.com/" target="_blank">Pachube</a> provides an API-exposed store of sensor data from pretty much anything, but with a focus on sensor data.  It&#8217;s free to use and has what seems to be a pretty complete, reasonably designed, and easy to use <a href="http://api.pachube.com/v2/" target="_blank">API</a> with a nicely flexible authorization model.</p>
<p>I&#8217;ve been working on some code to scrape data out of the <a href="http://www.netbotz.com/products/appliances.html" target="_blank">Netbotz</a> web UI (which does <em>not</em> have an easy to use API) and, as I got to working on the data storage backend for the scraper, remembered Pachube and decided to give it a try rather than reinventing what was effectively the same wheel.</p>
<p>I have generally positive impressions of Pachube after a couple of days messing around with it.  It was pretty easy to get going, and after stumbling into one quickly-fixed bug was up and sending data in from my prototype scraper pretty quickly.</p>
<p>I&#8217;m using the following python class to simplify the interaction.  It&#8217;s trivial, but I didn&#8217;t see anything similar already done, so am throwing it here for future google results:</p>
<blockquote>
<pre>

#!/usr/bin/python

# This code is released into the public domain (though I'd be interested in seeing
#  improvements or extensions, if you're willing to share back).

import mechanize
import json
import time

class PachubeFeedUpdate:

  _url_base = "http://api.pachube.com/v2/feeds/"
  _feed_id = None
  _version = None
  ## the substance of our update - list of dictionaries with keys 'id' and 'current_value'
  _data = None
  ## the actual object we'll JSONify and send to the API endpoint
  _payload = None
  _opener = None

  def __init__(self, feed_id, apikey):
    self._version = "1.0.0"
    self._feed_id = feed_id
    self._opener = mechanize.build_opener()
    self._opener.addheaders = [('X-PachubeApiKey',apikey)]
    self._data = []
    self._payload = {}

  def addDatapoint(self,dp_id,dp_value):
    self._data.append({'id':dp_id, 'current_value':dp_value})

  def buildUpdate(self):
    self._payload['version'] = self._version
    self._payload['id'] = self._feed_id
    self._payload['datastreams'] = self._data

  def sendUpdate(self):
    url = self._url_base + self._feed_id + "?_method=put"
    try:
      self._opener.open(url,json.dumps(self._payload))
    except mechanize.HTTPError as e:
      print "An HTTP error occurred: %s " % e</pre>
</blockquote>
<p>Usage is pretty straightforward.  For example, assuming you have defined key (with a valid API key from Pachube) and feed (a few clicks in the browser once you&#8217;ve registered) it&#8217;s basically like:</p>
<blockquote><pre>

pfu = PachubeFeedUpdate(feed,key)
# do some stuff; gather data, repeating as necessary for any number of datastreams
pfu.addDatapoint(&lt;datastream_id&gt;,&lt;data_value&gt;))
# finish up and submit the data
pfu.buildUpdate()
pfu.sendUpdate()</pre>
</blockquote>
<p>The resulting datapoints basically end up looking like they were logged at the time the sendUpdate() call is made.  In my situation, I want to send readings from a couple of dozen sensors each into their own Pachube datastream in one shot, so this works fine.  If, instead, for some reason you need to accumulate updates over time without posting them, you&#8217;d need to take a different approach.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netfluvia.org/layer8/?feed=rss2&#038;p=175</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Chickens!</title>
		<link>http://www.netfluvia.org/layer8/?p=159</link>
		<comments>http://www.netfluvia.org/layer8/?p=159#comments</comments>
		<pubDate>Fri, 24 Jun 2011 04:19:36 +0000</pubDate>
		<dc:creator>jrh</dc:creator>
				<category><![CDATA[chickens]]></category>
		<category><![CDATA[domesticity]]></category>

		<guid isPermaLink="false">http://www.netfluvia.org/layer8/?p=159</guid>
		<description><![CDATA[My twitter stream &#8212; okay, &#8220;trickle&#8221; might be more accurate &#8212; has for the past few weeks mostly been about my continued work on our backyard chicken coop (more on that later). While the coop isn&#8217;t quite done, earlier this week we took delivery of its future inhabitants.  As usual, @amyj has better pictures, but <a href='http://www.netfluvia.org/layer8/?p=159'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.netfluvia.org/layer8/wp-content/uploads/2011/06/Screen-shot-2011-06-23-at-10.24.29-PM.png"><img class="size-medium wp-image-160 alignleft" title="baby chicks" src="http://www.netfluvia.org/layer8/wp-content/uploads/2011/06/Screen-shot-2011-06-23-at-10.24.29-PM-300x219.png" alt="" width="240" height="175" /></a>My <a href="https://twitter.com/#!/jrheling">twitter stream</a> &#8212; okay, &#8220;trickle&#8221; might be more accurate &#8212; has for the past few weeks mostly been about my continued work on our backyard chicken coop (more on that later).</p>
<p>While the coop isn&#8217;t quite done, earlier this week we took delivery of its future inhabitants.  As usual, <a href="http://www.amyj.net/blog/?p=684">@amyj has better pictures</a>, but I&#8217;ve got webcams and sensors!  You can follow along with the growth and play of our baby chicks <a href="http://chickens.netfluvia.org:8080/" target="_blank">here</a>.  They mostly just eat and poop, but they&#8217;re really cute while they&#8217;re doing it.  [Note: you can click around in the interface to see different views, sensor readings, etc.]</p>
<p>At the moment there are eight chicks, due to an order processing error (we only ordered four).  Hopefully we&#8217;ll find the extras a new home soon, and it&#8217;ll just be the four again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netfluvia.org/layer8/?feed=rss2&#038;p=159</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>First Impressions of Jacs on Monroe St.</title>
		<link>http://www.netfluvia.org/layer8/?p=150</link>
		<comments>http://www.netfluvia.org/layer8/?p=150#comments</comments>
		<pubDate>Sat, 01 Aug 2009 22:50:01 +0000</pubDate>
		<dc:creator>jrh</dc:creator>
				<category><![CDATA[food]]></category>
		<category><![CDATA[kids]]></category>
		<category><![CDATA[madison]]></category>
		<category><![CDATA[Add new tag]]></category>

		<guid isPermaLink="false">http://www.netfluvia.org/layer8/?p=150</guid>
		<description><![CDATA[Jacs, at 2611 Monroe St. on Madison&#8217;s near West side, &#8220;soft-opened&#8221; earlier this week in the wake of the recently shuttered Monroe St. Bistro.  We (me, AmyJ, and our 2 and 5 year-old kids) spontaneously stopped in for lunch today.  Jacs wasn&#8217;t perfect (what is after 5 days?), but we all agreed that it shows <a href='http://www.netfluvia.org/layer8/?p=150'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.jacsofmadison.com/">Jacs</a>, at 2611 Monroe St. on Madison&#8217;s near West side, &#8220;soft-opened&#8221; earlier this week in the wake of the recently shuttered Monroe St. Bistro.  We (me, <a href="http://amyj.typepad.com/" target="_blank">AmyJ</a>, and our 2 and 5 year-old kids) spontaneously stopped in for lunch today.  Jacs wasn&#8217;t perfect (what is after 5 days?), but we all agreed that it shows promise, and are happy to have it in the neighborhood.</p>
<p>While we&#8217;d intended to have lunch, Jacs serves only brunch between 10am and 3pm on weekends.  The brunch menu had some very tasty looking breakfasts (omelets, eggs benedict, various lighter breakfasts, etc.) and a handful of sandwiches.</p>
<p>I was happy to see the moules frites still on the menu, as they were the only thing on the MSB&#8217;s menu that I ever found pleasing without caveat (and the only area in which MSB came anywhere close to its generally superior neighbor up the street, <a href="http://www.brasseriev.com/" target="_blank">Brasserie V</a>).  I don&#8217;t know that they&#8217;re the same, but my understanding is that there&#8217;s some continuity in ownership and/or management between the two, so there&#8217;s reason for hope.<br />
<span id="more-150"></span><br />
I wasn&#8217;t in the mood for mussels, though, so I decided to order the burger.  I&#8217;m not a huge burger fan, but I do enjoy a good burger once in a while, and find it a reasonable way to form an initial impression of a place like Jacs, given that many of my favorite burgers in town come from generally similar establishments.  (Roughly in order, I&#8217;m thinking of <a href="http://www.theoldfashioned.com/" target="_blank">The Old Fashioned</a>, <a href="http://www.brocach.com/" target="_blank">Brocach</a>, <a href="http://www.brasseriev.com/" target="_blank">Brasserie V</a>, and <a href="http://www.dottydumplingsdowry.com/" target="_blank">Dotty&#8217;s</a>.  Sorry, Weary Traveler, I love the place but the Bad Breath Burger just doesn&#8217;t do it for me.)  Jacs&#8217; burger was served on a ciabatta roll with caramelized onions, cheddar, aioli, lettuce, and tomato.  I&#8217;d call it solidly &#8216;good&#8217;, but not quite great.  I has asked for it medium rare, but my burger instead showed a puzzling range of doneness:  fully rare on one half, appropriately medium rare for about a quarter, and pretty much medium on the remaining quarter.  Flavors were all good, though if the aioli had simply been described as mayo I probably wouldn&#8217;t have noticed that it wasn&#8217;t.  The bun was a particular happy note on the burger.  It nearly scared me away from ordering it at all, as MSB also served their burger (which I tried exactly once) on a ciabatta role that I found to be a tough and regrettable distraction from an already non-awesome sandwich.  I don&#8217;t know if Jacs changed their bun source or if I perhaps had caught the Bistro on a particularly bad day, but this bun was a clearly positive addition.  Until someone starts just putting their hamburger on the ciabatta from Lombardino&#8217;s (hint, hint), I&#8217;m comfortable calling this my favorite bun in town.</p>
<p>Amy was about to order the quiche but changed her mind at the last minute when I pointed out that the &#8220;Summer Sausage Sandwich&#8221; didn&#8217;t look as yucky as the name suggested.  Processed meat plays an appropriately subtle role in this sandwich, which otherwise consisted of fresh mozzarella, arugula, red onion, and tomato on a baguette.  She liked it, but didn&#8217;t love it.   &#8220;It didn&#8217;t rock my world&#8221; was her comment, but she didn&#8217;t regret the choice.</p>
<p>We both chose the soup of the day as our side (other choices were green salad, frites, and a quinoa salad that wasn&#8217;t available, presumably due to a new restaurant getting its kinks worked out).  The soup was an herbed new potato (at least until they ran out one cup after filling our order) that I found to be quite good.  I&#8217;m a huge soup fan, and based on today&#8217;s experience will certainly make a point of trying Jacs&#8217; other soups du jour.  Our daughter Nora (2), inherited Daddy&#8217;s soup-loving gene, and also liked it &#8212; she kept nuzzling up to my elbow and asking for more tastes.</p>
<p>Ben (5) is still in his post toddler conservative palate phase, and Nora doesn&#8217;t eat much (by adult standards), so we ordered the fruit and yogurt breakfast plate for them to share, and a side order of frites for the table.   The granola served with the fruit and yogurt plate was among the best I&#8217;ve had, and the fruit and yogurt quite satisfactory.</p>
<p>The frites were excellent, as MSB&#8217;s had been.  One cone was plenty for us all to have a nice side snack.  I adore Brasserie V (though I&#8217;m still a bit sore about the loss of the duck confit from their dinner menu), but these frites were better than any I&#8217;ve had up the street.</p>
<p>The beer list at Jacs is scaled back from MSB&#8217;s, but is still exceptional for a small restaurant/bar.  There were about a dozen beers on tap, roughly half of which Belgians of various sorts.  Brasserie V is secure in its position as Monroe Street&#8217;s (and arguably Madison&#8217;s) best restaurant beer list, but Jacs is no slouch in this department.  I had a glass of the <a href="http://beeradvocate.com/beer/profile/826/34084" target="_blank">Val-Dieu Grand Cru</a>, which didn&#8217;t disappoint.</p>
<p>Jacs&#8217; location has seen a lot of turnover in the past decade.  The series of predecessors to MSB &#8212; the Creole Cafe, Louisianne&#8217;s Kitchen, and Papa Phil&#8217;s &#8212; were all good restaurants.  (The pulled pork po&#8217; boy with bleu cheese cole slaw and pepper jelly from Louisianne&#8217;s Kitchen was the best sandwich I&#8217;ve ever had, and I miss it somewhat desperately to this day.)  In this same time period, the <a href="http://www.pasquals.net/" target="_blank">Pasqual&#8217;s</a> directly across the street (with equally challenging parking and similar prices) has doubled in size, and is consistently full.  There may be lots of non-obvious reasons for this disparity, but there is an obvious difference in the kid-friendliness department.  On any given visit to Pasqual&#8217;s I generally see more kids than I saw cumulatively over the years in the various restaurants in Jacs&#8217; current location.</p>
<p>Judging by the press surrounding the announcement of MSB&#8217;s demise and Jacs birth, this wasn&#8217;t lost on the proprietors of Jacs, who made a big deal out of their intent to be more kid/family friendly.  OK, cool.  The intent is visible: the hostess came back right after seating us with a bag of toys for the kids to play with &#8212; more fun than the usual crayons + inane puzzle, and less wasteful.  It could use some fine-tuning, though.  The brunch menu didn&#8217;t have a kids menu or any obviously kid-oriented items.  Also, the brunch-only weekend daytime menu will probably leave us going less than we would if there were breakfast at breakfast time and a full lunch menu at midday.</p>
<p>I&#8217;ll definitely go back to Jacs.  The dinner menu had a number of things that looked good (the small menu at the MSB was both uninspired and uninspiring, leaving me inclined to order &#8216;meh&#8217; for my few dinners there during its short run).  I&#8217;d like to try breakfast there, too, though not being able to eat breakfast until 10am is a bummer.  At least one can compensate with $2 mimosas or bloody marys.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netfluvia.org/layer8/?feed=rss2&#038;p=150</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Controlling A Roomba with an Arduino</title>
		<link>http://www.netfluvia.org/layer8/?p=127</link>
		<comments>http://www.netfluvia.org/layer8/?p=127#comments</comments>
		<pubDate>Wed, 10 Jun 2009 10:47:11 +0000</pubDate>
		<dc:creator>jrh</dc:creator>
				<category><![CDATA[arduino]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[roomba]]></category>

		<guid isPermaLink="false">http://www.netfluvia.org/layer8/?p=127</guid>
		<description><![CDATA[I set out this weekend to get an Arduino board to control my Roomba.  (The Roomba has a great - and generally open - interface, and iRobot deserves significant credit for encouraging creative repurposing/extensions of their producs.)  I've got a few project ideas in mind, but for an initial step just wanted to verify that the Arduino could a) send control commands ("move forward", "turn right", etc.) from the Arduino, and b) read sensor data ("something is touching my left bumper", "I'm about to fall down the stairs").  This post contains my notes, which hopefully will help others doing this sort through some of the issues in a bit less than that I spent.]]></description>
				<content:encoded><![CDATA[<p>I set out this weekend to get an <a href="http://arduino.cc">Arduino</a> board to control my <a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=6&amp;url=http%3A%2F%2Fstore.irobot.com%2Fproduct%2Findex.jsp%3FproductId%3D2804960&amp;ei=qOktSo7dAovcMdnwnPMJ&amp;usg=AFQjCNG5t0mKPd2nPNkiSCAvSbLoTWhgdw&amp;sig2=nDxK4_jvNA4Av37PlU5p2g">Roomba</a>.  (The Roomba has a great &#8211; and generally open &#8211; interface, and <a href="http://irobot.com/">iRobot</a> deserves significant credit for encouraging creative repurposing/extensions of their products.)  I&#8217;ve got a few project ideas in mind, but for an initial step just wanted to verify that the Arduino could a) send control commands (&#8220;move forward&#8221;, &#8220;turn right&#8221;, etc.) from the Arduino, and b) read sensor data (&#8220;something is touching my left bumper&#8221;, &#8220;I&#8217;m about to fall down the stairs&#8221;).  This post contains my notes, which hopefully will help others doing this sort through some of the issues in a bit less time than that I spent.  <span id="more-127"></span></p>
<h2>The Cable</h2>
<p>I&#8217;ve had <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8243">the necessary cable</a> (straight-through 8 pin mini-DIN) to connect to the serial control connector on the Roomba quite a while, and I&#8217;d already successfully cut a hole in the top of the Roomba&#8217;s cover to expose the port.  (I used a Dremel, though I suppose you could drill and file if you were careful and patient.)</p>
<p>I cut the cable in half and soldered male header pins to the correct wires to make a 2-pin power/ground connector and a 3-pin connector that had the serial RX/TX line as well as the DD (Device Detect) pin.  (There&#8217;s no reason the serial and DD lines <em>need</em> to be next to each other, but it made for a simpler connector, and it&#8217;s easy to just assign them proximate ports on the Arduino&#8217;s digital pin bank.)  Tod Kurt, author of <a href="http://www.amazon.com/Hacking-Roomba-ExtremeTech-Tod-Kurt/dp/0470072717/sr=8-1/qid=1163208746?ie=UTF8&amp;s=books" target="_blank"><span style="text-decoration: underline;">Hacking Roomba</span></a> and part of the impressive <a href="http://thingm.com/">ThingM</a> studio, has <a href="http://hackingroomba.com/2006/11/28/new-roomba-prototyping-cable-for-arduino/">a basic photoset showing a similar cable</a>.  At this point, if you&#8217;re looking to do this yourself, you may be wondering which wires in the cable need to go to which pins of the connectors.  I have no idea if there&#8217;s reliable consistency in the colors used inside of mini-DIN cables, so I&#8217;d suggest figuring this out yourself with your specific cable and a continuity detector of some sort.  The pin diagram on page 2 of <a href="www.irobot.com/images/consumer/hacker/Roomba_SCI_Spec_Manual.pdf" target="_blank">iRobot&#8217;s SCI (Serial Command Interface) documentation</a> should be all you need.<a href="http://www.flickr.com/photos/jrheling/3610053602/in/photostream/"><img class="alignright" style="margin: 10px;" title="Arduino Roomba Cable" src="http://farm4.static.flickr.com/3612/3610053602_b2cc97f42d.jpg?v=0" alt="Arduino Roomba Cable" width="180" height="135" /></a></p>
<h2>Powering the Arduino</h2>
<p>The power connector from the Roomba is carrying +16V, which is more than enough to power the Arduino (I&#8217;m using the Diecimila and Duemilanove versions of the board).  According to <a href="http://arduino.cc/en/Main/ArduinoBoardDuemilanove">the docs</a>, this is within the acceptable input range, but outside of the recommended range.  In my early attempts to hook it up, I seem to have fried a Diecimila board by connecting Roomba&#8217;s +V line to the &#8216;Vin&#8217; header on the Arduino (sometimes labeled &#8217;9V&#8217;).  I got it working by running the Roomba&#8217;s +V line through a 5V voltage regulator and then directly into the &#8217;5V&#8217; header on the Arduino (note:  it&#8217;s important to <em>only</em> do this with a regulated supply, since the 5V header bypasses the Arduino&#8217;s onboard regulator).  This worked fine, even if it does mean that the minimal setup is no longer just an Arduino and a cable.  After I fried the Diecimila, I switched to a Duemilanove, though to my knowledge there is no relevant difference in terms of power requirements or tolerance.</p>
<h2><a href="http://farm3.static.flickr.com/2439/3610055836_2c9ce866a1.jpg?v=0" target="_blank"><img class="alignleft" style="margin: 10px;" title="Power regulator" src="http://farm3.static.flickr.com/2439/3610055836_2c9ce866a1.jpg?v=0" alt="" width="180" height="135" /></a></h2>
<h2>OK, It Should Work Now</h2>
<p>Based on the research I&#8217;d done, I expected that things would more or less just work at this point.  For the software side of my proof of concept, I was using <a href="http://roombahacking.com/software/arduino/RoombaBumpTurn.pde" target="_blank">Tod Kurt&#8217;s RoombaBumpTurn sketch</a>.  The sketch sends the Roomba forward, then checks the left and right bump sensors in a loop, turning &#8216;away&#8217; from the objects it collides with.</p>
<p>I was excited on my first attempt to see the Roomba &#8216;wake up&#8217; shortly after connecting my cable to the board.  Then:  nothing.  Hmm.</p>
<p>By default, the Roomba&#8217;s SCI talks at 57000 bps, and the code was assuming that data rate.  I didn&#8217;t recall having changed it during previous times hacking around with the Roomba, but just in case I changed the serial speed to 19200 and, sure enough, the Roomba jolted forward shortly after powering up the Arduino.  OK, cool, so there was at least basic connectivity.</p>
<p>I didn&#8217;t really have a reason to run at the slower serial speed, so I threw a quick one-time change into the setup() function to reset the baud rate back to 57000:<br />
<code> </code></p>
<pre>// [re]set baud rate to 57600
sciSerial.print(129, BYTE);  // BAUD
sciSerial.print(10, BYTE);   // 57600
delay(100);</pre>
<h2>*Now* It Should Work, Really</h2>
<p>With basic serial connectivity established, I went on to verify that basic bumping and turning behavior worked as expected.  In short, it didn&#8217;t.  Most of the time letting the Roomba collide with something (or even just manually pressing the sensor) did nothing;  perhaps 10% of the time it would cause the Roomba to turn.  In order to verify that I really was getting commands to the Roomba, I added a short sequence of actions called from the setup() method:<br />
<code> </code></p>
<pre>void dance() {
  xbSerial.println("top of dance()");
  updateSensors();
  goForward();
  delay(1000);
  goBackward();
  delay(1000);
  stopMoving();
}
...
void stopMoving() {
  sciSerial.print(137, BYTE);   // DRIVE
  sciSerial.print(0x00,BYTE);   // 0x0000 == 0
  sciSerial.print(0x00,BYTE);
  sciSerial.print(0x00,BYTE);
  sciSerial.print(0x00,BYTE);   // 0x0000
}</pre>
<p>The Roomba jogged forward, and backward, just as I&#8217;d expect.  This left me pretty much convinced that sending commands was working fine, and that my problem was in reading sensor values.</p>
<p>At this point I really started to feel the lack of debugging information.  While I was pretty sure my problem was in sensor reading, it was certainly time to validate my overall expectations about program flow, as well as inspect return values from the sensor checks, etc.  Debugging is always more of a challenge on an embedded platform with no display/keyboard, but my typical answer for this when using the Arduino &#8212; &#8220;I&#8217;ll just println() to the serial port and monitor it over USB&#8221; &#8212; doesn&#8217;t work here, for two reasons.  First, the serial port is being used by the connection to the Roomba.  As if that weren&#8217;t enough (and it is), the Roomba is driving across the floor, and I wouldn&#8217;t want to chase after it with my laptop.</p>
<h2>Remote Wireless Debugging with XBee</h2>
<p>Fortunately, there is a good answer to debugging the code running on the Arduino sitting on top of my Roomba as it scoots away from me:  <a href="http://www.digi.com/products/wireless/point-multipoint/xbee-series1-module.jsp">Digi&#8217;s XBee modules</a>.  I&#8217;ve been playing around with these for a different project recently, and at a basic level they provide an easy wireless link with a serial interface.  Interfacing with the Arduino is a snap with the <a href="http://www.adafruit.com/index.php?main_page=product_info&amp;cPath=29&amp;products_id=126">XBee adapter kit</a> from the outstanding <a href="http://www.adafruit.com">adafruit industries</a> (<a href="http://www.sparkfun.com/commerce/categories.php">sparkfun</a> also has <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=8276">a breakout board</a> I&#8217;ve used with success, but it requires a bit more of a surrounding circuit &#8212; nothing tricky, but not as easy as adafruit&#8217;s).</p>
<h2><a href="http://farm4.static.flickr.com/3388/3609243999_b9a559c627.jpg?v=0"><img class="alignright" style="margin: 10px;" title="XBee module" src="http://farm4.static.flickr.com/3388/3609243999_b9a559c627.jpg?v=0" alt="" width="180" height="135" /></a></h2>
<p>The attentive reader might now be wondering:  I just explained that my serial port was already spoken for, and the XBee module has a serial interface.  So how does this really solve my problem?  Enter <a href="http://arduiniana.org/libraries/NewSoftSerial">NewSoftSerial</a>, an updated version of the Arduino software serial library, which basically lets you drive a serial interface from any two digital I/O pins on the Arduino.  [Yes, I could also use this to debug directly over a serial line, which would be an option if you didn't have a pair of XBee modules and didn't mind potentially chasing after your Roomba.]  I had a pair of XBee modules already configured to talk to each other (details of that are far outside the current scope).  One module got connected to a couple of pins on the Arduino, and the other to my laptop via <a href="http://www.adafruit.com/index.php?main_page=product_info&amp;cPath=33&amp;products_id=70">the trusty FTDI USB TTL-232 cable</a>.  On the laptop I then ran a simple serial terminal with &#8216;screen&#8217; (any terminal program would do), and <em>voila</em> &#8212; I can println() from the vacuum cleaning scuttling across the floor and see it on my laptop from across the room (or halfway down the block, for that matter).</p>
<p>With basic visibility established, I was able to dig further into what wasn&#8217;t working with regard to sensor readings.   The sensor reading routine in RoombaBumpTurn is pretty straightforward:</p>
<p>&nbsp;</p>
<pre>void updateSensors() {
  Serial.print(142, BYTE);
  Serial.print(1,   BYTE);  // sensor packet 1, 10 bytes
  delay(100); // wait for sensors
  char i = 0;
  while(Serial.available()) {
    int c = Serial.read();
    if( c==-1 ) {
      for( int i=0; i&lt;5; i ++ ) {   // say we had an error via the LED
        digitalWrite(ledPin, HIGH);
        delay(50);
        digitalWrite(ledPin, LOW);
        delay(50);
      }
    }
    sensorbytes[i++] = c;
  }
}</pre>
<p>After adding some basic println() breadcrumbs (not shown here), it quickly became clear that this function simply wasn&#8217;t returning a value that suggested it had correctly read the bump sensors.  The clearest indication of this was when I added some code to check the value of <span style="font-family: fixed;">i</span> at the end of updateSensors().  The SCI doc is pretty clear &#8212; you ask for sensor packet 1, you get 10 bytes back.  However, I was consistently getting 2 bytes, or 4 bytes, or 3.  Once in a while I&#8217;d get 10 bytes, but it was rare.</p>
<p>This is good.  This is progress.</p>
<h2>Other People&#8217;s Problems</h2>
<p>I googled for notes from others doing similar things, and found a number of examples.  Actually, I found a surprising (but at this point encouraging) number of people having problems reading Roomba sensors from Arduinos.  Some of the closest matches were:</p>
<ul>
<li>&#8220;<a href="http://www.robotreviews.com/chat/viewtopic.php?f=4&amp;t=11269">Roomba SE Receiving Serial Data</a>&#8221; on the Robot Reviews forum<br />
A long thread, most of which is exploring a possible hardware inconsistency between the Roomba&#8217;s serial signal and Arduino&#8217;s serial port.  The original poster is also working with the RoombaBumpTurn code, it seems, but near the end of the thread it spontaneously starts working, with no changes having been made (huh?).</li>
<li>&#8220;<a href="http://www.robotreviews.com/chat/viewtopic.php?f=4&amp;t=10744&amp;start=20">SERIAL COMMUNICATION NOT WORKING!!!</a>&#8221; on Robot Reviews<br />
This one starts out with a similar problem description, but concludes that the Arduino Diecimila (the previous generation) works with the Roomba, while Duemilanove (the current) doesn&#8217;t.  I am certainly not a hardware guy, but from my understanding of the differences between these boards that doesn&#8217;t sound likely.</li>
<li>&#8220;<a href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1236713062/4">Software Serial</a>&#8221; on the Arduino Forum<br />
A relatively short thread, this starts out referencing the hardware issues speculated on in the first thread, and concludes with the original poster successfully getting sensor readings after switching the Arduino&lt;-&gt;Roomba serial connection to use a software serial driver rather than the Arduino hardware.</li>
</ul>
<p>I also encountered a few posters who noted that they&#8217;d had different amounts of success by changing the amount of time the code waits after sending the sensor read command to the Roomba and starting trying to read results.  The default in RoombaBumpTurn is 100ms, one person noted that 64ms seemed to work, and I found I&#8217;d get more readings (roughly) the lower I set the delay, but I&#8217;d also get more phantom readings (i.e. where the Arduino thought a bump sensor had been activated when none had).  In any case, regardless of the duration of the delay I never anything close to accurate, and never was able to consistently see 10 bytes of data coming back from the Roomba.</p>
<h2>Solved!</h2>
<p>The theme of inconsistent serial interfaces between the Roomba and the Arduino was too prevalent to ignore.  I was skeptical about it largely because, as I understood the hypothesis, it should have meant that no Roomba-controlling Arduino code connected via the built-in hardware serial interface would work, and there are a number of hints (including, primarily, the RoombaBumpTurn code) that it was working for some people.  After more or less running out of other things to try, however, I decided to give it a shot, and switched my hacked-up copy of RoombaBumpTurn around so that it expected the XBee to be connected to the hardware interface and used NewSoftSerial to connect to the Roomba SCI port.</p>
<h2><a href="http://farm4.static.flickr.com/3408/3610057752_efbcdc6c22.jpg?v=0"><img class="alignleft" style="margin: 10px;" title="Arduino, ready to control Roomba" src="http://farm4.static.flickr.com/3408/3610057752_efbcdc6c22.jpg?v=0" alt="" width="180" height="135" /></a></h2>
<p>And that did it.  Immediately, everything worked.</p>
<h2>In Conclusion</h2>
<p>I think the good folks in the <a href="http://www.robotreviews.com/chat/viewtopic.php?f=4&amp;t=11269">Robot Reviews forum</a> have nailed the issue, and that the current levels produced by the Roomba are too low to consistently register on the Arduino&#8217;s UART.  I can&#8217;t explain how that is consistent with the &#8220;now it works .. I don&#8217;t know what I changed&#8221; stories I found in a few places, or how anyone has consistently controlled Roombas from the Arduino&#8217;s hardware serial port.  In addition to using a software serial interface, user kg4wsv on the Arduino forum suggests a pair of back-to-back TTL signal inverters to buffer and bolster the current on the signal coming from the Arduino;  I haven&#8217;t tried that yet, but it could be a useful alternative if your program was going to use frequently talk over the SCI connection (as software serial is relatively expensive, computationally).</p>
<p>With all of this sorted out, my Roomba is now running the simple bump &amp; turn algorithm (I added a few pauses to make it easier to see exactly what sensor readings the code got).<br />
<object width="425" height="344" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/LNjn-CacSDA&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed width="425" height="344" type="application/x-shockwave-flash" src="http://www.youtube.com/v/LNjn-CacSDA&amp;hl=en&amp;fs=1&amp;" allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" /></object><!--more--></p>
]]></content:encoded>
			<wfw:commentRss>http://www.netfluvia.org/layer8/?feed=rss2&#038;p=127</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>the details are all that will matter decades from now</title>
		<link>http://www.netfluvia.org/layer8/?p=126</link>
		<comments>http://www.netfluvia.org/layer8/?p=126#comments</comments>
		<pubDate>Sat, 28 Feb 2009 20:52:17 +0000</pubDate>
		<dc:creator>jrh</dc:creator>
				<category><![CDATA[domesticity]]></category>
		<category><![CDATA[kids]]></category>

		<guid isPermaLink="false">http://www.netfluvia.org/layer8/?p=126</guid>
		<description><![CDATA[I was struck by a comment the lovely amyj made in a recent blog post: I remember when Ben used to say &#8220;Happy Day&#8221; instead of Happy Birthday. I don&#8217;t know when he stopped&#8230;you never know when they will stop doing those things&#8230;you always noticed the &#8220;firsts&#8221;, the &#8220;lasts&#8221; seem to slip by&#8230;. I wonder <a href='http://www.netfluvia.org/layer8/?p=126'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>I was struck by a comment <a href="http://www.flickr.com/photos/amyj/2184920696/">the lovely amyj</a> made in a <a href="http://amyj.typepad.com/amyj/2009/02/belated-birthday-post.html">recent blog post</a>:</p>
<blockquote><p>I remember when Ben used to say &#8220;Happy Day&#8221; instead of Happy Birthday. I don&#8217;t know when he stopped&#8230;you never know when they will stop doing those things&#8230;you always noticed the &#8220;firsts&#8221;, the &#8220;lasts&#8221; seem to slip by&#8230;. I wonder when the last time Nora will make her little snoring sound when she lays down to sleep or notices something sleeping or puts her babies or animals to sleep &#8230;</p></blockquote>
<p>Indeed.  For years I&#8217;ve intended to more systematically capture the countless precious moments, hilarious tidbits, etc. that our kids produce on a daily basis.  It occurred to me that <a href="http://posterous.com/">posterous.com</a>, which I&#8217;d briefly toyed with over the holidays but not really found a real use for, would be perfect for this.</p>
<p>And so I now intend to start recording those moments &#8212; the things the kids say that make me smile or laugh, the fun things we do, <em>et cetera</em>.  At the risk of  overwhelming cheesiness, John Lennon put it well:   &#8220;life is what happens to you while you&#8217;re busy making other plans&#8221;.</p>
<p><a href="http://jrheling.posterous.com/">Here</a> it is.  Honestly, it will probably bore you with its detail.  I&#8217;m the intended audience, I&#8217;m just keeping it public.  So follow along if you&#8217;d like.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netfluvia.org/layer8/?feed=rss2&#038;p=126</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>where I am on the tubes</title>
		<link>http://www.netfluvia.org/layer8/?p=125</link>
		<comments>http://www.netfluvia.org/layer8/?p=125#comments</comments>
		<pubDate>Sat, 28 Feb 2009 20:39:51 +0000</pubDate>
		<dc:creator>jrh</dc:creator>
				<category><![CDATA[miscellany]]></category>

		<guid isPermaLink="false">http://www.netfluvia.org/layer8/?p=125</guid>
		<description><![CDATA[I haven&#8217;t posted here in forever &#8211; lately I&#8217;ve spent all of my non-working online time with things a bit lighter-weight than blogging.  Places I have a presence include: my delicious stream (bookmarks) twitter google reader share linked.in facebook friendfeed last.fm boxee posterous (new, sort of blog-like, with very simple multi-media publishing) yelp If we <a href='http://www.netfluvia.org/layer8/?p=125'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>I haven&#8217;t posted here in forever &#8211; lately I&#8217;ve spent all of my non-working online time with things a bit lighter-weight than blogging.  Places I have a presence include:</p>
<ul>
<li>my <a href="http://delicious.com/netfluvia">delicious stream</a> (bookmarks)</li>
<li><a href="http://twitter.com/jrheling/">twitter</a></li>
<li><a href="http://www.google.com/reader/shared/14826503380912723867">google reader</a> share</li>
<li><a href="http://www.linkedin.com/in/joshheling">linked.in</a></li>
<li><a href="http://www.facebook.com">facebook</a></li>
<li><a href="http://friendfeed.com/jrheling">friendfeed</a></li>
<li><a href="http://www.last.fm/user/netfluvia">last.fm</a></li>
<li><a href="http://app.boxee.tv/go/netfluvia">boxee</a></li>
<li><a href="http://jrheling.posterous.com/">posterous</a> (new, sort of blog-like, with very simple multi-media publishing)</li>
<li><a href="http://jrheling.yelp.com/">yelp</a></li>
</ul>
<p>If we know each other and you&#8217;re on the above, send me a friend/link invite so we can connect there as well.</p>
<p>I&#8217;ll still occasionally post here (probably about as often as I have the past few years), though by far most of my day-to-day activity is in one of the above.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netfluvia.org/layer8/?feed=rss2&#038;p=125</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>twitter is down &#8230;</title>
		<link>http://www.netfluvia.org/layer8/?p=123</link>
		<comments>http://www.netfluvia.org/layer8/?p=123#comments</comments>
		<pubDate>Fri, 02 May 2008 02:21:25 +0000</pubDate>
		<dc:creator>jrh</dc:creator>
				<category><![CDATA[miscellany]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.netfluvia.org/layer8/?p=123</guid>
		<description><![CDATA[&#8230; and it makes me feel like I have laryngitis. I had a near miss at a failblog-worthy photo when I happened upon the following scene in an airport last week: The title of the book isn&#8217;t really visible in the hastily-taken cell phone camera shot, but it&#8217;s The Seven Habits of Highly Effective People.  <a href='http://www.netfluvia.org/layer8/?p=123'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>&#8230; and it makes me feel like I have laryngitis.</p>
<p>I had a near miss at a <a href="http://www.google.com/url?sa=t&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Ffailblog.wordpress.com%2F&amp;ei=TnoaSNutH5T8gQTCg6y4Dg&amp;usg=AFQjCNGryKB877bmiD0MKbNXIJP7Scu_Og&amp;sig2=MldIKj2EbhkK4ysBWgXoFg">failblog</a>-worthy photo when I happened upon the following scene in an airport last week:</p>
<p><a href="http://www.netfluvia.org/layer8/wp-content/uploads/2008/05/img00163.jpg" title="sevenhabitsfail.jpg"><img src="http://www.netfluvia.org/layer8/wp-content/uploads/2008/05/img00163.thumbnail.jpg" alt="sevenhabitsfail.jpg" /></a></p>
<p>The title of the book isn&#8217;t really visible in the hastily-taken cell phone camera shot, but it&#8217;s <a href="http://en.wikipedia.org/wiki/The_Seven_Habits_of_Highly_Effective_People" target="_blank">The Seven Habits of Highly Effective People</a>.  Seriously.</p>
<p><a href="http://twitter.com/home">Twitter</a> seems to be back now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netfluvia.org/layer8/?feed=rss2&#038;p=123</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>temperature sensing from arduino</title>
		<link>http://www.netfluvia.org/layer8/?p=122</link>
		<comments>http://www.netfluvia.org/layer8/?p=122#comments</comments>
		<pubDate>Thu, 27 Mar 2008 02:47:09 +0000</pubDate>
		<dc:creator>jrh</dc:creator>
				<category><![CDATA[arduino]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://www.netfluvia.org/layer8/?p=122</guid>
		<description><![CDATA[I&#8217;ve been playing with Arduino boards in my limited spare time over the past few months.  It&#8217;s a fun way to spend quality hands-on geek time that is clearly distinct (at least to me) from my day job.  Plus, I&#8217;m able to start actually instantiating some of the ubiquitious computing / distributed sensor ideas that <a href='http://www.netfluvia.org/layer8/?p=122'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been playing with <a href="http://www.arduino.cc">Arduino</a> boards in my limited spare time over the past few months.  It&#8217;s a fun way to spend quality hands-on geek time that is clearly distinct (at least to me) from my day job.  Plus, I&#8217;m able to start actually instantiating some of the ubiquitious computing / distributed sensor ideas that have been floating around in my head.</p>
<p>I&#8217;ve been working on a simple wireless light, temp, and motion sensor.  Light was a trivial <a href="http://en.wikipedia.org/wiki/Photoresistor">CDS photocell</a> connected to the analog port of the arduino.  My first attempt at temp is using the <a href="http://datasheets.maxim-ic.com/en/ds/DS18B20.pdf">Dallas Semiconductor DS-18B20</a> digital one-wire sensor, which is <a href="http://www.sparkfun.com/commerce/product_info.php?products_id=245">pretty slick for $4.25</a>.</p>
<p>There was some <a href="http://www.arduino.cc/playground/Learning/OneWire">good sample code</a> on the main arduino site, but I spent a small bit of time to flesh it out more completely, adding the ability to configure sensor resolution and extracting the temp value from the returned data.  Code is <a href="http://www.netfluvia.org/code/ds18B20_test.pde">here</a>, if this is interesting or useful to you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netfluvia.org/layer8/?feed=rss2&#038;p=122</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>mixed idiom</title>
		<link>http://www.netfluvia.org/layer8/?p=119</link>
		<comments>http://www.netfluvia.org/layer8/?p=119#comments</comments>
		<pubDate>Sat, 08 Sep 2007 03:26:51 +0000</pubDate>
		<dc:creator>jrh</dc:creator>
				<category><![CDATA[art]]></category>
		<category><![CDATA[business]]></category>

		<guid isPermaLink="false">http://www.netfluvia.org/layer8/?p=119</guid>
		<description><![CDATA[I was going through an old pile of paper in my office recently and encountered a set of note cards I&#8217;d accumulated years ago, back in the very small, scrappy, it-definitely-might-not-make-it startup stage. Most of the cards contained miscellaneous reminders, todos, or ideas I thought worthy of further exploration. A few of the cards, though, <a href='http://www.netfluvia.org/layer8/?p=119'>[...]</a>]]></description>
				<content:encoded><![CDATA[<p>I was going through an old pile of paper in my office recently and encountered a set of note cards I&#8217;d accumulated years ago, back in the very small, scrappy, it-definitely-might-not-make-it startup stage.  Most of the cards contained miscellaneous reminders, todos, or ideas I thought worthy of further exploration.</p>
<p>A few of the cards, though, had the record of an idiom mixing game my colleagues and I played back in the day (I&#8217;ve had the distinct pleasure of working with strongly multi-disciplinary and linguistically inclined geeks).</p>
<p>At its basic level, the game produced comprehensible phrases that amusingly combined two familiar idioms, such as <em>&#8220;there are other fish to skin&#8221;</em>, or <em>&#8220;there are other cats in the sea&#8221;</em>.</p>
<p>These are good for a chuckle, but not fundamentally anything more than language slapstick.  Some combined idioms of similar intent in ways that made more vibrant images than did the originals, such as</p>
<blockquote><p><em>&#8220;that opens up a whole new can of monkeys&#8221;</em></p></blockquote>
<p>(A &#8220;can of worms&#8221; is one thing, but monkeys make everything funnier.)  Rather than just &#8220;getting ducks in a row&#8221; or having things &#8220;fall in line&#8221;, we had</p>
<blockquote><p><em>&#8220;all the ducks are falling in line&#8221;</em></p></blockquote>
<p>Other are amusing but confusing, and almost seem as if they mean something, at least until you actually think about them.  Example:</p>
<blockquote><p><em>&#8220;Happier than a clam in pigsh*t&#8221;</em></p></blockquote>
<p>The pinnacle of our mixed idiom game, though, were those hard to find combinations whose meanings were a novel blend of the original idioms.  Most of these tended to mockingly riff on various elements of commonly accepted corporate-speak.</p>
<blockquote><p><em>&#8220;I&#8217;m just putting them on the table as I see them&#8221;</em></p></blockquote>
<p>for example, takes the casual (if sometimes cowardly) innocence of the defensive verbal communication standby &#8220;I&#8217;m just calling them as I see them&#8221; with the trite business-ese of &#8220;putting something on the table&#8221; to create an all-new description of an impetuous laziness thrust upon others.</p>
<p>Better still, in my opinion, is the lighthearted cynical foreshadowing of:</p>
<blockquote><p><em>&#8220;We&#8217;ll burn that bridge when we come to it&#8221;</em></p></blockquote>
<p>But my favorite, by far, is a sadly apt commentary on organizational politics gone awry:</p>
<blockquote><p><em> &#8220;I dropped the ball in your court&#8221;</em></p></blockquote>
<p>Have more?  Oh yes you do &#8230; comment away!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netfluvia.org/layer8/?feed=rss2&#038;p=119</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
