<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">

    <title type="text">Blog</title>
    <subtitle type="text">Blog:</subtitle>
    <link rel="alternate" type="text/html" href="http://clients.youknowwhodesign.com/Kennettnet/index.php/site/index/" />
    <link rel="self" type="application/atom+xml" href="http://www.kennettnet.co.uk/site/atom/" />
    <updated>2010-04-21T13:18:46Z</updated>
    <rights>Copyright (c) 2010, Daniel</rights>
    <generator uri="http://expressionengine.com/" version="1.6.7">ExpressionEngine</generator>
    <id>tag:clients.youknowwhodesign.com,2010:04:21</id>


    <entry>
      <title>Music Rescue 4.0.13 for Mac Released</title>
      <link rel="alternate" type="text/html" href="http://www.kennettnet.co.uk/site/music-rescue-mac-latest-release/" />
      <id>tag:clients.youknowwhodesign.com,2010:Kennettnet/index.php/site/index/1.54</id>
      <published>2010-04-21T12:17:45Z</published>
      <updated>2010-04-21T13:18:46Z</updated>
      <author>
            <name>Daniel</name>
            <email>daniel@kennettnet.co.uk</email>
                  </author>

      <category term="Announcements"
        scheme="http://www.kennettnet.co.uk/site/category/Announcements/"
        label="Announcements" />
      <content type="html"><![CDATA[
        <p>KennettNet Software Limited is pleased to announce the release of Music Rescue version 4.0.13 for Mac OS X. </p>

<p><b>Bugs Fixed/Changes</b></p>

<ul>
<li>Music Rescue no longer crashes on launch on Mac OS X 10.4.</li>		
</ul>

<p><br />
Music Rescue 4.0.13 can be downloaded from the Music Rescue <a href="http://www.kennettnet.co.uk/products/musicrescue/">product page</a>.
</p> 
      ]]></content>
    </entry>

    <entry>
      <title>Music Rescue 4.0.14 for Windows Released</title>
      <link rel="alternate" type="text/html" href="http://www.kennettnet.co.uk/site/music-rescue-windows-latest-release/" />
      <id>tag:clients.youknowwhodesign.com,2010:Kennettnet/index.php/site/index/1.56</id>
      <published>2010-04-20T10:05:47Z</published>
      <updated>2010-04-20T11:05:48Z</updated>
      <author>
            <name>Daniel</name>
            <email>daniel@kennettnet.co.uk</email>
                  </author>

      <category term="Announcements"
        scheme="http://www.kennettnet.co.uk/site/category/Announcements/"
        label="Announcements" />
      <content type="html"><![CDATA[
        <p>KennettNet Software Limited is pleased to announce the release of Music Rescue version 4.0.14 for Windows XP and higher. </p>

<p><b>Bugs Fixed/Changes</b></p>

<ul>
<li>Fixed &#8220;ASL.dll could not be found&#8221; message.</li>
</ul>

<p><br />
Music Rescue 4.0.14 can be downloaded from the Music Rescue <a href="http://www.kennettnet.co.uk/products/musicrescue/">product page</a>.
</p> 
      ]]></content>
    </entry>

    <entry>
      <title>Clarus 1.5.2 Released</title>
      <link rel="alternate" type="text/html" href="http://www.kennettnet.co.uk/site/clarus-latest-release/" />
      <id>tag:clients.youknowwhodesign.com,2010:Kennettnet/index.php/site/index/1.55</id>
      <published>2010-03-11T14:00:13Z</published>
      <updated>2010-03-11T15:49:14Z</updated>
      <author>
            <name>Daniel</name>
            <email>daniel@kennettnet.co.uk</email>
                  </author>

      <category term="Announcements"
        scheme="http://www.kennettnet.co.uk/site/category/Announcements/"
        label="Announcements" />
      <content type="html"><![CDATA[
        <p>KennettNet Software Limited is pleased to announce the release of Clarus version 1.5.2 for Mac OS X. Clarus 1.5.2 can be downloaded from the Clarus <a href="http://www.kennettnet.co.uk/products/clarus/">product page</a>.</p>

<p><strong>Bug Fixes/Changes</strong><br />
 
</p><ul>
<li>- Mac OS X 10.5.x users can enter currency values again.</li>
</ul>

<p>
</p> 
      ]]></content>
    </entry>

    <entry>
      <title>KennettNet Applications and Snow Leopard</title>
      <link rel="alternate" type="text/html" href="http://www.kennettnet.co.uk/site/kennettnet-applications-and-snow-leopard/" />
      <id>tag:clients.youknowwhodesign.com,2009:Kennettnet/index.php/site/index/1.61</id>
      <published>2009-08-25T14:48:28Z</published>
      <updated>2009-08-25T16:04:30Z</updated>
      <author>
            <name>Daniel</name>
            <email>daniel@kennettnet.co.uk</email>
                  </author>

      <category term="Announcements"
        scheme="http://www.kennettnet.co.uk/site/category/Announcements/"
        label="Announcements" />
      <content type="html"><![CDATA[
        <p>We’ve been running Mac OS X 10.6 (Snow Leopard) developer releases on our development Macs for a few months now, making sure our apps work smoothly with the next major update of the Macintosh operating system.</p>

<p>All KennettNet applications are Snow Leopard 10.6 compatible.</p>

<p>For best results, we recommend updating to the latest versions of Music Rescue and Clarus. No major problems were found, but a couple of tweaks were made:</p>

<p>- Music Rescue 4.0.7 and higher now displays file sizes in a consistent manner to the rest of the system when running on 10.6. File and disk sizes are displayed to match drive manufacturer advertised sizes in Snow Leopard, and Music Rescue follows suit. <br />
- Clarus 1.0.4 and higher correctly displays it&#8217;s German localisation on 10.6.</p>

<p>The next major updates to Clarus (version 1.5) and Music Rescue (version 5.0) will contain 10.6-specific features (when running on 10.6) that we&#8217;re really looking forward to bringing to you.
</p> 
      ]]></content>
    </entry>

    <entry>
      <title>Clarus 1.0: A Development Postmortem</title>
      <link rel="alternate" type="text/html" href="http://www.kennettnet.co.uk/site/clarus-1.0-postmortem/" />
      <id>tag:clients.youknowwhodesign.com,2009:Kennettnet/index.php/site/index/1.57</id>
      <published>2009-07-26T16:18:31Z</published>
      <updated>2009-07-26T20:11:32Z</updated>
      <author>
            <name>Daniel</name>
            <email>daniel@kennettnet.co.uk</email>
                  </author>

      <category term="Programming"
        scheme="http://www.kennettnet.co.uk/site/category/Programming/"
        label="Programming" />
      <content type="html"><![CDATA[
        <h3> The Rise and Fall Of Music Rescue </h3>

<p>For the past four years, Music Rescue has been our only income-earning product. This is great and all, but it makes us dependant on the Pod ecosystem. More importantly, we&#8217;re dependant on a single feature that iTunes <em>doesn&#8217;t</em> have - the ability to import songs from an iPod back into your library. Apple half-added this feature a while back and now you can copy iTunes-purchased tracks back to your library right within iTunes. </p>

<p>The other thing with Music Rescue is that when someone emails or calls with a problem, they&#8217;re not just pissed - they&#8217;re <em>super</em> pissed because they just lost all their music and now they can&#8217;t get it back. Nine times out of ten the problem is a mis-typed license key, but sometimes it&#8217;s not, and sometimes the customer doesn&#8217;t seem to understand that it&#8217;s not our support person&#8217;s fault. </p>

<p>Finally, Music Rescue is coming to the end of it&#8217;s income-earning life. We&#8217;re simply running out of useful features to add to it! The list of things for 5.0 is short - support for photos and a couple of other things. We&#8217;ll remain committed to Music Rescue throughout 2010 and probably beyond, but it&#8217;s time to start bringing in other products. </p>

<h3>The Rise Of Clarus</h3>

<p>So, what to do? Well, at WWDC 2008 I came up with an idea - a cool iPhone application which has been in development ever since. However, since the iPhone app requires a server-side component which needed to be finished before the application could really be started, progress was slow. In January 2009, I adopted <a href="http://www.flickr.com/photos/ikenndac/3208653453/in/set-72157612999906769/">Chester</a> from a rescue home. Immediately I noticed that there wasn&#8217;t a single <em>good</em> application for the Mac to keep track of the piles of paperwork for him. Clarus was born!</p>

<h3>My Favourite Things in Clarus</h3>

<p>Developing Clarus was a blast. It has a completely different feel to Music Rescue, which is refreshing. Music Rescue is normally a one-stop app - it presents the iPod&#8217;s contents in a way instantly recognisable to the user and recovers it back to your computer with the minimum of fuss. The typical usage time for Music Rescue is minutes to hours, depending on the size of your library.</p>

<p>Clarus, however, is an application that I intend to be used for years on end. Hopefully the application will grow up alongside your pets, and despite the short overall time, I&#8217;ve spent a lot of time on the little things that&#8217;ll make living with Clarus an enjoyable experience.</p>

<p><strong>Guides</strong></p>

<p>System 7.x and 8.x had a thing called Apple Guide that&#8217;d walk you through a task step-by-step, highlighting the controls you needed to interact with as you went. This was much better than the current system, and I loved the old system so much that I spent nearly three weeks bringing it to Mac OS X. User help is often at the bottom of a developer&#8217;s list of things to do - mainly because you need to have the application nearly completed before you can write it. As a result, it tends to be rushed or not even there at all. Clarus, however, has the normal help content you&#8217;d expect from a decent Mac app as well as these guides to walk you through specific tasks.</p>

<p><a href="http://www.kennettnet.co.uk/images/uploads/files/Clarus-Guides.jpg" class="lightbox"><img src="http://www.kennettnet.co.uk/images/uploads/files/Clarus-Guides_thumb.jpg" width="600" height="481" /></a></p>

<p>Others in the Mac developer community seem to really like the idea, so I ended up making the framework for doing these guides available to them for free, and have committed to making a decent guide editing program. You can find more about the guide framework <a href="http://www.kennettnet.co.uk/code/KNAppGuide/">here</a>. </p>

<p><strong>PDFs</strong></p>

<p>This isn&#8217;t really mentioned much in the program&#8217;s documentation or feature lists simply because it&#8217;s so natural. If you have a PDF containing your pet&#8217;s insurance policy paperwork, just drag it from the Finder, Mail, or wherever onto the policy in Clarus. The PDF will be attached to the insurance policy inside Clarus and kept within the document. This works with insurance policies, vet visits, medications and contacts.</p>

<p><strong>System Integration</strong></p>

<p>One of the best things in Mac OS X, from a developer&#8217;s perspective, is how Apple allows you to integrate with more or less everything. For example, in Clarus:</p>

<p>- A pet&#8217;s contacts are stored in Address Book, so you don&#8217;t need the application open to call your vet. These will be synced to your iPhone if you desire. </p>

<p>- If you have &#8220;Track Pets in iCal&#8221; option switched on in Clarus&#8217; preferences, Clarus will automatically put important stuff (with a reminder) into an iCal calendar for each pet. </p>

<p>- When you Quick Look a Clarus document, it&#8217;ll tell you the the closest important events for that pet. This is especially cool, since it actually reads the document and figures it out rather than just relying on the application putting that stuff in there.&nbsp; </p>

<p><a href="http://www.kennettnet.co.uk/images/uploads/files/Clarus_Quicklook.jpg" class="lightbox"><img src="http://www.kennettnet.co.uk/images/uploads/files/Clarus_Quicklook_thumb.jpg" width="600" height="370" /></a></p>

<p>- Clarus is scriptable, which instantly makes its data compatible with pretty much every other scriptable app on your computer. Want your photos in iPhoto? Easy! Your expenses in Numbers? Done! A few little scripts ship with Clarus, but expect more as I think of awesome stuff to do.</p>

<p><strong>Artwork</strong></p>

<p>Of course, it&#8217;s no secret that I <a href="http://www.kennettnet.co.uk/blog/full/my_love_of_icons/">love artwork</a>. For Clarus&#8217; artwork, I one again contracted <a href="http://www.fernandolins.com/">Fernando Lins</a>, and he did a <em>superb</em> job, and scored extra nerd points in the application icon itself (atop this entry) - see if you can spot why. </p>

<p>Here&#8217;s a few of the pieces of art used in Clarus, including a couple that didn&#8217;t make 1.0 but will be in 1.1 and 2.0. My personal favourite is the &#8220;Album&#8221; piece, which I think really captures the sillyness that is often present in a group of pictures of your pet! </p>

<p><img src="http://www.kennettnet.co.uk/images/uploads/files/Clarus_Icons.png" width="418" height="272" />
</p> 
      ]]></content>
    </entry>

    <entry>
      <title>Clarus 1.0 Released!</title>
      <link rel="alternate" type="text/html" href="http://www.kennettnet.co.uk/site/clarus-1.0-released/" />
      <id>tag:clients.youknowwhodesign.com,2009:Kennettnet/index.php/site/index/1.50</id>
      <published>2009-06-05T13:05:32Z</published>
      <updated>2009-06-05T14:06:33Z</updated>
      <author>
            <name>Daniel</name>
            <email>daniel@kennettnet.co.uk</email>
                  </author>

      <category term="Announcements"
        scheme="http://www.kennettnet.co.uk/site/category/Announcements/"
        label="Announcements" />
      <content type="html"><![CDATA[
        <p>Clarus is fully integrated into the OS X Desktop experience. Important events, such as medication dose due dates, visits to the vet, birthdays and insurance policy renewal dates, are all placed into iCal, allowing the pet owner&#8217;s Macintosh and any synced devices to remind them of when these are due. Clarus is fully AppleScriptable too, so all of a pet&#8217;s data is fully accessible. Sample scripts are included that demonstrate how to extract all of a pet&#8217;s photos into an iPhoto album, import all of a pet&#8217;s expenses into Apple Numbers, and more. This makes Clarus a perfect compliment to Apple&#8217;s iLife suite.</p>

<p>&#8220;Owning a pet is a wonderful experience. However, keeping track of their important paperwork is not&#8221; said Daniel Kennett, founder of KennettNet. &#8220;You probably have folders full of documents, and your wall calendar is littered with little reminders to give a flea treatment or to go to the vet for a checkup and more. But no matter how organized you are, there&#8217;s always that worry that you&#8217;ve missed something.&#8221;</p>

<p>So they&#8217;re always available, all important contacts are stored in Address Book. At any time, pet owners can QuickLook a Clarus document and immediately be given an overview of what&#8217;s up and coming for their pet. One of Clarus&#8217;s most prolific features is its poster creation and printing support. So if Spot just happens to go missing, printing a bold missing poster that includes his photo and basic details along with contact information with reward takes just seconds.</p>

<p>Feature highlights include:<br />
* Manage a pet&#8217;s life all in one convenient place<br />
* Fully integrated with Address Book, iCal and QuickLook<br />
* Poster printing support<br />
* AppleScriptable</p>

<p>Language Support:<br />
* American English, British English, French, German and Spanish</p>

<p>Minimum Requirements:<br />
* Mac OS X Version 10.5 Leopard or later<br />
* Universal Binary for PowerPC and Intel<br />
* 16.0 MB Hard Drive space</p>

<p>Pricing and Availability:<br />
Clarus 1.0 is available for only £15.00 (GBP) for a single machine license. Licensing allows more than five contacts, insurance policies, medications and vet visits to each document. A free trial version is available for download. Review licenses for Clarus are available for media review.</p>

<p>
</p> 
      ]]></content>
    </entry>

    <entry>
      <title>The Great Debate: How Do I Actually Sell My Apps?</title>
      <link rel="alternate" type="text/html" href="http://www.kennettnet.co.uk/site/the_great_debate/" />
      <id>tag:clients.youknowwhodesign.com,2009:Kennettnet/index.php/site/index/1.16</id>
      <published>2009-04-22T13:34:21Z</published>
      <updated>2009-05-29T14:37:22Z</updated>
      <author>
            <name>Daniel</name>
            <email>daniel@kennettnet.co.uk</email>
                  </author>

      <content type="html"><![CDATA[
        <p>Our fixed costs:</p>

<p>EV SSL Certificate: £599 + VAT per year ((If you&#8217;re not using SSL to even simply collect your customer&#8217;s email address, you&#8217;re doing it VERY WRONG))<br />
Hosting: £1,000 + VAT per year ((I&#8217;m aware that this is unusually high - we co-locate an Xserve in a London data-centre))<br />
Accounting: £1,000 + VAT per year</p>

<p>So, let&#8217;s spread out our fixed costs over each sale. The accounting costs would be roughly halved by using eSellerate&#8217;s services.</p>

<p><img src="http://www.kennettnet.co.uk/images/uploads/blog-cps.png" style="border: 0;" alt="image" width="294" height="222" /></p>

<p>Obviously, this doesn&#8217;t make sense! Why on earth would I pay over 7% more per sale when I could do all that extra stuff myself? </p>

<p><strong>Time vs Money</strong></p>

<p>Firstly, there&#8217;s the time it takes to implement a decent web store and the tools that manage your orders. I wrote two applications - a web application to act as the store and interface with HSBC, and a Cocoa app to manage the orders and calculate VAT figures for me - which took about three weeks in total. Once your volume starts increasing, you get to the point where it makes more sense to set up a limited company. At this point, solutions like eSellerate really start to gain traction - you need to start dealing with Corporation Tax as well as your Self Assessment. </p>

<p>The accounting figure for the HSBC solution assumes that you deal with VAT yourself and share the corporation tax work with your accountant, which is what I do. This takes up roughly two weeks of my time per year on top of the store development work, and I really really hate doing it. I make silly mistakes because I&#8217;m bored and would rather be coding, which happens to everyone. Well, only an idiot would do it themselves, right? My accountant is a professional and more trained to deal with this stuff than I am, <em>and</em> we&#8217;re earning enough to pay him to do it all! Today, I phoned up my accountant and asked him what my accountancy bills would be like if I decided to stop doing VAT and Corporation Tax work, and loaded all the accountancy work that would be done by eSellerate to him. Let&#8217;s factor this in to the table, shall we?</p>

<p><img src="http://www.kennettnet.co.uk/images/uploads/blog-cpsextra.png" style="border: 0;" alt="image" width="297" height="224" /></p>

<p>Well, it&#8217;s still cheaper to do it ourselves. However, the difference isn&#8217;t that huge. So, what else does eSellerate do to justify that extra cost?</p>

<p><strong>Not Just the Accounting</strong></p>

<p>Up until now, we&#8217;ve only been comparing eSellerate to the absolute minimum we all do to sell apps. What about the rest? Well, eSellerate gives an in-app store, which by itself almost justifies the cost. In-app stores are <em>awesome</em>. If you&#8217;re implementing your license limitations properly, an in-app store neatly slots into the experience. This is the standard flow when you have a web store. </p>

<p>- User: Clicks &#8220;Add&#8221; button.<br />
- App: &#8220;I&#8217;m sorry, you can&#8217;t add more than 5 things until you pay. Would you like to pay now?&#8221;<br />
- User: Clicks Buy.<br />
- App: Open license window with license key fields and &#8220;Buy&#8221; button.<br />
- User: Clicks Buy again.<br />
- Web page opens in separate app.<br />
- User enters details.<br />
- User waits for email to arrive.<br />
- User copies details from email.<br />
- User switches back to the app and enters details. <br />
- App: &#8220;Thanks! You can add your thing now.&#8221;<br />
- User: Switches back to main window, clicks &#8220;Add&#8221; button again.</p>

<p>That flow is <em>really</em> getting in the way, and is pretty annoying. You can make it better by displaying the license code on your store&#8217;s &#8220;Order Complete&#8221; page and offer a link to automatically register the app, but it&#8217;s still pretty sucky. Consider this:</p>

<p>- User: Clicks &#8220;Add&#8221; button.<br />
- App: &#8220;I&#8217;m sorry, you can&#8217;t add more than 5 things until you pay. Would you like to pay now?&#8221;<br />
- User: Clicks Buy.<br />
- App pops up in-app store.<br />
- User enters details.<br />
- App: &#8220;Thanks! Because the store is integrated, I&#8217;m already licensed. Isn&#8217;t that cool? Oh, by the way, here&#8217;s that thing you wanted to add.&#8221;</p>

<p>Much better! That, on its own, is worth quite a lot of money. The implementation details of this system - especially the security - are mind-boggling. I tried to do this on my own once, and it was too hard to be worth it. </p>

<p><strong><em>Perceived</em> Cost</strong></p>

<p>This is where it gets more interesting. Even though the eSellerate solution still costs more, to many it would seem to cost less. Why? Well, my current cash flow for a sale looks like this:</p>

<p>- User buys my software.<br />
- Three business days later, all of that amount is cleared into my bank account. <br />
- Once a month, HSBC charges that month&#8217;s transaction fees back from my account. ((I&#8217;m aware that with PayPal, they take their cut at sale time))<br />
- Once a quarter, I pay all the VAT I owe from that quarter&#8217;s sales to HMRC.<br />
- Once a year, I pay my accounting bills. <br />
- Once a year, I pay my corporation tax. </p>

<p>If I was to use eSellerate, it&#8217;d look like this: </p>

<p>- User buys my software.<br />
- eSellerate subtracts their fees, deals with VAT and sends me the rest.<br />
- Once a year, I pay my accounting bills.<br />
- Once a year, I pay corporation tax.</p>

<p>That&#8217;s <em>two</em> less bills I have to pay! That has a serious effect on cashflow - I&#8217;d rather be paid slightly less and <em>keep</em> it than be paid a bit more but have to give it away later.</p>

<p><strong>Opinion!</strong></p>

<p>In the end, it really boils down to what you value more - money or time. If you really care about that extra 6% per sale, then you do it yourself. If you&#8217;d rather spend the weeks of extra effort it requires to do everything yourself more money or coding, you use someone who&#8217;s better at it then you. Of course, if you can actually value your coding time reliably, the extra cost of a payment service may very well pay for itself.</p>

<p>Danny Greg sums it up pretty well, in my opinion: </p>

<p><strong>&#8220;Its _very_ simple. If you want to spend time coding as opposed to doing taxes you use [services like eSellerate].&#8221; </strong><br />
(Danny Greg, on <a href="http://twitter.com/dtm3dd/status/1583478386 ">Twitter</a>)</p>

<p>I&#8217;m interested to hear what other developers have to say. Chime in below!
</p> 
      ]]></content>
    </entry>

    <entry>
      <title>Location, Location, Location</title>
      <link rel="alternate" type="text/html" href="http://www.kennettnet.co.uk/site/location_location_location/" />
      <id>tag:clients.youknowwhodesign.com,2009:Kennettnet/index.php/site/index/1.15</id>
      <published>2009-03-07T13:26:53Z</published>
      <updated>2009-06-03T10:46:55Z</updated>
      <author>
            <name>Daniel</name>
            <email>daniel@kennettnet.co.uk</email>
                  </author>

      <content type="html"><![CDATA[
        <p>This was the first time KennettNet Software and its sole product - Music Rescue (then called PodUtil) - would be properly put to the test as a commercial venture. Still under the protective wing of University and student loans, I could spend a whole year working in an office as I would when running a &#8220;proper&#8221; company - one with rent bills and employees to pay. I ended up on the second floor of a serviced office in St. Albans.</p>

<p><a href="http://danielkennett.org/wp-content/uploads/2009/03/img_2188.jpg" class="lightbox"><img src="http://danielkennett.org/wp-content/uploads/2009/03/img_2188.jpg" alt="St. Albans Office Exterior" title="St. Albans Office Exterior" width="530" height="379"   /></a></p>

<p><a href="http://danielkennett.org/wp-content/uploads/2009/03/img_2192.jpg" class="lightbox"><img src="http://danielkennett.org/wp-content/uploads/2009/03/img_2192.jpg" alt="St. Albans Office Interior" title="St. Albans Office Interior" width="530" height="379"   /></a></p>

<h3>2006: University</h3>

<p>The year working in an office proved that this shit was <em>real</em>. I&#8217;d written and released PodUtil/Music Rescue 3.0, which was doing really well and had a fairly large customer base. Nobody was more surprised than me, and I really enjoyed doing what I did and decided that this was the future. Unfortunately, I had a degree to finish, and the final year is obviously the one you need to commit to the most. However, I had a company that couldn&#8217;t just languish while I studied, so I ended up moving to a second floor (again) office <em>on campus</em> which put me within seconds of my lecture halls. It worked out perfectly - I&#8217;d go to work every morning and nip out to lectures as needed. </p>

<p><a href="http://danielkennett.org/wp-content/uploads/2009/03/desk.jpg" class="lightbox"><img src="http://danielkennett.org/wp-content/uploads/2009/03/desk.jpg" alt="Jonny&#039;s Desk" title="Jonny&#039;s Desk" width="530" height="397" class="lightbox" /></a></p>

<p><a href="http://danielkennett.org/wp-content/uploads/2009/03/boxes.jpg" class="lightbox"><img src="http://danielkennett.org/wp-content/uploads/2009/03/boxes.jpg" alt="Equipment!" title="Equipment!" width="397" height="530" class="aligncenter size-full wp-image-287" /></a></p>

<h3>2009: Chicksands</h3><p> (yes, next to the Defence College of Intelligence/British Army Intelligence Corps HQ)</p>

<p>Working at Uni worked out really well. Music Rescue did suffer slightly as a result of the study work I was doing, but I managed to get a few updates out to keep it current with the latest iPods while I wrote my kickass project in Cocoa, which netted me a 1st Class (Hons) in Computer Science. After I completed my degree, the company switched gears - I employed another programmer and together we rewrote Music Rescue from scratch and released version 4.0 in the middle of 2008. During this time I moved north to Bedfordshire, making the trip to work 25 miles each way. Things had to change!</p>

<p>It was over a year between completing my degree and moving, but I finally moved out of the Hatfield office and now work within walking distance of home. We moved this week just gone, and are now just about settled in. In the photo below, the office stretches from the archway to just before the door at the right. Finally, no stairs!</p>

<p><a href="http://danielkennett.org/wp-content/uploads/2009/03/img_4510.jpg" class="lightbox"><img src="http://danielkennett.org/wp-content/uploads/2009/03/img_4510.jpg" alt="Chicksands Exterior" title="Chicksands Exterior" width="530" height="379" class="aligncenter size-full wp-image-278" /></a></p>

<p>On Monday, before we packed up the old office and moved the stuff to the new one, it looked like this:</p>

<p><a href="http://danielkennett.org/wp-content/uploads/2009/03/img_2065.jpg" class="lightbox"><img src="http://danielkennett.org/wp-content/uploads/2009/03/img_2065.jpg" alt="Empty Chicksands Office" title="Empty Chicksands Office" width="530" height="397" class="aligncenter size-full wp-image-279" /></a></p>

<p>This is the first office I&#8217;ve been in that isn&#8217;t serviced. That means that the rent is much, much cheaper but you don&#8217;t get the perks of a built-in networking infrastructure or a cleaning lady. To accommodate all the computers, I mounted network sockets to the wall and wired them all up to a patch panel in a little cabinet that houses our internal test server - a PPC Mac Mini - and the network switches and router. Here&#8217;s me wiring it all up:</p>

<p><a href="http://danielkennett.org/wp-content/uploads/2009/03/img_2067.jpg" class="lightbox"><img src="http://danielkennett.org/wp-content/uploads/2009/03/img_2067.jpg" alt="Me, Wiring" title="Me, Wiring" width="530" height="397" class="aligncenter size-full wp-image-280" /></a></p>

<p><img src="http://danielkennett.org/wp-content/uploads/2009/03/img_2069.jpg" alt="Patch Panel" title="Patch Panel" width="540" height="233" class="aligncenter size-full wp-image-281" /></p>

<p><a href="http://danielkennett.org/wp-content/uploads/2009/03/img_4507.jpg" class="lightbox"><img src="http://danielkennett.org/wp-content/uploads/2009/03/img_4507.jpg" alt="Network Cabinet, All Tidy" title="Network Cabinet, All Tidy" width="530" height="379" class="aligncenter size-full wp-image-282" /></a></p>

<p>As of Friday afternoon, the office looks like this:</p>

<p><a href="http://danielkennett.org/wp-content/uploads/2009/03/img_4508.jpg" class="lightbox"><img src="http://danielkennett.org/wp-content/uploads/2009/03/img_4508.jpg" alt="Chicksands Interior, Towards Kitchen" title="Chicksands Interior, Towards Kitchen" width="530" height="379" class="aligncenter size-full wp-image-283" /></a></p>

<p><a href="http://danielkennett.org/wp-content/uploads/2009/03/img_4509.jpg" class="lightbox"><img src="http://danielkennett.org/wp-content/uploads/2009/03/img_4509.jpg" alt="Chicksands Interior, Towards Back Room" title="Chicksands Interior, Towards Back Room" width="530" height="379" class="aligncenter size-full wp-image-284" /></a></p>

<p>Now the office is so close to where everyone lives, I&#8217;ve decided to change the way we work. As it took nearly an hour to get to work before, we pretty much worked fixed hours with a fixed lunch break - much like typical offices. However, that isn&#8217;t the most productive way to write programs, in my opinion - sometimes I can&#8217;t get into it at all and have a useless day, and other times I get stuck in and work well into the night. Now, we decide what we&#8217;re all going to do each Monday, then for the rest of the week we can come and go as we please - as long as the work gets done, the hours don&#8217;t matter. The only strict rule is work computers are for work stuff only. The little back room has a computer dedicated to Facebook and forums and whatever else people want to muck around with, as well as a big leather sofa with a drinks fridge, TV and Playstation 2 to relax with. </p>

<p><a href="http://danielkennett.org/wp-content/uploads/2009/03/layout.png" class="lightbox"><img src="http://danielkennett.org/wp-content/uploads/2009/03/layout.png" alt="Office Layout" title="Office Layout" width="530" height="258" class="aligncenter size-full wp-image-285" /></a></p>

<p>This is how I&#8217;ve wanted to work for a long long time. For a month or so I was actually working from home - I adopted <a href="http://danielkennett.org/?p=264">Chester</a> in January and couldn&#8217;t take him to work with me. It was unfair to leave him alone all day, so I decided to work half days - which ended up as a half day on Monday then working at home all day for the rest of the week. Quite often I&#8217;d not get stuck in to work until early afternoon but would end up engrossed until around 10pm. I&#8217;m really, really happy to be able to work like this in a proper working environment.
</p> 
      ]]></content>
    </entry>

    <entry>
      <title>My Love Of Icons</title>
      <link rel="alternate" type="text/html" href="http://www.kennettnet.co.uk/site/my_love_of_icons/" />
      <id>tag:clients.youknowwhodesign.com,2009:Kennettnet/index.php/site/index/1.14</id>
      <published>2009-02-08T13:03:44Z</published>
      <updated>2009-05-29T14:14:45Z</updated>
      <author>
            <name>Daniel</name>
            <email>daniel@kennettnet.co.uk</email>
                  </author>

      <content type="html"><![CDATA[
        <p>One way to see how much care a developer has put in to the icon is by looking for level-of-detail. Generally, simply designing a large icon and scaling it down in Photoshop for the smaller sizes is a really <a target="_blank" href="http://msdn.microsoft.com/en-us/library/aa511280.aspx">bad</a> <a target="_blank"  href="http://developer.apple.com/DOCUMENTATION/UserExperience/Conceptual/HiDPIOverview/HiDPIArt/chapter_4_section_3.html">idea</a>. In fact, Apple&#8217;s icons are usually great examples of level-of-detail my favourites are the <a target="_blank" href="http://www.macosxhints.com/article.php?story=20071018143409599">computer icons</a>.</p>

<p>I&#8217;m writing about this because we&#8217;ve got some beautiful icons at KennettNet that I&#8217;m really proud of, but a lot of them haven&#8217;t been seen because they&#8217;ve been made for products we haven&#8217;t finished yet, and in one case a product we <em>forgot</em> to release!</p>

<p><strong>Music Rescue</strong></p>

<p>This is our flagship product at the moment, and contains many, many icons - the app icon itself and an icon for each iPod model and colour made.</p>

<p><img src="http://www.kennettnet.co.uk/images/uploads/music-rescue-icons.png" style="border: 0;" alt="image" width="501" height="256" /></p>

<p><strong>GPSLogger</strong></p>

<p>This is the product we forgot to release. It&#8217;s a simple program that listens to a NMRA-compatible GPS device and parses the results. It&#8217;ll be free, and we&#8217;re doing some work later on this year that should revive this project.</p>

<p><img src="http://www.kennettnet.co.uk/images/uploads/gpslogger-icon-256.png" style="border: 0;" alt="image" width="256" height="256" /></p>

<p><strong>iTunes Library Creator (iTLC)</strong></p>

<p>iTLC loads an XML file create by Music Rescue and will reconstruct an iTunes library based on it. It&#8217;s a very simple utility with a very limited set of use cases, but we still got icons done for it! </p>

<p><img src="http://www.kennettnet.co.uk/images/uploads/itlc-icons.png" style="border: 0;" alt="image" width="399" height="128" /></p>

<p><strong>ProShutdown</strong></p>

<p>Another simple (and free) utility that allows you to press Ctrl+F19 to bring up the &#8220;Are you sure you want to shut down your Mac?&#8221; dialog, which restores the simple &#8220;opposite corners&#8221; shortcut that Ctrl+Eject used to give before Apple released the new Aluminium Keyboard.</p>

<p><img src="http://www.kennettnet.co.uk/images/uploads/proshutdown-icon-512.png" style="border: 0;" alt="image" width="509" height="248" /></p>

<p><strong>Project X</strong></p>

<p>This project isn&#8217;t finished, but should become our second flagship product ((You can have more than one flagship, right?)) once it&#8217;s release. This is my favourite piece of artwork so far - it&#8217;s simply beautiful. Click for a bigger, more awesome version.</p>

<p><a href="http://www.kennettnet.co.uk/images/uploads/projectx-icon-512.jpg" class="lightbox"><img src="http://www.kennettnet.co.uk/images/uploads/projectx-icons.png" style="border: 0;" alt="image" width="325" height="256" /></a></p>

<p>All the icons here were produced by <a target="_blank" href="http://www.fernandolins.com/">Fernando Lins</a>.
</p> 
      ]]></content>
    </entry>

    <entry>
      <title>Music Rescue 4.0 Postmortem</title>
      <link rel="alternate" type="text/html" href="http://www.kennettnet.co.uk/site/music_rescue_4.0_postmortem/" />
      <id>tag:clients.youknowwhodesign.com,2008:Kennettnet/index.php/site/index/1.13</id>
      <published>2008-07-25T11:57:50Z</published>
      <updated>2009-05-29T13:59:51Z</updated>
      <author>
            <name>Daniel</name>
            <email>daniel@kennettnet.co.uk</email>
                  </author>

      <category term="General"
        scheme="http://www.kennettnet.co.uk/site/category/General/"
        label="General" />
      <content type="html"><![CDATA[
        <p><strong>PodUtil 1.x </strong></p>

<p>I invented PodUtil in 2002, in a physics lesson at 6th form when I should have been learning about&#8230; something. My computer&#8217;s music library had broken and I wanted the music back. The program simply scanned the iPod&#8217;s file system for MP3 files and extracted their info from the ID3 tags. It wasn&#8217;t very good.</p>

<p><a href="http://www.kennettnet.co.uk/images/uploads/poduti1.png" class="lightbox"><img src="http://www.kennettnet.co.uk/images/uploads/poduti1.png" style="border: 0;" alt="image" width="421" height="301" /> </a></p>

<p><strong>PodUtil 2.x</strong></p>

<p>This version of PodUtil scanned the database of the iPod, and was much faster. However, the database parser wasn&#8217;t very <em>good</em>, and I can&#8217;t post any screenshots up here because it doesn&#8217;t work with any of my current iPods. Yay!</p>

<p><strong>PodUtil/Music Rescue 3.x</strong></p>

<p>PodUtil became Music Rescue at version 3.1, and was the version that hit it big-time, as it were. Until yesterday afternoon, Music Rescue 3.1.6 was the newest version of Music Rescue available from our website. It works with all of the iPods available today (other than the touch/iPhone) and sold well. </p>

<p><a href="http://www.kennettnet.co.uk/images/uploads/mr3.png" class="lightbox"><img src="http://www.kennettnet.co.uk/images/uploads/mr3.png" style="border: 0;" alt="image" width="462" height="318" /></a></p>

<p><strong>What next?</strong></p>

<p>When thinking about Music Rescue 4.0 back in 2007, it was fairly clear that I&#8217;d have to re-write Music Rescue from scratch. The codebase was, to be frank, disgusting. Music Rescue 3.x was a mishmash of code with no real design, and still had parts from early betas of version 2.x, just patched up to work better. Inserting features I wanted to add would mean ripping it all apart and refactoring it so extensively that scrapping the codebase altogether and starting fresh was looking like the only way forward.</p>

<p>I took this opportunity to change the language Music Rescue was written in. Versions up to 3.1.6 are written in REALbasic - a cross platform tool that allows you to have one set of code compile an application on Windows and Mac OS X. It&#8217;s great for our earlier situation where there was just me writing the program, but now I have manpower at my disposal so it was decided to write the Windows version in .NET and the Mac version in, of course, Objective-C/Cocoa.</p>

<p><strong>Development and Design</strong></p>

<p>After incrementally updating Music Rescue 3.x for years, I&#8217;d forgotten what a massive project it is - I was originally hoping to release in early May, but the final release ended up in late July. </p>

<p>It was important to design Music Rescue in perhaps a more compartmentalised manner than I normally would. Apple is constantly evolving the iPod line and to keep up, I need a codebase that&#8217;s easily extensible. A good example is photos. I actually wrote a parser to parse and load images from an iPod&#8217;s photo database pretty soon after Apple released the first iPod photo in 2004. However, there was absolutely no way I could wedge it into PodUtil/Music Rescue without a <em>lot</em> of work - too much to justify it with more pressing matters at hand.</p>

<p>Now, Music Rescue 4.0 still doesn&#8217;t have photos. However, it&#8217;s internally designed so it&#8217;ll be very, very easy to plug in that functionality in version 4.1 or whenever I write an up-to-date iPod photo engine. </p>

<p>The core application code doesn&#8217;t actually know about anything about iPod tracks, at all. The core application simply declares interfaces for:</p>

<ul>
	<li><strong>CopyableItem</strong> Something which can be copied to a file on the local filesystem.</li>
	<li><strong>PlayableItem</strong> Something which can produce a QuickTime movie to play in the media player.</li>
	<li><strong>DataProvider</strong> Something that appears in the source list and has a view for the user to interact with. For example, &#8220;Music&#8221; in Music Rescue source list is a DataProvider, along with Podcasts, Video, etc. DataProviders can optionally have subproviders which will be plaed in their own group, such as playlists or photo albums.</li>
	<li><strong>CopyTask</strong> Something that can copy CopyableItems to the local filesystem. DataProviders can optionally create CopyTasks. If they do, they&#8217;ll be included in QuickRecover and the copy setup sheet.</li>
</ul>

<p>... you get the idea. When Music Rescue loads an iPod, the iPod instance itself is responsible for the DataProviders for that iPod - when the NSWindowController for the main window is populating the source list, for instance, it looks through the [[[self document] iPod] dataProviders] array.</p>

<p>Let&#8217;s see how this fits together in the UI:</p>

<p><a href="http://www.kennettnet.co.uk/images/uploads/MR4Components.png" class="lightbox"><img src="http://www.kennettnet.co.uk/images/uploads/MR4Components.png" style="border: 0;" alt="image" width="440" height="344" /></a></p>

<p>The items in red are individual DataProviders from the iPod represented by the window&#8217;s NSDocument. The &#8216;PLAYLISTS&#8217; group are the sub providers provided by the Music Provider.&nbsp;   <br />
The blue area is the NSView provided by the selected DataProvider. </p>

<p>When copying, you&#8217;ll see this UI:</p>

<p><a href="http://www.kennettnet.co.uk/images/uploads/MR4CopyComponents.png" class="lightbox"><img src="http://www.kennettnet.co.uk/images/uploads/MR4CopyComponents.png" style="border: 0;" alt="image" width="602" height="374" /></a></p>

<p>This time, the red items represent the CopyTasks provided by the DataProviders, and the blue area is the configuration UI for the chosen task. </p>

<p>Hopefully by now you&#8217;re noticing a trend - the application doesn&#8217;t really make any assumptions about what&#8217;s actually on the iPod. It just provides interfaces for <em>something else</em> that knows how to deal with specific media, how to show it to the user and how to put it somewhere useful on the local machine. </p>

<p>This is a <em>huge</em> shift in paradigm from how previous versions worked. When you clicked a playlist in Music Rescue 3, a playlist object gets set as the current playlist, and the table view on the main window shows the tracks in that playlist. That&#8217;s fine, until you get things that aren&#8217;t playlists. Again, in Music Rescue 3, the program copies files from the iPod to a folder on disk. Which, again, is fine until you encounter photos (which are embedded in a database in some strange format) or an iPod touch (which doesn&#8217;t mount on the filesystem). </p>

<p>Instead, version 4 has controllers that deal with the objects that deal with specific data. The NSWindowController and NSDocument pair deal with showing the DataProviders to the user, and a thing called CopyProcessor that takes the CopyTasks that are generated by the Providers, loops through them one by one and tells them to do their <em>thang</em> while it sits there and waits for the copyDidComplete: delegate method to be called.</p>

<p>Something that wasn&#8217;t done by accident is that this model lends itself very well to plugins. It&#8217;d be trivially more work for me to implement photo support as an external plugin - in fact, the internal Music, Podcasts, etc providers are essentially plugins whose classes sit in the same binary as the rest of the program. </p>

<p><strong>Drawbacks</strong></p>

<p>There are some drawbacks to this method, though. </p>

<p>The first is that it can cause a lot of duplication. For example, the Music, Podcasts, and Audiobooks providers in Music Rescue are all showing the same kind of object in much the same way, and yet they all separately need to manage their items, whether they&#8217;re to be copied, etc etc etc. Much of this can be dealt with by having them all subclassing a general purpose &#8220;iPod audio track&#8221; provider, but there&#8217;s still some unavoidable duplication, especially in the nib files. </p>

<p>The second is that it can cause a lot of extra work early on. This is more of a morale issue than anything - you spend a lot of time building protocols and laying the frameworks for all this, but for a long time you don&#8217;t seem to be making any visible progress - when you run your app, there&#8217;s no new functionality there and it can become very tempting to bypass your hard work and take shortcuts. This, though, it somewhat offset by how easy it is to to add functionality to a well-designed framework.</p>

<p><strong>I *heart* Cocoa</strong></p>

<p>This is the first major project I&#8217;ve done in Cocoa, and is honestly the most fun I&#8217;ve ever had programming in my life. There&#8217;s so much completely awesome stuff in there that it makes coding in anything else less enjoyable than it was. </p>

<p>This causes problems for my colleague, though. He&#8217;s writing Music Rescue in .NET, which doesn&#8217;t have a lot of the awesome stuff I&#8217;m using - but we&#8217;re trying to keep the internals as similar as possible between the Cocoa and .NET versions for consistency&#8217;s sake. In the end, I ended up writing a few Cocoa classes in .NET to keep functionality the same. They were:</p>

<ul>
	<li>NSNotificationCenter/NSNotification</li>
	<li>NSTokenField</li>
	<li>NSTableView and everything it needs - NSTableColumn, NSCell, NSActionCell, NSTextCell, NSButtonCell, etc etc.</li>
</ul>

<p>That last one was hard. NSTableView is a beast, and custom-writing a table is a pain in the ass. However, .NET&#8217;s built-in table is so <em>completely</em> useless that it was necessary. </p>

<p><strong>Personal Issues</strong></p>

<p>Quite an odd one, this, and something I won&#8217;t have to experience again. Up until version 4.0, every single line of code in Music Rescue was written by me. Those lines of code have gone on to pay for my cars, mortgage, and general living enough to do it full time. Music Rescue is, in essence, my baby. </p>

<p>Switching it over to multiple developers was a tough thing for me to do - and I&#8217;ve been constantly uneasy about not being in complete control of my program any more. However, it&#8217;s paid off - it&#8217;s allowed Music Rescue to become a much better product that it could be with just me developing it. </p>

<p><strong>Conclusion</strong></p>

<p>Now version 4.0 is released, I can say the decisions I made about the development methods have paid off. I&#8217;m really excited about version 4.0, and it&#8217;s the best program I&#8217;ve ever written. </p>

<p>What would I do differently if I was to have to do it again?</p>

<p>Well, nothing really. That&#8217;s not because I did it perfectly, but because I don&#8217;t know enough about software design to think of a better way to do it. I&#8217;m sure than in a few years I&#8217;ll look back at my code and cringe, just like I do now at version 3.x&#8217;s!
</p> 
      ]]></content>
    </entry>


</feed>