Dynamically provide a default implementation of an instance method from within a Groovy Mixin
Pantheon Raises $5M Series A From Foundry
Pantheon is excited to announce raising $5M in Series A financing, led by the all-stars at Foundry Group. It's a great opportunity to align with a group of like-minded investors to build something truly great.
Foundry shares our vision of a better web — we fit in well with their "glue" investment theme — and with their help we're going to deliver on the potential for Drupal as a catalyst. This investment will help us scale the Pantheon platform, improve our products, and deliver the awesomesauce our users have come to expect to more and more developers and site-owners around the world.
The Pantheon Vision
Right now it's easier for most organizations to post to Facebook and generate real-time customer sentiment analysis from Twitter than it is for them to update their own website. That's crazy, but it's the sad status-quo. Web CMS is stuck in a rut of traditional Software defined by enterprise licences and risky custom applications and has yet to make the leap to Software as a Service (aka SaaS).
The value of the SaaS model is that it clears away or radically simplifies the operational work — set-up, maintenance, deployment, scaling — and lets developers and site-owners focus on what makes them unique: Their core values, their content and their customers. Just like you probably don't want to write your own CMS from scratch, building and maintaining your own hosting infrastructure might not be the best use of your time.
Pantheon's purpose is to deliver Drupal with the power and precision we've come to expect of tools like Facebook, Salesforce and Dropbox. Developers are un-blocked on infrastructure and site-owners get online faster with a lower cost of maintenance. Everybody wins.
Looking ahead we aim to realize the enormous potential of Drupal distributions like Open Public and with systems that supercharge the construction of sites — which is why we're investing time and energy into Panopoly, and with core initiatives for configuration management. The future of Drupal is giving quicker access to better tools to more people to do greater things.
We're well on our way. Pantheon already changes the way developers build with Drupal, eliminating hours of tedious and/or treacherous system administration, removing scalability as a risk-factor, and making the best practice the path of least resistance. If you don't believe us, try it. Pantheon is open, generally available, and always free for developers. Sign up today.
From the Lab: Abbreviations and Lexicon

This month in our weekly Lab Hours sessions, we had several participants seeking the same thing -- How to provide site visitors pop-up definitions for acronyms and abbreviations. Oh, and could we please do this in a way that does not require extra data-entry from our content editors? A seemingly tall order turns out to have a rather straight-forward recipe combining a Drupal module, taxonomy and some obscure HTML tags no one seemed to know existed.
Drupal governance sprint
The Drupal Code of Conduct, heavily borrowed from our friends at Ubuntu, does an excellent job enshrining the characteristics we aim to foster, in order to ensure people "Come for the software, stay for the community". However, there are still some gaps. For example, how to deal with conflict resolution, and how an individual best goes about proposing new governance policies.
Key Drupal contributor Randy Fay has done a tremendous amount of research into governance models of other open source projects, which you can read more about on his blog. For those who have not been following Randy's posts, he and I are holding a sprint about Drupal Governance on July 16 and 17 in Portland, Oregon just after the Community Leadership Summit. Randy, Angela Byron, Greg Dunlap, David Strauss, and myself will be in attendance.
This sprint is a first for Drupal. The goal of this sprint is to come up with a proposal for subsequent community discussion with recommendations around some of the following topics:
- Processes to create and maintain policies, as a general concept
- A process for resolving technical conflicts
- A process for resolving community/interpersonal conflicts
- A process and team for resolving "nuclear" issues that need extremely delicate handling.
If you have other topics you'd like to propose, or would like to provide feedback on these items in advance of the sprint, please chime in in the Governance project issue queue. It is important work to streamline and evolve the governance of our project, so thanks in advance for your contributions.
When is a Standard Bad for a Standards Body?
tl;dr: FIG is a welcomed force in PHP standardization. But I believe their recent two standards have undercut their credibility. By choosing contentious grounds, issuing an arbitrary standard that competes with existing conventions, and doing this in an area that does not actually improve the interoperability of code, they have weakened their position as a standards body. I suggest that they remedy by downgrading PSR-1/2 from "standard" to "recommendation."
In mid-June, the relatively young Framework Interoperability Group (FIG) proposed a pair of new standards called PSR-1 and PSR-2. FIG's ostensible mission is to provide PHP-related standards to bring some level of interoperability between the plethora of PHP frameworks and applications.
But these two standards, and PSR-2 in particular, have in my mind undercut the larger goal of the standards body. That is, releasing these two documents as formal standards harms the credibility of what had looked like a very promising standards body. Here I explain why I think this, and suggest a remedy.
Drupal 7 core release postponed; help still needed resolving release blockers
This Wednesday, June 27, was a possible date for the next bugfix release of Drupal 7 core.
However, as described previously, there are a number of issues categorized as Drupal 7.15 release blockers which need work. Not enough of these have been fixed, so the release is postponed.
The next tentative release date will depend on various factors, but a likely time is late July or early August.
Please help work on the release blockers! There's something for everyone, and my previous post provides more details.
Going forward, fixing these release blockers has to be our main priority for Drupal 7. Currently, the list of "reviewed & tested by the community" issues for Drupal 7 is hovering around 10-15 issues (not counting feature requests, which are subject to issue count thresholds before they can be committed). I'd like to get that number a little lower and will continue to review issues already in that queue as well as new ones (especially major or critical issues) that come in, but in general I do not plan to prioritize getting other issues committed until the release blockers are addressed, since I'll need to spend my "Drupal 7 time" helping those issues move forward.
So, if you want your favorite issue fixed in Drupal 7, helping out with the release blockers is a good way to speed that process up. Thank you!
The Absolute Beginner's Guide to Drush
Drush is a great tool for quickly managing routine tasks with a Drupal installation.
If you are familiar with using shell access and the command line for doing things like copying, moving, backing up, and installing you'll get the hang of Drush right away. You will be able to make directly and quickly make changes to your Drupal sites.
Drush allows you to search the drupal.org site, install Drupal, install modules, enable modules and much more.
This is going to be a simple tutorial for beginners explaining Drush, how to get started with it and an overview of its capabilities.
Precisely Drupal: Setting up Ubuntu 12.04 Precise Pangolin LAMP stack for your Drupal 7 site
Updated 26 June 2012 with additional information.
Progress! A lot has changed in the Ubuntu world. Ubuntu 12.04 LTS, codenamed "Precise Pangolin", is out, incorporating many improvements over previous versions. Some commandline syntax has changed. Packages are newer. And creation of the LAMP stack for your Drupal site (with PHP 5.3 and MySQL 5.5) has never been easier.
There are still a few steps to get everything going, but as you'll see, it's a lot easier than it was with Lucid.
Assumptions
- You already have Ubuntu 12.04 installed on your server. (Download) (Release notes)
- You know your server's IP address.
- You can point your desired (sub-)domain at your server. Nuances of DNS are not covered here.
- You actually want to set up for Drupal. (These instructions may apply for other LAMP-based CMSs.)
- You have a computer with shell (SSH) access to your server, and your account has root or sudo access.
(This post does not cover MAMP, WAMP, DAMP, commandline bootcamp, etc.)
Step by Step

Setting up Ubuntu for Drupal has never been easier
1. Initial Preparation
This part has not changed. To do this, follow steps 1.a. through 1.d. ONLY as outlined in Lucidly Drupal: Setting up Ubuntu 10.4 Lucid LAMP stack for your Drupal site.
NB: Do not proceed beyond step 1.d. Things change after that.
2. Set up Apache
This step includes setting up your VirtualHost configurations. To do this, you need to have Apache2 installed. But now we don't have to do it the old-school way. There's a new apt in town!
apt-get install lamp-server^
This package does just what you'd think: It installs all the LAMP basics: Apache2, MySQL, PHP, and supplementary stuff. It's lovely! Notice the ^ at the end of the line. That's necessary.
NB: If you are not logged in as root or via sudo su -, you will need to prepend most commands in this post with "sudo".
Next restart Apache, again with new command syntax (new since 11.04, that is).
service apache2 restart
Make sure you have the latest updates.
apt-get update apt-get upgrade --show-upgraded
There's more to install, but first let's get back to the basic setup....
3. Configure VirtualHost stuff
There are a few steps here.
Add your IP address to the ports.conf file
NB: In these instructions, your site's domain is represented by "example.com" and your server's IP address is represented by "12.34.56.78". Every time you see them in the examples here, you should replace them with your domain name and server's IP address, respectively.
nano /etc/apache2/ports.conf
Replace "*:80" with your IP address, so it looks like this:
NameVirtualHost 12.34.56.78:80
Set up your server's default configuration
nano /etc/apache2/sites-available/default
Edit as such:
<VirtualHost 12.34.56.78:80>
You will also want to update the DocumentRoot value to where you intend to install your Drupal root.
DocumentRoot /var/www/example.com/html
NB: If you are using Git to deploy your site, you will want to make sure the DocumentRoot value aligns with the path that will result from your Git checkout. For example, if you are installing from a GitHub project titled "foobar" and inside of it you have a folder "html" that contains your Drupal installation, your DocumentRoot value might be /var/www/example.com/foobar/html/.
Configure name-based virtual hosts
Here you want to create a file in /etc/apache2/sites-available/ for each of your sites on the server.
nano /etc/apache2/sites-available/example.com
Adapt the following code:
<VirtualHost 12.34.56.78:80>
ServerAdmin [email protected]
ServerName example1.com
ServerAlias www.example1.com
DocumentRoot /var/www/example1.com/html/
ErrorLog /var/www/example1.com/logs/error.log
CustomLog /var/www/example1.com/logs/access.log combined
</VirtualHost>
Repeat this process for each site you are setting up. Note that separate sites will have different DocumentRoot values, while a Drupal multisite setup will share the same DocumentRoot value.
Create your website folders
First create the folder for your logs. (If you're using Git, the logs path should be outside of your Git repository.)
mkdir -p /var/www/example.com/logs
This command will create your logs folder, and the domain folder containing it.
Now create your website html folder(s). How you do this depends upon how you're going to install your site on the server. If you are using scp or sftp or otherwise copying your Drupal code files directly onto the server, you will want to create the folder to hold them. Remember that your DocumentRoot value you entered above must match where your actual document root ends up being on the server. If you are going to be deploying via Git, you don't need to do that: Git will create it when you git clone the repository onto the server from /var/www/example.com/.
Enable the virtual domain
a2ensite example.com
Do this command for each domain or subdomain you're configuring here.
Reload Apache
service apache2 reload
Assuming that you have configured the DNS for your domain to point to your server's IP address, virtual hosting for your domain should now work. Of course, there's still more server prep to do so you can run Drupal....
4. Install supplementary packages
These provide added functionality required or recommended for Drupal.
GD2
This gives your server image manipulation tools like resizing – necessary for Drupal 7's image module to work.
apt-get install php5-gd
pear
apt-get install php-pear
make
apt-get install make
Now we can install things in other ways than via apt-get.
uploadprogress
uploadprogress provides your Drupal UI the upload progress bar, as opposed to the spinner, when uploading a file.
pecl install uploadprogress
Now add the extension to php.ini (the easy way). This is all one line:
echo "extension = uploadprogress.so" > /etc/php5/apache2/conf.d/uploadprogress.ini
[Edit: I encountered no problem with the above command. uploadprogress is installed fine, according to status reports. However, acervulus reports that the above command has an incorrect path, and that the correct path should be:
echo "extension = uploadprogress.so" > /etc/php5/conf.d/uploadprogress.ini
If the first version doesn't work, you might try this other one. –Laura]
Next step: Reload.
service apache2 reload
Drush
If you don't know what Drush is, you need to stop right here and learn about Drush. Installation on Linux is easy. First, add the drush channel.
pear channel-discover pear.drush.org
Now install Drush.
pear install drush/drush
Test by typing:
drush
You should get a nice big output of available Drush commands. Yay!
Git
There are many great arguments for deploying code to your server via Git. Installing Git is easy:
apt-get install git
(Git methods for handling site deployment are outside of the scope of this post.)
5. Boost server security
There are many things you can do to help enhance your site security. Here are some handy links:
Configure firewall rules
There's a lot of discussion about how best to configure these rules. I found these posts to be fairly helpful:
- http://library.linode.com/securing-your-server#sph_creating-a-firewall
- http://www.thegeekstuff.com/2011/06/iptables-rules-examples/
- http://www.thegeekstuff.com/2011/02/iptables-add-rule/
- [Edit: Ubuntu has a tool available: Uncomplicated Firewall. It's built in to Ubuntu, but disabled by default. https://help.ubuntu.com/community/UFW My thanks to pjcdawkins for the tip! See his linked comment for another tip on
molly-guard.]
Install Fail2Ban
This helps protect your site from hacking attempts.
apt-get install fail2ban
Configure Fail2Ban by entering the following command:
nano /etc/fail2ban/jail.conf
There you can set bantime and maxretry settings.
Once configured, Fail2Ban monitors your log files for failed login attempts. After an IP address has exceeded the maximum number of authentication attempts, it will be blocked at the network level and the event will be logged in /var/log/fail2ban.log.
Secure MySQL
Magic dust that protects your database.
mysql_secure_installation
The default answers to the prompts should be fine.
Secure PHP
More magic dust, this time for PHP.
apt-get install php5-suhosin
Restart Apache2.
service apache2 restart
6. Create your database(s)
Log into MySQL.
mysql -u root -p
The -u defines the mysql user, which in this case is mysql root user, 'root'. You will be prompted for the MySQL root password. When you get a prompt like this:
mysql>
…you're in!
Now create your database. [In this example, the database name is 'foobar', the database user is 'trelayne', and the user password is 'p4ssw0rd'. Change these to the actual database name, database user and passwords you want for your database. Be sure to note these down, because you'll need this info when you set up your Drupal site.]
create database foobar CHARACTER SET utf8 COLLATE utf8_general_ci;
Note the ";" at the end of the line. That is required for MySQL to execute the command.
Define the user and permissions for the database. I'll keep it easy here:
grant all on foobar.* to 'trelayne' identified by 'p4ssw0rd';
Now wrap this up and quit MySQL:
flush privileges; quit
7. Configure PHP
nano /etc/php5/apache2/php.ini
This is a big file. You will need to search through the file to find these value configurations.
You will want to boost the default memory limit value.
memory_limit: 128M
128MB is the default for Precise Pangolin. If you're running a lot of modules, or some heavy processes, you may need to increase this memory_limit value even higher. I have used 256M on heavier production sites.
Other settings you may want to change are upload_max_filesize and post_max_size, as these limit how big of files you can upload via the Drupal user interface. Note that PHP is not great at handling big uploads, so if you're running an active community site, you may not want to raise the upload limits – in fact, you may want to lower them!
Refer to http://drupal.org/requirements for details and nuances on php settings.
Then restart Apache2.
service apache2 restart
For clean URLs:
a2enmod rewrite
And again:
service apache2 restart
That should cover it. You now can pull in your system files, import your database, point your settings.php file to your database, and load your site via web browser.
More info
- My thanks to Tux Tweaks, whose post on this was a great resource during my experiments.
- Another Tux Tweaks post some may find helpful: Installing phpMyAdmin.
- Linode KB on server security.
- Linode KB articles on LAMP setup for numerous distros of Linux.
IANASA
I am not a systems administrator. This post is a distillation of what I have learned in DIY Linux efforts over the years, plus info I found on the web, plus some trial and error with regard to Ubuntu 12.04 in particular. I cannot speak to the accuracy or quality of the advices here, though. I'm sure there are corrections and additions needed for this section of the post. I welcome your input!
Related:
Lucidly Drupal: Setting up Ubuntu 10.4 Lucid LAMP stack for your Drupal site ···
Video: Installing Drush on Mac OS X
tags:
Ubuntu,
Ubuntu 12.04 Precise Pangolin,
Drupal,
Drupal 7,
tips and tricks,
Drush.
Configuration management initiative bi-weekly meeting
Yes its time for another configuration management initiative weekly meeting. Come hear about all our meetings from Drupal Dev Days in Barcelona! The meeting happens at 12:00 PDT, in #drupal-cmi on Freenode.
Adding Entities to ApacheSolr Search
DrupalCamp Oxford: What we learned
We just got back from DrupalCamp Oxford at the weekend, and there were a lot of good sessions. When you consider the ticket price was only £50 and included two 3-course lunches (both of which were way above and beyond the usual "Drupal event" food quality), it was a real bargain, but with so much information to take in, we thought we'd provide a quick summary of the key bits we took away from it.
Module Monday: Custom Permissions

Out of the box, Drupal provides highly granular permissions for administration and user tasks like creating content types, posting comments, viewing user profiles, and much more. With hundreds of discrete permissions to control out of the box, it's hard to believe that there are some things administrators can't control by default. Shocking, though, it's true: quite a few of Drupal's built-in administrative pages fall under the umbrella "Administer Site Configuration" permission. If you're looking for more granular access control, you'll need to write a custom module and cosy up to the hook_menu_alter() function... or download the Custom Permissions module.

As one might expect from its name, Custom Permissions doesn't hard-code an explicit list of permissions when it's enabled. Instead, it provides a settings screen where administrators can enter the paths individual pages (or groups of pages) that they want to limit access to. You can enter the name of the permission, a list of paths (including wildcards if you'd like to control a path and all of its sub-pages), and... that's it! Once you've configured your list of permissions and the paths they control, the permission names appear on the normal Drupal permissions administration page.
Automating Drupal Development: Makefiles, Features and beyond
Features are a well-known and very useful tool to streamline Drupal development and write reusable components. However, if you get serious about automating as much as possible in your Drupal development, you need to add other tools to your daily practices, and master them properly: forget the tedious, error-prone, point-and-click and embrace Code-Driven Development.
Automating Drupal Development, as presented by Nuvole at the Drupal Developer Days Barcelona last week, consists of the following steps:
- Automating code retrieval. Use Drush Make to keep track of modules, patches and Features, and rely on Buildkit as a basic distribution with preselected modules to make your development faster. Use Drush Bake to create makefiles based on templates.
- Automating installation. Customize the installation profile to perform all tasks you need during installation, especially pre-configuring your site with those "soft configuration" settings that the site administrator will be able to modify without overriding your Features.
- Automating site configuration. Use Features properly, to make them truly modular, and install a Features server, where you will host and track your Features.
- Automating tests. Use continuous integration to automatically ensure that your website will continue to work as expected when it is upgraded: test your codebase, installation and site configuration on every code change.
These concepts will be covered in more detail in the Nuvole DrupalCon Munich Training (if you don't see the page, you may need to register to the DrupalCon Munich website).
The full presentation from Barcelona is below, as a Slideshare embed or a PDF file (attached).
Automating Drupal Development: Makefiles, features and beyondView more presentations from Nuvole AttachmentSize Download PDF13.94 MB
Drupal cron failing? Not sure why? here's a handy drush command.
More often than I'd like I see issues where Drupal's cron fails or exceeds the time limit. Here is a handy Drush command which will run all cron hooks on your site and the time it takes to run. This will allow you to see which cron it fails on, and which ones run slowly. From there you can look at the hook_cron for that module and work out why it failed or why it is slow. The most common issue I see is related to search indexing and nodes that have php in with drupal_goto() or similar. Drupal tries to index the node, ends up following the goto, and forgets to continue with cron.
drush php-eval ' global $timers; $hook = 'cron'; $return = array(); foreach (module_implements($hook) as $module) { $function = $module . '_' . $hook; print($function ." - "); timer_start($function); $result = call_user_func_array($function, $args); if (isset($result) && is_array($result)) { $return = array_merge_recursive($return, $result); } else if (isset($result)) { $return[] = $result; } timer_stop($function); print($timers[$function]['time'] ."\r\n"); }'
Drupal.org team week notes #4
The past 2 weeks have been pretty active and we have some awesome developments to share today.
First, a new slideshow has been added to the Case studies section thanks to bmaheshs and Kapil Juneja from Tekriti Software. This section is now fully ready to showcase the best sites built with Drupal. If you have an impressive site to share, follow the guidelines and publish your own case study.
Managing files when moving to multi-site in Drupal 6
One thing I have been doing quite a lot recently on clients sites is merging multiple Drupal 6 installations into a multi-site setup. This is usually quite painless and can be done within an hour or so, the hard bit comes when none of the display, and you realise that all of the paths in the files table are still set to "sites/default/files" when they should be "sites/example.com/files". Well, there is a quick solution to this.
- Connect to the database, the easiest way to do this is using the "drush sqlc" command.
- Run the query "update files set filepath = replace(filepath,'sites/default/files','sites/example.com/files');"
- Reload the site in your browser and marvel at the beautiful images.
It's as easy as that, unless, some of the file paths have been hardcoded into nodes and blocks, but this can be resolved using the same method on the node_revisions and boxes tables.
DrupalDrupal 6filesmulti-siteDrupal Base Theme Review

Lately it seems there has been a lot of activity with Drupal base themes. Old favorites are being overhauled to adapt to changing techniques and standards. New options are popping up as well, looking to solve old problems in new ways.
For those that aren't familiar with base themes, the idea is pretty simple. A base theme takes care of many of the common tasks - page layouts and CSS resets, for example - that are involved in creating a Drupal theme. Theme developers and designers can then create a sub-theme that builds on top of the base theme, thus saving a whole lot of work.
To put this review together, I set up a test site on my local machine and installed a sub-theme for each of the seven base themes I decided to include. I didn't tweak any settings or add styles. However, I did add a bit of dummy content using the Devel module to provide a better look at the styles that had been included in the theme by default. I then took two screenshots for each base theme, the settings page and the default front page, so you could get an idea of what you have to work with after installation.
I hope to update this resource from time to time, so if you know of a base theme or an important point regarding one of these themes that I've left out, please leave me a note in the comments.
OK, let's get started by taking a look at the table below which compares the seven themes in this review on a few key features.
Theme HTML5 Responsive Sass/Compass Zen Yes Yes Yes AdaptiveTheme Yes Yes Yes Omega Yes Yes No Fusion Yes Depends No Genesis No No No Arctica Yes Yes No TB Nucleus No No No ZenAs far as base themes go, Zen is the Big Kahuna. It is downloaded more than any other theme and is very well supported and very well documented. Some of the things that Zen provides are:
- HTML5 markup
- HTML shiv/Modernizr (browser capability detection)
- Responsive design
- Sass
- Zen Grids
- Normalize CSS (a CSS reset)
- Respond.js (helps with responsive layouts)
- IE conditional classes
And of course, there's a lot more. As a bit of an aside, does this list make anybody else's head hurt? There is so much going on with web design right now it can be tough to keep up with.
It seems most Drupal base themes have responsive design included and I think the next big area of emphasis is likely to be Sass, and as you'll note from the list above, Zen has you covered. Let's take a look at the screenshot below to see the theme settings for a Zen sub-theme.

You'll notice that the theme settings are pretty much standard, although there are a few options at the bottom of the page that aren't visible in this image that deal with responsive settings and rebuilding of the theme cache. What this tells you is that Zen is a base theme aimed at developers. There aren't any nifty theme settings or layout tools available, so you'll have to do that stuff in code.
For some of you, that's absolutely perfect. But some designers and do-it-yourself types may want to look at some of the base themes that provide more theme configuration options in the browser.

Above is a screenshot of a default front page using a Zen sub-theme. You can see that minimal styling has been applied, although the main menu is included and the links for that menu are displayed inline, but that's pretty much it. But for those of you that have built a theme from scratch, you'll see a lot of geat stuff here that will save you loads of time.
AdaptiveThemeAnother of the most popular base themes is AdaptiveTheme by Jeff Burnz, a guy who has made huge contributions to the Drupal community. One of the things that really sets his themes apart is a strong focus on accessibility. Now, I know we're all trying to pay attention to such things, but Jeff takes it quite seriously. That makes AdaptiveTheme a very attractive option for government and non-profit sites that need to validate for more stringent accessibility standards.
AdaptiveTheme includes:
- HTML5
- Responsive design
- Pluggable layout system
- Sass
- WCAG 2.0 level AA compliance - "110% committed to accessibility"
- Backwards compatibility with older browsers
- SEO optimized
And if you choose to add the extensions you'll get...
- Fonts - web safe fonts, Google fonts, custom fonts and integration with @font-your-face
- Title and heading styles
- Mobile friendly meta tags
- Apple touch icons
- Image field alignment and image captions
- Breadcrumb settings.
- Mobile regions - unset any region or move a regions blocks to another region when in mobile browsers
- Unset CSS
- Custom CSS input - for those minor overrides, no need to build a sub-theme, just enter some CSS in the text box provided.
And there's more, of course, but you get the idea. AdaptiveTheme is loaded. Let's take a look at the theme settings page:

Here we see something quite different from what Zen has to offer on the theme settings. The first thing we notice is the ability to configure page layouts in the browser. Pretty nice. You'll also notice that these layouts can be configured for tablet and mobile devices as well.
I've read discussion threads that talk about the pros and cons of having a GUI for these sorts of things and I know there are some hardcore coders out there that feel it's just bloat. I personally love it because it usually ends up being a great time saver and is particularly helpful to those who aren't as comfortable coding. This latter point can end up empowering your clients and reduce those support emails. That's a win-win in my book.

The default front page is more or less the same as Zen, although the site name is handled a bit differently and the navigation menu has been moved under the main menu. When we look at the next theme, however, you'll see why I'm including screenshots of the default front page layout.
OmegaFor those of you that have been following me for a while, you'll know I'm a big fan of Omega theme. It was one of the first responsive HTML5 base themes and this helped it gain traction against some of the more established competitors. Omega includes:
- Responsive grid layouts based on 960.gs standards.
- 12, 16, 24 column layouts built in.
- Performance enhancements making Omega the best performing base theme to date.
- HTML5 and XHTML starter kits.
- Content first layouts with push/pull classes.
- Quickly disable groups of and individual regions and zones.
- Every region/zone size and placement configurable.
- Apply custom CSS classes to any region/zone.
- Enable/Disable CSS from both Omega, Drupal core and contributed modules.
- Create contextual layouts with the Delta module.
The above list comes from Jake Strawn, the author of Omega theme, but I'd like to note that the last point about contextual layouts is the subject of my next blog post. It's a killer add-on feature that can eliminate the need for Panels and makes Omega templating very easy and very fast. Let's take a look at the settings page:

There is a lot going on here, most of it having to do with layouts and toggling stylesheets. Again, I'll emphasize that the zone and region configuration options that you'll find here are very easy to configure and have saved me lots of time on projects.
The Omega project page also notes that some big sites - including Acquia - have jumped on the Omega bandwagon. Here's a few of the more notable:
- Maxim Magazine - maxim.com
- Fox News Magazine
- Drupal Commerce
- Georgia.gov
- Acquia - acquia.com
- Mac|Life - maclife.com
- MaximumPC - maximumpc.com
- GuitarWorld - guitarworld.com
I'm working on a redesign of this site using Omega theme, as well, that will hopefully roll out around September 1. Now let's take a look at the default front page for an Omega sub-theme:

This is really why I included screenshots of the default front pages for the base themes. Omega includes both a grid and a block overlay to help you configure layouts. Changing the width of the various blocks and regions is as simple as a few mouse clicks. This is an awesome feature that makes adjusting layouts really easy and intuitive.
If you're interested in setting up your own Omega base theme, I wrote a post that walks you through the process. My bottom line on Omega is that, all things considered, it's the best base theme available.
FusionTo be honest, I've always had a bit of resistance to using Fusion. This is entirely down to its dependence on the Skinr module. Yes, I know, Skinr and its replacement Fusion Accelerator are really useful and cool, but investing in a theme with a module dependency can be a tricky thing, as any who used Fusion and wanted to upgrade to Drupal 7 found out. It ended up being quite a wait.
Here's a look at the settings page for Fusion:

We see some nice configuration options, including the ability to tweak fonts on the 'Typography' tab. But now we get to the question of whether Fusion is a responsive base theme. You may not be able to read it very well in the image, but there is a note right above the settings that says, "Pro tip: Download and enable the Fusion Accelerator module to support responsive layouts."
So whether you call Fusion responsive or not depends on how you want to define things, but I don't care for this approach. On the other hand, Acquia Marina, one of the most popular free themes of all time is built on Fusion. If the module dependency doesn't bother you, Fusion really does have some great things to offer.

Pretty much the typical default front page, except you'll note the main menu isn't displayed.
GenesisThe Genesis theme is also by Jeff Burnz. I'm not that familiar with Genesis, but the primary differences between it and AdaptiveTheme seem to be that Genesis is more stripped down and doesn't support responsive layouts. The features of Genesis include:
- Standards compliant
- Modular CSS
- Flexible layout options
- Built in support for theming site sections
- Gpanels - multi-column, fluid grid micro-panels
- Content source ordered for SEO
- No complex logic in templates
- Advanced dynamic CSS classes
- Conditional Styles module included
Again, you'll notice that one thing that really sets Jeff Burnz' themes apart is a strong focus on accessibility. If you're a government or non-profit that has to pay special attention to compliance with WCAG AA, Genesis is another good option to check out.
Let's take a look at the settings page:

Nothing to see here folks. It's the default theme settings which tells you the theme configuration is going to be done in code. That's not a bad thing, but if you're not comfortable working with theme code, AdaptiveTheme may be a better choice for you.

The default front page looks similar to most of the other base themes we've seen except that a bit of extra styling has been given to the menus.
ArcticaThe Arctica base theme is from SooperThemes and it provides a nice responsive option that can be extended by using the Tundra base theme extender. You'll notice from the screenshot it also comes with some nice layout configuration options.

When you add Tundra into the mix, you get some jQuery goodies, including a font kit and slideshow support, which can be a big time saver. This makes a lot of sense considering SooperThemes sells premium themes and these type of features are very helpful in that market, if not required.

Arctica has the least default styling applied of any of the themes in this review. I know there are a lot of people that this suits just fine, but it does add a bit of extra work.
All in all, Arctica is a good choice, though at this time there are a couple small drawbacks. The first quibble I have is that the author, Jurriaan Roelofs, who I think is top notch, by the way, has branded Arctica with the SooperThemes logo. The problem I think this presents is that it likely hurts adoption of a pretty kick ass base theme. Think about it, if you're a consultant looking for a theme to work from, would you want to select one that has another company's logo on it?
The second issue is that it is very light on documentation, more so than the other themes listed here. If you're experienced with Drupal themes, this won't present much of a problem, but it might be an issue for newbies. I'm very sympathetic with how tough it can be to keep side projects going, believe me. It has taken me forever to finish the redesign of this site, so I don't mean this as a criticism so much as a heads up. But that said, Arctica plus Tundra can save you loads of time and is definitely worth checking out.
TB NucleusThe final base theme we're going to look at is TB Nucleus. I haven't spent a lot of time with this base theme, either, but it has some nice features which include:
- Flexible and visual layout settings
- Control display of grid system
- Assign blocks with drag & drop to a region in the layout setting (requires jQuery Update)
- Typography options using default fonts, Google web fonts or custom fonts
- Support multiple colours with multi-skins
- Advanced block styling
- Supporting custom styles for SuperFish and QuickTabs
- Installation profile

Above we see the settings page and we notice something a bit different. TB Nucleus includes a drop and drag interface for creating layouts (you'll need the jQuery Update module for this to work). This is a pretty nice feature and is an example of why I think this base theme deserves some attention. It has a lot of potential in the the do-it-yourself market, which makes sense as ThemeBrain is a premium theme provider.

There are two things that make me hesitant to recommend TB Nucleus, however. The first is that it isn't a responsive theme, which for me is a deal breaker. The second is that it doesn't use HTML5. The good news is that the guys at ThemeBrain are hard at work addressing these issues, so this is definitely a theme to keep an eye on because it is loaded with a ton of nice features.
And Finally...Choosing a base theme is mostly a matter of preference. All of the themes listed here have a lot to offer and save designers a great deal of time when building sites. As I mentioned, I love Omega and have used it on many projects and can wholeheartedly recommend it. If I had to pick a runner up, I would have a tough choice in front of me. Depending on the client, Zen or AdaptiveTheme would probably win out, but I would also consider going with Arctica.
Again, if you have any suggestions or corrections, please feel free to leave them in the comments below. I'll try to do an update to this post in a few months and put all the suggestions in at that time. I've written a related post on responsive Drupal themes that you may like as well, particularly if you're not quite sure what all the fuss is about.
About the author
John Hannah owns Redpoint Web Marketing, a Tucson web design firm that helps small businesses and non-profits design and market their websites, something he's been happily working at for over ten years.
Why I recommend Drupal User's Guide all the time
Here is my workspace these days:

And if I had just been delivered a site, or were setting out to roll my own with Drupal that little book there is just what I would have by my side:

Drupal User's Guide - Building and Administering a Successful Drupal-powered web site. By Emma Jane Hogbin.
Why do I recommend it to clients all the time? Because it totally lives up to what it says in the dedication page:
"For my mother, Maryann, who asked for the manual to her Web site."
That's just what it is, the manual to your website. It tells you how to install Drupal, it is a permanent guided tour of Drupal's administration interface, it teaches you that yes, you can build your own site based on (Specific, Measurable, Attainable, Realistic, Timely) site goals. It shows you where to find your stuff, how to choose and enable different Drupal themes, how to build functionality like community site features, discussion areas, even a whole business directory. It is there when you need to add a form, take advantage of the Views module to list your stuff in many different ways, extend the functionality of your site with modules. And it is there when you need to do SEO work on your site, and even learn advanced techniques to improve the usability experience for site visitors.
I always recommend this book if any of the following apply:
- If you're just starting out building your website in Drupal
- You're not just starting out but you need that extra push
- If you've just been delivered a site by a Drupal site builder and you want to take charge
- If you need one great reference book to have on your desk as you work on your site
What to do when the maintainer has gone away?
Tags:
Drupal is an awesome open source system, and the community around Drupal is great. There is a lot of very useful contrib modules. I have supplied several issues and some small patches to several projects, and most maintainers swiftly responds.
Other projects the maintainers are very busy, and that is quite understandable. However, for me to keep being interested in trying to help to improve some module, it is important that one is able to see some headway in a project. You actually want to see some of your improvements and bug fixes committed - which makes it easier to move on to the next improvement without your patches going stale.
Consider these examples:
- parser_ical. I filed a bug and provided a patch in January. I tried contacting the maintainers to get the patch included, but received no response. The module still stands as unsupported in the D7-version. I would like to help change that, but when the maintainers does not reply, it is difficult.
- media_gallery. We are a couple of people who has been trying to do a lot of the dirty work in the issue queue for media gallery. We have been closing issues, fixing small bugs, providing patches, trying to find a way to make it work with the 2.x-branch of media. But still there has been no response from any of the current maintainers. I tried through the issue tracker, IRC and through the contact form on d.o.
Both projects are really good and created by skilled people. And off course skilled people get busy, and do not have the time for exactly that project right now.
But how can the community solve this? It is very likely that people will just cease to provide bugfixes and help maintain an issue queue, if they can see no progress from their work.
