« »

Share, post mortem

[Share](/Share/) has been officially supported and shipping (in non-beta form) for a few weeks now. I actually started writing a rather length post-mortem a bit back but I got tired of writing on it so I figured people would be bored reading it. Instead, I’ve trimmed it down and just went straight to the stuff I wanted to say the most.

## I needed Share

I wrote Share because I needed it. That’s basically why I write all of my software. I wrote [SiteTagger](/SiteTagger/) to satisfy my own bookmarking needs and [MacDialer](/MacDialer/) because I hated dialing the phone. I wrote Share because I was tired of hassling with Apple’s provided servers for sharing files. I really dislike configuring servers or setting up stuff like that. I also hated that I had to copy everything into my Shared folder. Why wouldn’t symbolic links work (rant for the future: why are Finder aliases so useless compared to symbolic links)? How do I get Windows users logged on? It was just a headache to have to explain to people how to find the files.

Share was actually an idea that kept popping up. I’d start it and stop it. It always seemed a bit too much like beating my head against a wall. Basically, I got tired of writing HTML into my code. There wasn’t a great templating system for Cocoa/Objective-C like there is for PHP. Sure, there are a few things out there but I couldn’t find anything that provided `for` loops, conditional statements, and other niceties. One day, I got fed up and wrote a little something-something myself. It’s not the most robust but it works (and can be found on my [Google code][gc] page).

This [article on MacDevCentral](http://www.macdevcenter.com/pub/a/mac/2006/11/14/how-to-write-a-cocoa-web-server.html) talked about writing a web server in Cocoa. Once I matched my templating class with that article, I was in business. It went exceptionally quickly once these two pieces were in place. I went from a server and a templating class to ready-for-use beta in only 7 days. I shared it with my friends and they seemed to love it so I figured I’d keep working on it.

## A little bit of this and a little bit of that

At one point, the Share server was actually a plugin for SiteTagger. I scrapped that idea for various reasons. By the time I had realized I could put that server core to my templating class, I could finally create that sharing application I always wanted. There was a lot of work to do but I was lucky to have a large pool of open source software on which I could draw. I’m grateful to many people.

Like many Mac apps, Share uses [Sparkle](http://www.andymatuschak.org/pages/sparkle) to handle auto-updating. It also uses [Andy’s Help Toolkit](http://www.andymatuschak.org/pages/helptoolkit) in the Help documentation. I owe a large debt to Andy Matuschak.

I found a particular dislike for using XML and the DOM when parsing data sent between Javascript and Share so I looked for a JSON solution. There are a couple of JSON parsers for Cocoa but I settled on [CocoaJSON](http://toxicsoftware.com/blog/cocoajson) by Jonathan Wight. It certainly made my Javascript work a lot easier.

[md5.js](http://pajhome.org.uk/crypt/md5/) by Paul Johnston and [SortTable](http://www.kryogenix.org/code/browser/sorttable/) by Stuart Langridge saved me from writing Javascript code. I’m always happy when I don’t have to write Javascript code. Share also uses [RSVerticallyCenteredTextFieldCell](http://www.red-sweater.com/blog/148/what-a-difference-a-cell-makes) by Daniel Jalkut, [CTGradient](http://blog.oofn.net/2006/01/15/gradients-in-cocoa/) by Chad Weider, and [VariableCellColumn](http://www.corbinstreehouse.com/blog/?p=46) by Corbin Dunn.

Somewhere around v1.0.2 (I think), I added [BDAlias](http://eschatologist.net/bDistributed.com/index.html#BDAlias) by Chris Hanson. That helped me deal with users that use an alternate iTunes library path.

All of my apps use bits of code from 3rd parties but none more so (or more visibly) than Share. Previously, I made an effort to share code though my developer’s blog and my developer’s page. I figured I really out to give back more than I take so I went open source in a big way. My [Google code][gc] page has a bunch of shipping code, most minor projects, some old projects, some abandoned app ideas, and much more.

## Ready, set, launch

Share had a bit of a soft launch. I had a public beta release that worked great for me. A bunch of early adopters got Share at a discounted rate and I got a pool of reports that helped me squash bugs. I know some people (*[ahem](http://daringfireball.net/2006/11/beta_excuse)*) don’t like public betas but they’re really useful for small developers. I didn’t have a large, ready set of testers so the public beta was my best bet. It was a good deal all around. My early users got good software for cheap and I got plenty of reports.

Share is the first application that I’ve released with any amount of buzz going into it. A bunch of Mac-related websites picked up on Share while it was still beta. I really appreciate that.

I also use [PRMac](http://prmac.com) to submit my launch press release. Let me say that I really have doing the marketing stuff and my press releases probably look like it. The only way that I find them palatable is through using PRMac. It’s a great service and makes the whole process so much smoother. I highly recommend it.

## Final words

I tried to keep this post mortem as small as I could but I still had a lot of people to thank. I purposefully avoided the design decisions and process changes that I made. I’ll post about them in the future but I just wanted to thank everyone I needed to thank, acknowledge all of the help that I got, and talk about what a great experience developing software for the Mac is. If it weren’t for all of the code sharing from other developers, Share would be much different (and much delayed). If it weren’t for the pre-launch buzz and PRMac, I would have had a really hard time getting Share noticed. The Mac community is a pleasure to work with and I’m happy to be able to do so.

[gc]: http://code.google.com/p/fromconcentratesoftware

One comment on “Share, post mortem”

Jonathan Wight:

September 13th, 2007 at 12:04 pm

Glad you found CocoaJSON to be useful!

Good luck with your software.

Leave a Reply