<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DU4NRns9cSp7ImA9WhBVEkk.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628</id><updated>2013-04-17T20:19:57.569-05:00</updated><category term="logging" /><category term="prompt" /><category term="clustering" /><category term="multitasking" /><category term="news" /><category term="DemoCamp" /><category term="bug" /><category term="soa" /><category term="stuff" /><category term="community" /><category term="toronto" /><category term="privacy" /><category term="adobe" /><category term="reply" /><category term="analytics" /><category term="algorithms" /><category term="linkedin" /><category term="investigation" /><category term="cocoa" /><category term="sustainability" /><category term="jsr" /><category term="gratuitous" /><category term="extension" /><category term="resources" /><category term="bird" /><category term="oreilly" /><category term="email" /><category term="rogers" /><category term="teamdynamics" /><category term="development environment" /><category term="plsql" /><category term="visualization" /><category term="Ben Vinegar" /><category term="java" /><category term="schedule" /><category term="waste" /><category term="hci" /><category term="government" /><category term="concurrency" /><category term="superfriends" /><category term="carbon" /><category term="dumbster" /><category term="#hohoto" /><category term="product management" /><category term="groovy" /><category term="delicious" /><category term="martin pietrzak" /><category term="knight's tour" /><category term="command-line" /><category term="unit testing" /><category term="starling" /><category term="bespin" /><category term="design" /><category term="fix" /><category term="moo" /><category term="blogging" /><category term="conferences" /><category term="json" /><category term="open-source" /><category term="google" /><category term="google i/o" /><category term="ruby" /><category term="virtualization" /><category term="technology" /><category term="jon udell" /><category term="cluster" /><category term="shaun macdonald" /><category term="messaging" /><category term="quote" /><category term="serialization" /><category term="os x" /><category term="cxf" /><category term="oddity" /><category term="demo" /><category term="osx" /><category term="java me" /><category term="leadership" /><category term="application server" /><category term="internationalization" /><category term="csharp" /><category term="lazyweb" /><category term="ios" /><category term="plugin" /><category term="mashup arts" /><category term="source control" /><category term="image" /><category term="productivity" /><category term="canada" /><category term="update" /><category term="coverage" /><category term="specification" /><category term="spring framework" /><category term="geronimo" /><category term="macbook pro" /><category term="startup" /><category term="DemoCamp Toronto 21" /><category term="music" /><category term="elmcity" /><category term="jquery" /><category term="open government" /><category term="sql" /><category term="jroller" /><category term="twitter" /><category term="drools" /><category term="team" /><category term="standards" /><category term="jruby" /><category term="simpledb" /><category term="writing" /><category term="management" /><category term="mobile" /><category term="continuous integration" /><category term="installation" /><category term="finance" /><category term="Guestlist" /><category term="documentation" /><category term="democamp 21" /><category term="web" /><category term="google appengine" /><category term="attribution" /><category term="video game" /><category term="art" /><category term="incentive" /><category term="phone" /><category term="presentation" /><category term="grails" /><category term="object model" /><category term="performance" /><category term="tv" /><category term="freelance" /><category term="safari" /><category term="utility" /><category term="xml" /><category term="jcp" /><category term="scala" /><category term="mysql" /><category term="qualitiy" /><category term="local" /><category term="google-reader" /><category term="metro" /><category term="furniture" /><category term="rspec" /><category term="android" /><category term="credits" /><category term="transparency" /><category term="jpa" /><category term="software" /><category term="persistence" /><category term="release" /><category term="requirements" /><category term="widget" /><category term="journalism" /><category term="itunes" /><category term="enums" /><category term="globalize" /><category term="resource filtering" /><category term="change" /><category term="jaxen" /><category term="web development" /><category term="jira" /><category term="launcher" /><category term="real estate" /><category term="social" /><category term="varargs" /><category term="photos" /><category term="bentlegen" /><category term="subetha" /><category term="user-interface" /><category term="console" /><category term="wordle" /><category term="jaf" /><category term="analysis" /><category term="amazon" /><category term="browser" /><category term="batteries" /><category term="script" /><category term="ci" /><category term="versions" /><category term="windows" /><category term="open" /><category term="#toronto" /><category term="reloading" /><category term="operating system" /><category term="xom" /><category term="oss" /><category term="ant" /><category term="#dct21" /><category term="artanywhere" /><category term="personal" /><category term="tool" /><category term="php" /><category term="patterns" /><category term="process" /><category term="monitoring" /><category term="tactilepro" /><category term="Christine Renaud" /><category term="life" /><category term="log4j" /><category term="cargo" /><category term="grassroots" /><category term="praxis" /><category term="java management extensions" /><category term="appengine" /><category term="homestars.com" /><category term="generics" /><category term="abstraction" /><category term="search" /><category term="ror" /><category term="telus" /><category term="mozilla" /><category term="failure" /><category term="ci_reporter" /><category term="gartner" /><category term="ignite" /><category term="case study" /><category term="amqp" /><category term="#changegovca" /><category term="tools" /><category term="mock objects" /><category term="jaxb" /><category term="books" /><category term="development" /><category term="jersey" /><category term="maven" /><category term="birds" /><category term="events" /><category term="parsing" /><category term="service" /><category term="domain-specific-language" /><category term="rcov" /><category term="chrome" /><category term="osgi" /><category term="configuration" /><category term="rss" /><category term="rails" /><category term="video" /><category term="leaky abstraction" /><category term="carrier update" /><category term="enunciate" /><category term="table" /><category term="reading" /><category term="theme" /><category term="data model" /><category term="azure" /><category term="holiday" /><category term="humour" /><category term="jax-rs" /><category term="codegear" /><category term="diff" /><category term="lift" /><category term="doors open" /><category term="rest" /><category term="ui" /><category term="problems" /><category term="build" /><category term="drm" /><category term="pain" /><category term="dsl" /><category term="marketing" /><category term="landfill" /><category term="matias" /><category term="broker" /><category term="project" /><category term="error" /><category term="caucho" /><category term="feeds" /><category term="packaging" /><category term="support" /><category term="interaction testing" /><category term="visual voicemail" /><category term="client" /><category term="nutrition" /><category term="ec2" /><category term="ebay" /><category term="mock testing" /><category term="microbenchmark" /><category term="domain-specific languages" /><category term="tomcat" /><category term="advertising" /><category term="event" /><category term="zoocasa" /><category term="tumblr" /><category term="png" /><category term="atlassian" /><category term="pair-programming" /><category term="green" /><category term="excel" /><category term="object-relational mapping" /><category term="planning" /><category term="digital-asset-management" /><category term="jetty" /><category term="saul colt" /><category term="user interface" /><category term="eclemma" /><category term="remoting" /><category term="learning" /><category term="sofftware" /><category term="hardware" /><category term="tapestry" /><category term="pitfalls" /><category term="rating" /><category term="ui testing" /><category term="air" /><category term="cloud computing" /><category term="photography" /><category term="remote" /><category term="mac os x" /><category term="version" /><category term="web services" /><category term="hpricot" /><category term="distributed computing" /><category term="gae" /><category term="DemoCamp Toronto" /><category term="sidecar" /><category term="electronics" /><category term="montreal" /><category term="ruby on rails" /><category term="wireless" /><category term="#changecamp" /><category term="ireland" /><category term="mysqladmin" /><category term="multi-tasking" /><category term="career" /><category term="bell" /><category term="veniceproject" /><category term="joost" /><category term="community relations" /><category term="qcon" /><category term="macos" /><category term="ignite toronto 1" /><category term="swing" /><category term="#democamp" /><category term="recruiting" /><category term="#mesh" /><category term="gwt" /><category term="content syndication" /><category term="open source" /><category term="renovation" /><category term="validation" /><category term="home" /><category term="feedroom" /><category term="firefox" /><category term="google docs" /><category term="test" /><category term="travel" /><category term="iphone" /><category term="dct21" /><category term="formatter" /><category term="mocking" /><category term="spring" /><category term="keyboard" /><category term="cathedral" /><category term="homestars" /><category term="eclipse" /><category term="aws" /><category term="clover" /><category term="web software development sproutcore" /><category term="laptop" /><category term="humor" /><category term="business" /><category term="metablogging" /><category term="vmware" /><category term="customer service" /><category term="cloud" /><category term="game" /><category term="google web toolkit" /><category term="links" /><category term="goto" /><category term="flex" /><category term="hessian" /><category term="oracle" /><category term="wiser" /><category term="dam" /><category term="hiring" /><category term="lightroom" /><category term="facetious" /><category term="photo" /><category term="flexbuilder" /><category term="breeze" /><category term="open-standards" /><category term="brms" /><category term="bamboo" /><category term="atom" /><category term="gillette" /><category term="warranty" /><category term="testing" /><category term="architecture" /><category term="multimodule" /><category term="ide" /><category term="pricing" /><category term="media" /><category term="responsibility" /><category term="contract" /><category term="object-oriented" /><category term="debugging" /><category term="apple" /><category term="dotNet" /><category term="ipad" /><category term="telecom" /><category term="subethasmtp" /><category term="environment" /><category term="conference" /><category term="wegowego" /><category term="3G" /><category term="roa" /><category term="transactions" /><category term="agile" /><category term="python" /><category term="comparison" /><category term="brian sharwood" /><category term="javaone" /><category term="internet" /><category term="ignite toronto" /><category term="jmx" /><category term="app engine" /><category term="dan wood" /><category term="code review" /><category term="Alan Lynse" /><category term="database" /><category term="language design" /><category term="apache" /><category term="linux" /><category term="growl" /><category term="hibernate" /><category term="office" /><category term="soap" /><category term="cygwin" /><category term="law" /><category term="ajax" /><category term="politics" /><category term="objects" /><category term="plaster" /><category term="mapping" /><category term="television" /><category term="cascada" /><category term="infoq" /><category term="mayormiller" /><category term="restlet" /><category term="jobs" /><category term="cascada mobile" /><category term="katamari" /><category term="orm" /><category term="razor" /><category term="jboss" /><category term="religion" /><category term="microsoft" /><category term="habits" /><category term="collections" /><category term="fail" /><category term="profiling" /><title>Furious Purpose</title><subtitle type="html">Software, business, photography, politics, life.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://furiouspurpose.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>244</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/FuriousPurpose" /><feedburner:info uri="furiouspurpose" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;A0cBRXs_cCp7ImA9WhZXFUg.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-2002252780877892995</id><published>2011-05-04T20:30:00.001-05:00</published><updated>2011-05-04T20:30:54.548-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-04T20:30:54.548-05:00</app:edited><title>Face to Face</title><content type="html">&lt;div style="margin: 0 0 10px 0; padding: 0; font-size: 0.8em; line-height: 1.6em;"&gt;&lt;a href="http://www.flickr.com/photos/diathesis/5689027662/" title="Face to Face"&gt;&lt;img src="http://farm6.static.flickr.com/5190/5689027662_dc604ca0c4.jpg" alt="Face to Face by diathesis" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;span style="margin: 0;"&gt;&lt;a href="http://www.flickr.com/photos/diathesis/5689027662/"&gt;Face to Face&lt;/a&gt;, a photo by &lt;a href="http://www.flickr.com/photos/diathesis/"&gt;diathesis&lt;/a&gt; on Flickr.&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Back in December, we lured a black squirrel onto our porch by putting a line of nuts onto the railing so that Christophe could watch him eat.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/P9QkwpNnRwQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/2002252780877892995/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=2002252780877892995" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/2002252780877892995?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/2002252780877892995?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/P9QkwpNnRwQ/face-to-face.html" title="Face to Face" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm6.static.flickr.com/5190/5689027662_dc604ca0c4_t.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2011/05/face-to-face.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEDSXY7cSp7ImA9WxFaFUk.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-6146341333414805870</id><published>2010-07-07T10:20:00.009-05:00</published><updated>2010-07-19T09:11:18.809-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-19T09:11:18.809-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="web development" /><category scheme="http://www.blogger.com/atom/ns#" term="gwt" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="google web toolkit" /><category scheme="http://www.blogger.com/atom/ns#" term="google i/o" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><title>GWT 2.0 and 2.1 at I/O 2010</title><content type="html">&lt;div&gt;&lt;div&gt;The &lt;a href="http://googlewebtoolkit.blogspot.com/2010/07/gwt-21-milestone-2-is-now-available.html"&gt;release of GWT 2.1 M2&lt;/a&gt; reminded me that I hadn't yet watched the GWT presentations from Google I/O 2010, so I queued them up and have been watching them while doing some incredibly dull (but unfortunately necessary) data mapping.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=T_CLzgEL7FA&amp;amp;feature=channel"&gt;GWT Testing Best Practices&lt;/a&gt; was of immediate interest to me, as this is something that I've put a fair amount of mental effort into as well.  This is a good introduction to testing in GWT and makes several of the points that I would have as well.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In a nutshell, GWTTestCase is comprehensive, but terribly slow, so emphasize junit tests.  In order to emphasize unit tests, you must be able to isolate your code from the GWT framework, in particular widget classes that use JSNI and rely on the DOM.  When attempting to isolate code for testability, dependency injection is important.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In addition to that, the presentation shows some useful examples of writing testable views, talks about testing asynchronous logic, and suggests a different mode of integrating with handlers than Ray Ryan did a year ago (setClickHandler() vs. getButton()).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=M5x6E6ze1x8&amp;amp;feature=player_embedded"&gt;Architecting GWT Applications for Production&lt;/a&gt; is another Ray Ryan presentation which is almost a sequel to his presentation from I/O 2009. It's mostly a rough-and-ready tour of some of the changes coming up in GWT 2.1 with respect to an application framework, as well as the benefits you should expect to get from that. There are some parts of the presentation that apply to changes in GWT 2.0 as well, so even if you're not ready to get into GWT 2.1, you may learn something useful from this.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=g2XclEOJdIc&amp;amp;feature=channel"&gt;GWT's UI Overhaul&lt;/a&gt; talks about a bunch of the UI changes in GWT 2.0 and 2.1, from high-level layout to cell rendering. Useful to get in touch with the changes already present in 2.0 and coming in 2.1.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=73IyVBMf2uY&amp;amp;feature=channel"&gt;Measure in Milliseconds: Meet Speed Tracer&lt;/a&gt; is another presentation that ties in heavily to a presentation from I/O 2009. This time around, it's mostly a quick intro to why performance matters (primarily to usability), what Speed Tracer is and how it works, and then delves into specific examples.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Happily, it's these examples that are the most interesting to me, so I think the emphasis of the presentation is just right. 'The Mysterious Case of Too Much Layout' is a good example of the dangers of premature optimization, and why it's important to use a profiling tool that works with the client-side of web application development as well.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It's interesting to see they've extended this from being a primarily client-side profiler to supporting integration with AppEngine and SpringSource TC for integration on the server-side.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=qT6ZsQBM7kY&amp;amp;feature=related"&gt;Faster Apps Faster&lt;/a&gt; talks about how the GWT compiler makes your applications faster, and how to speed up the compilation process.  I've read a fair bit about the GWT compiler, but this kind of detail is interesting for people who aren't aware of how much GWT optimizes Javascript, and why that might be faster than hand-written code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The suggestions for speeding up the GWT compilation process are good: reducing permutations, draft compilation (GWT 2.0), RAID/SSD, 64-bit JVM, etc.  Apparently GWT can do a distributed build as well, although it looks like setting it up will be a little work.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=USlUYkBHiHA&amp;amp;feature=player_embedded"&gt;Architecting for Performance with GWT&lt;/a&gt; has two presenters, Joel Webber and Adam Schuck.  Joel's on the GWT team, and has the builder-of-framework perspective, while Adam works on Wave, and approaches it from a user-of-framework perspective.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are some interesting examples of enhancements the Wave Team has done, like skipping the selection script during initial startup and loading data in parallel with the Javascript, as well as generalized suggestions such as batching requests to avoid sending a series of serialized data requests, or structuring your RPC interface to deliver all the data you need in a single call.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There's also more talk about measuring performance on a continuous manner, which dovetails nicely with speed tracer's new headless capabilities.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=aW--Wlf9EFs&amp;amp;feature=channel"&gt;GWT + HTML5 Can Do What?!&lt;/a&gt; didn't really teach me anything that I expect to use anytime soon, but it was nice to see the GWT Quake port in action, and hear a little more about it.  I am interested to see what comes of GWT + HTML5, and the capabilities that adds.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://code.google.com/events/io/2010/sessions/gwt-linkers-webworkers-extensions.html"&gt;GWT Linkers&lt;/a&gt; is fairly low-level for some of you. In essence, it's targeting building something other than a classical web application using GWT, like Chrome Extensions, HTML5 Web Workers, etc. If you want to build something like this, you'll want to learn about GWT linkers, how they work, what they do, and how to write your own.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/yBwNq7HIpP4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/6146341333414805870/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=6146341333414805870" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/6146341333414805870?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/6146341333414805870?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/yBwNq7HIpP4/gwt-20-and-21-at-io-2010.html" title="GWT 2.0 and 2.1 at I/O 2010" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2010/07/gwt-20-and-21-at-io-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UHQ3k8cSp7ImA9WxFUFEU.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-5314461003017535968</id><published>2010-06-25T12:59:00.001-05:00</published><updated>2010-06-25T13:07:12.779-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-25T13:07:12.779-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="canada" /><category scheme="http://www.blogger.com/atom/ns#" term="bell" /><category scheme="http://www.blogger.com/atom/ns#" term="telus" /><category scheme="http://www.blogger.com/atom/ns#" term="telecom" /><category scheme="http://www.blogger.com/atom/ns#" term="rogers" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><category scheme="http://www.blogger.com/atom/ns#" term="3G" /><title>Canadian iPad Data Plans Compared</title><content type="html">I was curious about how the iPad plans that were announced by Bell, Rogers and Telus compared, where the break points were, and so forth. So I threw together a &lt;a href="http://bit.ly/aIhhlp"&gt;Google Spreadsheet&lt;/a&gt; to do some quick math on the plans. Assuming I read the plan rules correctly, I think the lessons are as follows:&lt;div&gt;&lt;ul&gt;&lt;li&gt;Bell and Rogers have eerily similar plans, like one copied the other, or both took a suggestion from Apple.&lt;/li&gt;&lt;li&gt;The $15 plan offered by Bell and Rogers saves $5 over the $20 plan from Telus until you use more than 250MB.&lt;/li&gt;&lt;li&gt;Telus' one-price plus overage model is cheaper than Bell and Rogers' $35 plan from 250MB-800MB.&lt;/li&gt;&lt;li&gt;From 800MB to 5GB, Bell and Rogers $35 plan seems to be the way to go, because you'll be paying more than $35 by the time you pay Telus for your overage.&lt;/li&gt;&lt;li&gt;After 5GB, it seems like Telus' plan, which maxes out at $50, would be cheaper than paying Rogers or Bell for another $35/5GB, assuming Telus doesn't cut you off. &lt;/li&gt;&lt;/ul&gt;&lt;div&gt;None of the plans spell out the edge cases:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Telus does have fine print saying "Subject to a monthly data limit of 5GB", but they're not very clear what happens if you hit that limit.  &lt;/li&gt;&lt;li&gt;Neither Rogers nor Bell explains what happens when you reach your cutoff.  If you run out of data on the $15 plan, can you upgrade to the $35 plan for $20, keeping the original timeframe?  Can you buy a new 30-day window of $15?&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Based on my iPhone data usage, if I were to acquire and use an iPad regularly, I think I could probably live within 250MB, although if I went over occasionally, it might be simpler to have Telus' plan. I suspect I wouldn't go over 800MB.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/qQ8I-NE3DrE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/5314461003017535968/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=5314461003017535968" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/5314461003017535968?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/5314461003017535968?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/qQ8I-NE3DrE/canadian-ipad-data-plans-compared.html" title="Canadian iPad Data Plans Compared" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2010/06/canadian-ipad-data-plans-compared.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQNSH4yeyp7ImA9WxFVFkQ.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-2387764929641705092</id><published>2010-06-16T08:59:00.005-05:00</published><updated>2010-06-16T09:26:39.093-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-06-16T09:26:39.093-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="multitasking" /><category scheme="http://www.blogger.com/atom/ns#" term="ios" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="ipad" /><title>The Future of iPhone Multi-Tasking</title><content type="html">&lt;p&gt;Marco Arment on &lt;a href="http://www.marco.org/684391075"&gt;iPhone Multitasking&lt;/a&gt;:&lt;br /&gt; &lt;/p&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span&gt;&lt;span&gt;One of my most common feature requests is for Instapaper to periodically download articles in the background. A lot of people forget to launch the app to let it download content before going underground or boarding a plane.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;    &lt;span&gt;&lt;span&gt;I’ve already received multiple emails from people who are excited for iOS 4’s multitasking because they can’t wait for this to finally stop being an issue, because they think Instapaper will be able to download articles periodically in the background.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;    &lt;span&gt;&lt;span&gt;It’s painful to respond, crushing their hopes, to tell them that the iOS multitasking system doesn’t allow me to do that.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;   &lt;div&gt;&lt;br /&gt;   The solution he proposes:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;   &lt;ul style="margin-top: 0px; margin-bottom: 1em;"&gt;&lt;br /&gt;   &lt;li&gt;The application gives the system an NSURLRequest and an ideal refresh interval, such as every 30 minutes, every few hours, or every day.&lt;/li&gt;    &lt;li&gt;iOS executes that request, whenever it deems that it should, and saves the response to a local file.&lt;/li&gt;    &lt;li&gt;Next time the application launches, iOS hands it an NSData of the most recent response.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;    It's an improvement, although it doesn't go far enough for me. There's a couple of enhancements I'd love to see.&lt;/div&gt;   &lt;div&gt;&lt;br /&gt;   &lt;b&gt;Idle Processing&lt;/b&gt;&lt;br /&gt;  &lt;/div&gt;&lt;div&gt;If the user isn't actively using the phone when the data is retrieved, it would be great if the application were given a chance to process that information, and possibly notify the user (even if this requires user opt-in).&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;  &lt;div&gt;For instance, if you've got a stock application and it periodically retrieves the prices of the equities within your portfolio, it would be nice if it could be set to notify you when prices cross certain thresholds, or change dramatically, rather than having to launch the application before it's given a chance to process the data.&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;  &lt;div&gt;&lt;b&gt;Server Push&lt;/b&gt;&lt;br /&gt;  &lt;/div&gt;&lt;div&gt;The polling model will do, but since the iPhone already supports push notifications, it seems like supporting push notifications whose target is an application rather than the user would also be handy. Instead of having your stock application download regular price updates, the server-side element could watch stock prices, looking for price changes of enough difference to matter, then push those prices to your application.&lt;br /&gt;  &lt;/div&gt;&lt;br /&gt;  &lt;div&gt;&lt;b&gt;No Guarantees&lt;/b&gt;&lt;br /&gt;  &lt;/div&gt;&lt;div&gt;&lt;div&gt;As with the rest of Marco's solution, I think it's reasonable to give iOS some decision-making authority with respect to when and how these things are processed. I don't expect the phone to run out making regular requests to the server or sending lots of push notifications and firing up applications when the battery's already low.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;The Future of iPhone Multitasking&lt;/b&gt;&lt;/div&gt;&lt;div&gt;I suspect Apple has already considered approaches like what Marco has proposed and the enhancements I'm suggesting here.  I also suspect that they've decided explicitly not to take these approaches for the time being.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I can live with that.  They're expanding on multitasking for iOS4, and applications will take some time to catch up.  Once developers, consumers and Apple have had the chance to take iOS 4 multitasking in hand, there will be a chance to expand upon that further, and I think the proposal offered by Marco and the enhancements I'm suggesting here are good examples of the directions they can take while still taking a cautious approach to multi-tasking in iOS.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/W70P69EFh60" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/2387764929641705092/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=2387764929641705092" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/2387764929641705092?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/2387764929641705092?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/W70P69EFh60/marco-arment-on-iphone-multitasking-one.html" title="The Future of iPhone Multi-Tasking" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2010/06/marco-arment-on-iphone-multitasking-one.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYFSHc5eyp7ImA9WxFSF00.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-2010816732468528524</id><published>2010-04-19T14:39:00.003-05:00</published><updated>2010-04-19T14:41:59.923-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-19T14:41:59.923-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="carrier update" /><category scheme="http://www.blogger.com/atom/ns#" term="telus" /><category scheme="http://www.blogger.com/atom/ns#" term="visual voicemail" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title>Telus iPhone Visual Voicemail</title><content type="html">I was pleased to see that Telus &lt;a href="http://www.iphoneincanada.ca/iphone-news/telus-officially-launches-iphone-visual-voicemail/"&gt;announced&lt;/a&gt; and rolled out Visual Voicemail, as was implied in the Carrier Update file I &lt;a href="http://furiouspurpose.blogspot.com/2010/03/telus-iphone-carrier-update.html"&gt;received and analyzed&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I guess that means I may well look into the next carrier update file I receive, since the first one gave me a clue to an upcoming rollout.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/yRJI8G8HcDw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/2010816732468528524/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=2010816732468528524" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/2010816732468528524?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/2010816732468528524?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/yRJI8G8HcDw/telus-iphone-visual-voicemail.html" title="Telus iPhone Visual Voicemail" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2010/04/telus-iphone-visual-voicemail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04ARH88cSp7ImA9WxFTEk4.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-8119852447884785588</id><published>2010-04-02T13:08:00.002-05:00</published><updated>2010-04-02T13:12:25.179-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-02T13:12:25.179-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gwt" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="os x" /><category scheme="http://www.blogger.com/atom/ns#" term="mac os x" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="safari" /><category scheme="http://www.blogger.com/atom/ns#" term="google web toolkit" /><title>OS X 10.6.3 and GWT 1.x</title><content type="html">Safari 4.0.4, when it came out, had an issue with respect to GWT development, causing the GWT hosted mode browser to crash on load.  As a result, I didn't take the Safari 4.0.4 update.  When Safari 4.0.5 came out, reports indicated that it wasn't any better, despite the fact that some of the interim builds of WebKit had been used successfully, so I didn't take that update either.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Unfortunately, I did take OS X 10.6.3, which apparently came down with Safari 4.0.4 and broke my GWT development environment.  I tried upgrading to Safari 4.0.5, but had no success.  Eventually, I settled on &lt;a href="http://code.google.com/p/google-web-toolkit/issues/detail?id=4220"&gt;the workaround&lt;/a&gt; that others were using with the WebKit nightly build (comment #22 on that issue) which seems to have solved my problems.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I did also briefly look into upgrading my current project to GWT 2.0.3; seems like it works pretty well, but we're coming up on a release point and it's an awkward time to do a framework upgrade.  I'm hoping that by broadcasting this, some of you will avoid this same path.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/kvRpKXy8jgQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/8119852447884785588/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=8119852447884785588" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/8119852447884785588?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/8119852447884785588?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/kvRpKXy8jgQ/os-x-1063-and-gwt-1x.html" title="OS X 10.6.3 and GWT 1.x" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2010/04/os-x-1063-and-gwt-1x.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AER308cCp7ImA9WxBbGE4.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-1133885759404368355</id><published>2010-03-17T09:02:00.002-05:00</published><updated>2010-03-17T09:21:46.378-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-17T09:21:46.378-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="carrier update" /><category scheme="http://www.blogger.com/atom/ns#" term="telus" /><category scheme="http://www.blogger.com/atom/ns#" term="investigation" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title>Telus iPhone Carrier Update</title><content type="html">This morning, iTunes warned me that there was a carrier update available for my iPhone. The 'more info' button &lt;a href="http://support.apple.com/kb/HT1970"&gt;opened a link&lt;/a&gt; that explained the process, but didn't offer any details about what the update contained, other than updates with regard to my settings for my carrier, Telus.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the spirit of interested inquiry, I thought I'd &lt;a href="http://arstechnica.com/apple/news/2009/02/iphone-carrier-update-boring.ars"&gt;follow in the footsteps of others&lt;/a&gt;, and take a peek inside the update file.  I started by copying the carrier file to a temporary folder and extracting the contents:&lt;/div&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ mkdir ~/telus&lt;br /&gt;$ cp ~/Library/iTunes/iPhone\ Carrier\ Support/Telus_ca.ipcc ~/telus/telus.zip$ cd ~/telus$ unzip telus.zip&lt;br /&gt;Archive:  telus.zip&lt;br /&gt;   creating: Payload/&lt;br /&gt;   creating: Payload/Telus_ca.bundle/&lt;br /&gt;  inflating: Payload/Telus_ca.bundle/carrier.plist  &lt;br /&gt;  inflating: Payload/Telus_ca.bundle/Default_CARRIER_TELUS.png  &lt;br /&gt;  inflating: Payload/Telus_ca.bundle/FSO_CARRIER_TELUS.png  &lt;br /&gt;  inflating: Payload/Telus_ca.bundle/Info.plist  &lt;br /&gt;  inflating: Payload/Telus_ca.bundle/version.plist  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;After that, I took a quick peek at the carrier.plist, but it was in binary format, so I had to convert the .plist files to XML:&lt;/div&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ plutil -convert xml1 *.plist&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;That let me take a look at the .plist files.  The info.plist and version.plist files were very dull, looks like metadata about the bundle.  The carrier.plist file was slightly more interesting:&lt;/div&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;dict&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;BookmarkURLs&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;array&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;BookmarkName&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;TELUS Web&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;BookmarkURL&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;http://m.telusmobility.com/homepage&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt; &amp;lt;/array&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;CarrierBookmarks&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;array&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;Title&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;Web TELUS&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;URL&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;http://m.telusmobility.com/homepage&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt; &amp;lt;/array&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;CarrierName&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;string&amp;gt;TELUS&amp;lt;/string&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;IntlDataRoamingSwitch&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;true/&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;MMS&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;dict&amp;gt;&lt;br /&gt;  &amp;lt;key&amp;gt;GroupModeEnabled&amp;lt;/key&amp;gt;&lt;br /&gt;  &amp;lt;false/&amp;gt;&lt;br /&gt;  &amp;lt;key&amp;gt;MMSC&amp;lt;/key&amp;gt;&lt;br /&gt;  &amp;lt;string&amp;gt;http://aliasredirect.net/proxy/mmsc&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;key&amp;gt;MaxRecipients&amp;lt;/key&amp;gt;&lt;br /&gt;  &amp;lt;integer&amp;gt;20&amp;lt;/integer&amp;gt;&lt;br /&gt;  &amp;lt;key&amp;gt;Proxy&amp;lt;/key&amp;gt;&lt;br /&gt;  &amp;lt;string&amp;gt;74.49.0.18:80&amp;lt;/string&amp;gt;&lt;br /&gt; &amp;lt;/dict&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;MaxBluetoothModemConnections&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;integer&amp;gt;1&amp;lt;/integer&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;MyAccountURL&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;string&amp;gt;http://m.telusmobility.com/homepage&amp;lt;/string&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;MyAccountURLTitle&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;string&amp;gt;TELUS Web&amp;lt;/string&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;Services&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;array&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;ServiceCode&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;#411&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;ServiceName&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;Directory Assistance&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;ServiceCode&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;#411&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;ServiceName&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;Assistance-annuaire&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;ServiceCode&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;#8294&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;ServiceName&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;TAXI&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;ServiceCode&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;#2886&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;ServiceName&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;Roadside Assistance&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;ServiceCode&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;#2886&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;ServiceName&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;Assistance Routi&amp;egrave;re&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt; &amp;lt;/array&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;ShowCallForwarded&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;false/&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;ShowCallForwarding&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;false/&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;ShowDialAssist&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;false/&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;ShowTTY&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;false/&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;StatusBarImages&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;array&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;AllowPrefixMatching&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;false/&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;CarrierName&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;TELUS&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;DefaultImage&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;Default_CARRIER_TELUS.png&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;FullScreenOpaqueImage&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;FSO_CARRIER_TELUS.png&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;AllowPrefixMatching&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;false/&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;CarrierName&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;TELUS UMTS&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;DefaultImage&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;Default_CARRIER_TELUS.png&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;FullScreenOpaqueImage&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;FSO_CARRIER_TELUS.png&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt; &amp;lt;/array&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;StockSymboli&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;array&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;symbol&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;T.TO&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;symbol&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;TU&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt; &amp;lt;/array&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;SupportedSIMs&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;array&amp;gt;&lt;br /&gt;  &amp;lt;string&amp;gt;302220&amp;lt;/string&amp;gt;&lt;br /&gt; &amp;lt;/array&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;SupportsNITZ&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;true/&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;SupportsUserBusyCauseCode&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;true/&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;VVMIgnoresIntlDataRoaming&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;false/&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;VisualVoicemailServiceName&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;string&amp;gt;IMAP&amp;lt;/string&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;apns&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;array&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;apn&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;sp.telus.com&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;password&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;signature&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;data&amp;gt;&lt;br /&gt;   ...&lt;br /&gt;   &amp;lt;/data&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;type-mask&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;integer&amp;gt;7&amp;lt;/integer&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;username&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;apn&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;isp.telus.com&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;password&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;signature&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;data&amp;gt;&lt;br /&gt;   ...&lt;br /&gt;   &amp;lt;/data&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;type-mask&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;integer&amp;gt;48&amp;lt;/integer&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;username&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt;  &amp;lt;dict&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;apn&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;sp.telus.com&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;password&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;&amp;lt;/string&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;signature&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;data&amp;gt;&lt;br /&gt;   ...&lt;br /&gt;   &amp;lt;/data&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;type-mask&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;integer&amp;gt;6&amp;lt;/integer&amp;gt;&lt;br /&gt;   &amp;lt;key&amp;gt;username&amp;lt;/key&amp;gt;&lt;br /&gt;   &amp;lt;string&amp;gt;&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;/dict&amp;gt;&lt;br /&gt; &amp;lt;/array&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;com.apple.voicemail.imap&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;dict&amp;gt;&lt;br /&gt;  &amp;lt;key&amp;gt;BeaconAddress&amp;lt;/key&amp;gt;&lt;br /&gt;  &amp;lt;string&amp;gt;474663&amp;lt;/string&amp;gt;&lt;br /&gt;  &amp;lt;key&amp;gt;ClientManagesTrash&amp;lt;/key&amp;gt;&lt;br /&gt;  &amp;lt;false/&amp;gt;&lt;br /&gt;  &amp;lt;key&amp;gt;GreetingNotification&amp;lt;/key&amp;gt;&lt;br /&gt;  &amp;lt;true/&amp;gt;&lt;br /&gt;  &amp;lt;key&amp;gt;MaxGreetingDuration&amp;lt;/key&amp;gt;&lt;br /&gt;  &amp;lt;integer&amp;gt;60&amp;lt;/integer&amp;gt;&lt;br /&gt;  &amp;lt;key&amp;gt;MaxPINLength&amp;lt;/key&amp;gt;&lt;br /&gt;  &amp;lt;integer&amp;gt;10&amp;lt;/integer&amp;gt;&lt;br /&gt;  &amp;lt;key&amp;gt;MinPINLength&amp;lt;/key&amp;gt;&lt;br /&gt;  &amp;lt;integer&amp;gt;4&amp;lt;/integer&amp;gt;&lt;br /&gt;  &amp;lt;key&amp;gt;UsesMWI&amp;lt;/key&amp;gt;&lt;br /&gt;  &amp;lt;true/&amp;gt;&lt;br /&gt;  &amp;lt;key&amp;gt;UsesSSL&amp;lt;/key&amp;gt;&lt;br /&gt;  &amp;lt;false/&amp;gt;&lt;br /&gt; &amp;lt;/dict&amp;gt;&lt;br /&gt; &amp;lt;key&amp;gt;voicemail_context&amp;lt;/key&amp;gt;&lt;br /&gt; &amp;lt;integer&amp;gt;0&amp;lt;/integer&amp;gt;&lt;br /&gt;&amp;lt;/dict&amp;gt;&lt;br /&gt;&amp;lt;/plist&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;I won't claim to understand the meaning of all those settings, but some of them seem to point to Telus supporting visual voicemail, which would be interesting.  And finally, the .PNG files, once decoded from iPhone PNG format, were themselves pretty boring.  Very small transparent images of the word "TELUS" in all caps; these are referenced in the .plist above as Status Bar Images.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/I5-SDaOe9K4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/1133885759404368355/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=1133885759404368355" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/1133885759404368355?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/1133885759404368355?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/I5-SDaOe9K4/telus-iphone-carrier-update.html" title="Telus iPhone Carrier Update" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2010/03/telus-iphone-carrier-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIGSXs7eSp7ImA9WxBXFEk.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-6017846815427412260</id><published>2010-01-25T13:09:00.005-05:00</published><updated>2010-01-25T13:18:48.501-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-25T13:18:48.501-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="event" /><category scheme="http://www.blogger.com/atom/ns#" term="gwt" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="events" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><title>Composite Event Handler Registrations in GWT</title><content type="html">In my previous entry, I wrote up a class for displaying &lt;a href="http://furiouspurpose.blogspot.com/2010/01/input-prompt-pattern-in-gwt.html"&gt;Input Prompts in GWT&lt;/a&gt;.  As I started to fold that code into my project, I realized that I didn't expose the handler registrations, which would make it impossible to remove the event handlers if and when the text fields for which input prompts were displayed were created and removed during the lifecycle of the application.&lt;br /&gt;&lt;br /&gt;Because the Input Prompt registers handlers for both Blur and Focus, there are two registrations.  It's not easy to return two values from a single method, and frankly, I don't think a class using InputPrompt should have to know or care what events it's employing in great detail.  As a result, I've created a composite event handler registration to return:&lt;br /&gt;&lt;pre style="code"&gt;&lt;br /&gt;package com.codiform.gwt.event;&lt;br /&gt;&lt;br /&gt;import java.util.ArrayList;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import com.google.gwt.event.shared.HandlerRegistration;&lt;br /&gt;&lt;br /&gt;public class CompositeHandlerRegistration implements HandlerRegistration {&lt;br /&gt;&lt;br /&gt; private List&lt;HandlerRegistration&gt; registrations;&lt;br /&gt;&lt;br /&gt; public CompositeHandlerRegistration() {&lt;br /&gt;  registrations = new ArrayList&lt;HandlerRegistration&gt;();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; void add( HandlerRegistration registration ) {&lt;br /&gt;  if( registration instanceof CompositeHandlerRegistration ) {&lt;br /&gt;   CompositeHandlerRegistration composite = (CompositeHandlerRegistration) registration;&lt;br /&gt;   registrations.addAll( composite.getRegistrations() );&lt;br /&gt;   composite.clear();&lt;br /&gt;  } else {&lt;br /&gt;   registrations.add( registration );&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private List&lt;HandlerRegistration&gt; getRegistrations() {&lt;br /&gt;  return registrations;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void removeHandler() {&lt;br /&gt;  if ( registrations.size() &gt; 0 ) {&lt;br /&gt;   for ( HandlerRegistration item : registrations ) {&lt;br /&gt;    item.removeHandler();&lt;br /&gt;   }&lt;br /&gt;   clear();&lt;br /&gt;  } else {&lt;br /&gt;   throw new IllegalStateException( "Composite handler registration is currently empty, and cannot remove handlers." );&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private void clear() {&lt;br /&gt;  registrations.clear();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;&lt;br /&gt;If a composite handler registration is passed to another composite handler registration, I flatten them; this might be unnecessary.  In the spirit of YAGNI, I won't be at all unhappy if you decide you don't need that capability.  I also decided I preferred to clear my local references to any inner handler registrations as soon as they've been removed, rather than hanging on to them indefinitely.&lt;br /&gt;&lt;br /&gt;All in all, this is pretty simple GWT code, but seemed worth following up on the previous entry to talk about the need for handler registrations.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/TFUgStuuZlc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/6017846815427412260/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=6017846815427412260" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/6017846815427412260?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/6017846815427412260?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/TFUgStuuZlc/composite-event-handler-registrations.html" title="Composite Event Handler Registrations in GWT" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2010/01/composite-event-handler-registrations.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYMRnc6fCp7ImA9WxBXEUo.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-1885513847507023699</id><published>2010-01-22T10:56:00.002-05:00</published><updated>2010-01-22T11:03:07.914-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-22T11:03:07.914-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="gwt" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="widget" /><category scheme="http://www.blogger.com/atom/ns#" term="prompt" /><category scheme="http://www.blogger.com/atom/ns#" term="web" /><title>Input Prompt Pattern in GWT</title><content type="html">For a GWT project I'm working on, I've reached a point where I wanted to apply &lt;a href="http://ui-patterns.com/pattern/InputPrompt"&gt;input prompts&lt;/a&gt; to a text box; this doesn't seem to be something that's built in to the basic GWT framework, or an easily-located extension.  For that matter, I couldn't find anyone who'd done it and blogged about it, although it might be that they've used different terminology.&lt;br /&gt;&lt;br /&gt;I thought it was worth a quick experiment to see how easy they would be to apply, and this is what I came up with:&lt;br /&gt;&lt;pre style="code"&gt;&lt;br /&gt;package com.codiform.gwt.widget;&lt;br /&gt;&lt;br /&gt;import com.google.gwt.event.dom.client.BlurEvent;&lt;br /&gt;import com.google.gwt.event.dom.client.BlurHandler;&lt;br /&gt;import com.google.gwt.event.dom.client.FocusEvent;&lt;br /&gt;import com.google.gwt.event.dom.client.FocusHandler;&lt;br /&gt;&lt;br /&gt;public class InputPrompt implements BlurHandler, FocusHandler {&lt;br /&gt;&lt;br /&gt; private String promptText;&lt;br /&gt; &lt;br /&gt; public InputPrompt( String text, TextBox... inputs ) {&lt;br /&gt;  this.promptText = text;&lt;br /&gt;  for( TextBox item : inputs ) {&lt;br /&gt;   apply( item );&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void apply( TextBox input ) {&lt;br /&gt;  input.addBlurHandler( this );&lt;br /&gt;  input.addFocusHandler( this );&lt;br /&gt;  applyPrompt( input );&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void onBlur( BlurEvent event ) {&lt;br /&gt;  TextBox blurred = (TextBox) event.getSource();&lt;br /&gt;  applyPrompt( blurred );&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private void applyPrompt( TextBox input ) {&lt;br /&gt;  if( input.getText().isEmpty() ) {&lt;br /&gt;   input.setText( promptText );&lt;br /&gt;   input.addStyleName( "inputPrompt" ); &lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; public void onFocus( FocusEvent event ) {&lt;br /&gt;  TextBox focused = (TextBox) event.getSource();&lt;br /&gt;  if( promptText.equals( focused.getText() ) ) {&lt;br /&gt;   focused.setText( "" );&lt;br /&gt;   focused.removeStyleName( "inputPrompt" ); &lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The final version has some project-specific tweaks (interface for the textbox to make this code testable with mocks, a style name in the project namespace), but for the most part the above code seems to do the trick well and I'll be applying it shortly.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/TE5I1rGvp7I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/1885513847507023699/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=1885513847507023699" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/1885513847507023699?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/1885513847507023699?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/TE5I1rGvp7I/input-prompt-pattern-in-gwt.html" title="Input Prompt Pattern in GWT" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2010/01/input-prompt-pattern-in-gwt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcGQ3YzfSp7ImA9WxBREko.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-2037129763108375856</id><published>2009-12-31T10:15:00.004-05:00</published><updated>2009-12-31T10:23:42.885-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-31T10:23:42.885-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="mysql" /><category scheme="http://www.blogger.com/atom/ns#" term="mysqladmin" /><category scheme="http://www.blogger.com/atom/ns#" term="error" /><category scheme="http://www.blogger.com/atom/ns#" term="table" /><title>MySQL Table Exists (1050) but Doesn't Exist (1051)</title><content type="html">Ran into an interesting issue this morning:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;mysql&gt; drop table RELATIONSHIP_TYPE;&lt;br /&gt;ERROR 1051 (42S02): Unknown table 'relationship_type'&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Which wouldn't be that weird except for:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;mysql&gt; CREATE TABLE `RELATIONSHIP_TYPE` (`relationshipTypeId` INT UNSIGNED AUTO_INCREMENT  NOT NULL, `name` VARCHAR(10) NOT NULL, `code` VARCHAR(2) NOT NULL, CONSTRAINT `PK_RELATIONSHIP_TYPE` PRIMARY KEY (`relationshipTypeId`)) ENGINE INNODB;&lt;br /&gt;ERROR 1050 (42S01): Table 'relationship_type' already exists&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;After a fair amount of Google searching, I finally found an answer that implied I should try this:&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ mysqladmin flush-tables&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Which seems to have solved the problem.  I'm posting this in the hopes that the next person will have an easier time finding the answer.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/8u8Wg0eBhNY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/2037129763108375856/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=2037129763108375856" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/2037129763108375856?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/2037129763108375856?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/8u8Wg0eBhNY/mysql-table-exists-1050-but-doesnt.html" title="MySQL Table Exists (1050) but Doesn't Exist (1051)" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>4</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/12/mysql-table-exists-1050-but-doesnt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQMQnsycCp7ImA9WxBTFUw.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-1406912259650264977</id><published>2009-12-11T02:25:00.003-05:00</published><updated>2009-12-11T02:26:23.598-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-11T02:26:23.598-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="growl" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Maven Growl</title><content type="html">I've written up a small script for displaying Maven build notifications using Growl, and put it up &lt;a href="http://geoffreywiseman.github.com/maven-growl/"&gt;on Github&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/MLB82uLSjmQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/1406912259650264977/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=1406912259650264977" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/1406912259650264977?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/1406912259650264977?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/MLB82uLSjmQ/maven-growl.html" title="Maven Growl" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/12/maven-growl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUBSHg-cCp7ImA9WxNUFEQ.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-6016003452098885504</id><published>2009-11-06T01:45:00.005-05:00</published><updated>2009-11-06T01:50:59.658-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-06T01:50:59.658-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="oss" /><category scheme="http://www.blogger.com/atom/ns#" term="open-source" /><category scheme="http://www.blogger.com/atom/ns#" term="moo" /><category scheme="http://www.blogger.com/atom/ns#" term="serialization" /><category scheme="http://www.blogger.com/atom/ns#" term="objects" /><category scheme="http://www.blogger.com/atom/ns#" term="web services" /><category scheme="http://www.blogger.com/atom/ns#" term="mapping" /><category scheme="http://www.blogger.com/atom/ns#" term="contract" /><category scheme="http://www.blogger.com/atom/ns#" term="freelance" /><title>On Releasing an Open-Source Project (Moo v1.0)</title><content type="html">Like many developers, I&amp;#8217;ve used a large number of open-source projects over the years to get my work done.  Also like many developers, I&amp;#8217;ve worked for companies that were wary of contributing to open-source projects to any significant degree.  Worse, several of these companies attempted to claim the rights to any software built while employed by them, without regard to whether this was built for them, or on their time. These attitudes are common, suspect, and should probably be the subject of another post.&lt;br /&gt;&lt;br /&gt;I&amp;#8217;ve returned to doing freelance software development and software consulting this year (and, hey, if you need someone to help you with software development, drop me a line).  Although working for yourself has some drawbacks, it does come with a lot of freedom.  That includes the freedom to work on open-source projects in unbillable time (or, if you have an understanding with your client, even potentially in billable time).  &lt;br /&gt;&lt;br /&gt;I&amp;#8217;ve been taking advantage of that recently, by building a project to map objects to objects, called &lt;a href="http://geoffreywiseman.github.com/Moo" title="Moo: Mapping Objects to Objects"&gt;Moo&lt;/a&gt;.  I&amp;#8217;ve been on projects that have needed something like this a number of times, and teams I&amp;#8217;ve been on have built something very similar to this twice before.  I&amp;#8217;m really hoping this is the last time I&amp;#8217;ll have to write this particular piece of code, because from now on I&amp;#8217;ll be able to adopt my own code, even if I&amp;#8217;m working for another company.  &lt;br /&gt;&lt;br /&gt;In order to increase the odds that I&amp;#8217;ll be able to adopt it, and to help as many other teams as I can, I&amp;#8217;ve used the BSD license.  That means you can bury Moo inside your own work and you don&amp;#8217;t have to pay me, or adjust the license of your project.  If you want to credit me in some way, that&amp;#8217;d be cool, but mostly I just want to make sure that, if Moo is useful to you (or to me!) there aren&amp;#8217;t any obstacles to that.&lt;br /&gt;&lt;br /&gt;&lt;h1 id="moo_v10_released"&gt;Moo v1.0 Released&lt;/h1&gt;&lt;br /&gt;I&amp;#8217;m happy to announce the release of Moo v1.0, an open-source, BSD-licensed project for &lt;em&gt;M&lt;/em&gt;apping &lt;em&gt;O&lt;/em&gt;bjects to &lt;em&gt;O&lt;/em&gt;bjects.&lt;br /&gt;&lt;br /&gt;&lt;h1 id="what8217s_it_for"&gt;What&amp;#8217;s It For?&lt;/h1&gt;&lt;br /&gt;Moo allows you to map objects to objects, by copying data from one object or object graph and creating or updating another object/graph.  Along the way, Moo can do translations, flattening objects, calling methods, and otherwise helping to map objects that aren&amp;#8217;t identical copies of each other.&lt;br /&gt;&lt;br /&gt;Moo is the sort of tool you use to work around a problem, not fix it.  If you find yourself wanting something like Moo, you should probably ask yourself &amp;#8212; am I just papering over an architectural issue or a limitation of a framework that I should be trying to resolve in some other way?&lt;br /&gt;&lt;br /&gt;That said, I&amp;#8217;ve needed Moo before and I&amp;#8217;ll need it again; some problems are too much trouble to fix when there&amp;#8217;s a reasonable workaround.  I&amp;#8217;ve used Moo for data transfer objects (DTOs) and when serializing an object/graph.&lt;br /&gt;&lt;br /&gt;When possible, I like to use a rich domain model throughout an application, rather than using a domain-model in some kind of service layer and data transfer objects in the interface tier.  But there are times when data transfer objects are more palatable.  For instance, if you find yourself on a project using GWT and Hibernate together, you&amp;#8217;ll discover that GWT serialization and Hibernate proxy objects aren&amp;#8217;t a match made in heaven, and you might find yourself wanting some data transfer objects.&lt;br /&gt;&lt;br /&gt;If you like to use well-connected object models, you&amp;#8217;ll also find that the default serialization approach for GWT and lots of web service frameworks don&amp;#8217;t have great mechanisms for tweaking what parts of the object graph you return, particularly if you want to make those decisions differently depending on the service method being invoked.&lt;br /&gt;&lt;br /&gt;If you&amp;#8217;re using Moo, you can have a domain model object like User, and return List&lt;UserSummary&gt; from lists and queries, and return a UserDetails object from a more detailed &amp;#8216;get&amp;#8217; query.  I&amp;#8217;ve written an example like this into the &lt;a href="http://wiki.github.com/geoffreywiseman/Moo/user-guide" title="The User Guide in the Moo wiki"&gt;User Guide&lt;/a&gt; for Moo.&lt;br /&gt;&lt;br /&gt;&lt;h1 id="what_did_you_learn"&gt;What Did You Learn?&lt;/h1&gt;&lt;br /&gt;Well, for starters, GitHub&amp;#8217;s pretty cool.  I considered using Google Code with Mercurial, or bitbucket, but I wanted to spend some more time with git and GitHub.  I&amp;#8217;m glad I did, I&amp;#8217;ve been really pleased with GitHub.  I&amp;#8217;m not yet sold on its issue tracker, but for now I&amp;#8217;m using all the pieces simply because it&amp;#8217;s nice to have them all integrated.&lt;br /&gt;&lt;br /&gt;And Sonatype&amp;#8217;s &lt;a href="http://nexus.sonatype.org/oss-repository-hosting.html" title="Nexus: OSS Repository Hosting"&gt;Maven repository hosting&lt;/a&gt; for open-source projects is great, since it uses Nexus, and syncs with central.&lt;br /&gt;&lt;br /&gt;On the other hand, I hadn&amp;#8217;t signed Maven artifacts with the maven-gpg-plugin before, and as is typically with less-used Maven plugins, there were a &lt;a href="http://jira.codehaus.org/browse/MGPG-18"&gt;couple&lt;/a&gt; &lt;a href="http://jira.codehaus.org/browse/MGPG-9"&gt;significant&lt;/a&gt; bugs that I had to track down before I could deploy a GPG-signed release.&lt;br /&gt;&lt;br /&gt;&lt;h1 id="next_up"&gt;Next Up&lt;/h1&gt;&lt;br /&gt;I have a few more open-source projects planned, starting with some work I did to support &lt;a href="http://github.com/geoffreywiseman/JUnitConcurrency" title="JUnitConcurrency"&gt;concurrent testing using JUnit&lt;/a&gt;.  I&amp;#8217;ll be mixing up this kind of open-source work with side projects and paying gigs, so I&amp;#8217;m not making any guarantees about timelines.&lt;br /&gt;&lt;br /&gt;If you do end up using Moo, drop me a line, I&amp;#8217;d love to hear about it.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/d1_RuGG4m6A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/6016003452098885504/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=6016003452098885504" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/6016003452098885504?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/6016003452098885504?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/d1_RuGG4m6A/on-releasing-open-source-project-moo.html" title="On Releasing an Open-Source Project (Moo v1.0)" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/11/on-releasing-open-source-project-moo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUABQ344fyp7ImA9WxNSFEk.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-4946414581083605364</id><published>2009-08-28T02:10:00.003-05:00</published><updated>2009-08-28T02:15:52.037-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-28T02:15:52.037-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ignite" /><category scheme="http://www.blogger.com/atom/ns#" term="photo" /><category scheme="http://www.blogger.com/atom/ns#" term="oreilly" /><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><category scheme="http://www.blogger.com/atom/ns#" term="ignite toronto 1" /><category scheme="http://www.blogger.com/atom/ns#" term="ignite toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="toronto" /><title>Ignite Toronto 1</title><content type="html">The first Ignite Toronto went off on Tue 25-Aug-2009 at the Drake Hotel Underground.  I was able to shoot a few photos:&lt;br /&gt;&lt;object width="400" height="300"&gt; &lt;param name="flashvars" value="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Fdiathesis%2Fsets%2F72157622040456017%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fdiathesis%2Fsets%2F72157622040456017%2F&amp;set_id=72157622040456017&amp;jump_to="&gt;&lt;/param&gt; &lt;param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowFullScreen="true" flashvars="offsite=true&amp;lang=en-us&amp;page_show_url=%2Fphotos%2Fdiathesis%2Fsets%2F72157622040456017%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fdiathesis%2Fsets%2F72157622040456017%2F&amp;set_id=72157622040456017&amp;jump_to=" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;All in all, the ignites were enjoyable, although I do wish the ignites had started sooner.  There was ample time to drink and discuss in advance, but I'd like time to see all the ignites, and then talk some more afterwards without wishing I were home, asleep.&lt;br /&gt;&lt;br /&gt;I'm getting old, I know.&lt;br /&gt;&lt;br /&gt;Of particular amusement was when the Creemore Springs tap decided to fail very publicly with a bit of a Beersplosion:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://flic.kr/p/6TpgR8"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 333px; height: 500px;" src="http://farm4.static.flickr.com/3524/3863466021_c7cb2cd0c4.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/EPfxtUNmBj4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/4946414581083605364/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=4946414581083605364" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/4946414581083605364?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/4946414581083605364?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/EPfxtUNmBj4/ignite-toronto-1.html" title="Ignite Toronto 1" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm4.static.flickr.com/3524/3863466021_c7cb2cd0c4_t.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/08/ignite-toronto-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQDR3g5cSp7ImA9WxNTF00.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-312074969739158178</id><published>2009-08-19T12:43:00.003-05:00</published><updated>2009-08-19T12:52:56.629-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-19T12:52:56.629-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="#dct21" /><category scheme="http://www.blogger.com/atom/ns#" term="Guestlist" /><category scheme="http://www.blogger.com/atom/ns#" term="bentlegen" /><category scheme="http://www.blogger.com/atom/ns#" term="demo" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto 21" /><category scheme="http://www.blogger.com/atom/ns#" term="Ben Vinegar" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp" /><title>GuestList - Ben Vinegar - DemoCamp Toronto 21</title><content type="html">&lt;a href="http://twitter.com/bentlegen"&gt;Ben Vinegar&lt;/a&gt; presented &lt;a href="http://www.guestlistapp.com/"&gt;Guestlist&lt;/a&gt; at &lt;a href="http://furiouspurpose.blogspot.com/2009/07/democamp-toronto-21-introduction.html"&gt;DemoCamp Toronto 21&lt;/a&gt; (Velma Rogers Theatre; 333 Bloor Street East; 28-Jul-2009):&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/S1tkUDa99kU&amp;hl=en&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/S1tkUDa99kU&amp;hl=en&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;If you'd like to see the large/HD version, click through &lt;a href="http://www.youtube.com/watch?v=edglL_KvFOc"&gt;to YouTube&lt;/a&gt;.  I also recorded the Q&amp;A that followed (&lt;a href="http://www.youtube.com/watch?v=S1tkUDa99kU"&gt;YouTube&lt;/a&gt;):&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/edglL_KvFOc&amp;hl=en&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/edglL_KvFOc&amp;hl=en&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Ben had a self-deprecating style which initially made me wonder if the presentation was going to bomb, but he pulled it off with aplomb, and it ended up being one of the more entertaining demos of the night.&lt;br /&gt;&lt;br /&gt;Guestlist is one of the more polished and promising applications I've seen at DemoCamp, and I expect this won't be the last time you hear something about it.  I'd say it has a relatively bright future in front of it.  It's not a unique product, it's just very well executed.&lt;br /&gt;&lt;br /&gt;Apparently the &lt;a href="http://www.guestlistapp.com/about/"&gt;Guestlist folks&lt;/a&gt; mostly (all?) work at FreshBooks.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/qxf-eGipbdU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/312074969739158178/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=312074969739158178" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/312074969739158178?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/312074969739158178?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/qxf-eGipbdU/guestlist-ben-vinegar-democamp-toronto.html" title="GuestList - Ben Vinegar - DemoCamp Toronto 21" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/08/guestlist-ben-vinegar-democamp-toronto.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUESXk8eCp7ImA9WxNTFks.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-2048287542952798050</id><published>2009-08-19T00:30:00.004-05:00</published><updated>2009-08-19T00:36:48.770-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-19T00:36:48.770-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="knight's tour" /><category scheme="http://www.blogger.com/atom/ns#" term="learning" /><category scheme="http://www.blogger.com/atom/ns#" term="praxis" /><category scheme="http://www.blogger.com/atom/ns#" term="scala" /><title>Knight's Tour in Scala</title><content type="html">I've been doing some experimentation with Scala lately, mostly by reading the Wampler / Payne &lt;a href="http://programming-scala.labs.oreilly.com/"&gt;Programming Scala&lt;/a&gt; in O'Reilly Labs.  Learning a language by reading about it is deceptive, so I've been looking for an excuse to write some non-trivial Scala code with which to better exercise and test my knowledge of the language.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;After skimming the Daily WTF's Praxis for Automating the Knight's Tour, it seemed like a tractable problem that would be fun to code up in Scala, so I proceeded to do just that.  It's a brute-force solution to the problem, and I'm not yet sure how idiomatic my Scala code is, but it does, at least, solve the problem:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;pre class="code"&gt;&lt;br /&gt;class KnightsTour(val dimensions : Pair[int,int], val startPosition : Pair[int,int] ) {&lt;br /&gt;&lt;br /&gt;  val relativeMoves = List( Pair(2,1), Pair(2,-1), Pair(-2,1), Pair(-2,-1), Pair(1,2), Pair(-1,2), Pair(1,-2), Pair(-1,-2) )&lt;br /&gt;  val xPositions = 0 until dimensions._1&lt;br /&gt;  val yPositions = 0 until dimensions._2&lt;br /&gt;  val tourLength = dimensions._1 * dimensions._2;&lt;br /&gt;  var closedTours = 0;&lt;br /&gt;  var openTours = 0;&lt;br /&gt;&lt;br /&gt;  def printPaths() : Unit = {&lt;br /&gt;    printChildPaths( List(startPosition) )&lt;br /&gt;    println( "There were " + ( openTours + closedTours ) + " tours (" + openTours + " open, " + closedTours + " closed)." );&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  def printChildPaths( path : List[ Pair[int,int] ] ) : Unit = {&lt;br /&gt;    val moves = getMoves( path.first );&lt;br /&gt;&lt;br /&gt;    if( path.size == tourLength ) {&lt;br /&gt;      if( moves.contains(startPosition) ) {&lt;br /&gt;        closedTours += 1&lt;br /&gt;        println( "Found a closed tour: " + path )&lt;br /&gt;      } else {&lt;br /&gt;        openTours += 1&lt;br /&gt;        println( "Found an open tour: " + path )&lt;br /&gt;      }&lt;br /&gt;    } else {&lt;br /&gt;      moves.filter( move =&gt; !path.contains(move) ).foreach( move =&gt; printChildPaths( move :: path ) )&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  def getMoves( position: Pair[int,int] ) : List[Pair[int,int]] = {&lt;br /&gt;    relativeMoves.map( move =&gt; Pair(position._1 + move._1, position._2 + move._2 ) ).filter( withinDimensions )&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  def withinDimensions( position: Pair[int,int] ) : boolean = {&lt;br /&gt;    return xPositions.contains( position._1 ) &amp;&amp; yPositions.contains( position._2 )&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;val tour = new KnightsTour( Pair(3,4), Pair(0,0) )&lt;br /&gt;tour.printPaths();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;All in all, I'm pleased with it, although I'm sure i'll read this again later and wince at my early Scala code.  Comments welcome.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/rp6KB0cVGWY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/2048287542952798050/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=2048287542952798050" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/2048287542952798050?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/2048287542952798050?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/rp6KB0cVGWY/knights-tour-in-scala.html" title="Knight's Tour in Scala" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/08/knights-tour-in-scala.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUICQn07fCp7ImA9WxNTFk0.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-8364846284343387700</id><published>2009-08-18T08:56:00.007-05:00</published><updated>2009-08-18T09:59:23.304-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-18T09:59:23.304-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="martin pietrzak" /><category scheme="http://www.blogger.com/atom/ns#" term="demo" /><category scheme="http://www.blogger.com/atom/ns#" term="dan wood" /><category scheme="http://www.blogger.com/atom/ns#" term="wegowego" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto 21" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp" /><category scheme="http://www.blogger.com/atom/ns#" term="democamp 21" /><title>WeGoWeGo - Dan Wood &amp; Martin Pietrzak - DemoCamp Toronto 21</title><content type="html">Dan Wood and Martin Pietrzak presented &lt;a href="http://wegowego.com/"&gt;WeGoWeG&lt;/a&gt;o at &lt;a href="http://furiouspurpose.blogspot.com/2009/07/democamp-toronto-21-introduction.html"&gt;DemoCamp Toronto 21&lt;/a&gt; (Velma Rogers Theatre, 333 Bloor Street East; 28-Jul-2009):&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Zd1tsNdtE8o&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Zd1tsNdtE8o&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;I also captured the Q&amp;A session that followed:&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/fkGha2C30a8&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/fkGha2C30a8&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;As always, you can feel free to click through to YouTube (&lt;a href="http://www.youtube.com/watch?v=Zd1tsNdtE8o"&gt;presentation&lt;/a&gt;, &lt;a href="http://www.youtube.com/watch?v=fkGha2C30a8"&gt;Q&amp;A&lt;/a&gt;) to watch the larger HD stream.&lt;br /&gt;&lt;br /&gt;They do a user-generated content site for listing things to do.  They attempt to differentiate through the search model ("faceted search categorization").  I have to say, this just didn't seem like it was currently differentiated enough to grab my attention.  There's a lot of web sites in this space, and I'm not convinced the search is sufficient, particularly in a world where network effects create a sort of lock-in, giving the first-movers a bit of an edge.&lt;br /&gt;&lt;br /&gt;That said, I'm happy to be proven wrong.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/AKUdOmqLJdM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/8364846284343387700/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=8364846284343387700" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/8364846284343387700?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/8364846284343387700?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/AKUdOmqLJdM/wegowego-dan-wood-martin-pietrzak.html" title="WeGoWeGo - Dan Wood &amp; Martin Pietrzak - DemoCamp Toronto 21" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/08/wegowego-dan-wood-martin-pietrzak.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYCSHY9fip7ImA9WxNTEkg.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-3404234405656348862</id><published>2009-08-14T08:49:00.003-05:00</published><updated>2009-08-14T08:56:09.866-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-14T08:56:09.866-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="demo" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto 21" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp" /><category scheme="http://www.blogger.com/atom/ns#" term="shaun macdonald" /><category scheme="http://www.blogger.com/atom/ns#" term="toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="mashup arts" /><category scheme="http://www.blogger.com/atom/ns#" term="democamp 21" /><title>Mashup Arts - Shaun MacDonald - DemoCamp Toronto 21</title><content type="html">Shaun MacDonald presented &lt;a href="http://www.mashuparts.com"&gt;Mashup Arts&lt;/a&gt; at &lt;a href="http://furiouspurpose.blogspot.com/2009/07/democamp-toronto-21-introduction.html"&gt;DemoCamp Toronto 21&lt;/a&gt; (July 28th, 2009; Velma Rogers Theatre; 333 Bloor Street East):&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/XliMghZ_zv4&amp;hl=en&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/XliMghZ_zv4&amp;hl=en&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;If you'd like to see the video larger in HD, feel free to &lt;a href="http://www.youtube.com/watch?v=XliMghZ_zv4"&gt;click through to YouTube&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;MashupArts is essentially rich media e-cards whereby you load videos and photos from the web into your card and then share it, and get others to collaborate with you on the card before sending it to the victim/recipient.&lt;br /&gt;&lt;br /&gt;The concept seems sound, although I think there's still a fair ways to go before this is a polished, fully-featured application.  There are features that I'd like to see added, and parts of the interface felt like they needed further work, but as long as it continues to improve, this seems like something that has potential to succeed.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/0r70kBF8UoQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/3404234405656348862/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=3404234405656348862" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/3404234405656348862?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/3404234405656348862?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/0r70kBF8UoQ/mashup-arts-shaun-macdonald.html" title="Mashup Arts - Shaun MacDonald - DemoCamp Toronto 21" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/08/mashup-arts-shaun-macdonald.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkADQ3cyfyp7ImA9WxNTEUQ.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-4719865708632581553</id><published>2009-08-13T16:17:00.004-05:00</published><updated>2009-08-13T16:26:12.997-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-13T16:26:12.997-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="cascada mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="#dct21" /><category scheme="http://www.blogger.com/atom/ns#" term="cascada" /><category scheme="http://www.blogger.com/atom/ns#" term="#democamp" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="breeze" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp" /><category scheme="http://www.blogger.com/atom/ns#" term="phone" /><category scheme="http://www.blogger.com/atom/ns#" term="Alan Lynse" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto 21" /><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Breeze - Alan Lynse / Cascada Mobile - DemoCamp Toronto 21</title><content type="html">Alan Lynse of &lt;a href="http://www.cascadamobile.com/"&gt;Cascada Mobile&lt;/a&gt; presented Breeze at &lt;a href="http://furiouspurpose.blogspot.com/2009/07/democamp-toronto-21-introduction.html"&gt;DemoCamp Toronto 21&lt;/a&gt; at the Velma Rogers Theatre (333 Bloor Street East) on July 28th, 2009.  Breeze is a platform for building mobile applications using web technologies that run on a wide array of mobile phone platforms (iPhone, Android, etc.):&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8x50KVRK1vg&amp;hl=en&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/8x50KVRK1vg&amp;hl=en&amp;fs=1&amp;color1=0x2b405b&amp;color2=0x6b8ab6" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;In this case, not only &lt;span style="font-style: italic;"&gt;can&lt;/span&gt; you &lt;a href="http://www.youtube.com/watch?v=8x50KVRK1vg"&gt;click through&lt;/a&gt; to YouTube, I recommend that you do, since part of this demonstration involves coding in Eclipse, which is a lot easier on your eyes if you switch to the larger HD mode.&lt;br /&gt;&lt;br /&gt;Seems like a good way for companies to build simple applications that cross all handsets.  If you want the polish of a fully native application that's tailored to the capabilities and design of a particular device, this probably won't cut it, but not everybody needs that, particularly for the first pass.&lt;br /&gt;&lt;br /&gt;I don't see this surplanting native mobile application development any time soon, but it's a useful option to keep in mind.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/U-JqIEx4ICE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/4719865708632581553/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=4719865708632581553" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/4719865708632581553?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/4719865708632581553?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/U-JqIEx4ICE/alan-lynse-of-cascada-mobile-presented.html" title="Breeze - Alan Lynse / Cascada Mobile - DemoCamp Toronto 21" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/08/alan-lynse-of-cascada-mobile-presented.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMER3g7eip7ImA9WxNTEEw.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-7502882716872979062</id><published>2009-08-11T13:08:00.006-05:00</published><updated>2009-08-11T13:13:26.602-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-11T13:13:26.602-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="renovation" /><category scheme="http://www.blogger.com/atom/ns#" term="#dct21" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto 21" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp" /><category scheme="http://www.blogger.com/atom/ns#" term="homestars.com" /><category scheme="http://www.blogger.com/atom/ns#" term="homestars" /><category scheme="http://www.blogger.com/atom/ns#" term="brian sharwood" /><category scheme="http://www.blogger.com/atom/ns#" term="home" /><category scheme="http://www.blogger.com/atom/ns#" term="democamp 21" /><title>HomeStars.com - Brian Sharwood - DemoCamp Toronto 21</title><content type="html">Brian Sharwood presented HomeStars.com at &lt;a href="http://furiouspurpose.blogspot.com/2009/07/democamp-toronto-21-introduction.html"&gt;DemoCamp Toronto 21&lt;/a&gt; (July 28th, 2009; Velma Rogers Theatre, 333 Bloor Street East):&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xWS6K6E5uZA&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/xWS6K6E5uZA&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Feel free to &lt;a href="http://www.youtube.com/watch?v=xWS6K6E5uZA"&gt;click through to YouTube&lt;/a&gt; to see it in full-size HD.&lt;br /&gt;&lt;br /&gt;Some good anecdotes, and the site functionality /sounds/ good, but there wasn't much in the way of a demo here.  More demo, less presentation would have been good.&lt;br /&gt;&lt;br /&gt;That said, I would check out the site if I needed some work done and wasn't going to do it myself.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/DNUMnnEa_p4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/7502882716872979062/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=7502882716872979062" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/7502882716872979062?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/7502882716872979062?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/DNUMnnEa_p4/brian-sharwood-presented-homestars.html" title="HomeStars.com - Brian Sharwood - DemoCamp Toronto 21" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/08/brian-sharwood-presented-homestars.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUACQn0_fyp7ImA9WxJaGUw.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-7999676633913852706</id><published>2009-08-10T09:11:00.002-05:00</published><updated>2009-08-10T09:16:03.347-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-10T09:16:03.347-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="photo" /><category scheme="http://www.blogger.com/atom/ns#" term="image" /><category scheme="http://www.blogger.com/atom/ns#" term="photography" /><category scheme="http://www.blogger.com/atom/ns#" term="credits" /><category scheme="http://www.blogger.com/atom/ns#" term="attribution" /><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>Twitter Background Credits</title><content type="html">I've recently redone my twitter background (which you can see on my &lt;a href="http://twitter.com/geoffreywiseman"&gt;twitter page&lt;/a&gt;), and in so doing used a few images that, while creative-commons-licensed, should be attributed.  Because twitter pages can't easily hold credit links, it seemed worth doing here, rather than there.&lt;br /&gt;&lt;br /&gt;Accordingly, you can find the images I used here:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.flickr.com/photos/free-photos/3375886335/"&gt;Coffee Stain&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.flickr.com/photos/sparkspring/12148007/"&gt;Wood Grain&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The perforated tractor-feed paper and polaroid were photoshopped together, rather than clipped; they're not perfect, but they're good enough for my purposes.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/CVI-e-00PeM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/7999676633913852706/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=7999676633913852706" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/7999676633913852706?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/7999676633913852706?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/CVI-e-00PeM/twitter-background-credits.html" title="Twitter Background Credits" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/08/twitter-background-credits.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYMRXo6eip7ImA9WxJaFEU.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-4373028777661111849</id><published>2009-08-05T09:15:00.004-05:00</published><updated>2009-08-05T09:23:04.412-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-05T09:23:04.412-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="montreal" /><category scheme="http://www.blogger.com/atom/ns#" term="art" /><category scheme="http://www.blogger.com/atom/ns#" term="#dct21" /><category scheme="http://www.blogger.com/atom/ns#" term="#democamp" /><category scheme="http://www.blogger.com/atom/ns#" term="artanywhere" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto 21" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp" /><category scheme="http://www.blogger.com/atom/ns#" term="Christine Renaud" /><title>ArtAnywhere - Christine Renaud - DemoCamp Toronto 21</title><content type="html">&lt;a href="http://www.linkedin.com/in/christinerenaud"&gt;Christine Renaud&lt;/a&gt; presented &lt;a href="http://artanywhere.com/"&gt;ArtAnywhere&lt;/a&gt; at &lt;a href="http://furiouspurpose.blogspot.com/2009/07/democamp-toronto-21-introduction.html"&gt;DemoCamp Toronto 21&lt;/a&gt;, July 28th, 2009 at the Velma Rogers theatre:&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/7R-1fudTMpo&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/7R-1fudTMpo&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;In essence, ArtAnywhere allows artists to rent their art on a monthly basis to people with an interest in art.  The cost of renting is fixed, so more expensive work is simply rented for more months in total before it is "paid off."  Sounds promising, although it sounded during the question period like they haven't worked out all the details with respect to how to deal with damage done to art, and so forth. &lt;br /&gt;&lt;br /&gt;Still, it could be of benefit to all (revenue for artists, art for the general populace), and there's obviously a profit model, so it'll be interesting to see where this goes.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/oNS6SobnWPg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/4373028777661111849/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=4373028777661111849" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/4373028777661111849?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/4373028777661111849?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/oNS6SobnWPg/artanywhere-christine-renaud-democamp.html" title="ArtAnywhere - Christine Renaud - DemoCamp Toronto 21" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/08/artanywhere-christine-renaud-democamp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4AQ3k8eCp7ImA9WxJaFEw.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-9060137015387182742</id><published>2009-08-04T12:55:00.005-05:00</published><updated>2009-08-04T13:35:42.770-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-04T13:35:42.770-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="#toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="#dct21" /><category scheme="http://www.blogger.com/atom/ns#" term="#democamp" /><category scheme="http://www.blogger.com/atom/ns#" term="search" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp" /><category scheme="http://www.blogger.com/atom/ns#" term="toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="presentation" /><category scheme="http://www.blogger.com/atom/ns#" term="zoocasa" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="real estate" /><category scheme="http://www.blogger.com/atom/ns#" term="saul colt" /><category scheme="http://www.blogger.com/atom/ns#" term="superfriends" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto 21" /><title>Zoocasa, presented by Saul Colt at DemoCamp Toronto 21</title><content type="html">&lt;a href="http://twitter.com/saulcolt"&gt;Saul Colt&lt;/a&gt; presented &lt;a href="http://www.zoocasa.com/en/"&gt;Zoocasa&lt;/a&gt; at &lt;a href="http://furiouspurpose.blogspot.com/2009/07/democamp-toronto-21-introduction.html"&gt;DemoCamp Toronto 21&lt;/a&gt; on Wednesday July 28th, 2009 at the Velma Rogers Theatre.  Zoocasa is a site to search for real-estate in Canada.  They argue they're complementary to other real-estate sites like Realtor.ca, and differentiate themselves by ways to search for houses:&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/UDVZQ7v68Cw&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/UDVZQ7v68Cw&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;You can click-through to YouTube to see the video in larger form; it's available in HD.&lt;br /&gt;&lt;br /&gt;They get their listings from the public web, which means that they have some listings that MLS doesn't have, and don't have all the listings that MLS does have.  This is their achilles heel; if MLS data were publicly available, Zoocasa might well be a better choice than realtor.ca, but since the real estate business keeps their listings under lock and key, there's only so far Zoocasa can go.&lt;br /&gt;&lt;br /&gt;There was a spirited question period.  In particular, an audience-member who felt that Zoocasa needed to consider alternate forms of profit-model.  I wasn't capturing questions in order to save battery life, which is a position this presentation made me want to revise.&lt;br /&gt;&lt;br /&gt;On a side note, I shot the video pretty closely cropped, which doesn't give iMovie much image stabilization to work with, so it's very shaky-cam; I'll have to shoot it a little wider in the future.  A tripod would help, but would probably get in the way of catching both the slides and the video in concert.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/E-y4vNyro9w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/9060137015387182742/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=9060137015387182742" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/9060137015387182742?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/9060137015387182742?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/E-y4vNyro9w/zoocasa-presented-by-saul-colt-at.html" title="Zoocasa, presented by Saul Colt at DemoCamp Toronto 21" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/08/zoocasa-presented-by-saul-colt-at.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcBQ3c-cSp7ImA9WxJaEUU.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-1102734864497343518</id><published>2009-08-01T22:53:00.003-05:00</published><updated>2009-08-01T23:07:32.959-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-01T23:07:32.959-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="elmcity" /><category scheme="http://www.blogger.com/atom/ns#" term="azure" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto 21" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp" /><category scheme="http://www.blogger.com/atom/ns#" term="microsoft" /><category scheme="http://www.blogger.com/atom/ns#" term="jon udell" /><title>'elmcity' by Jon Udell @ DemoCamp Toronto 21</title><content type="html">&lt;a href="http://blog.jonudell.net/"&gt;Jon Udell&lt;/a&gt; was the first presenter at &lt;a href="http://furiouspurpose.blogspot.com/2009/07/democamp-toronto-21-introduction.html"&gt;DemoCamp Toronto 21&lt;/a&gt;, covering '&lt;a href="http://elmcity.cloudapp.net/"&gt;elmcity&lt;/a&gt;', his project to allow a directory of events by linking in iCal format using delicious accounts as markers for finding the iCal files.&lt;br /&gt;&lt;br /&gt;Despite a proliferation of event information on the web in various forms, it's not always easy to bring that together in a useful way.  Although "elmcity" seems like an interesting project, I'm not sure that I see elmcity changing that directly.  I agree with the problem statement, but the demo didn't make me want to stand up and ask, "How can I get access to this right away?"&lt;br /&gt;&lt;br /&gt;Jon took a little longer than most presentations, and thus is longer than YouTube's 10-minute limit, so I've broken his presentation up into two videos:&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/CaGZ_3Quh9I&amp;hl=en&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/CaGZ_3Quh9I&amp;hl=en&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="295"&gt;&lt;param name="movie" value="http://www.youtube.com/v/DBITXrjceOA&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999&amp;hd=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/DBITXrjceOA&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999&amp;hd=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="295"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/Gqiy69-LOqA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/1102734864497343518/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=1102734864497343518" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/1102734864497343518?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/1102734864497343518?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/Gqiy69-LOqA/elmcity-by-jon-udell-democamp-toronto.html" title="'elmcity' by Jon Udell @ DemoCamp Toronto 21" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/08/elmcity-by-jon-udell-democamp-toronto.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YDQ3c_eip7ImA9WxJbGUs.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-482336081439690156</id><published>2009-07-30T10:25:00.005-05:00</published><updated>2009-07-30T10:52:52.942-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-30T10:52:52.942-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="video" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp Toronto 21" /><category scheme="http://www.blogger.com/atom/ns#" term="photos" /><category scheme="http://www.blogger.com/atom/ns#" term="DemoCamp" /><category scheme="http://www.blogger.com/atom/ns#" term="toronto" /><category scheme="http://www.blogger.com/atom/ns#" term="dct21" /><title>DemoCamp Toronto 21: Introduction</title><content type="html">DemoCamp Toronto 21 (July 28th, 2009) took place at the Velma Rogers Theatre at 333 Bloor St.  Joey DeVilla (@AccordionGuy), David Crow (@davidcrow) and Jay Goldman (@jaygoldman) kicked it off with the initial introductions:&lt;br /&gt;&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/SSctgA3_Ecc&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/SSctgA3_Ecc&amp;amp;hl=en&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="340" width="560"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm3.static.flickr.com/2580/3768329606_d85ffed90c.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 500px; height: 311px;" src="http://farm3.static.flickr.com/2580/3768329606_d85ffed90c.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="340" width="560"&gt;&lt;param name="movie" value="http://www.youtube.com/v/SSctgA3_Ecc&amp;amp;hl=en&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/object&gt;The sessions for the night were:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Jon Udell, Microsoft, elmcity&lt;/li&gt;&lt;li&gt;Saul Colt, Zoocasa&lt;/li&gt;&lt;li&gt;Christine Renaud, ArtAnywhere&lt;/li&gt;&lt;li&gt;Brian Sharwood, Homestars.com&lt;/li&gt;&lt;li&gt;Alan Lynse, Cascada Mobile&lt;/li&gt;&lt;li&gt;Shaun McDonald, Mashup Arts&lt;/li&gt;&lt;li&gt;Dan Wood, WeGoWeGo&lt;/li&gt;&lt;li&gt;Ben Vinegar, Guestlistapp.com&lt;/li&gt;&lt;li&gt;Jason Roks, guiGOOG&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;As well, there slides showing upcoming events:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Startup Drinks (July 29th)&lt;/li&gt;&lt;li&gt;WiredWedTO (Aug 12th)&lt;/li&gt;&lt;li&gt;#HoHOTo (Aug 18th)&lt;/li&gt;&lt;li&gt;Ignite Toronto (Aug 25th)&lt;/li&gt;&lt;li&gt;TEDxTO (Sep 10th)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;And a few job listings:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Unsyced - Lead Developer (Waterloo)&lt;/li&gt;&lt;li&gt;FileMobile - Director, Technology &amp;amp; Operations&lt;/li&gt;&lt;li&gt;Aoulous - Software Developer&lt;/li&gt;&lt;li&gt;Sericon Technology - Facebook Application Testing&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Midway through the presentations, there was a short break for pizza, cookies and drinks:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm3.static.flickr.com/2547/3768363008_4941b8791f.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 500px; height: 456px;" src="http://farm3.static.flickr.com/2547/3768363008_4941b8791f.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Although I focused on capturing the presentations, I was able to shoot a few photos:&lt;br /&gt;&lt;object height="300" width="400"&gt; &lt;param name="flashvars" value="offsite=true&amp;amp;lang=en-us&amp;amp;page_show_url=%2Fphotos%2Fdiathesis%2Fsets%2F72157621755614251%2Fshow%2F&amp;amp;page_show_back_url=%2Fphotos%2Fdiathesis%2Fsets%2F72157621755614251%2F&amp;amp;set_id=72157621755614251&amp;amp;jump_to="&gt; &lt;param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=71649"&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;embed type="application/x-shockwave-flash" src="http://www.flickr.com/apps/slideshow/show.swf?v=71649" allowfullscreen="true" flashvars="offsite=true&amp;amp;lang=en-us&amp;amp;page_show_url=%2Fphotos%2Fdiathesis%2Fsets%2F72157621755614251%2Fshow%2F&amp;amp;page_show_back_url=%2Fphotos%2Fdiathesis%2Fsets%2F72157621755614251%2F&amp;amp;set_id=72157621755614251&amp;amp;jump_to=" height="300" width="400"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Videos of the presentations to come.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/Ev1IPfz_FHk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/482336081439690156/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=482336081439690156" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/482336081439690156?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/482336081439690156?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/Ev1IPfz_FHk/democamp-toronto-21-introduction.html" title="DemoCamp Toronto 21: Introduction" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm3.static.flickr.com/2580/3768329606_d85ffed90c_t.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/07/democamp-toronto-21-introduction.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4HRnY4cCp7ImA9WxJVGEU.&quot;"><id>tag:blogger.com,1999:blog-1033530409924258628.post-7651440945670715406</id><published>2009-07-06T08:37:00.004-05:00</published><updated>2009-07-06T08:45:37.838-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-06T08:45:37.838-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="flex" /><category scheme="http://www.blogger.com/atom/ns#" term="caucho" /><category scheme="http://www.blogger.com/atom/ns#" term="development" /><category scheme="http://www.blogger.com/atom/ns#" term="software" /><category scheme="http://www.blogger.com/atom/ns#" term="hessian" /><category scheme="http://www.blogger.com/atom/ns#" term="bug" /><category scheme="http://www.blogger.com/atom/ns#" term="diff" /><category scheme="http://www.blogger.com/atom/ns#" term="fix" /><title>Fixing Hessian Flex 3.2.0 References</title><content type="html">If you're using Hessian Flex 3.2.0 and you'd like to fix the &lt;a href="http://furiouspurpose.blogspot.com/2009/06/dependency-trap-hessian-spring-tapestry.html"&gt;problem with references&lt;/a&gt;, the following one-line fix seems to do the job for me:&lt;br /&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;br /&gt;$ svn diff&lt;br /&gt;Index: src/main/flex/hessian/io/Hessian2Input.as&lt;br /&gt;===================================================================&lt;br /&gt;--- src/main/flex/hessian/io/Hessian2Input.as (revision 1172)&lt;br /&gt;+++ src/main/flex/hessian/io/Hessian2Input.as (working copy)&lt;br /&gt;@@ -129,9 +129,10 @@&lt;br /&gt;     public override function init(di:IDataInput):void&lt;br /&gt;     {&lt;br /&gt;       _di = di;&lt;br /&gt;       _buffer = new ByteArray();&lt;br /&gt;       _offset = 0;&lt;br /&gt;       _length = 0;&lt;br /&gt;+      _refs = null;&lt;br /&gt;     }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Basically, HessianOperation hangs on to a Hessian2Input class between invocations, and calls init() to clear out the state before using the class for another invocation.  The init() doesn't currently clear the reference cache.  By setting _refs to null, you clear the cache and Hessian2Input will simply instantiate a new array in its place if and when it needs to do so.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6140845956025956";
google_ad_width = 728;
google_ad_height = 15;
google_ad_format = "728x15_0ads_al";
//2007-07-13: feed
google_ad_channel = "4695176585";
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/FuriousPurpose/~4/Xzrj1wzEL94" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://furiouspurpose.blogspot.com/feeds/7651440945670715406/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1033530409924258628&amp;postID=7651440945670715406" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/7651440945670715406?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1033530409924258628/posts/default/7651440945670715406?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/FuriousPurpose/~3/Xzrj1wzEL94/fixing-hessian-flex-320-references.html" title="Fixing Hessian Flex 3.2.0 References" /><author><name>Geoffrey Wiseman</name><uri>https://plus.google.com/107827180513890404686</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-ytajf38tm9Q/AAAAAAAAAAI/AAAAAAAAAlQ/9OnUqgOJfLg/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://furiouspurpose.blogspot.com/2009/07/fixing-hessian-flex-320-references.html</feedburner:origLink></entry></feed>
