<?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>Thomas&#039;s Programming Log</title>
	<atom:link href="http://thomasoandrews.com/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://thomasoandrews.com/wordpress</link>
	<description>Random musings</description>
	<lastBuildDate>Sun, 18 Mar 2012 19:05:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>IPad Music App gripes &#8211; podcasts</title>
		<link>http://thomasoandrews.com/wordpress/2012/03/18/ipad-music-app-gripes-podcasts/</link>
		<comments>http://thomasoandrews.com/wordpress/2012/03/18/ipad-music-app-gripes-podcasts/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 18:53:36 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gripes]]></category>
		<category><![CDATA[iPad]]></category>

		<guid isPermaLink="false">http://thomasoandrews.com/wordpress/?p=170</guid>
		<description><![CDATA[It used to be the case that the iPad was great for listening to podcasts. You could quickly see which podcasts you hadn&#8217;t listened to, and you could play a whole bunch of podcasts at once. I&#8217;m not sure when &#8230; <a href="http://thomasoandrews.com/wordpress/2012/03/18/ipad-music-app-gripes-podcasts/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>It used to be the case that the iPad was great for listening to podcasts.  You could quickly see which podcasts you hadn&#8217;t listened to, and you could play a whole bunch of podcasts at once.<br />
I&#8217;m not sure when this changed, but nowadays, the interface doesn&#8217;t include any indicator of which entries you&#8217;ve already played, and no longer plays multiple podcast entries in order.<br />
Finally, there is no way to access the longer description of a podcast, as far as I can tell.<br />
Altogether, this makes listening to podcasts somewhat infuriating when you have a backlog. Say I have a backlog of ten &#8220;NPR Sunday Puzzle&#8221; episodes. I&#8217;d love to play them in order, but to do so, I have to start each on in sequence. By the time I get to the seventh, I have to remember which number I am on (since the interface gives me no clue which episodes I&#8217;ve watched.) in some cases, I can scan the titles, but, really, shouldn&#8217;t the interface be easier?<br />
The failure to play podcasts in sequence automatically also makes listening to podcasts on a long drive impossible without either fussing with the iPad while driving oe stopping after every episode.<br />
Maybe I&#8217;m missing something in the interface. I looked in all the places for preferences, but didn&#8217;t find anything.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasoandrews.com/wordpress/2012/03/18/ipad-music-app-gripes-podcasts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java interfaces and implicit contracts</title>
		<link>http://thomasoandrews.com/wordpress/2012/03/15/java-interfaces-and-implicit-contracts/</link>
		<comments>http://thomasoandrews.com/wordpress/2012/03/15/java-interfaces-and-implicit-contracts/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 16:16:41 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thomasoandrews.com/wordpress/?p=157</guid>
		<description><![CDATA[While working on a project using Apache Flume to write data to Hadoop, we implemented our own Flume OutputFormat class to write compressed data in a particular format. What we didn&#8217;t realize was that the Flume OutputFormat interface came with &#8230; <a href="http://thomasoandrews.com/wordpress/2012/03/15/java-interfaces-and-implicit-contracts/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>While working on a project using <a href="https://cwiki.apache.org/FLUME/">Apache Flume</a> to write data to Hadoop, we implemented our own Flume OutputFormat class to write compressed data in a particular format. What we didn&#8217;t realize was that the Flume <code>OutputFormat</code> interface came with an implicit contract.</p>
<p>The main interface method in an <code>OutputFormat</code> is:</p>
<pre>  public void format(OutputStream o, Event e) throws IOException;</pre>
<p>Now, the reality of the way Flume uses this interface is that it repeatedly calls the method on the same <code>OutputStream</code> with the same <code>OutputFormat</code>. For any period of time, the <code>OutputFormat</code> is only used with one OutputStream, and visa versa. For the lifetime of the <code>OutputStream</code>, it is only used with one <code>OutputFormat</code> object.</p>
<p>So you might think that you could buffer some output inside the <code>OutputFormat</code>. The problem here is that we only partially understood the usage of the <code>OutputFormat</code> interface in Flume.</p>
<p>In particular, Flume has an end-to-end reliability mode, which needs to know for sure if an <code>Event</code> has been written to a destination. If your <code>OutputFormat</code> buffers any data, then Flume has no way of knowing whether a particular <code>Event</code> got written to an <code>OutputStream</code>.</p>
<p>This means that any compression must be at best a per-record compression &#8211; the compression Codec must not have any buffered unwritten data when <code>format()</code> returns.</p>
<p>Interestingly, this was implicit in the interface, on some level &#8211; the fact that the <code>format()</code> method takes an <code>OutputStream</code> parameter would implicitly seem to imply that you shouldn&#8217;t buffer data. But the implementations generally assume the usage pattern above, keeping a reference to the current <code>OutputStream</code> for the duration. They just also did an internal &#8220;flush()&#8221; call which we tried to remove in our implementation.</p>
<p>See: <a href='https://issues.apache.org/jira/browse/FLUME-983'>https://issues.apache.org/jira/browse/FLUME-983</a></p>
]]></content:encoded>
			<wfw:commentRss>http://thomasoandrews.com/wordpress/2012/03/15/java-interfaces-and-implicit-contracts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IMDB gripe &#8211; episode searches</title>
		<link>http://thomasoandrews.com/wordpress/2011/10/30/imdb-gripe-episode-searches/</link>
		<comments>http://thomasoandrews.com/wordpress/2011/10/30/imdb-gripe-episode-searches/#comments</comments>
		<pubDate>Sun, 30 Oct 2011 22:13:00 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gripes]]></category>
		<category><![CDATA[interface]]></category>

		<guid isPermaLink="false">http://thomasoandrews.com/wordpress/2011/10/30/imdb-gripe-episode-searches/</guid>
		<description><![CDATA[One of the most common IMDB  use cases, for me, is: While watching an episode of, say, Law &#038; Order, I wonder, &#8220;Who is that actor?&#8221; If I go to the IMDB site, or use the iPad or Android app, &#8230; <a href="http://thomasoandrews.com/wordpress/2011/10/30/imdb-gripe-episode-searches/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>One of the most common <a href="http://www.imdb.com/" title="Internet Movie Database">IMDB</a>  use cases, for me, is: While watching an episode of, say, <em>Law &#038; Order</em>, I wonder, &#8220;Who is that actor?&#8221;</p>
<p>
If I go to the IMDB site, or use the iPad or Android app, a search for the episode title fails. I have to search for the show, navigate to the correct season (which is a guess, because I usually only know the year of broadcast,) and then browse the list to find the episode.</p>
<p>The workaround to this is to Google it. Add &#8220;site:imdb.com&#8221; to your Google search, as well as episode title and series name.</p>
<p>Another deficiency of the IMDB apps (but not the web interface,) is that if I find an actor, and his credits include, say, an episode of <em>House</em>, selecting that credit doesn&#8217;t take me to the episode, but to the <em>House</em> front page. That is hardly ever what I want.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasoandrews.com/wordpress/2011/10/30/imdb-gripe-episode-searches/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Apps Store Gripe</title>
		<link>http://thomasoandrews.com/wordpress/2011/10/09/google-apps-store-gripe/</link>
		<comments>http://thomasoandrews.com/wordpress/2011/10/09/google-apps-store-gripe/#comments</comments>
		<pubDate>Sun, 09 Oct 2011 18:55:34 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://thomasoandrews.com/wordpress/2011/10/09/google-apps-store-gripe/</guid>
		<description><![CDATA[On the home screen of Google&#8217;s Android App Store, they offer you an option of Apps, Games, Books, etc. But why does the Apps option still show me games?]]></description>
			<content:encoded><![CDATA[<p>On the home screen of Google&#8217;s Android App Store, they offer you an option of<br />
Apps, Games, Books, etc. But why does the Apps option still show me games?</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasoandrews.com/wordpress/2011/10/09/google-apps-store-gripe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unwelcome Surprises in Ruby</title>
		<link>http://thomasoandrews.com/wordpress/2011/10/08/unwelcome-surprises-in-ruby/</link>
		<comments>http://thomasoandrews.com/wordpress/2011/10/08/unwelcome-surprises-in-ruby/#comments</comments>
		<pubDate>Sat, 08 Oct 2011 18:23:49 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://thomasoandrews.com/wordpress/2011/10/08/unwelcome-surprises-in-ruby/</guid>
		<description><![CDATA[A good list of unfortunate surprises in Ruby.]]></description>
			<content:encoded><![CDATA[<p>A good list of <a href="http://ceaude.twoticketsplease.de/articles/ruby-and-the-principle-of-unwelcome-surprise.html">unfortunate surprises in Ruby.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://thomasoandrews.com/wordpress/2011/10/08/unwelcome-surprises-in-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Market Gripe</title>
		<link>http://thomasoandrews.com/wordpress/2011/09/22/android-market-gripe/</link>
		<comments>http://thomasoandrews.com/wordpress/2011/09/22/android-market-gripe/#comments</comments>
		<pubDate>Thu, 22 Sep 2011 17:25:04 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gripes]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://thomasoandrews.com/wordpress/2011/09/22/android-market-gripe/</guid>
		<description><![CDATA[Why does the Android Market app frequently tell me that an app update is available, but when I click on the app, it only gives me the option to open or uninstall the app? It often lists an app as &#8230; <a href="http://thomasoandrews.com/wordpress/2011/09/22/android-market-gripe/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Why does the Android Market app frequently tell me that an app update is available, but when I click on the app, it only gives me the option to open or uninstall the app?<br />
It often lists an app as having an update right after I&#8217;ve installed an update.  Irritating.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasoandrews.com/wordpress/2011/09/22/android-market-gripe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android &#8220;Silent Mode&#8221; Language Gripe</title>
		<link>http://thomasoandrews.com/wordpress/2011/08/28/android-silent-mode-language-gripe/</link>
		<comments>http://thomasoandrews.com/wordpress/2011/08/28/android-silent-mode-language-gripe/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 17:13:49 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gripes]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://thomasoandrews.com/wordpress/?p=133</guid>
		<description><![CDATA[Not sure if this is particular to Samsung Android devices or Android devices in general, but when I press and hold the Power/Lock button, the first item on the list of possible actions is the text &#8220;Silent Mode&#8221; in big &#8230; <a href="http://thomasoandrews.com/wordpress/2011/08/28/android-silent-mode-language-gripe/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a style="float: left;" href="http://droid-charge.net/wp-content/uploads/2011/06/Droid-Charge-silent-mode.jpg"><img class="alignnone size-full wp-image-135" title="Slient Mode Text" src="http://thomasoandrews.com/wordpress/wp-content/uploads/2011/08/Droid-Charge-silent-mode.jpg" alt="Silent Mode Text" width="203" height="339" /></a><br />
Not sure if this is particular to Samsung Android devices or Android devices in general, but when I press and hold the Power/Lock button, the first item on the list of possible actions is the text &#8220;Silent Mode&#8221; in big letters, and then in smaller letters, &#8220;Sound is ON.&#8221;</p>
<p>This is bad, because I see the word &#8220;ON,&#8221; which is in all-caps, and I think that &#8220;Silent Mode&#8221; is &#8220;ON,&#8221; when that is not what it means at all. The header and the secondary line are contradictory, leading to confusion. (Yes, it turns out that if the phone is actually in &#8220;Silent Mode,&#8221; the icon changes, but that&#8217;s not obvious to the new user, and it&#8217;s very easy to make this mistake.)</p>
<p>Also, why are &#8220;Silent&#8221; and &#8220;Airport&#8221; modes listed as &#8220;ON&#8221; or &#8220;OFF,&#8221; but &#8220;Data Network Mode&#8221; is &#8220;activated?&#8221; (I suspect the reason for this that Data Network Mode&#8221; costs the user money, but it&#8217;s not clear why the text is lower case, when &#8220;ON&#8221; and &#8220;OFF&#8221; are upper case.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasoandrews.com/wordpress/2011/08/28/android-silent-mode-language-gripe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Listen Gripes</title>
		<link>http://thomasoandrews.com/wordpress/2011/08/28/google-listen-gripes/</link>
		<comments>http://thomasoandrews.com/wordpress/2011/08/28/google-listen-gripes/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 17:03:45 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Gripes]]></category>
		<category><![CDATA[Android]]></category>

		<guid isPermaLink="false">http://thomasoandrews.com/wordpress/?p=127</guid>
		<description><![CDATA[I&#8217;d love to use Google Listen to listen to my favorite podcasts, but it has a number of irritations. The number one irritation is that when it is done playing a podcast, it immediately starts playing the next one in &#8230; <a href="http://thomasoandrews.com/wordpress/2011/08/28/google-listen-gripes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d love to use Google Listen to listen to my favorite podcasts, but it has a number of irritations.  The number one irritation is that when it is done playing a podcast, it immediately starts playing the next one in my queue, or, if the queue is empty, it starts playing a recently downloaded subscribed poodcat.  That is very, very, annoying.  When I navigate down to a particular podcast, say, Scientific American&#8217;s &#8220;60 Second Science,&#8221; and I request a particular episode to play, I certainly don&#8217;t expect, when it is done, that Listen will jump to the most recent &#8220;This American Life&#8221; or whatever.  I expect it will either (1) stop, or (2) play the next unplayed &#8220;60 Second Science&#8221; entry.  This is really bad user interface behavior.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasoandrews.com/wordpress/2011/08/28/google-listen-gripes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trying the new theme for WordPress</title>
		<link>http://thomasoandrews.com/wordpress/2011/07/06/trying-the-new-theme-for-wordpress/</link>
		<comments>http://thomasoandrews.com/wordpress/2011/07/06/trying-the-new-theme-for-wordpress/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 13:17:57 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://thomasoandrews.com/wordpress/?p=124</guid>
		<description><![CDATA[The picture in the header is of my step-father and dog Zoe in a canoe on Beech Hill Pond in Maine.]]></description>
			<content:encoded><![CDATA[<p>The picture in the header is of my step-father and dog Zoe in a canoe on Beech Hill Pond in Maine.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasoandrews.com/wordpress/2011/07/06/trying-the-new-theme-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Congruent Functions</title>
		<link>http://thomasoandrews.com/wordpress/2011/05/21/congruent-functions/</link>
		<comments>http://thomasoandrews.com/wordpress/2011/05/21/congruent-functions/#comments</comments>
		<pubDate>Sat, 21 May 2011 21:53:01 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Math]]></category>

		<guid isPermaLink="false">http://thomasoandrews.com/wordpress/?p=118</guid>
		<description><![CDATA[I&#8217;ve been working on a study of functions on integers that are generalizations of integer polynomials, which I call Congruent Functions.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been working on a study of functions on integers that are generalizations of integer polynomials, which I call <a href="http://www.thomasoandrews.com/math/congruent/">Congruent Functions.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://thomasoandrews.com/wordpress/2011/05/21/congruent-functions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

