Dougal Campbell's geek ramblings

WordPress, web development, and world domination.

WordPress theme licensing

There is finally an official answer to the question of whether or not WordPress themes must “inherit” the GPL license that WordPress itself uses. Matt asked the Software Freedom Law Center to examine the WordPress source and how themes fit in. The final, official answer to whether themes must be GPL? Yes and no. 🙂

As many people have theorized before (myself included), the PHP files in a theme fall under GPL because they are reliant on the main WP codebase in order to function. The CSS, images, and javascript, however, are separate works which can stand on their own in other contexts, and therefore can be licensed however their creator wishes.

The Theme Repository at WordPress.org will only host themes that are fully compliant with the GPL. But they do now now have a directory of other sites which provide “commercially supported GPL themes“. I expect that the combination of the license clarification and the commercial directory listings will stir a lot of new buzz in the WordPress theming communities.

I imagine we’ll start seeing a lot of “free, basic” themes, with “premium” child themes that add fancier styling and javascript features [note: no “child theme” page in the Codex? Really?]. Another business model that commercial theme developers might consider trying is the “hostage-ware” model. This is where you only release the product after you receive $X in “donations” (see Kickstarter for an example of a service built on this idea, in a meta sort of way). However, I’m positive that we’ll also continue to see plenty of wonderful themes which are fully free (in both the “beer” and “speech” senses).

WordPress Themes Tutorial

If you aren’t already following along, I highly recommend checking out the How To Create A WordPress Theme tutorial series by Ian Stewart (ThemeShaper.com). This 12-part series (8 complete at the time of this writing) aims to take you from nothing to a fully functional, semantically rich, flexible WordPress theme in digestible chunks. Along the way, Ian describes the changes being made, and why you are making them. In this way, you can gain a basic understanding of the roles of the various theme template files, and the code contained within them.

The lesson is broken down thusly:

  1. Introduction
  2. Theme Development Tools
  3. Creating a Theme HTML Structure
  4. Template and Directory Structure
  5. The Header Template
  6. The Index Template
  7. The Single Post, Post Attachment, & 404 Templates
  8. The Comments Template
  9. The Search Template & The Page Template
  10. The Archive, Author, Category & Tags Template
  11. The Sidebar Template
  12. Reset-Rebuild Theme CSS & Define Your Layouts

If you’ve ever thought about creating your own theme, but felt like the task was too big to tackle, this series of articles is for you. It’s a great bit of instruction that will introduce you to the core pieces of WordPress theming without overwhelming you or trying to cram too much into a single article.

Props, Ian!

Dougal’s must-have iPhone app list

My brother-in-law, John, recently got an iPhone 3Gs (lucky dog). Knowing that I also had an iPhone (though mine is the older “2G” model), he asked what apps I recommended. I’ve got a ton of apps installed, many of which I never really use, and should probably delete. But here are the ones that I actually find myself launching with some regularity, grouped into rough categories, all free, except where noted:

Productivity/Utility

Evernote
This is a great note-taking app. There are native desktop clients for Windows and Mac, a web version, and native iPhone and Blackberry apps. It lets you make text notes, photos, web page bookmarks and clippings, and voice notes, and sync them wherever you are.
Instapaper
Lets you bookmark a web page for later reading. When you sync it, it will save a phone-optimized offline version in your phone which you can pull up and read at your leisure, even if you’re stuck without a network connection.
Night Stand
Use your phone to replace the alarm clock on your night stand. Simple. Obvious. Useful.
SnapTell
Snap a picture of an item on a store shelf. It will try to find it on Amazon.com and show your prices for it.
Vlingo
Voice commands for your phone. Dial contacts, post to Twitter and Facebook, select songs in your iTunes library, all by voice. When they add SMS texting as a feature, Vlingo’s Jedi training will be complete.
DialX
With a little practice, DialX will let you manually dial phone numbers (you know, for phone numbers that aren’t already in your contacts) without having to look at the screen. I actually used this once, and it made it moderately less dangerous to dial while driving.
Stanza
Free e-book reader. For free e-books. I’ve read a couple of Cory Doctorow’s free sci-fi novels with this. And yes, it has the ability to download legal, free e-books built right in.

Social Networking

Brightkite
I just like messing with geolocation stuff. Integrates with Twitter, Facebook, and Flickr.
Tweetdeck, Nambu, Twitterific, Tweetie ($2.99), Hahlo (web app), Twinkle
These are some of the Twitter clients I’ve played with. Tweetdeck and Nambu are notable for having support for groups. And Tweetdeck can sync settings between your phone and the desktop version. Hahlo isn’t actually an app, but an iphone-optimized web interface. But it’s so good, it makes you think it’s a native app. Twinkle is…a little different. I never really got exactly how it ties in with Twitter. But for location-based infostream, it’s kinda nifty, and worth a look.
Facebook
The official Facebook app. Maybe useful, maybe not. Probably depends on how you use Facebook.

News/Info/Search

The Weather Channel
I like the Weather Channel app better than the wimpy Yahoo-based one that comes with the iPhone.
Shazam
When you aren’t listening to your iPod, you might be listening to an ancient technology that the Old Ones called “radio”. And you might hear a song that you like, but you don’t know the name of it, or who sings it. Fire up Shazam, and it will magically identify the artist and song for you. And it will provide you convenient links to the iTunes store, YouTube videos, artist bios, etc. I’ve even had this app identify songs while I was wheeling a shopping cart around a department store with a lot of background noise. It just rocks.
Flixster Movies
Info about currently playing movies, theaters, and showtimes. There are many such apps. This is just the one I use.
Sportacular
Up-to-the-minute sports scores. Of course, the only sports scores I care about are usually for Auburn football. But this app gives you scores for other sports teams anyways. I’m not sure why they bother.
MovieStar
The best iPhone interface to IMDB that I’ve been able to find so far. Which isn’t to say that it’s great, but it’s (mostly) better than trying to navigate the website in Mobile Safari. What I do like is that the information it provides is readable. What I don’t like is that it doesn’t present all the information I usually want in the filmography (the number of appearances for an actor in a series, or the character name). You also can only search for an actor by real name, not character name. I’m hoping they’ll release an improved version one day.
I Can Has Cheezburger
I lurvs me some LOLcats. I just have to avoid looking at this in public places, because people start to stare at me when I suddenly burst out in uncontrollable laughter. You might argue that this belongs in games. Go ahead, argue.

Games

iPint
There are many beer apps. This is the one I have. It’s no longer available in the iTunes store. Maybe try iBeer for $0.99. Generally impressive to people who still haven’t seen an iPhone up close before.
BubbleWrap
Popping bubblewrap. As a game. Kids love it. Get a screen protector.
Lightsaber Unleashed
Come on, do I really have to tell you anything about this? Just download it, already.
TapDefense
This is one of the few games I’ve downloaded that I actually spent much time playing. There are zillions of iPhone games based on Tower Defense out there. And I hear that many of them are quite good. Some of them cost money. This one is free, and it’s the only one I’ve tried, because I just don’t have all that much time for games. But I’ve enjoyed it, so it’s the one I’m recommending.
Koi Pond ($0.99)
A tranquil koi pond with (optional) sound effects and other goodies. You can shake the phone to feed the fish. You can splash the water and scare the fish. You can drag the water lilies around. You can hold your finger in the water and the fish will nibble you. Another one that kids like. And me, too.

Again, I have other apps on my phone — over 60 more that I didn’t mention above, not to mention built-in stuff like Google Maps, YouTube, and the Calendar. But these are the ones that I actually launch and use on a regular (or at least somewhat regular) basis. What are your “must-have” apps? Do you know a better alternative to some of the ones I mentioned?

Drupal shop gives props to WordPress

My wife sent me a link by Volacci, a Drupal SEO development shop, giving some nice kudos to WordPress 2.8.

Last week the much anticipated new version of WordPress (version 2.8) was released for download. Many webmasters, bloggers and CMS fans alike have come to expect great things out of the seasoned system, so the expectations were high. According to the earliest reports, WordPress 2.8 not only lives up to the hype, it presents some stiff competition for Volacci’s favorite platform, Drupal.

It’s always nice to see compliments coming from someone who doesn’t have a vested interest in making them. That’s a good indication that you’re doing something right, so congrats to the development team and to the WordPress community. And to give Drupal its due, there are certain types of site setups that are easier to manage in that CMS. And with the Drupal 7 UX effort going on now, it looks like the next release is going to be much easier to administer than it has been in the past.

I have a feeling, though, that future releases of WordPress will be adding more general CMS functionality. And we’ll find more folks in the Drupal camp looking at WordPress as a possible alternative for projects. Really, though, this kind of “competition” only helps to improve both systems. I think users of both WordPress and Drupal can look forward to many improvements in the future.

WordPress 2.8.1 Coming Soon

Right on the heels of version 2.8, we will be seeing a WordPress 2.8.1 release soon. There are several minor bugfixes in so far, mostly dealing with tweaks to plugin and menu management. But the big problem driving a quick update is a bug in the core upgrade feature. It seems that in the case where the upgrade can’t be completed for some reason, the upgrade feature was deleting the wrong files when it attempted to clean up. Oops!

On the bright side, when this did happen, it would only delete files that are part of the core package, not any of your plugin or theme files. So the failure could be fixed pretty easily, by just manually re-installing the 2.7.1 or 2.8 files from a zip archive. Nothing would be lost except perhaps a few heartbeats of panic.

Looking at the auto-upgrade process, here are the steps outlined in the code:

  1. Test unzipped location for select files to ensure that unzipped worked.
  2. Create the .maintenance file in current WordPress base.
  3. Copy new WordPress directory over old WordPress files.
  4. Upgrade WordPress to new version.
  5. Delete new WordPress directory path.
  6. Delete .maintenance file.
  7. Remove old files.
  8. Delete ‘update_core’ option.

What can happen is that if an error was detected in step 3, where it tried to copy the new files into place (probably due to file ownership or permissions), it was supposed to delete the directory of new files that it had downloaded and unzipped. Instead, it deleted from the main site directory. It was simply a case of the wrong variable being used. For those of you following the SVN repository, this has been corrected in trunk and in the 2.8 branch, where the 2.8.1 update will come from.

If you haven’t upgraded to WordPress 2.8 yet, but you want to, and you’re nervous about possibly running into this bug, you can either wait for 2.8.1 to be released or upgrade the “old fashioned” way, by unzipping and uploading the new files.

Plugin: Fancybox Gallery 0.3.1

I have updated my Fancybox Gallery plugin to version 0.3.1.

Fancybox Gallery will automatically turn your photo galleries generated by the WordPress ‘gallery’ shorttag into a dynamic lightbox.

New in version 0.3 is the ability to navigate to the next/previous image while in lightbox mode. Another change is that this version requires jQuery version 1.3.2, and thus you’ll need to be using WordPress 2.8. If you are running an older version of WordPress, but the newer version of jQuery, the plugin should work, but I don’t think that the navigation feature will be present (I believe that the changes in the gallery code which enabled me to add it are new in WP 2.8).

View Fancybox Gallery Example…

WordCamp Organization Advice

I’ve already posted about the WordPress 2.8 release, and there will be plenty of other posts highlighting everybody’s favorite new features when it officially drops, so how about if I talk about something a little different? I’ve been listening to a couple of WordPress podcasts recently (WordPress Weekly and WordCast, in particular), and there had been a lot of buzz about some of the WordCamp gatherings taking place in various locations.

In particular, there were a few complaints that were pointed out (and some kudos, as well), and it got me thinking about things that event organizers might want to plan ahead for when getting ready for future WordCamps. Having been a speaker at WordCamp Birmingham last year (and planning to do it again this fall), I’m pleased to say that Andre Natta and his cohorts did an excellent job with that event. Some of that was probably made easier by the fact that it was a relatively small WordCamp (I think it was about 60 attendees). The bigger the group, the harder the logistics.

In addtition to WordCamp, I’ve also attended a couple of other technical gatherings, like CodeCamp and SoCon, so some of  what I’ll speak to are from first-hand experience. That said, what are some of the areas that an organizer should give particular attention to? Here is my completely unsolicited, backseat-driver’s list of event organizer dos and don’ts:

  • WiFi and Bandwidth: Poor internet connectivity is probably one of the most frequent complaints heard at just about any technical conference. Try to do whatever possible to ensure that you have enough bandwidth to handle your group size. If there are special setup/login instructions, make sure you provide that information to every attendee when they check in. It’s frustrating to spend the first couple of sessions trying to figure out how to get online.
  • Streaming: If you can, identify and designate just one or two people ahead of time to handle live video/audio streaming (and perhaps a backup person). Gently remind attendees that if several people are uplinking to ustream simultaneously, it’s going to kill the network connection for everybody. Also, try to reserve good seats for those handling the videography.
  • A/C Power Outlets: Just about everybody there is going to have a laptop, and will need to charge their battery at some point. If it can be arranged, ensure that there are power outlets available. You might want to procure a bunch of extension cords and multi-outlet power strips. If outlets are in short supply, try to encourage people not to “camp” on them for the whole event, and to let others have access. Label your cords so that folks know that they belong to you, and are less likely to wander off with them.
  • Food: Be prepared to offer lunch, coffee, soft drinks, water, and maybe snacks. Try to find a sponsor for the event who can provide these things. At WordCamp Birmingham 2008, Microsoft sponsored lunch, arranging a catered buffet with salad, cole slaw, and BBQ sandwiches from a local restaurant. However, I’ll also suggest that you try to have an option suitable for vegetarians, too (something more substantial than an iceberg lettuce salad).
  • Hashtags: Decide ahead of time what the “official” hashtag for your event should be, make it known, and encourage attendees to use that. Keep it as short as possible while remaining unambiguous. I don’t know how many times I’ve seen somebody on Twitter saying “What’s the hashtag for the Dallas XYZ Conference? Is it #xyzconf, #xyz09, #xyzconf09, #dallasxyz, #xyzdfw09, or what?” Also, remind folks to use the hashtag when uploading photos to Flickr, and while you’re at it, go ahead and set up a Flickr Group for everyone to submit their photos to.
  • Adapters: You are going to have speakers with various types of computers that need to hook into your projection system. Not everybody has a standard 15-pin VGA output — DVI and mini-DVI connectors are also pretty common. Let them know what kind of connector your projector can hook up to, and make sure that they either have an appropriate adapter to bring with them, or that you have one, or that you can transfer their presentation someplace where you can access it. Slideshare is a great resource to be familiar with. Encourage your speakers to upload and test their presentations with Slideshare, if feasible. Also make sure you have a couple of USB jumpdrives handy, for quick, last-minute file transfers.
  • Bigger Is Not Always Better: As I mentioned before, the logistics get more complicated as your group gets bigger. Big groups are great in some ways, but don’t feel obligated to accomodate a huge group if you aren’t sure you can arrange enough resources to handle them. Better to have a smaller, happy crowd, than a large angry mob (c.f., bandwidth, food). In particular, finding a low-cost location to host an event is going to be harder in proportion to the size of your group. But if you can definitely handle a big group, go for it!
  • Diversify Topics: At WordCamp Birmingham last year, we had a couple of speakers who didn’t really discuss WordPress at all. One of them spoke about freelance writing, and another spoke about how her doctor introduced her to “cancer blogging”. I found these talks to be just as engaging as anything else we heard. Also, for technical subjects, try to have topics that cover begining, intermediate, and advanced skill levels. In particular, one of the podcasts mentioned above complained about the lack of intermediate-level talks. Lastly, don’t allow too many “marketing” talks. Nobody wants to sit through what amounts to an hour-long infomercial.
  • Social Time: Make sure you allow some free time for people to socialize and network. Another complaint I heard was about an event where there was a video presentation during the luncheon. The attendees were frustrated that they felt obligated to listen to the presentation, when what they wanted to do was to talk amongst themselves. Also schedule short mid-morning and mid-afternoon breaks, if possible (don’t forget that everybody is drinking water, coffee, and soda).
  • Schwag: Even if everything else about your event is successful, people will probably think it was a little bit lame if you don’t have some sort of schwag (freebie items). For WordCamps, I believe that Automattic helps out with this a little. But don’t forget to hit up your sponsors, too. They should be happy to provide some logoed stickers, t-shirts, “stress balls”, pens, fridge magnets, or whatever. Also see if you can get a few “big ticket” items to raffle off at the end of your event. Books, software, hard drives, desk toys, and such make great raffle items. If one of your presenters has authored a book, hit them up for some autographed copies!
  • Thank Your Sponsors: Make a point to thank your sponsors before, during, and after your event. Point out to the attendees things like, “it’s time to enjoy a great catered buffet lunch from Joe’s Eatery, provided by our generous sponsor, FooCorp!” Or, “remember, our bandwidth is generously provided by Own-U-Net!” (keep in mind that all sponsors are generous).
  • Leverage Your Network: Personally, I would have no idea where to start with organizing an event. But I know people who do. I’d ask them for whatever help and advice I could get. And don’t be afraid to think outside the box. Tech companies aren’t the only ones interested in sponsorships. Try restaurants, bookstores, local business entrepreneurship groups, colleges, radio and television stations, ad agencies, etc. And don’t be afraid to think big: as I mentioned before, WordCamp Birmingham had Microsoft as a sponsor (thanks for the BBQ, guys).
  • Plan Ahead: Don’t let your excitement over setting up an event trick you into committing to a date before you’re ready. I really don’t know a good guideline, but I would think that you probably need at least 3 months lead-time, and 4 would probably be better. I know I’ve seen a couple of events announced, then canceled, and I’m pretty sure that insufficient set-up time was part of the problem. Also, when you get close to nailing down the official date, you might want to see if there are other local or regional events that might conflict with your planned date.

There it is, my armchair-quarterback advice for organizing a conference. Take it with a big chunk of kosher salt, because I’ve never organized anything like this myself. But as a speaker and attendee, I’ve seen conferences that were well run, and some that were… not so well run. Obviously, you want to be in the former category. Out of all of this, you probably need to consider Bandwidth, Power, and Food to be your Holy Trinity. Handle those three things well, and everything else will go more smoothly.

If you’ve organized or attended a WordCamp or other technical conference, what other advice would you give?

What’s the buzz?

WordPress

Here’s a quick post, just to let everybody know that I’m still alive.

During my long silence here, a lot of things have been happening in the WordPress community. First and foremost is the upcoming WordPress 2.8 release. There are several nifty new features in there. The most notable (for me) are probably:

  • Built-in theme browser/installer
  • Drag-n-drop widget management
  • Syntax highlighting when using theme/plugin editor
  • Image cropping in media uploader
  • New theme functions for author metadata
  • New OOP WP_Widget framework for plugin authors
  • More support for custom taxonomies
  • New combined i18n/escaping theme functions
  • Script loading improvements

The first four  are the main “visible” features for this release. Most of the other changes are “under-the-hood” sorts of things, mainly of interest to plugin and theme developers.

In other news, today marks one full month that I’ve been working for MailChimp. I’m still getting a handle on things, but I’m starting to get a few things done, migrating some old back-end management code into the framework used by the bulk of our system.  And to bring things back around to WordPress again, I’ll give you the tantalizing teaser that MailChimp is sponsoring the development of a new WordPress plugin. I don’t want to say too much about what it is at this point, but the Photoshop mockups looked pretty cool.

As I get myself organized again (stop laughing, Susan), I will be posting this blog more. And as if my time wasn’t stretched enough already, I’m also planning to do some guest blogging for The WordPress Doctor.

Where’s Waldo?

Or, more to the point, where’s Dougal?

Sorry about the long silence here. After our son got out of the hospital from his pneumonia, he had four weeks of therapy before he returned to regular school. I had to drive across town to drop him off and pick him up, which ate up around 3 hours of each day when all was said and done. I’ve also tried to devote some time to taking care of some tasks around the house before I start my new job.

MailChimp HeadNew job, you say? Yup. I’m going to be working at MailChimp (go ahead, post all your ‘code monkey’ puns, get it out of your system). MailChimp is a service for managing email newsletter campaigns, with nicely formatted HTML mail templates, and readership analytics. The team there is already doing a lot of nifty stuff, like when they used Amazon Mechanical Turk to help vet a large set of programmatically generated themes and color schemes. I’m looking forward to seeing what I’ll get to work on, both in the main service, and in their “MailChimp Labs” projects.

Drupal LogoI’ve also been dipping my toes into Drupal a little bit lately. My wife, Susan, uses Drupal at her job, and I figured it might be nice to offer her some real ideas every once in a while, instead of just saying, “if you were using WordPress, I could help you figure out how to do that.” And no, they can’t just switch to WordPress, unfortunately 🙂 Drupal does have a steep learning curve (if you really want to do more interesting things with it), but it also has some nifty architectural bits. While much of it still feels alien to me, some of it has more in common with WordPress than I expected. When I feel like I’ve learned enough, I’ll try to write up a WordPress/Drupal comparison (mostly from the developer’s perspective).

Twitual

Recently, I launched a new project called Twitual.

Twitual is a service which lets you compare your Twitter friends and followers lists in interesting ways. You can see which people are ‘mutual’ (you follow them, and they follow you back), which are ‘fans’ (people who follow you, but you don’t follow them), and which are your ‘idols’ (you follow them, but they don’t follow you back).

Currently, I still consider Twitual to be in an alpha-testing state. The basic functionality is there, though I already have a list of new features to add. The overall visual design is still a bit lacking, in part because I’ve been more focused on finding and fixing bugs in the core functionality, and also because I’m a developer, not a designer.

One of the more obvious features I plan to add are progress bars to show the progress as Twitual builds its friends and followers lists. Another idea is to let you enter two Twitter usernames, and compare which followers and friends they have in common. There are plenty of other things I hope to add in the future, but for now I’ll be happy to just find the time to do a few of them.

I have found the evolution of Twitter and the social networking ecosystem that has sprung up around it to be facinating. And I think it’s going to be interesting to see how Twitual ends up fitting into the Twitterverse, and how people will use it. It’s been fun to build so far — the first time in a while that I’ve started a project to “scratch an itch”, and done it in a way that was worth sharing with the community.

If you are a Twitter user, I hope you’ll check out Twitual, and let me know what you think. Make sure you follow @twitual, and visit the Twitual Development Blog for updates and news.