This year, Performance Planet did an advent calendar again, just like the last few years. I also contributed an article — what follows is a verbatim copy of my “2013 is calling: are CMSes fast by default yet?” article for the 2015 Performance Calendar that was published exactly a month ago.
Two years ago, I wrote about how making the entire web fast is the real challenge. How only the big few companies are able to have very fast websites, because only they have the resources to optimize for performance. Many (if not most) organizations are happy just to have a functioning, decent looking site.
In that article, I said I thought that if we made the most popular CMSes faster by default. That would go a long way to make the majority of the web faster. Then less technical users do not need to know about the many arcane switches and knobs just to get the intended performance. No more “oh but you didn’t set it up correctly/optimally” — or at least far less of it.Drupal 8: fast by default on many fronts
Since that article two years ago I’ve been working with >3300 other contributors to get the next version of Drupal done. Drupal 8 was released a month ago and is much faster by default.
All of the following changes improve perceived performance and Drupal 8 has all of them enabled by default:
- more efficient AJAX requests: less data in both requests & responses
- fragment caching
- page caching for anonymous users
- partial page caching for all (anonymous and authenticated) users
… and for those last three fast defaults, each of which does caching: they don’t ever serve stale content.
We also paved the path for more optimizations to land in upcoming minor versions:
- automatically use BigPipe for the dynamic/personalized/uncacheable parts of the page, have the initial part of the page sent immediately, thanks to the aforementioned partial page caching
- responsive images: already supported but not enabled by default
- HTTP/2 server push of assets: we already have a dependency graph of all assets — we’re mostly blocked on HTTP/2 servers actually supporting this.
There are of course many additional defaults that would help Drupal 8 be even faster by default, such as:
- optimal image compression
- automatic inlining of critical CSS
WordPress has made one significant change to improve performance: responsive images are enabled by default since the 4.4 release a week ago. Sadly, that’s the only significant WPO change in 2 years. (Six significant releases were made: versions 3.8 through 4.4.)Joomla 3.x: status quo
So, Drupal has put a lot of effort into making version 8 fast by default. As Drupal 8 is rolled out, hundreds of thousands of sites will become faster.
Hopefully other CMSes (and frameworks) will follow.
Acquia Developer Center Blog: Minimizing maintenance time while updating thousands of Acquia Cloud Site Factory sites
Note (January 2016): While this blog post was originally written about drupalgardens.com (originally published April 06, 2010), the same basic strategy for updating sites has continued to be used in the Acquia Cloud Site Factory (ACSF) platform that emerged from it. Some of the very specific details in the original post are outdated (for example, we now use git instead of svn), but the strategy of using two docroots with different code versions and two different vhost ports to choose between them is how ACSF still works to update sites.Tags: acquia drupal planet
The monthly security release window for Drupal 6, 7, and 8 core will take place on Wednesday, January 20.
This does not mean that a Drupal core security release will necessarily take place on that date for any of the Drupal 6, 7, or 8 branches, only that you should watch for one (and be ready to update your Drupal sites in the event that the Drupal security team decides to make a release).
There will be no bug fix or feature release on this date. The next window for a Drupal core patch (bug fix) release for all branches is Wednesday, February 3, 2016. The next scheduled minor (feature) release for Drupal 8 will be on April 20, 2016. This is the second-to-last security release window before the Drupal 6 end-of-life on February 24.
The last month of the year was rather slow with many of us taking vacation time to spend with our respective families.Our clients love to contribute to open source
Along the way a few of our clients needed some work that we were able to contribute back:
First of all: we are out of RC, we have a 1.0 release!
Furthermore, as we continue our journey in 2016, here's the overview of updates we just pushed.
In August 2014, the government of India announced the bold and far-reaching Digital India policy. This ambitious initiative aims to bring about profound digital transformation in all aspects of governance and prepare India and its citizens for a knowledge-driven future.
The three goals of Digital India are:
MidCamp is returning to Chicago, Illinois on March 17th through the 20th, 2016. We will be returning to the University of Illinois at Chicago, this time, on the west side of the campus. MidCamp is looking for people to speak to our Drupal audience! Experienced speakers are always welcome, but our camp is also a great place to start for first-time speakers.
We are expecting more than 300 people at the event this year, all in a wide variety of skill levels and disciplines. We are looking for sessions that are targeted towards beginner through advanced, in 30 minute and hour long formats, that can cover a wide variety of topics in and around Drupal.
Find out more information, please visit:
I am developing a Drupal 8 site right to manage scholarships and scholarship applications at the university. I wanted to add a bunch of custom fields to User and group them with the field_group module, but field_group generated an error that caused White Screen of Death (WSOD) up on adding a field group. I reported the error to the module maintainer, but he seemed to denounce the possibility that it generated an error in his response to me.
This past summer, Sean shed some light on one of our most exciting Drupal contributions to date: RedHen Raiser, our open source peer-to-peer fundraising solution, the first of its kind to be built entirely with Drupal. Thanks to the Capital Area Food Bank of Washington, D.C., we finally had the opportunity to build a platform that would provide fundraisers a highly-customizable, Drupal alternative to SAAS applications like Causevox and Crowdrise.
After a year of leveraging Raiser as their vehicle for crowdfunding, we’re thrilled to see that the Capital Area Food Bank of Washington, D.C. brought in over $324,000, representing tens of thousands of pounds of food, through 17 different campaigns to help fight hunger in their community.
The Food Bank recently shared an infographic with its constituents that breaks down the donations they received through their RedHen Raiser campaigns over this past year.
It’s really exciting for us to think of what other organizations will accomplish with RedHen Raiser. Raiser’s features allow fundraisers to tailor their campaigns to fit a variety of causes. The Food Bank utilized the Teams feature to give local law firms their own fundraising pages during the “Food from the Bar” campaign. There are so many other possible applications: walk-a-thons, food drives, even parties - as the Food Bank has shown us - have the potential to be great fundraising opportunities for your organization, and they can all be easily managed with RedHen Raiser.
We can’t thank the Food Bank enough for working with us to release RedHen Raiser as an open source platform so other members of the Drupal nonprofit community can benefit from it, too – and, of course, make it even better.
Is your organization using RedHen Raiser to crowdfundraise? Get in touch with us. We’d love to hear about your experience and share your story.
In our EK management tools suite we have custom designed lists of items like for instance list of management documents.
Those lists are build with custom codes and templates which is somehow more convenient to manage with complex data, links, menus and filters as in the example below.
However for simple list, the views module is very useful and can be integrated in a custom module as well to automatically create the list.
Here is an example with companies list in the system address book module showing the company name as link and a filed about the type of record plus a simple filter box.
You might have heard of Burning Man. Basically it's a lot of hippies settling down in the desert for a few days, setting up small camps with diffrent themes that make up a big, temporary city.
It's not for me.Radical Self-expression is one of Midburn ten principles. © Eyal Levkovich.
tl;dr: Drupal VM 2.2.0 'Wormhole' was released today, and it adds even more features for local dev!
Over the past few months, I've been working towards a more reliable release cadence for Drupal VM, and I've targeted one or two large features, a number of small improvements, and as many bugfixes as I have time to review. The community surrounding Drupal VM's development has been amazing; in the past few months I've noticed:
- Lunchbox, a new Node.js-based app wrapper for Drupal VM for managing local development environments.
- A mention of using Drupal VM + docker-selenium for running Behat tests with Chrome or FireFox, complete with automatic screenshots of test steps!
- A great discussion about using Drupal VM with teams in the issue queue, along with a PR with some ideas in code.
- A total of 27 individual contributors to Drupal VM (who have helped me work through 307 issues and 77 pull requests), along with hundreds of contributors for the various Ansible roles that support it.
Drupal VM is the fruit of a lot of open-source effort, and one of the things that I'm most proud of is the architecture—whereas many similar projects (whether they use Docker, Vagrant, or locally-installed software) maintain an 'island' of roles/plugins/configuration scripts within one large project, I decided to build Drupal VM on top of a few dozen completely separate Ansible roles, each of which serves an independent need, can be used for a variety of projects outside of Drupal or PHP-land, and is well tested, even in some cases on multiple platforms via Travis CI and Docker.
For example, the Apache and Nginx roles that Drupal VM uses are also used for many individual's and companies' infrastructure, even if they don't even use PHP! I'm happy to see that even some other VM-based Drupal development solutions use some of the roles as a foundation, because by sharing a common foundation, all of our tooling can benefit. It's kind of like Drupal using Twig, which benefits not only our community, but all the other PHP developers who are used to Twig!
If you want to kick the tires on Drupal VM (want to test Drupal 8 with Redis, PHP 7, Nginx, and Maria DB, or easily benchmark Drupal 8 on PHP 7 and HHVM?), follow the Quick Start Guide and let me know how it goes!drupaldrupal vmansibleinfrastructurephpvagrantdrupal planet
In Drupal 7, Views allows you to easily create exposed filters and alter a lot of the logic involved. However, sometimes you get requests to add text to the form or position things in ways that the Views UI does not allow for.
I've got two solutions that are arguably not as Drupal-like as I would like, but I've run into some dead ends on occasion with trying to fullfill requests with only Drupal-like alterations. And of course if there are better ways to do it, I am open to them.
The first method gives you primary control over the exposed form by using hook_form_FORM_ID_alter(). You would think it would be easy to alter the order of form elements in that hook, but it is a little complicated because of the way the form elements can have #weight but that the #info array has the final say over order.
To get around this and make it easy to juggle things around and add items to a form, I created a Drupal Views FormManipulator class.
If you need to do even more advanced juggling of form, header, footer and other views elements I have also resorted to using QueryPath & hook_views_post_render(). It gives you a lot more control, perhaps a bit more fragile if you are not careful to use stable selectors, but it does let you move things that would require lots of different hooks, custom templates AND still leaving you with not quite 100% of what the client is asking for.
When people talk about Mumbai, they often refer to “Bollywood.” But what is Bollywood? It’s a nickname for the most productive movie industry in the world: the Hindi-language film industry! Bollywood employs more people and produces more films than any other cinematic industry in the world, and Bollywood movies are well-loved both within India and beyond.
Happy birthday, Drupal community! Today is the Drupal project's 15th birthday. In honor of the upcoming year, we've put together a retrospective of some of the incredible changes and accomplishments we made together last year.
2015 was a landmark year for Drupal: between three DrupalCons, the release of Drupal 8, and numerous improvements to Drupal.org, there's a lot for everyone to be proud of. None of our amazing accomplishments would been possible without our community of passionate Drupalers. As you read the infographic, we invite you take a moment to congratulate yourself for all the ways that you've helped make the project strong. Because Drupal's 15th birthday isn't just an accomplishment for the software—it's an occasion to celebrate everyone who has helped get the entire project and the community to where they are today.
This is the first time that I am working with automated tests. I have written tests before and and of course I believe that tests improve projects dramatically, but I have never had (/made) the time in a project to actually do it. So I was quite excited to get started with travis.First things first, what do you test!?
I was terribly excited to start working with tests, but yesterday we didn't actually have any code to test against yet, so instead we decided, we actually want to run the drupal core tests. We want our module to be enabled, and to test know if any of our code causes a Drupal core regression, so I started with that.Trial and Error (a lot)...
Travis build history logs showing eventually passing tests.
The documentation is pretty good and there are LOADS of example .travis.yml files floating around, so I started to just get an active environment build working and focused on getting php unit tests working first. I only wanted a couple of tests to run and the main thing I cared about was that drupal installed properly and that the environment was up and running. Eventually I got a passing build with the following .travis.yml
While I was really quite happy with this, I wanted more. Simpletests to say the least, and maybe even behat tests. I found a lot of inspiration when looking at BartFeenstra's (Xano on d.o) Currency module: https://github.com/bartfeenstra/drupal-currency/blob/8.x-3.x/.travis.yml
Most importantly, I found Drupal TI - https://github.com/LionsAd/drupal_ti
This project makes it almost trivial to integrate Drupal Projects with Travis. It handles a lot of the setup in terms of MYSQL, Drupal download and how to start running tests. It managed to reduce my .travis.yml to the following:
This is quite a bit of code, but it is really clean and well commented so we can clearly see what is going on.When to test?
So now there are tests... Great! But when do we run them? Running all of Drupal's tests can take quite some time, but we do want to have a check on development to catch things. So in short we need testing on pull requests between individual development repos (eg https://github.com/yanniboi/decoupledauth) and the main project repo (https://github.com/FreelyGive/decoupledauth) but when we are doing our development we only really care about project specific tests.Seeing tests on GitHub
When I create a pull request now, I automatically have the tests run and the results on the pull request:
GitHub pull request with Travis test results
GitHub pull request test results in Travis CI
Eventually what we really want to do, is have a way of checking inside our .travis.yml, if the test has been started by a pull request, or by a code push/merge and run different parameters depending on that. But more about that next time. There will be a blog post on that soon...
In the meantime, use Travis and write tests :)References:
Lingotek’s Translation Network is a cloud-based solution that connects all your global content in one place, giving you the power to manage your brand worldwide. Our technology pairs with the best-in-class applications, such as Drupal, to continuously push dynamic multilingual content to all of your global markets.
Lingotek’s collaboration with - and development work for - the Drupal community began over four years ago with Drupal 6. Our first Drupal module was released in fall of 2011 for Drupal 6. We now have contributed modules available for both Drupal 7 and Drupal 8.Tags: acquia drupal planet