<?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>Raising the Sail</title>
	<atom:link href="http://www.tranzoa.net/~alex/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.tranzoa.net/~alex/blog</link>
	<description>Something said once upon a time...</description>
	<lastBuildDate>Fri, 27 Apr 2012 10:31:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>Ubuntu Precise makes Vista look like a sparkling, priceless jewel</title>
		<link>http://www.tranzoa.net/~alex/blog/?p=521</link>
		<comments>http://www.tranzoa.net/~alex/blog/?p=521#comments</comments>
		<pubDate>Fri, 27 Apr 2012 10:31:39 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Bloggy Things]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Product Reviews]]></category>

		<guid isPermaLink="false">http://www.tranzoa.net/~alex/blog/?p=521</guid>
		<description><![CDATA[For work reasons I looked at Ubuntu 12.04, Precise 32bit under VMWare Player. From early reviews, etc., I was prepared for being underwhelmed by the Unity user interface. I was not prepared for a disaster. Here are some tag lines that come to mind: &#8220;Ubuntu Precise &#8211; for those who cannot figure out a mouse.&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>For work reasons I looked at Ubuntu 12.04, Precise 32bit under VMWare Player.</p>
<p>From early reviews, etc., I was prepared for being underwhelmed by the Unity user interface. I was not prepared for a disaster.</p>
<p>Here are some tag lines that come to mind:</p>
<p>&#8220;Ubuntu Precise &#8211; for those who cannot figure out a mouse.&#8221;</p>
<p>&#8220;Ubuntu Precise &#8211; bringing the worst of bad phone UI design to a desktop frighteningly near you.&#8221;</p>
<p>&#8220;Ubuntu Precise &#8211; the most expensive free OS in existence.&#8221;</p>
<p>&#8220;Ubuntu Precise &#8211; for those who never ever want to resize or scroll a window.&#8221;</p>
<p>&#8220;Ubuntu Precise &#8211; with an immutable, &#8216;Halloween from Elm Street&#8217; desktop theme loved by 32 year old boys in their mother&#8217;s basements worldwide.&#8221;</p>
<p>&#8220;Ubuntu Precise &#8211; breaking 10 years of software improvements to squeeze a whole &#8216;UI&#8217; in to an icon-sized area at the top left corner of your bare-bones, dual 24&#8243; 1080p monitor system.&#8221;</p>
<p>&#8220;Ubuntu Precise &#8211; the OS for people who struggle with only 500 icons on their desktops.&#8221;</p>
<p>&#8220;Ubuntu Precise &#8211; type partial app names to see icons that do nothing.&#8221;</p>
<p>The list goes on and on.</p>
<p>What&#8217;s truly unfortunate is that Precise, by all accounts, has many small but real improvements over Lucid in particular programs and sub-systems.</p>
<p>If Lucid ran Office, a normal person could probably drop Windows and deal with Linux USB and general non-Windows issues. Lucid has pluses over XP and even Win7 to balance the minuses. But I&#8217;d not point anyone to Precise. It&#8217;s simply not a working system.</p>
<p>And we may use it in a product, desktop-less.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tranzoa.net/~alex/blog/?feed=rss2&#038;p=521</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slide show screen saver</title>
		<link>http://www.tranzoa.net/~alex/blog/?p=466</link>
		<comments>http://www.tranzoa.net/~alex/blog/?p=466#comments</comments>
		<pubDate>Wed, 01 Feb 2012 13:30:22 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Bloggy Things]]></category>

		<guid isPermaLink="false">http://www.tranzoa.net/~alex/blog/?p=466</guid>
		<description><![CDATA[All these years I&#8217;ve used a black screen saver. Screen savers really don&#8217;t do anything any more. Few screens have phosphors to save. And, why burn juice? Just hit the power on the monitors and walk away. But, for odd reasons, the other day I put some pictures from my picture page on a screen [...]]]></description>
			<content:encoded><![CDATA[<p>All these years I&#8217;ve used a black screen saver.</p>
<p>Screen savers really don&#8217;t do anything any more. Few screens have phosphors to save. And, why burn juice? Just hit the power on the monitors and walk away.</p>
<p>But, for odd reasons, the other day I put some pictures from my picture page on a screen saver cycle. It was fun to see them! All sorts of warm feelings. It&#8217;d been a long time since seeing some of the pictures. And most reminded me of when and where they were taken. Which was kinda nice.</p>
<p>So, to celebrate the good times, I whipped up a script to extract the URLs and other information for each of the pictures and a bit of Javascript to cycle through them. Here&#8217;s the result:</p>
<div id='slide_show' style='min-height:400px;min-width:200px;'></div>
<p><script src="https://www.tranzoa.net/alex/tzjavascript_public/slide_show_json.js?random_to_force_reload_while_debugging=345"></script><br />
<script type="text/javascript">
var ss, tmo;
function try_slide_show() { if (window.slide_show_json) { 
ss  = slide_show_json('slide_show', 'http://www.tranzoa.net/alex/pictures/thumbnail_slide_show.js', args = { width : 200, hite : 400, align : 'center'  } ); } else { tmo = window.setTimeout(try_slide_show, 1013); } } try_slide_show();
</script></p>
<p>View the page source to get the idea.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tranzoa.net/~alex/blog/?feed=rss2&#038;p=466</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python 3</title>
		<link>http://www.tranzoa.net/~alex/blog/?p=461</link>
		<comments>http://www.tranzoa.net/~alex/blog/?p=461#comments</comments>
		<pubDate>Thu, 08 Dec 2011 13:02:57 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Bloggy Things]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://www.tranzoa.net/~alex/blog/?p=461</guid>
		<description><![CDATA[Read an interesting screed on Python 3. Thoughts on Python 3 Agreed. This paragraph pretty much sums it up: Python 3 is in the spot where it changed just too much that it broke all our code and not nearly enough that it would warrant upgrading immediately. And in my absolutely personal opinion Python 3.3/3.4 [...]]]></description>
			<content:encoded><![CDATA[<p>Read an interesting screed on Python 3.</p>
<p><a href="http://lucumr.pocoo.org/2011/12/7/thoughts-on-python3/">Thoughts on Python 3</a></p>
<p>Agreed.</p>
<p>This paragraph pretty much sums it up:</p>
<blockquote><p>
Python 3 is in the spot where it changed just too much that it broke all our code and not nearly enough that it would warrant upgrading immediately. And in my absolutely personal opinion Python 3.3/3.4 should be more like Python 3 and Python 2.8 should happen and be a bit more like Python 3. Because as it stands, Python 3 is the XHTML of the programming language world. It&#8217;s incompatible to what it tries to replace but does not offer much besides being more “correct”.
</p></blockquote>
<p>I really like Python. Moved from Perl (for PC work) when CPU&#8217;s got fast enough for Python. The Python out-of-box was terrific.</p>
<p>But, Python 3 is another language. I can&#8217;t justify porting all my personal &#8220;library&#8221; code to another language. Some of the Python 3 stuff reminds me of C++ &#8211; puffiness for the sake of puffiness. If forced to go to Python 3, I&#8217;d evaluate what language to use as I did when moving from Perl.</p>
<p>And as it stands, it&#8217;s very clear that, since all the garbage-collection-memory-protection languages are equivalent, the last one standing will be JavaScript. You have to write the occasional JavaScript. So you have to pay the entrance fee. Maybe <a href="http://nodejs.org/">node.js</a> will end up making JavaScript work reasonably as a non-browser language. Something will. And that&#8217;s the end of all the other languages (excepting the type-anal ones for corporate cubicles). Poof. Python 3 becomes a non-issue.</p>
<p>If Python ran in the browsers and if it ran on all the newer OS&#8217;s, then fine. It could go head to head with JavaScript. Otherwise &#8230; Too bad. Sad. I may be a curly bracket guy, but Python just looks and feels better than JavaScript.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tranzoa.net/~alex/blog/?feed=rss2&#038;p=461</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rsync and sshpass</title>
		<link>http://www.tranzoa.net/~alex/blog/?p=426</link>
		<comments>http://www.tranzoa.net/~alex/blog/?p=426#comments</comments>
		<pubDate>Sat, 12 Nov 2011 07:31:52 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Bloggy Things]]></category>
		<category><![CDATA[Programing]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.tranzoa.net/~alex/blog/?p=426</guid>
		<description><![CDATA[After spending yet another several hours fighting the good fight, it seems like a good idea to note how to use rsync on a troublesome ssh connection &#8211; one that both requires a password and that is slooooow to get logged on. First, the problem of the password is solved using sshpass. It allows you [...]]]></description>
			<content:encoded><![CDATA[<p>After spending yet another several hours fighting the good fight, it seems like a good idea to note how to use <code>rsync</code> on a troublesome <code>ssh</code> connection &#8211; one that both requires a password and that is slooooow to get logged on.</p>
<p>First, the problem of the password is solved using <code>sshpass</code>. It allows you to put the password for the remote system in a file. The file, we presume, is stored in your <code>~/.ssh/</code> directory and has its permissions set so that only you, the user, can see it or do anything with it. In that way, it works like an <code>ssh</code> key file that you might tell <code>ssh</code> to log in with using the &#8220;<code>ssh -i ...</code>&#8221; command line option.</p>
<p>Second, to allow for a slow server, use something like this as an option to <code>ssh</code>:</p>
<pre>
ssh -o ServerAliveInterval=45 ...
</pre>
<p>That is, tell <code>ssh</code> to wait for 45 seconds for the slow server to get you logged in.</p>
<p>So the command line to get a connection to the server is something like this:</p>
<pre>
sshpass -f ~/.ssh/bonzo_password.txt       \
             ssh                           \
            -p __BONZO_SSH_PORT_22__       \
            -o ServerAliveInterval=45      \
             __BONZO_USER__@__BONZO__
</pre>
<p><dir><br />
  <em>Excuse the horrid backslashes. They are for the browser window.</em><br />
</dir></p>
<p>All well and good. But that command line won&#8217;t work under <code>rsync</code>. The connection will be made, then instantly dropped. And <code>rsync</code> hangs.</p>
<p><dir><br />
  I presume the drop is something security-related in <code>ssh</code>.<br />
  Or maybe <code>sshpass</code>.<br />
  Whatever.<br />
  <code>rsync</code> is unhappy.<br />
</dir></p>
<p>But, here&#8217;s the deal: <code>rsync</code> will be happy if the connection is already made in another terminal, and you have configured <code>ssh</code> to allow connections to go through a &#8220;master&#8221; connection &#8211; that is, tell <code>ssh</code> to not log in normally, but to rather use an existing <code>ssh</code> connection.</p>
<p><dir><br />
You tell <code>ssh</code> to use an existing connection by putting the following in a <code>~/.ssh/config</code> file (remember to set the permissions for everything in <code>~/.ssh</code> for <strong>only</strong> your access):</p>
<pre>
ControlMaster       auto
ControlPath         /tmp/ssh_mux_%h_%p_%r
</pre>
<p></dir></p>
<p>For clean-up reasons, you put the <code>sshpass</code> command in a separate <code>.sh</code> file which we&#8217;ll call <code>ssh_to_bonzo.sh</code>.</p>
<p>So now you run that <code>ssh_to_bonzo.sh</code> script in a &#8220;SCREEN&#8221; &#8211; sort of a virtual terminal window!</p>
<pre>
screen -t ssh_to_bonzo -dmS ssh_to_bonzo ssh_to_bonzo.sh
sleep 45
</pre>
<p><dir><br />
  <em>Note the you-set-it, 45 second delay.</em><br />
</dir></p>
<p>Once this code is run, you can <code>rsync</code> away, though with the world&#8217;s worst command line.</p>
<p>So your whole <code>rsync</code> script might look something like this:</p>
<pre>
screen -t ssh_to_bonzo -dmS ssh_to_bonzo ssh_to_bonzo.sh
sleep 45
rsync --rsh="sshpass -f ~/.ssh/bonzo_password.txt ssh -l bonzo_user_name"     \
        bonzo:bonzo_directory                                                 \
        to_directory
pkill ssh_to_bonzo.sh
</pre>
<p>Or something of that sort.</p>
<p><em>Notice the <code>pkill ssh_to_bonzo.sh</code> at the end. That cleans up the <code>screen</code> operation.</p>
<p>Note, too, that you must still give the <code>sshpass</code> command line to the <code>rsync --rsh</code> option.</em></p>
<p>Piece of cake.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tranzoa.net/~alex/blog/?feed=rss2&#038;p=426</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A second Google Maps car shown in street view</title>
		<link>http://www.tranzoa.net/~alex/blog/?p=418</link>
		<comments>http://www.tranzoa.net/~alex/blog/?p=418#comments</comments>
		<pubDate>Fri, 11 Nov 2011 04:48:43 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Bloggy Things]]></category>

		<guid isPermaLink="false">http://www.tranzoa.net/~alex/blog/?p=418</guid>
		<description><![CDATA[Not sure how often you see Google Maps cars in the street view images, but it appears that they played conservative in this region of the world: A car at click-here on Google Maps:]]></description>
			<content:encoded><![CDATA[<p>Not sure how often you see Google Maps cars in the street view images, but it appears that they played conservative in this region of the world:</p>
<p><a href="http://maps.google.com/maps?q=68.420923,+-133.774938&#038;hl=en&#038;ll=68.42083,-133.774853&#038;spn=0.012801,0.037851&#038;sll=37.0625,-95.677068&#038;sspn=55.718442,77.519531&#038;vpsrc=6&#038;t=h&#038;z=15&#038;layer=c&#038;cbll=68.420936,-133.774928&#038;panoid=Xva0E4d3oMAAVBc5rJf4Og&#038;cbp=12,180.71,,0,4.18">A car at click-here on Google Maps:</p>
<p><img src="http://www.tranzoa.net/~alex/blog/images/google_maps_car_far_north.jpg" alt="Takes two to tango" /><br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tranzoa.net/~alex/blog/?feed=rss2&#038;p=418</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What happened in 1975?</title>
		<link>http://www.tranzoa.net/~alex/blog/?p=410</link>
		<comments>http://www.tranzoa.net/~alex/blog/?p=410#comments</comments>
		<pubDate>Fri, 04 Nov 2011 21:31:55 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Bloggy Things]]></category>
		<category><![CDATA[Humor]]></category>

		<guid isPermaLink="false">http://www.tranzoa.net/~alex/blog/?p=410</guid>
		<description><![CDATA[Recently, a group down in Berkeley pulled together temperature measurements from all over the world for the last couple hundred years. Their effort is notable in that they are publishing the source code and data. This novel idea of publishing the code and data is a very good thing. Thank you, ClimateGate. And they published [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, a group down in <a href="http://berkeleyearth.org/resources.php">Berkeley</a> pulled together temperature measurements from all over the world for the last couple hundred years.</p>
<p>Their effort is notable in that they are publishing the source code and data. This novel idea of publishing the code and data is a very good thing. Thank you, <a href="http://en.wikipedia.org/wiki/Climatic_Research_Unit_email_controversy">ClimateGate</a>.</p>
<p>And they published their results in graph form:</p>
<p><a href="http://berkeleyearth.org/analysis.php"><img src="https://www.tranzoa.net/~alex/blog/images/berkeley_surf_temps.jpg" alt="land temperature graph" /></a></p>
<p>The usual flurry of noise followed their press release.</p>
<p>I did not read of anyone asking the immediate question this graph raises:</p>
<p>What happened in 1975?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tranzoa.net/~alex/blog/?feed=rss2&#038;p=410</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Net Connection Monitor</title>
		<link>http://www.tranzoa.net/~alex/blog/?p=403</link>
		<comments>http://www.tranzoa.net/~alex/blog/?p=403#comments</comments>
		<pubDate>Tue, 25 Oct 2011 18:46:32 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Bloggy Things]]></category>
		<category><![CDATA[Product Reviews]]></category>

		<guid isPermaLink="false">http://www.tranzoa.net/~alex/blog/?p=403</guid>
		<description><![CDATA[The net connection here was getting pretty flaky. Down for chunks of time in the night, day and in between. Since our connection&#8217;s gears are hidden beneath a couple layers of organizations, it&#8217;s been frustrating to deal with the outages. It feels like Qwest / Century Link&#8217;s problem &#8211; the telling from the second hand [...]]]></description>
			<content:encoded><![CDATA[<p>The net connection here was getting pretty flaky. Down for chunks of time in the night, day and in between.</p>
<p>Since our connection&#8217;s gears are hidden beneath a couple layers of organizations, it&#8217;s been frustrating to deal with the outages. It feels like Qwest / Century Link&#8217;s problem &#8211; the telling from the second hand says they say that there is only 1 wire-pair in to the house, so they probably are not wholly on top of things. But who knows?</p>
<p>So I wrote a <a href="https://www.tranzoa.net/tzpython/ping_mon.py">little script</a> to ping every 10 seconds an address randomly chosen from:</p>
<ul>
<li>the outside gateway</li>
<li>the <a href="http://www.speakeasy.net/speedtest/">Speakeasy/Megapath</a> DNS server</li>
<li>Google&#8217;s DNS server</li>
</ul>
<p>The <a href="https://www.tranzoa.net/tzpython/ping_mon.py">script</a> prints the exit value from the &#8220;ping&#8221; program (1 is bad) and the duration the pinging has been bad when a good ping follows any bad one.</p>
<p>Here is a day of activity:</p>
<pre>
1   8.8.8.8         Sat Oct 22 00:02:11 2011
0   72.1.134.1      Sat Oct 22 00:02:33 2011 00:00:22
1   66.93.87.2      Sat Oct 22 00:30:48 2011
0   72.1.134.1      Sat Oct 22 00:30:59 2011 00:00:11
1   8.8.8.8         Sat Oct 22 00:31:11 2011
0   8.8.8.8         Sat Oct 22 00:31:44 2011 00:00:32
1   66.93.87.2      Sat Oct 22 01:27:28 2011
0   8.8.8.8         Sat Oct 22 01:27:39 2011 00:00:10
1   8.8.8.8         Sat Oct 22 01:27:51 2011
0   66.93.87.2      Sat Oct 22 01:28:02 2011 00:00:10
1   66.93.87.2      Sat Oct 22 01:32:49 2011
0   66.93.87.2      Sat Oct 22 01:32:59 2011 00:00:10
1   66.93.87.2      Sat Oct 22 02:03:45 2011
0   8.8.8.8         Sat Oct 22 02:04:39 2011 00:00:54
1   72.1.134.1      Sat Oct 22 02:14:32 2011
0   72.1.134.1      Sat Oct 22 02:14:42 2011 00:00:10
1   66.93.87.2      Sat Oct 22 02:21:29 2011
0   72.1.134.1      Sat Oct 22 02:21:50 2011 00:00:21
1   66.93.87.2      Sat Oct 22 02:33:26 2011
0   66.93.87.2      Sat Oct 22 02:33:36 2011 00:00:10
1   66.93.87.2      Sat Oct 22 02:45:24 2011
0   8.8.8.8         Sat Oct 22 02:45:34 2011 00:00:10
1   72.1.134.1      Sat Oct 22 02:57:01 2011
0   8.8.8.8         Sat Oct 22 02:57:23 2011 00:00:21
1   8.8.8.8         Sat Oct 22 03:28:36 2011
0   72.1.134.1      Sat Oct 22 03:29:09 2011 00:00:32
1   8.8.8.8         Sat Oct 22 03:32:55 2011
0   66.93.87.2      Sat Oct 22 03:33:06 2011 00:00:10
1   66.93.87.2      Sat Oct 22 04:27:07 2011
0   72.1.134.1      Sat Oct 22 04:27:28 2011 00:00:21
1   66.93.87.2      Sat Oct 22 04:32:22 2011
0   66.93.87.2      Sat Oct 22 04:32:43 2011 00:00:21
1   72.1.134.1      Sat Oct 22 04:44:21 2011
0   66.93.87.2      Sat Oct 22 04:44:31 2011 00:00:10
1   8.8.8.8         Sat Oct 22 04:56:09 2011
0   8.8.8.8         Sat Oct 22 04:56:19 2011 00:00:10
1   8.8.8.8         Sat Oct 22 05:19:54 2011
0   8.8.8.8         Sat Oct 22 05:20:04 2011 00:00:10
1   66.93.87.2      Sat Oct 22 05:31:40 2011
0   72.1.134.1      Sat Oct 22 05:32:01 2011 00:00:21
1   66.93.87.2      Sat Oct 22 06:18:38 2011
0   66.93.87.2      Sat Oct 22 06:19:11 2011 00:00:32
1   66.93.87.2      Sat Oct 22 06:19:23 2011
0   72.1.134.1      Sat Oct 22 06:19:34 2011 00:00:10
1   72.1.134.1      Sat Oct 22 06:19:46 2011
0   72.1.134.1      Sat Oct 22 06:19:56 2011 00:00:10
1   72.1.134.1      Sat Oct 22 06:54:21 2011
0   8.8.8.8         Sat Oct 22 06:54:32 2011 00:00:10
1   66.93.87.2      Sat Oct 22 06:56:35 2011
0   66.93.87.2      Sat Oct 22 06:56:46 2011 00:00:10
1   66.93.87.2      Sat Oct 22 07:17:56 2011
0   8.8.8.8         Sat Oct 22 07:18:06 2011 00:00:10
1   66.93.87.2      Sat Oct 22 07:53:16 2011
0   66.93.87.2      Sat Oct 22 07:53:26 2011 00:00:10
1   72.1.134.1      Sat Oct 22 07:53:38 2011
0   66.93.87.2      Sat Oct 22 07:53:48 2011 00:00:10
1   66.93.87.2      Sat Oct 22 08:16:52 2011
0   66.93.87.2      Sat Oct 22 08:17:02 2011 00:00:10
1   66.93.87.2      Sat Oct 22 08:40:22 2011
0   66.93.87.2      Sat Oct 22 08:40:44 2011 00:00:21
1   8.8.8.8         Sat Oct 22 09:54:46 2011
0   66.93.87.2      Sat Oct 22 09:54:57 2011 00:00:10
1   66.93.87.2      Sat Oct 22 09:56:30 2011
0   66.93.87.2      Sat Oct 22 09:56:52 2011 00:00:21
1   8.8.8.8         Sat Oct 22 11:54:25 2011
0   66.93.87.2      Sat Oct 22 11:54:46 2011 00:00:21
1   72.1.134.1      Sat Oct 22 11:56:32 2011
0   66.93.87.2      Sat Oct 22 11:57:15 2011 00:00:43
1   8.8.8.8         Sat Oct 22 12:05:20 2011
0   8.8.8.8         Sat Oct 22 12:05:41 2011 00:00:21
1   8.8.8.8         Sat Oct 22 12:40:48 2011
0   72.1.134.1      Sat Oct 22 12:40:58 2011 00:00:10
1   66.93.87.2      Sat Oct 22 12:52:24 2011
0   72.1.134.1      Sat Oct 22 12:52:35 2011 00:00:10
1   66.93.87.2      Sat Oct 22 12:57:20 2011
0   72.1.134.1      Sat Oct 22 12:57:41 2011 00:00:21
1   72.1.134.1      Sat Oct 22 14:23:30 2011
0   66.93.87.2      Sat Oct 22 14:24:02 2011 00:00:32
1   72.1.134.1      Sat Oct 22 19:32:21 2011
0   8.8.8.8         Sat Oct 22 19:32:32 2011 00:00:10
1   66.93.87.2      Sat Oct 22 21:39:20 2011
0   66.93.87.2      Sat Oct 22 21:39:30 2011 00:00:10
1   8.8.8.8         Sat Oct 22 21:53:51 2011
0   72.1.134.1      Sat Oct 22 21:54:13 2011 00:00:21
1   8.8.8.8         Sat Oct 22 21:54:36 2011
0   72.1.134.1      Sat Oct 22 21:54:57 2011 00:00:21
1   72.1.134.1      Sat Oct 22 23:12:39 2011
0   72.1.134.1      Sat Oct 22 23:12:49 2011 00:00:10
</pre>
<p>Analysis of more data shows that, indeed, the gateway is more reliably pinged than the Speakeasy/Megapath DNS server, which is slightly more reliable than the Google DNS server. So, it&#8217;s the wire.</p>
<p>Meanwhile, the net connection currently is faster than it&#8217;s ever been. Almost a meg, down and a half meg up. Whooo, hoo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tranzoa.net/~alex/blog/?feed=rss2&#038;p=403</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Back and forth translations</title>
		<link>http://www.tranzoa.net/~alex/blog/?p=397</link>
		<comments>http://www.tranzoa.net/~alex/blog/?p=397#comments</comments>
		<pubDate>Tue, 25 Oct 2011 10:38:30 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[B2 Kinds of Thoughts]]></category>
		<category><![CDATA[Bloggy Things]]></category>
		<category><![CDATA[Machine Learning]]></category>

		<guid isPermaLink="false">http://www.tranzoa.net/~alex/blog/?p=397</guid>
		<description><![CDATA[Starting with thoughts of how it would be nice to have a back and forth translator when writing an email to someone who speaks a different language&#8230; You would normally write the email in your language, then crank it through a web translator to get the text for the other person. Well, shouldn&#8217;t the translator [...]]]></description>
			<content:encoded><![CDATA[<p>Starting with thoughts of how it would be nice to have a back and forth translator when writing an email to someone who speaks a different language&#8230;</p>
<p>You would normally write the email in your language, then crank it through a web translator to get the text for the other person.</p>
<p>Well, shouldn&#8217;t the translator show the text translated back from the target language to yours so you can check what the other guy will be reading?</p>
<p>Oddly enough, I didn&#8217;t find anything on the web to do that as you type. Weird.</p>
<p>But, then it gets interesting.</p>
<p>The guys developing translation software could use instances of people&#8217;s starting text and final text when people process their writings through a back-and-forth-erizer. Figure a person starts by saying what he wants to say in his language. Then, as he modifies what he writes so the translation is better, he&#8217;s effectively spelling out a way to translate from his language to his language. He&#8217;s showing you a meaning thesaurus, not just simple word substitutions.</p>
<p>(Gunning) Fog index: Wouldn&#8217;t the difflib comparison score between the original and the back-translated text be in some way consistent with fog indices? The translation software builders probably use something like this to evaluate their software. I would.</p>
<p>Certain pairs of languages will translate back and forth better than other pairs. What does that mean?</p>
<ul>
<li>The translation software is better for those two lingoes?</li>
<li>The cultures/people are closer?</li>
<li>What else?</li>
</ul>
<p>Over time, what happens? Can the changes in the pair distances be used as a metric of how the world is becoming a global village? Can such changes be used in any way to understand cultural differences? Can translation software improvements be normalized out of the pair distances over time?</p>
<p>Presumably, the translation software guys are monitoring the pair distances between languages so that there are no instances of translations being better going through an intermediate language rather than going direct from one language to another. If such were ever the case then the thing to do would be to train the direct translator using the longer route translations. Doing such a process iteratively sounds like a pretty good way to bring a new language in to the system. All the new language needs is a corpus of translations from it to one other language. Of course, this wouldn&#8217;t be a binary thing. The more effective pair-corpus&#8217;s would be able to bootstrap the less effective links, generally.</p>
<p>What are the implications of a world where people write using a language back-and-forth de-fogger? Does the writing end up bureaucratic? No personality. No sharp meaning. Vanilla.</p>
<p>Should textbooks be run through such a de-fogger? Should speeches? Especially in the education field, it seems important to get things across clearly.</p>
<p>Could using these back-and-forth techniques be used to build a new language? A better language? Could they be used to build a creole language?</p>
<p>If a language translation system built a creole language that&#8217;s close to an existing one, does that imply that the translation system understands the ingredient languages like a human?</p>
<p>Given net-available text, how much CPU does it take to build an effective language translation system?</p>
<p>Could back-and-forth translations be used to help translate old text in to modern language? That is, keep modifying the old text until you get the best back-and-forth for your modified text. It would be interesting to automate this whole process. Proof reader, editor, re-writer system.</p>
<p>Good URL, but probably going away in December (returns JSON translation of the &#8216;q&#8217; string):</p>
<p><a href="http://ajax.googleapis.com/ajax/services/language/translate?q=come%20to%20papa?&#038;v=1.0&#038;langpair=en%7ces">http://ajax.googleapis.com/ajax/services/language/translate?q=come%20to%20papa?&#038;v=1.0&#038;langpair=en%7ces<br />
</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tranzoa.net/~alex/blog/?feed=rss2&#038;p=397</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pulsing Web Page</title>
		<link>http://www.tranzoa.net/~alex/blog/?p=385</link>
		<comments>http://www.tranzoa.net/~alex/blog/?p=385#comments</comments>
		<pubDate>Tue, 04 Oct 2011 21:57:11 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[B2 Kinds of Thoughts]]></category>
		<category><![CDATA[Bloggy Things]]></category>
		<category><![CDATA[Programing]]></category>

		<guid isPermaLink="false">http://www.tranzoa.net/~alex/blog/?p=385</guid>
		<description><![CDATA[Years ago, I daydreamed about a head&#8217;s up display for futuristic Instant Messaging. The display would show vital signs of the &#8220;buddy&#8221; you were monitoring. Such an intimate thing might help with communication. Seemed like a good idea at the time. Well. https://www.tranzoa.net/alex_pulse/ Viewing this waveform from the CMS50E requires an HTML5-capable browser (Firefox / [...]]]></description>
			<content:encoded><![CDATA[<p>Years ago, I daydreamed about a head&#8217;s up display for futuristic Instant Messaging. The display would show vital signs of the &#8220;buddy&#8221; you were monitoring. Such an intimate thing might help with communication.</p>
<p>Seemed like a good idea at the time.</p>
<p>Well.</p>
<p><a href="https://www.tranzoa.net/alex_pulse/">https://www.tranzoa.net/alex_pulse/</a></p>
<p>Viewing this waveform from the <a href="http://www.tranzoa.net/~alex/blog/?p=331">CMS50E</a> requires an HTML5-capable browser (Firefox / Safari / Modern phones / Webit / maybe IE9). I do not know how timely the waveform will show up from outside the house. It updates on localhost about once a second &#8211; roughly in time with the heartbeat beeping from the device.</p>
<p><a href="https:/www.tranzoa.net/~alex/blog/images/alex_pulse_01.png"><img src="https:/www.tranzoa.net/~alex/blog/images/alex_pulse_01_small.png" alt="Alex Pulse"/></a></p>
<p>The waveform just stays put if the &#8220;finger&#8221; is out. Who knows what will happen when the device is not connected to the PC that runs the server.</p>
<p>The &#8220;finger&#8221; is my left index toe.</p>
<p><a href="https:/www.tranzoa.net/~alex/blog/images/left_toe_cms50e_01.jpg"><img src="https:/www.tranzoa.net/~alex/blog/images/left_toe_cms50e_01_small.jpg" alt="left toe"/></a></p>
<p>The project got a little out of hand. The general idea is to have a generic server that makes it easy to stream line/point numbers out to arbitrary numbers of web clients to graph. I cut things short to get this thing on line.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tranzoa.net/~alex/blog/?feed=rss2&#038;p=385</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CMS50E Pulse Oximeter USB / Serial Protocol</title>
		<link>http://www.tranzoa.net/~alex/blog/?p=371</link>
		<comments>http://www.tranzoa.net/~alex/blog/?p=371#comments</comments>
		<pubDate>Sun, 02 Oct 2011 07:06:48 +0000</pubDate>
		<dc:creator>alex</dc:creator>
				<category><![CDATA[Bloggy Things]]></category>
		<category><![CDATA[Product Reviews]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.tranzoa.net/~alex/blog/?p=371</guid>
		<description><![CDATA[I hate reverse engineering. You cannot underestimate how little I care that bit 3 of byte 2 of an 11 byte, binary message indicates whether the left flange of the Acme, Incorporated Doohickee 3500-XL is up or down. It just does not matter. I don&#8217;t care to know the details of how someone implemented a [...]]]></description>
			<content:encoded><![CDATA[<p>I hate reverse engineering.</p>
<p>You cannot underestimate how little I care that bit 3 of byte 2 of an 11 byte, binary message indicates whether the left flange of the Acme, Incorporated Doohickee 3500-XL is up or down. It just does <b>not</b> matter.</p>
<p>I don&#8217;t care to know the details of how someone implemented a device or protocol or whatever. Those details don&#8217;t matter.</p>
<p>But, this CMS50E is out of the Far East, so talking to it through the serial/USB port requires reverse engineering.</p>
<p>And a strong stomach.</p>
<p>Now, the CMS50E has a 1-button user interface: Beautifully done. A work of art in design and implementation.</p>
<p>The protocol? &#8230; &#8230; &#8230; Otherwise.</p>
<p>So, here goes:</p>
<p>The device talks to a PC through a serial-to-USB conversion cable. The PC program sets 19.2 8O1. Yes. Odd parity. And the PC program actually does a 4800/19200 dance at the top. Is this bug-clearing logic for the cable or device? Who knows.</p>
<p>The device sends a data stream to the PC when the &#8220;USB&#8221; menu item is &#8220;on&#8221;.</p>
<p><dir> Any single byte sent to the device appears to turn USB streaming on. Perhaps, any voltage transition on the receive data line turns it on.</p>
<p>Let&#8217;s cover this first goof in the PC interface:</p>
<p>    If the device is USB powered, then USB streaming should start and stop when the USB power is on or off. Duh. And, in any case and if the device does not use USB power, then a particular command message from the PC should turn streaming on &#8211; for a limited time so the battery isn&#8217;t drained from the streaming.</p>
<p>    Poof. The menu item goes away.</p>
<p>USB powered devices should send identifying heartbeat messages in any case. This would allow a PC program to find the device by opening and only listening on the serial port. The heartbeat should include device identity information.</p>
<p></dir></p>
<p>A menu choice tells the device to dump its recorded data.</p>
<p>Let&#8217;s cover this second goof:</p>
<p><dir> A message from the PC should start the dump.</p>
<p>Poof. The menu item goes away.</p>
<p>Turns out, the PC program sends two 0xf5 bytes when it begins the data dump. And it sends three 0xf6 bytes when it has received the dump. I cannot find any reason the PC program does this. The only effect they seem to have is to turn on data streaming. Note: the displayed state of the &#8220;USB&#8221; option does not visually change until the menu choice is actively scrolled to. No big deal, but this is the reason I&#8217;ve not tested the effects of all 256 byte values sent to the device.</p>
<p></dir></p>
<p>Streaming data format:</p>
<p>The streaming data is composed of 5-byte messages sent 60 times a second:</p>
<ol>
<li>Byte 1: <dir> 128 / 0&#215;80 means the &#8220;finger&#8221; is not in the device. Ignore the other 4 bytes.
<p>    If the high bit is not set then this is not the first byte of a message. Wait for a byte with the high bit set.</p>
<p>0xf0 bits: <a href="https://www.tranzoa.net/~alex/blog/images/Communication protocol.pdf">Outside documentation</a> indicates this is a &#8220;signal strength for pulsate&#8221; value. I have recorded only values from 0 through 9. No recorded values from 10 through 15. In all cases of a zero value but two, the heart rate and SpO2 values have been zero, but the waveform value has been valid, though also often zero. The two anamalous cases had a spurious heart rate of 132.</p>
<p>0&#215;10 bit: <a href="https://www.tranzoa.net/~alex/blog/images/Communication protocol.pdf">Outside documentation</a> indicates this bit means &#8220;searching too long&#8221; when set.</p>
<p>0&#215;20 bit: <a href="https://www.tranzoa.net/~alex/blog/images/Communication protocol.pdf">Outside documentation</a> indicates this bit means &#8220;dropping of SpO2&#8243; when set.</p>
<p>0&#215;40 bit: is set when the device senses a heart &#8220;beat&#8221; &#8211; a peak in the waveform. This &#8220;beat&#8221; marker comes a few samples after the actual peak and seems to coincide with the beep sound the device makes. There are often two samples together with the beat markers.</p>
<p></dir></p>
</li>
<li>Byte 2: <dir> The waveform value. 0..127. The high bit is not set. If it is set (and the high bit is set on byte 1, of course), then this is not a streaming data message, but rather a recorded data dump message.
<p></dir></p>
</li>
<li>Byte 3: <dir>High bit of heart rate and certain status bits.
<p>The 0&#215;40 bit is the heart rate high bit &#8211; allowing heart rates of up to 255 BPM.</p>
<p>0x0f bits: Apparent duplications of the top 4 bits of the waveform value. I tried to make sense of these bits. Were they a way to get at the instantaneous oxygen saturation? No luck so far. Outside documentation indicates that they are to be used for a bar-graph on a display. In any case the 0&#215;08 bit is always zero as the 0&#215;80 bit of the waveform data in byte 2 is always zero, too.</p>
<p>0&#215;10 bit: <a href="https://www.tranzoa.net/~alex/blog/images/Communication protocol.pdf">Outside documentation</a> indicates it may be &#8220;probe error&#8221; if set.</p>
<p>0&#215;20 bit: <a href="https://www.tranzoa.net/~alex/blog/images/Communication protocol.pdf">Outside documentation</a> indicates it may be &#8220;searching&#8221; if set.</p>
<p>I have no instances of the 0&#215;30 bits being set.</p>
<p>0&#215;80 bit: Must always be zero. Otherwise, this is not a regular sample.</p>
<p></dir></p>
</li>
<li>Byte 4: <dir> Heart rate:  0..127. The low 7 bits of the heart rate, that is.
<p>If the third byte is 0xf2 and the fourth byte has its high bit set, then they are the first two bytes of a recorded data dump.</p>
<p>The heart rate appears to be a calculation on the time difference between the oldest and most recent &#8220;beat&#8221; in the last 30 seconds plus a few samples.</p>
<p></dir></p>
</li>
<li>Byte 5: <dir> Oxygen saturation percentage.
<p>This value seems to be a 30 second average of some sort. Anyway, it lags by 30 seconds.</p>
<p></dir></p>
</li>
</ol>
<p>Data dump format:</p>
<p>A recorded data dump is composed of 3-byte messages telling the heart rate and oxygen saturation level once a second.</p>
<p>The first two messages sent contain the HH:MM time value set by the user when the recording was started.</p>
<p>The third message sent tells how many bytes are in the full data dump.</p>
<p>Subsequent messages are the dump, itself.</p>
<p>Once started, the dump continues until finished. I have not tested the effect of pulling the USB connection during a dump.</p>
<p>The three message types:</p>
<ol>
<li>Time value (from the menu HH:MM time, set by the user when recording was started).
<p>        Two of these messages are sent to start the data dump.</p>
<p>        They can be recognized by:</p>
<p>        <code>(first_byte == 0xf2) and (second_byte &#038; 0x80)</code></p>
<ol>
<li>Byte 1:
<p>        <dir> 0xf2</p>
<p>        </dir></p>
</li>
<li>Byte 2:
<p>        <dir> High bit is set.</p>
<p>        The 0x1f bits are the hours: 0..23.</p>
<p>        </dir></p>
</li>
<li>Byte 3:
<p>        <dir> Minutes 0..59.</p>
<p>        </dir></p>
</li>
</ol>
</li>
<li>The single message not starting with an 0xf2 value and following an 0xf2 message tells how many bytes of recorded data will be sent in the subsequent messages.
<p>        The calculation is:</p>
<pre><code>((first_byte &#038; 0x3f) < <  14) | ((second_byte &#038; 0x7f) << 7) | third_byte</code></code></pre>
<p>        Note: There appear to be bugs in the device which makes this byte count subject to adjustments along the way. See the code for my current best guesses. Too. WordPress seems to render the shift-left 14 with an extra space.</p>
</li>
<li>Recorded data.
<ol>
<li>Byte 1:
<p>        <dir> 0xf0 or 0xf1 (possibly 0xf2 and 0xf3, but I doubt it)</p>
<p>        The low bit (or two bits) are the high bit(s) of the heartrate.</p>
<p>        If this byte masked with 0xf0 is not 0xf0, then see the code. It gets knarly.</p>
<p>        The device appears to be directly dumping its flash memory and the data seems to be organized on 256 byte page boundaries. 256 / 3 (3 being the message length) is not an even number. So strange things happen 3 times every 256 data messages. It&#8217;s baffling why the engineer did things this way. But there it is. Perhaps extra information is encoded by special messages at these page boundaries, but it sure doesn&#8217;t look like it. The whole thing just looks incredibly sloppy. This feel of sloppiness is enhanced because there can be obvious glitches in the data and/or dumping during particular recording dumps. The glitches appear to be in memory rather than communications problems.</p>
<p>        </dir></p>
</li>
<li>Byte 2:
<p>        <dir> Low 7 bits of the heart rate.</p>
<p>        The 0&#215;80 or 0&#215;180 bits &#8211; the high bit(s) &#8211; of the heart rate are in the first byte&#8217;s low bit(s).</p>
<p>        If byte 2 and byte 3 are both zero, then presumably the finger was out.</p>
<p>        </dir></p>
</li>
<li>Byte 3:
<p>        <dir> The oxygen saturation percentage: ?..99. I have never seen 100. At the first two 256-byte boundaries in the data dump for each 256 samples, this value is 255.</p>
<p>        The third 256-byte boundary seems to yield a regular streaming data sample message with bongoed heartrate &#8211; or something.</p>
<p>        </dir></p>
</li>
</ol>
</li>
</ol>
<p>There you have it. Gosh, I hope the engineer responsible for this can say, &#8220;Hey, whadya want? I had an hour to do it in!&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tranzoa.net/~alex/blog/?feed=rss2&#038;p=371</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
	</channel>
</rss>

