<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title>Advogato blog for ade</title>
    <link>http://www.advogato.org/person/ade/</link>
    <description>Advogato blog for ade</description>
    <language>en-us</language>
    <generator>mod_virgule</generator>
    <pubDate>Tue, 9 Feb 2010 21:22:59 GMT</pubDate>
    <item>
      <pubDate>Mon, 8 Feb 2010 01:06:42 GMT</pubDate>
      <title>34: Back In Black</title>
      <link>http://www.advogato.org/person/ade/diary.html?start=31</link>
      <guid>http://www.blogger.com/feeds/3804478417938445896/posts/default/4772410006290090927</guid>
      <description>&lt;a href="http://www.flickr.com/photos/adewale_oshineye/4339343362/" title="34: Back In Black by adewale_oshineye, on Flickr" &gt;&lt;img src="http://farm3.static.flickr.com/2751/4339343362_13506cc65e.jpg" width="500" height="333" alt="34: Back In Black" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3804478417938445896-4772410006290090927?l=blog.oshineye.com' alt='' /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Mon, 1 Feb 2010 02:12:47 GMT</pubDate>
      <title>New Frontiers: TDD and Refactoring Workshop at Brunel University</title>
      <link>http://www.advogato.org/person/ade/diary.html?start=30</link>
      <guid>http://www.blogger.com/feeds/3804478417938445896/posts/default/7418621591830744794</guid>
      <description>At the first Software Craftsmanship Conference in London I met &lt;a href="http://www.informatik.uni-trier.de/~ley/db/indices/a-tree/c/Counsell:Steve.html" &gt;Steve Counsell&lt;/a&gt;. He's an academic at Brunel University with an interest in Object Orientation, Metrics and Refactoring.&lt;br /&gt;&lt;br /&gt;A while ago Steve invited me to give a short presentation at one of a series of workshops he's running. These 'Reftest' workshops are aimed at bringing academia and industry together to share our insights and experiences with both Test Driven Development and Refactoring.&lt;br /&gt;&lt;br /&gt;There were too many interesting presentations at last week's event for me to describe them all. But they should all eventually end up on the &lt;a href="http://reftest.org/" &gt;Reftest website&lt;/a&gt; so you can read them there. That site doesn't have a feed yet so I've set up this: &lt;a href="http://www.google.com/notificationservice/webchanges/webfeeds/11897478376600010732" &gt;http://www.google.com/notificationservice/webchanges/webfeeds/11897478376600010732&lt;/a&gt; which basically notifies you of any changes to the website.&lt;br /&gt;&lt;br /&gt;Anyway, there was a lovely presentation by Charles Tolman from Quantel about some of the issues you run into when you have a 12 year old codebase containing 17 million lines of C++ and Python. This lead into an interesting discussion about detecting duplicate code. I maintain &lt;a href="http://www.oshineye.com/software.html" &gt;Same&lt;/a&gt; but nowadays I find that &lt;a href="http://catb.org/~esr/comparator/" &gt;Eric Raymond's Comparator&lt;/a&gt; is a better solution for most people so I recommended that.&lt;br /&gt;&lt;br /&gt;One of my favourite asides from Charles's 30 years in software (20 of them spent at Quantel) was "tools should enable the intelligence of the programmer rather than attempt to encapsulate the intelligence of the programmer."&lt;br /&gt;&lt;br /&gt;The folks from the University of Kent showed some impressive results for their &lt;a href="http://www.protest-project.eu/tools.html" &gt;tools&lt;/a&gt; which provide: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;model checking&lt;/li&gt;&lt;li&gt;property-based testing&lt;/li&gt;&lt;li&gt;interactive clone elimination&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Best of all many of the principles behind them aren't restricted to Erlang. So these kinds of techniques and tools can be applied to mainstream languages. They just chose Erlang because the tools were built as part of the &lt;a href="http://www.protest-project.eu/" &gt;ProTest&lt;/a&gt; project they're doing with Ericsson.&lt;br /&gt;&lt;br /&gt;My own &lt;a href="http://tinyurl.com/tddandrefactoring" &gt;presentation&lt;/a&gt; looked at some of the problems with TDD and Refactoring. &lt;br /&gt;&lt;br /&gt;I discussed problems with teaching the cluster of tacit knowledge that we call TDD and covered issues like the convenient fictions we use, the mis-leading tutorials and the overly simplistic examples that involve starting with a blank slate. I also threw in a brief digression about the &lt;a href="http://www.gigamonkeys.com/blog/2009/10/05/coders-unit-testing.html" &gt;Norvig-Jeffries kerfuffle&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The section of my presentation on refactoring mostly involved going back to &lt;a href="http://docs.google.com/viewer?url=http://www.laputan.org/pub/papers/opdyke-thesis.pdf" &gt;Opdyke's thesis&lt;/a&gt; and looking at some of the consequences of his ideas. One thing that struck me was how insightful Opdyke's work was when it came to the issues like preserving class invariants and the subtle side-effects of most refactorings. Somewhere along the line though as we automated refactoring we seem to have lost the heart of his ideas.&lt;br /&gt;&lt;br /&gt;I'd expected the last section with it's references to &lt;a href="http://en.wikipedia.org/wiki/Model_checking" &gt;model checking&lt;/a&gt;, property-based testing tools like &lt;a href="http://code.google.com/p/scalacheck/" &gt;ScalaCheck&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Mutation_testing" &gt;mutation testing&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Fuzz_testing" &gt;fuzz testing&lt;/a&gt; to be controversial but the discussion ended up being a very productive look at ways in which we could fix the problems. The whole day made me very hopeful about the prospects for significant progress in the tools and techniques for TDD and refactoring.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;iframe src="http://docs.google.com/present/embed?id=ddkgd7hz_109f34w3rcp" frameborder="0" width="410" height="342"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;i&gt;Updated 2010/02/06&lt;/i&gt;: Ben Stopford has written up &lt;a href="http://www.benstopford.com/2010/02/06/are-mocks-all-they-are-cracked-up-to-be/" &gt;his perspective on the workshop&lt;/a&gt; and uploaded &lt;a href="http://www.benstopford.com/wp-content/uploads/2010/02/Has-Mocking-Gone-Wrong.pdf" &gt;his PDF slides&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3804478417938445896-7418621591830744794?l=blog.oshineye.com' alt='' /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Sun, 31 Jan 2010 17:13:38 GMT</pubDate>
      <title>33: Brunel</title>
      <link>http://www.advogato.org/person/ade/diary.html?start=29</link>
      <guid>http://www.blogger.com/feeds/3804478417938445896/posts/default/7889487592656327683</guid>
      <description>&lt;a href="http://www.flickr.com/photos/adewale_oshineye/4318059367/" title="33: Brunel by adewale_oshineye, on Flickr" &gt;&lt;img src="http://farm3.static.flickr.com/2800/4318059367_c219459315.jpg" width="500" height="333" alt="33: Brunel" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3804478417938445896-7889487592656327683?l=blog.oshineye.com' alt='' /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Mon, 25 Jan 2010 00:14:56 GMT</pubDate>
      <title>32: Juxtaposition</title>
      <link>http://www.advogato.org/person/ade/diary.html?start=28</link>
      <guid>http://www.blogger.com/feeds/3804478417938445896/posts/default/8786684593664492637</guid>
      <description>&lt;a href="http://www.flickr.com/photos/adewale_oshineye/4301403705/" title="32: Juxtaposition by adewale_oshineye, on Flickr" &gt;&lt;img src="http://farm5.static.flickr.com/4019/4301403705_2f4058308b.jpg" width="500" height="333" alt="32: Juxtaposition" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3804478417938445896-8786684593664492637?l=blog.oshineye.com' alt='' /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Tue, 19 Jan 2010 00:08:43 GMT</pubDate>
      <title>31: Flight to nowhere</title>
      <link>http://www.advogato.org/person/ade/diary.html?start=27</link>
      <guid>http://www.blogger.com/feeds/3804478417938445896/posts/default/909105351843676059</guid>
      <description>&lt;a href="http://www.flickr.com/photos/adewale_oshineye/4283750206/" title="31: Flight to nowhere by adewale_oshineye, on Flickr" &gt;&lt;img src="http://farm5.static.flickr.com/4012/4283750206_4fc5c2c924.jpg" width="500" height="333" alt="31: Flight to nowhere" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3804478417938445896-909105351843676059?l=blog.oshineye.com' alt='' /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Sun, 10 Jan 2010 03:10:26 GMT</pubDate>
      <title>30: Eventually</title>
      <link>http://www.advogato.org/person/ade/diary.html?start=26</link>
      <guid>http://www.blogger.com/feeds/3804478417938445896/posts/default/4196635806336590281</guid>
      <description>&lt;a href="http://www.flickr.com/photos/adewale_oshineye/4261326940/" title="30: Eventually by adewale_oshineye, on Flickr" &gt;&lt;img src="http://farm5.static.flickr.com/4061/4261326940_19466abbfb.jpg" width="333" height="500" alt="30: Eventually" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3804478417938445896-4196635806336590281?l=blog.oshineye.com' alt='' /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Tue, 5 Jan 2010 01:09:05 GMT</pubDate>
      <title>29: Elementary</title>
      <link>http://www.advogato.org/person/ade/diary.html?start=25</link>
      <guid>http://www.blogger.com/feeds/3804478417938445896/posts/default/5579329233234706813</guid>
      <description>&lt;a href="http://www.flickr.com/photos/adewale_oshineye/4246473858/" title="29: Elementary by adewale_oshineye, on Flickr" &gt;&lt;img src="http://farm3.static.flickr.com/2510/4246473858_d2f8853378.jpg" width="273" height="500" alt="29: Elementary" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3804478417938445896-5579329233234706813?l=blog.oshineye.com' alt='' /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Sat, 2 Jan 2010 15:08:22 GMT</pubDate>
      <title>What did I learn in 2009?</title>
      <link>http://www.advogato.org/person/ade/diary.html?start=24</link>
      <guid>http://www.blogger.com/feeds/3804478417938445896/posts/default/4497067607889226746</guid>
      <description>I attended both Software Craftsmanship conferences and as a result I now see software craftsmanship as a 'movement' in the same sense as &lt;a href="http://en.wikipedia.org/wiki/Impressionism" &gt;Impressionism&lt;/a&gt;. In other words it's a group of very loosely affiliated people who are linked by overlapping values rather than rigid adherence to some set of rules. However its roots in the Agile movement mean its likely to be subject to the same forces that took us from 'lightweight methodologies' for getting useful work done to a marketing brand with a formal alliance overseeing its usage. Large chunks of the Agile community seem to have become more interested in process improvement than in improving their skill or their techniques. Reading parody sites like this: &lt;a href="http://www.ambysoft.com/certification/" &gt;http://www.ambysoft.com/certification/&lt;/a&gt; and finally asking awkward questions about Scrum (it's a very bad sign when no-one will publicly answer a question like "is it possible to fail a Scrum course?") made me realise that 'Agile' has become a meaningless tag that I don't want to be associated with any more.&lt;br /&gt;&lt;br /&gt;This was the year I started to really see the limits of my tools and techniques. This includes Java, TDD, the LAMP stack and the conventional approach to logging. As a result I'm doing more work with Python; thinking more in terms of invariants and algorithmic complexity as well as looking at tools like &lt;a href="http://en.wikipedia.org/wiki/QuickCheck" &gt;QuickCheck&lt;/a&gt; and &lt;a href="http://www-users.cs.york.ac.uk/~mfn/sparsecheck/" &gt;SparseCheck&lt;/a&gt;; playing with App Engine and experimenting with the event sink approach that Nat Pryce and Steve Freeman describe in their book &lt;a href="http://www.growing-object-oriented-software.com/" &gt;Growing Object Oriented Software&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The aforementioned limits (plus a discussion with &lt;a href="http://www.dancres.org/" &gt;Dan Creswell&lt;/a&gt; and &lt;a href="http://uk.linkedin.com/in/maniksurtani" &gt;Manik Surtani&lt;/a&gt;) lead me to the &lt;a href="http://docs.google.com/present/view?id=ddkgd7hz_100hhbqgtc6" &gt;Scalability Staircase&lt;/a&gt; and I realised that much of my 'experience' was now invalid because I'm not working in an enterprise environment. In fact many of those enterprise software environments have radically changed but the people working in them are only just starting to realise that they'll need different approaches to software development now that they're working at web scale.&lt;br /&gt;&lt;br /&gt;I started to appreciate the benefits of feature segmentation/partitioning through flags and dependency injection. Flickr wrote &lt;a href="http://code.flickr.com/blog/2009/12/02/flipping-out/" &gt;a somewhat controversial article about their approach&lt;/a&gt; although many of the critics haven't spotted the connection with &lt;a href="http://en.wikipedia.org/wiki/Multivariate_testing" &gt;bucket testing/multivariate testing&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In 2009 I found that I got better results by &lt;a href="http://www.inspiritive.com.au/talent.htm" &gt;modelling people&lt;/a&gt; who were effective rather than brilliant. Effective people tended to have generated a lot of artefacts whilst the brilliant tended to agonise over a small set of projects and as such artificially constrained their potential impact. Perfectionism often got in the way of delivering results whilst focussing on getting a little better every day left with me lots of useful artefacts, lots of real-world feedback and more opportunities to take creative risks. &lt;br /&gt;&lt;br /&gt;Getting in the habit of making improvements rather than offering criticism leads to lots of work but it also leads to things getting better. As a consequence I'm now spending more time helping out on &lt;a href="http://code.google.com/u/adewale/updates" &gt;open source projects&lt;/a&gt;. Another consequence was discovering that you're better off focussing on people's artefacts (their code, their data, the things they've made) rather than their opinions. Without that focus it becomes difficult to distinguish between people who have discovered better skills/techniques and those who just have a convincing argument.&lt;br /&gt;&lt;br /&gt;One of the side-effects of my new-found appreciation for these 'productive communities' was that I attended more BarCamp-style events. At one of those I ran a session which gathered a group of people who understand the semantic web and &lt;a href="http://en.wikipedia.org/wiki/Linked_Data" &gt;Linked Data&lt;/a&gt;. Thanks to those people I now understand the appeal of &lt;a href=" http://docs.google.com/present/view?id=ddkgd7hz_91c42qwgpf" &gt;Web Scale Identifiers&lt;/a&gt;. Basically the idea is that if your website is about something like books, music, musicians, etc which already has a good identifier (e.g. ISBN, &lt;a href="http://en.wikipedia.org/wiki/Amazon_Standard_Identification_Number" &gt;ASIN&lt;/a&gt; or &lt;a href="http://musicbrainz.org/doc/About_MusicBrainz" &gt;MusicBrainz&lt;/a&gt; id) then you should re-use that identifier. Inventing &lt;a href="http://open.spotify.com/track/2BdBc3Ip2EOGVikIEWhmuQ" &gt;your own identifier&lt;/a&gt; or exposing your database's primary key or &lt;a href="http://www.last.fm/music/Asa" &gt;using the simple name&lt;/a&gt; leads to a wide range of annoying problems for your users whilst re-using existing identifiers means you get to benefit from the work being by the rest of the Web.&lt;br /&gt;&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%2Fadewale_oshineye%2Fsets%2F72157622996041967%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fadewale_oshineye%2Fsets%2F72157622996041967%2F&amp;set_id=72157622996041967&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%2Fadewale_oshineye%2Fsets%2F72157622996041967%2Fshow%2F&amp;page_show_back_url=%2Fphotos%2Fadewale_oshineye%2Fsets%2F72157622996041967%2F&amp;set_id=72157622996041967&amp;jump_to=" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3804478417938445896-4497067607889226746?l=blog.oshineye.com' alt='' /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Sat, 2 Jan 2010 14:09:57 GMT</pubDate>
      <title>28: So this is Christmas</title>
      <link>http://www.advogato.org/person/ade/diary.html?start=23</link>
      <guid>http://www.blogger.com/feeds/3804478417938445896/posts/default/3134590487427352262</guid>
      <description>&lt;a href="http://www.flickr.com/photos/adewale_oshineye/4222435734/" title="28: So this is Christmas by adewale_oshineye, on Flickr" &gt;&lt;img src="http://farm3.static.flickr.com/2554/4222435734_a8a2a51770.jpg" width="500" height="333" alt="28: So this is Christmas" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3804478417938445896-3134590487427352262?l=blog.oshineye.com' alt='' /&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <pubDate>Sat, 2 Jan 2010 14:09:57 GMT</pubDate>
      <title>XPDay UK 2009</title>
      <link>http://www.advogato.org/person/ade/diary.html?start=22</link>
      <guid>http://www.blogger.com/feeds/3804478417938445896/posts/default/452136955809715996</guid>
      <description>For the last few years I've been attending a cosy little community-run conference in the UK called &lt;a href="http://xpday.org/" &gt;XP Day&lt;/a&gt;. This year it was held in &lt;a href="http://www.churchhouseconf.co.uk/" &gt;Church House&lt;/a&gt; which is a stone's throw away from Parliament.&lt;br /&gt;&lt;br /&gt;As the slogan on their website says it was "more than XP. More than one day." The "more than XP" part of the slogan resulted in a surprising number of sessions about Lean and Kanban. Since these seem to be replacements for, the increasingly reviled, Scrum it got to the point where there was &lt;a href="http://xpday-london.editme.com/WhereHasXpGone" &gt;an open space session asking if we could have XP back&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The conference began with Google's Mark Striebeck giving an interesting keynote on the massive data collection and analysis effort his team is undertaking in order to turn testing "from an art into a science." Unfortunately I was constantly distracted by his usage of the word "art" in contexts where "craft" seemed more suitable. Since the relationship between art, craft and science is important to me, for &lt;a href="http://www.oshineye.com/books.html" &gt;obvious reasons&lt;/a&gt;, I was disappointed to see that Mark didn't give definitions. This meant that I couldn't work out if he'd truly confused craft with art or whether he was just using different definitions to the ones I prefer.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gojko.net/2009/12/07/improving-testing-practices-at-google/" &gt;Gojko Adzic had a blog post&lt;/a&gt; out with the details of Mark's talk before the applause had died down. My own attempts at using the &lt;a href="http://www.jaiku.com/channel/xpday" &gt;XP Day Jaiku channel&lt;/a&gt; for note-taking eventually faded away due to the sheer number of interesting talks, workshops and open space sessions going on.&lt;br /&gt;&lt;br /&gt;This year's conference was heavily focussed on experience reports. Anna Shipman ran a couple of brutally honest and insightful sessions on situations where an Agile adoption goes wrong. There was also a large contingent from 7Digital who shared the difficulties and benefits of adopting Agile in a start-up. This was especially illuminating because &lt;a href="http://about.7digital.net/AboutUs/ManagementTeam#ben_drury" &gt;their CEO&lt;/a&gt; participated in the experience report and gave us the customer's perspective. I especially liked his focus on using Agile as a competitive &lt;i&gt;business&lt;/i&gt; advantage rather than merely as a way of fixing broken software processes.&lt;br /&gt;&lt;br /&gt;My favourite session was probably Gojko's workshop on &lt;a href="http://gojko.net/2009/12/10/building-software-that-matters-part-two/" &gt;Building Software That Matters&lt;/a&gt;. It gave a roomful of people a chance to talk about some of my favourite topics: feature partitioning, creating quantifiable feedback loops in the software development process by testing with real users and developers focussing on helping to create value rather than just blindly implementing the requirements they're given.&lt;br /&gt;&lt;br /&gt;I hope next year's XP Day is as interesting.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/adewale_oshineye/4167292689/" title="Apprenticeship Patterns at XPDay by adewale_oshineye, on Flickr" &gt;&lt;img src="http://farm3.static.flickr.com/2627/4167292689_d9e68c7942.jpg" width="500" height="333" alt="Apprenticeship Patterns at XPDay" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3804478417938445896-452136955809715996?l=blog.oshineye.com' alt='' /&gt;&lt;/div&gt;</description>
    </item>
  </channel>
</rss>
