Upgrade Your Drupal Skills

We trained 1,000+ Drupal Developers over the last decade.

See Advanced Courses NAH, I know Enough
Apr 08 2007
Apr 08

Recently returned from the Open Source Content Management Systems (OSCMS 2007) gathering held at the Yahoo! campus in Sunnyvale, CA.

Drupal was strongly represented at OSCMS, but also saw some Joomla, Plone and Alfresco presence.

As often, PHP maven Rasmus Lerdorf was in attendance, in this case, demonstrating the latest in security and performance considerations.

I found great value in the day-long seminar on Drupal/LAMP performance and scalability given by Dries Buytaert (Drupal), James Walker (Bryght), Jeremy Andrews (CivicSpace) and Matt Westgate (Lullabot), with a guest appearance by Robert Douglass (Lullabot). If anyone continues to have doubts about LAMP platform applications scaling to enterprise levels...they should have been in attendance to absorb the variety of solutions from hardware to network to architecture to database to code offered here. After this, I will no longer doubt that LAMP applications can be tailored to meet enterprise demands.

Apr 04 2007
Apr 04

I'm now keeping a recipe cataloging the technologies and configuration that drive this xolotl.org site.

Continue to check the recipe as the site evolves.

Once the site reaches a certain maturity, I'm thinking to build a Drupal install profile to make it easier for others to duplicate this installation.

Apr 03 2007
Apr 03

LAMP Platform

Drupal Content Management System

Drupal Installation

  1. Procure a LAMP webserver environment similar to the one described above. Other platforms are possible (eg, LAPP, WAMP, WIMP, etc), but will not be discussed here. Read Drupal's system requirements for more information.
  2. Once Drupal is installed, check your site's system status (at http://yourdomain.tld/admin/reports/status) to make sure you have properly and completely installed Drupal. Fix any reported issues.

Drupal Configuration

  1. For basic settings, I recommend using clean URLs. You might wait to enable caching and/or disabling on-screen error reporting until you are ready to make your site live.
  2. Enable the optional core modules listed below.
  3. Install and enable the theme listed below, choose another existing theme, or design your own Drupal theme (Framework is a good theme on which to base a new design).
  4. Install and enable the contributed modules listed below. Any specific installation issues will be noted under each module listing.
  5. Set up a cron task that will visit your Drupal site on a regular basis to do basic housekeeping tasks automatically (eg, rebuilding the search index).
  6. Establish an OpenID identity with a provider (eg, myopenid.com, myvidoop.com) and use it to log in to your Drupal site. (Note: I don't recommend using Drupal's root administrative user as your daily blogging identity, so make a new user for yourself with reduced privileges.)
  7. Start blogging!

Optional Core Modules

Ultimately, all these core modules are optional, but some provide basic functionality you won't want to blog without.

  1. aggregator: Enables you to expose feeds (eg, RSS) from other sites on your site.
  2. blog: Blog enables multi-user blogging. If only one person will ever blog on your site, you don't need the blog module. However, even though I may be the only blogger on xolotl.org, I've enabled blog to establish handy navigation to my blog, and other modules may add useful functionality directly to blog.
  3. blog api: Allows users to post content using applications that support XML-RPC blog APIs.
  4. comment: Enables you or other users to comment on your blog entries (or other content).
  5. contact: Provides general site contact form.
  6. database logging: Logs and records system events to the database.
  7. help: Provides online help for Drupal features.
  8. menu: Enables your site to have navigation menus.
  9. openid: Enables OpenID authentication. Note that I did some user login, login block, register and password form templating to override stock forms provided by Drupal and this OpenID module. My goal: allow only OpenID authentication.
  10. path: Enables you to make URLs on your site more human and search-engine friendly.
  11. php filter: Allows embedded PHP code/snippets to be evaluated.
  12. ping: Alerts other sites when your site has been updated via ping-o-matic.
  13. poll: Enables simple polling functionality. I'll occasionally be asking my blog readers to vote on simple polls.
  14. search: Enables Drupal's built-in content search functionality.
  15. statistics: Enables Drupal's built-in usage statistics functionality.
  16. taxonomy: Enables you to categorize content with your own custom tags.
  17. update status: Checks the status of available updates for Drupal and your installed modules and themes.
  18. upload: Enables you to attach/upload files (eg, images, PDFs, etc) to content items.

Contributed Modules

Some of these contributed modules use additional required supporting modules where are not listed here.

  1. cck: Allows administrators to define new content types. I also use some custom CCK field type modules, that enable date, email, filefield, imagefield and link fields.
  2. flickrsync: Reads users's Flickr photo streams, and turns into nodes.
  3. google analytics: Adds Google Analytics javascript tracking code to all your site's pages.
  4. imagecache: Dynamic image manipulator and cache.
  5. : Protects against comment and contact form spam.
  6. pathauto: Enables custom, automatically-generated URLs for pages.
  7. : Enables printer-friendly, PDF and email versions of pages.
  8. service_links: Automatically adds Digg, del.icio.us, reddit, Technorati etc. links to content items.
  9. simplemenu: Creates a menu bar that is displayed at the top of every page.
  10. tagadelic: Tagadelic makes weighted tag clouds from your taxonomy terms. See the one in the column to the right.
  11. tinymce: Enables a WYSIWYG rich text editor.
  12. views: Create customized lists and queries from your database.


framework: I'm using a slightly modified version of the Framework theme by Andre Griffin. My modifications are only to default to OpenID authentication and some minor CSS style tweaks.

Apr 02 2007
Apr 02

With some work, I've now enabled OpenID user authentication. It would have been a lot easier if I weren't running Drupal 5 (for which a core OpenID module is not yet ready) or using a shared host (which meant I don't control PHP at the system level).

Steps to get OpenID auth running included:

This process will be a lot easier once a core OpenID module is ready for Drupal 5 and if one were in complete control of one's hosting server. Meanwhile, it wasn't so hard to enable the first credible global authentication system on a cheap shared host with my paltry technical skills ;)

I'll be taking (the much simpler) steps soon to let me use this blog site URL as my OpenID.

I've also enabled Drupal's core aggregator module and used it to expose a few open source feeds (Drupal, Sakai, OSP) on the site. The feeds are exposed in 2 blocks that categorize them (eg, the one Drupal feed in one block, the two Sakai and OSP feeds in another block).

Apr 01 2007
Apr 01

I've started a new blog to put Drupal 5 to the test.

I may work toward contributing a Drupal install profile for a single-user blog site.

Mar 29 2007
Mar 29

Strange things. My blog has been down because of some problems with my account on my commercial host, Site5. Naturally right before I had to head out of town, the files in my hosting account managed to get wiped. Well, that is except for the Drupal misc/ directory.

Site5 has been causing so many problems of late. Site access is poor on the accounts I have; frequent timeouts. They had to restore from backup a couple of weeks ago when they had a hard drive failure, even though they have RAID 5. And during my recent event, I found out they don't keep good backups. They have 1 backup that gets overwritten in a 24 hour period. That means if someone's files got messed up by Site5 and no one realized it for 24 hours, well, there's to be done. Email account backups are even less frequent. Looks like about once a week.

Time to move things on the new server in my office. That has been stable now for a few months; no problems whatsoever.

Mar 27 2007
Mar 27

I started the morning with a round of Drupal lightning talks -- eleven topics in sixty minutes. dww even convinced me that if I ever actually have free time, I should pitch in a bit on project module.

Dries' "State of Drupal" talk was excellent, though the audience as a whole didn't seem to react well to the bit about eliminating the webmaster, developer, designer, etc. The whispers and whines in the crowd implied that some people found those statements threatening. I'm mentioning this because I didn't feel that way, and I'd like my fellow geeks to know why: web technology is an ever-evolving industry. I've been doing system administration since the early 1990's, working with open source software since 1995, and playing with web technologies on and off since the 1990's as well. NOTHING is like it used to be, and *I'm still here*. So are a lot of other people. There was a time when the end-all and be-all of being a webmaster was smashing text and some basic HTML into static pages, then updating them by hand any time anyone wanted to make a change. Then came scripting and databases -- suddenly you could code your way out of the repetition, and even make some editing and interaction (such as web forums) available to users. The hard-core coders moved on to writing scripts, the less nuts-and-bolts folks formed new niches as site moderators and documenters, and users could now contribute directly to content. Those less interested in adapting moved on.

This is what Dries was talking about when me mentioned "eliminating the webmaster". On many sites, users began to take a leading role in entering content. Now we've moved from every site being scripted in isolation, to CMSes where a community of developers and themers can provide the tools for even non-coders to create web sites with all sorts of features. The internet is still evolving, and will be for the foreseeable future. I'm not afraid of the market for my talents drying up tomorrow, nor should anyone else be, as long as they are willing to learn and step into the next niche. In the mean time, keep innovating! If you doubt how much work there still is to be done, take a look at the Drupal issue queue and forums sometime.

Next came a talk on the Date API and Calendar modules. Karen's presentation was absolutely wonderful, and I learned more than one useful tidbit about managing time, scheduling, and iCal feeds in Drupal. Steven Witten's talk on jQuery convinced me both that JavaScript is every bit as hideously disgusting as I thought it was, and that jQuery makes it tolerable to add some JS tricks to things I'm working on (for those users who even enable JS) without feeling dirtied by the evils of JS code. Last, but certainly not least, I sat in the audience of the Live from OSCMS Summit Drupal podcast/netcast. There's no need for a long description here, you can listen for yourself.

After the close of the summit, some of the Lullabot crew, a few other Drupal geeks, and I went out for Thai food. Still fewer of us ended up in add1sun's hotel room, where much Drupal hacking goodness and a fair bit of socializing took place. We were joined by Leslie from Google and a couple of Joomla folks. I finally headed back to my hotel around 3am, my head buzzing with thoughts of projects to come, some curiosity about the aggregator module and what might be involved in cleaning it up, along with a healthy dose of laptop-related determination. I was still buzzing on the plane ride home. Those of you who have had the good fortune to fly off to a brain-bendingly interesting conference and there meet at least a dozen people you've worked with for ages but never met face to face, only to become even more excited about the project that brought you together know exactly how I feel. The rest of you couldn't possibly imagine, so I hope you get to try it some time.

Mar 27 2007
Mar 27

I started OSCMS by making hasty child care arrangements from my cell phone in the airport Wednesday night, due to my mom's flight being canceled in the eleventh hour. Everything worked out, though I also spent a large part of Thursday on the phone, ducking in and out of sessions to coordinate the situation at home. My poor mother finally made it to my place late Thursday night. I'm still glad I went, though I feel pretty bad that my mom went through all of those delays and cancellations.

Rasmus Lerdorf's talk alone made the trip worth it. He's an even better public speaker than I'd heard, and I learned some new things about PHP, including the existence of some tools I can't believe I didn't know about. The OpenID talk was well done, but really didn't tell me anything new. I changed my mind about "Theming Drupal" and instead went to chx's talk on the new menu system. I am glad that I did. Not only did I learn quite a bit, but I ran in to webchick, the first of my fellow Drupalers besides chx to whom I could match nick, real name, and face. She is even more awesome in person than online. Her astute questions and comments added a lot to every presentation or discussion I saw her in. I certainly picked up a lot more than I would have had she not been there. Yahoo's hospitality was top notch. They provided parking, meeting space, food, swag -- all the essental materials. I even managed to get some extra swag for mom as a thank-you for all she went through to babysit for me. Earl (merlinofchaos) gave an outstanding talk about node_access. It was my favorite among today's talks. After node_access, I attended the Drupal Search talk, but gave up on the internationalization talk part way through because I have a horrible time following people with strong accents when I don't have enough visual cues to make up the bits I missed. I plan to catch up on the internationalization info online once the conference is over. I nabbed a great pick-up discussion in the common area after leaving, so the time block definitely wasn't a loss.

The summit wrapped up for the day around 5:15, but I stuck around for a quick Drupal Dojo meetup. Following that, I joined sepeck, webchick, add1son, jjeff, eaton, Dries, dopry, chx, KarenS, merlinofchaos, and many others for dinner, drinks, and witty banter. Much fun was had by all, and if my head wasn't already completely awash with new ideas after my day at the summit, it was when dinner ended. My only regret is not having a functional laptop to take notes, scratch out ideas, etc. on. (Not to mention the coding withdrawal I've had lately for the same reason.) I can't wait for tomorrow.

Mar 25 2007
Mar 25

I've just finished off two days down at the Yahoo! headquarters in Sunnyvale, where the OSCMS Summit 2007 was held, and where I experienced my first ever DrupalCon. You can read about my experiences by browsing the posts tagged with DrupalCon on my world trip site; and you can download the slides for my presentation on site structuring and navigation in Drupal right here.

I believe that someone was videoing my presentation, but I'm not sure if the video is online yet, or if it will be; and if it is online, I don't know where. I also don't know if I'm supposed to be posting my slides to some official spot, rather than just posting them here, where you can find them through Planet Drupal. So if anyone knows the answers to these things, please post your answers here as comments. Anyway, glad you found this, and enjoy the slides.


20 Dec

The exercise bike has been around for decades now, and its popularity is testament to the great ideas that it embodies. Want to watch TV in your living room, but feeling guilty about being inside and growing fat all day? Use an exercise bike, and you can burn up calories while enjoying your favourite on-screen entertainment. Feel like some exercise, but unable to step out your front door due to miserable weather, your sick grandma who needs taking care of, or the growing threat of fundamentalist terrorism in your neighbourhood streets? Use an exercise bike, and you can have the wind in your hair without facing the gale outside. Now, how about adding one more great idea to this collection. Want to contribute to clean energy, but still enjoy all those watt-guzzling appliances in your home? Use an electricity-generating exercise bike, and you can become a part of saving the world, by bridging the gap between your quadriceps and the TV. It may seem like a crazy idea, only within the reach of long-haired pizza-eating DIY enthusiasts; but in fact, pedal power is a perfectly logical idea: one that's available commercially for home use by anyone, as well as one that's been adopted for large and well-publicised community events.

02 Nov

The human body is a self-sustaining and self-repairing entity. When you cut your hand, when you blister your foot, or when you burn your tongue, you know — and you take it for granted — that somehow, miraculously, your body will heal itself. All it needs is time. However, there are many injuries that are simply too severe for the body to repair by itself: in these cases, help may be needed in the form of lotions, medicines, or even surgery. Why is this so? With all its vast resources, what is it that the human body finds so difficult and so time-consuming in healing a few simple cuts and bruises? Surely — with a little bit of help, and a lot more conscious concentration — we should be capable of repairing so much more, all by ourselves.

21 Oct

Modern economics is infinitely bizarre. We all know it. I'm not here to prove it; I'm just here to provide one more example of it — and the example is as follows. You're an educated, middle-class professional: you've lived in a developed country your whole life; and now you've moved to a developing country. Your work is 99% carried out online, and your clients live all over the world. So you move to this less-affluent country, and you continue to work for your customers in the First World. Suddenly, your home is a dirt-cheap developing nation, and your income is in the way of formidable developed-nation currency. The result? Well, I'm no economist — so correct me if I'm wrong — but it would seem that the result must be a paradise existence, where you can live like a king and still spend next to nothing! Could this be the next big thing in employment, that we should expect to see happening over the next few years?

13 Oct

The upcoming Drupal 6 has a very small but very useful new feature, which went into CVS quietly and with almost no fanfare about 6 weeks ago. The new feature is called "useful SQL error reporting". As any Drupal developer would know, whenever you're coding away at that whiz-bang new module, and you've made a mistake in one of your module's database queries, Drupal will glare at you with an error such as this:

user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'd5_node n INNER JOIN d5_users u ON u.uid = n.uid INNER JOIN d5_node_revisions r ' at line 1 query: SELECT n.nid, n.vid, n.type, n.status, n.created, n.changed, n.comment, n.promote, n.sticky, r.timestamp AS revision_timestamp, r.title, r.body, r.teaser, r.log, r.format, u.uid, u.name, u.picture, u.data FROMMM d5_node n INNER JOIN d5_users u ON u.uid = n.uid INNER JOIN d5_node_revisions r ON r.vid = n.vid WHERE n.nid = 1 <strong>in C:\www\drupal5\includes\database.mysql.inc on line 172.</strong>

That message is all well and good: it tells you that the problem is an SQL syntax error; it prints out the naughty query that's causing you the problem; and it tells you that Drupal's "includes/database.mysql.inc" file is where the responsible code lies. But that last bit — about the "database.mysql.inc" file — isn't quite true, is it? Because although that file does indeed contain the code that executed the naughty query (namely, the db_query() function in Drupal's database abstraction system), that isn't where the query actually is.

In Drupal 6, this same message becomes a lot more informative:

user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'd6_node n INNER JOIN d6_users u ON u.uid = n.uid INNER JOIN d6_node_revisions r ' at line 1 query: SELECT n.nid, n.vid, n.type, n.language, n.title, n.uid, n.status, n.created, n.changed, n.comment, n.promote, n.moderate, n.sticky, n.tnid, n.translate, r.nid, r.vid, r.uid, r.title, r.body, r.teaser, r.log, r.timestamp AS revision_timestamp, r.format, u.name, u.data FROMMM d6_node n INNER JOIN d6_users u ON u.uid = n.uid INNER JOIN d6_node_revisions r ON r.vid = n.vid WHERE n.nid = 2 <strong>in C:\www\drupal\modules\node\node.module on line 669.</strong>

This may seem like a small and insignificant new feature. But considering that a fair chunk of the average Drupal developer's debugging time is consumed by fixing SQL errors, it's going to be a godsend for many, many people. The value and the usefulness of this feature, for developers and for others, should not be underestimated.

07 Jul

There are a great many people in this world — particularly in third-world countries — that spend their entire lives performing jobs that are dangerous, labour-intensive, unhealthy, and altogether better-suited for machines. I've often heard the argument that "it's better that they do what they do, than that they have no job at all". After visiting the hellish mines of Potosí in Bolivia, I disagree with this argument more strongly than ever. I'm now 100% convinced that it's better for jobs as atrocious as this to disappear from the face of the Earth; and that it's better for those affected to become unemployed and to face economic hardship in the short-term, while eventually finding newer and better jobs; than to continue in their doomed and unpleasant occupations forever.

11 Apr

For all of the most memorable moments in life — such as exotic vacations, milestone birthday parties, and brushes with fame — we like to have photographs. For some people, photography is an art and a life-long passion: there is great pride to be had in capturing significant occasions on film or in pixels. But for others (such as myself), taking photos can quickly become little more than a bothersome chore, and one that detracts from the very experiences that you're trying to savour and to have a memento of. For those of us in the latter category, wouldn't it be great if our cameras just took all the pictures for us, leaving us free to do other things? Judging by recent developments, this may not be as far off as you think.

25 Mar

I've just finished off two days down at the Yahoo! headquarters in Sunnyvale, where the OSCMS Summit 2007 was held, and where I experienced my first ever DrupalCon. You can read about my experiences by browsing the posts tagged with DrupalCon on my world trip site; and you can download the slides for my presentation on site structuring and navigation in Drupal right here.

09 Feb

For the past century, humanity has fallen into the habit of wreaking ever-more serious havoc upon the natural environment, and of conveniently choosing to ignore any and all side-effects that this behaviour may entail. Our daily lives are a crazy black comedy of blindness: each of us is like a blind butcher who carves up his customers, thinking that they're his animal meats; or like a blind man in his house, who thinks he's outside enjoying a breeze, when he's actually feeling the blizzard blowing in through his bedroom window. Finally, however, more and more people are taking off the blindfold, and realising that they do actually exist in this world, and that closing the window isn't the answer to stopping that breeze from getting warmer.

Mar 21 2007
Mar 21

I am perhaps (one of) the most excited to see the new Übercart module package introduced at Drupal.org as an alternative to the current e-commerce package. Read the full article here.

Advanced Web Design has been offering Zen Cart as an e-commerce solution to those clients looking for a robust catalog-type shopping cart solution. Over the months, there has been much discussion here regarding a possible transition to an all Drupal shop. Übercart may just make up our minds.

Mar 15 2007
Mar 15

Steven Wittens deserves the Award for the Most Creative Use of Drupal with his new ComicJuice, a website which allows the user to create comics online. Go Steven! This is proof of concept toward building a Drupal desktop (or should that be desktop, web-based) publishing application :-)

Mar 02 2007
Mar 02

Pro Drupal Development has been updated for Drupal 7 by Todd Tomlinson, and it's been renamed Pro Drupal 7 Development. When you order Pro Drupal 7 Development from this site you're also giving to the Drupal Association. We're using the the Drupal associations' Amazon affiliate ID so a portion of our profits go back into the Drupal community.
Pro Drupal Development, Second Edition continues to be the Drupal 6 reference for thousands of Drupal developers.

Drupal is one of the most popular content management systems in use today. With it, you can create a variety of community-driven sites, including blogs, forums, wiki-style sites, and much more. Pro Drupal Development was written to arm you with knowledge to customize your Drupal installation however you see fit. In the first two editions, authors John VanDyk and Matt Westgate delved into Drupal internals, showing you how to truly take advantage of its powerful architecture. In the third edition, Todd Tomlinson updates this tome for the latest and greatest version: Drupal 7.

You'll learn how to write your own modules, create your own themes while adhering to best practices that keep your site easy to maintain. You'll learn the inner workings of each key part of Drupal, including user management, sessions, the node system, caching, and the various APIs available to you. Of course, your Drupal-powered site isn't effective until you can efficiently serve pages to your visitors. As such, the authors have included the information you need to optimize your Drupal installation to perform well under high-load situations. Also featured is information on Drupal security and integration of Ajax and the internationalization of your Drupal web site. Simply put, if you are working with Drupal at all, then you need this book!

  • This book is written by Drupal core developers.
  • Drupal architecture and behavior are mapped out visually.
  • Common pitfalls are identified and addressed.
  • Chapters provide regular discussion and reference to why things work they way they do, not just how.
  • The book features a foreword by Dries Buytaert, Drupal founder.

About the Authors

Todd Tomlinson (author, 3rd edition) is the vice president of eGovernment Solutions at ServerLogic Corporation in Portland, Oregon. Todd’s focus over the past 15 years has been on designing, developing, deploying, and supporting complex web solutions for public and private sector clients all around the world.

John VanDyk (author, 2nd edition and co-author, 1st edition) has been a Drupal developer since 2004. In 2005, he organized the first Drupal conference in Antwerp, Belgium, with Drupal founder Dries Buytaert. John has contributed several modules to Drupal and has been instrumental in the design of Drupal's Content Construction Kit. John is a systems analyst, adjunct professor, and director of the NEPM IT Center at Iowa State University. In his spare time, when not hacking on Drupal, John enjoys squash hunting and raising children.

Matt Westgate (co-author, 1st edition) is a core developer of the Drupal project and original author of the e-commerce package for Drupal. Matt also wrote the path aliasing module, along with many contributed modules such as tinymce and img_assist. He currently co-operates Lullabot, a consulting/training firm focused on making open source software easy to use and understand.

Feb 18 2007
Feb 18

This is upgrade to Drupal 5.1 weekend. After working on Kairosnews, I decided to retheme and upgrade this site. I've still got some fine tuning to do (alignment issues, problems with background matching and text replacement, etc.), but I really like how this design turned out. It definitely looks better in Firefox than IE. I'm not sure why, but IE 7 renders the fonts unusually large. Perhaps it's my machine because I have the Windows screen dpi turned up.

In the meantime, I've also turned off commenting access to the site until I can try out the captcha module.

Feb 16 2007
Feb 16

I finally got around to upgrading my corporate (God, I hate that word...) website to 4.7 today with surprisingly few problems. I feel so good, I just may upgrade to 5.0 later this evening!

I only have one "legacy" website left. It has so much data that I hate to mess anything up. (That phrase used to be a swear in my house when I was growing up.) My anxieties are further compounded by the number of contributed modules.

And the fact that I haven't been paid by that client in months.

Feb 14 2007
Feb 14

Given the nature of our work here at Woven, I read a number of blogs and other publications having to do with collaboration. One of these, Collaboration Loop, profiles collaboration technologies in the enterprise space. They usually focus on enterprise grade offerings from the larger commercial players, but they just featured a short article on the open source Drupal platform. Coincidentally, it’s the very platform we’re basing our work on. I thought the article nicely relayed some of the very reasons we chose to make Drupal a crucial part of our strategy, and it presents a good case for why Drupal may give some of the enterprise offerings a run for their money.

Drupal is clearly an effective collaboration tool, as it powers the worldwide Drupal effort itself. It’s already a success story in geographically distributed software development, as I see it.

We often are so focused on the future opportunities of collaborative technologies that we may not see the outcome of successful collaborative work right in front of us. […] [T]he Drupal project itself is an example of how a large loosely knit group of people can produce powerful results.

An open and engaged community means there’s bleeding edge innovation.

The core developers … incorporate significant user contributed innovations into the platform itself enabling the development of the next generation of extensions that continue to outpace offerings from competitive products such as those from Microsoft and IBM.

While commercial players can surely implement the same things, Drupal has an intrinsic edge.

There is probably nothing in Drupal that products from the big vendors can’t do and may have implemented somewhere. The difference is companies using Drupal are meeting customer needs faster and cheaper because they are sharing innovations within the community. This is resulting in a growing community that is increasing the pace in which new innovations are brought to market.

Drupal does a great job of supporting and leveraging a large community of contributors, something the large vendors would be well served to do.

[U]nless the large software vendors figure out a way to leverage a community to this extent their days of competing for Internet marketshare may be numbered.

Leveraging the strengths of a community and platform like Drupal, while actively participating in its growth and evolution, is a viable strategy that rivals even the big players.

In an era where Google is giving away services for free, the cost of deployment and the time it takes to bring innovations to market is becoming much more important. Many smart system integrators are recognizing the power of an open community like Drupal and are effectively competing in this new environment. Time will tell if the large software vendors can adapt.

How do you use Drupal? Do you use it as a collaboration tool? Do you use other collaboration tools? What do you think about Drupal’s future as an enterprise collaboration tool itself?

(Note: Please see the Woven blog for related posts, and subscribe to our syndication feed!)

Feb 11 2007
Feb 11

It's taken me a couple of weekends and late nights, but I finally upgraded this blog to Drupal 5.1. Upgrading should probably be tedious, but the truth is I enjoy it. It's a good excuse to clean up some of the dumb mistakes I made in the last go 'round and have been putting off correcting. Like a digital version of spring cleaning, I shook the dust out of the old modules, sorted through and tossed out the junk that's been piling up over the winter, and generally gave the whole place a good scrub and polish. There's something very satisfying about sitting in the middle of a spic-and-span, orderly Drupal site. It's a great learning opportunity, as well. I finally tried out the amazing Content Creation Kit and Views modules and got ridiculously excited when I was able to replace a few old modules with "creations" of my own. Both modules were so surprisingly easy to learn and use, I wished I'd tried them sooner. I'm no PHP coder, yet with very little trouble, I built a quotations content type and a block to display them (see the sidebar) and replaced my old Weblinks with a content type and block I dubbed "QuickLinks." I also acquired a better grasp of theming. The theme I've been modifying to come up with my own styles, FriendsElectric, isn't available yet for v5. So I switched to the new Zen, which is also a CSS/XHTML, standards-compliant theme. I was very impressed with the flexibility of Zen. Switching base themes also gave me a chance to tidy up my theme and style sheets a bit and to delve more deeply into the subject of theming. My 4.7 modules were littered with clumsy hacks. This time I only had to hack one line in one module, which thrilled me silly and had my family murmuring things like "Watch out—Mom's having another geek moment." Honestly, spring cleaning with Drupal v5 was a lot easier and more trouble-free than I'd expected. Too bad spring cleaning my house isn't as much fun. On the other hand, how would the kids know dinner was ready if the oven stopped smoking? I think I'll stick to Drupal.

Feb 11 2007
Feb 11

Update: I found a roommie, yay! I can't wait to see you all at the summit.

I'm trying to figure out how I can attend DrupalCon 2007 at the Open Source CMS Summit sponsored by Yahoo! The summit and related events are free, so it's mostly a matter of child care (got it covered) and affording transportation and the hotel stay. If any non-smokers in Washington would like to carpool to Sunnyvale, or any nonsmoking webmonkeys would like to split a hotel room with an easygoing lady geek, please let me know. I'm a night owl, I don't hog the bathroom, and I'm happy sharing accommodations with geeks of any gender. Please note that I am deathly allergic to cigarette smoke, so not smoking in the car/room isn't good enough -- you really have to be a nonsmoker.

Feb 02 2007
Feb 02

IBM recently announced its Lotus Connections suite of products, touted as “Social Software for Business”, and I wanted to share a quick word.

Lotus Connections has five Web 2.0-based components — Activities, Communities, Dogear, Profiles and Blogs — that help business people quickly connect and build new relationships based on their individual needs. […] Lotus Connections helps organizations foster a sense of community, especially among geographically dispersed teams, helping employees come together to share their knowledge and collaborate on a project.

This announcement by a technology giant gives further credibility to those of us innovating in the team collaboration space. The market is forming, awareness is spreading, and it’s only a matter of time before team collaboration tools like these become commonplace. It underscores that these tools will be leveraged even across conventional enterprises (not just for loosely formed distributed teams) and affirms my belief that these tools will in fact be the catalyst for evolutionary change in the very structure and model of these organizations.

I think IBM emphasized the right initial pieces. Profiles allow for quickly finding each other, cultivating the “human element” and allowing for personal social networking. Communities are the logical extension, allowing for public networking and participation, around common interests, issues and ultimately projects. Blogs make it easy for everyone to share their own stuff and follow that of others, while allowing for rich dialogue. Bookmarks exposes and enables interaction around the things people are finding interesting, namely material across the web. What they call Activities sounds like a way of aggregating all this stuff and giving it context, allowing for clean and comprehensive views of all the information that’s relevant. Those are key components in any real collaboration environment.

I’m sure they’ve got more planned. Instant messaging, another important component even at present, is notably absent from the press release, as is collaborative authoring (wikis). However, I’m sure there are plans for these, and they’re certainly staying on top of the bleeding edge. An excerpt from this IBM interview reflects that:

Currently we’re working on a project that leverages societal intelligence, and we have a prototype called sense.us. This is a Web site that combines information visualization with social software, enabling collaborative visualization by groups of users. Interactive visualizations of United States Census data yield insights into the structure and evolution of American society over the last 150 years. Through discussion forums, graphical annotations and linking between related views, people can discover and point out interesting findings, share possible explanations, and ask questions. The result is a process of social data analysis that speeds and increases insights and provides visualizations people can share.

I particularly like hearing that. We did much research here on group decision making and reaching a consensus en mass (funny, we had thrown around a similar name for that component). I believe it’s an important component, especially with large collaborations.

IBM”s success will depend on how good the actual user experience is and if they manage to expand beyond the market of traditional enterprises using what are arguably legacy products from IBM. As this article notes, IBM isn’t exactly considered hip and innovative, especially amongst the market that is increasingly adopting slick collaboration apps like Zoho, Socialtext, and Google’s various offerings. On the other hand, IBM is articulating an overarching strategy in the space where others haven’t (including Google). Still, I don’t think the market will turn to “old school” vendors like IBM for their social software, even if its for business.

At Woven, we’re pushing to build a platform for distributed work — in our own way and with our own strategy. We’ve taken a bet on open source, specifically the Drupal platform, attempting to strategically build off that. I’ve been advocating amongst the community for pushing Drupal towards being a full-fledged collaboration environment, and I think this news from IBM should serve to remind people that this is really where it’s all going. Drupal’s founder Dries Buytaert expressed similar sentiments, proclaiming “bring it on, IBM!” and he noted that IBM has failed in the past by not embracing an open source alternative.

My overall take away is that it’s good news for the space, and shows the market is moving in the right direction. I’ll end with this factoid from IBM’s own press release:

According to the industry analyst firm Forrester, social software tools will become so much a part of the fabric of an enterprise’s collaborative environment that it will be like air — enterprises won’t be able to imagine life without it. Further, according to Forrester, the demand for social software tools is growing with usage rates of social software services almost doubling between 2005 and 2006.

We’re just getting started.

Where do you think these tools are headed? What do you think is needed? What do you think this means for you or your organization?

Jan 30 2007
Jan 30

Following along with the fresh release of Drupal 5.1, I upgraded this site shortly. There are two pages of minor bugs fixed, along with a Comment module vulnerability patched. There seems to be no database scheme changes when compared to Drupal 5.0.

Jan 30 2007
Jan 30

Now that I've worked on a few projects with Drupal v4.7, I have to say that I'm impressed as all get-out with it. Personally, I can't think of any reason not to use it on a majority of projects. But Drupal is my personal preference, and I'm not sure it would be the best one for everyone. Movable Type and WordPress are two of the most popular blogging systems. Although they can be used for other types of sites, they were specifically designed for weblogs. Their functionality and features are limited. But what they do, they do very well. For simple sites or weblogs, MT and WP are fairly quick and easy to set up. On the other hand, Drupal is a powerful publishing platform that can be used for everything from e-commerce sites to portals to intranets. It can also be used for blogging—in fact, multiple user weblogs are a default option. I have to admit that running a one-person blog with Drupal is a bit like going after a gnat with a bazooka. But some people like that kind of firepower. For them, the complexity and difficulty of running Drupal is more than rewarded by its versatility. Indeed, for some Drupaliers, developing the necessary skills is a reward in itself. At present, MT and WP are the "point-and-click instamatics" of weblogging software—Drupal is more for those who have their own darkroom in the basement. And this is unfortunate. Drupal is far superior software, and the lure of cool new features could make developers out of a whole generation of otherwise uninitiated users. In addition, the funding that comes with popularity wouldn't hurt Drupal, either. But Drupal will never be widely used outside the development community until it becomes easy enough to install to appeal to the "point-and-click" crowd. I've heard rumors that more custom distributions like CivicSpace and DrupalED may be coming from Drupal developers. With more preconfigured distributions with very good documentation, Drupal could well give MT and WP a run for their money.

Jan 23 2007
Jan 23

Freelancers Union is an organization that aims to represent America’s growing independent workforce. Focusing first on New York, the organization primarily offers group-rate health insurance (as it has done for years now) and is expanding with other kinds of coverage across the US. They also advocate for political change, focusing on issues of concern to independent workers — issues like double taxation (when you’re both an employer and an employee), limited access to health insurance, retirement savings options, employment laws, and legal redress for non-paying clients. They provide important information and facts about New York’s independent workforce, publishing frequent reports and studies. They’ve started a number of educational events and networking opportunities catered to freelancers. They operate a basic, free community web site that lets members post and search for freelance gigs, share information amongst each other, and generally interact.

I first discovered Freelancers Union via their advertising campaign on the New York City subway system. “Member profiles, post gigs, find jobs”, the wall ads announced. “It’s like one, giant octopus”, one of the ads proclaimed, and I took to the message. I immediately recognized it as something in the same vein as what I’m doing here. Woven is all about supporting the geographically distributed workforce, while Freelancers Union seemed to be addressing the “independent” workforce locally in New York.

Within days of creating my profile on the site, I was contacted by a member about some work on a “large social networking site”, I declined the specific work, but I offered a quick suggestion about Drupal as the platform of choice for these things. I was brought in to their award-winning web agency in SoHo to discuss their strategy and ended up working with them part-time for over a month, in a capacity like that I haven’t chose to work in since moving to NY two plus years ago. I thought the gig would go longer, but the project was “shifting” sooner than expected and the client was gearing up (or down) to set up an internal team. (They ended up not going w/ Drupal, by the way.)

While on that gig, I attended a round-table discussion with the founders of Freelancers Union and a handful of other members, over lunch at the Andy Warhol Foundation (there were real Warhols on the walls). The organization wanted to hear from their members what types of concerns they had and what they felt the organization should be addressing. I shared my thoughts on better tools for community interaction and collaboration, including resource directories for things like lawyers and accountants that understand the needs of freelancers, as well as campaigns to better spread awareness that the independent workforce is very real, very viable, and a credible part of the future of work. I applaud Freelancers Union for engaging in a meaningful dialogue with their community, and it looks as if they’re serious about incorporating the feedback into the organization’s strategy.

Freelancers Union is already entrenched in offering insurance and in organizing political advocacy in the state, while their global strategy has yet to be articulated and their community (as yet to be collaboration) tools have yet to demonstrate a strong direction. I gently offered my counsel with this latter aspect in response to their own request at the meeting, but haven’t heard back. I’d certainly be interested in keeping an open channel in general. My specific thoughts in regards to what they’re doing have to do with bettering the abilities for members to interact, come together, and collaborate — for their independent endeavors and towards Freelancers Union’s goals as an organization. It all comes down to the technology — big member photos, easy and accessible communication options (chat, forums, wikis), group workspaces (with issue and time tracking, document storage), and more — and keeping it simple, fast, friendly, and cleanly and strategically integrated. “Easy as Google” seems to get my point across most times.

Here are some interesting factoids about independent workers in New York, taken from a recent Freelancers Union report (PDF):

  • 92% are registered voters; 90% have voted in a recent election.
  • 1/3rd have saved less than $1K towards retirement; 1/2 less than $10K.
  • 39% lacked health coverage at some point in the past year. I’d imagine that number’s higher where respondents don’t know about FU’s coverage.
  • 37% reported periods of unemployment. Here, too, seems like it’d be higher in certain circles — freelancers often go from gig to gig.

A recent report (PDF) by the city of New York cites self-employment as that which is fueling the city’s job growth boom.

I’ve always maintained that the long term vision with Woven involves addressing the very real issues facing the geographically distributed workforce beyond just the technology itself, and a first step is culling information like the above on a global basis. While Freelancers Union is primarily addressing independent workers in New York, and their tact seems to be in pooling people together to demand change, the issues are largely the same. Of course they are harder to home in on and address when dealing with international differences and other issues implicit when spanning multiple geographies, cultures and jurisdictions. It’s certainly a long term vision, and we have our work cut out for us, but I believe in our strategy and where we’re slowly beginning. Interested in being a part?

Freelancers Union is definitely an organization to watch, and I’ll be sharing more as I’m able.

Jan 22 2007
Jan 22

Funnily enough, my recent post about wishes for Drupal happened just before discussion started afresh on the recurring "everything-as-a-node" theme, in which I seem to have been played the re-animator part this time.

Thinking deeper upon this issue, I figured it would be interesting to see where Drupal stands currently (in D5) regarding the reularity and orthogonality of the hook system and most visible content-related entities: nodes, comments, terms, vocabularies, and node types.

The resulting table is attached to this post (OpenDocument format), and shows some interesting results:

  • from CRUD events, Create/Update/Delete have hooks for most content entities, while Retrieve is only hooked for nodes, while retrieval functions for other types are not hooked.
  • the hook system for nodes is overdeveloped when compared with other entites
  • there is not always a clear-cut distinction on the "before/during/after" sequence of events in the existing API documentation : developers have to rely on code reading,

It certainly looks like unification could indeed bear fruit, in terms of simplifying the API for contrib developers and possibly even make core simpler, but this might well be along the "everything except nodes is an evolved CRUD entity, and nodes are this, plus something else" than along the usual "everything is a node" original line.

The other tentative conclusion is that we contrib coders would certainly benefit from having a system in which hook sequences in high-level events like an insert are actually specified, clearly defining the "before vs after" role of the hooks and removing the "during" role.

Of course, I don't work a lot on core, rather with it for contrib modules, so this table almost certainly contains errors and maybe missing hooks in the first version attached to this post. If it is found to be of interest to other devs, it can obviously be turned into a handbook page once it is corrected (I've placed it under CC BY 2.0 so Drupal.org can use it without problem).

So, without further ado, fire up your spreadsheet, and look at that table.

2007-01-23: update. Page is now on d.o. as node 112180, awaiting publishing and "full HTML" filter to display properly as a table.

Jan 19 2007
Jan 19

A while back we created an LDAP directory to consolidate account information for various back-room services, and when we created it we decided to use the individual’s e-mail address as the account identifier (uid in LDAP-speak). It seemed like the logical thing to do — it is something that the user knows and it is a cheap and easy way to assume that the account identifiers will be unique. This is not uncommon for many internet services, of course.

Now we’re bring up a Drupal content management system and of course want to tie the authentication into the existing LDAP directory. The initial configuration appeared to work, but there were odd, unexplained failures — most notably, Drupal would not consider it a ‘real’ account because it didn’t have an e-mail field. Even weirder was the fact that we configured Drupal to know exactly which LDAP attribute to use as the e-mail address (mail, in LDAP-speak). It wasn’t until one of our system engineers wondered out loud if the at-sign (‘@’) in the user id wasn’t causing problems that we started making progress towards a solution.

As it turns out, he was right. Without spending so much time in the guts of the Drupal code to know exactly if this is true, it seems like Drupal wants to reserve the ‘@something‘ construct for inter-Drupal authentication. In other words, if you have an account on one Drupal server (let’s call it DrupalA) and want to access a second (let’s call it DrupalB) — and if the two servers agree to share user accounts — the account from DrupalA would be recorded in the database of DrupalB as “[email protected]“.

The ‘at’ symbol for us, though, is just a normal part of an e-mail address. We really didn’t want to reconstruct our LDAP account scheme, so the best choice seemed to be to find a way to trick Drupal into accepting these account identifiers. This, unfortunately, was no easy task. I couldn’t find the root cause of the problem, but did diagnose enough of the symptoms to force a patch into the system. The patch, in the form of a new module (code included below) forces the account to have two necessary attributes that seem to go missing whenever a ‘@’ character appears in the user id. If you have similar problems, I can’t claim that this will work for you, nor can I guarantee this approach will be supportable in the future. All’s I know is that it seems to work for us in our situation right now.

function olinkldap_help($section) {
  $output = '';
  switch ($section) {
    case 'admin/modules#olinkldap':
      $output = 'olinkldap;
    case 'admin/modules#description':
    case 'admin/help#olinkldap':
      $output = t('Sets up OhioLINK-specific LDAP parameters.');
  return $output;
function olinkldap_settings() { }
function olinkldap_user($op, &$edit, &$user, $category = NULL) {
  switch($op) {
    case 'load':
function olinkldap_user_load(&$user) {
  // Calculate the DN for the user -- you'll need to adjust this to match your LDAP base DN
  $ldap_dn=sprintf("uid=%s,ou=People,dc=somewhere,dc=outthere", $user-&gt;name);
  // Create a new array with the two LDAP-specific values that seem to be missing.
  $forced_data=array('ldap_authentified' =&gt; 1, 'ldap_dn' =&gt; $ldap_dn);
    // It seems like this should work, but it doesn't (it throws a segmentation fault)
    //  user_save($user_edit,array($forced_data);
    // so we're going to interact directly with the database
  if ($user-&gt;uid) {
    // Get the 'data' field for the user and put it in the $data array
    $data = unserialize(db_result(db_query('SELECT data FROM {users} WHERE uid = %d', $user-&gt;uid)));
    // Put all of the attributes from $forced_data into $data
    foreach ($forced_data as $key =&gt; $value) {
      $data[$key] = $value;
    // Reserialize the $data array and update it in the database
    $v[] = serialize($data);
    db_query("UPDATE {users} SET data='%s' WHERE uid=%d",array_merge($v,array($user-&gt;uid)));

&lt;?phpfunction olinkldap_help($section) { $output = ''; switch ($section) { case 'admin/modules#olinkldap': $output = 'olinkldap; break; case 'admin/modules#description': case 'admin/help#olinkldap': $output = t('Sets up OhioLINK-specific LDAP parameters.'); break; } return $output; }function olinkldap_settings() { }function olinkldap_user($op, &$edit, &$user, $category = NULL) { switch($op) { case 'load': olinkldap_user_load($user); break; } }function olinkldap_user_load(&$user) { // Calculate the DN for the user -- you'll need to adjust this to match your LDAP base DN $ldap_dn=sprintf("uid=%s,ou=People,dc=somewhere,dc=outthere", $user-&gt;name);// Create a new array with the two LDAP-specific values that seem to be missing. $forced_data=array('ldap_authentified' =&gt; 1, 'ldap_dn' =&gt; $ldap_dn);// It seems like this should work, but it doesn't (it throws a segmentation fault) // user_save($user_edit,array($forced_data); // so we're going to interact directly with the database if ($user-&gt;uid) { // Get the 'data' field for the user and put it in the $data array $data = unserialize(db_result(db_query('SELECT data FROM {users} WHERE uid = %d', $user-&gt;uid))); // Put all of the attributes from $forced_data into $data foreach ($forced_data as $key =&gt; $value) { $data[$key] = $value; } // Reserialize the $data array and update it in the database $v[] = serialize($data); db_query("UPDATE {users} SET data='%s' WHERE uid=%d",array_merge($v,array($user-&gt;uid))); } } ?&gt;

Save this as ‘olinkldap.module’, update the DN to reflect your LDAP server’s base DN (see comment in code), copy it into your Drupal modules directory, and activate it. Your ‘@’-impaired userids should start working again. If you are using the inter-Drupal account sharing (we’re not) this might break something for you. That’s not interesting for us, so I’m not testing it against that condition. If you use this and find that it works or doesn’t work, or you have a better way of solving the problem, please leave a comment or traceback…

Jan 19 2007
Jan 19

As I grow more and more liking on Drupal, I decided to truly integrate my WordPress-powered blog with my main site. This is quite challenging, since database schemas differ between different content management systems.

With the wp2drupal module, this can be easily achieved, and the only thing that matters would be how much would be migrated. My case was a pretty exceptional one, since I maintain the WordPress blog on a different subdomain with customized permalinks.

I chose to migrate the blog posts into story nodes to further integrate and blur the line between a real site and a blog. In the end, I ended up manually migrating those permalinks (which was obnoxious), retagging every post, and getting rid of useless posts.

The earlier you take the jump to switch to Drupal, the easier it'll be, and in the end I learned this the hard way by migrating from WordPress 2.0 to Drupal 5.

Jan 15 2007
Jan 15


Blog Tags

Latest image

2.5" SATA disk

Recent comments

My identi.ca posts

My Other Sites

Creative Commons


Subscribe to my blog (RSS 2.0)! 
Subscribe to my blog comments (RSS 2.0)!

Subscribe to my podcast! 
Subscribe to my podcast in iTunes!

Subscribe to my photoblog (RSS 2.0)!


Ohloh profile for Uwe Hermann More statistics.

Six Years

Interesting day.



Latest image

2.5" SATA disk

Recent comments

My identi.ca posts

My Other Sites

Creative Commons


Subscribe to my blog (RSS 2.0)! 
Subscribe to my blog comments (RSS 2.0)!

Subscribe to my podcast! 
Subscribe to my podcast in iTunes!

Subscribe to my photoblog (RSS 2.0)!


Ohloh profile for Uwe Hermann More statistics.


Interesting day.

Syndicate content
Jan 15 2007
Jan 15

The release of Drupal 5 today comes at a time of the year where one makes wishes, and obviously I wish the best for Drupal, be it for our new production workhorse Drupal 5, or its hardly conceived descendant Drupal 6.

So while there's still time for wishes in Drupal 6, here is a selection of three grand wishes :

  • the recurring comments-as-nodes, users-as-nodes, projects-followups-as-comments[-as-nodes] should iterate once more, combine with terms-as-nodes as in Category.module, and give us a unified model with unified hooks. After all, what's so different between loading a term, a user, or a node, when one forgets the code for a second and thinks of the grand schema of things ? Each of these is created is a CRUD object of a sort or another, and generic hooks could be used for creation(hook_insert), retrieved (hook_load), updated (hook_update), deleted (hook_delete), instead of having these hooks PLUS hook_user, and hook_taxonomy.
  • with larger Drupal sites becoming commonplace, logging becomes more important. A unified logging API could be created to unify the various logging bits like accesslog, watchdog, or the zeitgeist search log (OK, this was in my battle plan for 5.0, and I could never find the time to write it, but who knows...)
  • I finally manage to code something remotely useful for core. Or is that one really too far-fetched ?
Jan 15 2007
Jan 15

After 8 months of development we are ready to release Drupal 5.0 to the world. Today is also Drupal's 6th birthday, so the timing could not be more perfect. Drupal 4.0 was released in 2002 and finally we feel confident to increase the major version number from 4 to 5.


There are improvements in the install, the administrative UI ...

It is a bit scary under the hood.

Garland is simply gorgeous.

Jan 14 2007
Jan 14

The upgrade went quite nice, even though I had to upgrade several modules and port quite a bunch of custom hacks I had on my old (Drupal 4.6) site. I first upgraded to 4.7, then to 5.0 (as is the recommended procedure) on a test-site, and after figuring out how to fix or work-around all the issues that appeared, I upgraded the live site.

I password-protected the site during the upgrade, that's why it wasn't available for a while today (and caused some problems on Planet Debian it seems, sorry for that!).

New features you might enjoy:

  • Every blog post, podcast entry, and photo/image has an AJAX-enabled voting/rating box now, thanks to the nice jRating module. Feel free to rate any content over here, I'm eager to know what you think.
  • The Service links module provides those tiny images in each post, which allow you to submit the post to del.icio.us, Digg, etc. etc. with a single click.
  • I now use the great new standard Drupal-Theme Garland with a custom color map. I really like it.
  • Tons of small changes here and there, removing custom hacks which are now obsoleted with the new Drupal release, shuffling some menus around etc. etc.

If you notice any bugs or problems with the site, please let me know.

Jan 02 2007
Jan 02

Lisa Light, Ltd. Website

Isn't she cute....so far. She's not done.

This is my first offering based on Drupal 5.0RC1. It sports the contributed Image module and the Front Page module but not much else that isn't core.

How was my experience as a web developer different as a result of using the newest version of Drupal?

I can honestly say that I saved myself 2 or 3 hours of labor just in the initial setup of the website. (No more going over budget for free? she wonders...) Firstly, I didn't have to PuTTY in to setup the database. Neither did I have to install phpMyAdmin or the DBA module to install tables for other modules.

Block Title ConfigA pet peeve: I didn't have to screw around to get block titles to be in title case. I could change them to anything I wanted. Yippee!

It's the little things in life, ya know...

Jan 02 2007
Jan 02

Demand for Drupal related services is increasing exponentially, as is evident from the increase in inquiries at my website this past year. Unfortunately, it seems the availability of Drupal related services are not increasing to match.

I had one especially hell-ish project this year because I was not able to find a developer to help me with some modifications. The reasons ranged from:

  • Unfamiliarity with the module(s) involved
  • Got a new day job and didn't have time
  • $5K minimum - or MORE
  • Just plain busy

I am hoping this is a fluke or a side effect of the modules I was using. Let's just say that I am not jumping at any OG projects any time soon.

Jan 02 2007
Jan 02

I have been extremely busy this past year with business as usual and various health issues including the premature birth (29 weeks) of my daughter. I got a chuckle out of one of my "recent" posts on Drupal 4.7. Obviously, I am NOW looking forward to Drupal 5.0 and leaving 4.7 in the dust.

Cool stuff:

  • Installation script - duh!
  • One theme - multiple color schemes
  • Instant content types
  • New block config options
  • Module un-installation

Not so cool:

  • Administration Page - I still can't get around this one even with running several test sites. I'm not sure how all of the nesting and categorization is better than a simple hierarchical list.
Dec 21 2006
Dec 21

For a long time I've wanted to move my blog from MT over to Drupal, and last week I finally started the process. As a result, this site is a mess. I hope you'll bear with me as I figure out how to move all the old content over and get the site running again.

Working with Drupal has been more fun than I've had in a long time. It's just so flexible and there are so many yummy modules to choose from. I feel like a kid in a candy store each time I go to the Drupal site. Which goodie will I try today? I've been a fan of Drupal since I first tried v4.5, but I haven't had an opportunity to work much with it since then. Now that our ASU web team is recommending Drupal for university use, I finally get to play with it again. And man!, 4.7 was a wonderful surprise. There has been lots of development in older modules, the appearance of some amazing new modules, and perhaps most encouraging of all, the consolidation of small related modules into larger and much more functional modules. Drupal is growing up. And while I still think it has a ways to go to be a fully mature program, it is already one of the very best CMS out there. It's nice to be back.

I recently switched to Drupal myself. I found it was a lot easier to manage my content,posts, and pages as opposed to Wordpress. Especially since 3 months ago I didn't even know what a blog was!

Ted Carroll | Personal Loans Officer / Author of Live Debt Free at Amazon.com.
Capital-Credit.com | 1-877 532 2149 #ext 6031
Your Bad Credit Personal Loan Specialist Since 1999

Nov 25 2006
Nov 25

I began the Devbee website back in March as a way to help others by way of documenting what I have learned about Drupal and also to drum up a little bit of business for myself. The content of this site is extremely targeted, and I don't ever expect to see more than a few hundred visits a day. This definitely does not reflect the expectations, or at least hopes, of most website owners. It's typically all about bringing in as many visitors as possible to generate money through advertising or purchases. Sites interested in bringing in large numbers of visitors typically do this by spending a lot of time focusing on "search engine optimization" (SEO). Absolutely nothing can drive traffic to a site like a top placement in the search results on one of the major search engines.

Back in the day (way back during the last millennium), all one needed to do was have a simple HTML page containing relevant words or phrases and he was fairly likely to make a decent showing in results pages. In fact, this is exactly how I shifted from studying literature to building websites. I built my first homepage (don't laugh!) for fun. It was found by an employer, and I got a cool job at a major search engine. Today, it is not so simple.

Fortunately for us, as Drupal users, we have a secret weapon, Drupal itself. Drupal SEO does not require any witchcraft or elaborate HTML trickery. It's simple, and in this article, I'm going to explain how I get consistent premium search placement with very little effort.

Stumbling upon Drupal SEO

Today I discovered that an article I wrote recently is the top result for the query "opcode cache" on Google. I almost feel guilty about it. There are countless pages out there with much more information on the topic than my article, yet I'm at the top. I guess I'll just have to deal with it.

This is not unusual. I find myself on "the first page" of many searches for terms relevant to my site. And when I'm not seeing a premium placement (top-ten), it's either because the search term is very broad (e.g. "Drupal") or there are simply much more relevant pages pushing my placement down. Just like the old days.

And more than half of my very modest traffic comes through these search results.

What's the Secret?

Now comes the mysterious part. I make no claims of expertise in the area of SEO. It's mostly voodoo as far as I'm concerned. The search engines are necessarily very secretive about their methods, trying to stay ahead of search engine spammers. And what works today may be detrimental tomorrow. What I'm going to describe below is entirely based on my own, very subjective, experience with various techniques and modules. These are the things that I believe are resulting in my accidental SEO success.

Drupal SEO

Drupal itself is well-known for its search-engine friendliness. Its markup is clean and standards-compliant. It creates all the tags the engines are looking for. And unlike so many other CMSs, Drupal creates search engine friendly URLs. Using Drupal is the first step in this process, but presumably you're already doing this, so let's move on.

The Right Path

Here's an example of the URL to a Joomla forum topic: http://forum.joomla.org/index.php/topic,65.0.html

And here's an example of a URL to a Drupal forum topic: http://drupal.org/drupal-5.0-beta1

Do you notice a difference? Can you tell me anything about the Joomla article without going to the page? In fact you can, sort of: you might conclude that the page covers a topic, a fact of dubious value. The URL really provides no useful information to you. Nor does it provide anything useful to a search engine. This is key. Unless you're searching for "index topic 65.0 html", this URL isn't going to help you find the information on this page.

Looking at the Drupal URL is another story. Based on that URL, one can assume that it has something to do with "drupal 5.0 beta1", and so can a search engine. If that's what you're looking for, this page will come up #1.

Most SEO "experts" agree that the search-engine-friendly URLs are critical to a page's search ranking.

Drupal allows you complete control of the path of any page. Creating short, clean and informative paths will improve your rankings. And the Pathauto module automates the process of generating relevant paths. But be extremely careful when experimenting with Pathauto, particularly on sites with existing content. Using Pathauto without first understanding how to use it properly can result in all of the URLs on your site changing, and thereby breaking existing links to your content. If you are going to introduce Pathauto on an existing site, play it safe and enable the Create a new alias in addition to the old alias option in Pathauto's settings. But keep in mind that having multiple URLs pointing to the same page on your site may result in a search engine penalty for "duplicate content".


Sitemaps are an easy way for webmasters to inform search engines about pages on their sites that are available for crawling. In its simplest form, a Sitemap is an XML file that lists URLs for a site along with additional meta data about each URL (when it was last updated, how often it usually changes, and how important it is, relative to other URLs in the site) so that search engines can more intelligently crawl the site.

I've seen no solid evidence that implementing a sitemap will directly improve search rankings. However, even if search engines do not use your sitemap to to adjust the ranking of your pages (which I doubt), it does help them more efficiently index your site, thereby increasing the likelihood of your pages being included in search results. This one's a no-brainer.

Sitemaps would be virtually impossible to maintain by hand. And this is where the excellent XML Sitemap (formerly Google sitmeap) module comes in. Installing this module is simple and comes with reasonable default settings that don't require changing unless you want to fine tune your sitemap. After you've installed and enabled this module, you'll need to tell search engines about your sitemap. At this point, I'm only familiar with Google Sitemaps, Though other major companies are beginning to adopt this concept as an new open standard.

Leaving Comments

Another common method used by search engines to determine the importance of your pages is the number of other sites that link to them. A simple way to continually promote your site while helping improve your search rankings is to make regular comments on other sites like Drupal.org. Take the time to create an account on sites similar to yours and complete your public profile. Then leave useful comments where appropriate. Do not post comments simply to include a link back to your site. This is in very poor taste and may get you blocked. Instead, post comments where you have something to contribute to the topic being discussed. If you have nothing useful to add, don't post a comment. I'm a regular participant over at Drupal.org, and I'm confident this helps the "relevance" of my own site.

Page Title

By default, Drupal will use the title of your node as the page HTML title (the bit that appears in the <title></title> tags of the HTML and shows up in the title bar of your browser). This is very reasonable behavior. However, if you want to give your page that extra SEO boost, you may want to allow for two different page titles, one that appears at the top of the page in <h1> tags and the other that appears in the head of the HTML document in the <title> tag. the <h1> and <title> tags are both pieces that search engines will consider when reviewing your page. If they are identical, you're missing out on an opportunity to further promote the page!

So how do you manage to control the <title> tag contents if Drupal automatically sets it based on the node title? The Page Title module does this. Install and enable this module, and you will see an additional field on the node edit form called "page title". Use this field to configure the phrase that you think will most likely attract users to the page. Use something eye catching and alluring, something the user will feel he has to read. If you're writing about an article you found on another site, don't title the page "cool link!", instead, something more enticing: "Fascinating study of the Indonesian spotted tadpole". Follow that up with a relevant <h1> title: "National Geographic looks at one of nature's most mis-understood wonders".

The Prophecy

Search result placement was not a top concern of mine when I built this site. But it has become a bit of an obsession now. I have no need to drive thousands of visitors seeking information on opcode caching to my site, but hitting that number one position for a query is a bit of a rush! Thanks Drupal!

Lastly, I asked myself a question as I wrote this article: Is there anything at all to what I'm saying? Well, I think there is, and I'm willing to make a bold prediction based on this belief. Within three days of posting this article, I believe it will appear in the top-ten search results for "Drupal SEO" on Google. If I'm right, that should serve as some pretty solid evidence that there's something to all this. There are currently 1,090,000 pages competing for placement in this results page. The odds of making it into the top-ten by shear luck are 1 in 109000.

And if I'm wrong, well, I can always come back and edit out this prediction to save face %^)

The Revelation

Update: Mon Nov 27 23:19:42 2006

A search for "Drupal SEO" now shows this article as the second result out of 1,080,000 pages. I come in just below an article on Drupal.org.

So as you now see, there is not a lot of work involved in getting premium search placement if you are using Drupal. Of course, the broader your topic, the more difficult it will be to hit the top-ten. While you can almost certainly hit number one for surfers searching for a certain rare antiquity, your less likely to see much success attracting surfers hunting for the term "sex".

Nov 16 2006
Nov 16

Until the mid 90s, spam was a non-issue. It was exciting to get email. The web was also virtually spam-free. Netizens respected one another and everything was very pleasant. Spam Those days are long gone. Fortunately, there are some pretty amazing tools out there for fighting email spam. I use a combination of SpamAssassin on the server side and Thunderbird (with its wonderful built in junkmail filters) on the desktop. I am sent thousands of spam messages a day that I never see thanks to these tools.

But approximately five years ago, a new type of spam emerged which exploited not email but the web. Among this new wave of abuse, my personal favorite, comment spam.

I love getting comments on my blog. I also like reading comments on other blogs. However, it's not practical to simply allow anyone who wants to leave a comment, as within a very short period of time, blog comments will be overrun with spam generated by scripts that exploit sites with permissive comment privileges. To prevent this, most sites require that you log in to post a comment. But this may be too much to ask of someone who just wants to post a quick comment as they pass through. I often come across blog postings which I would like to contribute to, but I simply don't bother because the site requires me to create an account (which I'd likely only use once) before posting a comment. Not worth it. Another common practice is the use of "captchas" which require a user enter some bit of information to prove they are human and not a script. This works fairly well, however, it is still a hurdle that must be jumped before a user can post a comment. And as I've personally learned, captchas, particularly those that are image based, are prone to problems which may leave users unable to post a comment at all.

As email spam grew, there were various efforts to implement similar types of protection, requiring by the sender to somehow verify he was not a spammer (typically by resending the email with some special text in the subject line). None of these solutions are around anymore because they were just plain annoying. SpamAssassin and other similar tools are now used on most mail servers. Savvy email users will typically have some sort of junkmail filter built into their email client or perhaps as part of an anti-virus package. And spam is much less a nuisance as a result.

What we need for comment spam is a similar solution. One that works without getting in the way of the commenter or causing a lot of work for the blog owner. Turn it on, and it works. I've recently come across just such a solution for blogs which also happens to have a very nice Drupal module so you can quickly and easily put this solution to work on your own Drupal site.

Enter Akismet

It's called Akismet, and it works similarly to junkmail filters. After a comment (or virtually any piece of content) has been submitted, the Akismet module passes it to a server where it is analyzed. Content labeled as potential spam is then saved for review by the site admin and not posted to the blog.


Akismet follows my absolute favorite pricing model. It's free for workaday Joes like me and costs money only if you're a large company that will be pumping lots of bits through the service. They realize that most small bloggers are not making any money on their sites, and they price their service accordingly. Very cool.


In order to use Akismet, you need to obtain a Wordpress API key. I'm not entirely sure why, but it is free and having a collection of API keys is fun. So get one if you have not already.

The Akismet Drupal module is appropriately named Akismet. It's not currently hosted on Drupal.org, but hopefully the author will eventually host it there as that is where most people find their Drupal modules. Instead, you will need to download the Akismet module from the author's own site. The installation process is standard. Unzip the contents into your site's modules directory, go to your admin/modules page and enable it. There is no need for additional Akismet code as all the spam checking is done on Akismet's servers.


After installing Akismet, I was immediately impressed at how professional the module is. There were absolutely no problems after installation. Configuration options are powerful and very well explained. The spam queue is very nice and lets you quickly mark content as "ham" (ie not spam) and delete actual spam. As you build up a level of trust with the spam detection, you can configure the module to automatically delete spam after a period of time.

Spam filtering can be enabled on a per node type basis, allowing you to turn off filtering for node types submitted by trusted users (such as bloggers) and on for others (eg forums users). Comment filtering is configured separately.

Another sweet feature is the ability to customize responses to detected spammers. In addition to being able to delay response time by a configureable number of seconds, you can also configure an alternate HTTP response to the client, such as 503 (service unavailable) or 403 (access denied). Nice touch.

One small problem

I've only been working with Akismet for several days now. And I'd previously been using captcha, which I imagine got me out of the spammers sights for a while (spammers seem to spend most of their efforts on sites where their scripts can post content successfully). So far, Akismet has detected 12 spams, 2 of which were not actually spam. These were very short comments, and I imagine Akismet takes the length of the content into consideration. I assume that as the Akismet server processes more and more pieces of content, it will become more accurate in picking out spam versus legitimate content. Each time a piece of flagged content is marked as "ham", it is sent to Akismet where it can help refine their rule sets and make the service more accurate.

Perhaps Akismet could provide an additional option that allows users to increase or decrease tolerance for spam. I would prefer to err on the side of caution and let comments through.

Nov 15 2006
Nov 15

Tailing my error log, I kept coming across annoying errors like this:

[Mon Nov 13 21:14:49 2006] [error] [client xx.xxx.xxx.xxx] PHP Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in /path/to/drupal/includes/database.mysql.inc on line 350, referer: http://www.example.com/node/1234/edit

No matter how hard I tried, I couldn’t reproduce the errors locally, but somehow real users could create them on the live server. I tried to track down the bug but could only go so far – yes, it was happening when a node was edited, and it was in a database query, but which query? There were too many to look at, so I needed more information.

Because I couldn’t reproduce the bug locally, no amount of dprint_r() and such had any effect. Following some advice in #drupal I explored debug_backtrace() and added its output to a custom error log like this:

function mymodule_error($errno, $errstr, $errfile, $errline, $errcontext) {

if (in_array($errno, array(ERR_LOW, E_NOTICE, E_STRICT))) {
$level = false;
elseif (in_array($errno, array(ERR_MED, E_WARNING))) {
$level = ‘WARNING’;
elseif (in_array($errno, array(ERR_HI, E_ERROR))) {
$level = ‘FATAL’;
else $level = ‘UNKNOWN’;

if ($level) {
// don’t log unimportant errors

$functions = array();
foreach (debug_backtrace() AS $errors) {
$functions[] = $errors[‘function’] . ‘:’ . $errors[‘line’];
$trace = join(‘ < = ', $functions);

error_log($level . ' ' . $errfile . ':' . $errline . '. ' . $errstr . '. (' . $trace . ')');

I put the code in a module file, and it didn’t work… an hour of hair pulling later I found the culprit to be devel.module:

function devel_init() {

… this was undoing my error handling setting, so I had to comment out the restore_error_handler() line and my error handler took centre stage.

With the new code live, I just waited a few hours until the bug showed up again – this time, with extra backtrace information to help me debug:

[Tue Nov 14 18:13:14 2006] [error] [client xx.xxx.xxx.xxx] WARNING /path/to/drupal/includes/database.mysql.inc:350. mysql_real_escape_string() expects parameter 1 to be string, array given. (mymodule_error: < = mysql_real_escape_string:350 <= db_escape_string:152 <= _db_query_callback: <= preg_replace_callback:196 <= db_query:1040 <= my_custom_function:659 <= my_nodetype_update:297 <= node_invoke:494 <= node_save:1876 <= node_form_submit: <= call_user_func_array:206 <= drupal_submit_form:132 <= drupal_get_form:1620 <= node_form:2093 <= node_page: <= call_user_func_array:418 <= menu_execute_active_handler:15), referer: http://www.example.com/node/1234/edit

So now I knew exactly where the bug was coming from. ‘db_query’ was called on line ‘1040’ of my file, and of the several ways to get into the function in which line 1040 resides, I knew it had come form my_custom_function on line 659.

Armed with this extra information, tracking down the bug was a breeze. Stupidly, I’d forgotten to do a regular expression I was supposed to do on a variable before doing a db_query, meaning arrays which were supposed to be left alone were wandering into the query pretending to be strings.

Share this:

Like this:

Like Loading...
Nov 14 2006
Nov 14

The final result, as voted for by judges from The Open Source Collective, MySQL, the Eclipse Foundation, and 16,000 users on http://www.PacktPub.com saw a tie for first place between Joomla! and Drupal. In the event of a tie, a fourth independent judge would be brought in. This was Apoorv Durga who is a member of CM Pros and runs his own blog http://apoorv.info/ on portals and content management. This crucial vote ended up with Joomla! triumphing over Drupal by one point.

The final result was as follows:

1. Joomla!- $5,000
2. Drupal - $3,000
3. Plone - $2,000

from http://www.packtpub.com/article/open-source-content-management-system-award-winner-announced

As chx says - $3,000 buys a server.

What is more interesting, is what were the criteria for choice/points. This is a ~16000 survey.

Oh, yes, Joomla tribe - well done :).
on drupal.org
on joomla.org

aplology: sorry for the occasional spelling mistake. I might upgrade to ff2.0.

Nov 13 2006
Nov 13

In our effort to give something back to Drupal (the fantastic open source content management framework at the core of AllYearbooks), we’re aiming to make a physical yearbook for members of the worldwide Drupal community.

Presuming all goes to plan and enough people join, the idea is to produce physical copies of the yearbook (as well as allowing PDF downloads). These will be provided free to Dries and the top 10 Drupal contributors. It may also be possible for other interested members to buy a copy, though this book isn’t being run as a money-making venture.

If you’re a Drupal developer or involved in Drupal in some other way, join the yearbook now. It only takes a few seconds to join, and you can come back any time before printing to update your yearbook entry and upload some gallery photos for collages and other such pages.

So far 8 Drupalites have joined the yearbook. We’re hoping for at least 100 members for it to be worth printing.

If you have any suggestions, please get in touch.

Share this:

Like this:

Like Loading...
Nov 13 2006
Nov 13

PHP is an interpreted language. This means that each time a PHP generated page is requested, the server must read in the various files needed and "compile" them into something the machine can understand (opcode). A typical Drupal page requires more than a dozen of these bits of code be compiled.

Opcode cache mechanisms preserve this generated code in cache so that it need only be generated a single time to server hundreds or millions of subsequent requests.

Enabling opcode cache will reduce the time it takes to generate a page by up to 90%.

Vroom! PHP is known for its blazing speed. Why would you want to speed up your PHP applications even more? Well, first and foremost is the coolness factor. Next, you'll increase the capacity of your current server(s) many times over, thereby postponing the inevitable need to add new hardware as your site's popularity explodes. Lastly, high bandwidth, low latency visitors to your site who are currently seeing page load times in the 1-2 second range will be shocked to find your vamped up site serving up pages almost instantaneously. After enabling opcode cache on my own server, I saw page loads drop from about 1.5 seconds to as low as 300ms. Now that's good fun the whole family can enjoy.

Opcode Cache Solutions

There are a number of opcode caching solutions. For a rundown on some of them, read this article. After a bit of research and a lot of asking around, I concluded that Eaccelerator was the best choice for me. It's compatible with PHP5, is arguably the most popular of its kind, and is successfully used on sites getting far more traffic than you or I are ever likely to see.

Implementing Eaccelerator

This is the fun and exciting part. Implementing opcode cache is far easier than you might imagine. The only thing you'll need is admin (root) access to your server. If you're in a shared hosting environment, ask your service provider about implementing this feature if it is not in place already. These instructions apply to *nix environments only.

Poor Man's Benchmarking

If you would like to have some before and after numbers to show off to your friends, now is the time to get the 'before' numbers. Ideally, you will have access to a second host on the same local network as your server so that the running of the test does not affect the results. For those of us without such access, we'll just have to run the test on the actual webserver, so don't submit these results in your next whitepaper:

Apache comes with a handy benchmarking tool called "ab". This is what I use for quick and dirty testing. From the command line, simply type in the following:

ab -n 1000 -c 10 http://[YOURSITE.COM]/

Here is a portion of the results I got on my own test:

    Concurrency Level:      10
Time taken for tests:   78.976666 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      13269256 bytes
HTML transferred:       12911899 bytes
Requests per second:    12.66 [#/sec] (mean)
Time per request:       789.767 [ms] (mean)
Time per request:       78.977 [ms] (mean, across all concurrent requests)
Transfer rate:          164.07 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    7  51.3      0     617
Processing:    77  725 1704.4    300   21390
Waiting:        0  673 1697.5    266   21383
Total:         77  732 1706.2    307   21390
Percentage of the requests served within a certain time (ms)
50%    307
66%    468
75%    625
80%    639
90%    805
95%   3808
98%   6876
99%   8529
100%  21390 (longest request)

The single most useful number is 'Requests per second', which in my case was 12.66.

Download, Build and Install

First, download the source code.

Get it to your server and do the following (I'm assuming you have gcc on your system, if not, get it):

tar jxvf  eaccelerator-0.9.5.tar.bz2
cd eaccelerator-0.9.5
make install

Configure Apache and Restart

If you have an /etc/php.d directory, create the file /etc/php.d/eaccelerator.ini for your new settings. Alternatively, you can put them in your php.ini file. Your configuration should look something like this:

eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
; eaccelerator.allowed_admin_path = "/var/www/html/control.php"

Adjust values according to your particular distribution. For more details on configuring eaccelerator, see the settings documentation.

See Eaccelerator in Action

The value eaccelerator.allowed_admin_path, if enabled, should point to a web accessible directory with a copy of 'control.php' (which comes with the eaccelerator source code). Edit this script, changing the username and password. You can then access this control panel and see exactly what eaccelerator is caching

See the results

After enabling Eaccelerator on devbee.com, I ran my benchmark again, and here are the results:

    Concurrency Level:      10
Time taken for tests:   10.472143 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      13129000 bytes
HTML transferred:       12773000 bytes
Requests per second:    95.49 [#/sec] (mean)
Time per request:       104.721 [ms] (mean)
Time per request:       10.472 [ms] (mean, across all concurrent requests)
Transfer rate:          1224.30 [Kbytes/sec] received
Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       4
Processing:    20  103  52.1     96     345
Waiting:       17   92  50.1     83     342
Total:         20  103  52.1     96     345
Percentage of the requests served within a certain time (ms)
50%     96
66%    122
75%    137
80%    147
90%    176
95%    201
98%    225
99%    248
100%    345 (longest request)

We are now serving up 95.49 requests per second. That's 754% increase in server capacity. Had I been able to run the tests from another machine on the same network, I believe the numbers would be even more dramatic.

Nov 07 2006
Nov 07

[[http://fsfeurope.org|FSFE]] started drm.info - a collaborative information platform. Collaborative + information => Drupal. Obviously the designers/developers though so.

While on the topic of DRM - you could check (yes, you Apple fans and iTunes addicts, I'm looking at you, and I'm not blinking) the Deffective by Design campaign. Looks like it has been drupal fueled as well.

If you are inspired, feeling lazy yet subversive, you could tag appropriate, that is products encouraging/using DRM (Digital Restrictions Management) with the defectivebydesign tag on amazon.

If you are not that lazy, you could make noise, spread the word, basically do something.

Nov 01 2006
Nov 01

Sweet. Really. There are not too many big changes, but funnily enough they are felt more than previous betas/pre-releases.

First you are struck with the really nice, simple, stylish, cute, add your own epithet default theme - Garland. You can modify the colour scheme online. So palette builders enjoy and share.

Kudos to the reorganised admin pages and everyone involved in that. At first glance it is allright.

The infamous cck and views leave a lot of traces in core.

All I can say it took me between 5 and 10 minutes to setup a basic group blog site. That includes database creation magic, (php) file uploads, user registration ...

Time for theming, upgrading and code porting I suppose. Just where could I get it from?


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