Sep 24 2017
Sep 24

While the Drupalcon webseite has a good few pointers to the well-known major tourist attractions, as locals we'd like to share our knowledge about some of our favourite places with you! So here a few recommendations:

Viennese Wine and Heurige

If you stay for the weekend after the Con, you can join the Vienna Wine Hiking day, which I can highly recommend. There are 3 possible easy hikes through the vineyards with lots of options to stop for tasting gorgeous wine directly from the producers. Furthermore you may enjoy great views of the city even if the wheather is not that great!

If you stay long enough, don't miss it! You can find details and options at

If you cannot join the wine hiking day, be sure to visit some Viennese "Heurige" (wine taverns). Good options would be the Schreiberhaus or a little bit closer to the city-center Sissy-Huber.

Otto Wagner Buildings

The famous Viennese Jugendstil architect Otto Wagner (and friends) has left lots of traces back in the city. Apart from some of the subway stations (you won't be able to miss them) we'd recommend looking at the following buildings at least from the outside:

Cafés & Restaurants

Kaffee Alt Wien: An interesting mixture between a traditional Vienese Cafe and a "Beisl" (pub). The food can be recommended too, simple but authentice Viennese dishes, like Gulasch, Schnitzel and a variety of sausages. Although the Kaffee Alt Wien is mentioned in travel guides, it has not lost its athmosphere and is visited by tourists and locals alike.

Flatchers: Great steaks for a reasonable price. There are two restaurants in the same street: A French bistro with georgous French athmosphere and a larger one in American style.

Brunnenmarkt: A local market in one of the lesser known districts, lots of immigrants of south-eastern Europe and Turkey run market booths and Cafés around a nice plaza. You'll find great athmosphere and good food options: Kent, Cafe Ando, Cay Cafe am Yppenplatz

Barfly's: A cuban style cocktail bar with authentic athmosphere and music!

Wolfgang Ziegler



Drupal evangelist since 2005, Drupal Core contributor & contrib maintainer, TU-Vienna graduate (Information & Knowledge Management)

Sep 24 2017
Sep 24

Over the years Drupal distributions, or distros as they're more affectionately known, have evolved a lot. We started off passing around database dumps. Eventually we moved onto using installations profiles and features to share par-baked sites.

There are some signs that distros aren't working for people using them. Agencies often hack a distro to meet client requirements. This happens because it is often difficult to cleanly extend a distro. A content type might need extra fields or the logic in an alter hook may not be desired. This makes it difficult to maintain sites built on distros. Other times maintainers abandon their distributions. This leaves site owners with an unexpected maintenance burden.

We should recognise how people are using distros and try to cater to them better. My observations suggest there are 2 types of Drupal distributions; starter kits and targeted products.

Targeted products are easier to deal with. Increasingly monetising targeted distro products is done through a SaaS offering. The revenue can funds the ongoing development of the product. This can help ensure the project remains sustainable. There are signs that this is a viable way of building Drupal 8 based products. We should be encouraging companies to embrace a strategy built around open SaaS. Open Social is a great example of this approach. Releasing the distros demonstrates a commitment to the business model. Often the secret sauce isn't in the code, it is the team and services built around the product.

Many Drupal 7 based distros struggled to articulate their use case. It was difficult to know if they were a product, a demo or a community project that you extend. Open Atrium and Commerce Kickstart are examples of distros with an identity crisis. We need to reconceptualise most distros as "starter kits" or as I like to call them "puppies".

Why puppies? Once you take a puppy home it becomes your responsibility. Starter kits should be the same. You should never assume that a starter kit will offer an upgrade path from one release to the next. When you install a starter kit you are responsible for updating the modules yourself. You need to keep track of security releases. If your puppy leaves a mess on the carpet, no one else will clean it up.

Sites build on top of a starter kit should diverge from the original version. This shouldn't only be an expectation, it should be encouraged. Installing a starter kit is the starting point of building a unique fork.

Project pages should clearly state that users are buying a puppy. Prospective puppy owners should know if they're about to take home a little lap dog or one that will grow to the size of a pony that needs daily exercise. Puppy breeders (developers) should not feel compelled to do anything once releasing the puppy. That said, most users would like some documentation.

I know of several agencies and large organisations that are making use of starter kits. Let's support people who are adopting this approach. As a community we should acknowledge that distros aren't working. We should start working out how best to manage the transition to puppies.

Bookmark/Search this post with

Sep 22 2017
Sep 22

As a member of development team, I used to develop web applications using Drupal CMS without worrying about HTTP or HTTPS as it has to be added by dev operational team in my organization. On the serious note “How the Secure Sockets Layer (SSL) prepended to the existing URL” and How does it make a huge difference? Why it is important to make your web URL prepend https instead of HTTP.

Today SSL has become an eye-glazing topic and people want to know more about it so that they can protect their data from unauthorized access. In this blog post, we will take a brief look at basics of SSL and discuss how to secure the website running on Apache with HTTPS. Don’t worry! It's not a rocket science and very simple to secure your site as well as private data. In between, we will also explore some examples of secured and unsecured websites. You may also like to check out how to install & configure Apache on Windows machine.

Note: HTTP is not an encrypted server, hence, prone to cyber attacks and malware. 


What happens when we connect to any website by entering the URL, it looks for specific IP address and then connect you to that server. Ones you start making a frequent request for each and every event from the HTTP server, the data sent from your server becomes prone to attack as it is in clear text format. 

And during this process, eavesdropper gets an access to read the conversation and attempt to create severe problems by using personal credentials, bank details, and other sensitive data. This is one of the major loopholes of HTTP. In contrast to that https protects your data from unauthorized access. Saving from all these headaches. 

See the image below for an example of an above-mentioned scenario.



In order to overcome the above situation, we need to transform HTTP to HTTPS in an address bar. In HTTPS, S stands for Secure Sockets Layer (SSL), which is responsible for securing communication over the internet. 

Check out the address bar of below screenshot for an example of SSL enabled site.

Address bar screenshot


HTTPS is comparatively more secure than HTTP. When we connect to a website, it automatically redirects to HTTPS and after that browser checks the certificate and verifies from the certificate authority (CA). Remember, a bad certificate issued by CA causes system failure sometimes.

When we send information over HTTPS, note, we are safe to make online transactions and share important credentials as it is encrypted. Enabling https on your site protects you from eavesdropping and any other attack.

Below figure is an example of how HTTP and HTTPS work.


On top of that if you are marketing or promoting your website among others then you should be more careful and enable SSL. Enabling SSL helps you to place your website in the special category, called secure, which pops up on the address bar when you start searching.

However, the presence of HTTPS and lock screen on address bar is not enough to say your browsing is secured. Some hackers create lock icon and replace with favicon just to showcase secure website. Keep your eyes open for these technical glitches.

Secure connection

If you don’t find HTTPS indicator on the browser, it means you may be connected to an impostor website on a compromised network. Well, these are the basics and I guess this much knowledge is enough for SSL and how somebody can perform secure browsing over SSL. 

Let’s get some local set up to perform SSL. 

What I am running on 

I have XAMPP web servers that run on Apache. 

How can we achieve

To enable SSL, we have to configure three major files.

  1. Httpd-vhosts.conf
  2. Httpd.conf
  3. httpd-ssl.conf


At this place, we create hostname by adding some of the parameters to enable SSL for the local web.

Codes mentioned below belongs to my local instance.

# http
<VirtualHost *:80>
    DocumentRoot "C:/xampp/htdocs/api"
      <Directory "C:/xampp/htdocs/api">
             Options All
        AllowOverride All
            Require all granted

# https
<VirtualHost *:443>
   DocumentRoot "C:/xampp/htdocs/api"
    ServerName api
    SSLEngine on
    SSLCertificateFile "conf/ssl.crt/server.crt"
    SSLCertificateKeyFile "conf/ssl.key/server.key"
    <Directory "C:/xampp/htdocs/myproject/web">
       Options All
       AllowOverride All
      Require all granted

Once the SSL is enabled, your site is going to look similar to this.

SSL enabled site

Some of the important parameters that I would like to discuss here:

To turn on secure communications using SSL, we need to add a separate <VirtualHost> block to our host file, where one would be for handling regular HTTP and another one for https. Just to let you know, SSL should be disabled by default in the main server as well as in newly configured virtual hosts.

Syntax:   SSLEngine on|off|optional
Default:  SSLEngine off

Module:  mod_ssl

Example: SSLEngine on

  • SSLCertificateFile

This certificate file holds X.509 Certificate public key for data encryption.

Syntax: SSLCertificateFile file-path

Module: mod_ssl

Example: SSLCertificateFile "conf/ssl.crt/server.crt"

  • SSLCertificateKeyFile

This file holds private key for the corresponding public keys, which is used in SSLCertificateFile to encrypt and decrypt the data. 

Syntax:  SSLCertificateKeyFile file-path

Module: mod_ssl

Example:  SSLCertificateKeyFile "conf/ssl.key/server.key"

  • httpd.conf 

Apache configuration file contains one directive per line. Main configuration is of server is always been pulled up from httpd.conf file. Httpd is capable of loading multiple module and configuration for your website.

Location: C:\xampp\apache\conf\httpd.conf

To enable SSL make sure SSL is enable not comment out by [#]tag.
search for 

#Secure (SSL/TLS) connections
#Include conf/extra/httpd-ssl.conf

  • httpd-ssl.conf

All SSL enabled from apache takes default port as 443. 
Make sure to remove the comment from DocumentRoot to allow SSL

## SSL Virtual Host Context
<VirtualHost _default_:443>
#   General setup for the virtual host
#DocumentRoot "C:/xampp/htdocs"

Location: C:\xampp\apache\conf\extra\httpd-ssl.conf

This post is all about transforming your HTTP to HTTP(S), which is required to secure transmission & avoid eavesdropping. I have performed this on my local machine. In a similar way, you can do it on the real-time web application on the web server. To get the verified certificate, you can get in touch with web hosting distributor or third party or create your own self-signed-certificate to list your website in the generic list and Top Ranking.

Enable SSL on your website and see what it can do for you. Also, if you have any suggestions or queries please comment down and let me try to answer.

Sep 22 2017
Sep 22

Meet ADCI Solutions at DrupalCon Vienna

Hello, Drupal friends!

Our team want to make it big at DrupalCon. We prepared the session and two BoFs for you.

A leader or a manager? How to define your leadership stand

Our Head of Organizational development wil tell you how to define a leadership stand of yours. Knowing what you stand for in this life helps to get on your own feet and achieve outstanding results both in professional area and in self-realization.


Drupal for a higher education

Our senior developer initiates the discussion on Drupal solutions for a higher education and science. The aim of this BoF is to gather Drupal experts and higher education representatives: that would allow us all to hear about the problems and the possible solutions from the first-person point of view. 


Marketing challenges in the Drupal world

Another BoF is aimed at disclosing challenges we face while promoting and selling Drupal services, building the company image and communicating with a target audience. If we know the problems - we can find the solutions. 


Drop a visit!

Sep 22 2017
Sep 22

Table of contents

  1. Introduction
  2. Server-side
  3. Client-side
  4. Conclusion
  5. Useful links

A single-page application (SPA) with Vue.js
Single-page applications have many advantages, such as speed, really good UX, and, as for developing for Drupal, the full control over the markup. There are more and more sites using SPA; there are more and more tools that simplify the process of developing complex SPA. If you read our articles (if not, then you should do it), you've probably read about a young reactive framework called Vue.js, and how you can use it in Drupal. I suggest you plunge deeper into Vue and consider writing a simple SPA.
We will create a client-side application of a simple blog. This application will show a list of all articles, and also a full text of the article. And, of course, all changes will occur without reloading a page.
With the example of this application, you will get to know how to fetch data in Vue, how to create a router and also you will learn about a very interesting concept - Vue single file components.

In this tutorial, we will only talk about writing a client with Vue. We will not talk about creating a REST server. So I will use the service which provides the fake online REST API. Anyway, if you want to use Drupal as a backend (jeez, it is the Drupal website, of course, you do), we’ve already written about how to organize a RESTful server with Drupal 8. Check the articles on RESTful in the block Useful links.


It is really easy to start using Vue. But it might become even easier if you use the right tools.
There is a vue-awesome project which includes a list of all kinds of tools, components libraries and plugins for any occasion.


For jump-starting a new project, I highly recommend Vue-cli. Using this you can start the project with some of the official Vue project templates, or one of the many of the open-source templates, and, of course, you can create your own one and use it anywhere.
So, first of all, we need to install vue-cli as a global package:

$ npm install -g vue-cli

Then initialize project with the chosen template; for this project I used webpack-simple which is rather enough for our purpose.

$ vue init webpack-simple vue-spa

Then go to the vue-spa folder and run npm install in terminal. After installing all the packages, we can run our application in the development mode.

$ npm run dev

This will automatically launch our project on the webpack dev server. In the browser, we can see our simplest Vue application. Of course, it does not look like how we want, it is just a base to start. To continue the work I suggest first to familiarize yourself with the structure of our template.

Webpack-simple template

Inside the webpack-simple template we have the following structure:
Webpack-simple template structure There is an index.html file with a simple HTML markup including only the element with identifier “app” in a body. It will be replaced by a vue-generated DOM. That is the reason why you should not use the tag body as a root element.
In the src directory we have the main.js file which is the entry point for webpack.The Vue components are imported here. And also here we have a root Vue instance which has two properties for now. The property ‘el’ provides the Vue instance with an existing DOM element to mount on. And another one is a render function which generates DOM from App.vue. In general, this is all we need to know about the structure of the webpack-simple template, not so much, isn’t it? The main part of our application will be coded in App.vue. The .vue extension indicates that this file is a single-file vue component. It is one of the Vue’s features, let's get to know it better.

Single File Components

Single File Components Each *.vue file consists of three types of blocks: <template>, <script> and optional <style>. As the result of it, we can divide the project into loosely-coupled components. Inside a component, its template, logics, and styles are inherently coupled, and collocating them actually makes the component more cohesive and maintainable. So now we are ready to create our Vue Blog.

Creating the application

Let's see what we are going to do. We have a header with the name of our blog at the top of the page. On the left side, we have a fixed sidebar in which we will display the headings of our articles, it will be something like a table of contents. And the rest of the page will be occupied by a dynamic block in which the article itself will be displayed.

Vue.js SPA

Step 1

First of all, remove all unnecessary lines from App.vue. And create a template in accordance with our requirements.

  <div id="app">
      <h1>Vue.js SPA</h1>
      <aside class="sidebar">
      <div class="content">

Second, we will create a Vue instance with the data property that we will place in the array with our posts. For now it’s empty, but soon we will put the data received from our server inside of the array. 
Once observed, you can no longer add reactive properties to the root data object. It is therefore recommended to declare all root-level reactive properties upfront before creating the Vue instance.

  export default {
    data () {
      return {
        posts: []

Also, I’ve added some styles to make our application look better.
The application code lives on the .Just clone the repository and switch the branch by the step number to follow the application creation step by step, for example:

$ git checkout step-1

At this moment we have absolutely nothing to display in our navigation bar, so let’s get the data from our server. To do this I chose Axios a really easy-to-use HTTP client. You can also use any other convenient way for you like a Vue-resource or native fetch or even jQuery Ajax.

Step 2

Install the Axios

$ npm install --save-dev axios

Then import it into a component App and create a method getAllPosts() which we will make a request to the Drupal server and set it to the property post. Call the method in the hook created(), which will be called after the Vue instance is created and data observation has been set up.

import axios from 'axios'

export default {
  data () {
    return {
      posts: null,
      endpoint: '',

  created() {

  methods: {
    getAllPosts() {
        .then(response => {
          this.posts =;
        .catch(error => {

And now display all the headings of articles in the sidebar.

<aside class="sidebar">
  <div v-for="post in posts">
    {{ post.title }}

So far we have just displayed the names of posts but we can not see the full posts. Now I’m going to display the full post in the content section according to the chosen title in the sidebar. At the same time, I want every article to be available at its unique address.

Step 3

I will use the official Vue library vue-router to implement this. As it should be clear from the name, this library allows configuring routing for our application.
Install the package:

$ npm install --save-dev vue-router

To configure router go back to the main.js file. Here we will define the settings of our router and add it to the Vue instance.

import Vue from 'vue'
import Router from 'vue-router'
import App from './App.vue'
import Post from './components/Post.vue'
import Hello from './components/Hello.vue'


const router = new Router({
 routes: [
     path: '/',
     component: Hello,
     path: '/post/:id',
     component: Post,
     props: true,

new Vue({
 el: '#app',
 render: h => h(App),

In the route settings, we specify which component should be rendered on a specified path. Because the only component Post.vue will be responsible for rendering of each post, we don’t have to set the path for each post, all we need is to set a dynamic path.

path: '/post/:id'

This path has a dynamic segment :id which determines the specifics of our post. Herewith we have the access to this segment in component Post via this.$ However, using $route in our component creates a tight coupling with the route which limits the flexibility of the component as it can only be used on certain URLs. Instead of this we can use the option props and set it to true. After that, the $route.params is set as the component Post props.
Now that we have a router created we can return to our application and add a few more lines to the template.

  <aside class="sidebar">
        v-for="post in posts"
        :to="{ name: 'post', params: { id: } }">
      {{}}. {{post.title}}
  <div class="content">

Here we have two components of vue-router: <route>r-link and <router-view>. The first one is the component for enabling user navigation in a router-enabled app. The second component is a functional component that renders a matched component for the given path.
It remains only one step. We need to display the contents of the post.

Step 4

Let’s go to the Post.vue file, which we will create a simple template in:

<template lang="html">
  <div class="post" v-if="post">
    <h1 class="post__title">{{ post.title }}</h1>
    <p class="post__body">{{ post.body }}</p>
    <p class="post__id">{{ }}</p>

Then we need to set Vue instance settings for this component. Here everything will be very similar to the settings for displaying all posts. Declare the option props with variable id, which will get the number of our post. Next, define the data object the same as in App.vue:

import axios from 'axios';

export default {
  props: ['id'],
  data() {
    return {
      post: null,
      endpoint: '',

Then create the method getPost() which will get only one post by an identifier and call it in the created() hook.

methods: {
  getPost(id) {
    axios(this.endpoint + id)
      .then(response => { =
      .catch( error => {
created() {

Almost done. If we run the application now, we’ll see that although the URL changes, we see the only post that was rendered first. The point is that for the different posts rendering we have the same component and Vue doesn’t need to recreate it because of the extra waste of resources and this also means that the lifecycle hooks of the component will not be called.
To fix this we just need to set a watcher for the $route object.

watch: {
  '$route'() {

Now it works exactly as it should. To get a production version of this application just run npm run build in your terminal. 

We built the simple single page application with Vue in four steps. We knew how easy to start your project with vue-cli. We figured out the concept of Vue single-file components which make your project more flexible and scalable. We learned how to fetch data from external API using Axios. And we saw how to configure routing with the vue-router. It is a basic knowledge, of course, but I hope it will help you to start using Vue.js with more power. If you have any questions, don’t hesitate to contact us.

Link to the GitHub project
The vue-awesome project
RESTful Web Services in Drupal 8: quick start guide
How to create a headless Drupal site

Sep 22 2017
Sep 22
Matt and Mike talk with Drupal Media Initiative folks, Janez Urevc, Sean Blommaert, and Lullabot's own Marcos Cano about getting modern media management in Drupal core.
Sep 21 2017
Sep 21

Infographic: Drupal vs Adobe vs Sitecore

Infographic: Drupal vs Adobe vs Sitecore

There’s a lot of information to sift through when comparing enterprise-level Content Management Systems (CMS) — features, functionality, cost, and more. In our recent whitepaper, we give you the pros and cons of Adobe, Drupal, and Sitecore through the lens of five different stakeholder perspectives.

To help give you an overview, we put together an at-a-glance view of how these three CMS's compare. 

Additional Resources
Comparing Drupal vs Adobe Experience Manager, Part 1 | Blog
Comparing Drupal vs Adobe Experience Manager, Part 2 | Blog
Comparing Drupal vs Sitecore, Part 1 | Blog
Comparing Drupal vs Sitecore, Part 2 | Blog

Sep 21 2017
Sep 21

Redfin is happy to announce that thanks to the efforts of vetchneons, we have at long last released a -dev version of the CashNET module for Ubercart in Drupal 7. CashNET is a payment processor used by a lot of institutions in the higher education realm.

We would love for any folks using Ubercart in 7 to test it out, so the module can be promoted to a stable release. 

And of course, if anyone wants to also port this to Drupal Commerce, they'd be more than welcome. :)

Head on down to the UC CashNET project page and give it a download!

Sep 21 2017
Sep 21
Create a One Page Website with Views Infinite Scroll

You most likely already navigated across some sites, blogs or galleries, that present the content in an infinite scroll mode.

Such scrolling can easily be implemented with the Views Infinite Scroll contribution module in Drupal 8. No additional libraries or plugins required.

In this tutorial, we’re going to create a gallery of article teasers of all countries in the Americas. Let’s get started!

 Step #1. Create the content

  • Download, install and enable the Views Infinite Scroll module
  • Click Content > Add content > Article
  • Create the articles’ content. It will be a simple article with a picture of the flag and the related content to each country.
  • Click Save and Publish each time you create an article

Create article

Step #2. Configure the teaser display

  • Click Structure > Content types > Article > Manage Display
  • Choose the Teaser option
  • Click on the cogwheel next to the Image field and choose Image style: Large (480x480)
  • Disable the Links field
  • Click Save

Manage display

Step #3. Set up the View

  • Click Structure > Views > Add new view
  • Give the view a name according to your type of content
  • Choose to show content of type Articles
  • Click the Create a page checkbox
  • Choose the Display format as a Grid of teasers
  • Change the Items to display number to 9
  • Uncheck the Use a pager option
  • Click the Save and edit button

Add View

Step #4. Tweak the Grid

Now it’s time to make some adjustments to the view.

  • In the FORMAT area of the views interface click on Settings to change the display of the grid 


  • Choose 3 for the number of columns
  • Click Apply

Number of columns

Step #5. Configure the Sort Criteria

Let's sort the teasers in alphabetical order.

  • In the SORT CRITERIA area click on Content authored on (desc) 

Sort criteria

  • Click the Remove button

The Remove button

The SORT CRITERIA area is now empty.

  • Click the Add button

Sort criteria is empty now

  • Enter the word Title in the Search box
  • Mark the Title checkbox in the Content category
  • Click the blue Add and configure sort criteria blue button

Add and configure sort criteria

  • Leave the Order criterion as Sort ascending
  • Click Apply

Sort criteria

Step #6 The infinite scroll feature

It’s time to add the infinite scroll functionality to our view.

  • In the PAGER section click on Display a specified number of items 

Display a specified number of items

  • Choose the Infinite Scroll
  • Click Apply 

Select Infinite scroll and Click Apply

You’ll see a couple of options to configure the Infinite Scroll functionality.

  • To load the content automatically without clicking a button, mark the checkbox Automatically Load Content
  • Click Apply

Mark Automatic load content and click Apply

Notice: If you want to load the content automatically, you have to enable the use of AJAX in your view. Let's do just that.

  • Click the ADVANCED section in your views interface on the right, to display the advanced options
  • Click the Use AJAX link
  • Check the Use AJAX option
  • Click Apply

Click the Advanced button

Mark Use AJAX checkbox

  • Save the view
  • Click View page in order to see your gallery

The view Country gallery has been created

When you scroll down now, you will see how the new content loads.

Congratulations! You now know how to easily create an infinite scroll for all kind of views with the Views Infinite Scroll module.

I hope you enjoyed reading this tutorial. Please, share in the comments below your own experience with creating infinite scrolls on your Drupal sites. Or maybe you have any questions on this tutorial? 

About the author

Jorge lived in Ecuador and Germany. Now he is back to his homeland Colombia. He spends his time translating from English and German to Spanish. He enjoys playing with Drupal and other Open Source Content Management Systems and technologies.

View the discussion thread.

Sep 20 2017
Sep 20

There will be a lot of sessions on DrupalCon Vienna. That's nothing new to be fair. DrupalCons are the biggest Drupal events, so you don't catch all the sessions you want. Therefore, we have made a short list of the sessions you don't want to miss. We hope it will help you.

But before looking at it, it's fair to say that the Business sessions were excluded because we have already presented them on the other occasion. Moreover, our commercial director Iztok Smolic was directly involved in selecting them, so if we pointed out any session from the business track, you may have argued about the conflict of interest.

Nevertheless, here are DrupalCon Vienna sessions you don't want to miss:

The first one is JavaScript and Accessibility: Don't Blame the Language from Everett Zufelt, Director of Technology at Myplanet. He will look at where the belief that JavaScript is inaccessible came from, why the use of JavaScript easily leads to inaccessible applications, what are the most common causes of inaccessible JavaScript applications and how the use of modern frameworks like React can make JavaScript accessibility easy.

Session starts at 12:00 on 28.9.2017

The second one is Virtual Reality on the Web - Overview and "How to" Demo from Wes Ruvalcaba, Front-End Developer at Lullabot. The author already made the slides for his talk. He will go through the overview of virtual reality (VR) concepts, technologies, and what its uses are, Google Cardboard, Web VR technologies ... He will also introduce A-Frame and how to make your own Web VR experiences.

Session starts 13:35 on 27.9.2017


Speaking at the conference


We’ll continue with Introducing the UI Patterns module: use atomic UI components everywhere in Drupal 8 from Antonio De Marco, Director at Nuvole. In this session, the author will explain how the UI Patterns module allows users to define and expose self-contained UI patterns as Drupal 8 plugins and to use them as drop-in templates for panels, views, field groups, Display Suite view modes, field templates, and so on.

Session starts 15:45 on 26.9.2017

Making the fourth spot was Elm and Haskell -- Getting off the island. Way off. by Amitai Burstein, CTO at Gizra. Despite the usage and love of PHP and Drupal, the company saw other ways of building websites, so this session will be an overview of the languages, tools, mindset, and eco-systems of Elm and Yesod (a Haskell framework).

Session starts 14:15 on 27.9.2017

We'll conclude our list with Everybody cheer! Here comes Media! from Sasa Nikolic and Tadej Basa, both working at Amazee Labs. In this session, the authors will discover the niceties of Media being added to Drupal's core (Drupal 8.4.x) and look at how current contrib modules complement this functionality. By simple practical examples, they will show how to set up the most frequently required features and get users up and running with rich media content in Drupal 8.

Session starts 12:00 on 28.9.2017

Sep 20 2017
Sep 20

Here’s a list of the 10 important tips and tricks to help make your sure you have a magical BADCamp experience.

BADCamp is sure to be a great event. Tickets are FREE. Register today!

1. Wear Good, Comfortable Shoes

If you want to have a great time the whole time you’re at BADCamp, we STRONGLY recommend wearing shoes that are comfortable but give you lots of support. You don’t want to miss out on all the fun stuff we have planned because you have to take a break to rest your poor tootsies. Don’t wear brand new shoes either and you might want to also get insoles.

2. Dress in Layers

October in Berkeley is beautiful, but let’s face it, room temperatures are unpredictable. For this reason, bring a hoodie (or donate to get a special edition 2017 BADCamp hoodie) that you can throw on and/or take off as the climate requires. The historical average for that time of year is in the mid 70’s (about 22 – 25 Celsius).

3. Plan Your Schedule

Are you coming to learn specific skills? Check out the training classes, summits and sessions available and create your own schedule.

Do you want to find a new employer? Check out the job board and sponsors expo to meet awesome Drupal shops

Who do you want to meet with while you are at BADCamp? A famous podcaster or module maintainer? Find out who is coming on the attendee list and reach out to connect. Magical moments are frequent at BADCamp

4. Bring a Laptop

If you want to get the most out of your BADCamp experience, be sure to bring a laptop. You will want to follow along and try some of the cool things the presenters show you. Bring a notepad too. Sometimes getting to an outlet to charge your laptop can be tricky. So that you don’t forget something important while your laptop charges, bring a notebook or notepad and a pen and take some notes.

5. Bring a Water Bottle/Travel Mug

There will be water fountains and FREE coffee/tea. Bringing a refillable water bottle means that you can stay focused on what you’re doing longer and get the most out of the sessions you're attending. Not to mention, using a water bottle instead of buying bottles of water is far better for the environment.

6. Bring Chargers for ALL your Devices and a Mobile Charger

There’s nothing worse than being out and about with a dead phone/tablet/laptop. Bring chargers for all of the devices you intend to use at BADCamp. If you use a battery-operated mouse (or wireless remote for presenting), bringing an extra set of batteries couldn’t hurt either. Even if you don’t end up needing them, you could find yourself with a new friend when you share those extra batteries with someone in need.

7. Bring Business Cards

Make it easy to connect! You will meet lots of great people and some of them you will want to keep in touch with. Get in the habit of giving out a card when you meet someone.

8. Condense your Stuff

You will walk around campus, so a lighter load is ideal. Plus you will want room for SWAG!  Condense your backpack down. Pro Tip: Get a small tote or even a Ziploc bag to stick all of your conference swag in. That way all of the stickers and little bits and pieces are in one bag that you can stick in your luggage at the end of the conference.

9. Bring a Pair of Headphones

As much as we all want to be able to unplug from our jobs and just focus on the sessions, it’s not always possible. Sometimes you have to put your nose to the grindstone and get some work done. If you’re the type that needs to listen to some music while you work, bring along a pair of earbuds so that you can focus and not disturb others around you.

10. Bring a Friend

While not required, having a friend tag along with you can make for a memorable BADCamp experience. If you’re like me and you’re road tripping to BADCamp, think of all of the awesome photos, sing-a-longs, and weird roadside attractions that you’ll see and get to enjoy together. If you’re flying, it’s always nice to have a travel buddy to keep you company while you’re waiting at the airport during the inevitable layover.

Pro Tip: Don’t use your buddy as a reason to shut out others. Go in with an open mind and you’re sure to find another new friend (or friends!) to share the experience with.

BADCamp is sure to be a great event. Tickets are FREE. Register today!

Sep 20 2017
Sep 20

Several of our Lullabots and the team from our sister company,, are about to descend upon the City of Music to present seven kick-ass sessions to the Drupal community in the EU. There will be a cornucopia of topics presented — from softer human-centric topics such as imposter syndrome to more technical topics such as Decoupled Drupal. So, if you're headed to DrupalCon Vienna next week, be sure to eat plenty of Sachertorte, drink lots of Ottakringer, and check out these sessions that will Rock You Like Amadeus:

Tuesday, September 26, 10:45-11:45

Sally Young, Cristina Chumillas, and Daniel Wehner

Contenta is a decoupled Drupal distribution that has many examples of various front-ends available as best practices guides. Lullabot Senior Technical Architect Sally Young, Christina Chumillas, and Daniel Wehner will bring you up to speed on the latest Contenta developments, including its current features and roadmap. You will also get a tour of Contenta’s possibilities that come with reference applications that implement the out-of-the-box initiative’s cooking recipe.

Tuesday, September 26th, 10:45 - 11:45

Ezequiel “Zequi” Vázquez

Lullabot Developer, Ezequiel “Zequi” Vázquez, will explore the current state of test automation and present the most useful tools that provide testing capabilities for security, accessibility, performance, scaling, and more. Zequi will also give you advice on the best strategies to implement automated testing for your application, and how to cover relevant aspects of your software.

Tuesday, September 26th, 15:45 - 16:45

Amber Himes Matz Production Manager & Trainer, Amber Himes Matz, will survey the current state of voice and conversational interface APIs with an eye toward global language support. She’ll cover services including Alexa, Google, and Cortana by examining their distinct features and the devices, platforms, interactions, and spoken languages they support. If you’re looking for a better understanding of the voice and conversational interface services landscape, ideas on how to approach the voice UI design process, an understanding of concepts and terminology related to voice interaction, and ways to get started, this is the right session for you - complete with a demo!

Wednesday, September 27th, 10:45 - 11:45

Juan Olalla Olmo & Salvador Molina

Lullabot Developer, Juan Olalla Olmo, and Salvador Molina will share their experiences and explore the areas and attitudes that can help everyone become better professionals by embracing who they are and ultimately empower others to do the same. This inspiring session aims to help you grow professionally and provide more value at work by focusing on fostering the human relationships and growing as people.

Juan gave this presentation internally at Lullabot’s recent Design and Development Retreat. It was a highlight that sparked a lively conversation.

Wednesday, September 27th, 13:35 - 14:00

Wes Ruvalcaba

Want to make your own virtual reality experiences? Lullabot Senior Front-end Developer Wes Ruvalcaba will show you how. Starting with an overview of VR (and AR) concepts, technologies, and what its uses are, Wes will also demo and share code examples of VR websites we’ve made at Lullabot. You’ll also get an intro to A-Frame and Wes will explain how you can get started.

Thursday, September 28th, 9:00 - 10:15

Joe Shindelar

We’re especially proud of's Joe Shindelar for being selected to give the Community Keynote. If you’ve been around Drupal for a while, it’s likely you’ve either met or learned from Joe. In this session, Joe will reflect on 10 years of both successfully and unsuccessfully engaging with the community. By doing so he hopes to help others learn about what they have to share, and the benefits of doing so. This is important because sharing:

  • Creates diversity, both of thought and culture
  • Builds people up, helps them realize their potential, and enriches our community
  • Fosters connections, and makes you, as an individual, smarter
  • Creates opportunities for yourself and others
  • Feels all warm and fuzzy

Thursday, September 28th, 14:15 - 15:15

Marcos Cano

Lullabot Developer Marcos Cano will be presenting on Entity Browser, which is a Drupal 8 contrib module created to upload multiple images/files at once, select and re-use an image/file already present on the server, and more. In this session Marcos will:

  • Explain the basic architecture of the module, and how to take advantage of its plugin-based approach to extend and customize it
  • See how to configure it from scratch to solve different use-cases, including some pitfalls that often occur in that process
  • Check what we can copy or re-use from other contrib modules
  • Explore some possible integrations with other parts of the media ecosystem

See you next week in Wien!

Sep 20 2017
Sep 20

If you haven’t heard, Facebook’s often-criticized Instant Articles service recently received an update to support publishing to Accelerated Mobile Pages (AMP for brevity) and Apple News (still not supported as of the publishing of this article) all at once. At first glance this seems like big news—Facebook is one of the big three mobile content delivery platforms—this will obviously push some traffic to its competitors’ services. So when a colleague sent Facebook’s announcement my way, it prompted me to consider why Facebook would do this. After some research, I’ve come up with some thoughts on the topic.

A Brief History of the Mobile Web

For the unacquainted, let’s start with some background on the mobile content space and how we got where we are. Back in the day (think ‘90s-early 2000s), websites had one size. Fixed-widths ruled all and since the smallest devices were laptops, web developers didn’t have to worry about device width. But then the iPhone was introduced, and it became evident that the times they are a changin’. [Steve Jobs Deal With it Gif] It’s difficult to overemphasize just how much mobile devices flipped the web upside-down despite huge hurdles. Users relied on devices that ran on EDGE network speeds, downloading Flash-heavy content on 3.5” screens, which the user then pinch-zoomed to navigate a page that may or may not work enough to perform tasks. Yet mobile traffic continued to explode, and within ten years it would overtake desktop web traffic worldwide. Throughout that ten-year period, advancements in both hardware and web technologies have brought a snappy, more natural experience to the mobile web. Sites that once took ten seconds or more to load, now did so in less than a second—even with increased video, image, and dynamic content. Perhaps unsurprisingly, with every advancement in speed, users were less willing to wait for the same page load times they once had considered blazingly-fast.

M.Website.Com vs Technology (HD DVD vs. Blu-ray)

It’s easy to become defensive of a technology with little more reason than “it’s what we’ve always used.” History has taught us that refusing to give new technologies a chance because they’re unfamiliar just won’t do. The advancement of technology continues at a steady march, and it does so without regard to our comfort—it’s up to us to keep pace.

If you’re old enough to remember, you’ll recall watching movies on VHS tape and never really thinking that we needed a change in video formats. My family had a not-so-small library of VHS tapes and I loved looking through them on Saturday mornings, as if I hadn’t already seen each of them at least five times. When DVDs became popular in 1996, I couldn’t fathom why people would shell out hundreds of dollars for a new DVD player and rebuild their movie library shelf by shelf—especially when VHS did the *exact same thing* as DVD. Sure, every now and then you’d have to adjust the tracking on the VCR to get those lines off the screen, but auto-tracking solved that. Blockbuster also reminded us constantly to rewind our movies (were you kind?), but that wasn’t an issue after my dad came home with a fast tape rewinder shaped like a race car which cut our rewind time down to mere seconds. Like me, you may remember your first experience watching a DVD and experiencing the difference in person. In my case, I was at a friend’s house, and the movie was The Matrix. I had watched it several times on VHS during my five-day Blockbuster rental. When my friend put in the DVD and we waited for the disc to load, I made a few comments about the technology being a fad that would pass. Then the menu loaded, Keanu Reeves started doing wall flips across the screen, and I immediately realized my folly. The difference was night and day—my local thrift store soon received a large donation of VHS tapes.

The Responsive Revolution

Back to the web. If you were to guess, you’d probably credit responsive design as the most notable evolution in the mobile web—and I’d agree with you. Giving credit to the generic term “responsive” is overly simplistic, when the reality is that it took the combined advancements in HTML, CSS, Javascript, and browser technology (to name just a handful) to make the responsive web possible. Responsive or “mobile first” design helped solve a problem from which mobile sites had suffered—unification of content and user experience on a mobile and desktop device. A contemporary of early responsive design, the mobile-specific site (m.* subdomain), utilized a separate theme and sometimes even an entirely separate codebase to limit what was being served to mobile devices. While it was sometimes necessary for developers that couldn’t offer a certain feature for mobile devices (such as Flash), it was a regular frustration to find a page from a Google search, tap on it, and then be redirected to the mobile site’s homepage because the page didn’t exist on the mobile site. I regularly found myself setting the browser user agent to desktop to try to avoid getting mobile sites. As is the case with technology in general, when an issue is encountered, a corresponding solution is introduced; in this case, the solution was responsive design. Within a couple of years, sites were being built from the ground up with the mobile user in mind, effectively making mobile-specific sites a thing of the past.

Enter the Competition

So now, after only being widely adopted for a couple years, the responsive web is facing its first big test: content delivery that is both mobile- and platform-specific. Within a short time, Google, Apple, and Facebook have introduced competing options for users to consume content on mobile devices. Aside from Apple News (which is a dedicated News app), users won’t be able to opt out from these new technologies. When available, Facebook Instant Articles are served automatically within the Facebook App. Google’s AMP content, which is an open source technology, is prominently displayed in search results and is also a default for mobile users regardless of browser (there is currently a link to allow users to leave the AMP page and use the canonical page instead, but I wouldn’t be surprised if AMP hides this by default in the near future). As these platforms are able to drive adoption, it’s likely that they will become less optional. The incentive for consumers is simple and often accurate: accessing content via one of these technologies can be faster. The incentive for publishers, which hasn’t been so cut and dry, is a higher rate of engagement, higher advertising revenue, and ease of implementation compared to a complete mobile performance overhaul.

As mentioned, Google already provides a separate slider for AMP pages in search results. Facebook has also just announced that site load speed will be included in its news feed ranking. What better way for Facebook to drive adoption and show publishers that their investment is worthwhile than to ensure that Instant Articles are among the top ranked? If I’m coming across as being a bit paranoid, it’s because I am (whether warranted or not). It’s not that page speed is a factor in search rankings, that was inevitable. It’s that the company providing the rank and results (Facebook) is ensuring that content which utilizes its platform (Instant Articles) benefits the most from this ranking change. Facebook can drive higher user adoption, which will encourage publishers to adopt Instant Articles, providing more ad revenue to Facebook, and (more importantly) keep users within Facebook’s ecosystem.

The Test for Responsive Sites

This brings me back to the Instant Articles announcement. Facebook is introducing a feature into its proprietary content delivery tool which allows developers and publishers to publish to its competition, and I don’t think Facebook is concerned about it. I doubt it’s because Facebook is confident that Instant Articles can provide a better experience or more features than responsive sites, AMP, or Apple News, because it doesn’t. As an example, AMP offers site menu navigation, ecommerce integration, and form support (in fact, AMP is becoming a full mobile site replacement—an article for another day). In contrast, Facebook doesn’t really want a user to stay on a publisher’s site indefinitely. It would rather users read an article within Instant Articles, visit the publisher’s Facebook Page, and share and interact with it directly on the user’s activity feed. Facebook is the master of making sure that a user doesn’t focus on any particular thing for too long—its news feed is designed to hold attention by dropping in content, not necessarily because it’s relevant, but because it’s overwhelmingly engaging. So it’s my opinion that Facebook doesn’t plan to compete based on features, but like many of its other tools, by preventing competition. Much like a windowless, clockless, maze-laden casino, Facebook welcomes users and does as much as possible to keep them from leaving. So yes, I believe that Facebook will happily increase its list of publishers by allowing them to create AMP and Apple News articles, as long as Facebook’s 2 billion and growing users never actually see them for the massive amounts of time that they spend on Facebook each day.

When these technologies were introduced, my original thought was that instead of adopting platforms that strip out code, we should just write good code (I still think that, by the way). If a feature is worth building, then it’s worth building well and making it available to all traffic (mobile being the majority anyway), rather than stripping it out for mobile. The same goes for platform-specific content—if a platform offers something that a browser cannot, a native app for example, then I think it makes sense to build it. But I’m not yet persuaded that distributing content to platforms like Facebook makes sense unless there’s a clear business requirement that also accounts for losing traffic to another site.

The test for responsive sites goes beyond being as fast, feature-filled, and convenient as AMP, Instant Articles, and Apple News. In part, it involves whether traffic gets to the site in the first place. Services like Facebook will continue to test the limits of keeping users within their platform. And to the extent that those efforts are successful, publishers will integrate with their technologies to get a chunk of that user engagement. Finally, as users and publishers get on board, those platforms will be able to make it more difficult to view canonical content, effectively closing the loop (think of how difficult it is to share content from within Facebook outside of Facebook). I’m aware that this is a gloomy view of the web and I recognize that I’m in danger of not embracing change. Regardless of what it may look like on the other side, I’m confident that the open web, which has endured the app revolution and undergone several iterations already, will endure this new test, evolving to meet the needs of users and publishers alike.

Additional Resources
Beyond the .Com: Drupal’s New Role in Large Enterprise | Drupalcon Presentation
Ramping up the AMP Module in Drupal 8 | Mediacurrent Blog
AMP’lify your Website: Google AMP 101 | Mediacurrent Blog

Sep 20 2017
Sep 20

by Elliot Christenson on September 20, 2017 - 1:44pm

All businesses have to track their income and expenses. That's the most fundamental axiom of business. We've all learned to think about this in terms of time or "billable hours" After-all, we track our success based on how many billable hours we either get paid or "save".

Is that working for you perfectly?

WTH is "Micro-Tracking" and Why is it Terrible?

I define "micro-tracking" as the "micro-managing of time and resources". We see a few things wrong with "micro-tracking" - specifically for support - but possibly other business expenses.

Do you bill clients by the minute? Even the hour?

It's almost always a terrible idea to watch the clock for support!

Below I'll attempt to outline a few of the downsides...

Issue 1: Time

The easiest to understand is the EXTRA time cost. For example, if a support task takes 5 minutes to communicate to the support employee, 5 minutes for the support employee to complete, and 10 minutes to document, how much time gets billed to the client? 10 minutes? 15 minutes? 20 minutes? Who decides? How do you decide?

Issue 2: Disputes

Do you like having disagreements with your customers? Do you like having disagreements with your vendors? Over an hour? Over a minute?

Wouldn't it be great to be looking at things from the bigger picture? With a more collaborative and less compative frame of mind? Wouldn't it be great to have your interests completely aligned with your clients?

Issue 3: Accuracy

This is very similar to the above. When we are tracked, it's human nature to round up! If you're caught going "62 in a 55*" , you're likely to say "Officer, respectfully, I think I was going 55!"

Customers round up (or down) - so do vendors. Don't you want to really know what you're spending - and why? Also, wouldn't you like to leave the discretion of time accuracy up to those with expertise? Ultimately, if you spend too much, you can't afford the service. Are you really getting a more accurate picture of your expenses if you "micro-track"?

Issue 4: Quality

Finally, the biggest issue: quality. Do you want to spend a minute putting a bandage on an issue or twenty minutes fixing the issue so it doesn't repeat? In the "micro-tracking" scenario, where everyone is fixated on minimizing work and time for a specific task, the answer is "spend a minute!"

We all know the real answer is to spend the twenty minutes. It's better for the support vendor to focus on the long-term lower amount of time, and it's in everyone's best interest to fix a security vulnerability or critical error rather than a bandage solution!

The How?

So, my title promised "how" you make this change. In general terms, a monthly flat-rate is best! For our Standard plan, myDropWizard promises an unlimited number of Drupal support requests.

Your first reaction is probably "That is crazy! What if someone asks you for 5000 support requests in a month?" The reality, however, is that it's in the best interest of the client and the vendor to not have to watch the clock so closely. Vendors shouldn't be skimping on best-practices and clients shouldn't be apprehensive of asking for help!

It works, but it does need to have some limits. In our example, we are limiting the support to "Drupal  Support and Maintenance". While I think flat-rate can be used much more widely, it is true that some limitations are necessary.

So No Billable Hours? Ever?

To be clear, there is a time and a place for billable hours. Larger projects need some sort of tracking of time and resources. Even myDropWizard tracks time for these largest projects.

We do support for small organizations and large organizations, and we love the fact that our interests are aligned with our clients in terms of time, collaboration and quality! We think you should think about it too!

*That's miles-per-hour for the non-U.S. metric system using world!
Sep 20 2017
Sep 20

It’s always been known that Drupal is a great choice for e-commerce websites. The cool online stores built with Drupal are a proof of that. However, in Drupal 8’s younger, shy days, described in our interview with the famous drupaler Andypost, the new e-commerce functionality wasn’t fully ready. At that point, it didn’t make sense to build online shops with “the great eight.” Those days are long since gone! On September 20, the long-expected Drupal Commerce 2.0 for Drupal 8 has been released. However, even before the steady release, over 1,500 websites have begun using it.

Drupal Commerce 2.x has so many cool features that it makes you dizzy, like looking at the window display at a luxury store. The recent release candidate 1, release candidate 2 and release candidate 3, with their fresh updates, have become the final steps towards the stable Drupal Commerce 2.0. Now it’s time to celebrate — Commerce 2.x parties are starting across the globe!

Let’s look through some remarkable features of Drupal Commerce 2x, as well as point out a couple of freshest improvements.

“New arrivals!” or some benefits of Drupal Commerce 2.0

Easier installation: Ludwig as an alternative to Composer

Traditionally, Drupal Commerce 2.0 is installed with Composer, but it is not always easy. Maybe a handy GUI will be built in the near future, but right now, a fresh alternative to Composer has been released by the Commerce creators. Now you can use Ludwig to manually install the required libraries.

Over 30 payment gateways and handy integration

Improved APIs for Drupal Commerce 2.x significantly reduce the development time for integrating payment gateways. In addition, over 30 special modules make it easy for Drupal 8 e-commerce sites to work with the payment gateways, and all of the modules have been freshly updated and are ready to go!

Which payment systems do you prefer? The choice is as broad as an online store’s product range! PayPal, Authorize.Net, Payplug, Braintree, Square, Stripe, Ingenico, Alipay and Worldline are just the beginning of the list. Other payment methods are also possible like cash on delivery, card on delivery, check, bank transfer and more.

Handy user interfaces are provided for managing payments. To ensure better payment security, there is tokenization support (replacing credit card data with so-called tokens that are useless to trespassers and are handled by the payment provider).

Cool checkouts

On your Drupal 8 online store, you can configure multiple checkout processes for different order types. This includes the number of steps required from the user, the information they have to provide, the possibility to buy with no registration and much more. By the way, for a better user experience, addresses can now be reused for your returning customers.

“Smart” taxes

The right taxes will be automatically included in the product prices. This is due to useful plugins with a whole collection of tax rates, third-party services like Avalara, and the ready logic for using it all. Your online store’s home country, its country of registration, the user’s location, the physical or digital product type and other factors can be taken into account. Configuration options are really flexible.

Multiple stores

Handling multiple e-commerce stores is a breeze now. You can define special settings for each online store (contact information, default currency and more). Cross-selling the same products in different e-shops is also possible.

Products and their variations

You can comfortably create and edit product variations, different by such product attributes as color, size, pattern or whatever. Each product variation has its own machine-readable ID, or SKU. There are great opportunities for inline editing.

And more

Other Drupal Commerce 2.x niceties include an improved UI to create discounts and coupons, better currency management, helpful Twig templates, and so much more.

It’s time to see your e-shop cart bursting with orders!

Well, this has been just a brief review of Drupal Commerce 2.x novelties. Believe us, your shiny, modern, easy to use, and powerful Drupal 8 online store will be capable of absolutely anything! For building one from scratch or adding Drupal Commerce 2.x functionality to your existing Drupal 8 site, contact our developers.

PS. Attention for the most tech-savvy readers! Much water has passed under the bridge since 08/2016 (the times of Drupal Commerce 2.х beta 1), but we still cannot help offering you this blog post by our developer with instructions on setting up an online store with Drupal Commerce 2.0. Click on it, and take the best from it.

PPS. To never miss an interesting update by staying with us on Telegram, Facebook, Twitter, Google+, LinkedIn, and receiving our official newsletter.

Sep 20 2017
Sep 20

Today, Acquia announced that it expanded Acquia Cloud to support Node.js, the popular open-source JavaScript runtime. This is a big milestone for Acquia as it is the first time we have extended our cloud beyond Drupal. I wanted to take some time to explain the evolution of Acquia's open-source stack and why this shift is important for our customers' success.

From client-side JavaScript to server-side JavaScript

JavaScript was created at Netscape in 1995, when Brendan Eich wrote the first version of JavaScript in just 10 days. It took around 10 years for JavaScript to reach enterprise maturity, however. Adoption accelerated in 2004 when Google used JavaScript to build the first release of Gmail. In comparison to e-mail competitors like Yahoo! Mail and Hotmail, Gmail showed what was possible with client-side JavaScript, which enables developers to update pages dynamically and reduces full-page refreshes and round trips to the server. The benefit is an improved user experience that is usually faster, more dynamic in its behavior, and generally more application-like.

In 2009, Google invented the V8 JavaScript engine, which was embedded into its Chrome browser to make both Gmail and Google Maps faster. Ryan Dahl used the V8 run-time as the foundation of Node.js, which enabled server-side JavaScript, breaking the language out of the boundaries of the browser. Node.js is event-driven and provides asynchronous, non-blocking I/O — things that help developers build modern web applications, especially those with real-time capabilities and streamed data. It ushered in the era of isomorphic applications, which means that JavaScript applications can now share code between the client side and server side. The introduction of Node.js has spurred a JavaScript renaissance and contributed to the popularity of JavaScript frameworks such as AngularJS, Ember and React.

Acquia's investment in Headless Drupal

In the web development world, few trends are spreading more rapidly than decoupled architectures using JavaScript frameworks and headless CMS. Decoupled architectures are gaining prominence because architects are looking to take advantage of other front-end technologies, most commonly JavaScript based front ends, in addition to those native to Drupal.

Acquia has been investing in the development of headless Drupal for nearly five years, when we began contributing to the addition of web service APIs to Drupal core. A year ago, we released Waterwheel, an ecosystem of software development kits (SDKs) that enables developers to build Drupal-backed applications in JavaScript and Swift, without needing extensive Drupal expertise. This summer, we released Reservoir, a Drupal distribution for decoupled Drupal. Over the past year, Acquia has helped to support a variety of headless architectures, with and without Node.js. While not always required, Node.js is often used alongside of a headless Drupal application to provide server-side rendering of JavaScript applications or real-time capabilities.

Managed Node.js on Acquia Cloud

Previously, if an organization wanted to build a decoupled architecture with Node.js, it was not able to host the Node.js application on Acquia Cloud. This means that the organization would have to run Node.js with a separate vendor. In many instances, this requires organizations to monitor, troubleshoot and patch the infrastructure supporting the Node.js application of their own accord. Separating the management of the Node.js application and Drupal back end not only introduces a variety of complexities, including security risk and governance challenges, but it also creates operational strain. Organizations must rely on two vendors, two support teams, and multiple contacts to build decoupled applications using Drupal and Node.js.

To eliminate this inefficiency, Acquia Cloud can now support both Drupal and Node.js. Our goal is to offer the best platform for developing and running Drupal and Node.js applications. This means that organizations only need to rely on one vendor and one cloud infrastructure when using Drupal and Node.js. Customers can access Drupal and Node.js environments from a single user interface, in addition to tools that enable continuous delivery, continuous integration, monitoring, alerting and support across both Drupal and Node.js.

Acquia Cloud now supports Node.js for Headless DrupalOn Acquia Cloud, customers can access Drupal and Node.js environments from a single user interface.

Delivering on Acquia's mission

When reflecting on Acquia's first decade this past summer, I shared that one of the original corporate values our small team dreamed up was to "empower everyone to rapidly assemble killer websites". After ten years, we've evolved our mission to "build the universal platform for the world's greatest digital experiences". While our focus has expanded as we've grown, Acquia's enduring aim is to provide our customers with the best tools available. Adding Node.js to Acquia Cloud is a natural evolution of our mission.

Sep 20 2017
Sep 20

DrupalCon Vienna includes a full track of core conversations where you can learn about current topics in Drupal core development, and a week of sprints where you can participate in shaping Drupal's future.

In addition to the core conversations, we have a few meetings on specific topics for future core development. These meetings will be very focused, so contact the listed organizer for each if you are interested in participating. There are also birds-of-a-feather (BoF) sessions, which are open to all attendees without notice.

Time Topic Organizer Monday, 25 Sep, 13:00 Coding standards fails and automated interdiffs on xjm Tuesday, 26 Sep, 12:00 Media initiative (BoF)chr.fritsch Tuesday, 26 Sep, 15:45 Out of the Box initiative (BoF)kjay Tuesday, 26 Sep, 17:00 Composer bojanz Wednesday, 27 Sep, 11:30 Workflows initiative dixon_ Wednesday, 27 Sep, 14:30 JavaScript drpal, nod_ Friday, 29 Sep, 11:30 API-first initiative Wim Leers Friday, 29 Sep, 13:00 Migrate initiative Gábor Hojtsy

Also be sure to watch Dries' keynote for ideas about Drupal's future!

Sep 20 2017
Sep 20

An update on the strategy and progress of Paragraphs is long overdue with too many unanswered questions until now. Here we are!

The rising global star

Paragraphs climbed up from position #223 in June 2016 to currently #123. People all over the world are presenting success stories or best practices around Paragraphs at every possible event.

While Drupal 8 has only 18% of the Drupal 7 usage, Paragraphs for Drupal 8 already has 11% more installations than the Drupal 7 version. Wow! 15% of the Drupal 8 users (compared to 2.5% at Drupal 7) opted for Paragraphs, likely putting it into the effective top 20 modules for Drupal 8.

Waiting until it is ready

After the exciting release at the Drupal Mountain Camp, we were ready to adopt sponsored features: We presented slides to stakeholders with several (15+) isolated small proposals, refined and extended them with mock-ups so that they could identify its users pains and help fund small features with immediate value to them. We spent weeks creating mock-ups and slides that showcased the ideas and constantly refined them.

Yet we didn’t succeed winning clients for funding and most of the previous collaborators shifted their focus back to regular commercial work. How could Paragraphs still have evolved?

Primer - a flagship use case

We decided to invest into a hybrid approach: Developing Primer for digital storytelling based on Paragraphs. By being opinionated, one can find many simple answers to otherwise complex problems. This led us to re-prioritize all the Paragraphs issues: We ended up focussing on extensibility and general UX improvements in Paragraphs itself. The vision of Paragraphs Collection as an atomic component library (defining Paragraph types, fields, providing plugins, templates and default design) mostly fell into the distribution context.

A new exciting release of Paragraphs

We concluded early that Paragraphs will ship with a classic widget that is mostly unchanged while innovating within a new widget with an experimental stability. Users can easily switch to the new widget, provide early feedback and switch back in case of issues.

The new release Paragraphs 8.x-1.2 contains a completely overhauled experimental widget. Its UX evolved significantly with a nice mobile experience.

To list a few new features: Action button "...", Drag & drop mode, Autocollapse mode, Paragraph summary with icons, Add modal form, Paragraph type icon with description and many more.

The new widget remains experimental. We are using it heavily in production already, but there are some known bugs (even data loss situations) and we still want to be flexible to complete ongoing refactoring. We are close to reaching a stable milestone that implements a nice collection of the original UX proposals.

We want to thank everyone that keeps contributing, with special thanks to Lukas von Blarer for his help with the Drag & drop mode UI after Berdir spent weeks debugging form magic to make it work, and the Thunder team (tjwelde, chr.fritsch, mtodor) for starting the modal add mode. You are awesome!

Quo vadis Paragraphs?

Our switch to Primer has allowed us to keep pushing many pieces forward in the Open Source domain for a limited time. Still, a huge potential of the original vision was lost. Our Drupal ecosystem can only survive in the long run if we keep innovating at a fast speed and it will be critical for the success of Paragraphs to find funds. We are exploring further options to involve major beneficiaries into our innovation cycle. Contact us if you like our work and you want to support it.

Sep 19 2017
Sep 19

Last week, Dries Buytaert published a post detailing the organisations that sponsor Drupal. It’s an insightful report, and we’re proud to be represented among the top 30 contributing organisations globally based on the number of commit credits.

This is due to the hard work of our development team. We’ve written before about why we think businesses should pay developers to contribute to open source, and we continue to practice what we preach.

I spend around 20% of my work week contributing to open source, primarily Group – the Drupal 8 module I wrote to allow you to create arbitrary collections of content and users, and grant access control permissions on those collections. Check out all the reasons Group is awesome!

How much time I spend on open source.

Before I joined Deeson I worked almost exclusively on Group in my own time. My previous employer promised me time for Group but I could never really get round to it properly during office hours. It started putting a massive strain on my personal life. Since joining Deeson, I work one day a week on contrib or core.

My main focus is Group, which gets the most attention throughout the year. However, sometimes I need to add or fix something in core so I focus on that instead. That may take up several weeks but in the end I always return to Group.

I now only spend my personal time reading incoming issues, blog posts and Twitter about Group and coming up with architecture. The actual coding is done during office hours.

Employer buy in is key.

Deeson cares about what I work on, encourages me to work on high-visibility modules and issues, and generally gives me the space I need to properly contribute back to the project.

They recognise the fact that this type of work leads to a high level of expertise which in turn benefits the company in the quality of the work we do for clients. 

Deeson ranks top of the list for me, hands down, when it comes to agency commitment to encouraging developers to work on open source projects. When they say I get one day a week, I get one day a week. 

Only over the summer with people on vacation was I asked to cover for others for a couple of weeks. Which is only natural when you’re part of a team. The rest of the year I really get the time I need to keep up with my contributions.

Contributing to open source makes for better developers.

Open source is what I do. The inherent constant peer review is exactly what I need because I don’t have a degree in computer sciences. If it weren’t for the way open source works, I wouldn’t be the developer I am now. It has really helped my hone my skills in a way that education probably never could. 

In other words: My job would probably suck if it weren’t for the fun aspects open source software has to offer!

If you want to work for an agency that offers paid time to support open source projects, check out our current vacancies.

Sep 19 2017
Sep 19
start in the middle of the arrow between current and better

Prepare to start in the middle

Help your peers get up to speed before Drupalcon so that while at Drupalcon you can more quickly go beyond “getting everybody on the same page” and move on to making decisions and defining next steps.

We can always do with more feedback from people using the Drupal toolkit to tackle, specific, challenges.

Get a blog post out, tweet out those “plan” style issue links, share that google doc, let us know which BoF you’ll host, etc. Help more people understand what’s moving where and what’s needed now.

It helps getting this info out there before Drupalcon because Drupalcon itself is where you then get together to decide and agree on path(s) forward.

Help people prepare so that you can start in the middle.

Maybe the feedback forces a restart from scratch after all because the problem is actually a different one than initially imagined. That’s still a win :)

Drupalcon is a great way to connect with the known experts and to onboard new experts.

Let us know what you hope to achieve.

19 Sep 2017

Sep 19 2017
Sep 19

In a bit less than a week's time of writing this post, I’ll be packing my bag and getting ready to fly from Edinburgh to Vienna for the annual DrupalCon event. 

For those reading this who don’t already know, DrupalCon Europe is a community-focused event intended to bring existing community members together as well as encourage new participation in the project. There are a number of session tracks focusing on broadly accessible topics such as “Being Human” all the way through to the detailed and technical sessions. There are also sprint workshops focused on adding features and fixing bugs in the existing and future version of Drupal. In a very real sense, there is something for everyone.

 Compared with some of the other Amazee Labs team members, I am a relative DrupalCon newbie. I’ve only recently moved to the UK, so this will be my second DrupalCon. For some of the team members, this will be their 10th or even 15th DrupalCon!

Something that struck me last year, and that I’m really excited to see again this year, is the diversity of the attendees and how much work the organisers and community put into making the event accessible. I’m really looking forward to seeing people from all ages, races, and genders getting together under the banner of something we all have in common, namely our support (albeit in varied forms) for the Drupal Open Source project.

DrupalpsThere is a growing sense of excitement in our daily standups and on our Slack channels as we draw closer to this year’s event. We have people coming from across Europe, South Africa, the UK, Taiwan, and the USA. While most of us are traveling to the event by way of planes, trains, and automobiles we can proudly boast that one of our team members is cycling all the way from Zurich to Vienna through the Alps! This is not the result of a lost bet between rivals but rather Amazee’s latest “Extreme Challenge” participant. Check out the Tour de Drupalps if you are (understandably) intrigued. You can also follow @dasjo or the #drupalps on Twitter.

Amazee submitted a number of session proposals this year and we are extremely proud of our team members who were selected to share their knowledge and ideas with the Drupal community.

Dania and Michael from the Amazee Group will present “How to go from one to seven companies around the world and how to run them”.

Lisa and Sarah will drop some creative styles and share “Motion Design - Improving UX with animations

Bastian and Tyler from will be showing us “Power to the People - How using containers can make your life easier”. 

John Albin (this being his 14th DrupalCon!) has a talk planned to shed some light on CSS-in-JS and share some of his unexpected lessons for Drupal component design. 

And finally “Everybody cheer! Here comes Media!” will be presented by Sasa and Tadej

With so many of our core team members working all over the world, we love to take these opportunities to have some real-world and in-person conversations. Our team dinner is a great opportunity to buy that person - who is usually on the other side of the world - a beer to say thanks for that one time where they made magic happen on that deadline that needed to get done that one Friday. It’s also a great opportunity to seek out that core or module developer and say thanks for all their efforts on the Drupal project.

Looking beyond ourselves, we’re also really excited to see what other companies and teams are doing and thinking. Josef is super excited for the Community Summit on Monday. Mary is excited to see the presentation on “Teaching Clients How to Succeed”, and I’m looking forward to seeing a presentation on Drupal & Ethereum as well as the Commerce 2.0 “Lessons Learned”.

If you’re attending, I hope to see you around! If you’re not attending you’ll be able to follow along with us. During the course of DrupalCon we will be posting at least one blog post per day on our Amazee Labs blog about the various events and highlights of our team’s experiences, so check back here and keep an eye out for our various social media posts.

Sep 19 2017
Sep 19

Drupal Modules: The One Percent — Module Sitemap (video tutorial)

[embedded content]

Episode 36

Here is where we seek to bring awareness to Drupal modules running on less than 1% of reporting sites. Today we'll investigate Module Sitemap, a module which will help you navigate through pages associated with modules you have enabled on your site. We also briefly review the Coffee module.

Sep 19 2017
Sep 19

I'll be presenting at DrupalCon Vienna next week as part of my evangelising against static design tools like Photoshop, InVision, and Sketch. The talk will cover items such as "What's the problem we are trying to solve?", "Why do static tools not solve the problem?", and "Why is working with component design and design in the browser the most sustainable solution?".

I got a request today from a former colleague:

@marky I need some quick practical selling points why our designers should stop using dedicated design programs and design in the browser instead. 2 or 3 should do!

I guess he had to add in the "2 or 3 should do" knowing I'd go off on a long rant. In either case, I gave him 5, here they are:

1) Don't Build Up Expectations for Your Client

When you use a static tool such as Photoshop, you build up expectations for your client. What usually happens is that all titles are the same length, all images have the same crop proportions, etc. But when your client adds real content, the rendered page looks like an approximation of the design.

With design in the browser, what you show to your client is what your client will get.

2) Quicker for Implementing Change Requests

If changes are needed, they can very quickly implemented by editing classes in CSS (for example, the new theme for Drupal core has a base font size of 15px. We’ve decided to up that to 16px - which means one line of code in CSS - instead of redoing all the Sketch files). The same is true if you want all image in a teaser list to position on the right hand side of the text instead of the left. Doing this in Phhotoshop is a pain.

3) QA Starts Sooner

QA testing can start waaaay sooner than using Photoshop or Sketch. As the client is signing off the designs (or each component) they are also signing off the frontend QA. Using something like PatternLab with Twig you can have almost the whole Drupal theme developed in this design phase, and then get the backend developers to output the HTML that will match it.

4) Signoff is on Real Devices

Client will see the designs in a real device and how they will render on that device - not looking at a mobile design on a desktop screen. When a client looks at a pdf of their new site, they will zoom out until the text is unreadable to see the whole page on one screen. No one will ever view the site like that though. Design in the browser forces your client to view the site as it will finally be viewed, in whatever browser/device they choose.

5) Multiple Variations is a Breeze

It’s very easy to show different variations of the same design (e.g. blog post with short title, long title, no image, etc) to see how the design stacks up against these real-world scenarios. This takes much longer in Photoshop or Sketch if you need to create individual mockups for each. Again, using PatternLab for this, you can have a base blog.json file (with the data for the blog component) and then extend that with each variation you need blog~long-title.json (with just the title variable changed), blog~long-title-no-image.json (you get the idea).

Okay so, at this stage it looks like I'm not a fan of Photoshop (I'm not) or InVision (I'm definitely not), or Sketch (I am! I love Sketch). So is there are place for these tools? Well, yes. If you designer likes to use them, and can work quicker with them (maybe he/she is not a frontend developer), then by all means they should use them. As each component is designed, they can then hand them over to the frontend team to implement them as HTML/CSS/JS, and it's these files that are sent to the client for signoff.

Won't that take longer? Initially, yes - it'll take a little longer to get the designs to the client, but the payoff is in how much sooner QA is done, how the client doesn't expect a unicorn to eventually be delivered as that is not what they signed off, and ... at some stage you are going to have to write the necessary HTML/CSS/JS, so why not early on?

After all that, what was the response from the person who said "2 or 3 should do"?

/me has started wondering how to turn @marky off now that he has started him...

I'll be speaking about this at DrupalCon Vienna on Wednesday 27th September at 15:45. My talk is titled: "Back to the Future: No More Static Mockups!" I'd love to chat with you there.

Sep 19 2017
Sep 19

There have been many blog post written about the forthcoming DrupalCon in Vienna. Many topics were covered including our Accepted Business sessions for DrupalCon Vienna. To refresh your memories, we presented them because our commercial director Iztok Smolic was selected in a business track team to help prepare the program and select the sessions.

Maybe it is obvious or maybe it is not. But it's definitely time to say that we will be present on a DrupalCon in Vienna! Besides Iztok, who will be attending his eight DrupalCon, with the first one dating back to 2009, our development director Bostjan Kovac and our client adviser Ales Kohek will be present as well. Unfortunately, they won't be having any sessions, but that will certainly give them more time to talk to you. So, if you spot them, say hello, and they will gladly have a chat with you. Don't worry, they don't bite.


Agiledrop in DrupalCon action


In case that you won't miss them, here is some general information about DrupalCon Vienna. It is an international event that brings together the people who use, develop, design and support the Drupal Platform. It will be held at the Messe Wien Exhibition & Congress Centre from 26-29 September. So, that's exactly one week away. We suggest you should consider packing soon.

Since we don't have any sessions, you might have thought that we won't be helping an event. But we are. We do that in a variety of ways practically all the time. This time, we are very proud to say that we will be a coffee sponsor. You will be able to get coffee in the mugs wrapped with a background you see on the picture beyond. We hope you will like it.


Agiledrop will be having this coffee mugs at the event


The bad news is, as you may have read some days ago that there won't be a DrupalCon in Europe next year. Moreover, besides financial, there are also some other issues regarding DrupalCons, so maybe that's one of the last opportunities for Europeans to be included in the biggest Drupal event in a more affordable way. Therefore, don’t waste any of your time buy a ticket. You can find more information about them here.

Besides all the sessions, summits, trainings and sprints, there will be quite a lot of social events. They are scheduled from Tuesday to Thursday. If you consider staying in Vienna a day or two before or after the conference, you should. We can guarantee that from our personal experience. Almost everyone in our office was already in Vienna and we all recommend you to visit the city.

Nevertheless, hope to see you on DrupalCon Vienna!

Sep 19 2017
Sep 19

Once upon a fall Saturday morning Drupal-minded developers got together. The reason was Drupal Global Training Day #5.

This event is for those who do not know anything about Drupal and for those who have just started to explore Drupal.

We unlocked a new location: it was Omsk State University. Also, we tried a new format of Drupal Global Training Day. Do you want to know how it was? Read on.

The junior developer Sasha Lopata told about the Drupal CMS, its history, competitive advantages and why it’s chosen to create a large number of websites in  “Meet Drupal in half an hour” session.

Another Sasha demonstrated the step-by-step process of creating a module in Drupal 8 and reported about the basic techniques and technologies.

The front-end developer Dima disclosed the interesting topic: "Theming in the Zen style: how to create a Drupal 8 theme". He showed how to manage the display of content on a Drupal site and what possibilities the platform under discussion provides.

The content marketer Iuliia wrapped the theory part up with the talk on the Drupal Community. She showed the participants how the Community lives, communicates and how its members collaborate and help each other.

Drupal Global Training Day #5: practice part

This time we tried a new concept of the conference. For the first time in Omsk was a workshop on creating Drupal sites in real time: this is a great way to consolidate your knowledge.

On the practice session the team lead Artyom and the developer Marina with the participants created their first own website and a module.

We asked Artyom about the practical part and how to organize it for Drupal newcomers.

And what he replied: “At the practice we created a module framework, routers, forms, and blocks. There was also an additional "home" task for the participants. In my opinion, in order to master some technology, you need to code a lot. Think up some interesting tasks for you that you and try to implement it. Start with the simplest things and gradually add new functionality. I recommend reading the Acquia docs "Building modules with Drupal 8" for beginner Drupal developers.”

Thanks to everyone who has found the time to come. This event happened, all because of you. Let’s create Drupal events together.

Drupal Global Training Day # 5 in Omsk

Sep 19 2017
Sep 19

Drupal 8 has made it a lot easier to deploy the configuration of a site from one environment to another, but there are still quite a few tasks that you often end up needing to do manually.

For example, you usually want Drupal's Google Analytics module uninstalled on Dev and Test environments, but installed on Production. Also once Google Analytics has been installed on Production, you want to set it up to use your site's Google Analytics ID and other configuration options.

Completely automating deployments obviously saves a lot of time, it makes deployments much safer as there's less chance of forgeting to make some critical change, fits in with automated testing workflows, and also saves people from having to do boring repetative work that's best handled by a machine.

Wouldn't it be great if we could automate these tasks for each environment and have a one-click deployment? 

Pantheon Drupal Hosting

We've been using Pantheon hosting for some of our Drupal site development projects for a while now and have come to quite like their built in workflows, in fact the process is so smooth that it makes having to do all the post deployment manual steps feel all the more annoying!

Luckily the fine folks at Pantheon have also provided us with a way to script the automation of all these tasks with a feature that integrates beautifully with Drupal 8.

Quicksilver Platform Hooks & Drupal

Quicksilver is a feature of Pantheon hosting that can trigger actions when a step of a workflow happens.

Triggers can be code being deployed, code being committed via Git, the database being cloned, or cache being cleared, and each of these triggers can be specified as a before or after the workflow step happens.

Each trigger can run one, or more, custom PHP scripts that you add to a /private directory at the top level of your project.

Triggers, and which script they run, are specified in a pantheon.yml file which also sits at the top level of your project.

Here's an example of what that looks like:

      - type: webphp
        description: Uninstall modules
        script: private/scripts/uninstall_modules/uninstall_modules.php
      - type: webphp
        description: Enable modules
        script: private/scripts/enable_modules/enable_modules.php
      - type: webphp
        description: Import specific configuration
        script: private/scripts/import_config/import_config.php
      - type: webphp
        description: Clear cache
        script: private/scripts/clear_cache/clear_cache.php

Scripting Drupal Tasks

Your scripts should be coded in PHP and put into a top level /private directory, that you'll need to create, which Pantheon automatically prevents anyone from accessing through the web.

What scripts you add and how you organise them within the /private directory is up to you, as you can set the path to scripts in the pantheon.yml file.

At Code Positive we've established a few patterns as part of our Drupal support and maintenance work which I'd like to share with you....

Organising Quicksilver Scripts

Following the Drupal pattern we treat each script as it's own self contained module, with a standard set of files and directories:

  • README file for documentation
  • PHP file that contains all the code for what the script does
  • Config directory that has a sub-directory for each environment
  • Settings files that can be added to the sub-directory of each environment

This pattern enables us to provide specific settings for each environment and keep the logic of the script completely seperate.

We're able to use PANTHEON_ENVIRONMENT in our code to check which environment is currently being acted on and load the settings file for that environment:

if (defined('PANTHEON_ENVIRONMENT')) {

    case 'live':
    case 'test':
    case 'dev':
      $config_file = dirname(__FILE__) . '/config/' . PANTHEON_ENVIRONMENT . '/';
      // Multidev instances.
      $config_file = dirname(__FILE__) . '/config/multidev/';


Drush is a command line interface for Drupal that provides a huge number of commands for a wide range of Drupal tasks.

We can use Drush in our scripts to do most of the work by using the passthru() function to set Drush commands.

For example, to enable specific modules:

passthru("drush pm-enable -y $module");

If we need to use a Drush command to get data from Drupal use the shell_exec() function.

For example, to get a list of enabled modules:

$module_list = shell_exec("drush pm-list --type=module --status=enabled --pipe 2>&1");
$enabled_modules = explode("\n", $module_list);


Use Terminus, Pantheon's command line interface, to debug scripts.

Once you're logged into your site on Terminus you can see debugging messages printed out by your scripts.

For example:

echo('Configuration imported.' . "\n");

Code Positive Quicksilver Scripts For Drupal Deployment

Quicksilver scripts for automating Drupal 8 deployments on Pantheon are fairly quick and easy to write, but even better than that, you may not need to write them at all!

We're making available the scripts we use at Code Positive, which cover most of the tasks we used to do manually.

These scripts are ready to be used on any site, all you need to do is read the instructions in the README file for each script and set them up the way you want them to work on each environment.

Here's what they do....

Enable Modules

This script enables whatever Drupal modules you specify to be enabled.

Make sure you have the modules in your code base, and then list their machine names in the file for the environment they should be enabled on.

For example create a file and add it to .../enable_modules/config/dev/


$config = array(

If a module is already enabled the enable command is skipped for that module and the script tries to enable the next module on the list.

Uninstall Modules

This script uninstalls whatever Drupal modules you specify to be uninstalled.

Configuration is the same as for the Enable Modules script.

Make sure that the module(s) are still in the code base before uninstalling as they contain uninstall steps for removing themselves cleanly from the database.

Import Config

This script imports specific configuration into Drupal, such as the settings for the Google Analytics module.

Use Drupal to export specific settings as individual files and add the files to the config directory of the environment it should run on.

The settings files will be auto-detected so this is both incredibly powerful and incredibly easy to use.

Clear Cache

This script clears the Drupal cache.

To use this create a file and add it to the environment you want to clear cache on, for example: .../enable_modules/config/dev/


  $clear_cache = TRUE;

If you're interested in writting your own scripts this is the best of these script to look at first as it's a very simple script built around the Drush command for clearing cache.

Get The Scripts

All of the above Drupal deployment scripts can be downloaded from our repository.

Let us know in the comments below if you find the scripts useful, and if there's any improvements you can suggest.

Sep 19 2017
Sep 19
Dropdown Menu in Drupal 8 with the Superfish Module

If you want to build a large, multi-level drop-down menu in Drupal 8, then the Superfish module is a great choice.

The Superfish module makes use of the jQuery Superfish menu plugin, which is useful for multi-level drop-down menus. Superfish has more features than most dropdown menus. It supports touch devices and keyboard interaction.

In this tutorial, we’re going to create a menu for a sports news site with three menu levels.

Three menu levels

Step #1. Install the module and libraries

First, let's install the module:

Now, let's install the libraries:

  • Download the Superfish library 2.x for Drupal 8.x.
  • Uncompress it to your [DRUPAL_ROOT]/libraries directory. If you don’t have the libraries directory yet, please create it
  • Download the jQuery Easing plugin (optional but recommended)
  • Uncompress it too to your [DRUPAL_ROOT]/libraries directory. 
  • Rename both directories, so that you have the following file/folder structure:

 Superfish module file structure

Step #2. Create the menu structure

  • Go to Structure > Menus.
  • Click the Add menu button:

Click Add menu button

  • Enter the menu title and click the Save button:

Add site title and click Save

Step #3. Add the menu links

  • Once the menu has been added, click the Add link button to create the menu links:

Click Add link button

  • Create the menu links according to the predefined structure. Notice that you have to link each menu item to a piece of content.
  • Click on the Show as expanded checkbox, so that the menu will appear expanded if it has children.
  • Click the Save button each time you create a menu item.

Create menu link and click Save

Once you have created all the links:

  • Use the handles to drag and drop the items in order to match the menu structure
  • Click Save:

Match the menu structure and click Save

Step #4. Place the menu

Menus in Drupal 8 are rendered as block entities.

  • Click Structure > Block layout.
  • Search the Primary menu region and disable the Main navigation default block.
  • Click the Place block button.

Click Place block button

  • Enter the name of your menu in the search box. You will find two “News site” menus.
  • Click the Place block button on the line with the Supefish category.

Click Place block button

Step #5. Finilize the Superfish configuration

  • Uncheck the Display title checkbox:

Uncheck Display title checkbox

There are several configuration options in this window. Particular attention deserves the Slide-in effect provided by the jQuery Easing plugin (which you downloaded at the beginning) and the ADVANCED SETTINGS where you can configure for instance the animation speed. Play with this options until you find the ones to your liking.

Block settings

 Advance settings

  • Click Save block and go to your homepage. You will have a multi-level drop-down menu now!

You have to tweak it with your own CSS, but the main menu functionality is there:

You have a multi level dropdown menu now

I hope you enjoyed reading this tutorial and making your own Superfish menu. Please leave your comments below.

About the author

Jorge lived in Ecuador and Germany. Now he is back to his homeland Colombia. He spends his time translating from English and German to Spanish. He enjoys playing with Drupal and other Open Source Content Management Systems and technologies.

View the discussion thread.

Sep 18 2017
Sep 18

BADCamp Drupal Summits

Summits are one-day events focused around specific topics and areas of practice that gather people in specific industries or with specific skills to dive deep into the issues that matter and collaborate freely.


Sign Up for a Summit Today!


Nonprofit Summit (Wed)

The BADCamp Nonprofit Summit (NPS) is back in Berkeley for 2017 with even more opportunities for nonprofits and developers to collaborate, learn, and grow! We’ve got a full day of case studies, presentations, and small-group breakout sessions, all led by nonprofit tech experts. Come discover new tools and strategies, learn how to use them, and make contacts with other members of the Drupal nonprofit community!

Higher Ed Summit (Thurs)

The Higher Education Summit is a unique opportunity for site owners, IT managers, developers, content creators, and agencies dedicated to supporting and advancing the use of Drupal in academia to share, learn, and strengthen our community of practice. Through panels, talks, and ample breakout sessions, participants share and learn from one another’s victories and challenges, and build momentum in cross-institutional initiatives. Drupal behind the login. This year's theme is using Drupal as a collaboration tool (intranets, research sites, data sharing, administrative tasks, portals, etc.).

Front End Summit (Thursday)

Perhaps more than any other discipline, front-end development has been rapidly evolving over the past several years to accommodate an ever-changing variety of workflows, toolsets, best practices, and technologies. As BADCamp turns 10, let us acknowledge the past, assess current trends, and discuss the future of front-end development at the Frontend Summit.

Backdrop Summit (Wed)

Backdrop CMS is a content management system based on the Drupal you know and love, but with a new mission that aims to decrease the cost of long-term website ownership. The goal of this Drupal fork is to empower more people to do more things on the web. At the Backdrop Summit you'll learn about the Backdrop software and its differences from the Drupal CMS.

DevOps Summit (Thurs)

Want to accelerate development at your organization? The DevOps Summit is about inspiring people (aka YOU) with new processes and tools to help transform ideas into working web applications. We’ll be discussing topics like automated testing, continuous integration, local development, ChatOps, and more. Along the way you’ll have a chance to pick the brains of leading DevOps professionals in the Drupal community. Anyone who is looking to work with happier development teams while saving time and money should attend.


Do you think BADCamp is awesome?

Would you have been willing to pay for your ticket?  If so, then you can give back to the camp by purchasing an individual sponsorship at the level most comfortable for you. As our thanks, we will be handing out some awesome BADCamp swag as our thanks.

We need your help!

BADCamp is 100% volunteer driven and we need your hands! We need stout hearts to volunteer and help set up, tear down, give directions and so much more!  If you are local and can help us, please sign up on our Volunteer Form.


A BIG thanks to our sponsors who have committed early. Without them this magical event wouldn’t be possible. Interested in sponsoring BADCamp? Contact [email protected] or [email protected]

Thank you to Pantheon & Acquia for sponsoring at the Core level to help keep BADCamp free and awesome.

Sep 18 2017
Sep 18

After the success of last year's GSOC project with Drupal, I thought it would be a great idea to see if we could take what we did there (server-side encryption) and do something similar on the client side. The benefit of this approach is that unencrypted content/data is never seen by the hosting server. So it's not necessary to trust it to the same degree. This has been a requested feature for some time, and become very popular within the instant-messaging space.

I posted the idea, but wasn't sure how much traction there would be given the additional complexity. Before long, there were two interested students, Marcin Czarnecki and Tameesh Biswas, who were interested in the project given their interest in cryptography. They both wrote very good proposals, which we in the Drupal community accepted.

With the help of Adam Bergstein (my co-mentor from last year) and Talha Paracha (last year's student), we were able to mentor both students in working towards completing their projects, even with the added complexity. Unlike last year, users' passwords couldn't be used to encrypt anything because the site has access to these. An out-of-band mechanism was necessary to perform the encryption, public-key cryptography. It needed to be in the hands of users themselves instead of being handled implicitly by the server.

I'm delighted to report that both students passed. The community can now take their projects and build upon them. Please review the new Drupal modules at Client-side content encryption (overview) and Client Side File Crypto (overview). If there are any issues, please open tickets in the respective queues.

This article, Client-side encryption options now available in Drupal, appeared first on the Colan Schwartz Consulting Services blog.

Sep 18 2017
Sep 18

It’s official: Deeson is in the top 30 of companies contributing to Drupal globally! As huge proponents of open source we’re proud to be playing a key role in supporting the health of the project, and this is testament to the hard work of our development team.

Next week we’re heading to DrupalCon Vienna 2017. We’re pleased to sponsor the Women in Drupal event again this year, and in the spirit of sharing what we’ve learned we’ll also be delivering several sessions throughout the event. Here’s a taste of what to expect:

Component driven front-end development

John Ennew. 26th September, 2.15pm in Lehar 2.

Pages are dead - long live components.

With a component based approach your development team can maintain a catalogue of templates independent of the backend CMS.

When the backend work starts, these components will then be integrated into Drupal. This talk will describe a method for doing this which does not cause complex themes or copying pieces of template code out of the front-end prototypes.

This talk will cover:

  • The general approach to component based development
  • A method for developing components independent of the backend system which will be used
  • How to integrate the components with Drupal 8
  • An overview of the advantages of this approach

Building social websites with Group and Open Social

Kristiaan Van den Eynde. 27th September, 10.45am in Lehar 1.

A lot of Drupal sites are run by only a handful of people. A few power users receive the rights to administer other user accounts, some others can post and publish content and everyone else can just view content and “use” the site. It’s when this scenario doesn’t suit your needs that you might want to have a look at the Group module.

Group allows you to give people similar permissions like those above but only for smaller subsections of a website. Say you run a school website and you want students to be able to only see the courses that are available for them to enroll in, but nothing else. Or you want to run a social network where users can post content, but only within their sandboxed area on the website. Group’s got you covered.

This session will be a brief description of the Group module by its author Kristiaan Van den Eynde (Deeson) and explain its key concepts. We will demo how to configure it and then show you how Group is used in the wonderful Open Social distribution.

Joining us for the second part of the presentation, Jochem van Nieuwenhuijsen (GoalGorilla / Open Social) will explain how Group enabled a team of talented developers to build a social network using Drupal 8. He will list some of the challenges and show you some of the cool stuff they built on top of the Group module.

This session is suitable for developers with some experience with Drupal 8 site building, but most of the presentation should be easy to digest for even the most junior site builders.

Birds of a Feather sessions

Drupal recently announced that Vienna will be the last European conference for the foreseeable future, and that they will host BoFs at the event for the community to discuss the future. 

If you’re not familiar with the BoF format, DrupalCon describes them as “informal gatherings of like-minded individuals who wish to discuss a certain topic without a pre-planned agenda”. This year, Deeson team members are delivering five BoF sessions:

Facilitating happy, high performing distributed teams

Tim Deeson. 26th September, 10.45am in Galerie 11-12. 

An opportunity to share tips and tools for what you've found works or problems you want help with.

At Deeson we've found a mix of tools, processes and relationship building is key. And that sharing what works for us and learning from others is invaluable.

  • Are there tools that you find that really make a difference?
  • Any team events or activities that help people get to know each other?
  • How do you spot if someone isn't happy or engaged?
  • What methods works or doesn't work for different types of personalities?
  • Is always-on Slack a blessing or a curse?
  • Do in-person events matter or can everything be done online?
  • Do you have a structured way of supporting the team to get know each other well?

Bookmark this session

Agile and agencies

John Ennew. 27th September, 1pm in Galerie 15-16. 

The are many ways to run an Agile project.

Much of the written support for working with Agile is based on an internal team which doesn't always support to how the client and agency relationship works.

Agencies have a variety of mechanisms for running an Agile project from simply embedding the ceremonies of Agile to actually ensuring the project team, client and contract are Agile from the start. 

Come along and share your experiences (highs and lows), your tips and your best practices for making Agile work in an Agency.

Bookmark this session

Creating technical excellence in the tech team

John Ennew. 28th September, 2.15pm in Galerie 11-12.

Are you a technical lead?

Come and meet like minded people to share your experiences in managing your team members and ensuring technical excellence.

Bookmark this session

The road ahead for Group: New features and future development

Kristiaan Van den Eynde. 27th September, 3.45pm in Galerie 15-16.

This BoF is intended for site builders who are actively using Group for Drupal 8 and are wondering what's currently planned for development or for site builders who think there is a key feature missing from Group 8 right now. The goal is to either learn about what's coming or to actually add something to the roadmap, provided it would be useful to a larger audience.

Bookmark this session

Reinventing the entity access layer (Node access for all entities)

Kristiaan Van den Eynde. 28th September, 12pm in Galerie 13-14.

This BoF is intended for those involved in and all those who wish to participate by writing a proof of concept or by brainstorming over possible approaches.

Bookmark this session

Heading to DrupalCon Vienna 2017? We’d love to meet you! Drop us a line on Twitter if you want to chat to us or email [email protected].

Sep 18 2017
Sep 18

While working with other NGOs and agencies during the last 1,5 years, we collected more and more information about the time and money that Drop Guard will save your agency. On our website, we claim that Drop Guard will cut your update costs by 40%. CTOs and COOs want to challenge numbers like this and ask how exactly this ROI is calculated. That’s why I want to share the detailed information in this blog post with you.

Security updates are released every Wednesday. If you work in a Drupal shop that cares about security, you have to apply updates for every site every Wednesday or at least Thursday.

Did you ever review what a developer needs to do to apply an update and how much time this process needs? We did.

  • Check, which updates are available & which site they’d affect (3 minutes per site)

  • Clone or pull the GIT repo of the project & switch to the right branch (2 minutes)

  • Create an update task in Jira or any other task/ ticket system to document the update process for your clients & for time tracking            (3 minutes)

  • If you use Composer (if not, checking for patches & versions is about 3-10 times more time consuming - I recommend to get Composer!), change the version number of all modules to the latest version & test locally if the site builds successfully (5 minutes)

  • Commit your changes, add a commit message & push (2 minutes)

  • Merge the branch, at least into the QA or STAGE branch, copy the LIVE database & LIVE files into the STAGE environment, build the test instance (trigger the build job with Jenkins or let any other system start the build & the preparation of the STAGE instance automatically); wait until the build is completed (5 minutes)

  • Update the task in Jira, set it to "ready to test" & assign a tester or project manager or inform your customer that the update is now ready to be tested; document the URL of the STAGE instance (3 minutes)

  • After the test has passed successfully, merge the STAGE branch into the MASTER branch & build the LIVE instance, wait until the instance is build & make a quick check (5 minutes)

  • Close the Jira task & inform the customer about the deployment (or any other stakeholder that needs this information) (2 minutes)


                                                                                                                                                                                 Sum: at least 30 min

By using automated tests or visual regression testing you can also reduce your testing time a lot.

In this calculation of total update time, we don't respect that manuell update process are much more fragile than the automated alternative.

You are right: An update might break the site. This is possible anyway, whether you update manually or use automation. In both cases, you need to check the site, run automated tests and fix problems if they appear. Drop Guard will inform you as soon as some problems happen during the update process.

If you truly take security seriously, a site needs to be updated 4 times a month.

Let’s imagine the optimistic case and assume the update needs to be applied only 2 times a month.

The time your developers need to spend on updating one single site is 3+2+3+5+2+5+3+5+2 = 30 minutes, as I explained above. We don't respect that your developers really hate updating a site, go ask them ;-)

In Central Europe, the costs per developer (including all allocatable costs) are on average 50 EUR.

This means that one site costs 50 EUR per month, if you calculate the time your developers have to spend on a correct and quality assured process. What we don't include is that your developer could work in projects and earn money in this time - but not in the time they work on updates (except you get paid for every hour while updating a site - if so, lucky you!).

Let’s do the math: If you use Drop Guard with an agency package, you get 1 site for a price as low as 19 EUR (or even 9 EUR if you run many sites) per month.

19 EUR is 62% of 50 EUR

9 EUR is 85% of 50 EUR


Summarized, Drop Guard does the following:

✓ It saves you up to 85% of money for keeping a site up to date

✓ It makes your developers happy & more productive as they don't need to run the annoying update process manually

✓ It lets your company earn more money by focussing the developer's time on projects

✓ It makes your processes (and support service for your customers) much faster, especially if you have a great bunch of sites

If you think some details don’t fit in your case, contact us any time. We are always looking forward to learn about individual and new situations.

Do you want to learn more about our agency packages? Then contact us via [email protected].
Sep 18 2017
Sep 18

Multiple people frequently collaborate to author content in Drupal. By default, Drupal only allows a single author. This makes crediting multiple users in a byline impossible with core functionality.

The author data is stored in the uid column of the node_field_data table, which stores an INT value. Considering that this functionality is deeply integrated in Drupal core we’ll have to use a different approach.

To solve this, we simply create a new field that allows for multiple User entity references. We now have the ability to easily associate one or many users with a piece of content.

With our new “Authors” field in place, new content will use our new user reference field, however we will need to update existing content to use this field to provide consistent data. Alternatively, we could create logic to check both fields values when constructing the author data to display.

We opted for updating existing content to maintain data parity. A simple update hook in my_module.install does the trick:

 * Set value for new author field.
function my_module_update_8001() {
  $nodes = \Drupal::entityTypeManager()
    ->loadByProperties(['type' => 'article']);
  foreach ($nodes as $node) {
    \Drupal::logger('my_module')->notice(sprintf('Updated node %s', $node->getTitle()));

The final step is updating content to use our new field. The steps required here will vary widely depending on your templating and site building approach. However the basics come down to:

  • Verify that the existing Author field on the needed content types is hidden.
  • Verify that the new field displays the correct data from the referenced User entities.

With these simple steps, your content is now ready for storing and displaying the names of every user who helped with the authoring process. Now the only thing left to do is sort out fights over who gets to be listed first!

Sep 18 2017
Sep 18

There is a great deal of enthusiasm surrounding chatbots in the Internet technology world today. Fanning the flames was the news that the White House had created a Facebook chatbot using Drupal. This post explains what a chatbot is, its current status, and how it can benefit business enterprises.

What is a chatbot?

Chatbots are software agents which communicate and collaborate with human users through text messaging using a natural language, say English, to accomplish specific tasks. Examples of common tasks in a business context are product inquiries, ordering, and troubleshooting.


Chatbots holds the promise of being the next generation of technology that people use to interact online with business enterprises. From a historical perspective, the first generation of customer contact technology involves websites. Users opens the company website within their browser, navigate web pages to get the information they want and to trigger various e-commerce transactions, such as ordering a product. Next up are mobile apps which users can download on their smartphones or tablets. The problem with apps is that people have to manually download and learn to use each of them. Chatbots lead the way for the next wave of technology. With chatbots, there are no new apps to download. This is because most users already have at least 1 instant messaging application installed on their communication devices, e.g., SMS, Facebook Messenger, Slack, Telegram, Kik, etc. Another advantage for chatbots is that, because chatbots communicate using a natural language, users don't need to learn yet another new website interface and to get comfortable with the unavoidable quirks.


The chatbot interface is powered by Artificial Intelligence (AI) technologies. AI is tasked to understand the text that users enter and pass on the knowledge to the backend for processing. Another benefit of using AI is that the chatbot will learn over time to better understand user preferences and as a result, deliver better and faster services.

Why are chatbots important to enterprises?

It was reported that, in 2016, for the first time in Internet history, there were more people using messaging apps than social media. It follows that chat has outpaced social media to become the de facto standard in how mobile users want to make contact. Mobile users are known to be an impatient bunch, ready to abandon any website en masse if they are made to wait for mere seconds after their initial request. Is your business staffed properly to handle this 24x7 onslaught of customer product queries, sales orders, and support requests?


Structure of Chatbots

Image Source: Business Insider


Chatbots can be programmed to monitor and respond to those chat sessions that fall within their domain expertise, such as troubleshooting, return merchandise authorization (RMA), sales inquiry, etc. For chatbots to do their job, enterprises first need to capture the aforementioned domain knowledge in a knowledge base. Once the knowledge becomes accessible, chatbots can staff the all-important corporate functions 24x7.


By deploying chatbots, a business can save money by easing the staff head count while guaranteeing good service response time. Besides its always-on feature, another major advantage of using chatbots is the consistency in how your business processes are applied: chatbots will execute the business logic consistently in all customer contacts.


Chatbots, advanced that it is, is not the panacea of all enterprise customer service problems, nor does it completely replace the entire human work force. Human agents are still required to solve the more complex problems that are beyond the ability of chatbots. While chatbots can resolve the most basic troubleshooting tasks, second-level support technicians are still required to tackle the complicated product issues.

State of the union

The chatbot technology is still an emerging technology. There are many components that have to work together to make chatbots work. As of today, the technology stack is not standardized, and a clear market leader has not yet manifested itself.


Just as there are many messaging apps, there are as many, if not more, chatbot building platforms, each designed to work with a subset of specific messaging apps. Some messaging app vendors, such as Facebook and Telegram, also provide their own official chatbot building platforms. Besides those, there are other third-party chatbot platforms that support multiple messaging apps. For instance, Chatfuel is a chatbot platform that supports both Facebook and Telegram. The Microsoft Bot Framework supports Facebook Messenger, Slack, and SMS.


Most chatbot building platforms claim that chatbots can be developed in minutes with no coding required. While creating a chatbot may take only minutes, making it do something useful involves customization including configuring the AI front-end engine, the e-commerce and payment processor backend, etc. Given the myriad technical choices and possibilities, it is best to leverage professional help to guide the development of chatbots for your business enterprise.

Chatbots and Drupal

Many businesses have already crafted their online presence in the form of a website using an enterprise-class CMS technology, for instance, Drupal. The good news is that you can add chatbot technology to your existing technology infrastructure, rather than starting from scratch.


If you have already built an enterprise-class Drupal website, you are a one-step ahead of everyone else. The Drupal infrastructure is essentially a portal that captures your business logic, including the backend portion that interfaces with your e-commerce and other back office systems. Adding chatbots to your overall technology stack involves adding the proper middleware to connect your chatbot frontend with your Drupal-based business logic backend.


As stated in the previous section, chatbots itself is an emerging technology that may be outside the scope for most in-house development expertise. Adding the middleware to join together chatbots and your Drupal backend is an extra level of software complexity. This middleware framework is available from the Drupal community, but is currently in a very early stage for commercialization. To ensure success for your chatbot project, professional consulting is highly recommended.


If you require professional services, whether to build from scratch an enterprise-class Drupal website with chatbot integration, or to add chatbot capabilities to your existing Drupal platform, Vardot is pleased to offer such services from its Jordanian headquarters or its American and Egyptian regional offices. Contact us now for more details regarding your project!

Sep 18 2017
Sep 18

At Deeson we’ve been working on ways to develop our front-end independently from any back-end application.

Our front-end team has developed web applications using decoupled JavaScript frameworks including Angular and React but we’ve found that for many website projects a full web application is overkill and the traditional HTML templating approach is still the most efficient.

Our back-end application is usually Drupal but we’re increasingly using other frameworks such as Laravel or Symfony and would like to be able to use a consistent approach for our front-end teams. 

We’ve developed a system for this that allows modern build tools, practices Component Driven Development, allows the generation of living style guides and is agnostic to the back-end.

Component Driven Development 

A component, for us, is a collection of HTML, CSS and JS that goes together to form some display element. Consider this against a more traditional approach where HTML, CSS and JS are stored in separate global files, for example, in a global style.css and app.js files.

By grouping code together into components, we separate our application by the domain language, rather than arbitrarily by file extension. This isolates components and makes them easier to develop and maintain.

Components get named based on the domain language of the project and client. Components are not defined for the designer by the limitations and modeling of the application. This provides a common language for the designers, developers and client and reduces the chances of misunderstanding when it comes to the development of functionality.

Using the BEM approach to structuring CSS we isolate much of our CSS to specific components rather than continuously generalising CSS in the way a CSS framework like Bootstrap does. This isolates much of the CSS to a specific component giving us high cohesion and low coupling allowing for confident maintenance, removing much of the fear of wondering what effect changing a piece of CSS is will have on the whole site.

This better matches the way that we work where the complexity of our challenging designs mean rapid delivery using a CSS framework isn’t possible.

Living style guides

The output of our front-end development will include a style guide which will render each of our components into static pages.

Style guides are useful as they demonstrate the components independently of the specific implementation. This allows more rapid front-end development as front-end developers can work without having to worry about how the back-end will integrate.

Over time, however, these style guides move out of sync with the applications they were developed to provide styling information for. An application developer's job is to integrate the HTML provided by the style guide into the finished site. This has meant copying and pasting code out of the style guide templates and into the application’s templating system.

At this point we have duplication of code and the ability to maintain a strict style guide is lost. When the style guide is updated, all the application templates affected must be identified and updated as well.

Our approach makes the style guide a living style guide. The front-end templates we produce for our components get referenced directly from the target applications theme system. This means that our front-end templates are the exact same ones that the application will be using within the theme.

Front-end developers can make changes to it knowing that those changes will flow through into the application without need for a second step.

For Drupal developers this means either providing new theme functions for the front-end templates or referencing our front-end templates from within Drupal templates.

Modern build tools, agnostic to the back-end

Freed from the constraints of a specific application’s templating system we can select the most appropriate tools for the job of front-end development.

Our front-end tooling uses the latest standards and tools. We’re using yarn for package management, and webpack to bundle the static assets. 

Very little knowledge of the back-end is assumed or needed in this approach. You can confidently bring new front-end developers onto your team who are used to using the latest tools without having to spend the first few weeks teaching them the specific theming language and quirks of your back-end application such as the Drupal theme layer.

A real example 

We’ve got an exemplar project to showcase this way of working. If you clone the project at and follow the instructions in the README you’ll get a Drupal 8 project up and running with a theme that uses this process. You’ll see we’ve developed a componentised version of the Bartik theme for this.

If you are intrigued by this and would like to hear more, you’ll enjoy my talk on the subject at DrupalCon Vienna on 26th September.

In summary

Component driven front-end development has worked well for us at Deeson, allowing rapid independent development of our front-end code. Our designers are freed from the previous constraints of designing for a Drupal website and our developers get to use the latest tools and get onboarded quicker.

Like the sound of the way we do things? We're currently hiring a Senior Front-end Developer.

Sep 18 2017
Sep 18

Conversational UIs are the next digital frontier.

And as always, Drupal is right there on the frontier, helping you leverage your existing content and data to power more than just web-pages.

Want to see it action - click 'Start chatting' and chat to our Drupal site.

Start chatting

So what's going on here?

We're using the Chatbot API module in conjunction with the API AI webook module to respond to intents. We're using for the natural language parsing and machine learning. And we're using the new Chatbot API entities sub module to push our Drupal entities to so it is able to identify Drupal entities in its language parsing.

A handful of custom Chatbot API intent plugin to wire up the webhook responses and that's it - as we create content, users and terms on our site - our chatbot automatically knows how to surface them. As we monitor the converstions in the training area, we can expand on our synonyms and suggestions to increase our matching rates.

So let's consider our team member Eric Goodwin. If I ask the chatbot about Eric, at first it doesn't recognise my question.

Screenshot of chatbot conversation showing Eric not recognised Eric isn't recognized as an entity

So I edit Eric's user account and add some synonyms

Screenshot of editing Eric's account to add synonyms Adding synonyms to Eric's account

And then after running cron - I can see these show up in

Screenshot from console showing Eric's synonyms Synonyms now available in

So I then ask the bot again 'Who is eric?'

Screenshot showing the default response Screenshot showing the default response

But again, nothing shows up. Now I recognise the response 'Sorry, can you say that again' as what our JavaScript shows if the response is empty. But just to be sure - I check the console to see that it parsed Eric as a staff member.

Screenshot showing Eric is resolved and intent is matched Intent is matched as Bio and Eric is identified as staff member

So I can see that the Bio Intent was matched and that Eric was correctly identifed as the Staff entity. So why was the response empty? Because I need to complete Eric's bio in his user account. So let's add some text (apologies Eric you can refine this later).

Screenshot of editing Eric's account to add a biography Adding a biography

Now I ask the bot again (note I've not reloaded or anything, this is all in real time).

Screenshot showing Eric's bio in the bot response A working response!

And just like that, the bot can answer questions about Eric.

What's next?

Well provides integrations with Google Assistant and Facebook messenger, so we plan to roll out those too. In our early testing we can use this to power an Actions on Google app with the flick of a switch in Our next step is to expand on the intents to provide rich content tailored to those platforms instead of just plain-text that is required for chatbot and voice responses.


Thanks go to @gambry for the Chatbot API module and for being open to the feature addition to allow Drupal to push entities to the remote services.

And credit to the amazing Rikki Bochow for building the JavaScript and front-end components to incorporate this into our site so seamlessly.

Further Reading

Photo of lee.rowlands

Posted by lee.rowlands
Senior Drupal Developer

Dated 18 September 2017

Add new comment

Sep 16 2017
Sep 16

While preparing for my DrupalCamp Belgium keynote presentation I looked at how easy it is to get started with various CMS platforms. For my talk I used Contentful, a hosted content as a service CMS platform and contrasted that to the "Try Drupal" experience. Below is the walk through of both.

Let's start with Contentful. I start off by visiting their website.

Contentful homepage

In the top right corner is a blue button encouraging me to "try for free". I hit the link and I'm presented with a sign up form. I can even use Google or GitHub for authentication if I want.

Contentful signup form

While my example site is being installed I am presented with an overview of what I can do once it is finished. It takes around 30 seconds for the site to be installed.

Contentful installer wait

My site is installed and I'm given some guidance about what to do next. There is even an onboarding tour in the bottom right corner that is waving at me.

Contentful dashboard

Overall this took around a minute and required very little thought. I never once found myself thinking come on hurry up.

Now let's see what it is like to try Drupal. I land on d.o. I see a big prominent "Try Drupal" button, so I click that.

Drupal homepage

I am presented with 3 options. I am not sure why I'm being presented options to "Build on Drupal 8 for Free" or to "Get Started Risk-Free", I just want to try Drupal, so I go with Pantheon.

Try Drupal providers

Like with Contentful I'm asked to create an account. Again I have the option of using Google for the sign up or completing a form. This form has more fields than contentful.

Pantheon signup page

I've created my account and I am expecting to be dropped into a demo Drupal site. Instead I am presented with a dashboard. The most prominent call to action is importing a site. I decide to create a new site.

Pantheon dashboard

I have to now think of a name for my site. This is already feeling like a lot of work just to try Drupal. If I was a busy manager I would have probably given up by this point.

Pantheon create site form

When I submit the form I must surely be going to see a Drupal site. No, sorry. I am given the choice of installing WordPress, yes WordPress, Drupal 8 or Drupal 7. Despite being very confused I go with Drupal 8.

Pantheon choose application page

Now my site is deploying. While this happens there is a bunch of items that update above the progress bar. They're all a bit nerdy, but at least I know something is happening. Why is my only option to visit my dashboard again? I want to try Drupal.

Pantheon site installer page

I land on the dashboard. Now I'm really confused. This all looks pretty geeky. I want to try Drupal not deal with code, connection modes and the like. If I stick around I might eventually click "Visit Development site", which doesn't really feel like trying Drupal.

Pantheon site dashboard

Now I'm asked to select a language. OK so Drupal supports multiple languages, that nice. Let's select English so I can finally get to try Drupal.

Drupal installer, language selection

Next I need to chose an installation profile. What is an installation profile? Which one is best for me?

Drupal installer, choose installation profile

Now I need to create an account. About 10 minutes I already created an account. Why do I need to create another one? I also named my site earlier in the process.

Drupal installer, configuration form part 1 Drupal installer, configuration form part 2

Finally I am dropped into a Drupal 8 site. There is nothing to guide me on what to do next.

Drupal site homepage

I am left with a sense that setting up Contentful is super easy and Drupal is a lot of work. For most people wanting to try Drupal they would have abandonned someway through the process. I would love to see the conversion stats for the try Drupal service. It must miniscule.

It is worth noting that Pantheon has the best user experience of the 3 companies. The process with 1&1 just dumps me at a hosting sign up page. How does that let me try Drupal?

Acquia drops onto a page where you select your role, then you're presented with some marketing stuff and a form to request a demo. That is unless you're running an ad blocker, then when you select your role you get an Ajax error.

The Try Drupal program generates revenue for the Drupal Association. This money helps fund development of the project. I'm well aware that the DA needs money. At the same time I wonder if it is worth it. For many people this is the first experience they have using Drupal.

The previous attempt to have added to the try Drupal page ultimately failed due to the financial implications. While this is disappointing I don't think is necessarily the answer either.

There needs to be some minimum standards for the Try Drupal page. One of the key item is the number of clicks to get from d.o to a working demo site. Without this the "Try Drupal" page will drive people away from the project, which isn't the intention.

If you're at DrupalCon Vienna and want to discuss this and other ways to improve the marketing of Drupal, please attend the marketing sprints.

Bookmark/Search this post with

Sep 15 2017
Sep 15

I've completely revamped the Drush commands for Drupal Code Builder:

  • First, they're now in their own project on Github
  • Second, I've rewritten them completely for Drush 9, completely interactive.
  • Third, they are now geared towards adding to existing modules, rather than generating a module as a single shot. That approach made sense in the days of Drupal 6 when it was just hook implementations, but I increasingly find I want to add a plugin, a service, a form, to a module I've already started.

The downside is that installing these is rather tricky at the moment due to some current limitations in Drush 9 beta; see details in the project README, which has full instructions for workarounds.

Now that's out of the way, I'm pushing on with some new generators for the Drupal Code Builder library itself. On my list is:

  • plugin types (as in the plugin manager service, base class and interface, and declaration for Plugins module)
  • entity type
  • entity type handlers
  • your suggestions in the issue queue...

And of course more unit tests and refactoring of the codebase.

Sep 15 2017
Sep 15

If you ever had to overwrite a module’s css file or a core javascript library in Drupal 7, you likely remember the experience. And not because it was a glorious encounter that left you teary-eyed at the sheer beauty of its ease and simplicity.

Along with Drupal 8 came the Libraries API and a whole new way of adding CSS and JS assets and managing libraries. In true Drupal 8 fashion, the new system uses YAML files to grant developers flexibility and control over their CSS and JS assets. This gives you the ability to overwrite core libraries, add libraries directly to templates, specify dependencies and more.

There are many pros to this approach. The most important improvement being that you can add these assets conditionally. The FOAD technique and other hackish ways to overwrite core CSS files or javascript libraries are long gone. This is extraordinarily good news!

However, the simplicity of the drupal_add_js() and drupal_add_css() functions have also disappeared, and now you have to navigate a potentially overwhelming and confusing nest of yml’s just to add some custom CSS or javascript to a page. (No, you can’t just add css via the theme’s .info file). In this post, I’ll guide you through the new Libraries API in Drupal 8 so you can nimbly place assets like you’ve always dreamed.


If you haven’t yet experienced the glory that is the yml file, you’ll want to get familiar. Read this great introduction to YAML then come back to this post.

Creating Libraries

First step is to create your libraries.yml file at your-theme-name.libraries.yml or your-module-name.libraries.yml.

Here’s an example of how you define a Drupal 8 library.

A few things to note:

  • The path to CSS and JS files are relative to the theme or module directory that contains the libraries.yml file. We’ll cover that in more depth shortly.
  • The dependencies, in this case jQuery, are any other library your library depends on. They will automatically be attached wherever you attach your library and will load before yours.
  • Multiple libraries can be defined in one libraries.yml file, so each library in the file must have a unique name. However the libraries will be namespaced as mytheme/mylibrary or mymodule/mylibrary so a libraries.yml file in your theme and libraries.yml file in your module can contain libraries with the same name.
  • The css files are organized according to the SMACSS categories. This gives some control over the order of which assets are added to your page. The css files will be added according to their category. So any css file in the theme category will be added last, regardless of whether or not it comes from the base theme or the active child theme. Javascript files are not organized by SMACSS category.

Now that you know the library basics, it’s time to up the ante.


You can add additional properties inside the curly braces that allow you to define where the javascript is included, additional ordering of files, browser properties and more. We won’t cover all the possibilities just now, but here are some examples

Attaching Libraries

The simplest way to attach libraries globally is through the file. Instead of adding stylesheets and scripts ala Drupal 7, you now attach libraries like so:

Global is great and all, but perhaps the coolest libraries upgrade in Drupal 8 is the ability to attach libraries via twig templates. For example, if you have a search form block, you can define the css and js for the block, add it to a library, and add that library to the search form block twig template. Those assets specific to the search form block will only be included when the block is rendered.

And yes, you can also attach libraries with our ol’ pal php.

Extending and Overriding Libraries

Another boon is the ability to extend and override libraries. These extensions and overrides take place in the file.

As you might expect, libraries-extend respects the conditions of the library is being extended. Maybe you have a forum module that comes with css and js out-of-the-box. If you want to tweak the styling, you can extend the forum modules library, and add your own css file.

For overrides, you can remove or override a specific file or an entire library.

Final Considerations

Before we wrap up, I'll send you on your way with a couple final considerations and gotcha's that you need to be aware of.

  • The Libraries API Module is still relevant in Drupal 8, and should be used to handle external libraries that don't ship with drupal or a module or theme. It also allows libraries to be used by multiple modules or sites.
  • If a file is already linked to within a library it won't get added a second time.
  • Module CSS files are grouped before theme CSS files, so a module's css file will always be loaded before a theme's css file.
  • Refer to the Drupal 8 Theming Guide for more info.

Thanks for reading. Now go forth and use your asset placing powers for good, not evil.

Sep 15 2017
Sep 15

Everyone is welcome (including you!)

With just about two weeks to go until DrupalCon Vienna we are anticipating an amazing week of learning and collaborating ahead! There will be code sprints all week, but Friday is our dedicated sprint day when anyone and everyone can come contribute to Drupal core and participate together in guided sprints. Add your name to the sprint signup sheet and join us.

First-time sprinters might spend their sprint day working on just a single issue, and that's okay. Some issues take weeks, months, or even years to solve! We all build on each other's work to improve Drupal for everyone.

Sprint topics at the mentored core sprint

First-time sprinter workshop

This hands-on workshop will cover the basics of contribution essentials like the issue queues and IRC, setting up Drupal 8 for local development on your laptop, and optionally git training. If you want to try setting up a development environment ahead of time, try the tools installer.

After attending the first-time sprinter workshop you will be prepared to participate in the Friday afternoon core sprints in Vienna, which will include plenty of tasks for contributors of all skill levels. There is no need to be a coder to participate in the sprints. There will be tasks like testing issues manually, adding documentation, and updating issue summaries that do not require writing a single line of code. Sometimes, not being a seasoned Drupal contributor is a positive advantage as you can ask the questions others neglect to ask.

Major issue triage

If you're already familiar with Drupal, but haven't contributed much before, the major triage sprint is a good way to get more involved. It's also a good fit for project managers, on-and-off-contributors, QA engineers, contributors coming from the first-time sprinter workshop, anyone interested in how Drupal core is made, or anyone concerned about Drupal 8 bugs.

In the Drupal core issue queue we assign priorities to each bug to streamline the resolution process. In this sprint, we will attack issues tagged "Major" and simply make sure the information in each issue is accurate and actionable.

Contributors will work in pairs to evaluate major issues for Drupal 8.x, update the information in the issue, and determine whether or not the issue is still relevant. The most important thing to keep in mind is forward movement through the process - this sprint is not for solving issues, only for helping maintainers and making it easier for others (possibly you!) to step in and understand what needs to be done at a glance.

You can read the steps for triaging major issues to prepare ahead of time.

This sprint will give you the skills to more successfully navigate the issue queue, comment and contribute constructively on issues, work with other contributors, and understand the process code goes through in becoming part of Drupal core. It takes a lot of contributors with varied skills and perspectives to bring all the pieces together.

Make upgrade paths easier with @deprecated documentation

Drupal 8's release process has been changed to make Drupal upgrades easy forever. We improve Drupal's APIs in scheduled six-month minor releases, but also leave the old ways of doing things in place and mark them as deprecated until Drupal 9. This huge shift for Drupal allows module and theme maintainers to adapt to changes gradually, on their own schedule, instead of needing a massive push all at once on some later release date.

To help maintainers make updates, we are adding documentation references directly in the code. In most cases the update documentation is already written so we merely need to add a link to it! Most existing deprecations are in PHP code, so this is a good task for new contributors with a basic knowledge of PHP. Itc is also a good fit for contributors who are interested in API documentation or who want to learn about API changes in Drupal 8.

How to add change records to all @deprecated code

Clearly define Drupal's public APIs by adding @internal tags

Drupal 8 has 6-month minor releases that improve APIs (as well as adding new features).  In order to make this safe, clear, and maintainable, we defined which parts of Drupal's APIs are internal (not covered by the backwards compatibility promise and allowed to change between minor versions) through a documented policy, but that is not very explicit for developers. Adding explicit @internal tags in code documentation is more clear and effective for anyone reading the code or developing with an IDE.  By helping with this effort, you can learn a lot about Drupal 8 APIs and help with the upgrade path through documenting a better-defined API surface. This sprint is a good fit for programmers who want to learn more about Drupal 8's APIs.

JavaScript and theme new contributor sprints

For new frontend contributors, JavaScript maintainer drpal and theme system maintainer joelpittet will each have a mentor table to help you contribute in either of these areas. Drupal core is always in need of more frontend contributors and we welcome your help! Come and meet the maintainers and see how you can improve Drupal's frontend.

And more!

In addition to the mentored sprints, experienced contributors can join a variety of sprint topics in the main sprint room.There are sprints on porting contributed Media plugin modules to the new core Media API, redesigning the core admin UI for better usability, the Search API family of modules, the Open Social distribution, and much more. Sign up now to let us know you're interested in participating!

Mentors and reviewers welcome

If you are an experienced contributor, we can use your help at the mentored sprint too! Sign up to mentor. Mentors should be familiar with Drupal core and the issue queue so that you can explain the process as well as how sprinting benefits the community and the project. The best way to prepare as a mentor for the Major Issue Triage sprint, for example, is to read the meta and try walking through the steps on your own or explaining them to a co-worker or friend.

We are also looking for reviewers on sprint day. Join us in the mentored sprint room at the dedicated review table to give sprinters feedback in Drupal's peer-review process. This is a great way to participate even if you are remote, as there will be many contributors seeking reviews of their patches on sprint day. Let mentors know you are available as a reviewer and they can ping you on slack/IRC when an issue is ready for review.

See you all soon in Vienna (or online)!

Sep 15 2017
Sep 15

Last week, Equifax, one of the largest American credit agencies, was hit by a cyber attack that may have compromised the personal data of nearly 143 million people, including name, address, social security numbers, birthdates and more. The forfeited information reveals everything required to steal someone's identity or to take out a loan on someone else's name. Considering that the current US population is 321 million, this cyberattack is now considered to be one of the largest and most intrusive breaches in US history.

It's Equifax that is to blame, not open-source

As Equifax began to examine how the breach occurred, many unsubstantiated reports and theories surfaced in an attempt to pinpoint the vulnerability. One such theory targeted Apache Struts as the software responsible for the the breach. Because Apache Struts is an open-source framework used for developing Java applications, this resulted in some unwarranted open source shaming.

Yesterday, Equifax confirmed that the security breach was due to an Apache Struts vulnerability. However, here is what is important; it wasn't because Apache Struts is open-source or because open-source is less secure. Equifax was hacked because the firm failed to patch a well-know Apache Struts flaw that was disclosed months earlier in March. Running an old, insecure version of software — open-source or proprietary — can and will jeopardize the security of any site. It's Equifax that is to blame, not open-source.

The importance of keeping software up-to-date

The Equifax breach is a good reminder of why organizations need to remain vigilant about properly maintaining and updating their software, especially when security vulnerabilities have been disclosed. In an ideal world, software would update itself the moment a security patch is released. Wordpress, for example, offers automatic updates in an effort to promote better security, and to streamline the update experience overall. It would be interesting to consider automatic security updates for Drupal (just for patch releases, not for minor or major releases).

In absence of automatic updates, I would encourage users to work with PaaS companies that keep not only your infrastructure secure, but also your Drupal application code. Too many organizations underestimate the effort and expertise it takes to do it themselves.

At Acquia, we provide customers with automatic security patching of both the infrastructure and Drupal code. We monitor our customers sites for intrusion attempts, DDoS attacks, and other suspicious activity. If you prefer to do the security patching yourself, we offer continuous integration or continuous delivery tools that enable you to get security patches into production in minutes rather than weeks or months. We take pride in assisting our customers to keep their sites current with the latest patches and upgrades; it’s good for our customers and helps dispel the myth that open-source software is more susceptible to security breaches.


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