<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Elegant Chaos</title>
  <link rel="alternate" type="text/html" href="http://www.elegantchaos.com"/>
  <link rel="self" type="application/atom+xml" href="http://www.elegantchaos.com/atom/feed"/>
  <id>http://www.elegantchaos.com/atom/feed</id>
  <updated>2009-05-16T13:55:44+00:00</updated>
  <entry>
    <title>Index of regular UK Mac/iPhone developer meetings</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/408" />
    <id>http://www.elegantchaos.com/node/408</id>
    <published>2010-02-03T16:23:57+00:00</published>
    <updated>2010-02-03T16:23:57+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>Speaking to various folks at <a class="autolink-term" href="http://www.nsconference.com/">NSConference</a>, I realised that there are quite a few regular developer meetings around the country, in addition to the one that I used to organise in London (which still exists but has mutated into the NSCoder london night).</p></p>

<p>I figured that it would be handy to list them all in one place, for anyone who might find themselves in a strange town for a while in need of geek-based social contact&#8230;</p>

<p>I&#8217;ve updated my <a href="/uk-mac-dev-meeting">uk-mac-dev-meeting</a> page accordingly, so that it now lists all of the ones I&#8217;ve heard about. </p>

<p>If you know of one I&#8217;ve missed, please let me know.</p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>Speaking to various folks at <a class="autolink-term" href="http://www.nsconference.com/">NSConference</a>, I realised that there are quite a few regular developer meetings around the country, in addition to the one that I used to organise in London (which still exists but has mutated into the NSCoder london night).</p>

<p>I figured that it would be handy to list them all in one place, for anyone who might find themselves in a strange town for a while in need of geek-based social contact&#8230;</p>

<p>I&#8217;ve updated my <a href="/uk-mac-dev-meeting">uk-mac-dev-meeting</a> page accordingly, so that it now lists all of the ones I&#8217;ve heard about. </p>

<p>If you know of one I&#8217;ve missed, please let me know.</p>
     ]]></content>
  </entry>
  <entry>
    <title>NSConference 2010 - day 2</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/407" />
    <id>http://www.elegantchaos.com/node/407</id>
    <published>2010-02-03T13:54:42+00:00</published>
    <updated>2010-02-03T13:54:42+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>Day two started with an illuminating session by Jeff LaMarche about the Objective-C runtime, and some of the nice dynamic and introspective things you can do with it, such as iterating through your own properties, methods, etc. A couple of days ago in Drew&#8217;s concurrency workshop I was thinking about the need for some good Objective-C wrappers for OpenCL, as there&#8217;s a lot of boiler plate setup code that you have to do. It&#8217;s there for flexibility, but probably you do the same thing for most apps, so why not wrap it in some simpler objects. Some wrappers probably already exist somewhere, but it struck me that one of the techniques Jeff was describing would be perfect for supporting OpenCL kernel parameters.</p></p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>Day two started with an illuminating session by Jeff LaMarche about the Objective-C runtime, and some of the nice dynamic and introspective things you can do with it, such as iterating through your own properties, methods, etc. A couple of days ago in Drew&#8217;s concurrency workshop I was thinking about the need for some good Objective-C wrappers for OpenCL, as there&#8217;s a lot of boiler plate setup code that you have to do. It&#8217;s there for flexibility, but probably you do the same thing for most apps, so why not wrap it in some simpler objects. Some wrappers probably already exist somewhere, but it struck me that one of the techniques Jeff was describing would be perfect for supporting OpenCL kernel parameters. Instead of having to write code to poke the parameters into the kernel, wouldn&#8217;t it be great to just be able to subclass an OCLKernel class, define some properties on it, and automatically have setters implemented which loaded the property values into OpenCL, and getters which retrieved the values.</p>

<p>Next up was Andy Finnell, giving a session that was supposed to be about Core Image, but was actually more about OpenCL. Everyone reported that this was an interesting session, but I sort of got distracted because I was starting to hack together the OpenCL wrapper classes that I&#8217;d thought of in the previous session (I&#8217;ll post them up when I&#8217;ve done them).  Having said that, if there&#8217;d been more actual OpenCL in Andy&#8217;s presentation I would probably have been drawn back in to it, but  actually he mentioned himself that he&#8217;d wrapped the calls in a class hierarchy, and went on to focus on the physics, which whilst interesting wasn&#8217;t really of much general use. In the end, from what I heard, it was more about the physics of watercolour pigments and their interaction with paper - which whilst interesting, wasn&#8217;t really what I was there for!</p>

<p>Next up were two half-length sessions thrown together at short notice because one of the other speakers had to drop out. </p>

<p>First a quick overview of some source control systems by Dave Dribin. This was a tough job in such a short time, and I felt that it was a bit light on the right details. He spent too long on the purpose and history of version control, and not enough time on a discussion of the idioms that we use in the real world, and how they do or don&#8217;t fit into the models provided by Svn, Git, Mercurial or Perforce. Not that the history and purpose isn&#8217;t interesting, but in half an hour you can&#8217;t really do it justice on its own, so it was probably better to focus on telling people who understand version control and use one every day how the one they use compares to the other major options. I found this frustrating because I use a very large Perforce system at work (it&#8217;s pricey, but excellent, and I&#8217;m not convinced that the other systems could do what we do with it), and run a Subversion server at home (which is simple, but I want to change to something else, probably git or mercurial). What I really wanted was answers to some fairly complex situations that happen in the real world - like &#8220;how well can you manage multiple concurrent release branches&#8221;, &#8220;how does it cope when you have twelve devs continuously hacking on a branch&#8221;, &#8220;how well does it deal with large amounts of data - e.g. graphics assets&#8221;, and &#8220;how does system XYZ recommend managing your own shared library modules that are used by more than one project that you also have under source control?&#8221;. None of which were really answered.</p>

<p>This was followed by a very whistle stop tour of code signing from Graham Lee. Although brief, this was actually useful as he told me how to do something that I didn&#8217;t know how to do before. He delivered it with his customary humour, and the session was most notable for re-christening Wolf Rentzsch as &#8220;The Dog Spanner&#8221;.</p>

<p>After another excellent lunch we had our final &#8220;proper&#8221; session, from Aaron Hillegass, on data persistence. He started with an excellent set up, posing some interesting questions about how relevant the file system is any more, and whether &#8220;the file&#8221; is actually dead, to be replaced largely by the data cloud. Quite possibly, he suggested, our local machine hard drives are just local caches from here on in. I think this is a great topic which could have been explored further - for example, if files on our local hard drive are just caches, shouldn&#8217;t we be trying to find ways to structure them better so that they can be synchronised with the cloud in a non-monolithic way. One big fat 10Mb file is a bit hard to sync unless you&#8217;ve got a detailed schema describing the internal structure, and permission to mess with it. Anyway, I think that side could have been explored further, but Aaron switched tack somewhat to talk about the BNRPersistence framework that he&#8217;s created. Which was an interesting topic in it&#8217;s own right.</p>

<p>Finally, we had the &#8220;Cocoa Rumble&#8221;, which was a light hearted competition between three teams composed jointly of the session presenters and volunteers from the crowd. I didn&#8217;t really feel that it worked that well this year, despite generating some good presentations at the end. Somehow I don&#8217;t think we&#8217;ve yet managed to find a way to end <a class="autolink-term" href="http://www.nsconference.com/">NSConference</a> which matches the old &#8220;Stump The Experts&#8221; sessions at WWDC (which were kind of cool back in 1993 when I first went, and still good fun back in about 2002 when I last went!).</p>

<p>So there you have it - two days of great Mac related sessions. I&#8217;ve learnt a fair amount, met some nice people along the way, and had a splendid time. I&#8217;ve eaten far too much, and drunk lots of bad beer and bad cider. And tomorrow, there&#8217;s another whole day of iPhone stuff. Phew&#8230;</p>
     ]]></content>
  </entry>
  <entry>
    <title>NSConference 2010 - day 1</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/406" />
    <id>http://www.elegantchaos.com/node/406</id>
    <published>2010-02-01T23:16:57+00:00</published>
    <updated>2010-02-01T23:17:40+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>Day 1 of the conference was excellent, though I spent the second half of it feeling absolutely shattered, having had less sleep over the last week than I would have liked through a combination of illness, early morning starts, and perhaps a tad more beer than was wise. Which is why I&#8217;m writing this now in my room, when by rights I should be in the bar.</p></p>

<p>We started in a refreshingly human manner, with talks by Scotty and then Mike Lee, focussing on the big picture rather than the nitty gritty details. Of course the details are our meat and drink, and we&#8217;ll get plenty of them this week, but it&#8217;s good to have our eyes dragged off the floor and onto the horizon every now and then.</p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>Day 1 of the conference was excellent, though I spent the second half of it feeling absolutely shattered, having had less sleep over the last week than I would have liked through a combination of illness, early morning starts, and perhaps a tad more beer than was wise. Which is why I&#8217;m writing this now in my room, when by rights I should be in the bar.</p>

<p>We started in a refreshingly human manner, with talks by Scotty and then Mike Lee, focussing on the big picture rather than the nitty gritty details. Of course the details are our meat and drink, and we&#8217;ll get plenty of them this week, but it&#8217;s good to have our eyes dragged off the floor and onto the horizon every now and then.</p>

<p>I particularly liked Mike&#8217;s talk, as much for the effect that it had on the room by confounding our expectations. It was emotional, and personal, and reminded us that there&#8217;s more to life than programming, but also that the skills that we love to use in our programming can be applied to life. </p>

<p>I think it wrong-footed a few of us introverted programmer types, who were expecting nerdery and got philosophy instead. &#8220;What is this emotion of which you speak, human? I have no time for this frippery. Take me to your loader (sic)&#8221;&#8230;</p>

<p>Perhaps it was also just a bit too heartfelt for us cynical Europeans, who get a bit confused when someone is open and honest with us. There&#8217;s usually a little voice in the back of our head wondering if we&#8217;re having the piss taken out of us in some way which is so fiendishly subtle that we haven&#8217;t worked it out yet. Not so in this case. Anyway, good on you Mike, nice job. </p>

<p>Luckily for those in the room teetering on the edge of an existential crisis, this was session was followed by a full on geek fest from Wolf Rentzsch, who gave us a whistle stop tour of the tools and techniques needed to rummage around on the internals of OS X and applications written for it. Hurrah for insanely micro-focussed detail. Now were back on familiar ground. There were some excellent pointers, particularly tantalising for me since there are any number of really irritating things about XCode that I could probably sort out now given sufficient time. Like why the fuck my Data Formatter plug-in only works when there&#8217;s a full moon.</p>

<p>Rentzsch&#8217;s talk was followed by a session from Dave Dribin on clean code, which I&#8217;ve already blogged about (<a href="http://www.elegantchaos.com/node/405" title="http://www.elegantchaos.com/node/405">http://www.elegantchaos.com/node/405</a>), so enough said here. </p>

<p>After which was another good lunch, including another far too nice pudding. May have to hire a people carrier to haul me back to the station at the end of the week&#8230;</p>

<p>One thing I definitely think that they&#8217;ve got right this year is the amount and length of breaks between the sessions, and the overall pacing, with just two sessions in the afternoon. Today these were a talk by Drew McCormack on data presentation, and a brief overview of Core Animation from Marcus Zarra.</p>

<p>Drew&#8217;s talk started with an overview of some existing ways to present data, but was interesting to me mostly as an introduction to a framework he&#8217;s been involved in creating for graphing and plotting. This looked like a great resource when you&#8217;ve got any set of data that you want to display as something better than a big table of numbers.</p>

<p>Marcus&#8217; talk was tantalising, as I felt I knew a bit more about what Core Animation was than he assumed, and was hoping for a little more in the way of code examples or teccy stuff. </p>

<p>To be fair though, it was late by then, and he probably pitched it perfectly for the level of fatigue we were all experiencing at that point. And I guess if I want the details I can buy his book :)</p>

<p>All in all it was an excellent first day. The speakers and the general conversation was of the highest quality - something that came as no surprise after last year, but which still takes a great deal of effort to sustain. </p>

<p>So many thanks to the organisers one and all. I can&#8217;t wait for tomorrow.</p>
     ]]></content>
  </entry>
  <entry>
    <title>Clean Code at NSConference</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/405" />
    <id>http://www.elegantchaos.com/node/405</id>
    <published>2010-02-01T22:28:08+00:00</published>
    <updated>2010-02-01T23:26:49+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>Dave Dribin was preaching to at least one of the converted (me), in his &#8220;Clean Code&#8221; session at <a class="autolink-term" href="http://www.nsconference.com/">NSConference</a> today - but then I have to wrestle with very large bodies of C++ code every day, much of which was written by other people not following any of his guidelines!</p></p>

<p>Most of the stuff he said was uncontroversial, but it was amusing to see a few people in the audience bristling at one or two of the suggestions that Dave made - you could hear the cogs turning in their brains as they thought &#8220;but I do that all the time, and I&#8217;m <em>smart</em>, so he <em>must</em> be wrong&#8221;.</p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>Dave Dribin was preaching to at least one of the converted (me), in his &#8220;Clean Code&#8221; session at <a class="autolink-term" href="http://www.nsconference.com/">NSConference</a> today - but then I have to wrestle with very large bodies of C++ code every day, much of which was written by other people not following any of his guidelines!</p>

<p>Most of the stuff he said was uncontroversial, but it was amusing to see a few people in the audience bristling at one or two of the suggestions that Dave made - you could hear the cogs turning in their brains as they thought &#8220;but I do that all the time, and I&#8217;m <em>smart</em>, so he <em>must</em> be wrong&#8221;.</p>

<p>I can&#8217;t really offer an opinion on KVO vs Delegates, not having done enough Cocoa work, although I think it&#8217;s all a storm in a teacup anyway as he was simply offering a personal order of precedence. Having had to debug very complex systems I can see where he was coming from though. KVO sounds like a lovely way to decouple systems, but it can get scary when just &#8220;setting values&#8221; can cause a rich ripple of side effects that extends way beyond the object you thought you were playing with.</p>

<p>I do think Dave&#8217;s right about singletons - at the end of the day they are globals, but somehow we&#8217;ve ended up with design pattern books telling us about them, and people like Scott Meyers telling us how to implement them efficiently, and it&#8217;s blinded us to the fact. </p>

<p>The point that some people seemed to be missing was not that they aren&#8217;t useful (they can be), or even that they aren&#8217;t the right or pragmatic solution to some problems (they can be). It&#8217;s just that they often aren&#8217;t the best solution, and yet it is dangerously easy to fall into the trap of making them when you don&#8217;t need to - I know, I do it all the time, with the best of intentions. And Dave was right - using a singleton you can easily end up with annoying hidden dependencies and inflexibilities which you can avoid if you instead use a pattern where you pass in the services/resources that you need.  And it does make life particularly hard if you want to do test driven development and unit test the hell out of everything.</p>

<p>I never felt that Dave&#8217;s tone was in any way preachy, but maybe some people wondered why he was telling them stuff that &#8220;we already know&#8221;. Perhaps it&#8217;s also just a very healthy skepticism in the audience towards received wisdom, which is fair enough - I&#8217;m all for that. But just because it&#8217;s received wisdom, it doesn&#8217;t always make it wrong, any more than it makes it right!</p>

<p>In any case I&#8217;m not at all convinced that everyone in the room does know all that stuff. There were plenty of indy developers in the room, who are working on there own a fair amount of the time, many of whom are 25 or younger. I&#8217;ve also met plenty of developers in my life who&#8217;ve been doing coding professionally for years and still haven&#8217;t got a clue!</p>

<p>When I was 21 and just out of college I was lucky enough to get a great job working in an university research department, writing educational software in Hypercard (with plenty of lovely XCMDs that I wrote too). It was a brilliant job and a fantastic environment in many ways, with loads of freedom for someone just out of college. At the tender age of 21 though, I was the only full-time developer and with the benefit of hindsight I realise that I missed out on a great deal of stuff that was going on at the time in the wider software engineering world, because there was nobody at work to point me in the right direction. I was totally focussed on what I was trying to make, and not on the process of how it got made. Things are a lot better now than they were in 1992 of course, and it&#8217;s a lot easier to stay in touch with the current trends in computer science through the sort of social networking that we now have. But you still occasionally need people to tell you stuff, even stuff that you&#8217;re supposed to already know.</p>

<p>There&#8217;s definitely no harm in being reminded of some of the basics from time to time, and having some of your assumptions challenged - whether you&#8217;ve been doing programming for 1 year or 5 years or 30.</p>
     ]]></content>
  </entry>
  <entry>
    <title>More On Doxygen From XCode</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/404" />
    <id>http://www.elegantchaos.com/node/404</id>
    <published>2010-01-13T23:21:59+00:00</published>
    <updated>2010-01-14T00:01:28+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>I posted last week about running Doxygen from XCode using a custom build step.</p></p>

<p>I originally found a nice article on the <a class="autolink-term" href="http://www.apple.com">Apple</a> website <a href="http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
">here</a> which describes how to do this, but it needed a little bit of tweaking, and wasn&#8217;t great, so I&#8217;ve improved the process a little bit.</p>

<p>First of all, I moved the bulk of the work into a script file, so that I can reuse it in multiple projects. This seems more sensible than cutting &amp; pasting into every project. DRY principle!</p>

<p>I also decided to use a standard layout, relative to the project file, which meant that I could cut down on the number of variables that needed defining per-project. </p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>I posted last week about running Doxygen from XCode using a custom build step.</p>

<p>I originally found a nice article on the <a class="autolink-term" href="http://www.apple.com">Apple</a> website <a href="http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
">here</a> which describes how to do this, but it needed a little bit of tweaking, and wasn&#8217;t great, so I&#8217;ve improved the process a little bit.</p>

<p>First of all, I moved the bulk of the work into a script file, so that I can reuse it in multiple projects. This seems more sensible than cutting &amp; pasting into every project. DRY principle!</p>

<p>I also decided to use a standard layout, relative to the project file, which meant that I could cut down on the number of variables that needed defining per-project. </p>

<p>My custom build step now just has to define a couple of variables and call on to the script.</p>

<p>You can find my version of the script here:</p>

<p><a href="http://guest:guest@source.elegantchaos.com/scripts/xcode/build-doxygen.sh" title="http://guest:guest@source.elegantchaos.com/scripts/xcode/build-doxygen.sh">http://guest:guest@source.elegantchaos.com/scripts/xcode/build-doxygen.s...</a></p>

<p>It could be cleaned up a lot more - it&#8217;s basically copied from Apple&#8217;s script then hacked a bit - I didn&#8217;t write it with public review in mind!  One thing I fixed in the script was support for projects that have a space in their name or the name of a containing folder. Bloody unix programmers!</p>

<p>Second, I was annoyed by the output of the script, so I piped it into a file.</p>

<p>Finally, I was also annoyed at having to wait for the script to complete. Rebuilding the documentation each time is useful, but it&#8217;s not like you actually want to go and use it immediately.</p>

<p>So, I tweaked the build step to run it in the background.</p>

<p>Now my build step looks like this:</p>

<p>${WORKROOT}/scripts/xcode/build-doxygen.sh > &#8220;$TEMP<em>DIR/doxygen.output.log&#8221; 2> &#8220;$TEMP</em>DIR/doxygen.log&#8221; &amp;</p>

<p>$WORKROOT is a variable that points to the root of my development folder - you can just replace it with the path to the build-doxygen.sh script file.</p>

<p>The script file itself relies on one extra variable - $DOXYGEN_ID - which I define in the project settings. It uses this to name the documentation bundle - so you should set it to something appropriate for the product - like com.yourcompany.yourproduct.</p>

<p>If you want to see the output of the script, you can add a second line:</p>

<p>open &#8220;$TEMP_DIR/doxygen.output.log&#8221;</p>

<p>This will launch Console and open the log file. Console is smart enough to update as the log file gets filled in, so it works even though the script may not have finished running by the time you open the log.</p>

<p>Update: one more thing&#8230;</p>

<p>By default XCode runs the build step every time. You can tell it to be a bit smarter by telling it what the input files and output files are for the step; it will then dependency check them.</p>

<p>I set the inputs to:</p>

<ul>
<li>$(SRCROOT)/Code</li>
<li>$(WORKROOT)/scripts/xcode/build-doxygen.sh</li>
</ul>

<p>And the output to:</p>

<ul>
<li>/Users/$(USER)/Library/Developer/Shared/Documentation/DocSets/$(DOXYGEN_ID).docset/Contents/Info.plist</li>
</ul>

<p>Now, if you do something that doesn&#8217;t change the source code, the documentation shouldn&#8217;t rebuild.</p>
     ]]></content>
  </entry>
  <entry>
    <title>The power of tools (especially Instruments.app)</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/403" />
    <id>http://www.elegantchaos.com/node/403</id>
    <published>2010-01-13T19:51:58+00:00</published>
    <updated>2010-01-13T19:51:58+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>For a couple of weeks the Console application on my laptop has been crashing every time I started it up. This was a bit weird, and also very annoying, since I use it from time to time whilst developing, and to check that the system isn&#8217;t doing anything particularly heinous.</p></p>

<p>The stack for the crash log appeared to be in a call to the file system, so I figured that the problem was file related in some way. I tried removing the Console preferences, to no avail.</p>

<p>After a bit of thought, I realised that I could probably use Instruments (part of <a class="autolink-term" href="http://www.apple.com">Apple</a>&#8217;s Developer Tools suite) to work it out.</p>

<p>So I launched it, chose the &#8220;File Activity&#8221; template, and set it up to run Console. This is a great way to see what an application is doing with files.</p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>For a couple of weeks the Console application on my laptop has been crashing every time I started it up. This was a bit weird, and also very annoying, since I use it from time to time whilst developing, and to check that the system isn&#8217;t doing anything particularly heinous.</p>

<p>The stack for the crash log appeared to be in a call to the file system, so I figured that the problem was file related in some way. I tried removing the Console preferences, to no avail.</p>

<p>After a bit of thought, I realised that I could probably use Instruments (part of <a class="autolink-term" href="http://www.apple.com">Apple</a>&#8217;s Developer Tools suite) to work it out.</p>

<p>So I launched it, chose the &#8220;File Activity&#8221; template, and set it up to run Console. This is a great way to see what an application is doing with files.</p>

<p>Lo and behold, the last thing Instruments did was open a file in /var/log/, then repeatedly try to open some file in /.vol/.</p>

<p>Doing a quick ls of /var/log/ revealed a symbolic link to something that I thought that I had removed (some crappy VPN software called SecureClient that I used to rely on but don&#8217;t any more as it doesn&#8217;t work on 10.6 anyway). Further investigation revealed that the symbolic link pointed to another symbolic link, which pointed&#8230; to itself. That would do it!</p>

<p>All in all it took about 5 minutes to find and fix this crash once I realised that using Instruments was more sensible than just sitting around guessing what might be causing Console to crash&#8230;</p>
     ]]></content>
  </entry>
  <entry>
    <title>QPR Woes</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/402" />
    <id>http://www.elegantchaos.com/node/402</id>
    <published>2010-01-13T16:57:50+00:00</published>
    <updated>2010-01-13T16:59:57+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>The BBC report for the QPR match last night said &#8220;there were plenty of positives for Paul Hart to take from this game&#8221;.</p></p>

<p>I&#8217;m not sure what match they were watching, but the only positive that I could think of was that he&#8217;ll probably not be in the job long enough to have to worry too much about what&#8217;s going wrong.</p>

<p>Not that it is entirely his fault - the situation off the pitch at QPR is a complete joke - but unfortunately one has to say that Hart has had no discernible positive impact since coming in, and in fact we seem to be going backwards.</p>

<p>The progression of the team over this season might be described as follows:</p>

<p>Under Magilton:
- first: playing nice football but losing
- next: playing amazing football and winning by lots</p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>The BBC report for the QPR match last night said &#8220;there were plenty of positives for Paul Hart to take from this game&#8221;.</p>

<p>I&#8217;m not sure what match they were watching, but the only positive that I could think of was that he&#8217;ll probably not be in the job long enough to have to worry too much about what&#8217;s going wrong.</p>

<p>Not that it is entirely his fault - the situation off the pitch at QPR is a complete joke - but unfortunately one has to say that Hart has had no discernible positive impact since coming in, and in fact we seem to be going backwards.</p>

<p>The progression of the team over this season might be described as follows:</p>

<p>Under Magilton:
- first: playing nice football but losing
- next: playing amazing football and winning by lots
- then: playing nice football but often failing to win</p>

<p>Under Hart:
- playing unattractive percentage football, and losing badly</p>

<p>Under Magilton we appeared to have the basis of a plan. We were distributing the ball from keeper to fullbacks, to midfield. We were generally solid and well marshalled at the back (until Fitz Hall got fit and returned to the side, at which point everything went tits up). Our holding midfielders did a good job of protecting the back four. Our main downfall was Faurlin&#8217;s over-eager passing (he has a bad tendency to hit blind first-time passes), plus a large dose of over-elaboration by our creative players. That was serious, but could have been fixed with some coaching.</p>

<p>Now, the keeper and defenders are back to hoofing the ball up front, and look to be playing to no plan at all. The central midfield seem to have lost their composure, and the creative players are either not getting picked, not getting the ball, or appear to have lost their touch (or possibly the will to live).</p>

<p>Dire stuff.</p>
     ]]></content>
  </entry>
  <entry>
    <title>Running Doxygen automatically over an XCode project</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/401" />
    <id>http://www.elegantchaos.com/node/401</id>
    <published>2010-01-06T12:46:09+00:00</published>
    <updated>2010-01-06T12:50:07+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>I was wondering whether to use HeaderDoc or Doxygen for Objective-C project, and after a bit of googling I get the impression that HeaderDoc is on its way out.</p></p>

<p>I found a nice article on the <a class="autolink-term" href="http://www.apple.com">Apple</a> website <a href="http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
">here</a> which describes how to get XCode to run Doxygen for you as part of your build, and turn the results into a DocSet which XCode knows about.</p>

<p>It works rather well, and the documentation for my test iPhone project now shows up in XCode along with the standard <a class="autolink-term" href="http://www.apple.com">Apple</a> sets. </p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>I was wondering whether to use HeaderDoc or Doxygen for Objective-C project, and after a bit of googling I get the impression that HeaderDoc is on its way out.</p>

<p>I found a nice article on the <a class="autolink-term" href="http://www.apple.com">Apple</a> website <a href="http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
">here</a> which describes how to get XCode to run Doxygen for you as part of your build, and turn the results into a DocSet which XCode knows about.</p>

<p>It works rather well, and the documentation for my test iPhone project now shows up in XCode along with the standard Apple sets. </p>

<p>One slight issue - I had to edit the script a bit to cope with having a space in the path to your project. It also has rather verbose output - adding &#8212;silent to the make command helps a bit, as does altering the doxygen.config to run quietly. Unfortunately the commands in the make file that Doxygen generates still seem to spit out a fair amount of crap even if everything is working.</p>

<p>One other problem - XCode can&#8217;t seem to find the documentation for a type when I option-click on it, in the way that it would do for an Apple type. This may just be a question of needing to rebuild my indexes though&#8230;</p>
     ]]></content>
  </entry>
  <entry>
    <title>Messing with the iPhone - How Many Countdown Apps Can There Be?</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/400" />
    <id>http://www.elegantchaos.com/node/400</id>
    <published>2010-01-05T13:45:24+00:00</published>
    <updated>2010-01-05T13:45:53+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>Over the holidays I&#8217;ve been messing about with the iPhone SDK, just for the hell of it.</p></p>

<p>I always prefer to have a project in mind when learning new tools, but I didn&#8217;t have much time, so I fairly randomly decided to do a little countdown application - something that tells you how long you&#8217;ve got before Christmas (for some reason this topic was on my mind).</p>

<p>The app itself was pretty simple to get going (less than a day), and doing the UI for the preferences has proved to be far more time consuming than the actual functionality! Once again I&#8217;ve been reminded how much fun it is to work with Objective-C / Cocoa.</p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>Over the holidays I&#8217;ve been messing about with the iPhone SDK, just for the hell of it.</p>

<p>I always prefer to have a project in mind when learning new tools, but I didn&#8217;t have much time, so I fairly randomly decided to do a little countdown application - something that tells you how long you&#8217;ve got before Christmas (for some reason this topic was on my mind).</p>

<p>The app itself was pretty simple to get going (less than a day), and doing the UI for the preferences has proved to be far more time consuming than the actual functionality! Once again I&#8217;ve been reminded how much fun it is to work with Objective-C / Cocoa.</p>

<p>If this had actually been intended as a commercial prospect, I&#8217;d have checked the iPhone store first, but luckily I always viewed it as a made-up project for test purposes only. Having said that I thought that I might conceivably post it to the store, just for the hell of it, so I went to have a look at the competition. </p>

<p>I figured that it was a totally unoriginal idea, so there&#8217;d probably be a few up there already. I wasn&#8217;t prepared, however, for there to be <em>about forty!</em> What&#8217;s more, I&#8217;d say that over half of them are paid apps (though costing only a dollar in all cases).</p>

<p>This is quite boggling, and it makes one wonder. Does anyone ever pay for these apps? Some of them have reviews, in some cases quite positive reviews, which suggests that they do. There are supposed to be more iPhones out there than Xbox 360s and PS3s put together. That&#8217;s quite a big market, but is it really big enough for 40 applications competing for a tiny and almost pointless niche? I&#8217;d love to know if anyone has sold more than 100 copies.</p>

<p>I guess the moral of the story is to check the store before you put any serious time into an application. Although, perhaps not. Perhaps the moral is to check the store, rip off the good features of your competition, then do the app anyway because it&#8217;s a big, big, market. Or maybe not!</p>
     ]]></content>
  </entry>
  <entry>
    <title>Documentation - Huh - What Is It Good For?</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/398" />
    <id>http://www.elegantchaos.com/node/398</id>
    <published>2009-09-11T14:06:59+00:00</published>
    <updated>2009-09-11T14:08:50+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>(absolutely quite a bit, actually, say it again)</p></p>

<p>James at work said yesterday that often he finds, paradoxically, the code that is best documented is  also the code that needs documentation the least, since it tends to be well designed and written in the first place.</p>

<p>I know what he meant, and it rang a little bell with me (although whether my code falls into that category is for others to judge :) ).</p>

<p>In lots of the places I&#8217;ve worked I&#8217;ve tended to be one of the few people who writes documentation, and I often wonder whether anyone else reads it. Is it, perhaps, all a monumental waste of time?</p>

<p>That said (and when I&#8217;m not having a bad day), I believe that to worry too much about whether it gets used would be to miss the fundamental point.</p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>(absolutely quite a bit, actually, say it again)</p>

<p>James at work said yesterday that often he finds, paradoxically, the code that is best documented is  also the code that needs documentation the least, since it tends to be well designed and written in the first place.</p>

<p>I know what he meant, and it rang a little bell with me (although whether my code falls into that category is for others to judge :) ).</p>

<p>In lots of the places I&#8217;ve worked I&#8217;ve tended to be one of the few people who writes documentation, and I often wonder whether anyone else reads it. Is it, perhaps, all a monumental waste of time?</p>

<p>That said (and when I&#8217;m not having a bad day), I believe that to worry too much about whether it gets used would be to miss the fundamental point.</p>

<p>The reasons that I write documentation, in order of importance, are:</p>

<ul>
<li>to clarify what I&#8217;m trying to do</li>
<li>to clarify why I&#8217;m trying to do it</li>
<li>to offer up my design for peer review</li>
<li>to explain my implementation choices</li>
<li>to note avenues that I&#8217;ve tried and rejected, to avoid others doing the same</li>
<li>to help other people use what I&#8217;ve done</li>
</ul>

<p>If anything, the &#8220;why?&#8221; is even more important that the &#8220;what?&#8221;. Spend a bit of thought on that one, and the rest may turn out to be irrelevant.</p>

<p>In any case, having other people use the documentation as a reference comes pretty far down the list of priorities. </p>

<p>Which doesn&#8217;t mean that I don&#8217;t want people to do that (it would really help, frankly, if more people would RTFM!). It does mean though that I&#8217;m not going to lose too much sleep if I feel that I&#8217;m the only one reading what I write.</p>

<p>At the end of the day, writing documentation, for me, is an essential part of the process of writing software, especially when working with others. How can you code a system that you can&#8217;t describe in words or pictures? </p>

<p>Having other people read it is just a bonus.</p>
     ]]></content>
  </entry>
  <entry>
    <title>QPR Fixtures Calendar iCal Subscription Address</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/397" />
    <id>http://www.elegantchaos.com/node/397</id>
    <published>2009-07-03T09:50:36+00:00</published>
    <updated>2009-07-03T09:54:36+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>The last link I gave for my QPR calendar was a bit wonky.</p></p>

<p>If you want to subscribe to the calendar with iCal, choose &#8220;Subscribe&#8230;&#8221; from the &#8220;Calendar&#8221; menu and enter the following URL:</p>

<p><noformat>http://www.google.com/calendar/ical/b4ap3k1k0olfk8oqbqcqtmu898%40group.calendar.google.com/public/basic.ics</noformat></p>

<p>Don&#8217;t just follow this link in your browser. Doing that would download the calendar events and import them into your iCal calendar. That&#8217;s not as good as subscribing, as you won&#8217;t automatically receive any updates.</p>

<p>You can also view it on the web <a href="http://www.google.com/calendar/embed?src=b4ap3k1k0olfk8oqbqcqtmu898%40group.calendar.google.com&amp;ctz=Europe/London">here</a>.</p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>The last link I gave for my QPR calendar was a bit wonky.</p>

<p>If you want to subscribe to the calendar with iCal, choose &#8220;Subscribe&#8230;&#8221; from the &#8220;Calendar&#8221; menu and enter the following URL:</p>

<p><noformat>http://www.google.com/calendar/ical/b4ap3k1k0olfk8oqbqcqtmu898%40group.calendar.google.com/public/basic.ics</noformat></p>

<p>Don&#8217;t just follow this link in your browser. Doing that would download the calendar events and import them into your iCal calendar. That&#8217;s not as good as subscribing, as you won&#8217;t automatically receive any updates.</p>

<p>You can also view it on the web <a href="http://www.google.com/calendar/embed?src=b4ap3k1k0olfk8oqbqcqtmu898%40group.calendar.google.com&amp;ctz=Europe/London">here</a>.</p>
     ]]></content>
  </entry>
  <entry>
    <title>QPR Fixtures Calendar Updated</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/396" />
    <id>http://www.elegantchaos.com/node/396</id>
    <published>2009-06-18T08:53:41+00:00</published>
    <updated>2009-06-18T08:53:41+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>I&#8217;ve updated my public iCal calendar with next season&#8217;s QPR fixtures.</p></p>

<p>The calendar can be found here: <a href="http://bit.ly/RsycM" title="http://bit.ly/RsycM">http://bit.ly/RsycM</a>.</p>

<p>No doubt there will be a few changes due to televised games and so on - I&#8217;ll try to keep it updated as &amp; when these occur.</p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>I&#8217;ve updated my public iCal calendar with next season&#8217;s QPR fixtures.</p>

<p>The calendar can be found here: <a href="http://bit.ly/RsycM" title="http://bit.ly/RsycM">http://bit.ly/RsycM</a>.</p>

<p>No doubt there will be a few changes due to televised games and so on - I&#8217;ll try to keep it updated as &amp; when these occur.</p>
     ]]></content>
  </entry>
  <entry>
    <title>eee 901 Hackintosh upgrade to 10.5.7</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/395" />
    <id>http://www.elegantchaos.com/node/395</id>
    <published>2009-06-12T06:57:48+00:00</published>
    <updated>2009-06-12T07:03:15+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>Last night, with a bit of trepidation, I let my eee 901 hackintosh upgrade itself to MacOS 10.5.7. I&#8217;d been putting it off for fear that I might end up with a non-bootable machine (I could have recovered from it, but it would have been a pain).</p></p>

<p>As luck would have it, it mostly worked ok.</p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>Last night, with a bit of trepidation, I let my eee 901 hackintosh upgrade itself to MacOS 10.5.7. I&#8217;d been putting it off for fear that I might end up with a non-bootable machine (I could have recovered from it, but it would have been a pain).</p>

<p>As luck would have it, it mostly worked ok.</p>

<p>After reboot, the main problem that I had was that the monitor settings had reverted to 1024 x 768, causing the top &amp; bottom of the screen to be cut off. Since the Mac menubar is at the top, this was a bit of a snag, but luckily I know the layout of everything pretty well, and I also had the advantage of Spotlight. Hitting Cmd-Space brings up the spotlight search box (in the right place, interestingly, even though the menubar was in the wrong place), and typing the name of an application allows you to launch it.</p>

<p>After a bit of experimenting, I ended up just re-installed the kexts from the EEE-Utilities package put together by <a class="autolink-term" href="http://eeemac.blogspot.com/">Gregory Cohen</a>. This seems to have sorted everything out.</p>
     ]]></content>
  </entry>
  <entry>
    <title>So Much For Open Letters</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/394" />
    <id>http://www.elegantchaos.com/node/394</id>
    <published>2009-06-09T15:52:25+00:00</published>
    <updated>2009-06-09T15:52:25+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>Ah well, eventually I crumbled and renewed my season ticket&#8230; so here&#8217;s to another year of fun and frolics at QPR.</p></p>

<p>I can&#8217;t help feeling a little underwhelmed at the appointment of Jim Magilton. Not that I have anything against him at all, and Ipswich have played some attractive football in the last few years. </p>

<p>However, he does appear to have been sacked by the Ipswich chairman having only got them to roughly the same league position that we were in when Iain Dowie and Paulo Sousa both, ahem, departed, from QPR. Which makes one wonder what exactly the QPR board are looking for in a manager. </p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>Ah well, eventually I crumbled and renewed my season ticket&#8230; so here&#8217;s to another year of fun and frolics at QPR.</p>

<p>I can&#8217;t help feeling a little underwhelmed at the appointment of Jim Magilton. Not that I have anything against him at all, and Ipswich have played some attractive football in the last few years. </p>

<p>However, he does appear to have been sacked by the Ipswich chairman having only got them to roughly the same league position that we were in when Iain Dowie and Paulo Sousa both, ahem, departed, from QPR. Which makes one wonder what exactly the QPR board are looking for in a manager. </p>

<p>My fear is that they are looking for a yes man who will put up with the high levels of interference from the board that the previous three or four managers are alleged to have had. My fear is also that the fact that they met with Magilton four times has more to say about the number of other managers who were also interviewed, and who quite possibly rejected QPR (rather than the other way round). There are a lot of managers unemployed at the moment who have a better pedigree on paper - one wonders how many of them have said &#8220;QPR? You&#8217;d be mad to even contemplate it.&#8221;.</p>

<p>Hope springs eternal, however - so I&#8217;m going to do my best to trust the board, get behind the new manager, and behave like a loyal <strike>customer</strike> fan&#8230;  and only put a <em>modest</em> bet on him being gone by Christmas.</p>
     ]]></content>
  </entry>
  <entry>
    <title>Open Letter To QPR</title>
    <link rel="alternate" type="text/html" href="http://www.elegantchaos.com/node/393" />
    <id>http://www.elegantchaos.com/node/393</id>
    <published>2009-05-16T13:55:44+00:00</published>
    <updated>2009-05-16T13:55:44+00:00</updated>
    <author>
      <name>Sam Deane</name>
    </author>
    <summary type="html"><![CDATA[ <p><p>This <a href="http://blog.jameshiggs.com/2009/04/11/an-open-letter-to-flavio-briatore-and-the-board-of-qpr/">open letter</a> to QPR from James Higgs echoes my sentiments about QPR at the moment.</p></p>

<p>Like him, I&#8217;m seriously considering not bothering to renew my season ticket.</p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>This <a href="http://blog.jameshiggs.com/2009/04/11/an-open-letter-to-flavio-briatore-and-the-board-of-qpr/">open letter</a> to QPR from James Higgs echoes my sentiments about QPR at the moment.</p>

<p>Like him, I&#8217;m seriously considering not bothering to renew my season ticket.</p>
     ]]></content>
  </entry>
</feed>
