I am seeking opportunites

I am seeking career opportunities.

My ideal client/employer would;

  • have a mission related to creating fantastic software or a service.
  • have me work primarily with;
    1. Javascript
    2. a framework, language or technology that is new to me.
  • value it's team over everything else.
  • contribute to open source.
  • be a not for profit.
  • be making a difference.
  • be in Auckland so I can sit next to my colleagues. (I usually work remotely. I will not relocate.)

That is a big wish-list, but I am happy to compromise! :)

I have worked on Drupal projects for the last 7 years. Most of that time for amazing Drupal shops; CivicActions, Palantir.net, PreviousNext and others (see my CV). My skill, seniority and knowledge is highly valuable to Drupal companies & projects. Indeed I can get well compensated working with Drupal. And Drupal is a fantastic piece of software—a great choice for most websites. And most of all, Drupal has an incredible community of contributers and collaborators.

But it is time for me to move on;

I am becoming more and more curious what other web frameworks, languages and tools are like. I want to learn new things and tackle problems of a different type. I love Javascript. I am drawn to building web applications instead of web sites. I want to refine my user interaction design skills.

So I am seeking career opportunities! :)

I am currently freelancing until I find the right opportunity. So please contact me about short term projects too.

Scheduled Publishing with Workbench Moderation

Originally posted at PreviousNext.com.au.

Scheduler module allows content editors to specify times for content to be published and/or unpublished. However it is not compatible with Workbench Moderation module, which allows content to have states like “draft” and “needs review” rather than just “published” or not.

Scheduler Workbench is a new module that integrates Workbench Moderation and Scheduler modules, so that content can be configured to become published or unpublished and be assigned a new moderation state at a date and time specified by the content editor.

PreviousNext recently built the same functionality for a client project using Rules & Rules Scheduler modules. This proved rather difficult to implement; Workbench Moderation also allows content with a published revision to have a more recent current revision in a “draft” or “review” state while content editors are working on it, and Rules does not provide sufficient transparency to easily understand & debug a number of tricky edge cases:

  • If a content item is scheduled to be published but it already has a published revision, the current revision should become the published revision on the scheduled publishing date.
  • The content’s Workbench Moderation history should be clean and easy to audit; There should only be one log entry per scheduled event.
  • Should the (un)publishing-dates act on revisions or nodes? Should the date-time values be stored per revision or per node? If revisions, do the published revision's dates preside over the current revision's dates? Can content that is about to be (un)published still be easily exposed to content managers via the Views module and ordered by the date-time of the scheduled event?
  • Should scheduled dates be removed from the content at or after processing? At exactly which point in the process? How can an audit trail of executed scheduled (un)publishing be provided?
  • If both publish and unpublish scheduled events get executed on the same cron run—perhaps because an editor scheduled them very close together and/or cron has not been running for a while or is not frequent enough—does the content end up being unpublished? Workbench Moderation calls node_save() content with a published revision in an "asynchronous" drupal_register_shutdown_function()-callback, which makes this a rather difficult edge case to handle. Additionally;
  • Workbench Moderation's node-history table should always be consistent with with the node table; Only nodes that have node.status = 1 should have a row in workbench_moderation_node_history where published = 1 and vice versa. And workbench_moderation_node_history should only have one row where current = 1. And that should refer to the most recent revision.
  • Should an editor be able to scheduled already-published content to become unpublished for a specified period? Or only the opposite?
  • If content is manually (un)published before a scheduled (un)publishing, are the respective scheduled events ignored on cron?

The list goes on.

For a more recent project we found Scheduler Workbench module much easier to work with than a Rules-based implementation, since all of the functionality is clearly defined in unambiguous code, rather than abstracted through configuration.

PreviousNext contributed several patches to the module to fix some bugs, handle some of the edge cases and generally get the module more stable. All of these patches have been committed upstream already—thanks William Hurley (whurleyf1)!

Another patch for Scheduler is still in the queue and is required for Scheduler Workbench to function correctly. See #1660252 “Publishing transitions twice through draft” on drupal.org for more detail.

Another bonus about Scheduler and Scheduler Workbench modules is that it does not require a cron-management module like Elyisia Cron, as you can call Scheduler module's own cron callback without invoking Drupal's full cron. This is important because calling Drupal’s full cron too frequently causes performance issues, while calling it too infrequently means scheduled (un)publishing events are often “late”.

Scheduler Workbench can also be configured in such a way that it handles content "freshness" requirements. PreviousNext has found that many Australian government organisations regularly audit their content. In some cases content should even become unpublished if staff have not been marked the content as reviewed within about one year of it being published.

PreviousNext also implemented a Rules-based solution of content freshness for our client project. The default review period is set per content type, but the exact expiry date can be overridden on an individual content item’s “review by” date field. If a content item is not manually updated or “marked as reviewed”, it can be configured to become unpublished and marked as “needs review”, or just marked as “needs review” but left published. And the default value for this option is configurable per content type.

Scheduler and Scheduler Workbench modules can be configured to implement a significant portion of such “freshness” requirements.

Drupal Downunder 2012 is 2 months away, Session proposals close Monday

Drupal Downunder 2012 is just 2 months away and session proposals close this Monday!

The second Drupal Downunder will be Australasia's biggest Drupal event ever, with Dries Buytaert returning for his second DrupalDownunder, and other keynotes from Dimitri Gaskin and Gian Wild.

And tonnes of other great content, tutorials and sessions by other Drupalistas from Australia, New Zealand and beyond.

If you have been thinking about submitting a session proposal about that really interesting project, client or code you worked on recently, or have some special skill set you want to share with the Drupal community, get your ideas into words this weekend and submit a session proposal by this Monday 14 November to have it considered for the programme.

Finally don't forget that LCA (Linux.conf.au) is the week immediately following Drupal Downunder.

A New Way to Migrate WordPress Content Into Drupal

The Donald W. Reynolds Journalism Institute (RJI) is an organization that seeks out and tests innovations in journalism to find the best solutions for use in the real world.

Their new Palantir-developed Drupal website replaces a custom PHP website and two WordPress.com blogs. Part of our assignment involved migrating content from RJI's WordPress blogs into Drupal.

Initially, we intended to do this using the WordPress Import module. However WordPress Import is a stand-alone module that does not integrate with CCK fields, meaning that you cannot import WordPress post categories or authors as CCK text or node-reference fields. It also has limited options for importing files attached to WordPress posts.

To solve this problem, we created WordPress XML for Feeds, a module that allows Drupal's Feeds module to parse the WordPress export file (WXR). It uses a map to create Drupal nodes (or other entities) in the same way that Feeds uses a map to create Drupal nodes from an RSS feed. This allows site developers to create an arbitrary map that tells Feeds module where and how to store the WordPress post's data in Drupal (e.g., as a CCK field, as a property on the Drupal node, or as some other entity).

Help Wanted; QLDfloods.org Drupal 7 Multiple-server Configuration & Infrastructure

There is currently severe flooding in Queensland Australia. An area twice the size of Texas is underwater. Entire homes are completely inundated. Bridges and cars have been washed away like toys. In Brisbane, airports are closed and the CBD has been closed down. There are at least 15 dead and more than 60 still missing.

QLDfloods.org is a Drupal 7 website set up by several members of the Australian Drupal community to provide information, track missing persons, find resources and people that need them (like beds), track damage and provide support. It was mentioned four times on CNN on Wednesday and multiple times on Australian national media.

The site builders are seeking help with Drupal 7 multiple-server configuration & infrastructure. Do you have expertise to help? Join #Drupal-AU on IRC, speak up in g.d.o/australia or contact Ryan Cross directly.

Coincidentally, DrupalDownunder is just 9 days away in Brisbane city. At this stage the venue has not been damaged and everything is still on track. Keep an eye on DrupalDownunder.org/flood-update for any changes to that.

Celebrating 2010 & the Achievements of the Drupal Association

2010 has been a big year for the Drupal Association. Early in the year new members were brought on and the Board of Directors saw some changes. But most noteworthy is what the Drupal Association did for the Drupal community;

Screenshot of the newly redesigned Drupal.org.

Drupal.org Redesign Completion

Drupal.org has a new look and feel. If you have not seen it (have you been under a rock!?) go check out Drupal.org right now!

It took a few years and many iterations and volunteers, and even that was not enough. This year the Drupal Association came to the party with funding to finish the job. Contracts went to tender and were won by Neil Drumm, Achieve Internet and 3281d Consulting.

Thank you to everyone who contributed to the Drupal.org redesign for all your hard work and effort to pull this off. And especially thank you to the Drupal Association for funding the last several miles that could not be covered by volunteers alone.

Drupal.org will never be the same again! Find out what is next for Drupal.org.

DrupalCon San Francisco

Photo of chx with a large DrupalCon San Francisco logo on the projector screen behind him.
Photo by Kathleen Murtagh

How could we ever forget? DrupalCon San Francisco, was epic. By all measures, it was the largest and most spectacular Drupal event yet.

The Drupal Association bootstrapped the funding and locked in critical contracts in order to secure the venue and other services. Many of the DrupalCon San Francisco committee members also serve the Drupal Association. The Drupal Association managed all the finances for the event and coordinated the local team and service providers with the rest of the Drupal community.

And that is just the beginning of what the Drupal Association did to make DrupalCon San Francisco a reality!

Git Migration

Photo of Sam Boyer posing with a Druplipet on his head.
Sam Boyer. Photo by Fox

The Drupal Association recognized the urgency to update Drupal.org's version control system (currently CVS).

Drupal has an active, amazingly awesome and amiable community. One of the reasons for this, is that Drupal.org is our home. It has everything Drupal developers need, all in one place. However the last couple of years has seen a trend for contributions to be distributed elsewhere.

The Drupal Association realised that if Drupal.org did not offer modern version control and code-distribution tools, then Drupal.org would cease to be a central repository for contributed Drupal code. And that would ultimately be damaging to the community and the project.

Git logo

So earlier this year, the Drupal Association hired Sam Boyer to work on detailed planning and foundation work in preparation for the migration of Drupal's gigantic CVS repository, including about 9000 contributed themes modules and other projects, to Git.

This work is underway and is making good progress, but has some way to go yet. Sam is leading the effort but the success of the project is highly dependent on volunteer effort too. You can get involved on g.d.o.

Paid Staff

Early in the year, Treasurer Jacob Redding was hired as full-time General Manager for the Drupal Association. More recently, the Drupal Association hired Neil Kent as a Events Manager and Megan Sanicki as Sponsor Wrangler (Fundraising Manager).

Jacob does a wide range of tasks including managing financial assets and tasks, lawyers, accountants, contracts, bills, Drupal Association meetings and boot load of other tasks that arise.

Neil is working hard on a range of administrative, logistic and financial tasks related to DrupalCon Copenhagen 2010 and DrupalCon Chicago 2011, as well as trying to document it all and make DrupalCon production more sustainable, so that it is not so much work to reproduce DrupalCon in a new location every 6 months.

Megan is working on raising funds and managing relationships with past, future and potential sponsors, for both DrupalCon and other projects of the Drupal Association. She is also exploring new avenues of revenue.

These funds allow the Association to;

  • pay salaries of staff
  • fund hardware that keeps Drupal.org online
  • fund projects like the Drupal.org redesign and the Git migration
  • pay contractors to keep Drupal's websites up to date, secure and useful to the community

Megan's, Neil's and Jacob's responsibilities are critical to the health of the Drupal Association. Which is in turn, critical to the Drupal community and the resources they depend upon, such as Drupal.org and many other infrastructure services.

Legal and Financial Achievements

Through the careful management of Jacob Redding, the Drupal Association has managed to achieve all of this with less than 25% overhead. That is incredibly low for any non-profit or trade organisation.

DrupalCon Inc. received its 501c3 (not for profit) status, which allowed tens of thousands of dollars to be put right back into the Drupal community. This was a major process to work through the processes of the Internal Revenue Service agency of the US government.

Additionally, the Drupal Association;

  • got payment time for invoices down to less than 30 days (from more than 60)
  • turned over more than a million US dollars
  • registered for tax purposes in four countries
  • was a fiscal agent for 3 major DrupalCamps in the US; NYC, Colorado and Chicago

Mission Statement

Another important achievement of 2010 was updating our mission statement. We began this process in April in San Francisco at our full-day-long meeting, then iterated on it over the following months to reach the final wording.

You can read more about the process and work that went into the missions statement in this blog post by Robert Douglass. Or you can just skip to the result;

Mission Statement

The Drupal Association fosters and supports the Drupal software project, the community and its growth.

The Drupal Association does this by:

  1. Maintaining the hardware and software infrastructure of Drupal.org and other community sites.
  2. Empowering the Drupal community to participate in and contribute to the project.
  3. Protecting the GPL source code of the Drupal project and its community contributions.
  4. Protecting the Drupal project and community through legal work and advocacy.
  5. Organizing and promoting worldwide events.
  6. Communicating the benefits of the Drupal software.

The mission statement helps guide the Drupal Association in it's decision-making, and makes it clear to the community what the Drupal Association does and does not do.


Another of the main outcomes of the full-day-long meeting in San Francisco was a list of the five highest priority goals;

  1. Completing the implementation of the Drupal.org redesign
  2. Continuing to build a sustainable model for DrupalCons
  3. Improving internal processes and decision-making
  4. Hiring permanent staff to help the DA better execute on its initiatives
  5. Improving the technical infrastructure of drupal.org

We completed items 1 and 4. Double yay!

We made excellent progress on item 2, including hiring an Events Manager and outsourcing website development to Growing Venture Solutions. However scaling the production of 3000-person bi-annual events is a large project that will take time and never be completely finished.

Similarly, item 5 is never really "done". Maintaining Drupal.org hardware, software and infrastructure is a never-ending job that volunteers work at tirelessly and with very little thanks from the hundreds of thousands of members and visitors to Drupal.org. The Drupal Association applauds their hard work and thanks them sincerely. The Drupal Association funds some of this work from time to time when volunteered time is not sufficient, and also pays for hardware and expenses required for the task.

As for item 3, the mission statement is one significant achievement towards this goal, but there is a lot more to it than that. Additionally, the Drupal Association has hired a consultant experienced with non-profit organisations to help us determine changes to structure that will help us achieve this goal. We are looking forward to report the changes that we decide to implement and how this will improve the efficiency of the Drupal Association to better serve the Drupal community.

Thank You!

Thank you for empowering the Drupal Association with your financial contributions and volunteer effort. You can continue to donate to the Drupal Association by;

Syndicate content