<?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>MrBalky Heavy Industries</title>
	<atom:link href="http://www.mrbalky.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mrbalky.com</link>
	<description>Fat free with endorphins, anti-oxidants, bioflavonoids, creatine, glucosamine and caffeine!</description>
	<lastBuildDate>Wed, 09 Jan 2013 00:41:43 +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>Weather station code now on github</title>
		<link>http://www.mrbalky.com/2013/01/08/weather-station-code-now-on-github/</link>
		<comments>http://www.mrbalky.com/2013/01/08/weather-station-code-now-on-github/#comments</comments>
		<pubDate>Wed, 09 Jan 2013 00:41:43 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[experiments]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[te923]]></category>
		<category><![CDATA[weather]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=644</guid>
		<description><![CDATA[We&#8217;re switching from Subversion to Git at work, and I decided to use the te923 code as an exercise to get started with Git. Souce code is at https://github.com/mrbalky/te923.]]></description>
				<content:encoded><![CDATA[<p>We&#8217;re switching from Subversion to Git at work, and I decided to use the te923 code as an exercise to get started with Git.</p>
<p>Souce code is at <a href="https://github.com/mrbalky/te923">https://github.com/mrbalky/te923</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2013/01/08/weather-station-code-now-on-github/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hive tables, partitions and LZO compression</title>
		<link>http://www.mrbalky.com/2011/02/24/hive-tables-partitions-and-lzo-compression/</link>
		<comments>http://www.mrbalky.com/2011/02/24/hive-tables-partitions-and-lzo-compression/#comments</comments>
		<pubDate>Thu, 24 Feb 2011 11:55:41 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[hadoop]]></category>
		<category><![CDATA[hive]]></category>
		<category><![CDATA[lijit]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=587</guid>
		<description><![CDATA[At Lijit we&#8217;ve been working with lots of the projects in the Hadoop ecosystem. Â In particular, we&#8217;re using Hive quite a bit, since it abstracts map/reduce into a familiar SQL-like language. We deal with fairly large amounts of webserver log data, so are also saving HDFS space and job i/o by using the hadoop-lzo package. [...]]]></description>
				<content:encoded><![CDATA[<p>At <a href="http://www.lijit.com">Lijit</a> we&#8217;ve been working with lots of the projects in the <a href="http://hadoop.apache.org/">Hadoop</a> ecosystem. Â In particular, we&#8217;re using <a href="http://hive.apache.org/">Hive</a> quite a bit, since it abstracts map/reduce into a familiar SQL-like language.</p>
<p>We deal with fairly large amounts of webserver log data, so are also saving HDFS space and job i/o by using the <a href="https://github.com/kevinweil/hadoop-lzo">hadoop-lzo</a> package.  It gives fast compression that retains our ability to use the data through Hive queries.</p>
<p>If you are only interested in compression, and have Hadoop and Hive configured appropriately, you can even mix compressed and uncompressed data in separate partitions of a Hive table. Â A normal table definition will work:</p>
<pre><code>CREATE EXTERNAL TABLE foo (
                       columnA string,
                       columnB string )
       PARTITIONED BY (date string)
       ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
       LOCATION '/path/to/hive/tables/foo';</code></pre>
<p>One big advantage of LZO, though, is its ability to be split in map/reduce jobs.  This is done by creating an index of the LZO file with the LzoIndexer tool of the hadoop-lzo project. To actually use the index, you will need to use a special input format for your Hive table:</p>
<pre><code>CREATE EXTERNAL TABLE foo (
         columnA string,
         columnB string )
    PARTITIONED BY (date string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
    STORED AS INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
          OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"
    LOCATION '/path/to/hive/tables/foo';</code></pre>
<p>Now to actually come to the point.  In my case, I had already created the table, and was trying to add indexing after the fact.  Hive permits changing input format with an alter statement:</p>
<pre><code>ALTER TABLE foo
    SET FILEFORMAT
        INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
        OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat";</code></pre>
<p>But this alters only future partitions, not existing partitions.  They retain their TextInputFormat.  So now when I ran my Hive queries, instead of the LZO index file being used for splitting the input, it wound wind up used as table data.  My results were mostly correct, but there were some result rows that were garbage.</p>
<p>I fixed this by dropping and recreating the table and partitions with the correct input format.  Because I use EXTERNAL tables, the data itself was preserved.</p>
<p>While this is not a big deal, I have lost the ability to mix compressed and uncompressed data in the table.  The Hive language manual claims I can alter partition metadata, which would be another way to deal with this, but so far I&#8217;ve not been able to make that work in versions 0.5 and 0.6.</p>
<p>Thanks to Dmitriy and Johan from Twitter for helping me understand all this.</p>
<p>hadoop-lzo:<br />
<a href="https://github.com/kevinweil/hadoop-lzo"></p>
<p>https://github.com/kevinweil/hadoop-lzo</a></p>
<p>The original hadoop-gpl-compression project:<br />
<a href="http://code.google.com/a/apache-extras.org/p/hadoop-gpl-compression/wiki/FAQ?redir=1">http://code.google.com/a/apache-extras.org/p/hadoop-gpl-compression/wiki/FAQ?redir=1</a></p>
<p>Hive language manual:<br />
<a href="http://wiki.apache.org/hadoop/Hive/LanguageManual/DDL"></p>
<p>http://wiki.apache.org/hadoop/Hive/LanguageManual/DDL</a></p>
<p>Discussion of Hive and table attributes:<br />
<a href="https://issues.apache.org/jira/browse/HIVE-957">https://issues.apache.org/jira/browse/HIVE-957</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2011/02/24/hive-tables-partitions-and-lzo-compression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dvdstyler on debian</title>
		<link>http://www.mrbalky.com/2010/12/12/dvdstyler-on-debian/</link>
		<comments>http://www.mrbalky.com/2010/12/12/dvdstyler-on-debian/#comments</comments>
		<pubDate>Mon, 13 Dec 2010 01:09:33 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[misc]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=578</guid>
		<description><![CDATA[Maybe this is obvious, but it took me more effort than I thought to get dvdstyler working on my debian machine. So here&#8217;s the quick-n-dirty(tm) recipe. It is easily installable via apt-get from debian-multimedia.org after all. Don&#8217;t bother with the package advice on the dvdstyler site. Just add deb http://www.debian-multimedia.org lenny main to your /etc/apt/sources.list [...]]]></description>
				<content:encoded><![CDATA[<p>Maybe this is obvious, but it took me more effort than I thought to get dvdstyler working on my debian machine.  So here&#8217;s the quick-n-dirty(tm) recipe.</p>
<p>It is easily installable via apt-get from debian-multimedia.org after all.  Don&#8217;t bother with the package advice on the dvdstyler site.  Just add <span style="font-family: courier;">deb http://www.debian-multimedia.org lenny main</span> to your <span style="font-family: courier;">/etc/apt/sources.list</span> file and run <span style="font-family: courier;">apt-get update</span>.  You should then be able to install with a simple <span style="font-family: courier;">apt-get install dvdstyler</span></p>
<p>If you run a headless debian server as I do, vncserver works like a champ.<br />
<strong>Install</strong>: <span style="font-family: courier;">apt-get install vnc4server</span>.<br />
<strong>Execute</strong>: <span style="font-family: courier;">vnc4server -geometry 1024&#215;768 -depth 24</span>.<br />
<strong>Export your display</strong>: <span style="font-family: courier;">export DISPLAY=myserver:1</span>.<br />
<strong>Run</strong>: <span style="font-family: courier;">dvdstyler</span>.<br />
Connect a VNC client to myserver:5901 to drive dvdstyler.</p>
<p>See the man pages for vnc4server for more info about the display number and connecting a client.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2010/12/12/dvdstyler-on-debian/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Weather station &#8211; one last thing</title>
		<link>http://www.mrbalky.com/2010/05/09/weather-station-one-last-thing/</link>
		<comments>http://www.mrbalky.com/2010/05/09/weather-station-one-last-thing/#comments</comments>
		<pubDate>Sun, 09 May 2010 22:04:06 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[experiments]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[te923]]></category>
		<category><![CDATA[weather]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=538</guid>
		<description><![CDATA[It is also possible to read version and status information from the weather station, and the te923con application gives access to this data as well. It is formatted the same way as the weather data, and so was also trivial to process in PHP. I wrote a script that gets the station and sensor status, [...]]]></description>
				<content:encoded><![CDATA[<p>It is also possible to read version and status information from the weather station, and the <em>te923con</em> application gives access to this data as well.  It is formatted the same way as the weather data, and so was also trivial to process in PHP.  I wrote a script that gets the station and sensor status, and sends a notification email if one of the sensors has a low battery.  That script is also included in the <a href="/wp-content/uploads/te923.zip">te923 zip file</a>.  Again, I know my PHP skills are weak, so if you have improvements I&#8217;d be interested in them.</p>
<p>I scheduled it to run once a day at midnight:</p>
<pre><code>0 0 * * * sleep 30;php te923Status.php &lt;notify email address&gt;</code></pre>
<p>The 30 second sleep is intended to offset the status check from the normal weather data check that happens exactly on the minute.</p>
<p>Debian out of the box doesn&#8217;t relay mail to external domains, so I had to do another tweak here.  To enable forwarding, I reconfigured exim according to <a href="http://pkg-exim4.alioth.debian.org/README/README.Debian.etch.html ">http://pkg-exim4.alioth.debian.org/README/README.Debian.etch.html</a>.</p>
<p>It&#8217;s not really the proper way to create a real relay server, but since I&#8217;m behind a firewall and only using the server for this purpose, I didn&#8217;t feel it necessary to do more.  But the email does look suspicious to the receiving mail system, so if you send to an address outside your domain (like gmail, for example), the mail is likely to be determined as spam.  You&#8217;ll need to create whatever filters necessary at the recipient account to avoid this.</p>
<p>And that&#8217;s it so far.  I expect I&#8217;ll delve into <a href="http://oss.oetiker.ch/rrdtool/">RRDTool</a> and <a href="http://code.google.com/p/rrdweather/">RRDWeather</a> now to see if I can create graphs of readings Weather Underground does not (like humidity, for example).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2010/05/09/weather-station-one-last-thing/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Weather Station &#8211; fixing the bugs</title>
		<link>http://www.mrbalky.com/2010/05/09/weather-station-fixing-the-bugs/</link>
		<comments>http://www.mrbalky.com/2010/05/09/weather-station-fixing-the-bugs/#comments</comments>
		<pubDate>Sun, 09 May 2010 22:00:35 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[experiments]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[te923]]></category>
		<category><![CDATA[weather]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=479</guid>
		<description><![CDATA[The first thing I discovered is that the te923con application has a bug in decoding UV index data from the station. The index jumps from .9 to 10.0. A simple patch to te923_com.h is required. This diff output actually is a change to a single line that I split up for clarity here: @@ -138,7 [...]]]></description>
				<content:encoded><![CDATA[<p>The first thing I discovered is that the te923con application has a bug in decoding UV index data from the station.  The index jumps from .9 to 10.0.  A simple patch to te923_com.h is required.  This diff output actually is a change to a single line that I split up for clarity here:</p>
<pre><code>@@ -138,7 +138,7 @@
     }
 
     else {
-        data-&gt;uv = bcd2int( buf[18] &amp; 0x0F ) / 10.0 + 
               bcd2int( buf[18] &amp; 0xF0 ) + 
               bcd2int( buf[19] &amp; 0x0F ) * 10.0;
+        data-&gt;uv = bcd2int( buf[18] &amp; 0x0F ) / 10.0 + 
               bcd2int( ( buf[18] &amp; 0xF0 ) &gt;&gt; 4 ) + 
               bcd2int( buf[19] &amp; 0x0F ) * 10.0;
         data-&gt;_uv = 0;
     }</code></pre>
<p>The next thing to address is the permissions problem.  To this point, the only way to get data from the station was to be root.  Otherwise, you get this error:</p>
<pre><code>[mcp:…/te923/te923] te923con -D
Error while setting configuration (-1).</code></pre>
<p>This is a generic issue with USB devices, and I found an item on a wiki (<a href="http://wiki.openstreetmap.org/wiki/USB_Garmin_on_GNU/Linux#Fixing_Device_Permissions">http://wiki.openstreetmap.org/wiki/USB_Garmin_on_GNU/Linux#Fixing_Device_Permissions</a>) about GPS units that got me going.</p>
<p>That page discusses how to set the group ownership on the device, as well as the permissions on the device.  Long story short, I created the device rule set <em>/etc/udev/rules.d/99-te923.rules</em> (all on one line):</p>
<pre><code>ATTRS{idVendor}=="1130", ATTRS{idProduct}=="6801",
                    MODE="0660", GROUP="plugdev"</code></pre>
<p><em>idVendor</em> and <em>idProduct</em> identify the TE923 weather station, <em>mode</em> tells the USB driver to give read/write permissions to the user and group that owns the device, and <em>group</em> tells the driver to assign group ownership to &#8220;plugdev&#8221;.  My user on the machine is a member of that group so I should be OK.</p>
<p>Ask the system to reload the USB rulesets:</p>
<pre><code>[mcp:.../te923/te923] sudo udevadm control --reload_rules</code></pre>
<p>And now I can get valid data back from the unit without being root:</p>
<pre><code>[mcp:.../cwanek/cronjobs] te923con
1273414489::::59:::::::::1003.1:5.0:3:0:9:0.4:0.0:11.7:215</code></pre>
<p>Unfortunately, though, some readings (specifically current temp readings) are empty.  Even wide-open permissions on the device don&#8217;t help.  This doesn&#8217;t make sense to me, and I have not yet solved this issue, so I&#8217;m still stuck with being root to run <em>te923con</em>.  I&#8217;d love to know why it would work only partially.</p>
<p>Still, I don&#8217;t really want to have root&#8217;s crontab running the script, so I configured sudo to skip the password prompt for the group <em>plugdev</em> for the te928con application.  With <em>visudo</em>, add:</p>
<pre><code>%plugdev ALL=NOPASSWD: /usr/local/bin/te923con</code></pre>
<p>Moving on, the I was still not able to run <em>te923con</em> without removing the USB human interface device module (<em>sudo rmmod usbhid</em>).  While removing it allows access to the te923 station, it would also cause any other HID like a mouse or keyboard to stop functioning.  So the trick is to get the <em>usbhid</em> module to release just the weather station.</p>
<p>There are many sites that document how to get usbhid to unbind a device.  I found <a href="http://lwn.net/Articles/143397/">http://lwn.net/Articles/143397/</a>, which gave me the following command:</p>
<pre><code>sudo bash -c "echo -n 2-1:1.0 &gt; /sys/bus/usb/drivers/usbhid/unbind"</code></pre>
<p><em>bash -c</em> is required so the shell redirection to <em>unbind</em> will succeed.</p>
<p>Digging deeper, I learned (<a href="http://reactivated.net/writing_udev_rules.html">http://reactivated.net/writing_udev_rules.html</a>) that you can configure the unbind to happen immediately after the device is connected, by using the &#8220;RUN=&#8221; option in the device rules file (this is all on one line in <em>/etc/udev/rules.d/99-te923.rules</em>):</p>
<pre><code>ATTRS{idVendor}=="1130", ATTRS{idProduct}=="6801",
    MODE="0660", GROUP="plugdev", 
    RUN="/bin/sh -c 'echo -n $id:1.0 &gt; /sys/bus/usb/drivers/usbhid/unbind'"</code></pre>
<p>So now, apart from the missing data when running as a non-privileged user, the te923 weather station is coexisting with other USB devices, and I am able to schedule the upload script in my own user crontab.</p>
<p>There&#8217;s <a href="http://www.mrbalky.com/2010/05/09/weather-station-one-last-thing/">one last thing</a>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2010/05/09/weather-station-fixing-the-bugs/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Getting the weather station online</title>
		<link>http://www.mrbalky.com/2010/05/09/getting-the-weather-station-online/</link>
		<comments>http://www.mrbalky.com/2010/05/09/getting-the-weather-station-online/#comments</comments>
		<pubDate>Sun, 09 May 2010 21:55:49 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[experiments]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[te923]]></category>
		<category><![CDATA[weather]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=505</guid>
		<description><![CDATA[Weather Underground has a very simple data upload protocol published on their site at http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol. Because running child processes and fetching web pages is easy in PHP, I chose it for coding the application to read, parse and upload the weather data. (All of the code I wrote for this can be downloaded in a [...]]]></description>
				<content:encoded><![CDATA[<p>Weather Underground has a very simple data upload protocol published on their site at <a href="http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol">http://wiki.wunderground.com/index.php/PWS_-_Upload_Protocol</a>.  Because running child processes and fetching web pages is easy in PHP, I chose it for coding the application to read, parse and upload the weather data.  (All of the code I wrote for this can be <a href="/wp-content/uploads/te923.zip">downloaded in a zip file</a>.)</p>
<p>Sure, there are packages like <a href="http://code.google.com/p/rrdweather/">RRD Weather</a> that can do this too, but where&#8217;s the fun in that.</p>
<p>The <em>te923con</em> application returns most of the data included in the wunderground protocol directly, so it&#8217;s a simple matter of parsing it from the application output.  Weather Underground wants imperial units, but maybe someday I&#8217;ll want proper metric units, so I made it a parse option.</p>
<p>The weather station apparently does not return a calculated dew point, which is part of the upload protocol.  It turns out that calculating dew point is not straighforward.  But many people have implemented calculators.  A guy named <a href="http://www.decatur.de/">Wolfgang Kühn</a> <a href="http://www.decatur.de/javascript/dew/index.html">implemented one in javascript</a> that seemed very thorough, so I did a quick port of it to PHP.</p>
<p>The weather station also returns only the accumulated rainfall total since the station was started, so I implemented a simple array mechanism to retain historical data from the rain counter.  I can then calculate the &#8220;rain in last hour&#8221; and &#8220;rain since midnight&#8221; values required by the WUnderground protocol.</p>
<p>From there, it&#8217;s a simple matter to build the URL string for data upload, and a <em>file_get_contents</em> call to upload and get the success or failure result.</p>
<p>I save the rain counters and the other weather data as PHP code in a cache file that is reloaded with a PHP include the next time the script runs.</p>
<p>WUnderground can accept data as fast as once a second, but the weather station does not update from its sensors with anywhere near that frequency, so I felt scheduling upload once a minute via cron was more than often enough.  The script takes station id, password and cache file name on the command line (all on one line):</p>
<pre><code>* * * * * php te923WunderUpload.php &lt;station ID&gt; 
                       &lt;wunderground password&gt; &lt;cache file name&gt;</code></pre>
<p>Because of the permissions issues with the USB device, for now this is scheduled in the root user&#8217;s crontab.</p>
<p>Now on to <a href="http://www.mrbalky.com/2010/05/09/weather-station-fixing-the-bugs/">fixing the bugs</a>&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2010/05/09/getting-the-weather-station-online/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Weather station &#8211; my new toy</title>
		<link>http://www.mrbalky.com/2010/05/09/weather-station-tinkering/</link>
		<comments>http://www.mrbalky.com/2010/05/09/weather-station-tinkering/#comments</comments>
		<pubDate>Sun, 09 May 2010 21:53:00 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[experiments]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[te923]]></category>
		<category><![CDATA[weather]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=477</guid>
		<description><![CDATA[For some reason I can&#8217;t explain, I&#8217;ve wanted a weather station for years. A piece in Wired last month pushed me over the edge and I picked up the Honeywell TE923W. It&#8217;s relatively cheap, and while not as good as a Davis, accurate enough for me. The problem with this station, though, is that it&#8217;s [...]]]></description>
				<content:encoded><![CDATA[<p>For some reason I can&#8217;t explain, I&#8217;ve wanted a weather station for years.  A piece in <a href="http://www.wired.com/">Wired</a>  last month pushed me over the edge and I picked up the <a href="http://honeywellweatherstations.com/TE923W.html">Honeywell TE923W</a>.  It&#8217;s relatively cheap, and while not as good as a <a href="http://www.davisnet.com/weather/products/weather_product.asp?pnum=06152">Davis</a>, accurate enough for me.</p>
<p><a href="http://www.mrbalky.com/wp-content/uploads/te923w003-1.gif"><img src="http://www.mrbalky.com/wp-content/uploads/te923w003-1.gif" alt="" title="te923w003 - 1" width="382" height="278" class="alignnone size-full wp-image-500" /></a></p>
<p>The problem with this station, though, is that it&#8217;s a USB station, and Linux is not supported by the software that ships with it.  But I figured I could find a way around that, and indeed I could, but it wasn&#8217;t so straightforward.  Along the way I learned some arcane details about USB on Debian Linux.  This series of posts is something of a blow-by-blow of the process.</p>
<p>The hardest part was already done for me by <a href="http://www.fukz.de/">Sebastian John</a> who created an application that reads the current raw data from the station.  The source is available at <a href="http://te923.fukz.org/index">http://te923.fukz.org/index</a>.  Building the source requires libusb, and the site links to it, but I was able to build with the vanilla libusb-dev installed by apt-get:</p>
<pre><code>apt-get install libusb-dev</code></pre>
<p>The build creates the executable <em>te923con</em>, which I then installed in <em>/usr/local/bin</em>.</p>
<p>The first time I tried to run it, I got the following error message:</p>
<pre><code>[mcp:…/te923/te923] te923con -D
Error while setting configuration (-1).</code></pre>
<p>This indicates insufficient privileges to access the USB device, so to get things going I ran the te923con application as root.  That got me to the next error:</p>
<pre><code>[mcp:.../te923/te923] sudo ./te923con -D
Error while setting configuration (-16).</code></pre>
<p>The dmesg shows the following error (all on one line):</p>
<pre><code>[24464516.452385] usb 2-1: usbfs: interface 0 claimed 
                    by usbhid while 'te923con' sets config #1</code></pre>
<p>It seems that the TE923 registers itself as a human interface device (HID) for some reason, so the OS tries to treat it a such.  The author of a package of code that creates a web view for the TE923 has the solution on his blog, though without explanation of the problem or why: <a href="http://firewall.haringstad.com/TE923-Frontend/blog/TE923-Frontend-Info/TE923-Frontend%20Blog/B9EF42CC-F942-41DE-ABDF-461549FEFB46.html">http://firewall.haringstad.com/TE923-Frontend/blog/TE923-Frontend-Info/TE923-Frontend%20Blog/B9EF42CC-F942-41DE-ABDF-461549FEFB46.html</a></p>
<p>He removes the usbhid kernel module:</p>
<pre><code>sudo rmmod usbhid</code></pre>
<p>And success:</p>
<pre><code>[mcp:.../te923/te923] sudo ./te923con -D
[DEBUG] got |07|00|0a|0a|00|0a|0a|00|
[DEBUG] got |07|0a|0a|00|0a|30|00|af|
[DEBUG] got |07|3d|03|57|c0|28|00|35|
[DEBUG] got |05|00|0a|b2|00|66|00|35|
[DEBUG] got |01|5a|0a|b2|00|66|00|35|
[DEBUG] got |02|28|82|b2|00|66|00|35|
[DEBUG] got |07|37|64|c0|96|0a|00|0a|
[DEBUG] got |07|0a|00|0a|0a|00|0a|0a|
[DEBUG] got |07|00|0a|30|00|af|3d|03|
[DEBUG] got |07|57|c0|28|00|35|00|0a|
[DEBUG] got |03|b2|00|66|00|35|00|0a|
[DEBUG] TMP 0 BUF[00]=28 BUF[01]=82 BUF[02]=37
[DEBUG] TMP 1 BUF[03]=64 BUF[04]=c0 BUF[05]=96
[DEBUG] TMP 2 BUF[06]=0a BUF[07]=00 BUF[08]=0a
[DEBUG] TMP 3 BUF[09]=0a BUF[10]=00 BUF[11]=0a
[DEBUG] TMP 4 BUF[12]=0a BUF[13]=00 BUF[14]=0a
[DEBUG] TMP 5 BUF[15]=0a BUF[16]=00 BUF[17]=0a
[DEBUG] UVX   BUF[18]=30 BUF[19]=00
[DEBUG] PRESS BUF[20]=af BUF[21]=3d
[DEBUG] STAT  BUF[22]=03
[DEBUG] WCHIL BUF[23]=57 BUF[24]=c0
[DEBUG] WGUST BUF[25]=28 BUF[26]=00
[DEBUG] WSPEE BUF[27]=35 BUF[28]=00
[DEBUG] WDIR  BUF[29]=0a
[DEBUG] RAINC BUF[29]=00 BUF[30]=b2 BUF[31]=00
1272059734:22.80:37:6.40:96:::::::::986.9:3.0:3:0:10:1.6:1.3:5.7:178</code></pre>
<p>Hooray!  There are still a few problems to work out with the device interface, and there is a bug in the te923con application to fix, but now I have a working interface to my weather station.  Next up, <a href="http://www.mrbalky.com/2010/05/09/getting-the-weather-station-online/">getting the weather data</a> onto <a href="http://www.wunderground.com/">Weather Underground</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2010/05/09/weather-station-tinkering/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Springtime for Colorado</title>
		<link>http://www.mrbalky.com/2010/03/19/springtime-for-colorado/</link>
		<comments>http://www.mrbalky.com/2010/03/19/springtime-for-colorado/#comments</comments>
		<pubDate>Fri, 19 Mar 2010 16:16:32 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[bike]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=472</guid>
		<description><![CDATA[Thursday Afternoon: Friday morning: first tracks:]]></description>
				<content:encoded><![CDATA[<p><center><br />
<strong>Thursday Afternoon:</strong><br />
<a href="http://www.mrbalky.com/wp-content/uploads/IMG_3599.jpg"><img src="http://www.mrbalky.com/wp-content/uploads/IMG_3599-225x300.jpg" alt="" title="IMG_3599" width="225" height="300" class="alignnone size-medium wp-image-469" /></a></p>
<p><strong>Friday morning:</strong><br />
<a href="http://www.mrbalky.com/wp-content/uploads/IMG_3603.jpg"><img src="http://www.mrbalky.com/wp-content/uploads/IMG_3603-300x225.jpg" alt="" title="IMG_3603" width="300" height="225" class="alignnone size-medium wp-image-470" /></a></p>
<p><strong>first tracks:</strong><br />
<a href="http://www.mrbalky.com/wp-content/uploads/IMG_3604.jpg"><img src="http://www.mrbalky.com/wp-content/uploads/IMG_3604-225x300.jpg" alt="" title="IMG_3604" width="225" height="300" class="alignnone size-medium wp-image-471" /></a><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2010/03/19/springtime-for-colorado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Access -&gt; MySQL</title>
		<link>http://www.mrbalky.com/2009/10/23/access-mysql/</link>
		<comments>http://www.mrbalky.com/2009/10/23/access-mysql/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 19:54:09 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[experiments]]></category>
		<category><![CDATA[hacks]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=460</guid>
		<description><![CDATA[Long, long ago I hacked together a Java app that imports the freedb CD info files from my local drive to an MS Access database. The CD ripper application I use creates a local freedb with a file for each CD I rip (all of them). So importing from that freedb to a database seemed [...]]]></description>
				<content:encoded><![CDATA[<p>Long, long ago I hacked together a Java app that imports the <a href="http://www.freedb.org/">freedb</a> CD info files from my local drive to an <a href="http://en.wikipedia.org/wiki/Microsoft_Access">MS Access</a> database.  The CD ripper application I use creates a local freedb with a file for each CD I rip (all of them).  So importing from that freedb to a database seemed a natural thing to do.</p>
<p>Access was all that I had access (heh) to, and it had a &#8220;music collection&#8221; database template, so with slight modification to the template that&#8217;s what I used.</p>
<p>Well now, I no longer have access (heh) to Access, Access is a <a href="http://www.urbandictionary.com/define.php?term=PITA">PITA</a>, and I already have <a href="http://www.mysql.com/">MySQL</a> available on my home server, so I figured it was time to finally migrate.</p>
<p>I found a handy application called <a href="http://www.navicat.com/">Navicat</a> (fully functional trial), that will import directly from the Access .MDB file to a MySQL database.</p>
<p>While Navicat mostly worked, I was not quite done.  The import did not properly get the auto_increment attribute on the tables&#8217; &#8216;id&#8217; column.  Also, the Access database tables had spaces in their names which is kind of a drag.  Fortunately both were easily solved by exporting from MySQL to text using mysqldump, editing the .sql file that resulted, and then reimporting to MySQL from the .sql file.</p>
<p>Sure it&#8217;s a ridiculous thing nobody in their right mind will ever have to do, but I&#8217;m not in my right mind.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2009/10/23/access-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crosier Mountain</title>
		<link>http://www.mrbalky.com/2009/10/17/crosier-mountain/</link>
		<comments>http://www.mrbalky.com/2009/10/17/crosier-mountain/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 11:45:03 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[bike]]></category>
		<category><![CDATA[mtb]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=439</guid>
		<description><![CDATA[It&#8217;s a long way away, but we finally got up there to do this loop. Starting with about 5.5 miles climbing on the road, you then get another 5 miles or so of singletrack climb. This singletrack is minimally technical; just a good steady climb. Once at the top, there are some beautiful views back [...]]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s a long way away, but we finally got up there to do this loop.  Starting with about 5.5 miles climbing on the road, you then get another 5 miles or so of singletrack climb.  This singletrack is minimally technical; just a good steady climb.</p>
<p>Once at the top, there are some beautiful views back into Rocky Mountain National Park from the top.  A spur of trail (that we didn&#8217;t take) gets you to the true summit of Crosier.</p>
<p>Then it&#8217;s 4.5 miles of descent, some of it pretty sketchy and loose, but still pretty fun.</p>
<p>I&#8217;d do it again:</p>
<p><a href="http://www.flickr.com/photos/mrbalkytoo/sets/72157622513236414/">Flickr set</a>:<br />
<object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157622513236414%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157622513236414%2F&#038;set_id=72157622513236414&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157622513236414%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157622513236414%2F&#038;set_id=72157622513236414&#038;jump_to=" width="400" height="300"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2009/10/17/crosier-mountain/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O Canada</title>
		<link>http://www.mrbalky.com/2009/10/05/o-canada/</link>
		<comments>http://www.mrbalky.com/2009/10/05/o-canada/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 20:55:25 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[bike]]></category>
		<category><![CDATA[mtb]]></category>
		<category><![CDATA[travel]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=415</guid>
		<description><![CDATA[In February, after my 3rd knee surgery since 2005, I had no plans or expectations for my riding this summer. And when all my friends made the commitment to a Whistler, BC trip in April, I just figured I was out. But as the summer got going, I was feeling pretty good, and riding pretty [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.mrbalky.com/wp-content/uploads/ca-lgflag.gif"><img src="http://www.mrbalky.com/wp-content/uploads/ca-lgflag-300x151.gif" alt="ca-lgflag" title="ca-lgflag" width="300" height="151" class="alignnone size-medium wp-image-423" /></a></p>
<p>In February, after my 3rd knee surgery since 2005, I had no plans or expectations for my riding this summer.  And when all my friends made the commitment to a Whistler, BC trip in April, I just figured I was out.  But as the summer got going, I was feeling pretty good, and riding pretty clean, and got the big encouragement from Steph, so I was in after all.</p>
<p>Scheduling difficulties meant that I would only get 3 days there instead of the 5 my friends would, but nevertheless, I was in.</p>
<p>We flew into Seattle, and rented a couple of cars there.  Flights to Vancouver were 2 or more times the price.  It means twice the driving, and add a <a href="http://www.cbp.gov/xp/cgov/toolbox/contacts/ports/wa/3004.xml">border crossing</a>, but we figured it was worth it to save a couple hundred each for 7 people.</p>
<p>The <a href="http://www.whistlerbike.com/index.htm">Whistler Bike Park</a> is incredibly well managed, and loaded with great riding.  There are ride-arounds for most of the big and committing features.  I spent 2 days there, and 1 day riding Vancouver&#8217;s North Shore.</p>
<p>It was incredible riding.  There&#8217;s a reason half the photos in bike magazines are from BC.  I thought maybe this was a once in a lifetime trip, but now I sure hope it isn&#8217;t.</p>
<p>The bike park was amazing fun, but next time I want more North Shore.  The incredible amount of work done there to build trails and mind-blowing stunts was astounding.</p>
<p>Friends of Tom from SoCal were there at the same time we were, and very very kindly showed us around the bike park, and especially the North Shore.  They were very patient with our (meaning my) slow pace.</p>
<p>Lessons learned:</p>
<p>Park bikes are very heavy and don&#8217;t really pedal at all.  They&#8217;re kind of inappropriate for my riding style on North Shore rides.<br />
<a href="http://www.mrbalky.com/wp-content/uploads/FlatlinePark-MD.jpg"><img src="http://www.mrbalky.com/wp-content/uploads/FlatlinePark-MD.jpg" alt="FlatlinePark-MD" title="FlatlinePark-MD" width="472" height="296" class="alignnone size-full wp-image-418" /></a><br />
So for me, park bike for park days, trail or all-mountain bike for the other stuff. </p>
<p>We had a condo, but the days were long and tiring, so we ate out all the time.  Restaurants in Whistler are breathtakingly expensive.  We could have hired a chef to cook for us in the condo and still come out ahead.<br />
<a href="http://www.mrbalky.com/wp-content/uploads/ADIP170602_T.jpg"><img src="http://www.mrbalky.com/wp-content/uploads/ADIP170602_T.jpg" alt="ADIP170602_T" title="ADIP170602_T" width="256" height="169" class="alignnone size-full wp-image-425" /></a></p>
<p>There&#8217;s no good beer there.  And it&#8217;s expensive.  Buy in Bellingham, WA on your way in.  (In fairness, we did receive this tip from others, but were too preoccupied with getting there.)<br />
<a href="http://www.mrbalky.com/wp-content/uploads/14-ImageResource.gif"><img src="http://www.mrbalky.com/wp-content/uploads/14-ImageResource-231x300.gif" alt="14-ImageResource" title="14-ImageResource" width="231" height="300" class="alignnone size-medium wp-image-426" /></a></p>
<p>Body armor and full-face helmets get pretty sweaty and stinky.  Since it&#8217;s somebody else&#8217;s stink, rented armor and rented full-face helmets are even worse.  At least buy your own helmet.<br />
<a href="http://www.mrbalky.com/wp-content/uploads/bell_bellisticmatteblack_09_m.jpg"><img src="http://www.mrbalky.com/wp-content/uploads/bell_bellisticmatteblack_09_m-300x272.jpg" alt="bell_bellisticmatteblack_09_m" title="bell_bellisticmatteblack_09_m" width="300" height="272" class="alignnone size-medium wp-image-428" /></a></p>
<p>Allow extra time for the border crossing.  <a href="http://www.wsdot.wa.gov/Congestion/border/TravelDelays.htm">Check the wait times</a>.<br />
<a href="http://www.mrbalky.com/wp-content/uploads/250px-Peacearch-usside.jpg"><img src="http://www.mrbalky.com/wp-content/uploads/250px-Peacearch-usside-225x300.jpg" alt="250px-Peacearch-usside" title="250px-Peacearch-usside" width="225" height="300" class="alignnone size-medium wp-image-429" /></a></p>
<p>Take lots of photos:</p>
<p>Day 1; Whistler Bike Park:<br />
<object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157623619855290%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157623619855290%2F&#038;set_id=72157623619855290&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157623619855290%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157623619855290%2F&#038;set_id=72157623619855290&#038;jump_to=" width="400" height="300"></embed></object></p>
<p>Day 2; More Whistler Bike Park<br />
<object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157623619871960%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157623619871960%2F&#038;set_id=72157623619871960&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157623619871960%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157623619871960%2F&#038;set_id=72157623619871960&#038;jump_to=" width="400" height="300"></embed></object></p>
<p>Day 3; Vancouver, North Shore:<br />
<object width="400" height="300"><param name="flashvars" value="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157623619887158%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157623619887158%2F&#038;set_id=72157623619887158&#038;jump_to="></param><param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"></param><param name="allowFullScreen" value="true"></param><embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&#038;lang=en-us&#038;page_show_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157623619887158%2Fshow%2F&#038;page_show_back_url=%2Fphotos%2Fmrbalkytoo%2Fsets%2F72157623619887158%2F&#038;set_id=72157623619887158&#038;jump_to=" width="400" height="300"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2009/10/05/o-canada/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recent videos</title>
		<link>http://www.mrbalky.com/2009/07/16/recent-videos/</link>
		<comments>http://www.mrbalky.com/2009/07/16/recent-videos/#comments</comments>
		<pubDate>Thu, 16 Jul 2009 15:13:52 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[bike]]></category>
		<category><![CDATA[mtb]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=410</guid>
		<description><![CDATA[I have nothing really to say. Vimeo works better than Google with the AVIs from my new camera. The log bridges on Little Raven can be tricky: little raven 1 from charlie wanek on Vimeo. This video notwithstanding, Casey handled the LR/SSV ride with few problems: casey &#8211; little raven from charlie wanek on Vimeo. [...]]]></description>
				<content:encoded><![CDATA[<p>I have nothing really to say.</p>
<p>Vimeo works better than Google with the AVIs from my new camera.</p>
<p>The log bridges on Little Raven can be tricky:<br />
<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5311225&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5311225&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/5311225">little raven 1</a> from <a href="http://vimeo.com/mrbalky">charlie wanek</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>This video notwithstanding, Casey handled the LR/SSV ride with few problems:<br />
<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5541726&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5541726&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/5541726">casey &#8211; little raven</a> from <a href="http://vimeo.com/mrbalky">charlie wanek</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5541747&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5541747&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/5541747">ssv 2</a> from <a href="http://vimeo.com/mrbalky">charlie wanek</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5494915&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5494915&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/5494915">south st. vrain 1</a> from <a href="http://vimeo.com/mrbalky">charlie wanek</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5494867&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5494867&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/5494867">kevin &#8211; ssv</a> from <a href="http://vimeo.com/mrbalky">charlie wanek</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p><object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5494975&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5494975&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/5494975">tyler &#8211; ssv</a> from <a href="http://vimeo.com/mrbalky">charlie wanek</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>The corkscrew at Keystone looks cool, and is scary at first, but is really more of a gimmick.<br />
<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=5440177&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=5440177&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object>
<p><a href="http://vimeo.com/5440177">Keystone corkscrew</a> from <a href="http://vimeo.com/mrbalky">charlie wanek</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2009/07/16/recent-videos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The VOIP experience</title>
		<link>http://www.mrbalky.com/2009/07/13/the-voip-experience/</link>
		<comments>http://www.mrbalky.com/2009/07/13/the-voip-experience/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 18:27:12 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[tech]]></category>
		<category><![CDATA[voip]]></category>
		<category><![CDATA[vonage]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=383</guid>
		<description><![CDATA[I&#8217;ve been thinking about it literally for years, and I don&#8217;t know what finally made me do it, but I finally signed up for VOIP service. I chose Vonage, just because they seemed biggest, best known, and least likely to simply vanish overnight like Sunrocket did a couple years ago. I&#8217;ve been pretty happy with [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been thinking about it literally for years, and I don&#8217;t know what finally made me do it, but I finally signed up for VOIP service.  I chose <a href="http://www.vonage.com">Vonage</a>, just because they seemed biggest, best known, and least likely to simply vanish overnight like Sunrocket did a couple years ago.</p>
<p>I&#8217;ve been pretty happy with my home network set up, particularly with <a href="http://www.dd-wrt.com/">DD-WRT</a> providing lots of nifty stuff on my gateway router.  So I didn&#8217;t want to screw with that by adding VOIP.  Fortunately, while Vonage prefers the adapter between the cable modem and the router, they do support putting the phone adapter behind the router.</p>
<p>The shipping confirmation email from Vonage very helpfully included the MAC address of the VOIP adapter, so I was able to get my router configured way ahead of time.</p>
<p>I started by giving the adapter a static DHCP lease.  This is trivial to set up in DD-WRT.  Administration -> Services:<br />
<a href="http://www.mrbalky.com/wp-content/uploads/dhcp.jpg"><img src="http://www.mrbalky.com/wp-content/uploads/dhcp-150x150.jpg" alt="dhcp" title="dhcp" width="150" height="150" class="alignnone size-thumbnail wp-image-404" /></a></p>
<p>I am not really doing any advanced firewalling on the router, so I didn&#8217;t have to do anything special for outgoing connections.  But Vonage requires incoming ports 10000-20000 forwarded to the adapter.  That is also trivial to set up in DD-WRT.  Applications &#038; Gaming -> Port Range Forwarding:<br />
<a href="http://www.mrbalky.com/wp-content/uploads/portfwd.jpg"><img src="http://www.mrbalky.com/wp-content/uploads/portfwd-150x150.jpg" alt="port range forwarding" title="port range forwarding" width="150" height="150" class="alignnone size-thumbnail wp-image-388" /></a></p>
<p>With this setup, I plugged in the adapter and it just worked(tm).</p>
<p>The most important thing to me was 911 service.  Vonage offers E911 in my neighborhood.  I called up the regular police phone number and was told the only to test is to just dial 911.  I don&#8217;t know if it&#8217;s this way everywhere, so you&#8217;d better not take my word for it.</p>
<p>It was actually sort of freaky to dial 911.  You just immediately say &#8220;This is not an emergency, I&#8217;m testing my VOIP&#8221;.  The emergency dispatcher&#8217;s system had already popped up with my name and address, just as promised by Vonage.</p>
<p>A <a href="http://en.wikipedia.org/wiki/Plain_old_telephone_service">POTS</a> line works fine during a power outage, but what about VOIP?  I have my cable modem, routers and voip adapter all on a UPS.  Coincidentally, I was working at the house about a week earlier, when there was a power hit long enough to freak out my TiVo and other devices in the house.  But my <a href="http://www.comcast.com/">Comcast</a> broadband stayed up through it, so I feel pretty good about my ability to use the phone during an outage.  Again, I have no idea if this is common, so don&#8217;t come running to me if yours doesn&#8217;t work that way.</p>
<p>The last thing I was interested in testing was if I could get voice traffic prioritized on the WAN connection.  DD-WRT has some handy Quality of Service settings, and there are <a href="http://www.google.com/search?hl=en&#038;safe=off&#038;rlz=1B3GGGL_enUS230US231&#038;ei=Rb1XSsaPHo-4M6GX9Z0I&#038;sa=X&#038;oi=spell&#038;resnum=0&#038;ct=result&#038;cd=1&#038;q=dd-wrt+voip+qos&#038;spell=1">a variety of pages</a> out on teh interwebs with instructions for setting it up.  In the end, I just took some conservative guesses, exempting the VOIP adapter from throttling and setting bittorrent to bulk.  Applications &#038; Gaming -> QoS:<br />
<a href="http://www.mrbalky.com/wp-content/uploads/qos.jpg"><img src="http://www.mrbalky.com/wp-content/uploads/qos-150x150.jpg" alt="qos" title="qos" width="150" height="150" class="alignnone size-thumbnail wp-image-405" /></a></p>
<p>I then downloaded an <a href="http://www.ubuntu.com/">Ubuntu</a> ISO image, getting 200-300KBps down; a bit slower than normal, but for me, still a totally acceptable transfer rate.  The voice quality was still good.</p>
<p>So everything looked good, but I was still interested in testing the quality and usability for a bit before committing to port our phone number from <a href="http://www.qwest.com/">Qwest</a> to Vonage.  If you port at signup it&#8217;s free, but costs an extra $10 to do later, but I figured the testing was worth it.</p>
<p>I now have the cordless phone system on the VOIP, and put an answering machine on the old number&#8217;s line.  So incoming calls are inconvenient, but outgoing calls would most often be over VOIP.</p>
<p>We lived with that for a couple days, and everything was just fine, so I kicked off the number porting process.  The number port went right through, and it&#8217;s scheduled, but I have no idea why there&#8217;s a 10 day lead time for the switch even after all the approvals have gone through.  I&#8217;m guessing that&#8217;s Qwest&#8217;s fault.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2009/07/13/the-voip-experience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DIY headset locker for Rock Shox Pike</title>
		<link>http://www.mrbalky.com/2009/05/19/diy-headset-locker-for-rock-shox-pike/</link>
		<comments>http://www.mrbalky.com/2009/05/19/diy-headset-locker-for-rock-shox-pike/#comments</comments>
		<pubDate>Tue, 19 May 2009 19:52:07 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[bike]]></category>
		<category><![CDATA[hacks]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=362</guid>
		<description><![CDATA[This might work for other Rock Shox forks too&#8230; My new Pike&#8217;s steerer tube has a cap in the bottom with a threaded hole the same size as a standard headset bolt (M6). Instead of pounding a star nut into the steerer, it&#8217;s exteremely easy use this cap as the bottom of a headset locker [...]]]></description>
				<content:encoded><![CDATA[<p>This might work for other Rock Shox forks too&#8230;</p>
<p>My new Pike&#8217;s steerer tube has a cap in the bottom with a threaded hole the same size as a standard headset bolt (M6).  Instead of pounding a star nut into the steerer, it&#8217;s exteremely easy use this cap as the bottom of a headset locker like the <a href="http://www.oneal.com/catalog/product_info.php?cPath=2_19&#038;products_id=590">Azonic Headlock</a> or <a href="http://www.use1.com/products/safe-t/ ">USE Safe-T</a>.</p>
<p>Required parts (in addition to headset, stem, spacers, etc.):<br />
M6 threaded rod (shortest I could buy was 3 feet)<br />
M6 coupler nut<br />
Total cost about $5.</p>
<p>Insert the rod to measure the correct length.  I threaded the rod through the bottom of the steerer tube until half an inch or so was protruding out the top of the tube.  This took some time to thread the 10&#8243; of rod through; I could have done an initial cut to an estimation of length to save myself some time, I suppose.<br />
<img src="http://www.mrbalky.com/wp-content/uploads/img_1182-209x300.jpg" alt="img_1182" title="img_1182" width="209" height="300" class="aligncenter size-medium wp-image-364" /><br />
<img src="http://www.mrbalky.com/wp-content/uploads/img_1181-300x258.jpg" alt="img_1181" title="img_1181" width="300" height="258" class="aligncenter size-medium wp-image-363" /></p>
<p>Add coupler nut, headset cap and original stem bolt.  Thread the nut on the rod first, headset cap on original stem bolt, and then stem bolt into the coupler nut as well.<br />
<img src="http://www.mrbalky.com/wp-content/uploads/img_1183-300x289.jpg" alt="img_1183" title="img_1183" width="300" height="289" class="aligncenter size-medium wp-image-367" /><br />
<img src="http://www.mrbalky.com/wp-content/uploads/img_1184-300x296.jpg" alt="img_1184" title="img_1184" width="300" height="296" class="aligncenter size-medium wp-image-368" /></p>
<p>Tighten down the headset cap so there is no play or extra space in the steerer stack.  Mark the point where the rod emerges from the bottom of the steerer tube.  Take it all apart again, and cut the rod at the mark with a hacksaw.<br />
<img src="http://www.mrbalky.com/wp-content/uploads/img_1185-182x300.jpg" alt="img_1185" title="img_1185" width="182" height="300" class="aligncenter size-medium wp-image-370" /><br />
<img src="http://www.mrbalky.com/wp-content/uploads/img_1186-268x300.jpg" alt="img_1186" title="img_1186" width="268" height="300" class="aligncenter size-medium wp-image-371" /></p>
<p>Put it all together with the headset cap back on original bolt, coupler to original bolt, then threaded rod into coupler.  You may want to use some removable threadlocker on the coupler to make it behave more like a single bolt when it&#8217;s in the steerer.  Tighten the original stem bolt tightly into the coupler; it&#8217;ll butt up against the threaded rod.<br />
<img src="http://www.mrbalky.com/wp-content/uploads/img_1188-300x108.jpg" alt="img_1188" title="img_1188" width="300" height="108" class="aligncenter size-medium wp-image-374" /><br />
Drop the whole thing into the steerer tube, thread it into the bottom cap, then tighten the bolt to the torque specs of your headset.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2009/05/19/diy-headset-locker-for-rock-shox-pike/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More filler</title>
		<link>http://www.mrbalky.com/2009/02/24/more-filler/</link>
		<comments>http://www.mrbalky.com/2009/02/24/more-filler/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 20:54:30 +0000</pubDate>
		<dc:creator>mrbalky</dc:creator>
				<category><![CDATA[humor]]></category>
		<category><![CDATA[humour]]></category>
		<category><![CDATA[Links]]></category>

		<guid isPermaLink="false">http://www.mrbalky.com/?p=353</guid>
		<description><![CDATA[A dose of schadenfreude for your afternoon enjoyment:]]></description>
				<content:encoded><![CDATA[<p>A dose of schadenfreude for your afternoon enjoyment:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/qiIYEmpWaaQ&#038;hl=en&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/qiIYEmpWaaQ&#038;hl=en&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mrbalky.com/2009/02/24/more-filler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
