Skip to main content


Pukka's reaching out

Just a note about a couple recent developments with Pukka and other services on the web.

First, I'm happy to announce that Pukka has been successfully supporting Pinboard for some time now. You can see the development of this on the support forum topic. Pinboard is a relatively new service which out of the gate has done a lot of things right. I believe it is run by former Yahoo! employees and they have used their experience with Delicious to rethink social bookmarking. They've been innovating at a fast pace, all the while blogging about their work. It's really refreshing to see rapid, iterative development in the social bookmarking space. They are paying attention to things that matter to today's bookmarkers -- services like Twitter, Instapaper, and Read It Later, dead link detection and bookmark archiving, mobile browsing, Google Reader support, and much more. Not to mention assurance of data integrity and scalability! Keep up the good work, Pinboard!

Second, I wanted to point out another innovative application called Quix. Quix is a bookmarklet that integrates features of many other bookmarklets. For example, you can use Quix's single bookmarklet in your browser as a way to work with Facebook, Delicious, Wikipedia, and Google, as well as a host of Mac applications such as MarsEdit, CSSEdit, ShoveBox, and of course, Pukka. You can check out the full list of services or have a look at a recent TUAW article about Quix, which specifically calls out Pukka.

Lastly, Pukka was recently again featured on MacBreak Weekly, a popular podcast by Leo Laporte, Merlin Mann and others. Pukka was first mentioned on the show about two years ago, when I was dismayed to hear Leo say that he didn't feel that Pukka should cost money. I'm glad to see that Leo has changed his tune in the latest show as he calls Pukka "spectacular" and "worth $17 to me". If you'd like to have a listen, download the episode and forward to about 1:25 in, pretty close to the end. Pukka is also featured prominently in the video version of the podcast as well.

Leo Laporte's web browser
(click to enlarge)

All in all, Pukka's been pretty busy lately. I'm glad to see it getting some press. As always, if there's something you'd like to see Pukka work with better, stop over on the forums and have your say.

DrupalEasy podcast interview

I'm a bit late in linking to a podcast interview that I had the pleasure of being on recently.

DrupalEasy, an organization focused on training and consulting around making Drupal easier to use, runs a podcast interviewing various folks in the Drupal community. My interview was about my work on Drupal, my business in general, Cocoa desktop and iPhone work, my Drupalcon presentation, my career history (in brief), and a lot more.

I had a great time being interviewed by Ryan and I hope you'll take a listen!

Appearance on the Mac Developer Roundtable

Posted in

The latest episode of Mac Developer Roundtable has gone live and I was pleased to be invited on again (see Getting around... table from a few months ago for the first time). This episode's topic is "Getting Started With Cocoa" and is intended for people who are new to Cocoa, Apple's programming framework for Macs & the iPhone.

Joining me on the podcast were some great voices -- Danny Greg, Brent Simmons, Mitch Cohen, Colin Wheeler, and of course the host, Scotty.

I really enjoyed being on this show since only a few years ago, I was a newbie in Cocoaland and was gobbling up all of the resources I could find to teach myself how to use Cocoa. Part of what has always drawn me to the Cocoa community is all of the people who are blogging their experiences, open sourcing their code, and giving behind-the-scenes looks at what makes Mac apps tick, so it was great for me to be on a show and try to give back to the community at large and maybe inspire some new folks to keep at it and build Mac apps.

I'd also like to put in a good word for what Scotty's been building over at the Mac Developer Network. There are a number of great shows, both free and members-only, that are definitely worth checking out. Whether you are just getting up to speed or are an old hand at Cocoa and all things Mac dev, Scotty's got something for you. I really enjoy the podcasts that he puts out, ranging from the technical on to shows such as Developer Lives, which goes behind the scenes to profile the lives of Mac developers.

And speaking of developer lives, I'd be remiss if I didn't elaborate a bit about my credentials as a programmer. In the show, I started a discussion about everyone's programming backgrounds and where they started, indicating that I started programming Perl and PHP ten or twelve years ago. What I meant, I guess, was recent programming experience that led you to Cocoa. I then proceeded to get schooled with everyone else's experience, since they went all the way back to their very beginnings.

So, to fill in a bit about my own programming history, I started on a TI-99/4A in the 80s programming BASIC (Mr. Bojangles, anyone?), then moved to both Apple IIe and IBM PCjr (both also BASIC), and only much later, in college, did I get into Perl and PHP in my free time in the late 90s before turning it into a career. Early on, I spent a lot of time on things like making the Jeopardy! theme song play on my TI or typing spy games from a book into my elementary school's IIe.

I now spend most of my time in PHP and Cocoa, pretty evenly divided, and enjoy building solutions that touch on both the client- and the server-side using this experience. I guess what I'm trying to say is that in some way, I guess I always knew I'd be a programmer, as it has always been something I've been interested in. So consider that my full background -- maybe you share a similar one, or maybe Cocoa will be your first programming language. Either way, welcome.

One last note -- don't forget to check out the gag reel at the end of the show. It's pretty funny, at least for me as one of the folks involved.

So, go have a listen!

Getting around... table

I recently had the pleasure of participating in the excellent Mac Developer Roundtable podcast, where the featured topic was open source software. I've been involved in open source software myself for about ten years, so it was great to, first, be asked onto the show, but also, to share my experiences and knowledge -- not to mention, to "meet" and discuss software with some great fellow Mac developers!

This podcast was particularly satisfying because it brought together the two main halves of my business -- Cocoa and Mac development, where I tend to use open source software, and Drupal and web development, where I tend to contribute open source software.

So, have a listen to the show and if you'd like to check out my main open source efforts, I have an info page with more details.

Offline Subversion: Building a Trac of your own


I have recently, like many other folks, become a fan of my friends Daniel Jalkut and Manton Reece's new Mac developer podcast, Core Intuition (especially the whimsical theme music). In their latest episode, Traveling Luddites, among other things, they discuss distributed version control systems such as Git, Mercurial, and Bazaar.

I'm kind of in the same boat in that I've spent little or no time trying these systems out compared to what I've been using, Subversion, and am a little hesitant to invest a lot of time into migrating and learning a new system. Don't get me wrong -- I'm a hacker and I love to try new technology. However, I don't really have any problems with Subversion and in fact, some time ago I came up with a really sweet setup for offline development, offsite backup, and integrated project management using Trac that I've been meaning to blog about, and this episode was just the catalyst I needed.

Following the directions here, you will get:

  • Offline access to your versioning, ticketing, and documentation systems.
  • Support for multiple projects (though one project is just fine, too).
  • A multi-user setup, if you need it.
  • Integration of your code repository with web-based ticketing, GUI changesets and diffing, activity timelines, and project roadmap planning.
  • Complete, incremental offline backup whenever you like (and have a connection).
  • Very little intrusion into your Mac OS X environment.
  • Complete flexibility in getting your data out at any time.

Just have a look around the Trac demo to get a feel for this system. It was a tremendous thrill during the development of Meerkat to see the roadmap progress meter get ever closer to the 1.0 milestone as I closed tickets and definitely helped me organize the project much better than before I adopted Trac.

And this isn't rocket science -- if you're already technical enough to be using version control, I'm pretty sure you can handle this and have a great setup in a short amount of time. I've found that the parts that trip most people up are Trac installation and Apache configuration. Relax, I've got you covered.

A quick historical note

I've been using Subversion in both user and administrator capacities since 2001 and before that, like Daniel and Manton, I too had a painful coexistence with CVS (and still do sometimes with projects like Drupal). I was introduced to SVN by a former co-worker, Garrett Rooney, back in the days when he was one of the few people who knew about and worked on SVN. Since then, he literally wrote the book (Practical Subversion) on SVN and through the years, I've come to really love the project and have introduced my fair share of folks to it as well.

While, as I said, I'm generally open minded about new technology and systems, when it comes to version control I'm in the camp right now of "if it ain't broke, don't fix it". I'm using Trac on some other client projects, including one with a team of over 30 people all over the world, and I use SVN for the development of both Pukka (over two years of commits) and Meerkat (about a year of commits) as well. It works well for me, I don't have hassles, and since SVN has been integrated with Trac, Apple's Xcode, and the Apache web server that ships on OS X, it's going to take free pony rides or something comparable before I seriously look elsewhere for my version control needs. Of course, YMMV.

What you'll need

In order to replicate this setup, you'll need:

  • A Mac running Leopard and administrator access to it.
  • Familiarity with SVN, but you don't need an existing repository.
  • Some Terminal experience.
  • About an hour to spare (or less, and not counting some background compilation time in which you can do other things).

If you already have MacPorts installed, you'll save even more time and you won't even need to manually download anything else.

Ready? Let's do it.

Install MacPorts and Trac

I'll admit it, Trac can be a little intimidating to setup because of dependencies. But if you get MacPorts, this can all be reduced to a fraction of the time and very little hassle.

  1. Install MacPorts if you don't have it already. The latest installer package for Leopard is here.
  2. Make sure that /opt/local/bin is in your path so that the commands provided with MacPorts are available to you easily in the Terminal.
  3. Open up Terminal and start the Trac installation process by typing sudo port install trac.
  4. Let it roll while you grab a $BEVERAGE or move on to the next steps. When it finishes, you should be able to access a command called trac-admin in Terminal. Depending on what ports you already have installed, you may need to answer some basic questions during the install process, so keep an eye on the window. Brian Cooke's Growl When Done is a good solution here.

Setup Subversion

You'll need to setup a parent directory for your Subversion repository or repositories. I like /usr/local/svnroot, so if you are using someplace else, you'll need to alter the directions below as appropriate. Keep in mind that stuff under /usr/local gets backed up by Time Machine by default, even if you exclude "System Files and Applications". This is separate from the backup mechanism that I'll talk about in just a little bit.

  1. Make a top level Subversion folder using sudo mkdir /usr/local/svnroot and change into it.
  2. Either move an existing repository into a subfolder of this folder, or create a new repository folder using sudo svnadmin create MyProject in Terminal.
  3. Make the whole setup owned by Apache, which on Leopard can be accomplished with sudo chown -R _www:_www . in the Terminal.

Setup Trac

Again, I prefer a similar convention here and put stuff under /usr/local/tracroot. Adjust as necessary.

  1. Make a top level Trac folder using sudo mkdir /usr/local/tracroot and change into it.
  2. Create a new Trac project using sudo trac-admin MyProject initenv.
  3. Edit the MyProject/conf/trac.ini file to configure it. You'll likely just need to change the following items:
    • max_size if you want to upload larger files to the wiki
    • downloadable_paths if you have a non-standard repository structure
    • link to something like http://localhost/trac/MyProject
    • descr, footer, name, and url if you wish
    • repository_dir if you didn't specify it during the initialization step
  4. Give your account full project permissions using sudo trac-admin MyProject permission add <username> TRAC_ADMIN in Terminal (replacing <username> with your own username).
  5. Make it owned by Apache using sudo chown -R _www:_www . like you did with SVN.

Configure Apache

This is perhaps the trickiest part, but I've done the work for you. I did some poking around and figured out a good way to get this working with the Apache that is built into Leopard. Although I haven't tested the other parts of this guide for Tiger compatibility, Apache is pretty much the part that requires Leopard, since it ships with Apache 2 and has some of the modules necessary for SVN integration built in. If you have your own Apache 2 going with MacPorts or something else, perhaps this will still work for you.

First, you'll want to create a password file for authenticating your Trac and SVN users, even if it's just you.

sudo htpasswd -c /etc/apache2/other/htpasswd <username>

Be sure to replace <username> with your own username. This command will create a new password file at the chosen path and add your first user. If you have other users, repeat the command above with their usernames but leave off the -c option since the file already exists and you don't want to clobber the previous commands.

Next, you want to create a configuration file for SVN to make your repository available over the (local) web and to password protect it. Create a file at /etc/apache2/other/svn.conf that looks like this:

LoadModule dav_svn_module libexec/apache2/
LoadModule authz_svn_module libexec/apache2/
<Location "/svn">
    DAV svn
    SVNParentPath /usr/local/svnroot
    AuthType Basic
    AuthName "Subversion Repository"
    AuthUserFile /etc/apache2/other/htpasswd
    Require valid-user

After this, make another file at /etc/apache2/other/trac.conf that looks like this:

ScriptAlias /trac /opt/local/share/trac/cgi-bin/trac.cgi
<Location "/trac">
    SetEnv TRAC_ENV_PARENT_DIR "/usr/local/tracroot"
    AllowOverride None
    Order allow,deny
    Allow from all
    AuthType Basic
    AuthName "Trac"
    AuthUserFile /etc/apache2/other/htpasswd
    Require valid-user

Remember in both of these instances to change the paths as necessary if you put your SVN or Trac environments someplace other than the paths I mentioned above.

Once these files are set, go to Terminal and issue the command sudo apachectl graceful to let the configurations take effect. Once you do, you should be able to reach your Subversion repository at http://localhost/svn/MyProject and a list of your Trac projects at http://localhost/trac. Both will be password protected using the account(s) you created above.

Backing it up

You're almost there! The last bit is some scripting that lets you back both of these systems up to a remote server using rsync over SSH.

  1. Edit a new text file at /usr/local/bin/ts (or $HOME/bin/ts, if that's how you roll) and fill it with the following:

    echo "Backing up Subversion repositories..."
    /usr/bin/rsync -e ssh -avz --delete /usr/local/svnroot/ <username>@<hostname>:svn/Repository.sync
    echo "Backing up Trac databases..."
    /usr/bin/rsync -e ssh -avz --delete /usr/local/tracroot/ <username>@<hostname>:trac/Trac.sync

    Be sure to replace the <username> and <hostname> values with whatever username and hostname your SSH account has.

  2. In Terminal, use chmod 755 /usr/local/bin/ts to make the script executable.

Now, whenever you want to incrementally backup your SVN and Trac databases, just type ts (think: "trac sync") at the shell. Everything that has changed since the last time you performed this command will get copied up to the remote server, keeping a handy backup of both your SVN repositories and your Trac installations should you need to move to another server. And even without the Apache configuration, the SVN repository will be useful as a standalone. Just keep in mind that it is for backup purposes and there is not any two-way syncing going on. That is, your local copy is the authoritative copy and is the one that you should use from day to day, and ideally over HTTP and not using local filesystem access to /usr/local/svnroot directly.


This system has been really useful for me during the development of Meerkat and through the continued development of Pukka, since I've been able to easily track feature requests, bugs, wiki-based notes for future reference, and have it all tied together with Subversion commits. In addition, I've been able to take advantage of offline time while at airports or otherwise on-the-go to actually get code committed, issues resolved, ideas jotted down, and processes documented.

I hope that this guide has been useful to you. Of course, feel free to leave a comment if you have any questions or clarifications or find any typos and I'll try to correct them.

Happy Trac-ing!

Around the web in 80 seconds

Just wanted to pop in and mention a few appearances of our apps around the web recently since the Meerkat launch. Things are really moving this summer!

Again this year, I'm happy to announce that I'll be supporting Seth Dillingham in his efforts to raise $10,000 for cancer research and treatment. Last year, I was able to donate some Pukka licenses and this year, I'll be doing the same, plus adding Meerkat into the mix as well! I'll be blogging more about this as the time gets closer. How can you help? If you are a software user, check out his auctions, and if you are a Mac developer, please consider donating some licenses to your application(s) to help in his fundraising. Seth is riding his bike across the entire state of Massachusetts and all you have to do is continue to use great Mac apps to help!

Next up, I was happy to learn that a fun podcast, NeatLittleMacApps, reviewed Pukka recently. If you like, well, neat little Mac apps, you should check out this podcast and especially Pukka's episode. Thanks, NLMA!

Lastly, stay tuned soon for an update to Meerkat. I'm happy to report that thanks to some great beta testers, there are no known bugs in the 1.0 release, so I'm focusing on some great feature enhancements and additions for the next release. Have an idea? Contact me and let me know so that I can get it on the roadmap. And if you like Meerkat, please consider bookmarking it on (I know a great app you can use), adding it on iusethis, and posting a review on MacUpdate or VersionTracker.

Syndicate content