<?xml version="1.0" encoding="UTF-8"?>
<!--Generated by Squarespace Site Server v5.9.2 (http://www.squarespace.com/) on Wed, 10 Mar 2010 03:16:35 GMT--><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rss="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:cc="http://web.resource.org/cc/"><rss:channel rdf:about="http://ctoforaday.com/blog/"><rss:title>Blog</rss:title><rss:link>http://ctoforaday.com/blog/</rss:link><rss:description></rss:description><dc:language>en-GB</dc:language><dc:date>2010-03-10T03:16:35Z</dc:date><admin:generatorAgent rdf:resource="http://www.squarespace.com/">Squarespace Site Server v5.9.2 (http://www.squarespace.com/)</admin:generatorAgent><rss:items><rdf:Seq><rdf:li rdf:resource="http://ctoforaday.com/blog/2010/2/4/open-issues.html"/><rdf:li rdf:resource="http://ctoforaday.com/blog/2010/2/1/weathrman-25-in-the-mix.html"/><rdf:li rdf:resource="http://ctoforaday.com/blog/2010/1/26/incremental-updates-weathrman-23.html"/><rdf:li rdf:resource="http://ctoforaday.com/blog/2010/1/17/weathrman-2-now-available-in-the-market.html"/><rdf:li rdf:resource="http://ctoforaday.com/blog/2010/1/16/weathrman-2-and-the-pile-of-shame.html"/><rdf:li rdf:resource="http://ctoforaday.com/blog/2010/1/10/weathrman-17-performance-optimisations.html"/><rdf:li rdf:resource="http://ctoforaday.com/blog/2010/1/8/coming-soon.html"/><rdf:li rdf:resource="http://ctoforaday.com/blog/2010/1/7/weathrman-15-hits-the-android-market-now.html"/><rdf:li rdf:resource="http://ctoforaday.com/blog/2010/1/6/weatherman-13-now-available-in-the-android-market.html"/><rdf:li rdf:resource="http://ctoforaday.com/blog/2010/1/5/guice-support-for-android-happy-me.html"/></rdf:Seq></rss:items></rss:channel><rss:item rdf:about="http://ctoforaday.com/blog/2010/2/4/open-issues.html"><rss:title>Open Issues</rss:title><rss:link>http://ctoforaday.com/blog/2010/2/4/open-issues.html</rss:link><dc:creator>Gregory Block</dc:creator><dc:date>2010-02-04T11:24:04Z</dc:date><dc:subject></dc:subject><content:encoded><![CDATA[<p>I&#8217;ve seen some strangeness lately, brought on by the fact that we&#8217;re no longer making direct use of Flickr&#8217;s interestingness to choose which photo to show.</p>
<p>These essentially all boil down to the same issue - search quality. &nbsp;I need to do more filtering of results to try to wipe out irrelevant or unwanted photos.</p>
<p>My current thoughts go like this:</p>
<p>
<ul>
<li>Add &#8220;underwear&#8221; to the negative keywords list. &nbsp;I don&#8217;t really want to see people in their undies on my phone.</li>
<li>Add &#8220;indoors&#8221; to the negative keywords list.</li>
<li>Remove images that weren&#8217;t given proper titles by the person who uploaded them. &nbsp;If you didn&#8217;t care enough to name your photo, I don&#8217;t care enough to see it. &nbsp;This includes all-numeric titles, and titles which contain only IMG_XXXX.</li>
</ul>
</p>
<p>There&#8217;ll be an update this weekend if all goes well.</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://ctoforaday.com/blog/2010/2/1/weathrman-25-in-the-mix.html"><rss:title>Weathrman 2.5: In the mix</rss:title><rss:link>http://ctoforaday.com/blog/2010/2/1/weathrman-25-in-the-mix.html</rss:link><dc:creator>Gregory Block</dc:creator><dc:date>2010-02-01T19:25:03Z</dc:date><dc:subject>flickr live wallpaper sunrise sunset weathrman yahoo</dc:subject><content:encoded><![CDATA[<p>So I&#8217;ve made a few more small tweaks since the 2.x series started, the biggest of which is in who provides our weather data.</p>
<p>Yahoo&#8217;s feed is damn good; it has flaws, but it also has huge benefits to us - the most important of which is that Yahoo&#8217;s weather API provides current conditions and the sunrise/sunset times in your location. &nbsp;This means that as of 2.4, we started preferring photographs of sunrises and sunsets whenever the weather was clear or cloudy.</p>
<p>As of 2.5, we&#8217;re again increasing the number of queries we perform on a search, and that&#8217;s going to increase the amount of time we spend updating; but the upside is that we&#8217;ve got more images to choose from, and as of now, we&#8217;re going to stop preferring what Flickr thinks is interesting, and start randomly selecting from the set of selections we have at the nearest location to you we can get them.</p>
<p>For a while, I was seeing the same photos, day after day - now, I don&#8217;t think I&#8217;ve seen the same thing twice. &nbsp;At the moment, I have a <a href="http://www.flickr.com/photos/maistora/3931394154/">particularly beautiful view of Leicester Square, taken by maistora</a>.</p>
<p>I look forward to hearing your opinions on the new version.</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://ctoforaday.com/blog/2010/1/26/incremental-updates-weathrman-23.html"><rss:title>Incremental updates: Weathrman 2.3</rss:title><rss:link>http://ctoforaday.com/blog/2010/1/26/incremental-updates-weathrman-23.html</rss:link><dc:creator>Gregory Block</dc:creator><dc:date>2010-01-26T22:22:13Z</dc:date><dc:subject>google preview weather weathrman yahoo</dc:subject><content:encoded><![CDATA[<p>Three more releases since I last posted; each picked up on small feature requests and things on my TODO list.</p>
<p>First, foremost, and most recent is the change to Flickr&#8217;s weather API. &nbsp;Google&#8217;s is free-text, and there&#8217;s no clear listing of what, exactly, it returns. &nbsp;Yahoo has a nice, clean API and a simple enumeration of possible conditions, making my life much, much easier when it comes matching conditions to an appropriate set of search terms.</p>
<p>Changes to the &#8220;about this image&#8221; view when you double-tap the screen now shows the weather conditions at the moment the image was gathered, which should help me diagnose when people see volcanos. &nbsp;Also, the weather condition associated with a volcano is now &#8220;Imminent volcanic death&#8221;. &nbsp;I look forward to seeing that bug report.</p>
<p>Last, there have been some changes to the way preview works. &nbsp;People expect an instantaneous preview, but as of right now, the process of fetching an image is anything but instant; also, we use lots of data, and Flickr&#8217;s APIs are blocked by some carriers. &nbsp;I&#8217;ve replaced preview with a carefully rendered view explaining these and other issues to users.</p>
<p>I&#8217;ve got some very positive feedback as of late, but as always, more is better. &nbsp;I look forward to hearing from you.</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://ctoforaday.com/blog/2010/1/17/weathrman-2-now-available-in-the-market.html"><rss:title>Weathrman 2 now available in the Market</rss:title><rss:link>http://ctoforaday.com/blog/2010/1/17/weathrman-2-now-available-in-the-market.html</rss:link><dc:creator>Gregory Block</dc:creator><dc:date>2010-01-17T14:50:19Z</dc:date><dc:subject></dc:subject><content:encoded><![CDATA[<p>Weathrman 2 is out. &nbsp;This release includes improvements pretty much all over the place, from what we search for on Flickr, how we search for it, which images we choose, what minimum image quality we&#8217;re willing to accept, new UI elements to help surface more detailed information, and lots more.</p>
<p>It also takes the text off of the background image, which leaves a prettier desktop, and we improve the image quality while we&#8217;re at it.</p>
<p>I look forward to your comments, which you can send using the <a href="http://ctoforaday.com/weathrman-support/">support form</a>, or <a href="http://www.flickr.com/services/apps/72157622978040501/">on Flickr</a>.</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://ctoforaday.com/blog/2010/1/16/weathrman-2-and-the-pile-of-shame.html"><rss:title>Weathrman 2, and the Pile of Shame</rss:title><rss:link>http://ctoforaday.com/blog/2010/1/16/weathrman-2-and-the-pile-of-shame.html</rss:link><dc:creator>Gregory Block</dc:creator><dc:date>2010-01-16T10:52:43Z</dc:date><dc:subject>darksiders flickr games orson scott card pile of shame weathrman</dc:subject><content:encoded><![CDATA[<p>Shadow Complex is done; and while I&#8217;m happy that I&#8217;ve managed to take another game off of the pile of shame, which is currently shrinking faster than its rate of growth, I feel a bit funny about playing an Orson Scott Card title, given his political slant. &nbsp;I wish Chair wouldn&#8217;t do that; it&#8217;s not like that ending was <em>so good</em> that they needed OSC&#8217;s involvement - that was one of the worst endings I&#8217;ve ever seen in a videogame.</p>
<p>You&#8217;re forgiven for thinking that there&#8217;s been no progress on Weathrman as of late; in fact, there&#8217;s quite a bit going on behind the scenes, including:</p>
<p>
<ul>
<li>Translated search terms, to pick up tourist photos. &nbsp;EFIGS first.</li>
<li>Status bar notification while the desktop is visible to provide better UI discoverability</li>
<li>UI showing details of the current photo and linking to it on Flickr</li>
<li>Some kind of resolution to the updater problem</li>
</ul>
</p>
<p>I still need some kind of resolution to the updater problem, but that might not happen until 3. &nbsp;At worst, I&#8217;ll build an intent that explains the nature of the application and gives the user a one-button way of udpating wallpaper.</p>
<p>But first, I need a haircut. &nbsp;And to start Darksiders.</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://ctoforaday.com/blog/2010/1/10/weathrman-17-performance-optimisations.html"><rss:title>Weathrman 1.7: Performance Optimisations</rss:title><rss:link>http://ctoforaday.com/blog/2010/1/10/weathrman-17-performance-optimisations.html</rss:link><dc:creator>Gregory Block</dc:creator><dc:date>2010-01-10T18:33:35Z</dc:date><dc:subject>ANR weathrman</dc:subject><content:encoded><![CDATA[<p>I noted that every now and then, Weathrman would get killed due to not being responsive enough to a change of wallpaper offsets (finger scroll, etc.), and decided to take a walk and look at the performance of what we were doing.</p>
<p>I hit three different kinds of issues:</p>
<ul>
<li>Unnecessary updates. &nbsp;If the offsets applied were the same as those currently set, I was forcing a redraw when there was nothing to draw.</li>
<li>Backing store size. &nbsp;Evidently, the &#8216;optimal&#8217; canvas depth is 565; up until now, I&#8217;ve been keeping ARGB_8888 canvases around. &nbsp;Shifting down to RGB_565 results in a massive improvement of the performance loop.</li>
<li>Image load. &nbsp;The flickr image was being loaded in ARGB_8888, even though we were never going to make use of the transparency data in the backing store. &nbsp;As the rest of the visual change has moved to 565, I do so here, as well.</li>
</ul>
<p>The net effect is to massively reduce the amount of time we spend rendering, and the size in memory of the backing store. &nbsp;In addition, we&#8217;re less peaky when we load a fresh image from Flickr.</p>
<p>All of this should result in fewer cases where Android decides to eject the live wallpaper due to ANR.</p>
<p>While I was at it, I added a few more tweaks; we now track how long we&#8217;ve been asleep for, and on becoming visible, reschedule our background timer. &nbsp;You should find that the app is much more likely to keep itself current, now, and should begin updating itself within moments of the phone &#8216;waking up&#8217;.</p>
<p>As always, I&#8217;m gagging for comments from users, here. &nbsp;Either leave them here, or <a href="http://ctoforaday.com/weathrman-support/">mail them using the support tool</a>. &nbsp;I look forward to hearing from you.</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://ctoforaday.com/blog/2010/1/8/coming-soon.html"><rss:title>Coming soon...</rss:title><rss:link>http://ctoforaday.com/blog/2010/1/8/coming-soon.html</rss:link><dc:creator>Gregory Block</dc:creator><dc:date>2010-01-08T10:11:23Z</dc:date><dc:subject></dc:subject><content:encoded><![CDATA[<p>So, ahead of me lay another weekend, which means I get to write some more code in between bouts of playing <a href="http://dragonage.bioware.com/">Dragon Age</a>&nbsp;and trying to figure out which of the raft of 3D TVs I&#8217;m going to buy&#8230;</p>
<p>On the cards is:</p>
<p>
<ul>
<li><strong>Lots of tests.<br /></strong>Right now, I&#8217;m testing non-android code fairly well, but I&#8217;m not currently thrilled with the state of testing of android-level functionality. &nbsp;To keep things clean, I&#8217;ll be isolating android behaviour into provider methods that return the answer I wanted - injecting, for example an @Named(SHOULD_UPDATE) boolean shouldUpdate, for example, which checks preferences and network availability before returning a simple, injected boolean, isolates the android weirdness from the perfectly normal code beneath.</li>
<li><strong>History.<br /><span style="font-weight: normal;">Right now, you only see a new image if Flickr decides there&#8217;s something more interesting than what you saw yesterday at the same time in the same place. &nbsp;Most of us spend a lot of time in the same places, day in, day out - but we always want to see new things. &nbsp;I&#8217;m going to keep a history of stuff I&#8217;ve seen recently, and exclude that. &nbsp;This means that double-tap won&#8217;t reload the current image, it&#8217;ll choose a new one.</span></strong></li>
</ul>
</p>
<p>At that point, I think I&#8217;ll be ready to re-look at the frontend/backend separation; it may well be time to start looking at a content provider implementation to wrap up the fetching behaviour and history implementation in a nice, neat package.</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://ctoforaday.com/blog/2010/1/7/weathrman-15-hits-the-android-market-now.html"><rss:title>Weathrman 1.5 hits the Android Market... now</rss:title><rss:link>http://ctoforaday.com/blog/2010/1/7/weathrman-15-hits-the-android-market-now.html</rss:link><dc:creator>Gregory Block</dc:creator><dc:date>2010-01-07T21:33:53Z</dc:date><dc:subject>flickr nudity search terms weathrman</dc:subject><content:encoded><![CDATA[<p>This update is fairly experimental. &nbsp;One small change - ensuring that we don&#8217;t try and fetch data when we haven&#8217;t got a connection established - should hopefully improve performance under edge-of-network behaviour.</p>
<p>The other is tougher. &nbsp;I&#8217;m making some changes to the queries we perform against Flickr&#8217;s API in the hopes of improving the quality of results, especially under clear conditions. &nbsp;Some of these are as follows:</p>
<p>
<ul>
<li>For queries performed at night, AND() in a set of words that are likely to be associated with night photography.</li>
<li>Add a list of &#8220;banned&#8221; terms, including &#8220;naked&#8221; and &#8220;nude&#8221;. &nbsp;I don&#8217;t mind looking at them on the web, but I don&#8217;t want someone&#8217;s naked butt hanging out of my phone. &nbsp;Your mileage may vary.</li>
<li>Separate daytime descriptions of &#8220;clear&#8221; from nighttime ones; include in those things you only see during the day/night cycle. &nbsp;(Nights, for example, might include stars, constellations, or the moon.)</li>
</ul>
</p>
<p>These and other tweaks will hopefully improve the quality of search results returned, and they should feel more relevant; the negative side of this is that it might be much harder to find a well tagged local photo.</p>
<p>If you have good ideas, as always, I&#8217;m listening.</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://ctoforaday.com/blog/2010/1/6/weatherman-13-now-available-in-the-android-market.html"><rss:title>Weatherman 1.3 now available in the Android Market</rss:title><rss:link>http://ctoforaday.com/blog/2010/1/6/weatherman-13-now-available-in-the-android-market.html</rss:link><dc:creator>Gregory Block</dc:creator><dc:date>2010-01-06T09:08:52Z</dc:date><dc:subject>android live wallpaper market release weather weathrman</dc:subject><content:encoded><![CDATA[<p><span class="full-image-float-left ssNonEditable"><span><a href="http://ctoforaday.com/weathrman"><img src="http://ctoforaday.com/storage/thumbnails/5541459-5258954-thumbnail.jpg?__SQUARESPACE_CACHEVERSION=1262769975277" alt="" /></a></span></span>I&#8217;m looking forward to getting some feedback. &nbsp;It&#8217;s been&#8230; I think I opened the github account on the 28th of December. &nbsp;I built and threw away a live background that ran cellular automata, which I really, really wanted to do, but Android&#8217;s drawing routines just aren&#8217;t good enough/fast enough to really allow for that. &nbsp;(The automata itself was happily running at 15fps, but the UI update was &lt;3. &nbsp;Boo.</p>
<p>A commit on the 30th of December is really the beginning of this app&#8217;s life. &nbsp;Today&#8217;s the 6th. &nbsp;In that time, I&#8217;ve done more obsessing than I care to admit; I&#8217;ve had a really good time building this, and while it&#8217;s not perfect, I&#8217;m a great deal happier with the state of modern Android development than a year ago, and a good chunk of that happiness didn&#8217;t actually come until after I pulled Guice in as a dependency. &nbsp;Shame that didn&#8217;t get built into a core part of the API, IMO, but I&#8217;m happy now.</p>
<p>I wanted to call this Weathr; that&#8217;s certainly the obvious thing. &nbsp;Weathrman is just a bit too long for my taste. &nbsp;But someone else appears to have had a similar idea, albeit for the web&#8230; it looks dead, but there&#8217;s no point risking it, and this does just as good a job.</p>
<p><span class="full-image-float-right ssNonEditable"><span><a href="Scan to find Weathrman in Android Market"><img src="http://chart.apis.google.com/chart?cht=qr&amp;chs=230x230&amp;chl=market%3A%2F%2Fsearch%3Fq%3Dpname%3Acom.ctoforaday.weathrman&amp;__SQUARESPACE_CACHEVERSION=1262770091757" alt="" /></a></span></span>I&#8217;m tracking exceptions and stuff to Analytics; I reeeeally wish there was a built-in exception logging API that pushed stack traces and bug reports back up to the marketplace. &nbsp;Still, I&#8217;m looking forward to seeing how this works in the wild, and whether or not it&#8217;s an utterly broken experience in cities less populated than London. &nbsp;I do my best to find local photos, but it will eventually do global searches&#8230;</p>
<p>I remain concerned over a few things. &nbsp;I&#8217;d like to find some way to re-set myself as the active wallpaper if I&#8217;m the active live wallpaper and I update the binary. &nbsp;If you know how to do that, ping me. &nbsp;I hate the fact that every time I update this thing I have to go back to setting it as the current wallpaper again.</p>
<p>And I really ought to test this on a phone that isn&#8217;t a Nexus One. &nbsp;Should you try this app on something other than an N1, do tell me what the experience was like. &nbsp;Some things, methinks, won&#8217;t make sense - I should probably be more careful than I am, for example, about which image size I choose for download, rather than always assuming that bigger is better.</p>
<p>I look forward to hearing from you.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded></rss:item><rss:item rdf:about="http://ctoforaday.com/blog/2010/1/5/guice-support-for-android-happy-me.html"><rss:title>Guice support for Android = Happy Me.</rss:title><rss:link>http://ctoforaday.com/blog/2010/1/5/guice-support-for-android-happy-me.html</rss:link><dc:creator>Gregory Block</dc:creator><dc:date>2010-01-05T15:00:21Z</dc:date><dc:subject></dc:subject><content:encoded><![CDATA[<p>There are a few things I just can&#8217;t live without in projects these days. &nbsp;These include stuff like <a href="http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/base/Function.html">Functions</a>, <a href="http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/base/Predicate.html">Predicates</a>, filtered and transformed <a href="http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html">Iterables</a>, the immutable collections implementations,&nbsp;and a raft of other stuff from the Google commons. &nbsp;If it wasn&#8217;t open-source, writing java code these days would feel like working with flint and stone.</p>
<p>Also included in that how-do-people-live-without-this-stuff list is decent dependency injection.</p>
<p>I didn&#8217;t notice until I was a long way into the project that <a href="http://code.google.com/p/google-guice/">Guice </a>now has support for Android. &nbsp;At the moment, I&#8217;m using <a href="http://code.google.com/p/google-guice/wiki/Guice20">Guice 2.0</a> without AOP, Multibindings support, and assisted inject, and quite frankly, the code is almost instantly better for it. &nbsp;Constructors now only contain what the local object needs to use to do its job, and everything is an awful lot more readable.</p>
<p>It&#8217;s also nice not to have to pass around awareness of the fact that Android&#8217;s context classes are a pig&#8217;s ear of methods. &nbsp;There&#8217;s nothing wrong with using composition instead of inheritance, folks; your application classes <a href="http://developer.android.com/reference/android/content/Context.html">shouldn&#8217;t need to be a combination of implementations every single interface in the SDK</a>. &nbsp;That&#8217;s not discoverable, that&#8217;s just a wall of noise.</p>
<p>Anyways, four hours of un-hardwiring class construction resulted in a much easier second refactoring to start splitting foreground from background services, which took all of an hour and only involved creating a new module for the new service class, and poof!</p>
<p>I still wonder how people get on without DI, and why on earth this isn&#8217;t core java yet. &nbsp;Mind you, I wonder that about Joda, too. &nbsp;And closures. &nbsp;And just about any other modern feature that doesn&#8217;t make it into the now-overpoliticized trial by fire of the JDK.</p>
]]></content:encoded></rss:item></rdf:RDF>