Skip to main content

Update from the Pukkaverse

I said in my last post that I was behind and it shows in the number of things that I have to talk about regarding Pukka!

First up, my patch to the open source Vienna newsreader has made it into the stable version, which you can read about here. This helps with getting highlighted text out of Vienna and easily into your Pukka post.

Next, Seth Dillingham has reported on this blog that he has exceeded his fundraising goal for the Pan-Mass Challenge. I was able to donate some copies of Pukka to his effort and I'm glad to see that he reached (and exceeded) his goal!

Third, a few notes about social bookmarking in general and in particular. I have been testing out the preview of the next version of and will be keeping up on any changes that come about as a result of that. I also noticed a great video, which then ended up on the blog, about how to explain social bookmarking to people who are unfamiliar with it -- so check it out if you just don't get why you'd use Pukka.

Next, thanks to a post by Workshop friend Red Sweater Software, I was alerted to an app that recently added integration with Pukka. As of version 1.2.1, EagleFiler can capture post information from Pukka for better archival if you so choose. Neat!

I've also been keeping tabs on Apple's Leopard OS and to my knowledge, Pukka is doing fine on the latest build -- but please report if you find differently! I'm very excited for the Big Cat to arrive and very much looking forward to using some of its features full time next month!

And lastly, on a general business note, I wanted to report that I've been investigating how to better make Code Sorcery Workshop more green and sustainable and a better environmental citizen. I ran across a post by friend-of-the-Workshop Daniel Morrison about his efforts. Like his business, I too have minimal office needs. I also am able to take advantage of working remotely as well as DC's excellent public transportation in order to round out nearly a year now of essentially no driving for work. However, I do fly to conferences (though not many!), so that can always be reduced. I was also happy to learn last month that my webhost of eight years, pair Networks, has gone carbon neutral and is making other efforts to remain sustainable. This is a good trend! You can read more about pair's efforts here.

Whew! I think that's all for now. As I said, vacation is over and I'm back to working hard after playing hard. On a personal note, if you'd like to check out pictures from my 3,500 mile trip across the American Southwest, you can find them here. Enjoy!

DrupalCon Barcelona

Nothing like a vacation followed immediately by a European software conference to get things off track! I'm a little behind, but I'm starting to catch up and I wanted to post about a number of things, the first of which is Drupal.

I was fortunate enough to travel to Barcelona last week for DrupalCon, pretty much the ground zero for all things Drupal (more on my work with Drupal here). With over 400 people in attendance, the growth in the community has been tremendous and after three years working with the software myself, it's really inspiring to see both others picking it up as well as the future directions in which things are headed.

I attended a number of excellent panels (which I hope to blog about soon) including topics such as multilingual websites, advanced JavaScript, asset management, publishing workflows, database abstraction, new things in PHP 5, feed aggregation, and the scaling of the Drupal website, itself running Drupal (of course).

I had the pleasure of traveling and working with the team behind the project featured in this panel -- essentially, open source software in support of humanitarian and stabilization operations around the world -- as well as seeing Workshop friends and fellow DC residents Development Seed as they proceeded to tear up the conference with a multitude of outstanding sessions highlighting their amazing work. Read more about Development Seed's work on their blog and you might even see a cameo by yours truly!

Lastly, I was inspired to participate in Friday's Lightning Talks with a quick presentation of the Boost module, which I now co-maintain and have talked about previously. Will White from Development Seed was kind enough to capture a couple photos of me presenting the Environmental Working Group site. You can check out more of Will's DrupalCon pics here.

I'm looking forward to next year -- and if you're interested in Drupal, leave a comment and I may be able to point you in the right direction, be you a coder, site maintainer, or just a curious tinkerer!

Vienna improves Pukka support

Posted in

Vienna icon

Last week, the Vienna development team accepted my patch to improve Vienna's support for Pukka. Now, when you pass an RSS item from Pukka to Vienna, any highlighted text in the body of the item is passed as the description for Pukka.

I believe that this is still a prerelease version of Vienna, as the main website still has an older version, but updates have appeared on the MacUpdate profile page. You can grab the latest Vienna there and give it a spin!

YouTube series: Ask EWG

Posted in

While I'm on the topic of shout outs, I wanted to mention a cool thing that one of my clients is doing right now. The Environmental Working Group here in DC routinely answers environmentally-related concerns and questions posed by the public and has recently begun doing select answers in video form on YouTube. You can submit your questions here and subscribe to the video series here.

Check it out!

Pan-Mass Challenge update

Posted in

Just a note that Seth Dillingham (whom I blogged about before) has begun his actual software auctions on eBay. These are bundles of quality Mac software (including Pukka) valued at over $1,000 each but currently bidding at under $200. All proceeds benefit the Pan-Mass Challenge and the auctions end in the next few days, so check them out!

Pukka 1.6.1: Vienna bugfix

Posted in

I've just released a minor bugfix to Pukka, version 1.6.1. This version fixes a bug that would prevent the Vienna RSS reader from passing items properly. Grab it now!

As a side note, the behavior among Pukka's supported RSS readers is slightly different when it comes to the RSS item text passed as Pukka's description:

  • NetNewsWire passes any selected body text as the description. If nothing is selected, the whole body is passed (subject to automatic truncating down to the maximum of 255 characters, which you can read more about in this post).
  • NewsFire passes the whole item body every time, regardless of selection (subject to the same truncation).
  • Vienna passes an empty body every time, regardless of selection.

I will be contacting the authors of NewsFire and Vienna to see if they can possibly work with the text selection for a more consistent experience, but for now, that's the story!


Update: I've just submitted a patch to the Vienna development mailing list that should fix the above behavior and pass along any selected article text as Pukka's description. If you're impatient and you happen to build and run the latest Vienna from source, this patch will get you that behavior now!

C4's well that ends well

Posted in

I just last night got back from Jonathan "Wolf" Rentzsch's now-annual C4 Mac indie developer conference in Chicago and once again, it was time and money well spent. The conference has been hugely motivating to me as a concentration of extremely bright people in close proximity, feeding off of each others' ideas and energy. In fact, last year's first iteration of the conference was the motivating factor in me finally striking out on my own, which I did within the next couple weeks.

Though less so than last year, C4 was again all hallway. I only say 'less so' because we had the convenience of everything being in proximity rather than last year's Plan 'L'. Regardless, as Wolf said last year, "I often get more out of connecting with individuals than listening to a session." The same is true for me, and this year I had the pleasure of meeting up with old friends and meeting new ones. One of the bits of advice, which I'm going to try to apply to future conferences, was to sit with someone new every time you had the chance. I tended to do this by finding a table all my myself at meals and letting the people come to me, rather than seeking out people I knew and sitting with them. It worked out and I met or got to know better several people, including Philippe Casgrain, Manton Reece, Jeff Czerniak, Jonathan Wight, Christopher Bowns, Marko Karppinen, Alex Payne, our illustrious A/V guy Pat Hughes, and many other bright people.

I'm sure there will be many summaries of this year's event, but one thing that I wanted to document is, I think, rather symbolic of the spirit of the event. During Sunday's Iron Coder Live hacking contest, Craig Hockenberry of the Iconfactory demonstrated his cool hack to do 2D and 3D plots on the iPhone. He also explained an error message that he received in JavaScript containing hexadecimal gibberish. Of course, being Craig (who else would notice this?), he recognized the beginning of the text as a PNG image header, so he copied it out, pasted it into a file, and opened it as a PNG. The result was this:

A hidden, cryptic image on the iPhone
Craig's image (click to enlarge)

Closing out his hack presentation, he made the URL for the image available and invited the attendees to race to decode it, if they could.

This particularly appealed to me, as I recognized instantly that the coded language was the Futurama TV cartoon's alien alphabet. I found a decoder and got to work.

Several of us arrived at the translation pretty quickly, though I have to admit that I think I may have been first, at least in posting it to the C4 Twitter backchannel. The others were Philippe Casgrain of Corel and (I think) Paul Kafasis of Rogue Amoeba. I hastily decoded and mistook "power" for "poker" and Philippe missed the number "50" (maybe Paul got it completely right?), but the resulting message turned out to be:

Enough RDF power
to influence geeks
up to 50 meters.
Leaking of information
punishable by death.

Steve Jobs'
personal aura
harnessed for

Now that's just pretty awesome. This whole hack was representative of the weekend: Code, Culture, Community, Conspiracy -- C4's expanded title -- and represents why I'll be back again and again to the best of my ability.

Thanks again to all of the attendees and I look forward to reading your summaries (I'll leave the panel reviews to the real bloggers) as well as to seeing you all again next year!

Update: I should also link to Mike Zornek's C4 retrospective, which really nails it on the head, particularly on most of the session summaries and Saturday night's, uh, interesting panel.

Pukka 1.6 released: status bar menu and Spotlight!

Posted in

I'm pleased to announce the release and immediate availability of Pukka 1.6. Pukka now features a new, optional menu in the status bar for quick access to your accounts, tags, and bookmarks, as well as full Spotlight support.

The status bar item contains a menu similar to Pukka's dock menu:

Pukka's new status bar item

What's more, both this menu and the dock menu have been optimized so that even users with thousands of tags and bookmarks will have speedy access to them without delay.

Pukka also now features Spotlight support for fast searching of your bookmarks from your desktop. All fields are indexed, including URL, title, description, tags, author, and post date. Opening a bookmark opens it in your favorite browser, just like any other bookmarks on your Mac.

Spotlight support in Pukka
Spotlight support (click to zoom)

There are also a few tweaks, namely improved Leopard support, verification of account deletions, and correction of some minor user interface issues.

So what are you waiting for? Go get Pukka now and take it for a spin!

Pukka and the Pan-Mass Challenge

Posted in

Code Sorcery Workshop is proud to help support Seth Dillingham of Mystic, CT, in his participation in the Pan-Mass Challenge. Seth will be cycling 192 miles across Massachusetts (not to mention an extra 100 miles the day before to get to the starting line, just for fun) to raise money for cancer research and treatment for the Jimmy Fund. The ride will take place August 3-5 and Seth will be holding software auctions of popular, donated Mac titles in order to meet his goal of raising $6,600. We're donating five licenses for Pukka to help out.

You can read more about the auctions, which are scheduled to start today, on Seth's blog. You can check out the full list of donated software as well.

Good luck Seth!

Boost your Drupal site!

Posted in

Boost: Static HTML caching for Drupal

I've recently become quite familiar with Arto Bendiken's Boost for Drupal. For context, Drupal is an open source, modular, PHP-based content management system (CMS) that I use with many of my clients. Boost is a module for Drupal which assists you in caching content as static HTML, bypassing Drupal (and thereby PHP and MySQL) in order to handle much more traffic and serve content much more quickly. Essentially, you let Apache do what it does best -- serve HTML pages. With a busy site or one with a lot of content, this can be a lifesaver.

Arto has a good write-up about Boost in his original blog post. However, Boost is a little more complex than most Drupal modules, so what I hope to add here is a couple things:

  • the basics of what Boost gives you
  • how the two "halves" of Boost complement each other
  • how Boost gets you outside of Drupal entirely
  • the status of Boost with regard to Drupal 5.x
  • a little more detail about how it works
  • some caveats that I've found

Arto's documentation for the setup of Boost is great, so I won't be rehashing that. Rather, I hope to provide a little more technical info about how the module works.

The Basics

Basically, Boost is two parts: first, a Drupal module (in the traditional sense) that manages the cache and provides for an administrative user interface, and second, some rule lines to add to your Drupal site's top-level .htaccess file which allow Apache to bypass Drupal entirely and serve pages from the cache.

The biggest thing to understand about how Boost works is to understand its utilization of Apache's mod_rewrite via the .htaccess file rule lines (by the way, .htaccess is just the default name for files in your site that Apache will read for configuration info). Many people may not understand that Drupal's use of clean URLs is dependent upon mod_rewrite. Every URL on a Drupal site is basically just a path argument to the top-level index.php, which dispatches calls to various points in the code to handle that argument. So, when you go to /about, the index.php file actually gets an argument of about and determines what content to serve. Apache's mod_rewrite is able to keep the browser pointed at /about while actually running index.php. Another popular open source CMS, WordPress, behaves similarly.

Once you understand this, it's easy to understand what Boost does and why it requires mod_rewrite. Boost by default stores the cached versions of pages under /cache on your website (this path is configurable, though). Then, when a request comes in, the .htaccess file is consulted (because that's what Apache does), which tells it to look for cache files first before sending anything to Drupal's index.php. Since the cache files are plain HTML, they go out much more quickly than Apache running PHP, firing up Drupal, querying MySQL, and then serving content. Arto provides some graphs in his original post showing just how dramatic this improvement can be.

Lastly, a word about the cache filename standard. If in fact the /about URL were cached, it would actually be in your site at /cache/about.html. If Apache finds this file, it assumes that the cache is still valid (the Drupal module side takes care of expiring and removing stale content) and serves it directly. For path aliases (such as "/about should serve the same content as /node/137"), Boost uses UNIX symbolic links in the cache filesystem, so /cache/about.html would be a link to /cache/node/137.html.

Boost and Drupal 5.x

I have been using Boost on a Drupal 5.1 site, thanks to this port of Boost to Drupal 5.x by the maintainer of This seems to be the only source of Drupal 5.x-compatibile Boost material currently. The only caveat to be aware of about this version is that by default, the front page is not cached -- more on this below. If your site is anything like the one I used Boost on, you will need to remedy this since your front page is likely your busiest as well as most complicated page and is in need of caching.

A Little More Detail

A couple other notes about Boost's operation:

  • Cache files are created on demand. For example, if your front page is not cached when someone requests it, Drupal will construct the page and cache the file, but serve the constructed page to the user. Every user thereafter, until the cache file becomes stale and is removed, will receive the cached version. If you have pages that are particularly demanding, think about running a cron to request them anonymously in order to get them cached for regular users.
  • Special paths like /user/login and /admin, as well as HTTP POST requests and any request for a logged-in user, are not cached. Arto has put a lot of thought into this area. Note that this means that sites with mostly logged-in users will not benefit from Boost very much -- anonymous users see the real benefit.
  • Boost takes over the configuration interface for Drupal's built-in caching mechanism. This just means that it avoids confusion between two types of caching and just "upgrades" your current setup to be Boost-ified.
  • Like the built-in cache, Boost has multiple cache lifetime intervals to choose from; anywhere from one minute up to one day.
  • Boost expires content in one of two ways. It implements hook_nodeapi to catch node updates, insertions, and deletions and responds to those, and it also implements hook_cron to expire content that has become stale but has not had any specific actions performed on it.
  • Technical note: Boost uses PHP's output control functions (i.e. ob_start et al.) and hook_init to intercept every Drupal page request, buffer the content, compare to and update the cache, and then send the content along through Drupal normally.
  • Nothing stops you from expiring content manually by deleting its file from the cache. However, note that for pages which have path aliases (and thus Boost symbolic links) to them, the links do not get removed automatically so you may cause some wonkiness by doing this.
  • Boost inserts a small HTML comment at the very bottom of cached pages with the start and end cache times so that you can tell if it's working and how long a given file will persist in the cache.


Like any somewhat intrusive technology (and by this I mean that it works with every page and changes the way your site operates as a whole), Boost should be used with caution. Arto states that the project is still in an alpha state.

The biggest issue that I've noticed is a strange bug which occasionally caches the front page as a Drupal "access denied" page. Others have seen this as well and I've never been able to nail it down completely. This is the main reason why's port of Boost to Drupal 5.x leaves out the front page from caching. I was able to work around this by hacking Boost's file, in the boost_cache_set function, to not cache pages containing the words "access denied". I hope to report more once I figure this out.

The second issue is that currently, Boost will not work for sites that are not at the top-level. That is, if your site is, it will not work -- only would work. I believe this is on the .htaccess side, but it only really affected me in testing a development version of the site and since I was able to set up a top-level sandbox, I didn't investigate it any further. Once again, if I make any improvements in this area, I'll update this post.


This concludes my overview of Boost. As I mentioned above, I will update this post if I make any progress on the (very minor) issues that I've had with it. It's a great system and I highly recommend it!

You may also be interested in my Drupal page here at Code Sorcery Workshop for more info about my work with Drupal.

Thanks for reading!

Syndicate content