tonyarnold.com http://tonyarnold.com tonyarnold.com Feed en-us Symphony (build 1701) Internet Explorer does not support modern web standards http://tonyarnold.com/entries/internet-explorer-does-not-support-modern-web-standards/ Sun, 13 Jul 2008 21:59:00 GMT http://tonyarnold.com/entries/internet-explorer-does-not-support-modern-web-standards/ <div><a href="http://www.flickr.com/photos/tonyarnold/2665725506/" title="Apple - MobileMe - Migrating"><img src="http://farm4.static.flickr.com/3020/2665725506_4695e7222c.jpg" style="" alt="Apple - MobileMe - Migrating" /></a></div> <p>Found here: <a href="http://www.apple.com/mobileme/migrating/">http://www.apple.com/mobileme/migrating/</a></p> <p>Finally, someone has the balls to out and out say it in a professional context. IE 7 does not support modern web standards.</p> <p>Nice.</p> Convenience #DEFINEs http://tonyarnold.com/entries/convenience-defines/ Sat, 05 Jul 2008 03:00:00 GMT http://tonyarnold.com/entries/convenience-defines/ <p><strong>Update:</strong> <em>Lazy programmer, indeed! After doing some research myself this afternoon (at the prompting of Karsten), I&#8217;d recommend not using anything but the <code>ZNCGAutoRelease()</code> method below - the others aren&#8217;t dangerous, but they&#8217;re really not necessary and just obscure your ability to properly debug your code. As for using macros, well, I guess that&#8217;s a matter of personal preference - what I&#8217;ve seen so far is that it does make debugging harder - you&#8217;re probably better off implementing proper methods for repeatable tasks. But it works if you want to use it.</em></p> <p>When I first started working on VirtueDesktops (all those years ago), I was still new to Objective-C and very new to the concept of (mostly) manual memory management. Thankfully Thomas had the foresight to do what all good, lazy programmers should do and write himself a few small convenience methods into his codebase.</p> <p>They&#8217;ve had a couple of minor additions and changes since then, but line-for-line, they&#8217;ve stood the test of time and I find them an invaluable way to reduce some of the fuss involved in manually managing your object assignments, copies and releases.</p> <pre> <code>#define ZNCGAutoRelease(x) (__typeof(x))[NSMakeCollectable(x) autorelease] #define ZNAssign(aTarget, aSource) \ if (aTarget != nil) { \ [aTarget autorelease]; \ } \ aTarget = [aSource retain]; #define ZNAssignCopy(aTarget, aSource) \ if (aTarget != nil) { \ [aTarget autorelease]; \ } \ aTarget = [aSource copy]; #define ZNRelease(aTarget) \ if (aTarget != nil) { \ id oldObject = aTarget; \ aTarget = nil; \ [oldObject release]; \ }</code> </pre> <p>I use these <strong>everywhere</strong> in my code, but just the other day I discovered the absolutely incredibly wonderful <a href="http://clang.llvm.org/StaticAnalysis.html">CLANG Static Analysis</a> tools (more on this shortly!), and based on some feedback it gave around these calls (nothing bad!) it made me wonder - should I be <code>#DEFINE</code>ing convenience methods? Is this best practice? Should I go back to doing this all by hand?</p> <p>I&#8217;m hoping some of my CocoaPeers&trade; will be able to provide me with some advice here, but if you think the code&#8217;s good for your needs - go for your life and use it.</p> <p>Oh, and happy 4th of July to our friends in the states. We&#8217;re waiting for you here on the 5th :)</p> Introducing the face of Hyperspaces http://tonyarnold.com/entries/introducing-the-face-of-hyperspaces/ Thu, 05 Jun 2008 16:33:00 GMT http://tonyarnold.com/entries/introducing-the-face-of-hyperspaces/ <p>I&#8217;d like to introduce everyone to the greatest icon to ever grace a screen:</p> <p><img src="http://hyperspacesapp.com/img/Hyperspaces.png" alt="The Hyperspaces Icon" title="The Hyperspaces Icon" /></p> <p>This gorgeous piece of design was put together by Sebastiaan De With of <a href="http://cocoia.com">Cocoia.com</a> and <a href="http://icondesigner.net/">IconDesigner.net</a> fame. He was an absolute pleasure to work with, and I&#8217;ve heard nothing but praise for him from my peers. He&#8217;s also got a blog post up his sleeve about <a href="http://blog.cocoia.com/2008/06/13/faster-than-light-making-the-hyperspaces-icon/">the process we went through together to end up with what you see above</a>.</p> <p>Oh, and the promo site for Hyperspaces is up: <a href="http://hyperspacesapp.com/">http://hyperspacesapp.com/</a></p> On how primary function becomes secondary http://tonyarnold.com/entries/on-how-primary-function-becomes-secondary/ Wed, 04 Jun 2008 15:35:00 GMT http://tonyarnold.com/entries/on-how-primary-function-becomes-secondary/ <p>Over the last month, I&#8217;ve been slowly expanding my list of testers who are helping me with <a href="http://hyperspacesapp.com/">Hyperspaces</a>. Initially, most of the testers viewed <a href="http://hyperspacesapp.com/">Hyperspaces</a> as a novelty (which it is), but didn&#8217;t leave it running. They&#8217;d test whether a new build worked, and then go back to what they were doing. It was an interesting thing to watch: I&#8217;d poured months and months of my time into making the visual space switcher function properly, and nobody was really using it.</p> <ul> <li>Does it show a near real-time overview of what&#8217;s happening on all of your spaces? <strong>Check.</strong></li> <li>Does it use nearly no CPU? <strong>Check.</strong></li> <li>Does it look good? myyeeeeah - <strong>it&#8217;s not terrible.</strong></li> </ul> <p>Initially, I didn&#8217;t pay much attention to what was happening here, and just plowed through adding in some of what I considered to be secondary features. This included the ability to set a different desktop image, a tinted colour overlay and text labels on each of your spaces.</p> <p>It turns out I was seriously off-base with what people actually miss from <a href="http://virtuedesktops.info/">VirtueDesktops</a> and it&#8217;s ilk. The big ticket item that seems to be missing from Apple&#8217;s implementation with Spaces is context: <strong>Which space am I currently working in?</strong></p> <p>Anyhow, those are just my observations - don&#8217;t assume that you know what&#8217;s important based solely upon your own experience and ideas. In my case, this wasn&#8217;t time lost or wasted - the technical work involved in gathering information about how Spaces works is used just about everywhere in <a href="http://hyperspacesapp.com/">Hyperspaces</a>, and once I&#8217;ve released the app, I&#8217;ll share a lot of what I&#8217;ve learned so that others can benefit from that research.</p> <p>Now before <a href="http://neilang.com/">Neil</a> has a go at me for not releasing a public beta before <a href="http://developer.apple.com/wwdc/">WWDC</a> - because apparently he&#8217;s not too keen on attending with a &#8220;has been&#8221; - I am serious about getting <a href="http://hyperspacesapp.com/">Hyperspaces</a> into your hands as soon as I can, but I&#8217;m not going to release something that is <strong>almost</strong> good enough. I&#8217;m almost there, and you can help me - I&#8217;m about to build the final visuals for the switcher, and I&#8217;d appreciate some feedback.</p> <p>Here&#8217;s how it looks in 1.0 alpha build 404 (heh - yes, I see it too):</p> <p><img src="http://tonyarnold.com/workspace/upload/2008/switcher_now.png" alt="Current Hyperspaces switcher" title="Current Hyperspaces switcher" /></p> <p>It functions much as you&#8217;d expect - you click on a space to switch to it. The active space shows a live-updating image of your current space, and the others show ghosted representations of your windows. Everything is drawn using CoreAnimation, so transitions of window positions smoothly fade in and out as window positions change on other spaces.</p> <p>Here are my rough ideas mocked up using Fireworks for where this is could head:</p> <h2>The QuickSilver concept</h2> <p>The first is a QuickSilver-style window that would include other functionality and configuration options:</p> <p><img src="http://tonyarnold.com/workspace/upload/2008/idea_window.png" alt="QuickSilver-style switcher idea" title="QuickSilver-style switcher idea]" /></p> <h2>The HUD concept</h2> <p>The second (and my current front-runner with a bit more polish) is this black, hud-like window. It also reflects some of the design elements of Hyperspaces very, very unique icon which I&#8217;ll be introducing before the week is out.</p> <p><img src="http://tonyarnold.com/workspace/upload/2008/idea_black.png" alt="HUD-style switcher idea" title="HUD-style switcher idea]" /></p> <p>Leave your thoughts in the comments.</p> How late I am&#8230; http://tonyarnold.com/entries/how-late-i-am/ Sun, 11 May 2008 03:20:00 GMT http://tonyarnold.com/entries/how-late-i-am/ <div> <a href="http://www.flickr.com/photos/tonyarnold/2482267014/" title="How late I am..."><img src="http://farm4.static.flickr.com/3213/2482267014_c5c7ae042f.jpg" alt="How late I am..." /></a> </div> <p>This just demonstrates how much your planning ends up meaning when you have a full-time job in addition to developing an application. I started earnestly developing Hyperspaces just under 6 months ago now (17th December, 2007 is the date of the first subversion commit). I&#8217;d been toying with the idea of a version of VirtueDesktops that wasn&#8217;t an insane hack, but instead worked with Apple&#8217;s implementation of virtual desktops for a few months prior. Until that week, I wasn&#8217;t sure it would be possible to gather enough information or interact with Spaces in a way that would even let me achieve what I wanted to.</p> <p>Is the development vs. full-time job dilemma common among other small developers? Long term, I&#8217;d love to be able to develop great mac applications full-time, but it seems to be a catch-22 situation.</p> These are the voyages of the USS Hyperspaces&#8230; http://tonyarnold.com/entries/these-are-the-voyages-of-the-uss-hyperspaces/ Sat, 10 May 2008 06:20:00 GMT http://tonyarnold.com/entries/these-are-the-voyages-of-the-uss-hyperspaces/ <p><object width="579" height="400" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab"> <param name="src" value="http://tonyarnold.com/workspace/upload/2008/080510-155513-poster.jpg" /> <param name="href" value="http://tonyarnold.com/workspace/upload/2008/080510-155513-desktop.mov" /> <param name="target" value="myself" /> <param name="controller" value="false" /> <param name="autoplay" value="false" /> <param name="scale" value="aspect" /> <embed width="579" height="400" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/" src="http://tonyarnold.com/workspace/upload/2008/080510-155513-poster.jpg" href="http://tonyarnold.com/workspace/upload/2008/080510-155513-desktop.mov" target="myself" controller="false" autoplay="false" scale="aspect"> </embed> </object></p> <p><strong>Double-click to play</strong>.</p> <p>Hyperspaces is feature-complete, I&#8217;m just working on the user interface controls to configure the desktop elements you can see in the video. <del>I have a few more bugs to fix, a web site to construct and a tiny bit of documentation to write, and then (finally) I&#8217;ll be releasing a public beta</del>. <ins>Yes, I know what I said - I&#8217;m taking it back. I want Hyperspaces to be as polished as <a href="http://coverstream.net/">CoverStream</a>, and right now it&#8217;s not. But it will be - and it will be soon, but whereas 24 hours ago soon meant &#8220;Monday&#8221;, now it means &#8220;before WWDC08&#8221;. Flame on.</ins></p> <p>Oh, and if I haven&#8217;t said it enough alread - <strong>Core Animation is seriously the poo</strong>. If you&#8217;re not using it in your apps, you should be. Watch the video and tell me you don&#8217;t want implicit animation.</p> Integrated documentation for Xcode projects: a project proposal http://tonyarnold.com/entries/integrated-documentation-for-xcode-projects-a-project-proposal/ Fri, 28 Mar 2008 04:05:00 GMT http://tonyarnold.com/entries/integrated-documentation-for-xcode-projects-a-project-proposal/ <p>I&#8217;ve been thinking for the past week or so about how I can contribute something back to the mac development community - a lot of good people spend a lot of time helping me out with my issues as they come up, and I believe improving our toolchain is probably the best way for me to contribute. Documentation, to be specific.</p> <p>If we take the time to properly document and comment our source code, we&#8217;re unlikely to want to have to re-document that into a human readable format such as HTML or PDF, right? I&#8217;ve previously used tools such as <a href="http://developer.apple.com/opensource/tools/headerdoc.html">HeaderDoc</a> and <a href="http://www.naturaldocs.org/">NaturalDocs</a> depending on the language and framework I&#8217;m coding in to achieve this end &#8211; with wildly varying results. HeaderDoc&#8217;s default output is quite ugly, and has some glaring omissions in terms of it&#8217;s parsing of some of the newer documentation tags.</p> <p>So I&#8217;m thinking about starting up a <a href="http://code.google.com/">Google Code</a> project around this, and I&#8217;m just trying to get a feel for what people think about this idea, what they would use, and how they would see this working. So far I&#8217;ve solicited a little feedback and the following are things I know I&#8217;d like to see:</p> <ul> <li><strong>Xcode build integration</strong>: the generation of this documentation should work as part of the Xcode build process. No messing around with external tools; </li> <li><strong>Comment formats should use what&#8217;s already out there</strong>: Lots of our code is already documented using HeaderDoc&#8217;s comment format - we should try to expand upon that if we need to - not replace it (but I&#8217;m open to suggestion here);</li> <li><strong>The generated output should look good</strong>. No arguments there.</li> </ul> <p>Comments ahoy, my peers!</p> Aluminium MacBooks can&#8217;t jump http://tonyarnold.com/entries/aluminium-macbooks-cant-jump/ Sat, 08 Mar 2008 12:36:00 GMT http://tonyarnold.com/entries/aluminium-macbooks-cant-jump/ <p>I know a few of you are anxiously awaiting a public release of <a href="http://hyperspacesapp.com">Hyperspaces</a>. Unfortunately, there&#8217;s not going to be a public release for a few weeks yet. I know - I said early March, but my MacBook Pro tried to master the finer points of flying a few weeks ago, and it&#8217;s interesting how badly those shiny silver beasts stand up to a small drop. I&#8217;ve just got <a href="http://www.apple.com/macbookpro/">my replacement</a> this past week, and I&#8217;ve only just got all my development tools and settings right back where I want them.</p> <p>Oh, and I&#8217;ve also been cleaning up and painting our kitchen - but that&#8217;s another story with photos to come. In any case, the <a href="http://hyperspacesapp.com">Hyperspaces</a> icon is done (and I&#8217;ll be showing it off shortly!), the feature set is being locked down, and my list of pre-beta tasks is down to 14 items - some of them quite small, some of them larger (&#8220;Watch for fsevent changes to the Dock&#8217;s plist file to trigger changes in the enabled state of Spaces&#8221; for instance). Almost there people - I hope you guys love it as much as I hope you will! I&#8217;ll post when there&#8217;s more, but I&#8217;m hoping to put up a feature preview on <a href="">http://hyperspacesapp.com</a> in the next week - I just need to get some of the finer points of the user interface locked down!</p> Booyah! Microsoft finally gets it: web standards for all http://tonyarnold.com/entries/booyah-microsoft-finally-gets-it-web-standards-for-all/ Tue, 04 Mar 2008 08:17:00 GMT http://tonyarnold.com/entries/booyah-microsoft-finally-gets-it-web-standards-for-all/ <p><a href="">http://blogs.msdn.com/ie/archive/2008/03/03/microsoft-s-interoperability-principles-and-ie8.aspx</a></p> <p>This is the best news I&#8217;ve heard for a long time. Now we can all enjoy proper standards support, no matter what browser we choose to use. Is this a new era for Microsoft?</p> Releasing a public beta of your application: my thoughts http://tonyarnold.com/entries/releasing-a-public-beta-of-your-application-my-thoughts/ Sat, 01 Mar 2008 13:57:00 GMT http://tonyarnold.com/entries/releasing-a-public-beta-of-your-application-my-thoughts/ <p>With the Hyperspaces public beta coming quite soon, I&#8217;ve been thinking about how to release beta software, and when it&#8217;s appropriate to do so.</p> <p>My previous piece of software - VirtueDesktops - had eternal beta syndrome (EBS). Hell, while I was running the project I&#8217;m not even sure I&#8217;d have called it a beta knowing what I do now. <strong>This was a huge fucking mistake</strong>. And it showed. Users got awfully upset, and the only reason I got away with it was because I didn&#8217;t charge anything for the software.</p> <h2>1. Release your beta when you have weeks left until release - not months</h2> <p>How often do you download a great new piece of software that&#8217;s in beta, and then spend the next 6 months waiting for it to become stable enough for daily use? Seriously, if you couldn&#8217;t realistically release a bug-free version of your software within 4 weeks of putting out your public beta - <strong>hold off and get your software to a point where you can!</strong></p> <h2>2. Protect your reputation above all else</h2> <p>I believe the most important thing I have as a developer is my reputation. Skills, languages and patterns can be learnt - reputation is something that has to be earned, and is really hard to rebuild if you damage it. In my experience buggy releases or a constantly &#8220;in-beta&#8221; product are two of the fastest ways to cripple your reputation.</p> <h2>3. If something goes wrong - make sure the user can let you know as easily as possible</h2> <p>This applies regardless of the release status of your application - if something goes wrong, the user will only let you know if:</p> <ol> <li>The error really pisses them off; or</li> <li>It&#8217;s incredibly easy to do so</li> </ol> <p>I generally believe in collecting as much information as possible and automatically posting this back to your servers - this way, you don&#8217;t need to ask the user to root about in their Library folder. <strong>If you&#8217;re going to do this, make sure you let the user know exactly what&#8217;s happening!</strong>. When I was coding VirtueDesktops, I used Unsanity&#8217;s Smart Crash Reporter - and was quite happy with it. I&#8217;m still not sure what I&#8217;ll use for Hyperspaces - APE is out for Leopard now, but it&#8217;s not out of beta yet.</p> <h2>Conclusion</h2> <p>Don&#8217;t release your software before it&#8217;s ready, and make sure it&#8217;s easy to report errors when they happen.</p>