Apr 04 2008
Apr 04

Kieran just posted a great write-up on How to test 20 000 Drupal 7 core patches followed by Jimmy Berry's posting Paris Coding Sprint - Unit Testing. It summarizes many of the challenges Drupal is facing to be able to provide 100% testing coverage for Drupal core in addition to outlining the details of code sprint in Paris to help gather key developers to provide solutions.

During the code sprint, it is my goal to work closely with Rok Žlender to provide a mechanism for complete automated testing of HEAD in addition to a full reporting of the results in such a way that problems can be addressed and resolved. The issue queue at http://drupal.org/project/issues/Drupaltestbed will be cleaned up with specific resolutions being provided for issue http://drupal.org/node/239542, http://drupal.org/node/239546 and http://drupal.org/node/190987. Awareness of the Unit Testing Plan will need to be implemented into the Automated Testing as well.

Funding for this trip is generously being provided by pingVision, LLC

Apr 04 2008
Apr 04

I'm pretty critical about code quality, be it for my own projects or those of others, and have become known as giving harsh code reviews for the Drupal community. Hearing "ask Morbus, but be prepared to cry" pleases me, and I have little impetus to stop doing things I enjoy, regardless of what people think. Recently, someone suggested the reason my reviews seem "assholish" is because I state "you" a lot. I agree with this, I think, and have made an attempt to lessen my usage, though not my anality.

I define code quality via a number of different hard-to-describe metrics. In the case of Drupal, following the code style guidelines is certainly key, but also following Drupal core patterns as well - doing things "like core" is pretty high up there. This could be as simple as using the same documentation string for Drupal hooks, using the same pattern for the null option of a select box, et cetera. Using coder.module (a Drupal lint) to correct 90% of your mistakes should be required and, sometime in the future, tests from something like SimpleTest should be too.

I also think that, if you're going to "take over" a module, or otherwise release one, it should make an attempt at meeting the highest level of code quality. One could argue that "release early, release often" dissuades us from this, but I disagree: there's a difference between "doing it right" and "continuing to suck". I have no problem with weekly releases if you make an attempt to maintain or improve code quality. Hearing "A lot of strings have been lingering in incorrect forms ... as I try to prevent translations from breaking" isn't a legitimate excuse: Drupal core doesn't care about backwards compatibility, and it highlights your own inability to spell-, grammar-, or read-aloud check your strings (while also calling into question the quality of translators who have converted your broken documentation without complaint). I didn't release "my" version of Case Tracker until I considered it of high quality, and I made sure to provide explanation for what I was doing.

Since I've stopped working on Case Tracker, the CHANGELOG.txt hasn't been updated but, more importantly, it hasn't been removed either. This is just the first of a dozen "heading back to crap" problems that Case Tracker is suffering under, as I watch the new maintainer commit style error after style error. I don't give two shits if you're a certain type of programmer, or if you've coded this way "for years": if you're committing a Drupal contribution, you should follow the goals and styles of the parent project. Anything else is utter failure. If you don't want to, get the hell out of contrib, because it's already a sodding mess and you'll only make it worse. Requiring developers to read even the most basic of code practice books should be a guideline for access into any repository. "What is the name of the checklist on page 579 of Code Complete First Edition?", and other "you must have the book" tests, would be awesome.

This lack of quality control is the same reason Steven Wittens (UnConeD) left. He and I have gotten into a number of arguments, certainly, and he coined "The Morbus Effect" but, ideally, we're after the same thing: the best the code can offer, and an attention to research, detail, and testing that is, at times, incredibly boring.

Which all leads us into the blanket response to any criticism of code: "Where's the patch?". The overuse of the "code is golden, talk is not" ideology is as frustrating as anything else. I have no problem with contributing patches to Drupal modules which have made an attempt at code quality. There's a difference in "your code is good, but this needs fixing" vs. "holy crap, everything about this module is wrong". If you make an attempt to write good code, I'll put forth the effort to make it even better. If you don't, then I'm not going to waste my time improving your code: it just needs to start over. Make a new file and port things carefully, rewriting and organizing them properly. Or, do it in the same file and separate the good stuff from the bad by gigantic swathes of whitespace. Until you make the effort to show you care about your code and the parent project it belongs to, I'm not going to either.

Quality is one of the prime reasons I wrote an (unreleased) Achievements module as opposed to installing User Points. Ignoring the different approaches of "achievements" vs. "accumulate[d] points" (which I'll probably touch on in a later post), the 2.0 version of User Points failed at nearly everything. Besides showing, to me, a lack of quality, it actually didn't work properly, further exasperated because it shipped with a number of modules that were never maintained. I sent an email or two stating my dislike, and marveled privately about how so much crap could make it into a "2.0" release, especially one that was proudly presented and ballyhooed at various Drupal conventions. This is why I don't mind complaining about it publicly - it positions itself as something great, but I've yet to see any indication of that. I don't think I'd be as aggressive if it were a new module or developer innocently asking for help - there's no marketing, ego, or pride to provoke my ire.

Inevitably, I got into a chat about it on IRC, and that ever-nefarious "patch?" lament appeared. To me, User Points 2.0 was an example of wrong from the ground up, with duplicate data in the database, a UI that didn't work (functionally or architecturally), shipped modules that no developer cared about anymore, and crazy code patterns that drove me up a wall. The same conversation promised a new developer had taken up the reins of 3.0 with lots of rewrites, and I should check it out. Hating duplicate functionality and the whole "Not Invented Here" problem that often plagues plugin-driven development, I told myself that I would.

I'm embarking on such a journey now, as I find a need for my Achievements module once again. And, still, as I look at the very first lines of User Points 3.0, I find myself clucking disapprovingly. I don't see much improvement but, certainly, it requires more effort to truly make the decision (to their credit, they did remove all the unmaintained contributed modules). For what it's worth, my first 15 minutes of discontent equate to:

  • Abuse of constants: User Points defines its permissions and other strings inside constants. This isn't only wrong (Drupal core doesn't do such a thing) but serves no discernible purpose besides being an additional layer of abstraction - perhaps the developer's IDE supports constant completion? If you're not manually and anally testing every line of code (which would root out misspellings or typos, one of a few rationales for code completion in an IDE), then your module isn't up to par. Gladly, SimpleTest integration in the future will indicate more obvious dedication to testing and non-laziness but, of course, that presumes properly written and maintained tests, which is probably too much to ask and could lull one into a false sense of complacency.
  • String retardation: Administration permissions in Drupal core are always in the form of "administer something", but User Points happily uses "admin userpoints". It also doesn't know what the hell it's called: the module's page has "User Points", but usage within the code indicate it could be "Userpoints" or "userpoints" and that it could integrate with "e-commerce" or "ecommerce". These are all things I consider easy and obvious indications of quality control - most module interaction is only ever to an end-user, and if you can't perfect the most visible output of your effort, then the actual code isn't getting any love either.

At a 15 minute glance, if someone yelled out "patch?", I'd decline. This is a module that is showing the same problems I lamented privately about for 2.0, and just needs to spend an entire release cycle worrying about quality not functionality. With that said, note that this is, literally, 15 minutes of glancing at the source. I've yet to actually install the new 3.0 and there's still a good chance I'll find it usable enough to merge with my achievements code. "Not Invented Here" syndrome is a sign of laziness too but, as jsled remarked after reading an early draft of this entry, "at some point, learning how to use a tool is more costly than just writing a special-purpose tool".

One suggestion for improving module visibility in Drupal is to offer module ratings. I wouldn't support this idea unless there were two distinct metrics: the end-user metric (does this module do what I want it to do?) and the developer metric (does this module's code live up to the code we ship in Drupal core?). To me, a module's quality equates to a combination of both, and any rating system that attempts to merge the two, or leaves one out, isn't adequately asserting overall health.

Apr 02 2008
Apr 02

ImageMagick support has been a release blocker on this module for me. My attempts at using the Imagick extension failed, and I finally broke down and wrote the imageapi_imagemagick module, and it needs testing.

If you have a working imagecache 2.x installation or use imagecache 1.x with imagemagick I would appreciate some testing. I suggest using imagecache HEAD with the imageAPI 1.0 RC 2.

Once I get stable 2.x releases of my image* modules out the door I can start on 6.x ports.

Apr 01 2008
Apr 01

What is GeoLocation module?
For OSCMS, over a year ago, I wrote a module called geolocation as an example CCK field. It has languished in CVS for quite a while, I finally set up a project for it today, and I'm looking for a co-maintainer.

Why do you need help?
I don't have time right now. I'm in the midst of major upgrades on the image* modules I maintain, doing new development on filefield and other media related modules, trying to keep up with my day job, and preparing to do 6.x ports of the modules I maintain.

Ok, so what do you need?
I need someone who would like to run with the module and implement a few necessary features for it. I want to stay involved because I want to play with different proximity searching techniques and would like a free hand to do it.
This would be a great role for an aspiring developer who already has some basic CCK and Views skills and wants a chance to expand them, and work on a module with a lot of potential.

What is the condition of GeoLocation?
GeoLocation is currently functional as a field module and works with Drupal 5.x. It has a basic text widget as well as yahoo maps integration that hasn't been tested since OSCMS. (I did yahoo maps since we were on their turf.)

What does GeoLocation need?

  • Improve the views integrations by adding filters for longitude, latitude, and proximity.
  • Google Maps input widget
  • Gmap Module integration

If you're interested please contact me @ http://drupal.org/user/22202 and I will be happy to discuss in further detail what I'm looking for in a co-maintainer and the direction of the module.

Mar 31 2008
Mar 31

I had a great time at DrupalCampNYC....

I stuck myself in the Hack Shack, where I should probably keep myself as jaded as I've been lately. Ate me some tasty Bagels and got to help a few folks out... I even gave a presentation on workflow in Drupal 5 (Yes I occasionally show for my sessions.).

I think the best part was actually getting to work first hand with a difficult imagecache permissions issue Nat Meysenburg from OpenFlows was having... There are a slew of things that can go wrong working with imagecache... Apache's Rewrite Rules, Permissions, Drupal Files Config, corrupt images, lock files.... I always have a difficult time divining what problems people are having from my issue queue... It always ends up being a long round of question and answer before I figure out an issue if I ever do...

In my on going frustration with supporting imagecache. I added a few permissions fixes to get a 1.4(borked) and 1.5 out. I started thinking ImageCache 1.x is *really* crufty compared to 2.x. It's just a little bit cleaner than the proof of concept it originally started as. So I've taken the last two days to back port the Header responses from 2.x, add a lot more watchdog calls, fix up the lock file handling, and remove some of the stuff that I look at now and go, "what was I thinking?".

After releasing a broken 1.4, I'm a little gun shy about rolling 1.6 right now from 1.x-dev. I would love some brave souls to check out the DRUPAL-5 branch or wait till tomorrow and test out the snapshot As soon as I get 3-4 not brokens I'll go about a release...


Mar 31 2008
Mar 31

three weeks ago, zicasso.com launched a drupal-powered free personalized online travel service that aims to connect travelers to a global network of quality, pre-screened travel companies. unlike many internet travel sites which provide cheap fares or packages, zicasso is targeted for busy, discerning travelers who want to plan and book complex trips (the ones with multiple destination stops or activities).

zicasso was favorably reviewed in popular web publications including; pc magazine, techcrunch, ars technica and the san jose business journal.

zicasso chose to build their application using the open-source cms system, drupal to leverage the wide array of web2.0 functionality provided by the open source community.

the application was rapidly constructed by a small development team led by cailin nelson and jenny dickinson. the team took advantage of "core" drupal modules including cck, panels, views, imagecache, workflow and actions.

using drupal, the team leveraged existing frameworks for much of the development including user authentication and management, workflow, security, administration, content management, blogging, tagging, text indexing and searching, sophisticated form flows, access control, search engine integration and optimization and image manipulation and management.

initial load testing demonstrated high application scalability, even with a fairly simple production deployment architecture.

Mar 30 2008
Mar 30

I don't like to advertise, but this might save someone $1000 USD:

If you've been thinking about coming to New Zealand from the US, now is the time to get tickets. Qantas has specials that have cut flight prices by about 50%.

$900-$1000 USD from West Coast USA to AKL, WTN, CHC or Queenstown.
Around $1300 USD from East Coast to AKL, WTN, CHC or Queenstown.

If you're thinking about going to Drupalcon Sydney in May, it may be cheaper to fly via NZ with those specials. Flights from NZ to Sydney start at around $350 USD. It certainly wouldn't be much more expensive.

Unfortunately they don't have equivalent specials from NZ to the US.

[update] this was mis-titled "Cheap Flights to DrupalAPC via Sydney". Corrected to "Cheap Flights to DrupalAPC via NZ". Thanks lyricnz for the notice

Mar 30 2008
Mar 30

As you can see by the last two posts I have been experimenting with the Flickr BlogAPI. It isn't going very well because Flickr doesn't seem to like Drupal.

Read the full post on Millwood Online

Mar 29 2008
Mar 29

Requirements: basic css, image editing, basic theming

The fivestar module provides a tidy little voting widget that allows users to vote on nodes. It also provides a CCK field of the type "Fivestar Rating", which can be used to rate a node on multiple criteria.

One of my pet projects, Hill Bomb, requires just this functionality. It's a maps-mashup site for downhill riders, for example skateboarders or mountain bikers, to upload details and maps of awesome hills around the world. Here are the some of the ratings that users can give to hills:


As one of my friendly beta testers pointed out to me, it's difficult to judge what "more flames" means in each individual context. For example, does having more flames mean a better road surface, or more danger to the rider?

It would be better to have different image sets for each rating that clearly indicates what more and less actually means. Fivestar module doesn't provide this functionality out of the box - you can only choose one set of icons for all your Fivestar fields. So, I had to do a bit of modification to get it working.

Here's a tutorial with the examples from Hill Bomb. I only add one different image set here, but it can easily be extended for multiple.

Step 1: The images

Create the icon sets for each field. I chose small cars for the traffic fields. It's hopefully obvious that more cars = more traffic!


Making this image was easy in the fantastic open-source image manipulation program Paint.NET. It's just a matter of finding a cool icon, extending it's canvas to be 3 times it's original height, then duplicating it twice, and finally editing each one as preferred. The top image is the deactivated state, the second is the activated state, and the third is the roll-over state. Here I just left the roll-over to be identical to the activated state.

I also made this two-state "delete vote" image, the bottom one being the roll-over.


Step 2: The custom widget

Next, go to sites/all/modules/fivestar/widgets, where you'll find a directory for each available widget set. Create a new directory that will contain your new image set. In this case, I called it "hillbomb", after the site.

Now copy the contents of another widget directory, that will act as the base or fallback icons. These will be displayed by default, except where you specify your new icon set to be shown. I chose the flames icons, and copied over the three files (two sprite images and a .css). I renamed the .css from flames.css to the name of the folder, hillbomb.css.

Also copy in your new images that were made in step 1.

Step 3: The images in the css

Edit the css file in your new widget directory (in my example, hillbomb.css). Select everything, and copy-paste a duplicate of it at the end of the file. The original section should be left alone - this will ensure that the base icons (the flames) still work everywhere.

In this duplicated css, you need to change all references to the image flames.png to your new image, then do the same for the "delete vote" image (delete.png).

background: url(flame.png) no-repeat 0 0;
background: url(cars.png) no-repeat 0 0;

Now change all height/width values in the duplicated css to match your new images. It's easy to work out - where the original css file has the width/height of a single sprite from the old image, then use the width/height from the new. If it has double the old image's height, then enter double the new image's height.

Step 4: Specify which CCK Fivestar field has our custom images

In order to make our new image sets display only on certain CCK fields, we need to make sure the scope of the css selector is correct. In my example case, I just add div.field-field-day-traffic before each of the static view selectors, because that's the class given to the div surrounding the field:

/*Override the traffic fields */
/* Static View-only Star Version - TRAFFIC (CARS)*/
div.field-field-day-traffic div.fivestar-widget-static .star {
  width: 20px;
  height: 20px;
  background: url(cars.png) no-repeat 0 0;

Note this will only work for the static view (i.e. when a fivestar field is displayed in the node's body), not for the node edit form. We get to that shortly.

Step 5: Give it a quick test

You should now be able to choose your new widget in your Fivestar settings, located at admin/settings/fivestar.

Test to make sure it works - make sure you try it out on a node with a Fivestar CCK field of the same name you specified in the css of Step 4. View the body of the node (static view of the Fivestar rating), and the node edit form (Javascript view).

Of course, the Javascript view of the widget will still display the flames instead of the cars, and also presents a small problem. If you use Firebug to inspect the HTML of the widgets, you'll notice there's no way to discern which CCK field each one belongs to, and thus no way to select just that field for our new images. In my example, there's no way of telling just the Javascript traffic field to display the cars instead of flames - it's all or nothing. Each one is just a <div class="fivestar-form-item fivestar-labels-hover">.

Step 6: Override the theme function for Javascript Fivestar

The simplest solution I found was to override the theme function, enclosing the widget in a div with a more descriptive class. This goes in template.php:

* Customise the fivestar element, add another div so we know which icons to draw
function phptemplate_fivestar($element) {
// Add necessary css.
fivestar_add_css();  // Add necessary Javascript.
if ($element['#widget'] == 'stars' ) {
'<div class="fivestar-' . $element['#parents'][0] . '">' . theme('form_element', $element, $element['#children']) . '</div>';

The only difference from the original function is that instead of returning just theme('form_element', $element, $element['#children']), I enclose it in a div with the name of the field as a class. The name of the field is pulled from $element['#parents'][0]. The result of this for the traffic field will be:

<div class="fivestar-field_day_traffic">...widget...</div>

It's definitely not the most elegant solution, but unfortunately the Fivestar source code is a bit quirky. It doesn't really provide an opportunity to theme the widget's individual bits, as the work gets done in the function fivestar_expand(). I will provide a patch for the function, but until that gets committed, the easiest method is to use the above theme override.

Step 7: Add specific selectors into the css for the Javascript images

Back at the css file, you can now go to the section for the Javascript images, and using the new enclosing

, specify the field that will use the new images. My field was called field_day_traffic, so here's an example of the modifications:

div.fivestar-field_day_traffic div.fivestar-widget .cancel,
div.fivestar-field_day_traffic div.fivestar-widget .star {
  width: 20px;
  height: 20px;

And that should do it! Refresh the browser on the node edit page, and you'll see your new images used for the Javascript widget.

Here's screenshot of Hill Bomb's images. I use little road rollers for the road quality rating, as well as the cars and flames:


There has been a suggestion that Fivestar be modified to allow this functionality to be set easily for each field, however it was marked as "won't fix" by the maintainers, for fairly sound reasons I think.

You could also argue that the custom CSS and images should be in the theme folder rather than the widget's folder, but I'll leave that issue alone. Just don't forget about the custom widget when you upgrade the Fivestar module... ;)

Mar 28 2008
Mar 28

Just finished upgrading this site. The upgrade went well on my test server and fortunately it also went well here. There was some odd issue with phpMyAdmin's backup though. Everything is UTF-8, nevertheless the dump started with the following line:


Swedish? Well, "latin1" was already totally off, but that? Uhm.

Well, it was good for a laugh. Fortunately the dump itself was still UTF-8 encoded and everything was fine - after getting rid of that really weird line, that is.

Did you ever wonder what my first post was all about? Well, by now you might have guessed it. It's a quick method to check the encoding after a rollback. If you don't have a specific test page, you may not notice that something went wrong. If you're unlucky, you'll notice it weeks or even months later and there will be lots of new content. With a different encoding, that is. Once the encodings are mixed all over the place it gets really nasty. So, do yourself a favor and check the encoding right after a rollback.

Oh and there is a small glitch over in Drupal's HTML Corrector. It breaks HTML comments (it escapes the '<' character of the start tag). The description of the Full HTML input format doesn't mention the HTML Corrector though. Well, I only needed HTML comments for that Adsense block. So, switching to the PHP code input format over there wasn't much of an issue.

I also ported SHJSFilter over beforehand. It was surprisingly pain-free. If nothing pops up, I'll release the new version tomorrow. I'm not really sure if there are actually any other sites which use it though.

Mar 28 2008
Mar 28

Tonight's the Vancouver League of Drupalers monthly meetup. If you haven't already heard, drop by the office at Raincity Studios for some free Drupal lovin'.
Start: 2008-03-27 18:30 Canada/Pacific
Join us at 6:30pm on Thursday March 27, 2008 at Raincity Studios for the Vancouver League of Drupalers March meeting. This month's feature presentation: Making Diamond Sparkle - Forums & The Business Objects Community Site with Tony Chang from Business Objects and Angus Pratt from Pratt Web Services.
We'll also have a mini-case study on the SurDel Girls Soccer website by Andrew Tuline and, as always, general Q&A on any and all things Drupal.
Date: Thursday March 27th, 6:30pm
Location: Raincity Studios, 1 Alexander Street, Suite 400 in Gastown. [Map]
Cost: There is no charge and all are welcome
For those who don't need to leave right away there's typically a more social discussion at a local pub afterwards.
Full Post @ Drupal.org

Mar 27 2008
Mar 27

SaveTheDevelopers.org places a friendly popup request for IE6 users to upgrade their browsers. (via TechCrunch)


By placing a simple conditional comment with a .js script in your page.tpl.php, visitors using the outdated and buggy IE6 web browser will see a small roll-down on the top of their browsers, "nagging" them to upgrade. After clicking the roll-down, a new browser window opens with links to other recommended browsers:


IE6 is a horrible blemish on the web and is the cause of millions of hours of wasted developer time: the sooner we get rid of it, the better. This seems like the most unobtrusive, gentle way to inform people that an upgrade is available and that they should consider scrapping IE6.

However, some people simply can't upgrade or switch browser because of restrictions on their corporate networks. Do they deserve to be "nagged" about upgrading?

And, if a visitor is coming to your site, willing to invest their time in what you have to offer, is it wise to distract them from that, all in the name of the greater good?

On some sites, the answer is surely "yes". SaveTheDevelopers has instructions to include their .js file in your HTML, and let it detect whether the browser is IE6, but I prefer to add conditional HTML comments so non-IE6 users will not download the script. Put this in your page.tpl.php:

<!--[if lt IE 7]>
    <script type="text/javascript" src="http://www.savethedevelopers.org/say.no.to.ie.6.js"></script>

Just a little warning: the SaveTheDevelopers script didn't work well when the rolldown obstructed the top links on one of my sites. Test first!

Mar 26 2008
Mar 26

Today I’m just demonstrating a few simple theme adjustments to comments. Comments in Drupal 5 are “not sexy”, out of the box, so in this short post I’m going to illustrate how to:

  • change the text on “submitted” lines in comments (just a little)
  • add nofollow to username links – unless you’re feeling generous
  • remove the “not verified” marker from anonymous users

// change the "submitted by" text to "posted by"
// note that you can alter the date display too, by changing the way
// format_date() is called - see http://api.drupal.org/api/function/format_date/5
$vars['submitted'] = t('Posted by !a on @b.',
'!a' => theme('username', $vars['comment']),
'@b' => format_date($vars['comment']->timestamp)));

This first snippet belongs in the ‘comment’ section of your _phptemplate_variables function in template.php; I have an example of this here.

Moving on to that “not verified” business, and the question of holding on to your link juice, adding an overridden theme_username() function is the way to go. Here’s some code, which you can also place in your template.php file in your theme. Remember, if you don’t have that file in your theme, you can just create it yourself. I personally recommend Zen as a starting point for theming.

// we can't use phptemplate_username as this is already declared in that engine
function mytheme_username($object) { // rename according to your theme

  // this basically means "if the user has an account"

if ($object->uid && $object->name) {
// Shorten the name when it is too long or it will break many tables.
if (drupal_strlen($object->name) > 20) {  // obviously you could change this value
$name = drupal_substr($object->name, 0, 15) .'...';
    else {
$name = $object->name;

    if (

user_access('access user prosites/default/files')) {
// we could nofollow the internal links too (authenticated user's pages)
      // but there's not really any point - my site doesn't use membership,
      // so usernames are not highlighted -
      // commented line below would do that, though.
      // $output = l($name, 'user/'. $object->uid,
      //     array('title' => t('View user profile.'), 'rel' => 'nofollow'));
$output = l($name, 'user/'. $object->uid,
'title' => t('View user profile.')));
    else {
$output = check_plain($name);
// if we're entering this func, the user is anon (i.e. we want to nofollow them)
else if ($object->name) {
    if (
$object->homepage) {
// this is where we're nofollow-ing the external links to comment authors' pages
      // we don't really need to use t() here, as rel=nofollow is language independent
$output = l($object->name, $object->homepage, array('rel' => 'nofollow'));
    else {
$output = check_plain($object->name);
// commenting out this line prevents "teh ugly" in the $submitted text
    // $output .= ' ('. t('not verified') .')';
  else {
$output = variable_get('anonymous', t('Anonymous'));

If you’ve got any other simple tips like these, let me know, so I can use & share those too!

Update: This code works fine under Drupal 6 as well – but don’t forget to clear your theme registry when you’ve modified things in your theme!

Mar 26 2008
Mar 26

Use the coder module to save embarrassment!

On my last blog post, I threw out a one-line patch for a usability enhancement to the Bio module. Here's the line in question:

(t('You can edit Bio settings at ') . l('admin/user/bio','admin/user/bio'));

How many errors are there in that line? Many more than I expected, as dww very patiently pointed out to me:

  • no tabs -- we use 2 spaces.
  • that's not the right way to handle t() and a link, since then it's backwards in RTL languages.
  • we don't generally print raw URL paths like that in help messages
  • help messages like this should end with a period.
  • need to use a space after the comma between function parameters


I really appreciate dww pointing out the mistakes rather than just dismissing it by saying "go look at the coding standards and come back when you have a clue!". Because that's probably what many people would be tempted to do.

I've since read the above guidelines, and downloaded the Coder module, which is a pretty awesome way of saving a bit of embarrassment next time you want to submit a patch. Here's how it works:

1) Copy to sites/all/modules and enable the usual way. Now you have a new link in Navigation:


2) Click that link, then select exactly what you want the Coder module to do on this page:


3) Select what you'd like to review, there are many different options:


4) Submit, then view the results:


And voila! Sure it doesn't get everything, but it's still far better to have a module remind you of your elementary mistakes, than to waste a core developer's time! ;)

The reason of course for my different coding style is that 99.9% of modules and code I've written is unreleased. So sometime in the near future, I promise to get my modules up to scratch, get a CVS account and unleash them apon the world! Stay tuned!

Mar 25 2008
Mar 25

In his keynote at DrupalCon Boston on March 5 Brian Aker discussed the latest approaches to six problems related to scaling up MySQL:

  1. Caching
  2. Partitioning
  3. Replication
  4. Batch Processing
  5. Understanding Performance
  6. Routing

I had a chance to sit down with Brian after his keynote to ask him questions about a few of these approaches.  Here is the interview:

Brian Aker on Scaling MySQL

Thanks to Vic Germani for producing this audio.


Mar 25 2008
Mar 25

A first part of many about feeds.

The Transmission network, a group for sharing videos for social change, have been working on developing a free metadata standard for video interchange. Before this what there has been is tied to Yahoo! MRSS which one wouldn't call proactive in working with the community for growth and development of their standard.

So the Transmission folks have got some backing and come up with an XML standard for video metadata that in the docs (and in political free background) is linked to Atom. There's a working sort of beta version 0.9 on it's way to becoming a real 1.0 release.

I've implemented it for the video module for Drupal. An example atom feed with plenty of metadata. This requires the patch I committed to the Atom module to allow enclosures as well as additional namespaces.

The fact that no one has previously pushed a metadata standard for Atom, or moved the Yahoo! RSS namespace beyond it's stale position, is interesting. People who actually make and screen videos are crying out for this metadata. They will quickly list off what they want to be made available.

Yet, despite the user demand for metadata, I challenge you to find an implementation of MRSS that includes all of the metadata that it could make available. I really want to find them too, so let me know! (I now exclude Drupal sites with a video module after 16 March because my patch to make proper feeds with the metadata that is available was committed).

It's a shame too. Because the demand is already there from the video community end users. The MRSS standard doesn't seem to be too bad either, it fits a lot of the present videocasting requirements - there is much I feel the Transmission standard could learn from it there. However unlike the Transmission standard the Yahoo! one doesn't meet all the requirements of the present day video creator or user. Yet even with the rise of demand making the Yahoo! MRSS outline an XML standard or developing it with the community seems not to be happening, at the moment.

All that is happening with feeds is CMS developers are starting to develop feeds that actually include enclosures. This is essential as the interest in videocasting becomes greater - miro must have a lot to be praised for here. But the information and formats the video community really want and need is not there. If you actually look at the feeds produced quite often they don't even display how big the file is!

Part of the problem has to be that video related data is pretty complicated and there is quite a bit of it. How long has it taken me to get used to all the different codecs, framerates, and so forth - I'm still getting used to it?!

But that's no excuse. Why aren't Content Management Systems storing this information with videos if it is made available? Why aren't they discovering it if it's not available? Even your really non-demanding user wants to know the if 'the quality is any good' and if 'they can play this video'. It's not rocket science to do either... but I suspect that leads me to a future post...

Mar 25 2008
Mar 25

Easter Eggs 2003-2008When Easter approaches, my family has a strange tradition of decorating Easter Eggs. Although it requires a lot of patience, you end up with brilliantly coloured, pretty, eggs. See these eggs for a good demonstration of what eggs we have painted in the past five years.

When Easter came by this year, our own Druplicon came to mind. So, I began spec'ing out how I could create a Druplicon out of a normal egg.

Waxing the EggsThe idea behind egg painting is that you wax over the parts of the egg that you want to leave the same colour, and then you dye it. So, if you wanted to have a red circle, with black background, you'd first dye the egg red, wax in a circle, and then dye it black. This would give you a black egg, with a big red circle in the middle.

DrupliconWith Druplicon, there are four different colours (including white). There's the light blue, the medium shade of blue, and then the dark blue. Getting all four different colours in there would require a lot of waxing, so I aimed for three.

I waxed in the white parts of the egg first (smile, eyes, nose and top), and then put the egg in light blue dye. This caused the egg to turn light blue all over, except for the white spots on the Druplicon. I then waxed in where I would want the light blue parts to appear on the egg (the spots around the top) and put the egg into a royal blue dye and took it out. The result was amazing and took about four hours in total. We had Druplicon in Easter Egg form: Druplegg.

Druplegg Completion

Mar 24 2008
Mar 24

It's sometimes really cool to be able to share some of the tables between multiple Drupal sites. Just think your users have the same logins for example. It's pretty standard stuff there's a simple 'how to' here. But what happens when the sites are already up and running, and you hadn't planned this?

Well, I ended up in that situation. Taking a break from writing feed input and output stuff (I will blog about it sometime), I'm implementing an e-mail campaigning tool. It should be really nice as it is integrating into CiviCRM for the people who have sent the e-mails as well as for the people they should send them too. CiviCRM was already on one of the sites, but not the other, and they really want to share a lot of this information.

So. I dumped the two databases.

The first thing to do is to change the database prefixes. The easiest way I found of doing this was in the mysqldump just s/ALTER TABLE `\(.*\)`/ALTER TABLE (prefix_\1)/ and so forth.

Doing the same with both tables.

These can the be put into the database. But watch out! If you are going to share the users table you've just got a whole bunch of wrong uid's on content.

So next task, luckly here there were not so many users.

UPDATE node SET uid='newid' WHERE uid='oldid';

Also the sequences table needs to be shared what ever you are doing. You can't have the id's between shared tables being counted separately! I dumped both tables prefix1_sequences and prefix2_sequences. Then replaced all the insert names with prefix?_ as approprate and put them back into one line to insert back into prefix1_sequences (the shared table).

If anything else comes up I'll add it here!

Mar 20 2008
Mar 20

Google Summer of Code™ is in full swing, and the outpouring of community support has been phenomenal. Less than two weeks after announcing the program for 2008, our program information flyer was translated into over 35 languages, from Croatian to Kinyarwanda. We've also heard from several students and mentors that they're working on spreading the summer love to their local communities. Here are a few highlights:

Numerous other students have written to let us know that they've blogged about the program, encouraged their friends to apply and given talks at their universities and local user groups.

Many thanks to all of you for your efforts to help us grow the Summer of Code community. If you're out and about evangelizing the program, we'd love to hear from you; post a comment and let us know what you've been doing.

Mar 19 2008
Mar 19

There is a lot of functionality crammed into Drupal. This can be a good and bad thing.  One of the key benefits is that its components are well maintained. You have hundreds of smart people looking at the code every day and thinking of better and smarter ways of implementing the functionality. One of the drawbacks, however, is that it has a long release cycle, dependent on when a new version of Drupal is released. This means that if there are any new features put into that module or theme, it has to wait a year before it gets out to the general public in a new Drupal release.

The following is a list of issues created to strip some of that functionality out of core:

Remove Poll Module The poll module is a very simple module and there are better implementations of it in the Drupal contributions repository (Voting API). Remove Blog Module The Blog module provides a simple way of giving users their own blog and this could be better achieved with a better design if the Views API goes into Drupal core. Remove parts of Blog module from Blog API In the Blog API module, you notice that it implements parts of the blog module.  This is pretty bad design, and should be removed completely. Remove Access Rules The access rules implements some pretty complex access control on a user/ip basis. Although it's a great feature, the way it's implemented requires a call to a function that is the slowest query on drupal.org. Moving this to a seperate contributed module would allow some more added functionality to the access control, as well as improve Drupal usability. Remove Ping Module The Ping module is quite a useless module, and there are better implementations of it in the Drupal contributions repository (Multiping). Remove Comment Control The commenting control within Drupal is very complex and doesn't really help with usability. It would be a better idea to open up the API, and allow hooks to allow external modules and the theming layer to implement the controls. Remove Blog It from Aggregator There is a little button that appears beside feed items named "Blog It", which allows users to stick it on their own blog on the same site.  There are millions of reasons why this shouldn't live in Drupal core, so it will be good to see it go.

This is just the beginning of stripping Drupal to a really small, slick, and fast framework.  There are a lot more issues out there, and a lot more things that we could/should take out of Drupal core, so get involved and give your thoughts!

Mar 19 2008
Mar 19

Hooray, we're about 2 weeks away from DrupalCampNYC 4.

I sorta had a good time at DrupalCon 2008. If it weren't for the overpriced convention center, marketing sermons slyly disguised as sessions, stale presentations that I've seen a few times now, and inflated attendant pricing, I would say it was awesome. I don't think I'll be attending another DrupalCon unless it's an excuse to expense a trip to Europe.

Now, I have DrupalCampNYC to look forward to. A place exclusive of the dearth of marketing. A place where I can sit down with other developers , users, and ne'er do wells, share my experience and ideas, and learn from theirs. Best of all... It's free... Free of costing you money, and free of marketing.

So what does that mean...

1) everyone can attend including the folk working for underfunded causes, the brilliant students with great ideas, the total noobs. In other words the community, not just the Drupal professionals.

2) The sessions you want may not be right on, but they will be informative and informal allowing for more direct participant interaction with the presenters. I know this setting is better for my informational needs. You won't have marketing centric sessions like adobe folks evangelizing flex, telling you how it does browser interaction(history + deep linking) without JS. (adobe just bundled the js in flex, js is still required, you aren't free of it, you just get adobe's sanctioned version of everyone else's hacks.)

3) You won't see a logo or brand on everything you look at... If you're a New Yorker like me, you become sensitive to this bombardment at some point, and enjoy escaping it. Business still happens, but between the people involved in it.

Mar 19 2008
Mar 19

Here's a small one-line usability fix for all module developers that I think will be a huge help to users.

In the early stages of a project, I'm often playing around with quite a few new modules: testing them, seeing if they meet my requirements, installing and uninstalling. After downloading a module, the sequence of steps is always the same:

  1. copy to /sites/all/modules
  2. enable at /admin/build/modules
  3. configure all exposed settings
  4. use!

However, sometimes just finding the settings page takes the longest time out of all those steps. Is it in User Management? Content Management? Logs? Who knows!

I'm going to use the example of the Bio module; not picking on the Lullabot team or Bio module maintainers, this one just happened to be the first example I thought of. :)

Bio's settings page is difficult to find, as it's not in "Site configuration" but rather in "User management". It also hides itself quite nicely using the title "User biographies" instead of "Bio settings", as one would expect. The readme.txt file doesn't mention how to find the settings page at all.

So what I had to do in this case, after becoming frustrated with searching for the settings in the menu, was pull up the source code and check out hook_menu() to see exactly where I should go.

And here's my suggestion: we're all used to seeing the "installation successful" messages (and looking out for php errors on install of course). For example, the Bio module has these:


What if this message held the link for the settings page? Then it's just one click away, instead of a potential 2 minute search to find it.


This is just one line of code in the bio_install() function:

drupal_set_message(t('You can edit Bio settings at ') . l('admin/user/bio','admin/user/bio'));

Seems like a small change, but if every module did this, it would collectively save me hours in the module evaluation stages of a project, because I find that plenty of modules seem to hide their settings and not explicitly detail them in readme.txt, requiring me to either hunt them down or open the source.

Since I talked about the Bio module, I've provided a patch in the issue queue. Hate to be a complainer that does nothing about it... :)

Mar 18 2008
Mar 18

If you're using the Devel module while developing with Drupal, you may have enabled the "Switch users" block which is great for troubleshooting and configuring permissions.

However, if you accidentally use it while your site is in maintenance mode (offline), then you may notice a problem: it won't let you back to the path "/user" to log in again!

The solution is to use phpMyAdmin or your database manager of choice to empty the sessions table. Then you'll be able to access /user without being redirected.

Mar 18 2008
Mar 18

I've been running my political/editorial web site Prometheus 6 on Drupal since around version 4.2. Every module I've developed was for use on Prometheus 6 or some other experiment I was running.

Currently it's running on version 5.x and I was actually pretty satisfied with it. Had no real intention of upgrading to 6.x. But I was contacted by Sony BMG to write some interface code for Amazon.com. They wanted to use SimpleXML rather than the DOM, and some other music-specific stuff. That had me hanging around the Drupal API site, which showed me all the 6.x stuff, and well, here I am.

The joint is still naked...a bare-bones install. That will change as I start porting and writing and such.

Usually when I upgrade modules (all of them except Amazon Associate Tools go back to version 4.2) I start with the simplest ones and work my way up to AAT. This time, with the boost I got from the Sony job, I decided to start with AAT. At this point, things are looking a lot simpler...I'd MUCH rather explain the SimpleXML based code. Other than Drupal-specific node implementation stuff, most of the code is in five functions:

Search and lookups
function amazon_item_lookup($asin, $params = array())
function amazon_item_search($search_value, $search_index = 'Books', $search_field = 'Keywords', $params = array())

function _amazon_xml_to_array($xmlelement, $prefix = '')
function _amazon_editorialreviews_to_array($editorialreviews)function amazon_xml_to_array($amazonxml)

The _amazon_xml_to_array() function is a mutation of a more general function I use to parse the SimpleXML data into an equivalent nested array. People are more comfortable with arrays. Also said parsing lets me sort any unrecognized data into an array called extendeddata, the point being I can change the data being retrieved (say, add the Tracks response group when searching for music) and I know where it will land for theming purposes.

I know Eaton is working an Amazon project for Drupal 6.x. This is going in a different direction though. I don't run the kind of site where random clicks will make you money, so I'll be looking into shopping carts and setup profiles.

I suppose if I do all this work, I'll wind up upgrading Prometheus 6, which means I need to upgrade the other modules too. Fortunately I like this sort of thing.

Mar 17 2008
Mar 17

I'm doing some testing of an upgrade for a site from Drupal 4.7.x to 5.x. As part of the major version upgrades in Drupal, you're supposed to disable all the modules you have installed. Since I got tired of unchecking boxes, I used the Greasemonkey addon for Firefox 2 to do it for me.

Once the addon is installed, right click on the monkey face in your status bar and make a new user script.

name: Uncheck Boxes
namespace: uncheck_boxes
description: Unchecks all checkboxes that are enabled by default
include: http://yourtestlocation/admin/modules

When you hit ok, your default text editor will ask you for script content.

// ==UserScript==
// @name           Uncheck Boxes
// @namespace      uncheck_boxes
// @description    Unchecks all checkboxes enabled by default
// @include        http://davidnorman.local/test25/admin/modules
// ==/UserScript==

var chkboxes=document.getElementsByTagName('input')
for (var i=0; i < chkboxes.length; i++) {
  if (chkboxes[i].type=="checkbox") {

That's it! Reload your modules page and all the checkboxes should be unchecked by default. When you're done disabling, you can right click the monkey face and uncheck your Uncheck Boxes script, disable Greasemonkey, or leave it available for other sites you want to uncheck by default.

Mar 17 2008
Mar 17

Thought I would test out Jing to create my first screencast. The star of my show is, of course, Drupal and the helper is Komodo. Alright, it's more about Komodo but it's a trick to view variables available for theming for a Drupal page. I find this to be very useful!

Mar 16 2008
Mar 16

The number of available Drupal modules is continuing to grow dramatically. Like a lot of other Drupal users, I spend a good deal of time downloading new modules and trying them out to see what they do. Unfortunately, not all contrib modules work as advertised. I may spend several hours working with a new module before realizing there's some small issue with it that prevents it from solving my problem.

Similarly, there are often modules out there that solve problems I didn't even know I had, but I'm simply not aware they exist.

What I want is a resource that leverages the experience of thousands of Drupal administrators. I want to know that I shouldn't even bother with a module because it's too buggy. I want to know what modules other users find useful in specific areas (such as multimedia, file handling, cache issues, etc.).

Other large OSS communities often solve this need for a shared knowledge base by providing user reviews. Mozilla, Thunderbird, Joomla and other modular systems provide user reviews and ratings. It is time that the Drupal community have one too.

When I first started using drupal about three years ago, it was not all that difficult to simply be aware of most modules and how effective they were because there just weren't that many. Now there are multiple new modules released on a daily basis, and I just can't keep up anymore.

Why do we, the Drupal community, not have a shared review/rating system? It's certainly not due to lack of demand. A search for "module ratings" on Drupal.org reveals a great deal of interest in this functionality.

As far as I can tell, the primary reason for not having a rating system for modules is fear. Module developers in particular are concerned with the fairness of ratings. They are concerned with "gaming" of ratings. They are concerned that inexperienced or "dumb" end users may unfairly give a bad review of a module simply because they don't understand how to use it. These are all reasonable concerns. But they are concerns shared by other OSS projects as well. Sure you will see "bad" reviews, giving a module the lowest possible rating along with some inane review such as "tis modules sukcs BEWARES" :) But who cares, it's just noise that will be drowned out by valid reviews. It works for other OSS projects, and it can work for Drupal.

John Forsythe
has released what I believe is the first site dedicated to rating and reviewing Drupal modules drupalmodules.com. No doubt this site will be a source of controversy as developers voice their concerns. But we need this resource now.

I encourage my entire audience (hi, mom!) to register at drupalmodules.com and to submit reviews for both your favorite and most hated Drupal contributions. This is a great way for non-techies to contribute to the community. The site is young, and there is naturally a shortage of ratings on the site now, but that will change as the site brings on more users.

Maybe this database will eventually make its way to Drupal.org. For now we can show our support for this type of system by helping build out the database at drupalmodules.com.

Mar 16 2008
Mar 16

Everyday I search drupal.org for modules to see if there are any new ones added and to see if I missed any on the last search. One thing that has troubled me a little is how to add images to posts on Drupal 6. In Drupal 5 it was easy, just add CCK and Image Field and you were sorted but in Drupal 6 these modules haven't yet been released. I haven't really had a good look for an alternative but when I noticed Img package I found what I hadn't been looking for, if you understand.

Read the full post on Millwood Online

Mar 13 2008
Mar 13

[ begin rant ]
A few days ago I posted to the planet about an initiative underway to help get testing in place for core and I must say I am not entirely impressed by the response from the community. Take that with a grain of salt though because, naturally, the Drupal Community Rocks.

Here's the synopsis:
A) There is an organization of volunteers in place poised and ready to write the simpletests we need.
B) The only reason, that I see, they are not doing this is lack of feedback from the Drupal community.

All that you have to do is edit the wiki page at http://groups.drupal.org/node/9625 ... it's only 4 core modules we are all familiar with ... a few moments of your time. We've even taken the liberty of contributing the first set of scenarios that need testing as an example. Take a look at it ... even adding one line will help Drupal. I won't even start bugging you about contributing to the testing initiative regularly ... at least not yet.

What are you waiting for? Drupal needs you.
[ end rant ]

Mar 12 2008
Mar 12

Well here is how the story goes...

Read the full post on Millwood Online

Mar 12 2008
Mar 12

Here’s a pretty basic css technique I’ve noticed myself using a lot of lately (not at all my own invention). The divs used as examples come from zen theme.

Often a design calls for putting a background (or border) on a sidebar. It should look as so:
If you haven’t been down this route before, you will probably try something like

  background: #123456;

As long as your sidebar is longer than your content you will think you have succeeded, but go to a page with long content and you will see:
short sidebar
Argh! We want the sidebar background to go all the way down the page!

You’ve learned not to overthink when you’re dealing with css, so next you might decide to give the whole page the sidebar color and then give the content section its own background on top of that. This simply gives the opposite effect:
long sidebar
Now things only look right when the content is longer than the sidebar.

The easiest way to get things straight is to just suck it up and take it to Photoshop. Make an image with a 1px height and a width the same as your sidebar. Instead of applying the image as the background to your sidebar, you’ll apply it as the background to the whole page.
bg image

#main {
  background: url(images/sidebar.png) repeat-y top right;

If you have two sidebars, make one image the full width of the page.

You had to use Photoshop.
You can’t easily change your sidebar width.
You have to load one more image per page.

You’re done!

The same principle is very useful for theming panels. Panels are made up of one or more rows which each have one or more columns. Once you put content in the columns of varying height you get one ugly panel:
panels hell
Do your panels kind of look like this too? Not good. This panel has two rows, and each row has 3 columns. Note that the second element in the second row’s first column (bottom left!) is actually a mini-panel containing two columns. Although the panel has a grid-like structure, the fact that all the content has varying heights makes it look like a mess and probably nothing like your designer’s mockup for your front page.

Adding backgrounds to the content will bring back order to the panel. But once again if you apply the background directly to columns you will end up with:
panel backgrounds
What you really want is more like:
panel heaven
This is the kind of thing that I imagine was really easy back in the days of table-based layouts. Now that the web is all about dynamic content in divs of unpredictable heights, these kinds of things are more difficult. The answer is to, as in the sidebar example, create a background image for each row and tile it vertically.

Now your panels can have the tabled look they seem to be begging for and without the embarrassment of actually using tables! Does anyone have a preferable technique?

Mar 12 2008
Mar 12

Charlie Gordon of DROP http://cwgordon.com/drop-drupal-rockin-open-participation has offered to help put together the SimpleTests needed by Drupal core. All that we need to do as a community is edit the wiki page at http://groups.drupal.org/node/9625 and provide DROP the information necessary to write the tests. All that we are asking is a few minutes of your time to help suggests the tests that need to be coded ... you don't need to code them yourself.

If the concept of contributing towards providing test coverage for core is appealing, you should also evaluate http://groups.drupal.org/node/9408 to see the master list and sign up for the Unit Testing Group at http://groups.drupal.org/ ... volunteers are actively being sought to make Drupal the quality product it deserves to be.

It's a simple request ... a few minutes of your time ... and slowly Drupal really begins to Rock ;P

Looking forward to your contributions.

Mar 10 2008
Mar 10

Once again, DrupalCon this year was no disappointment. After getting back and having a few days to refresh and set my priorities, I've laid out a bit of list of tasks that I hope to complete in the coming months.

Image handling. There's no getting out of it now. After announcing my drive to make image handling part of core during the Multimedia Panel session (with Aaron Winborn and James Walker), I don't think there's any way I can back down from the commitment.

Image issue on Drupal.org: http://drupal.org/node/232129

A color picker for Fivestar. Before the Drupal code sprint at MIT, I brokered a deal that if Mahalie Pech made me a set of Bombs for Fivestar I'd make it so you can pick the colors. That's come along pretty nicely for code written during a code sprint. Look to a beta implementation of that in Fivestar soon.

Fivestar issue on Drupal.org: http://drupal.org/node/232127

Popups (modal dialogs). Tao Starbow took the lead on implementations of popups (think Facebook) in Drupal 6 and I helped kick around some possibilities and how we can possible get this implemented into the Drupal UI. Seems like first candidates for popup implementation are the help text Drupal-wide, and the confirmation dialogs (Are you sure you want to delete this node, etc). Tao's done an amazing job and I'm very excited to see where this takes the Drupal UI.

Popups issue on Drupal.org: http://drupal.org/node/193311

Popups BoF

Tao leads the Popups Birds of a Feather session

Other things. Of course there are a lot of other things that are going to be tolling my time. Most pressing is finishing my portions of the Drupal O'Reilly book (led by Angela Byron and assisted by several other Lullabots). I'm also continuing to push the new 2.x version of webform, which is coming along very nicely and has been completely ported to Drupal 6. And finally, there's client work, workshops, and consulting that I'll be doing for Lullabot to keep our company rolling. I'll be at both the upcoming workshops, if you'd like to attend and rock your API/theming skillz. :)

Des Moines, IA Workshop: March 24 - 28, 2008 (canceled, sorry!)
Melbourne, Australia Workshop: April 7th - 11th, 2008

View more photos of DrupalCon on Flickr: http://flickr.com/photos/tags/drupalconboston2008/

Mar 09 2008
Mar 09

Back now from DrupalCon, I'm parsing all that happened last week in Boston.  For me it was a whirlwind, interrupted by a plethora of hassles, including a nasty head cold, keyboard and trackpad on my MBP crapping out, a crashed demo, and several hours separated from my Treo while it rode around in the back of a Boston cab.  All that negative energy converging on me was more than offset by the positive vibe at the four day conference.  The kindness of the cabbie who drove crosstown to return my phone helped too.

One of the highlights for sure was spending time with a new Sun colleague, Brian Aker from MySQL.  We had breakfast at Henrietta's near Harvard Square before his keynote on Wednesday.   I asked him about the merger with Sun, what's next for MySQL, and how he'd like to see our field organizations work together.   He said the merger has been pretty well received and there was a general appreciation at MySQL for Sun's commitment to open source (something I hope will rub off on Brian's Slashdot amigo Chris Dibona, who conspicuously left Sun off of his Tuesday keynote list of companies that "get" open source).  There is a tradition of collaboration between Sun and MySQL too, which Brian indicated ought to help smooth the integration.   Lot's of his work is going into memcached these days, particularly in the libmemcached client.  He cleared up a misconception for me regarding Innodb: since Innodb is GPL'd, the risk of Oracle smothering it is nil - the community is driving it, and it's not the dead end many had feared.   What's next?  Don't expect to see MySQL 5.1 until 2009; do expect a maturing and further specializing application of the MySQL engines MyISAM, Innodb, BDB, and Archive; and plan for an adoption ramp for DRBD.  Brian had some great advice for Sun's field engineers: get familiar with MySQL technology by taking advantage of the many training resource available at MySQL.com.  MySQL University is a great place to start, (be sure to catch Brian's talk on EC2 March 29).  I also caught some good audio one-on-one with Brian after his keynote which I will post separately, along with his advice on scaling up your database.

RDF and Semantic Web were topics of much conversation and at least one BoF session.  With the addition of RDF modules in Drupal 6, developers can mashup data from multiple sites in very interesting ways.  If Web3.0 is massively distributed data mining, indexing, and mashing it all up, then Drupal is positioned to be the portal for this convergence, as Dries Buytaert resolutely declared in his Monday keynote

I gave a talk on running Drupal on Sun, with some help from Chris Cheetham from Project Caroline, at the end of the day on Wednesday (slides at right).  As luck would have it, my demo froze up, but I did manage to show Drupal running in a Solaris Zone, and DTrace to count function calls from Drupal.  Chris's demo of Drupal deployment to Project Caroline went much smoother.

Another highlight was awarding the grandprize Sun Fire T1000 server to the winners of the Showcase Site competitionPingVision won it for their work on Popular Science Magazine.  Congratulations to Kevin Bridges and the rest of the crew at PingVision.

There was a lot of support for the next DrupalCon to be held in Hungary this fall.  It will be hard to top the Boston event, but I know this community will do their best to have the best one yet.

Mar 09 2008
Mar 09

For those of you with short attention spans, this is a call for co-maintaiers of the Picasa Module and the Auto Assign Role Module.

While at the Drupalcon in Boston I began talking to Kieran and others about my desire to actively participate in making core the best it can be. The focus I now have is to provide a continuous unit testing framework for core so that the proposed Paris Code Sprint can be a success. Make sure to join the Unit Testing Group and the Quality Assurance Group to keep informed of and participate in relevant debates.

To put it mildly, my free time allocation to support my modules has just completely vanished. Every moment I have available is going to be spent making sure I do my part to provide the Drupal community an additional 4 months of development time on D7. As a result I am looking for qualified candidates to help co-maintain the modules mentioned above. I look forward to speaking with you.

Mar 08 2008
Mar 08

I'd like to send a thank you to all who were involved with this year's Drupalcon. It was the first Drupalcon I have attended, and will most definitely not be the last.

The sessions were amazing and I learned a lot at every one I attended. The birds of a feather talks were very productive and fun. The thing I liked most out of the whole conference though, was meeting everyone. I had an amazing time, and can't wait for the next one.

Thanks a lot, Drupalcon, and I'm looking forward to meeting you again. Here are some pictures from the conference...

Mar 04 2008
Mar 04

The Drupliclown was created by Al Steffen during the Boston Druplicon ... it is recorded here and made available as an svg file for your enjoyment.

AttachmentSize 160.46 KB 193.7 KB
Mar 03 2008
Mar 03
Post by Cat Allman, Open Source Team

If you've ever wanted to hear what we on the Open Source team have to say "live and in person", you will get a chance next week at DrupalCon Boston '08. This twice annual conclave of Drupal developers is being held at the Boston Convention and Expo Center, March 3rd - 6th. Our fearless leader, Chris DiBona, is giving the keynote; "Open Source is Magic". Geek herder extraordinaire, Leslie Hawthorn will be speaking about Google Summer Of Code 2008, and the results of GHOP, the Google Highly Open Participation Contest. Come on down!

There will also be Googlers 2 weeks later in Chicago at PyCon. Guido van Rossum is giving the opening Plenary Keynote on March 14th, "Python 3000 And You", and our Brian 'Fitz' Fitzpatrick will be also be giving a keynote later in the conference. There will be a number of us in attendance - please say hi.

We hope to see you there!

Mar 03 2008
Mar 03

It's been a good, long while since I wrote a blog post. Between work and family, there just hasn't been time. I've been super busy for months now, but not without some benefits.

For one thing, I've been learning tons. I've been working on picking up more PHP and delving a bit more into backend Drupal work, as well as doing more accessibility and usability work and learning more about user experience design. I guess you could say I've been branching out every which way. As a reward for all that hard work, I'm going to DrupalCon in Boston. Although the conference doesn't start until tomorrow, Jon and I flew in for a long weekend to soak up some history and not a little seafood. I can now state pretty definitely that the Union Oyster House has the best clam chowder I've ever eaten, and Mike's Pastry has Boston Cream Pie to die for. Not to be missed. It might be cold here in Boston, but with good food and four whole days of Drupal learning, it's weather I'm happy to put up with.

Hi there,

I wanted to ask how the DrupalCon went and if there was anything particular that you walked away with that made you glad you went or was the whole event great all rounder.

Btw did you learn Drupal from book or from the web? I am trying to track down a good resource for learning Drupal that is hardcopy, can you suggest anything? or is web my best bet?


About Drupal Sun

Drupal Sun is an Evolving Web project. It allows you to:

  • Do full-text search on all the articles in Drupal Planet (thanks to Apache Solr)
  • Facet based on tags, author, or feed
  • Flip through articles quickly (with j/k or arrow keys) to find what you're interested in
  • View the entire article text inline, or in the context of the site where it was created

See the blog post at Evolving Web

Evolving Web