Twenty Four Severed

June 1st, 2005 by Steve Harris

Today it’s two years since I officially became a self-employed Cocoa developer, although things didn’t really kick off until I landed in Phoenix, Arizona to rendezvous with my erstwhile business partner on June 10th, 2003. The first 40 weeks spent in that wilderness (and for two months, quite literally so) were absolutely dreadful, but since April last year, when I first started working completely for myself, things have improved enormously and now I can say that I’ll never look back.

Not that I would be welcomed back into the world of IT services if I tried. Actually, I’ve had wobbly moments in the past, applied for jobs and been made offers, but once you leave the Corporate Machine (particularly to be a Mac developer) you are typically regarded as a maverick and the extensive experience on your CV is ignored. I understood this when I left and part of my plan was to keep the contracting side of my career going, but it’s impractical to do both well. Besides, I was sick of working for other people. I chose the starving artist route and here I am, happy and thin.

Ten years is a long time and it was weird the first day I was no longer part of that machine. Even though it was my decision to leave, it was like being removed from the Matrix: I felt disorientated, weak and strangely numb. Nowadays, even the thought of returning to that world makes me nauseous. For me, getting into the IT services industry was something of an accident. I enjoyed it for the most part, worked hard and achieved my aims but suddenly ran out of places to go.

All I got from the last year or so was helping other people and working with a good team. After a while things become so abstract you no longer actually do any real work, only talk about it. I have attended enough meetings, pre-meeting meetings, telephone and video conferences, wash-ups, workshops, one-to-ones and presentations to last me a lifetime, maybe longer. Dilbert stopped being funny.

It seemed that regardless of what I was working on I could walk into the office in the mornings, do what needed to be done and leave ten hours later without having to think at all. The pace was always frantic but the job became dull, dull, dull. I love being busy but need to be creative. If I am learning, making something or applying thought to solving problems I’m fine; take all those things away and I see no reason to get out of bed.

These days, it’s the other extreme – I do what I like, like what I do and do it all! I design the software, develop it, test it, write the documentation, administer my web server (and oh, the joy of being your own DBA :-D), design the web site, do the marketing, provide the support and keep the books. I don’t waste time and money commuting, my workday is as flexible as I fancy and despite putting in more hours than before I can even find time to write crap like this.

Another concern I had about going out on my own was that it would be lonely, but thankfully that’s not the case. Every day I’m in contact with people from all around the world: users with support queries, ideas or just writing in to say thanks, suppliers, journalists, developers, Apple sales reps demoing my stuff – the list goes on and on. With Feeder, I also feel part of something: podcasting, the next-generation radio, has exploded since Feeder 1.0 was released at the beginning of this year and through Feeder I’m helping people do something amazing.

It isn’t always easy and I take home less than half what I did before, but that’s OK. I can make ends meet and it’s incredibly rewarding. I’m so much happier and so much less frustrated these days I hardly know myself. My foot is pressed to the metal on the road to Smugville and I’m not going to stop!

This post is dedicated my friends at EDS and is sponsored by Jobserve, Jobsite, Jobsearch, Computer Weekly Jobs, Monster, Jobcentre Plus, et al. After all, Every Day needn’t Suck. šŸ˜‰

Eeeeep! Classic Mac OS Sounds

May 28th, 2005 by Steve Harris

I know they’re old-fashioned, but I really miss some of the system sounds that came with Mac OS 9 and earlier. They were lots of fun.

Fortunately, someone has converted them to AIFFs (along with some other formats) and you can download them all as the Mac OS Classic Sound Pack.

I’m a Wild Eep man myself. I like the way your Mac sounds slightly offended when you do something wrong and anxious when it needs to tell you something.

Feeder 1.1.1

May 26th, 2005 by Steve Harris

Feeder IconFeeder 1.1.1 is released today and has a ton of fixes, tweaks and stuff. It’s been surprising to notice how many little bits and pieces have changed in Tiger and some of the problems fixed in Feeder were workarounds that no longer need working around. It also shows what happens when you try to do a release while aiming for a fixed deadline and moving home. šŸ˜€

At least the fixes are mostly to do with smaller things – the big and important changes: publishing, templates and enclosure uploading seem rock solid (fingers tightly crossed!).

Feeder 1.1 – Publishing

May 25th, 2005 by Steve Harris

Two of the most requested features following the release of Feeder 1.0 were .Mac publishing and Secure FTP.

Publishing to iDisk is now very easy to implement thanks to Apple’s DotMacKit framework, although it’s a shame they can’t make the currently private DAVKit framework available for developers to include WebDAV support.
It’s not always understood that Secure FTP is a completely different animal to regular FTP and if you’re not writing your own FTP client, you ideally need an Open Source library to do most of the hard work for you.

Originally I was going to use libssh, but it vanished from the web for a couple of months while I was developing Feeder, so instead I turned to the brand new libssh2 by Sara Golemon. Feeder isn’t using the latest version of this, but will be upgraded to do so in the future after some more thorough testing. This library is not only very good but also licensed under a preferable BSD-style license rather than a LGPL. I like BSD licenses because they pretty much say ā€œdo what you want.ā€ I don’t like GPL because it’s too rigid and far too hostile to commercial applications. LGPL is easier on the latter point, but it becomes a matter of principle!

The challenge in Feeder was to make these things fit together. Behind the scenes, when you click Feeder’s Publish button, you invoke one of three completely different file transfer mechanisms, but Feeder behaves the same for them all, with its built in server browser, progress bar, etc.


Feeder Publishing Progress Bar


Also, Feeder 1.1 is much more helpful when you first set up publishing for a feed. I’m not usually keen on assistants because the user never gets to stand on their own two feet, but they have their place and in this case it is more a matter of workflow. Once set up, you see the same publishing panel as when you were setting it up but without having to go through the steps that led you there.

The other big publishing feature is enclosure uploading – a feature mostly useful for podcasters. Drag the file onto the enclosure section of the edit window and Feeder shows a sheet where you can amend and confirm the upload details. Feeder then gets the other attributes (MIME type and file size) and creates a file name for the enclosure based on the filename and upload settings.

Feeder keeps a record of the last time an enclosure file was successfully uploaded and will only automatically upload the file once, although this again can be changed when you come to publish should the file have changed. Another point of interest is when Feeder has enclosures to publish it uploads them first, followed by the feed. This ensures that by the time the updated feed is online, so too are the enclosures it references.

Expect to see more refinement, server integration and publishing options in the future.

Feeder 1.1 – Automation

May 24th, 2005 by Steve Harris

One irksome thing about creating RSS feeds, as opposed to having them generated by a content management system such as a blogging tool is the laborious text entry required, particularly with URLs. Another thing is repetition. For example, if you have a podcast called “Daily Source Code” and each item in your feed that announces a new show has the title “Daily Source Code for [date]”, it can be a pain to type all that every time.

With Feeder, the aim is to make editing items in your feed as painless as possible. Templates can hold default values and Feeder auto-completes fields from other entries in the feed, just like in a web browser. Feeder will also update publication dates when an item is saved and when the feed is published and Feeder 1.1 will automatically generate GUIDs (Unique IDs).

Unique identification for items in your feed is very important for aggregators (i.e. news-reader apps, browsers, iPodders, etc) to be able to tell when an item has been changed. If no GUID is present, many aggregators try to achieve this by other means. Feeder 1.1 also warns you when you try to change an item’s GUID, since that could cause an aggregator to think the item is completely new and show it as a duplicate. It was NetNewsWire’s Brent Simmons’ posts on his blog that prompted me to implement this.

Just as with autocompletion and automatic dates, Feeder doesn’t get in your way if you don’t want this automation. You can set every item in a feed to automatically generate a GUID when saved (or not) and override this setting on a per-item basis. Feeder can also generate a GUID on demand. To keep the interface sleek, I created a new control to do this (I call it an ActionTextField). Click the gear icon and you see a menu with the relevant commands.

Feeder's Action Text Field

I know you shouldn’t create new controls on a whim but Apple seems to do it all the time and nothing else seemed to fit, apart from a drop-down arrow, which I felt was more appropriate for a combo box (list of values) than for doing this sort of thing. I also considered something like Address Book’s rollover fields, but I know so many people don’t realise what these are for until it’s pointed out I felt something more visually obvious was appropriate in this case.

Another area of automation introduced in Feeder 1.1 is to do with enclosure uploading, but there’ll be more about that in the next post.