Dec 19 2018
Dec 19

Developers and organizations alike continue to use Drupal for large-scale projects due to its modular architecture, solid data model, community, security team, stability, and good-fit for many “ambitious” projects. However, historically, Drupal has caught considerable flak for its unintuitive development process - that might finally be changing.

I have been teaching Drupal development at Debug Academy ( https://debugacademy.com ) for over 4 years now. One recent development piqued my interest, especially in regards to teaching newcomers how to build sites using Drupal, and that is the new layout builder in Drupal core. The layout builder was released as an experimental Drupal core module in Drupal 8.6.

Drupal 8.6, and the layout builder (experimental at the time), were released on September 5, 2018, and our summer semester was scheduled to end on September 9th. Due to a combination of excitement and a desire to teach what I firmly believe to be the soon-to-be standard technique for building Drupal websites, we did not wait to use it. We built the entire website except for internal landing pages themselves before September 5th, the day the layout builder was released and 4 days before the conclusion of our semester. We combined custom block types with the new layout builder to finish building the website.

And my, it was easy to understand and to teach. Since then, we’ve integrated the layout builder more deeply into our subsequent semester and the results bode well for Drupal’s future. The client loved the new layout builder functionality, and the students who were newest to programming felt more comfortable than ever when laying out our custom landing pages. But don’t take my word for it, let’s take a look at the data.

How pages are built in Drupal

Common use cases for page creation include:

  • Advanced custom pages

  • Standardized pages as content

  • Pages with custom overrides

  • Semi-structured content

  • Drag & Drop content placement

Drupal’s solutions for these use cases

  • Advanced custom pages

  • Standardized pages as content

    • Create pages using the UI. Similar to creating a blog post.

    • Without writing any code, site builders can also create pages featuring different types of fields using Drupal’s content type system.

  • Pages with custom overrides

    • Create pages using the UI. Similar to creating a blog post.

    • Pass additional variables (such as a newsletter block) to the page with PHP

    • Render variables using Twig

    • Write any markup (HTML) directly in the Twig file

  • Semi-structured content:

  • Drag & Drop content placement (the new layout builder!)

    • Create pages using the UI. Similar to creating a blog post.

    • Use drag & drop to place / remove layouts, sections, fields, blocks, and more!

    • Can be done per content type and (optionally) overridden per page

Comparison of the content creation options in Drupal

Drupal provides an abundance of solutions to problems content editors face. Different tools require different skillsets, so although Drupal has solutions for everything, let’s do a deeper comparison of the Drupal 8 content editing options to see what is available, what it can do, and how accessible it is to you and your team. The new layout builder is highlighted in the rightmost column:

 

Advanced custom pages

Standardized pages as content

Pages with custom overrides

Semi- structured content

Drag & Drop content placement (new layout builder!)

How to: initial set up

  • Git

  • PHP

  • Twig

  • YML

  • Site building

  • Site building

  • Git

  • PHP

  • Twig

  • YML

  • Site building

  • Site building

  • Site building

How to: add'l pages w/same layout

Depends on implementation

Content editing

Content editing

Content editing

Content editing

How to: add'l pages w/custom field layouts

  • Git

  • PHP

  • Twig

  • YML

  • Site building

N/A

  • Git

  • PHP

  • Twig

  • YML

  • Site building

*Content editing

*

pre-grouped sets of fields must all be displayed sequentially

Content editing

How to: add'l pages w/custom layouts, including mixing & matching blocks, fields, & more

  • Git

  • PHP

  • Twig

  • YML

  • Site building

N/A

  • Git

  • PHP

  • Twig

  • YML

  • Site building

N/A

Content editing

How to: Component-based design support using Drupal blocks within content area

Custom code only

N/A

Custom code only

“Pre-grouped” fields can be designed as components, but placement is very restricted

Fully supported

Uses core/contrib

Core

Core

Core

Contrib (paragraphs)

Core (experimental - full release expected in 8.7!)

In practice: what do the numbers show?

Through our courses we have been able to collect data about how the switch from other approaches (namely PHP / Twig & paragraphs) to the new layout builder has impacted the learning curve, productivity, and ongoing maintenance of projects. Debug Academy’s Jack Garratt ran the numbers for us. For the sake of our analysis, a “task” refers to the smallest unit of work assigned to a developer (Debug Academy student, in this case):

The data: before the layout builder (“Tasks to homepage”)

Let’s take a look at the data following the number and type of task from the start of the project until the completion of the frontpage and set up of internal pages. In the first data set, we’ll look at our projects before use of the layout builder.

We assigned our students to implement PHP pre-process hooks to create Twig variables for Views blocks, blocks provided by contrib modules (e.g. newsletter), as well as extracting other non-block data from the website.  Note: There are alternatives in Drupal’s contrib space to using PHP, such as the contributed module Twig Tweak; we do not encourage using Twig Tweak in our projects. The project builds are a success; however, it is also not the most readily grasped by non-web developers and clients.

The breakdown is below:

Task Type

Pre-layout Builder

Up to & including homepage (without layout builder)

Twig

17 (task per section per page)

Site Building

14

Configuration in Code/Site installation and setup)

7

CSS/SASS

6

PHP/Custom Module

10

Initial Theme setup

3

Set up reusable inner page layouts (4 content types)

Twig

8

PHP

4

CSS/SASS

4

PHP and Twig tasks constitute a significant number of the total amount of work completed by our students.  Out of the 17 Twig tasks, we deemed that 10 required using PHP to pass various blocks to the homepage for a variety of use cases, such as embedding Twitter or a Donately form within the page’s content.

On subsequent projects, our students are constructing the pages in the Layout Builder.

The data: using Drupal’s new layout builder (“Tasks to homepage”)

The Layout Builder UI has access to the aforementioned block types.  If there is a specific need that cannot be readily replicated with custom block types with the requisite fields, developers can still use Twig to add that functionality.  However, we found that creating and styling custom block types in Drupal 8 core as reusable components (see component based design) greatly streamlined our process and eliminated the need for many higher complexity tasks. 

What we soon realized was that writing PHP and Twig was less needed in terms of individual page construction, but still rather helpful in crafting custom blocks (components).

Task Type

With layout Builder

Up to & including homepage (with the new layout builder)

Twig

5 (task per component type)

Site Building

18

Configuration in Code/Site installation and setup)

7

CSS/SASS

6

PHP/Custom Module

0

Initial Theme setup

3

Set up reusable inner page layouts (4 content types)

Twig

1 (we’re reusing component types)

PHP

1

CSS/SASS

1

One of the consequences of the de-emphasis on using Twig to create basic pages with custom HTML in favor of the layout builder is allowing a more beneficial division of labor.  Teams may create more tasks that involve basic page building to get their newer developers familiar with the Drupal UI. Moreover, companies can train their clients in how to create basic pages with customized blocks (video block, stylized quote block, or a button block to name a few), which minimizes the instructional curve.  Essentially, the tasks to create highly customized pages no longer require coding. One consequence of using the layout builder for basic page creation in this manner is that it will free up more experienced developers to focus on other tasks or minimizing oversight of newer developers.

The data: full comparison, beyond the homepage

The above charts compare “time to homepage” and “time to generic inner page”. Where you really start to see the benefits are when you’re creating a website with many pages. Let’s look at the combined charts, calling special attention to the newly added last row(s) “Creating additional pages with custom layouts”:

Task Type

Pre-layout Builder

With Layout Builder

Up to & including homepage

Twig

17 (task per section per page)

5 (task per component type)

Site Building

14

18

Configuration in Code/Site installation and setup)

7

7

CSS/SASS

6

6

PHP/Custom Module

3

0

Initial Theme setup

3

3

Set up reusable inner page layouts (4 content types)

Twig

8

1 (reusing component types)

PHP

4

1

CSS/SASS

4

1

Creating additional pages with custom layouts

Twig

37

2

PHP

16

4

Content Editing

47

69

Site building

45

17

Thanks to a combination of component based design and the new layout builder, content editors can create truly custom layouts without writing a line of code. They can, for example, drop a video embed in between the body field and the author field, move the author field to the footer, and arrange other fields in 3 columns without writing a line of code.

Summary & Conclusion:

This specific project built with the layout builder required:

  • 88% fewer PHP tasks

  • 64% fewer site building tasks

  • 87% fewer Twig tasks (thanks to component based design)

  • 46% more content editor tasks

The numbers are clear. Drupal’s layout builder has the potential to bring down the cost of ownership of Drupal websites significantly by enabling content editors and less senior developers to build more of the website. Because of which, the new layout builder will make Drupal more accessible to newer developers and smaller organizations with ambitious goals for their web-powered presence.

It’s time to get up to speed in Drupal 8!

Debug Academy's real projects are the source of the above data, and we encourage you to take a look at our programs. There has never been a better time to add Drupal to your skillset.

We will continue to incorporate cutting edge tech in our courses, including the new layout builder, Composer, Drush, Drupal Console, Object Oriented Programming with PHP7, and much more, all applied to a real, unique, team project! At the end of it all we help students continue to the next phase of their careers! Visit https://debugacademy.com to sign up for one of our free info sessions - our next semester begins January 27th!

P.S. thanks to Dries Buytaert for providing feedback on this post!

Dec 19 2018
Dec 19

I’ve recently been researching, writing, and talking about the content editor experience in Drupal 8. However, in the back of my mind I’ve been reflecting on the site builder experience. Every developer and site builder who learns Drupal is going to use the admin UI to get their site up-and-running. What are some things site builders often struggle with in the admin UI when learning Drupal?

Blocks

For most Drupal site builders, the Block layout page is key to learning how Drupal works. However, there is more to Blocks than just the Block layout page. You can also create different types of blocks with different fields in Drupal 8.

Site builders new to Drupal don’t usually stumble across the Block Types page on their own. In fact, I think a lot of site builders don’t know about block types at all. Probably because "Block Types" is not listed in the in the 2nd level of the administration menu under “Structure”, but instead buried in the third level of the menu. There's already work underway to make this change.

Similarly, site builders might never find the “Custom block library” page for creating block content. Depending on how blocks are being used on a particular site, this page might be more logically nested under “Content”. If you like this idea, there's an issue on Drupal.org to make this update and a discussion about how best to integrate it into Drupal 8 (or 9).

Many users never find the “Demonstrate block regions” link, a really key page for anyone learning how Drupal works and what regions are. Most Drupal site builders who see this page for the first time are delighted, so making this link more prominent might be an easy way to improve the experience for site builders.

Appearance

Typically, a Drupal site has two themes: the default/front-end theme and the admin/back-end theme. The appearance page doesn’t make this clear. Some site builders learning Drupal end up enabling an admin theme on the front-end or a front-end theme for the admin UI. I think the term "default theme" is confusing for new users. And making a consistent UI for setting a theme as the default theme or the admin theme would be a nice improvement. If you like this idea, you can jump into the conversation about updating the appearance page.

Install vs. Download

The difference between installing and downloading a module is not laid out clearly. If someone is trying Drupal for the first time, they’ll likely use the UI to try and install modules, rather than do it through the command line. In the UI, they see the link to “Install New Module”. Once this is done, it seems like the module should be installed. Even though they have the links available to “Enable newly installed modules”, they might not read these options carefully. I think re-labelling the initial link to "Download New Module" might help here.

Most users are also confused about how to uninstall a module. They don’t know why they can’t uncheck a checkbox on the "Extend" page. Providing a more visible link to the uninstall page from installed modules might help with this.

Configuration Management

The UI for configuration management is pretty hidden in Drupal 8. In practice, configuration management is something we typically do via the command line, this is how most seasoned Drupalers would import/export configuration. However, for someone learning how Drupal 8 works, they’re going to be learning initially from the UI. And at the moment, site builders are virtually unaware of Configuration Management and how it affects their work.

Having some kind of simple reminder in the UI to show site builders the status of their configuration could go a long way to them understanding the configuration management workflow and that they should be using it.

The Admin Toolbar

Everyone loves the admin toolbar module. Once it’s installed, site builders are happy and ask “Why isn’t this part of Drupal core?”

But, for a certain set of people, it’s not clear that the top-level of this navigation is clickable. The top-level pages for “Configuration” and “Structure” are index pages that we don’t normally visit. But the “Content” page provides the content listing, and the “Extend” page shows use all our modules. These are obviously key pages. Imagine trying to learn Drupal if you don’t realize you can click on these pages for the first week. But users who are used to not being able to click top-level elements might simply miss these pages. Does anyone know a good way to signal that these are clickable?

What's Next?

I would love to hear how you think we should improve the admin UI for site builders and if you have any thoughts on my suggestions. 

One thing that I'm very excited about that's already happening is a new design to modernize the look and feel of the Admin UI in Drupal. This will go a long way to making Drupal seem more comfortable and easy to use for everyone, content editors and site builders alike. You can see the new designs here.

Dec 19 2018
Dec 19

Your browser does not support the audio element. TEN7-Podcast-Ep-049-Jeff-Robbins.mp3

In this episode, Ivan is joined by his friend Jeff Robbins, entrepreneur, co-founder of Lullabot, founder of Yonder, executive coach, author, signed recording artist and self-proclaimed philosopher. Here's what we're discussing in this podcast:

  • Discovering fortnight
  • Jeff's background
  • Boston universities tour
  • Starting at O'Reilly Media
  • Gopher & open source software
  • Orbit, one of the first bands on the internet
  • Signing with A&M Records
  • Surviving record labels
  • Intellectual property, algorithms and paradigms
  • The complexity of band management
  • On the Lollapalooza tour with Snoop Doggy Dogg
  • The unintentional result of subliminal intentionality
  • 123 Astronaut
  • The transition from music to Drupal management
  • Lullabot, one of the first fully distributed companies
  • DrupalCon, Vancouver 2006, let the hiring begin
  • Yonder, guide to distribution
  • The future of corporate distribution
  • Writing a new book
  • One Minute Manager, Make Friends and Influence People and Tribal Leadership

TRANSCRIPT

IVAN STEGIC: Hey everyone you're listening to the TEN7 Podcast, where we get together every fortnight and sometimes more often, to talk about technology, business and the humans in it. I'm your host even Ivan Stegic. In this episode of the Podcast, Jeff Robbins of Yonder and 123 Astronaut. Jeff is an entrepreneur, co-founder of Lullabot, a design agency you may have heard of, and most recently the founder of Yonder, an advocate for remote work and an inspiration for leaders of distributed companies like my own, all over the world. He's a business consultant and an executive coach, an author, a signed recording artist, a self-proclaimed philosopher, and in my opinion an all-around nice guy. Jeff welcome to the Podcast.

JEFF ROBBINS: Wow. Thanks Ivan. Thanks for having me. I want to start right off with a question for you, though. What is a fortnight?

IVAN: Two weeks.

JEFF: Two weeks. Ok.

IVAN: Two weeks. It must be a British English thing. We used to talk about fortnight's all the time, when I lived in Africa.

JEFF: No, we don't use that one too much. It shows up, sort of, in archaic writing every now and then. (laughing) Or, maybe it's just British writing, I don't know. Fortnight. Okay. You know, I've heard the term, but I am embarrassed that I don't quite know what it is. But now I do. Now I will start using it, and people will feel uncomfortable around me not knowing what a fortnight. (laughing)

IVAN: (laughing) Well, people might think you're talking about the video game.

JEFF: Or, they might think I was British. (laughing)

IVAN: (laughing) Well, I'm so excited to be talking to you, Jeff. And usually I start out by asking about where life started for you. So, I know you live in Providence, Rhode Island. Is that where life started for you as well?

JEFF: Well , I grew up in Connecticut. So, in the grand scheme of things, not too far away, still southern New England. Yeah. That's where life started for me at least. I lived there through high school and then moved to Boston, again, in the grand scheme of things, not too far away. But at the time it seemed pretty significant. And lived in Boston for, as I say, most of my formative years, and then moved to Rhode Island right around 2000, something like that.

IVAN: So, that was where you went to college, was in Boston?

JEFF: Yes, I went to many colleges and universities (laughing) in the Boston area.

IVAN: (laughing) Well, I know you studied liberal arts and music, right?

JEFF: Well, yeah, I originally went there to go to Berklee College of Music, and after a semester at Berklee I realized like, there's no way I'm going to finish at this school. So I took all of the classes that I thought would be sort of important to me, actually pursuing the musical career that I wanted to pursue. I took a whole bunch of music business classes and stuff like that. Then I bounced around, I went to Emerson College for a while and took some classes at Harvard extension school, but eventually found a job doing technical illustration work, using a program called Freehand, which was sort of the competitor to Adobe Illustrator, what we now call Adobe Illustrator and eventually the companies all merged together and they all became sort of the same thing. But I started working for O’Reilly. We now call them O'Reilly Media. They were called O'Reilly and Associates in the early nineties.

IVAN: I remember that.

JEFF: Yeah. And doing technical illustrations for their books. I mean this was pre-web and started, sort of, they had really good internet there, meaning technical people themselves and writing technical books about technical things and so, I sort of discovered FTP, and a sort of lost technology called Gopher.

IVAN: Which was invented in Minnesota.

JEFF: Oh yeah, in fact, actually, many of the FTP sites, or at least one of them, was at the University of Minnesota as well, now that I think about it, where you go and download open source software and stuff like that so that you could, basically you just download other FTP programs. (laughing) Eventually you could FTP to download Gopher, and then use Gopher to download other programs. So Gopher was kind of post FTP, but pre-HTTP, and it sort of had this, sort of loose, it was like basically, folders and a little bit of hypertext linking but no graphical kind of stuff. But then the web came around, and O'Reilly was kind of first into that, and I worked on the team that ended up building the first commercial website. We were just calling it like, an online magazine at the time. We hadn't really thought about the fact that it was kind of the first commercial website, but we figured that we would probably need to support it in some way, and it being a magazine, advertising seemed like the obvious way to go.

IVAN: What quantified it as the first commercial website? Was it because it was revenue generating.

JEFF: Yeah. Up until then it was all, mostly academic colleges and universities people there, just sort of building a website about usually something scientific, or about technological things. There were a few sort of like arts websites and bands. My band was one of the first bands to be on the web. Not quite the first I don't think. Although we did build a website for our record label when we were the first record label on the web at the time. And it was like there was a website that listed new websites launched today, and it had like three listings on it.

IVAN: Back when it was a finite countable list of websites. (laughing)

JEFF: Just email Bob when you launch a website and we'll put it up on the page. (laughing) It all seemed funny at the time.

IVAN: So, you were in this band called Orbit. Were you one of the founding members?

JEFF: Yep.

IVAN: And there were three of you and you started your own record label? You just eluded to that.

JEFF: Yeah, we did. We'd been playing, the other founder of the band Paul and I, had been playing in Boston bands for years, and we were just kind of frustrated and fed up with kind of the subservient nature of playing in a band and decided, “you know what, screw this we're either going to start our own record label, we're going to go out find other bands that we think are good, we're gonna to put out our own music and stop worrying about getting a record deal and kind of trying to be what we think that bands ought to be to get a record deal.” And of course, that was exactly what record labels were looking for it turns out. So, within about six months of starting the band and starting the record label we got signed to A&M records.

IVAN: Wow. How did you know that you had a sound that you thought people wanted to hear?

JEFF: I didn't. We created the sound that I wanted to hear. Like I said, after playing in all these bands where it just felt like a, sort of compromise, and too contrived, I wanted to do something that just sort of felt authentic and kind of raw and something that I felt like I could at least just sort of be proud of. And, it was a big life lesson for me in general, in all things.

IVAN: So when you signed with the label, did that mean you were officially a full-time employee of the label, and you could tour and write and perform without really having to worry about where's my next paycheck coming from? Is that how it works?

JEFF: No. (laughing). It's more like a book publishing contract or something like that where basically they say, you're not an employee but we'll pay you to create records for us, and ultimately that's a good thing, because if you were an employee then, it's actually kind of how record labels are working a little bit more these days where they want a piece of, when you play shows and when you sell T-shirts, what they call an all-in deal, where basically the label is just there. Which is also kind of how record labels got started way back when, when there really wasn't a difference between the record label and the producer and the manager. It was kind of all one thing. But in the nineties at least, it was more like a book publishing deal where the luck at the time that there were a lot of record labels at the time, but the music industry was really changing. And so we got in a record label bidding war and managed to kind have our pick of a bunch of different record labels, and we really liked the way that A&M was running their label, and so we signed with them for a pretty favorable record deal with a three album, actually it was like a five-album deal or something like that. But, so, we knew that if we continued delivering albums, we would get at least the amount of money that it said in our contract. But in terms of like, making a full living, we still needed to tour and sell records and all that kind of stuff.

IVAN: And, they own all of the rights to the records that you produced in perpetuity? Is that right? Or does that get structured differently? And the reason I'm asking is, it feels like that was in the nineties, and that's a long time ago in technology years. And now there's Spotify and Apple Music and all these things, and I'm sure your songs and albums from Orbit are online and people still listen to them. How does that work?

JEFF: Well, it’s all very kind of complicated,and there are spreadsheets and algorithms that keep track of everything. But, in its simplest form, when you sell a physical copy of a CD or a record, and again I mean a lot of these sort of paradigms kind of go back, then, you know, the band makes a certain amount and the record label makes a certain percentage of that. However it gets more complicated because there's also the rights to the songs on the album. So, sort of the intellectual property of this music. So, that's called the mechanical, is the actual physical copy that you're buying. But then there is the publishing on the music that's on the CD, and then when it gets played on the radio, that's also different stuff. So it's all very complicated. It's very complicated.

IVAN: So, you see a check from Spotify for like five pennies every other year. Is it kind of like that?

JEFF: Yeah. We could do a whole Podcast about how it works. (laughing)

IVAN: (laughing) But we won't get into that.

JEFF: Yeah, but there are basically rights agencies that collect money from Spotify and radio play and stuff. So, I get different checks from different places. All of them for about seven dollars for various things. (laughing)

IVAN: But, it's interesting to know about all of that, I'm sure it formed how you ran subsequent businesses and other aspects of your life as well.

JEFF: Yeah. I learned a lot playing in a band and putting together the people in the band and around the band and kind of, very focused on, you don't really think about the business as a business when you're in a band. It's more about the vibe and all these things that are ultimately kind of branding kinds of things, like who’s it going to feel good to work, who's going to look good to work with, who can I sit in a van with for six weeks at a time, and all that kind of stuff. So, I learned a lot about marketing and branding, but also sort of group dynamics and a lot about contract law and intellectual property as well. (laughing)

IVAN: (laughing) What was your highlight during your time with Orbit?

JEFF: Boy, you know, a lot of it sort of happens in retrospect. So, prior to that, 1994 when we got signed, kind of the previous rock trend had been like hair metal bands. And then, like Nirvana broke through, and a lot of the stuff that I was actually listening to kind of broke through , and it was much more of a feeling like, of trying to be more authentic and a little bit, sort of more of like a blue-collar ethic, like less about having this facade of crazy partying. And so, you know we kind of came in, and being from Boston and all that kind of stuff, there was kind of this like, utilitarian aspect of things, like, we're not going to party our asses off and do all the drugs, and we're going to just get in the van and like go play shows and be the best band that we can be. However, we had some really great success. I fear that at the time we didn't absorb that, and if we didn't celebrate that enough, that we kind of took it as like, “well that's great.” We played on MTV or our video got played on MTV. Okay, what’s the next thing. Or we went and performed on a show on MTV. Okay, what's the next thing? And, we were kind of very on to the next thing. We did the Lollapalooza tour in 1997 and that felt good. And at the time in the nineties there were a lot of these like, radio festival shows, it seemed like each major radio station in each major market would have a festival kind of show, whatever the big outdoor venue was. And bands like mine would just kind of go from these radio festival shows and go on to the next and the next and the next, and we had pockets of popularity. But, I mean, we played one show north of Miami to 20,000 people, and all the people in the front are singing the songs along with us. It was like, it’s hard to kind of get too utilitarian about that. So, that kind of stuff’s the highlight.

IVAN: So, while you mentioned Lollapalooza 1997, I thought, there must be a poster online of what that looked like, and I looked it up and wow, you guys were playing with Prodigy and Tricky and Snoop. I guess he was called Snoop Doggy Dogg back then.

JEFF: Yes, he still was Doggy at that time. (laughing)

IVAN: (laughing) That's wonderful. Wow. Twenty thousand people is certainly a tool. KoЯn, except the poster didn’t have the ability to put the R backwards, maybe it wasn’t backwards back then, (laughing), I don’t know. So, now you're the front man for 123 Astronaut, I feel like there's a theme – Orbit, Lullabot, 123 Astronaut – what’s the genesis of 123 Astronaut?

JEFF: Well, I wish it was more thematic. I mean I think it is may because of its unintentionally it's a sort of subliminal intentionality. I was born in 1969, and my mom brags about propping me up, you know, five months old or whatever I was, to watch the moon landing. She says, “you're going to be able to tell everybody you watched this.” I don't know, that sort, kind of the hope and optimism of the space program, I think, is something that has always been really kind of close to my heart and sort of the melding of that optimism with sort of the technology that's offered by close to my heart, as well. But, 123 Astronaut, my son who's now 14, I think was probably two or three at the time, and he was going to throw something up into the air, and he was doing what he thought at the time was a countdown. But, instead of saying three, two, one blastoff, he said “one, two, three astronaut,” and then threw this thing in the air and I said, “oh, man, I’m going to name a band that someday.”

IVAN: That's awesome.

JEFF: And, in the intervening 12 years, never came up with a better name and didn't really think about its relationship to orbit and space, and all that kind of stuff. And. it really wasn't until about two or three months after we'd been playing out with this band name that I kind of realized, “oh, I have a theme going, I guess that’s okay. Yeah.”

IVAN: I think it’s cool. So, it feels like, at least to me, it feels like 123 Astronaut is you going back to music after this career in technology. So, in my mind, you were part of the music scene in Orbit, and then you founded Lullabot, and done some amazing things in the Drupal world and now you're doing Yonder and coaching, and you're also in a band. So, the question is, how has the open source mentality that you experienced in between these two bands, and how has running numerous companies and products influenced your perspective of your new band?

JEFF: Wow, that's interesting. I need to acknowledge just sort of the kind of disparate nature of these things, that arguably and I might be the one to argue this, but when I sort of think about it, like having credibility in business and credibility as a songwriter seem mutually exclusive, right? (laughing) You hear every so often, that I don't know, what's his name, the co-founder of Microsoft who just died recently?

IVAN: Is it Paul Allen?

JEFF: Paul Allen, right. Paul Allen’s got a band, and you sort of assume like, ehh, (laughing)

IVAN: Right. Like that's the first thing, you think.

JEFF: Yeah, and likewise you probably wouldn't go to like, you know, Slash for business advice, so, it’s been a little bit difficult feeling to try and pull these things together in my life, but they really are related. I really got into the creativity of building a business and, in a particular kind of gathering together groups of people to do great things, I think is something. But, to get back more directly to your question, it's been interesting, cause I kind of took a lot of that, sort of, utilitarian attitude in the building Lullabot, but I also took that lesson of, I need to celebrate the successes, I need to notice them. I feel like I went through this whole experience with Orbit and when all was said and done we'd gotten dropped from the record label in about 2000/2001, and we'd had all the success, but it didn't feel like success. And so I wanted to kind of embrace the success, and learn to kind of build off it. And Lullabot became very successful, certainly much more successful than we would have imagined when we first started the company, although I have a very good imagination. (laughing) And, as such I learned a lot of leadership skills, and I just became sort of more confident. I was also, as I mentioned, a parent and there's a lot about being a parent, that is sort of built in with kind of leadership skills and leading and I think with Orbit I was kind of hesitant to take a leadership position, to be too opinionated, to be too preachy is probably not quite the right word, but it's something in that area. But with this band I know I kind of bring that with me. I think, I'm writing more confidently and kind of presenting a more confident. more sort of opinionated perspective, than what was happening in the nineties.

IVAN: And, you're still being authentic in making this music for yourself, for the way you think that it should be made and not for the audience, which is, I think, a wonderful thread to have in any creative work that you do.

JEFF: Yeah, I think you need to balance that. The word I use in business is sustainability. You need to look after your business well enough so that your business can remain a business, that you may want to be true to your employees and really focus on culture and make it a great place to work. And so, having difficult clients is something that you want to avoid, but you need to have clients, and some of them are going to be difficult. And, so from the point of sustainability if you want to really make your employees happy, they need to continue to be employees. They need to continue to have jobs and you need to find the work for them. And so sometimes you need to kind find sort of creative ways to make it kind of be a win/win and keep the business. And the same thing with making art as a consumable, something that you want to put out there. Ultimately, I think it's best to drive it from yourself to find a perspective where I could get excited about. I like to consume things and go to shows and listen to music and get inspired by it. And so, how can I try to create that, that would inspire that in other people as I'm able to inspire myself. That's the hope at least. So, I think sometimes when you talk about this idea of kind of authenticity and just do it for yourself, it can get kind of, I think it can imply a certain sort of uncommercial reality, sort of inaccessibility to it. And I think both in business and in art, you end up kind of selling yourself short if you don't just acknowledge what people like about what you do or what people could like about what you do.

IVAN: One last question about 123 Astronaut. Are you going on tour anytime soon?

JEFF: (laughing) Well, this is the sustainability, commerciality thing. Nobody knows about the new band yet. In retrospect, I probably should have called it Orbit, creatively at least, I was kind of the creative lead in Orbit and the creative lead in this group. I've always really thought of myself as a collaborator and felt like I really needed to collaborate with people. And so I've been uncomfortable with the idea of like doing us solo thing or something like that, because I really value the input of people around me. But nobody knows about it. If I'd called it Orbit maybe at least we could have built off that, and we don't have a record deal or whatever the current equivalent of it is. I'm still trying to figure it out, having taken a basically 15-year break from the music business. But we're playing around in New England and trying to get down to New York City and stuff like that, and the people that have seen us have been interested and excited about this brand-new band that they've never heard of before. But, it's kind of slow going to gain fans one by one. We've got an E.P. that's out on Spotify, and if anybody who is listening and we've wet their appetite, 123Astronaut.com is where you can hear our music, see our music video and find links off to Spotify and Apple Music and all that kind of stuff.

IVAN: And, the singles called Friction, is it?

JEFF: Yeah. On the EP. That's the title of EP and the first song on the EP, and the video that we did, is all the Friction. But we're working on a new album right now, and I feel like I ought to be sending it out to record labels or sort of putting an infrastructure around the band but, mostly I'm just focused on trying to get the right guitar sounds. (laughing). I feel it's a little bit like navel gazing.

IVAN: Well, I wish you the best of luck with that. It's interesting to talk about how 15 years can make a difference to your perspective, I think.

JEFF: Yeah.

IVAN: So, let's go back to what happened after Orbit. You basically co-founded the company Lullabot, which from what I can tell, is the first fully distributed and remote company that ever existed. Am I going out on a limb by saying that? (laughing)

JEFF: (laughing) Well, it's really hard to gauge those things because, especially at the time, you get like freelancers that are working together, that don't have an office and is that a company? I think we were the first fully distributed agency services business. Automatic started right around maybe a year or two before us, and they were a distributed company, a product company, their product being WordPress, WordPress.com in particular is their commercial product. But obviously people know WordPress is an open source project. But we started in 2006, and I think much like Automatic sort of modeled ourselves around the incredible productivity that we were seeing happening around open source projects and the ways developers, in particular, were collaborating online.

IVAN: So, it was fully intentional to be distributed and remote right from the get-go?

JEFF: Yeah, I met Matt Westgate through Drupal.org and I just got over my head with my first Drupal project as probably most people do. And, I needed someone to help bail me out and I was asking questions in the IRC channels and finding a whole lot of developery snark. And that's very defeating and frustrating to kind of have people just sort of make fun of you as you ask questions. You know, this guy Matt Westgate was, every so often he'd answer a question in IRC and he seemed really helpful and posting also on the message boards, and I think I found it at one point. I did a search through Drupal.org and managed to find out our very first interaction. And I was asking some just sort of random question. It was probably about the ecommerce package in Drupal at the time, which was Matt's project,and he was super helpful and eventually I cornered him and said, “can I get you on the phone? I've done the math and even if I pay you to just answer my questions for me, I've got so many questions, that I think it would…right now I'm just Googling and searching and researching, is most of this project, and so if you could just point me in the right direction, then it would save me a lot of money, and if I gave you some of that money that I'm saving, I would still be saving money.” And that's how we kind of first met, but he lived in Ames, Iowa and I lived in Rhode Island, as I still do, and, it just seemed to be such a revelation, to be able to find this information in the form of Matt Westgate, that I was saying to him the whole time, I'm like, “listen, we need to start a company. People need this information that you have and that you're giving to me. And, I think that if we could help the world understand how to use Drupal, there would be value just simply in that, aside from actually building websites for people.” Just to tell people how to build websites would be valuable, and that's ultimately how Lullabot got started. So, again, to go back and answer your question more directly. Matt lived in Iowa, I lived in Rhode Island. So, we were distributed, and then we started finding more people. We went to our first Drupal conference, kind of as a company in Vancouver in 2006 and like February of 2006 and low and behold, several people came up to us and said, “oh, wow, you guys are really cool what you’re doing. Are you hiring?” And we thought, “what? Hiring?” We hadn't even thought out that far. And then we hired a few people who were also living in other areas of the United States and pretty quickly in Canada, as well. And then that was it. We were a distributed company.

IVAN: What a great origin story. I think I understand now, kind of the desire, to educate people about Drupal through Drupalize Me, because Drupalize Me came out of Lullabot, right? That’s a separate company. You guys started that and there was the best training on the internet for Drupal in my opinion, comes from Drupalize Me. So is that true? Is that part of it?

JEFF: Yeah. We started with kind of several different things first. When we set up the company, we thought of ourselves as a consulting company, that we knew, kind of from experience, that if Matt and I just took projects directly, it would take one project, two projects, before we would be unavailable and not able to help people to do more Drupal. And, so, with this mission of, we need to help people do more Drupal, being developers wouldn't be necessarily the best aim towards that goal. So, we started doing a podcast, we started doing Drupal workshops and then put out this idea of consulting. But, between the podcast, and we would use the podcast to promote the workshops, we really got known pretty quickly as the Drupal education company. And there wasn't really so much reason to talk about our consulting work on the podcast because with that, we were pretty full up. So, we would often times get people approaching us saying, “listen, you guys seem to be really experts in this Drupal stuff and I know that you do all these workshops and you guys do all this Drupal education, but do you think we could like, hire you to just like kind of help guide our project, like kind of like, maybe as a, I'll call it a consultant?” We were like, “well, our marketing is not quite, it’s a little too leaning towards all the education stuff.” Eventually we started doing full-fledged development, basically out of necessity. The Drupal market was growing so quickly and a lot of companies sort of built their foundation off of Lullabot taking this position as, sort of, the technical lead consultant for these projects but the development still needed to happen and so we would kind of go out and find all these Drupal companies and then they would kind of take-off from there. So, as those companies got more busy, it became harder to find companies to do the work for all these projects that we had. So, within a couple of years of starting, we started truly doing development and calling ourselves a development company. But we continue to do workshops. Eventually in 2008 the market made a big shift, in particular, a lot of the companies that we were working with were really big companies and the way that the finances tend to work around these companies is kind of slow and delayed. So, although there was this sort of market crash kind of thing that happened in 2008, a lot of the companies, their budgets were still there, they still had the budgets to do development projects, but they were trying to cut the corner so they wouldn't approve things like budgets for people to travel or to go to education events to learn about it. So, we started doing DVDs. Remember DVDs? So we started creating Drupal training DVDs and selling those and those did pretty well. And then, when the next version of Drupal came out, we realized that our DVDs were all going to be obsolete and we'd need to make an entirely new library of DVDs and with open source moving so quickly and stuff like that, and also the reason that I joke about remember DVDs is because the world has moved to streaming and so did, we. So, we took all our DVDs and that became the original basis of what became Drupalize Me, that became the original library of Drupalize Me, and then we started building additional content on top of that and it didn't need to be an entire DVD, we could just kind of do basically what's a patch video. It’s like, now that you watched that here's the new stuff in this module. Here's the new things in this new version and kind of keep it more evergreen. So Drupalize Me is still out there and still doing great. If anybody wants to keep up their Drupal knowledge, it's a great place to start learning Drupal or just make sure that you're keeping current.

IVAN: Your experience with distributed companies and distributed products, as a result of those companies, is vast. And so, in the last three years or so, you guys started something internally at Lullabot called Yonder. That's now its own company that you founded, and it's really, I think it's changed TEN7, honestly, because I think, I thought for a long time that TEN7 would be a company that was always in an office and would always be together, physically present with each other. But now we're completely distributed, and I think part of it has to do with all the literature that was out there and the podcast and the website and everything that you've been talking about, that really got me seriously thinking about becoming a distributed company. And things have changed right? There are more distributed companies now, than there ever have been. And I think the question I'm kind of leaning towards here is, asking you whether you think there's going to be a critical mass? A threshold of the number of organizations that end up fully adopting being a distributed company. And, I know there's gonna be a continuum, right? There's going to be always physical, and then hybrid where some folk are remote and some folk are physically in the location, and then completely distributed. And I'm curious about whether you think there's going to be a plateau or whether you think there is an extreme? We're going to be all distributed in the future, and we're going to have flying cars, and we'll use those cars when we need to go somewhere, and we won't really need to go anywhere. (laughing) Right? Where do you think we're going for distributed work?

JEFF: I think ultimately, sort of pragmatism will drive us wherever we're going. It’s sort of fun to think about it, kind of like, “oh yeah, everybody should do this.” But, again going back to that sustainability thing, like companies need to stay in business, and oftentimes they do what they know, they do what they know works for them. And so legacy companies, again kind of going back to the Fortune 500 companies, they know what works for them. They've figured it out over all of these years. IBM's been around since the fifties, forties, thirties, something like that. And it's kind of difficult to sort of change. The interesting thing is that these companies know this and they have departments -- the change department – that’s what they call themselves. These people who are like change agents within the company acknowledging that there's sort of this, kind of, I wouldn't call it lethargy but it is inertia, in that inertia also happens for things that are rest want to stay at rest, right? As things were in motion want to stay in motion. Things that are at rest, also want to stay at rest. That is also inertia. And so, what I've found is that the companies that are distributed tend to be younger companies. Companies that oftentimes started this way and are growing as a distributor company, automatic as I mentioned, continues to grow. But there are also companies like Shopify whose main offices in Ottawa, Ontario, Canada. But they have a clear central office, but mostly the companies are distributed, they kind of define themselves as remote first. GitHub is another company that kind of defines themselves as remote first. But now you know GitHub is part of Microsoft. Part of what Microsoft is buying and buying GitHub is the knowledge, the perspective, on how this can work. How do you make remote work, work? So, I don't know. It happens a little bit in fits and starts. The companies that are remote first or fully distributed are usually really excited about it. There are some requirements of the actual mechanics of remote work, the architecture of remote work, kind of requires autonomy. You can't look over people's shoulders in order for them to work. And autonomy requires respect, and the respect requires trust, and so, some companies have tried this without autonomy, respect and trust and they usually fail pretty quickly. But other companies sort of go in with this kind of testing kind of experimental attitude towards it. “Well, I guess we need to trust people. We need to give them autonomy if they're going to work from home.” And they do, and people rise to the occasion and they find that when people are trusted, they become trustable, and when they are respected, they become respectable. It doesn't always work with everyone, but there tends to be a little bit of sifting that happens. And then the people that are doing it, like I said, they get really excited about it. Just from that perspective of self-management and all those kinds of things that go with it. I would like to see more of it happen in the future. I'm available to anyone that wants to talk about figuring it out. This is sort of currently my mission, and the mission certainly of Yonder is helping people to figure that out and talking to people who have figured it out, and are trying to figure it out, and sharing what we are finding with everyone. We do a podcast and post articles on the website and stuff like that. We've got a mailing list. But we haven't hit that tipping point yet, right. I mean we haven't hit that point where all of those Fortune 500 companies are chomping at the bit to try to figure it out. But I do think a lot of it is, sort of generational. The definition of connectedness and productivity have changed, especially for the generation that's growing up with productivity and connectedness in their pocket. And the idea of needing to go into an office so that you can type things to people, like doesn’t really make sense, or that you could talk to people doesn't make sense, or that you could see people even, doesn't quite make sense. Obviously, this doesn't translate for all types of work, all types of jobs, doctors, more tactile professions. However, we are seeing even in that medical realm, there is a fair amount of talking to people about how they can be helped, that can happen well prior to a medical professional needing to lay their hands on someone. And so even some of that kind of stuff is starting to move into a more virtual realm and people can kind of work from wherever.

IVAN: When I think of distributed work and remote work, I always think of it as the antithesis to Gary Cole's character in Office Space. You know, the guy who walked up to the cubes with his suspenders and his tie and his thick glasses and just needed to make sure that everybody was in their cube doing what he was paying them to do. And just like you said, the more you respect your people and the more respectably they will behave and the more autonomy you give them, the better off it is for everyone.

JEFF: Well, it's kind of a human, it's not even a human nature thing. I mean, it goes back to sort of like animal pack behavior, having the leader of the pack, like the lion king right. Mufasa, standing up on the rock to look down over the lions to make sure, “we're all good. Are we all here, this is all good. Okay I'm in charge. I know I'm in charge because I can see everyone”. And then you think about kind of the industrial revolution, these giant factory floors with the management office raised up, so that they could just look and see everyone. It is a calming thing to be able to look over everyone You feel like, okay, I know what's happening. But the truth is, you don't know what's happening.

IVAN: Exactly. And it's maybe calming for the for the boss, for the person in charge. It's just the opposite.

JEFF: Yeah, it's sort of a false effect. Right, and going back to that, this idea of, kind of that factory worker mentality, or Office Space, right. I mean the whole thing with Office Space is that they're not really being productive, they don't really like their jobs, it's about putting on this facade and kind of playing this game in the office of caring, of trusting, of respect, and so you don't have that facade anymore. So, it kind of gets all broken down, and hopefully in trying to rethink it, in order to work remotely, we kind of rethink that relationship, because the truth is people need those jobs. Right. Like, you know there's this kind of, this sort of like resentment of your boss and resentment of your company, when you think about that sort of office space, kind of paradox. But the truth is people need jobs. Companies need sustainability. This goes back to that. We need to continue. You’re not going to get paid if the work doesn't happen, if the company doesn't get paid for the work happening and being done. Things don't progress, don't move forward if there's no productivity, and so to kind of redefine that and get everyone involved and to expose that fact is ultimately, I think, ultimately…That's really what I get excited about. Remote work, I think, is a way of kind of rethinking the relationship of workers to work in the future and the relationship of managers to workers and leadership and all that kind of stuff. I think that stuff will translate to all sorts of workplaces, even the ones that can't go remote, because they've got these more tactile professions and that's the thing that's even more exciting. The real work is kind of the mechanics of it, but kind of rethinking the way that work works is really interesting and exciting.

IVAN: And you're writing a book about it as well. I've been meaning to ask you how is that going?

JEFF: Also in fits and starts. It’s kind of sitting and has been sitting for a while now, as I try to figure out if there's a market for it, if people get excited about it and as I get more excited about playing music it just kind of sits. But, hopefully, in a perfect world I'll finish this new album for this band, and kind of have that obsession out of the way and as the weather starts to warm up for the summer in New England, maybe I'll start focusing back on the book again. I have a feeling it wouldn't take too much to shape it up into something that would be helpful for people.

IVAN: I look forward to reading it. One last question before we wrap up. You've read a lot of books and I would love to hear if you have a recommendation for a single book that I should pick up or maybe that our listeners should pick up and not miss out on?

JEFF: Well, there's so many.

IVAN: There are. Only one please. (laughing)

JEFF: I'm just gonna say the first one that came to mind. I guess I'm going to mention some others though. Three books have kind of come to mind. The One Minute Manager, this is like a classic management book, but ultimately, really kind of teaches the lesson that managers shouldn't really manage. That you need to let your people manage themselves. Then, the other book that came to mind was, even a classicer classic, How to Make Friends and Influence People by Dale Carnegie. Some of these books seem kind of old now to touch, but that one just, I think the real theme of that one is just reminding people as managers, as leaders, as people, that really, we all just want to matter. We want to be important. We want to matter. And, I think realizing that kind of builds a certain empathy and a way of connecting to people that recognizes that. Initially when that book came out, I think it was sort of this feeling that you could kind of start to exploit that understanding as a salesperson or something like that. But ultimately it comes down to authenticity. Neither of those books though were the first book that came to my mind. The first book that came to my mind was the book Tribal Leadership, which is not well-named. I think it becomes a little bit, when you read the book, you understand it at first but ultimately, that book is about finding a higher purpose for yourself and your business, in particular and trying to sort of strive beyond that sort of day to day stuff of being in business. This really rung true to me because playing in a band and making music with the goal of inspiring people, or the goal of trying to connect to people that you may never meet, is in itself sort of a higher purpose. And, I tried to sort of take that attitude to Lullabot when I started that business and find ways to you know make an impact on the world. You know, we should go teach people about Drupal. Drupal should be more popular, is ultimately sort of a higher mission than, “hey let's start a company.” I think people need websites and we can build websites and let's just build websites, as cheap and as awful as possible so that we maximize our return on investment. We will invest as little as possible and charge as much money as we can and try to cheat all of our clients. You know, that's sort of obviously the flip side of having sort of a higher purpose, higher goal. In the end you're building websites either way. But ultimately one, I think, will pull people towards you whereas the other tends to sort of repel people away, and that book is great for kind of reminding us of that and putting some, I don't know, kind of rules and metrics around it and stuff like that. So, I recommend that one. I tend to be an audio book person, being an audio person in general, but I believe that the audio book for that at least a few years ago when I found it, I could not find the audio book on Audible and in searching for it realized that that was because the Tribal Leadership people were keeping that for free if you sign up for their mailing list or something like that. So, for anybody that's interested in that book and particularly if you're an audio book person you can get it for free.

IVAN: Awesome. We'll link to all of the books you mentioned online in the transcript of this episode and we'll try to make sure we link to the free version too. Jeff, thank you so much for spending your time with me. I really enjoyed talking with you and listening to everything you had to say.

JEFF: Well thanks, Ivan. Thanks for having me on. I am never quite sure what I'm going to talk about with any given person, and when you invited me on, I thought, “boy I haven't really been keeping up with Drupal very well. I don’t know if we’re going to talk about Drupal for long,” but I hope all of this information is helpful to people. And, if anybody wants to get in touch with me jjeff.com is my website mostly for my business coaching there, but you can find the contact form to get in touch with me there and you can find me as jjeff on all the various social media.

IVAN: Thank you very much. Jeff is, as he said, online on jjeff.com, and of course, be sure to check out Yonders website at yonder.io and make sure you give his band 123 Astronaut a listen as well. 123Astronaut.com. All of that will be in the show notes in the transcript online. You’ve been listening to the TEN7 Podcast. Find us online at ten7.com/podcast. And if you have a second, do send us a message. We love hearing from you. Our email address is [email protected]. Until next time, this is Ivan Stegic. Thank you for listening.

Dec 19 2018
Dec 19

Have you ever tried logging in or registering to a website and you were asked to identify some distorted numbers and letters and type it into the provided box? That is the CAPTCHA system.

The CAPTCHA helps to verify whether your site's visitor is an actual human being or a robot. Not a robot like you see in the Terminator movie but an automated software to generate undesired electronic messages (or content). In short, CAPTCHA protects you from SPAM.
 

Distorted texts and numbers, for example, could not be recognized by bots so by providing this we are sure that only a human can log in or register.


This works! But there are some downfalls to this. For one, it's not user-friendly to visitors who are visually impaired. Reading distorted numbers and letters can be annoying to regular users, how much more to a user with a visual disability. The last thing we want from our visitors' is form abandonment, that is, leaving without even the chance to enter.
 

The solution? reCAPTCHA!
 

Drupal's reCAPTCHA module uses the Google reCAPTCHA to improve the CAPTCHA system. The reCAPTCHA module is a very efficient addon to the original CAPTCHA module.

With reCAPTCHA, we have the choice to provide a simple checkbox that asks our users if they are a robot or not. this is so much easier than asking our users to read distorted characters. We can also provide several random images and ask our users to check a specific image. This kind of test could not be passed by a robot, but we humans can!

Why trouble with bots? You may ask. The CAPTCHA system provides security, including but not limited to:

                -  Preventing Comment Spam in Blogs.
                -  Protecting Website Registration.
                -  Protecting Email Addresses From Scrapers.
                -  Online Polls.
                -  Preventing Dictionary Attacks.
                -  Search Engine Bots
                -  Worms (malware computer program) and SPAMs (undesired messages/content).

So how do we set up reCAPTCHA for our forms? Read along for an easy and detailed guide in setting up reCAPTCHA for your forms. this tutorial provides screenshots of every of every step of the way.
 

Install
 

Download and install CAPTCHA and reCAPTCHA module.

Using your favorite installation mode the Drupal UI, copy/paste from drupal.org, Drush, or Composer. Just remember that to use reCAPTCHA, you need the CAPTCHA module.

If your site is set using the PHP dependency manager called composer (like we do at Promet Source), add reCAPTCHA and the CAPTCHA module will be added automatically as dependencies:

$ composer require drupal/recaptcha


 

Enable
 

With Drush, you can enable the reCAPTCHA module by running the command in your terminal.

$ drush en recaptcha

Drush is fantastic to interact with Drupal and work faster. Learn more: Drush Made Simple).

You can also enable the module in the UI at "/admin/modules".

Search for Recaptcha, Click the checkbox and click 'install'.
 

Enabled reCAPTCHA module


Configure
 

Go to "admin/config" and choose CAPTCHA module settings.
 

CAPTCHA module settings


In the form protection default challenge type drop-down, choose reCAPTCHA from module reCAPTCHA. Don't forget to click 'Save configuration'.
 

CAPTCHA settings


After saving, click the reCAPTCHA tab.
You will be asked for the 'Site key' and 'Secret key'.
Click on the link Register for the reCAPTCHA, you will then be automatically redirected to Google.

Register your website for reCAPTCHA

Write your domain name in 'domains'.
 

A screenshot of the form where the site has to be registered for reCAPTCHA


You will be provided with the site key and secret key. Go back to "admin/config/people/captcha/recaptcha" and fill up the "Site key" in the general settings.

Click save.
 

CAPTCHA keys

Then go to CAPTCHA Points.

Choose which form you would like to use your reCAPTCHA.

TEST!!

To test, simply open your website and try visiting the form where you enabled the reCAPTCHA.

In this tutorial, the form that I choose to use reCAPTCHA is the login form.

reCAPTCHA displayed in a login page

Additional step: For local testing ONLY

If you want to do the above steps in your local environment, you have to disable the domain name validation in your reCAPTCHA configuration in google.com

Click the Advance settings and disable the domain name validation.
 

CAPTCHA for local testing


Don't forget to test by accessing your form in an incognito browser.

And there you have it, reCAPTCHA configured! Your Drupal 8 project is now protected by Google's reCAPTCHA system.

Say no to bots, yes to human...

Questions?
Drop them in the comments section below this article :)

Special thanks to Luc Bezier for contributing to this post before publication.

 

Dec 18 2018
Dec 18

Drupal 8 is a tool designed to meet the needs of the most ambitious web projects. We hear a lot about the notions of headless, API first, decoupling, etc. that resolutely allow solid architectures for ambitious projects. But this does not mean that Drupal 8 no longer propels more traditional, and sometimes even much less ambitious sites: simple, small, and even large, websites, but for which we want to benefit from the modularity, flexibility and robustness of Drupal.

Drupal 8, an industrialization solution for small or large sites

Drupal is also a solution that offers different possible architectures to industrialize the production of websites. A recurring need, that of being able to generate and manage multiple sites simply and quickly, often comes up again for projects whose ambition is not the complexity of a single site but the simplicity of managing a multitude of sites, more or less complex.

Drupal 8 offers us several possible solutions to industrialize website production: the multi-site architecture native to Drupal 8, and the Domain Access module.

The Drupal native multi-site architecture allows to generate and maintain multiple independent Drupal 8 sites that are based on the same foundation, the same base of the Drupal core and its contributed modules, while Domain Access offers to power different sites from a single Drupal 8 instance by simply separating content by means of access rights. Nevertheless, each of these solutions has its advantages and disadvantages. The maintenance of a multitude of Drupal 8 instances on a multi-site architecture can quickly become complex and time-consuming and one of its advantages, time to market, can be mitigated depending on the more or less complex organization within a structure and its IT. While Domain Access may require many adaptations, or even meet certain limits, as soon as the number of powered sites, or according to the different nature of the desired sites, reaches a certain stage.

After this brief introduction of the available solutions for a Drupal web-factory, the purpose of this post is not to go into the details of each of them, but to present a possible third way, based on the Micro Site module, and its many contributed modules.

Powering a multitude of Micro Sites with Drupal 8

The main idea of the multi-site architecture proposed by the Micro Site module is based on the following main idea:

Be able to publish a new site as easily and quickly as publishing a blog post

In fact, its concept can be compared to the multi-site solution proposed by Typo 3, and perhaps even inspired much of the genesis of the Micro Site module.

Typo 3 multi-sites

Typo 3 allows an administrator, or even a simple webmaster, to simply create a new site, configure its URL and some basic properties (name, logo, etc.), assign users to this new site and delegate rights to them, then simply publish pages linked to this new site to quickly have an autonomous site both in content and management, while being managed and maintained from a single interface.

Like Typo 3's multi-site solution, the Micro Site module is designed to:

  • Enable you to drive and manage hundreds (and more if necessary) of sites within the same Drupal 8 instance
  • Delegate management rights for a Micro Site within a dedicated and simplified administration space
  • Allow content and user sharing between Micro Sites.
  • Minimize adherence to a complex IT infrastructure
  • Allow an online launch, a time to market, extremely reduced
  • And benefit from all the modularity of Drupal to enable you to power Micro Sites with different properties

The Micro Site module (and its peripheral modules) can be used in many ways: dedicated sites for each department or laboratory of a university, event sites, partner sites, brand sites, allowing a federation or association to offer its members a packaged, ready-to-use website while facilitating content sharing and a common user base, any enterprise which wants master its multiple internet presence, and in general, to easily and simply propel and manage a galaxy of websites, from a few dozen to several hundred.

Architecture of the Micro Site module

The architecture of Micro Sites is extremely similar to the Domain Access module in that the Drupal 8 low-level access rights system is used to separate content between Micro Sites, but differs in one fundamental aspect: while Domain Access relies on configuration entities to define and create the different sites powered by a single instance, the Micro Site module relies on a content entity that will be used to provide the URL of the Micro Sites and many other things, such as giving users of a Drupal 8 instance, who are not administrators, the ability to independently create and publish a Micro Site.

By relying on a content entity, Micro Site allows you to natively customize at will, with simple site building and theming, simply by using the modularity offered by Drupal 8, the different types of Micro Site you want to be able to power. So for example:

  • The home page of a micro site is constituted by the content entity Site itself and can therefore be customized at will without any adherence to a general configuration of the Master Drupal instance.
  • By a simple site building and theming game, all the fields added on a Micro Site entity can be used on all the contents constituting the micro site. Thus the footer of a micro Site can be configured in a few clicks, and a template modification, by simply adding a few dedicated fields on the content entity provided by Micro Site.
  • Any customization, complex business need, for a type of Micro Site can be added by simply using the Drupal 8 eco-system. 

Micro Site, the solution that even makes coffee?

Like any industrialization solution, except to be the ultimate universal solution, the grail finally found, which even makes coffee, Micro Site has its strengths and weaknesses compared to other industrialization solutions. If the Drupal 8 native multi-site architecture, because each instance of the website factory is a complete, independent Drupal 8 site, allows you to benefit out of the box from the entire ecosystem of Drupal 8 contributed modules, this is less true with a Micro Site based architecture.

Some modules will be able to run out of the box, without specific integration, due to their nature (a module that provides a specific field widget such as jQuery minicolors, for example, or the Paragraphs module), other modules will require a very light integration, by a simple modification of their configuration, such as the Matomo module, while modules providing content entities (such as the Bibliography & Citation module or Simplenews) will require a more complete integration.

Micro Sites natively have a simplified management of users and their related rights on a Micro Site and its associated content. The idea is to cover 80% of use cases with an immediate, simple and effective solution. Thus a Micro Site has as standard 4 types of users (in addition to the owner of the Micro Site) who are:

  • Administrators: who have all the rights
  • Content managers: who have modification rights on all content linked to a micro site
  • Contributors: who can publish content related to a Micro site, and modify their own content
  • Members: who can simply view unpublished content

Concerning more complex or more specific needs, Micro site is not intended to deal with them natively. But quite simply, these needs can be addressed with a few alterations, or the addition of specific fields, and the application of their business logic by means of a customized module.

Micro Site is therefore not the ultimate solution that will be able to cover all cases of use in a few clicks. On the other hand, it offers you a solid architecture, an administration space and the APIs necessary for any alteration to achieve the desired result. And for the most common uses and needs, it is possible to create and modify your Micro Sites in the same way that you can manage different types of content with Drupal 8.

The Micro Site ecosystem

Micro Site is the core module, providing the Site entities, as well as the main APIs. Nevertheless, with only the Micro Site module, we are only able to create a micro site of the One Page type, a unique page that will be created by the Site entity itself. But several modules extend the capabilities of Micro Sites, allowing to go beyond the framework of a simple One Page site, the main ones being the following.

Micro Node

Micro Node is the module that allows you to integrate node (and thus any content type) within a Micro Site. Thus it allows to configure within a Master instance the different content types that will be available for Micro sites. These parameters can then be modulated for each type of Micro Site. And we can publish content on a Micro Site, or several Micro Sites, or even on all Micro Sites. 

Micro Menu Menu

The Micro Menu module allows you to create a Menu and allocate it exclusively to a Micro Site. In addition, it allows an automatic selection of this menu when editing or creating content, allowing to directly associate a content to an entry in this menu when you are in the context of a Micro Site.

Micro Theme

The Micro Theme module allows you to declare for each activated theme whether it can be used by a Micro Site. By default Micro Sites will use the default theme, but it is then possible to assign each Micro Site a different theme according to the needs. In addition, the Micro Theme module offers an interface to dynamically modify certain colors of the theme, the fonts used, similar to what can be found with the Core Color module. By default, this interface proposes a certain number of colors that can be configured, variables that can be extended, and for which it will be necessary to provide a corresponding CSS file, thus allowing this interface to be adapted to any theme used.

Micro Taxonomy

The Micro Taxonomy module allows to integrate the taxonomy of a Drupal 8 instance with the Micro Sites. On the one hand, by allowing a dedicated vocabulary to be allocated to each Micro Site, but also by making common vocabularies accessible to different types of Micro Sites, allowing them to consume or create taxonomy terms within these common and shared vocabularies.

Micro Path

The Micro Path module allows you to automatically manage aliases of identical URLs on several Micro Sites. Thus two contents published on two different Micro Sites can have the same alias. In addition, this module also allows you to create automatic alias patterns specific to a Micro Site, for the content types available, allowing you to modify automatic alias patterns configured in a general way on the Master instance.

Micro SSO

The Micro SSO module allows to set up an SSO authentication from the master instance to each Micro Site.

Micro User

The Micro User module allows you to control at the level of each Micro Site and/or Master instance which user can connect to a Micro Site or to the Master instance. Its functional scope is awaiting use cases that may require an extension of its functionalities.

Micro Sitemap

The Micro Sitemap module allows you to integrate the Sitemap module into the context of each Micro site, allowing you to customize an automatic site map from each Micro site.

Micro Contact

The Micro Contact module allows to integrate the Drupal 8 Contact module within each Micro Site, with the possibility to configure which contact form, configured on the Master instance, to use for each Micro Site. Note that the use of Webform forms can be done with a simple construction of a Paragraph allowing to load and render a Webform form, and as such a specific integration is not necessary. 

Micro Simple Sitemap

The Micro Simple Sitemap module allows you to generate a sitemap.xml file for each Micro site. Note that this module integrates the Simple Sitemap module in its current version 2.x, and therefore all its parameters made on a master instance, but that it is not excluded to use a simpler method, in an autonomous way, to generate XML sitemap files for each Micro Site.

Micro Bibcite

The Micro Bibcite module allows you to integrate the Bibliography & Citation module with a Micro Site. To date, only the Reference content entities provided by this module are supported.

In the end, these different modules make it possible to publish micro sites that can meet many editorial needs.

Brief overview of the functionalities of a Micro Site

As a preamble, due to the Bypass content access control permission automatically assigned to the User-1, it is advisable not to use this specific user in managing a Drupal instance with the Micro Site module, and therefore the special Administrator role. Otherwise, this user will have the unpleasant surprise of seeing all the content published on all the Micro Sites and all this happily mixed up. You must therefore create a new Role, to which you can assign all rights, except the Bypass content access control right, and assign this role to an administrator. This until this issue Remove the special behavior of uid #1 has been resolved.

General configuration

The Micro Site module provides the basic architecture to create and publish a new site, with a new Site content entity. It also provides a general configuration of the Master instance. The first action to be performed will be to globally configure the base URL of the Master instance that powers the Micro Sites, as well as the public URL of this instance (which can be the same as the base URL).

Micro site Settings

We can globally configure what content types will be available for use by Micro Sites. These parameters can be modulated by type of Micro Site.

Micro node settings

We can also configure which vocabularies can be used by Micro Sites. These parameters can also be modulated by type of Micro site.

Micro taxonomy settings

Creating Micro Site Types

Then it is possible to create different types of sites (One Page, Generic, Event, Department, Department, Brand, etc.) to be able to configure them differently.

Micro Site Types

Each Site type can be configured differently, depending on the options offered by the contributed modules, such as Micro Node or Micro Taxonomy.

Micro Site Type Configuration

Thus it is of course possible to add as many fields as necessary on a site type, just like a content type, but also to configure some general options that will then be available for all Micro Sites of this type that will be created. We can configure for each type of site:

  • The automatic creation of a dedicated menu for each Micro site
  • The automatic creation of a dedicated vocabulary reserved exclusively for each Micro Site created
  • The possibility to manage users and their different profiles on each Micro site of this type
  • The different types of content present on the master instance that can be used by each Micro Site
  • The different vocabularies present on the master instance that can be used by each Micro site

Management and creation of Micro Sites

Micro Sites can then be created and managed as the content types of a Drupal 8 project.

Sites list

A Micro Site has two statuses: Registered and Published. 

The Registered status will validate the URL of the Micro Site, as well as the presence of a valid Virtual Host. As soon as a Micro Site is Registered, any access to the Micro Site automatically returns to the URL of the Micro Site. The Registered status conditions access to the menus for managing and creating content associated with a Micro Site. In other words, it is impossible to start creating content associated with a Micro Site until it has been registered.

The Published status is more classic. An unpublished site will only be visible by its author, or its members (and if they have the appropriate permission), as well as any content associated with an unpublished Micro Site.

Management of a Micro site

The main idea here is that a micro site can be administered completely independently of the Master instance by simple users. Ultimately, a manager of a micro site may not even know that his site is hosted on a master Drupal instance. A Micro Site has an administration area accessible from the Local Tasks on the Micro Site home page.

Site local tasks

Thus we can customize at will the different screens that can constitute the administration of a Micro Site with regard to the different fields that have been attached to it.

In the example below, the default form for a Micro Site allows you to modify and view the following elements:

  • The name and email address of the Micro Site
  • The status of the Micro Site
  • The different fields allowing to fill in the top of the Micro Site page, its Home Page and its Footer (the use of paragraphs allows to have a great flexibility as for the content of these different elements)
  • Metatag informations
  • The URL of the Micro site
  • The Micro Site Owner
  • The Micro site's Logo and Favicon

Site edition default form

And another form mode, called Configuration, has been created and configured (see Provide a custom form mode to Drupal 8 entities) to group other fields to configure Micro Site behavior. For example below:

  • Micro Site users
  • Matomo / Piwik configuration for this Micro Site
  • Asset management for this Micro Site (i.e. the ability to write some specific CSS rules for this Micro Site)

Site edit configuration

The Micro Menu module has added a tab to manage the Micro Site menu entries directly from the Micro Site itself, without having to go through the standard Drupal administration menu interface.

Menu Micro Site

The Micro Node module has added a Content tab to manage all the content associated with the Micro Site, in the same way as on a traditional Drupal 8 instance.

Site content

The Micro Taxonomy module has added a Taxonomy tab to manage the vocabulary dedicated to the Micro Site, but also all the taxonomy terms of the shared vocabularies associated with the Micro Site.

Site taxonomy

Finally, we have a last tab Parameters which can be used by any contributed module to add a specific configuration screen to a Micro site. For example below the possibility to create a new automatic alias pattern specific to a Micro Site.

Site settings pattern

This quick overview of the administration space of a Micro Site shows us that a user can thus administer and manage the contents of a Micro Site directly from this space, without needing an administration access to any parameter on the Drupal Master instance. At least on the essential and necessary functions of managing a Micro site.

The initial design of a Micro Site aims to allow the publication and management of countless relatively simple websites, with a dedicated management space allowing the most common website management operations to be carried out quickly. A Micro site only brings together in a single space a subset of Drupal's administration functions. And it allows us to use natively, in the context of a Micro Site, the entities provided by Drupal, with little or no alteration. We can thus benefit from all the power of Drupal to meet more advanced needs if necessary. Need a multilingual Micro Site for example? It is simply accessible without effort, simply by activating multilingualism on the Master instance.

Is Micro Site usable in production?

Most of the modules presented here are still in alpha version. There is certainly still a lot of work to be done, both in terms of consolidation of APIs, the different use cases to be tested, and correct coverage in terms of automated tests, which is essential before we can switch to beta version. And any help will certainly be welcome to get through this landing.

Personally I already use them on two different projects with very good feedback. The functional coverage of the modules of this eco-system already covers many common needs. But there are certainly use cases not yet covered that will require more or less complex integration.

Some interesting aspects of Drupal still require integration, such as block management and placement, within a Micro Site. This function can of course be managed at the Drupal Master instance level itself using the visibility parameters provided by Micro Site, but the question arises as to whether or not this administration function can be delegated within a micro site. However, the use of Paragraphs, or even the new Layout Builder, makes it possible to meet many layout needs as of now. With a relevant site building zest, some retouching on theming and templates adapted to the different site types and the choice of a content architecture based on Paragraphs, countless possibilities are already within reach without having to make major changes to other modules.

In any case, for any multi-site project considered on a Drupal 8 base, Micro Site is an additional option to be seriously considered. As an illustration, you can get a quick idea of the possibilities offered by Micro Site to build a Drupal 8 website factory which already propels some sites of different nature such as this one Freelance Drupal and others. 

Dec 18 2018
Dec 18

Read our Roadmap to understand how this work falls into priorities set by the Drupal Association with direction and collaboration from the Board and community.

DrupalCon

Give thanks with your Drupal Family at DrupalConDrupalCon Seattle | April 8-12 2019 - Register today!

What better way to connect with your Drupal family and give thanks for Drupal's impact than at DrupalCon? Still need to register? Coming on your own? Now's a great time to lock in a good price.

If your organization is sponsoring your trip, consider investing those end of year budgets in your registration... and invest in Drupal's success while you do it. Your team can also sign up for or renew your Supporting Partnership for steep discounts on ticket prices.

The schedule is available now; check out the specialty sessions and register before prices go up!

Kicking off planning for DrupalCon Amsterdam

Members of the Drupal Association team traveled to Europe to meet with Kuoni Congress and, the DrupalCon Europe advisory committee do a kick-off meeting and deep dive on the event planning for DrupalCon Amsterdam. This was our opportunity to dive deep into the event with the team, and it was a tremendously productive 2-day session.

More news about Amsterdam will be coming soon, so check back at https://events.drupal.org/amsterdam2019 soon!

Kuoni Meeting

(Image courtesy of Baddy Breidert)

Drupal.org Updates

New telemetry data about Drupal usage

In November we also re-architected the way we parse data from sites that call back to Drupal.org for updates. This allowed us to learn more about how Drupal is used in the wild. This graph shows the current distribution of PHP versions for Drupal 8 sites. Notably only about 20% of Drupal 8 sites are still using PHP 5, so the migration effort for the community may not be as big as some expected when PHP 5 reaches end of life.

Drupal 8 PHP versions

Finding a new Technical Program Manager

As Tim has stepped into the role of interim executive director, we've been looking to bring a new team member onboard to backfill some of his technical responsibilities. In November we interviewed candidates for our Technical Program Manager position. We're excited to have our new team member join in the new year!

Drupal.org/community changes live!

The changes outlined to the Drupal.org community home page that we outlined in our October update are now live. This new entry point to the Drupal community addresses the many different needs that a new member of our community might have, and the different personas that they might represent. The home of the community will continue to evolve over time, so expect to see more updates soon, and please offer your feedback here.

Drupal Association UpdatesLehman Associates

Executive search firm selected

As you know, we've begun the process of looking for our next Executive Director. In November we interviewed executive search firms to help us with this process, and in early December we announced that we've selected Lehman Associates to help us with our search. If you would like to read the candidate profile, or contact Lehman Associates to offer candidate suggestions or provide other feedback, please use the button below.

View the profile

———

As always, we’d like to say thanks to all the volunteers who work with us, and to the Drupal Association Supporters, who make it possible for us to work on these projects. In particular, we want to thank:

If you would like to support our work as an individual or an organization, consider becoming a member of the Drupal Association.

Follow us on Twitter for regular updates: @drupal_org, @drupal_infra

Dec 18 2018
Dec 18

Read our Roadmap to understand how this work falls into priorities set by the Drupal Association with direction and collaboration from the Board and community.

Lock in your DrupalCon tickets before the end of the yearDrupalCon Seattle | Apriul 8-12 2019 - Register today!

DrupalCon Seattle is shaping up to be an outstanding conference. If your organization is sponsoring your trip, now's a great time to use your 2018 budget to register to attend. Your team can sign up for or renew your Supporting Partnership for steep discounts on ticket prices. Coming to DrupalCon on your own? The schedule is available now, so peruse the offerings and register before prices go up!

Drupal.org Updates

A new taxonomy for DrupalCon sessions

As you've seen if you clicked the link to the schedule above, events.drupal.org was updated to support session submission by tag, rather than track, earlier this year. This provides more flexibility in finding the content you're interested in, and encourages sessions which cross the boundaries of traditional tracks.

Prototyping a new Try Drupal experience

In October we put together a visual prototype of our proposed revamp of the Try Drupal program. This includes a better, more targeted user experience for each persona, as well as the opportunity for more organizations to participate. More details will be shared soon as we get further along, but for a sneak preview you can review the operational update from our recent public board meeting.

Improving the experience of using Composer

In October significant progress was made on the initiative to Improve Drupal Core's use of Composer. In particular, kicking off the primary issue for building this better support into Core, as well as moving the issue for supporting Semantic Versioning for Contrib from a plan to the implementation phase. These changes will improve the user experience for Drupal users with composer based workflows, and especially for Drupal users who start sites without Composer, and then switch to Composer based workflows. This also lays the groundwork for necessary steps for supporting the Drupal 9 roadmap.

Promote Drupal

Releasing the first draft of the Drupal Brand Book

In October, with the feedback of the Promote Drupal volunteer team, we developed and released the initial draft of the Drupal Brand book. This is one of the materials created by the Promote Drupal initiative, in order to unify the brand presentation for Drupal across agencies, internal sales, and regions. This will be updated with a vision statement for Drupal's business strategy and market position.

Initial draft of Drupal brand book

A new Community Section

In October we also spent time creating a beta experience for a new Drupal.org/community landing page. This page focuses on the onboarding process, helping visitors identify their need and persona, so they can get to the segment of the community that is relevant to them. (Hint: this beta experience has since gone live!) If you have feedback about making the community portal better, you can leave your suggestions in the drupal_org_community issue queue.

———

As always, we’d like to say thanks to all the volunteers who work with us, and to the Drupal Association Supporters, who make it possible for us to work on these projects. In particular, we want to thank:

If you would like to support our work as an individual or an organization, consider becoming a member of the Drupal Association.

Follow us on Twitter for regular updates: @drupal_org, @drupal_infra

Dec 18 2018
Dec 18

The pricing page is one of the key pages in a website, therefore it is important to have a clear and professional design that communicates the product benefits and pricing tiers your business offers. In today’s article we are going to learn how to recreate the new Sooperthemes pricing page. The Sooperthemes pricing page has a clean design style that mainly consists of rows, columns and text. Throughout this article we are going to work with the following elements:

  • Rows
  • Columns
  • Text
  • Buttons
Dec 18 2018
Dec 18
“Sometimes I would buy Vogue instead of dinner. I felt it fed me more." 
— Carrie Bradshaw from The Sex and the City

Consumer instincts have changed with time and so have market tactics. Today, the global brands not only selling the product, but they are also building a journey with the shopper, an impression that stays longer than the product (no pun intended). 

When shopping online it’s about knowing every little detail, almost like visiting the market and buying the product. Shopping is no more just about checking out the product and adding it to cart.

It is here that the commerce meets content.

And that is why everything has a story. This author, the perfume she wears, the website, images, rock, paper, scissors… everything.

Can Drupal provide the commerce organization the storyboard that they are looking for? And what about the conversational UI that is booming in the commerce industry? Can Drupal stand up to the expectations of its customers?

decorational image with a leaf, a pair of shoes, bag, sunglasses and lipstick

 

The Content-Driven Commerce. What is the Concept About?

Despite the fact that we have been experiencing content and commerce together since the start of marketing, content-commerce has never, until now, existed as a concept in itself. 

The best example of content-driven commerce are print magazines and that is what the retailers and business corporations have been trying to imitate online, today. 

An advertisement does that. Why aren’t we focussing there?

In 2013, Lab24 - an American market research firm - carried out a study that revealed that people had some serious trust issues with advertising. 

  • 76% of people believe that ads are “very exaggerated” or “somewhat exaggerated”.
  • 87% think half or more cleaning ads are photoshopped.
  • 96% think half or more weight loss ads are photoshopped.

Building a personal repo is more important than just throwing content in the form of ads. Meaningful content puts a filter on such garbage advertising also bringing rewarding results!

The fact that businesses can no longer ignore customers’ desire for content, purpose, is what has been changed in the market.

And yet, more often than not, online shops still resemble soulless product catalogs.

The story of Coco Chanel and her perfume No 5 is very beautifully presented in the series of 5. 

[embedded content]


With the help of blogs, user-generated content, and rich multimedia, brands are not only able to stand out from the crowd, but also provide a curated commerce experience to their customers. 

However, product-centric their content may be, it still establishes an emotional connection with customers through inspirational stories that pave the road to successful commerce.

Understanding the Concept with Timex

The famous American watchmaker Timex and its 22 sites are built on Drupal. The iconic brand offers intuitive navigation and engaging mix of product, social, and editorial content. This website infuses content in the entire shopping experience, doing an amazing job of featuring useful imageries and text that is relatable to customers.

homepage of timex with one digital watch from two different angles


Timex needed to ensure a unified brand experience on all its sites while also delivering digital content relevant to local markets - allowing the addition of new product content when and where needed.

Drupal ensures that the content generated in the U.S. is localised as per the location and published to local markets according to their needs. 

Not only does it enable the team to deploy content across regional websites rapidly while remaining on-brand, but it also supplements them with an ability in fueling the company’s international growth.

Why Opt For Drupal When Building Content and Commerce?

Helpful content, and not discounts, should be the centerpiece of awareness. And that’s exactly the role that content is meant to play in commerce.

With the Lab24 statistics, it is clear that - while all the e-commerce platforms aim to serve their users with a better experience, without leveraging the power of storytelling it is not possible. 

As the admin to an online store, you need to select and add the various content types that you are looking for. Be it blogs, testimonials, customer reviews, or product description, Drupal has it all for you. 

Drupal is unique in its ability to easily integrate into ambitious commerce architectures in precisely the manner the brand prefers. Drupal can be integrated with other e-commerce platforms giving rise to a hybrid solution. The third-party platforms can typically interact with the users either through the glass as in the case of a headless commerce solution or it can work side by side. 

In any case, Drupal can cover the need for the content driven user experiences with the homepage, marketing-driven landing pages, blog content while commerce features such as the product detail, category landing pages, and the cart and checkout flow can be handled by the e-commerce platform. 

Whatever the case maybe content types are at the core of Drupal. 

  1. Easy Content Authoring: Intuitive tools for content creation, workflow and publishing make it easy for content creators. User permissions, authentication help manage the editorial workflows efficiently. Previews help the editors access how the content will look on any device before the users approve and publish.
     
  2. Mobile Editing: Team members can review, edit and approve content from mobile devices, to keep content and campaigns flowing, regardless of where they are and what device they’re on.
     
  3. In-place Authoring: The WYSIWYG editor in Drupal to create and edit content in-place. 
     
  4. Content Revisioning and Workflows: For a distributed team Drupal enables a quick and easy way to track changes, revisions, and stage. It tells you who did what, when, out of the box. Also, it lets you manage custom, editorial workflows for all your content processes. Content staging allows you to track the status of the content - from creation to review to publication - while managing user roles and actions, automatically. 
     
  5. Content Tagging and Taxonomy: Beyond creating content, Drupal’s strength lies in creating structured content. This comes when you define content elements, tag content based on their attributes, create relevant taxonomy so it can be searched, found, used, and reused in ways that satisfy the visitors.
     
  6. Modules for Multimedia Content: Entity browser, paragraphs, pathauto, admin toolbar, linkit, blog, meta tag, and other content editing modules give the extra lease of life by extending and customizing content features and capabilities. They allow you to choose what features you want for your site. 

With multimedia content, your commerce-based site better serves the need for integrated, unified and hiccup-free user experience. In addition, you can also push content outside from your website to other channels.

As marketing horizons are expanding to social media it is important to deliver highly relevant and personal content via video (YouTube), stores, TV, etc. Brands no more can afford to continue to deliver disconnected and uncoordinated across a variety of different channels.

comparison of old and new gif

 

But Trust the Case Studies

homepage of benefit san francisco with a pink block and a bald girl smiling


The new content-centric website is an integrated, robust online store managed with SAP Hybris and Drupal. As the marketing department’s needs became more sophisticated, the content management system offered by Hybris was no longer able to adequately manage the store’s front end and content experience. 

Benefit Cosmetics is known for their colorful personality, irreverent voice, and unique dilemma based shopping experience. And so is the content that mirrors the seamless provide a seamless shopping experience. Benefit’s marketing and content teams are now able to maintain the brand’s unique design aesthetic while customizing content for users’ needs. 

The new platform leveraged commerce for over thirty countries. To ensure the sanity of the translations workflow, with Translations.com.
 

  • Strand of Silk
homepage of strands of silk with three women in indian ethnic wear


Strand of Silk website required a smart blend of commerce and content, such that the content generated by the editor and user can be easily linked to the products on the website. 

Various other e-commerce only solutions were evaluated, but Drupal was selected because of the ability to easily combine e-commerce and content - a trend that was seen as the de-facto requirement in the near future for e-commerce sites. 

The Rise of Content, Commerce, and Conversation

Content and commerce were coming together for a long time. But conversational commerce is catching up really fast. For consumers, a conversational experience is a way for them to learn about the product and services.

Informal exchange of ideas by the spoken words. 

Shoppers are looking for easy interactions like conversations, which are also casual and convenient. Conversational commerce as it catches up will be the guiding experience moving forward. 

The idea of conversational UI, shouldn’t be limited to a chatbot. The old trick still works. Content still rules. Although the new techniques and technologies can change the way we are doing things we can’t abandon the channels.  

As messaging platforms have become so universal and common, they are also easy to build. 

two mobile devices sending text messages


There can be many ways the model works. It can be one-to-one and one-to-many. Sending messages to the customer who has applauded their service on Facebook, comes under the one-to-one approach. 

But if a new shopping store sends a custom message to a targeted audience segment living in the area it comes under the one-to-many approach.

Add to the scene, the boom of voice assistants. Amazon Alexa and Google Home do actually assist the consumer in finding products, stores, events and much more. 

The Drupal community has been focusing on the bot frameworks and other cognitive services that can be used to develop bots for different use cases.  it all started with a framework called Open Source Bot Builder SDK for Node.js which is used for building bots. 

Further several bot frameworks like Facebook Messenger (wit.ai), Google Dialogflow, IBM Watson, Microsoft Bot Framework and open source conversational AI like Rasa are considered for the integration. 

The main idea was that the bots will enable search and explore the products by incorporating Drupal Commerce APIs. On the basis of message-based interaction, bots can also enable simple Add To Cart and Review Cart functionality among others and can offer relevant actions while looking for a product.
 

Whatever perspective you acquire, integrating content into commerce is easier said than done. The product has to be worthy, content authentic, and the transaction without a breach. Providing a seamless experience to both retailers and publishers, Drupal is the bridge you need. 

Connect with us to build a seamless, content-commerce experience. Drop a mail at [email protected].

Dec 18 2018
Dec 18

Modifying existing code might be all fun and games for a developer, but what about the time when you have to venture out to unknown shores and create your own custom modules? 

Scary, right? 

But you shouldn’t fear because Drupal 8 is here.

Drupal 8 uses a PHP framework called Symphony which relies heavily on Object-oriented programming.

It has been granting its users with benefits like code reuse and encapsulation, and these benefits allow users to maintain and structure code in a better way possible. 

Black background with three vertical squares in pink, blue and green color. All the three box contains the full form of OOP


Phew! 

However, this might leave you with a farrago of questions - What do I need to know in Drupal 8 to start developing? What is OOP? Why is it used in Drupal 8 to make modules? How does it create the custom modules? 

Thus, here is how you can do it all that might help make the OOP principle of PHP a little less daunting. 

Start With Prerequisites to Create Custom Modules

We all know that Object Oriented Programming has provided us with the power to create our desired objects and construct methods to handle them. And with the usage of various OOP principles and design patterns, Drupal 8 has brought about a much easier path in terms of development.  

Drupal 8 serves as a great introduction to PHP. Here are some of the design patterns which are important to understand to solve the basic object-oriented design problem. 

PHP Namespace (introduced in version 5.3)

In PHP you can’t have two classes that deal with the same name (they have to be unique). Therefore, PHP namespace allows you to dodge this issue by presenting a similar code into neat little packages, or even to determine ownership.

Drupal 8 consists of a number of files that declare the namespace in order to remain compatible with PHP 5.3. Therefore, with the help of two standards in Drupal, PHP interfaces and traits are easily namespaced.

Use statement

Classes and interfaces with a (\) backslash inside their fully qualified name should not use it inside the core. If it differs from the current file, then it can be solved by using the “use” statement on the top. For example

namespace Drupal\mymodule\Tests\Foo;

use Drupal\simpletest\WebTestBase;

/**
 * Tests that the foo bars.
 */
class BarTest extends WebTestBase {


And, for the file which does not declare a namespace has to specify with the use statement at the top of the file 
For the classes that are without backslash, they must be fully qualified when used in the namespace file.

Also, while you are importing a class with “use”, do not use the backslash. 

Aliasing the class 

PHP has allowed the classes to be aliased when they are being imported into a namespace. It is done to avoid the collision. But suppose the collision still happens, you can alias the classes by prefixing the next higher portion of the namespace.

use Foo\Bar\Baz as BarBaz;
use Stuff\Thing\Baz as ThingBaz;

/**
 * Tests stuff for the whichever.
 */
function test() {
  $a = new BarBaz(); // This will be Foo\Bar\Baz
  $b = new ThingBaz(); // This will be Stuff\Thing\Baz
}

Dependency Injections

Dependency Injections is that software design pattern that would allow you to remove hard-coded dependencies and also make it possible to change them either on runtime or at compile time.

Drupal 8 introduced the concept of services (object managed by service container) in order to decouple reusable functionalities. It creates the services pluggable and replaceable by registering them with the help of a service container.

These services are used to perform operations that include accessing of the database or sending up of an e-mail. Therefore, to let the code simply access the database (without worrying about whether the database is MySQL or SQLite), usage of core provided service via the service container is done.

These core services are defined in CoreServiceProvider.php and core.services.yml. Somewhat like:

...
language_manager:
    class: Drupal\Core\Language\LanguageManager
    arguments: ['@language.default']
  ...
  path.alias_manager:
    class: Drupal\Core\Path\AliasManager
    arguments: ['@path.crud', '@path.alias_whitelist', '@language_manager']
  ...
  string_translation:
    class: Drupal\Core\StringTranslation\TranslationManager
  ...
  breadcrumb:
    class: Drupal\Core\Breadcrumb\BreadcrumbManager
    arguments: ['@module_handler']
  ...


Each service depends on the other service. Like in the example above path.alias_manager is dependent on the path. crud, path.alias_whitelist and language_manager services specified in the arguments list.

Dependency injection is the preferred procedure for accessing and using services in Drupal 8. Services are transferred as an argument to the container or injected via setter methods.

Symfony 

Symfony is a PHP framework that Drupal borrows from in order to reduce codes duplication across various PHP projects. Much of the code that Drupal 8 uses to handle routing, sessions, and service container. These components are flexible and universal solutions. They are the stable ones and solves most the problems that aren’t good practice, to reinvent the wheel. Symfony follows the standards that adhere to PSR-5 and PSR-7

Annotations

Annotations are the comments in your code that contain meta information. The main advantage of annotations is that they improve performance due to the less memory usage and is placed in the same files as the class is. For example

/**
 * Provides a 'Custom' Block
 *
 * @Block(
 *   id = "custom_block",
 *   admin_label = "Custom block",
 * )
 */


Drupal 8 uses PHP annotations for plugin discovery and to present additional context/meta-data for the codes that have to be executed. These are the read using Doctrine annotation parser (offers to implement custom annotation functionality for PHP classes.) and then they are turned into information that Drupal can use for better understanding on what your code is actually doing. 

Plugins 

Plugins are considered as a small piece of functionalities that can be swapped. Drupal consists of different plugins with different types. The CMS platform provides a set of guidelines and reusable code components that allows the developer to expose pluggable components within their code and manage these components with the user interface. Plugins have three basic elements namely.

Plugin type: It is a central controlling class that would define how the plugin of this type will be discovered and instantiated.

Plugin Discovery: It is the process of finding plugins within the code base that is qualified for the usage.

Plugin Factory: It is responsible for instantiating specific plugins.

Not to Forget the OOP Coding Standards 

If the end user is aware of key OOP principle and design pattern, then it becomes even more easy for them to use it with Drupal. For instance, different services become available when default container initializes while bootstrapping Drupal. In short, you have the power to build your own class, then define it as a service and make it available in the container. 

Drupal 8  has a set of coding standards just for object-oriented code and adheres to common PHP coding conventions. 

Thus, some of the common PHP conventions for OOP that Drupal follows for best practices would include:

  • Declaring a class in OOP. It is important that there should always be one interface or trait per file. The classes are autoloaded based on PSR-4 namespacing convention, and in the core, the tree under PSR-4 starts as core/lib/. For the modules that contain contrib, custom and those in the core, the PSR-4 tree starts under modulename/src. It should also be noted that it is only possible to define a class in a module if the class does not contain any superclass. 
  • Next in this coding standards would be whitespace or indentation method. Both of them leave an empty line between the start of the class definition and property definition. Just like this:
class GarfieldTheCat implements FelineInterface {
  // Leave an empty line here.
  public function meow() {
...
...
...

 For an empty space between property definition and method definition:

...
...
...
  protected $lasagnaEaten = 0;
  // Leave an empty line here.
  public function meow() {
    return t('Meow!');
  }

And then for the space between the end of method and end of the class definition:

class GarfieldTheCat implements FelineInterface {
...
...
...
  public function eatLasagna($amount) {
    $this->lasagnaEaten += $amount;
  }
  // Leave an empty line here.
}
  • Without basic naming conventions, coding standard for OOP is a void. These naming conventions (set of rules) would help you to choose the character sequence to be used for the identifier that denotes the variables, functions, types and other entities.  
  • There might be chances where you would also wish to extend your code. Thus the use of separate interface definition would help you by contributing highly in terms of flexibility and would also neatly centralizes the document, making it easier to read.  A class that has to be extended must always provide an interface that other class can implement rather than forming them to extend the base class.
  • Also, it is important for all the methods and properties of classes to specify the visibility (private, protected or public). The use of public properties is strongly discouraged. It allows the entry of unwanted side effects and exposes implementation specific details, which in turn makes swapping out of class (for another implementation) much more hard. 
  • Now comes the “Type Hinting” in PHP. It is basically used to specify the expected data type of an argument in a function declaration.  Although type hinting is optional, it is recommended for debugging.If an object of the incorrect type is passed, an error is shown. If the method’s parameter expects a certain type of interface, it is important to specify it. This would guarantee that you are checking for a type and also maintaining a fluid code.
  • Next is instantiation. It is basically the creation of a real instance or a single realization of an abstraction/template such as the class of object. Drupal coding standards look down upon directly creating classes. Rather it is better to create a function to instantiate the object and return it. It is because:
  1. The function which is written can be reused to return different objects with the same interface as it is needed. 
  2. You are not allowed to chain construct in PHP, but you are allowed to chain return object from the function. 
  • Last but not the least - Chaining.  Chaining is that blessing for you which allows you to immediately call a function on a return object. This is also known as “fluent interface”
// Unchained version
$result = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => 42));
$title = $result->fetchField();

// Chained version
$title = db_query("SELECT title FROM {node} WHERE nid = :nid", array(':nid' => 42))->fetchField();

A method would return $this, and then would be chainable in a case where there is no other logical return value.

In cases that have a fluid interface of the classes, and code span of more than one line, the method calls should attend 2 spaces

$query = db_select('node')
  ->condition('type', 'article')
  ->condition('status', 1)
  ->execute();

Routing in Drupal 8 is Equally Important 

Drupal 8 routing system works with the Symfony HTTP kernel. The routing path has replaced hook_menu() in Drupal 7. Though in Drupal 8 heavy use of Symphony 2 components handle the routing part. Drupal 8 also uses YAML format. All the information about routes of a module is kept in the file MODULE_NAME.routing.yml. 

A flowchart on how a routing system sends a request to HTTP kernel

The routing system is responsible for matching paths to the controller and then you are allowed to those relations in routes. The additional information can also be passed to controllers in the router. 

Each route has to be described separately from one another with the involvement of these characteristics :

  • Name for identifying the routes 
  • Path beginning with a slash
  • A route’s processor
  • Condition managing the access to the route
example.my_page:
  path: '/mypage/page'
  defaults:
    _controller: '\Drupal\example\Controller\ExampleController::myPage'
    _title: 'My first page in Drupal8'
  requirements: 
    _permission: 'access content'

Example.my_page is the route in the .routing.yml file. The route is the Symfony component which maps the HTTP request to set the configuration variable. Under path, we specify the path where route should be registered. This acts as the URL to route 

Creating “Controller Class”

It is important to build the ModuleController.php according to the PSR-4 naming standard. You just have to create a folder along with a file name with the following content. 

<?php
/**
 * @file
 * @author Rakesh James
 * Contains \Drupal\example\Controller\ExampleController.
 * Please place this file under your example(module_root_folder)/src/Controller/
 */
namespace Drupal\example\Controller;
/**
 * Provides route responses for the Example module.
 */
class ExampleController {
  /**
   * Returns a simple page.
   *
   * @return array
   *   A simple renderable array.
   */
  public function myPage() {
    $element = array(
      '#markup' => 'Hello world!',
    );
    return $element;
  }
}
?>

A controller is a type of PHP function that you create. It takes the information from the HTTP request and creates or responds to an HTTP response.

Creating the “.module file”

In Drupal 8 hook_menu() is used to only define items. If you have a hook_menu() then make sure that route and path in example.module should match with example.routing.yml.

In the case of items and route example, .module should be on the same path.

<?php
/**
 * @File
 * Example custom module for Drupal 8.
 * @author Rakesh 
 */

/**
 * Implementing hook_menu().
 */
function example_menu() {
  // The paths given here need to match the ones in example.routing.yml exactly.
  $items['/mypage/page'] = array(
    'title' => 'First page',
    'description' => 'This is a example page.',
    // The name of the route from example.routing.yml
    'route' => 'example.my_page',
  );
  return $items;
}

Conclusion

So here it is. Now, you know the concepts of OOP to create a custom module. Yes, it is important to know OOP, design patterns, Twig, and modern PHP trends for creating the modules, and Drupal makes this task even more easy for you. Isn’t it?

If you’re looking for more good resources and reference material, head over to OpenSense labs, where we provide services that develop complex web applications with relative ease. Whether it is the development of a new custom module or optimization of your new website, everything is handled and tailored according to your needs. 

So contact us at [email protected] for more information and reference on the same. 

Dec 18 2018
Dec 18

There's nothing like Drupal's stock AJAX spinner (this:    Drupal's default blue loading throbber graphic) to make you notice that a site's design hasn't been fully customised. The code from my previous article showing how to fetch a link over AJAX to open in a Foundation reveal popup would suffer from this without some further customisation. After clicking the 'Enquire' button, a loading icon of some kind is needed whilst the linked content is fetched. By default, Drupal just sticks that blue 'throbber' next to the link, but that looks totally out of place. Our client's site uses a loading graphic that feels much more appropriate in style and placement, but my point is that you can set up your own bespoke version. Since it's Christmas, let's add some festive fun! Here's a quick video showing what I'll take you through making:

[embedded content]

A few things are needed:

  1. Create a javascript method that will add a custom progress indicator
  2. Ensure the javascript file containing the method is included on the page
  3. Set a custom attribute on the link that will trigger the AJAX
  4. Override Drupal core's javascript method that adds the standard progress throbber, to respect that custom attribute

There are many ways to achieve points 1 and 2. Usually, you would define a library and add it with #attached. But I decided I wanted to treat my work as if it were part of Drupal's core AJAX library itself, rather than something to add separately. So I implemented hook_library_info_alter() in my theme's main .theme file:


/**
 * Implements hook_library_info_alter().
 */
function MYTHEME_library_info_alter(&$libraries, $extension) {
  // Add our own extension to drupal.ajax, which is aware of the page markup so
  // can add AJAX progress loaders in the page.
  if ($extension == 'core' && isset($libraries['drupal.ajax'])) {
    $libraries['drupal.ajax']['js']['/' . drupal_get_path('theme', 'MYTHEME') . '/js/ajax-overrides.js'] = [];
  }
}

My ajax-overrides.js file contains this:


(function ($, window, Drupal, drupalSettings) {
  /**
   * Creates a new Snowman progress indicator, which really is full screen.
   */
  Drupal.Ajax.prototype.setProgressIndicatorSnowman = function () {
    this.progress.element = $('<div class="ajax-progress ajax-progress-fullscreen ajax-progress-snowman">&nbsp;</div>');
    // My theme has a wrapping element that will match #main.
    $('#main').append(this.progress.element);
  };
})(jQuery, window, Drupal, drupalSettings); 

My theme happens to then style .ajax-progress-snowman appropriately, to show a lovely snowman in the middle of the page, rather than a tiny blue spinner next to the link that triggered the AJAX. Given that the styling of the default spinner happens to make links & lines jump around, I've got the ajax-progress-fullscreen class in there, to be more like the 'full screen' graphic that the Views UI uses, and avoid the need to add too much more styling myself.

Part 3, adding a custom attribute to specify that our AJAX link should use a Snowman animation, is easily achieved. I've already added the 'data-dialog-type' attribute to my link, so now I just add a 'data-progress-type' attribute, with a value of 'snowman'. I want this to work similarly to the $element[#ajax]['progress']['type'] property that can be set on form elements that use AJAX. Since that only gets applied to form elements, not arbitrary links using the 'use-ajax' class, we have to do the work to pick this up ourselves.

So this is the last part. Back in my ajax-overrides.js file, I've added this snippet to override the standard 'throbber' progress type that AJAX links would otherwise always use. It falls back to Drupal's original method when the progress type isn't specified in a 'data-progress-type' attribute.


  // Override the progress throbber, to actually use a different progress style
  // if the element had something specified.
  var originalThrobber = Drupal.Ajax.prototype.setProgressIndicatorThrobber;
  Drupal.Ajax.prototype.setProgressIndicatorThrobber = function () {
    var $target = $(this.element);
    var progress = $target.data('progressType') || 'throbber';
    if (progress === 'throbber') {
      originalThrobber.call(this);
    }
    else {
      var progressIndicatorMethod = 'setProgressIndicator' + progress.slice(0, 1).toUpperCase() + progress.slice(1).toLowerCase();
      if (progressIndicatorMethod in this && typeof this[progressIndicatorMethod] === 'function') {
        this[progressIndicatorMethod].call(this);
      }
    }
  };

So there you have it - not only can you launch beautiful Foundation Reveal popups from links that fetch content via AJAX, you can now avoid Drupal's little blue throbber animation. If it's an excuse to spread some cheer at Christmas, I'll take it.

Happy Christmas everyone!

Spinning snowman animation

Dec 18 2018
Dec 18

We’re featuring some of the people in the Drupalverse! This Q&A series highlights some of the individuals you could meet at DrupalCon.

Every year, DrupalCon is the largest gathering of people who belong to this community. To celebrate and take note of what DrupalCon means to them, we’re featuring an array of perspectives and some fun facts to help you get to know your community.


For our third connection in this series, we feature the insight of Mario Hernandez.

Mario Hernandez


Mario Hernandez (mariohernandez) is a Senior Front End Developer at MediaCurrent, which offers open source strategy, design, and development to grow digital ROI.

His Drupal experience dates back more than 12 years, when he took it upon himself to test several CMSs, and found that that Drupal “offered the most flexibility, control and security,” and subsequently launched his career as a Drupal developer.

Why was it you continued down the Drupal path, and how does it shape what you do currently?

Back in 2007, I was tasked to find a platform to build an emergency preparedness website as part of the Continuous Of Operations Planning (COOP), which is a Federal Court's effort to resume normal service for the Judiciary System in the event of a disaster. At the time, I had never heard of Drupal. I began by testing several CMSs, which also included Wordpress, LifeRay, Joomla, and others. At the end of my assessment, I made the recommendation to begin using Drupal, which led to building other projects, and thus beginning my career as a Drupal developer.
 

What is a piece of advice you received that influenced your career?

Probably the most important advice I received is to determine if the technology you want to use actually solves a problem. Often times we lean toward a technology because is the hottest thing out there and everyone is using it; that's the wrong reason for selecting a technology.

These are exciting times. Get fired up about what you do and share your knowledge with others.  The world will be a better place because of that.
 

What book or piece of writing have you read in the last year that impacted the way you approach your work or colleagues? Why?

I don't have a book recommendation but I read online content all the time. Most of the content I read is based on the current trends or challenges I am currently facing on a project. For the past two years, my focus has been working and teaching about component-based development.  Naturally I spend my time reading and learning about that topic in particular in order to be able to resolve issues and also teach others about it. I usually read content from: Chapter 3, Previous Next, Mediacurrent, Lullabot, and others.
 

What is one thing you think people of today will miss in 20 years?

Given how the landscape is changing with the evolution of advanced Javascript frameworks such as React, Vue, Angular, etc., I feel that Drupal-specific events will not be as big as they are now or will not exist all together. The Drupal community has done an amazing job putting events together for everyone to gather at and get to see each other, but I think we are moving toward a world where Drupal will become another tool in the toolbox.
 

What are you most looking forward to for DrupalCon Seattle?

As with any Drupal event, the thing I look forward to the most is seeing my friends and meeting new ones. I have been an active speaker for many years and as much as I enjoy doing that, the thing that excites me the most is talking and learning from people I respect and look up to.

Join us April 8 - 12, 2019 for Drupalcon Seattle! 
 

Dec 18 2018
Dec 18

In my last blog post, I shared that when Acquia was a small startup, we were simultaneously focused on finding product-market fit and eliminating barriers to future growth.

Today, Acquia is no longer a startup, but eliminating barriers to growth remains very important after you have outgrown the startup phase. In that light, I loved reading Eugene Wie's blog post called, Invisible asymptotes. Wie was a product leader at Amazon. In his blog post he explains how Amazon looks far into the future, identifies blockers for long-term growth, and turns eliminating these stagnation points into multi-decade efforts.

For example, Amazon considered shipping costs to be a growth blocker, or as Wie describes it, an invisible asymptote for growth. People hate paying for shipping costs, so Amazon decided to get rid of them. At first, solving this looked prohibitively expensive. How can you offer free shipping to millions of customers? Solving for this limitation became a multi-year effort. First, Amazon tried to appease customers' distaste for shipping fees with "Super Saver Shipping". Amazon introduced Super Saver Shipping in January 2002 for orders over $99. If you placed an order of $99 or more, you received free shipping. In the span of a few months, that number dropped to $49 and then to $25. Eventually this strategy led to Amazon Prime, making all shipping "free". While a program like Amazon Prime doesn't actually make shipping free, it feels free to the customer, which effectively eliminates the barrier for growth. The impact on Amazon's growth was tremendous. Today, Amazon Prime provides Amazon an economic moat, or a sustainable competitive advantage – it isn't easy for other retailers to compete from a sheer economic and logistical standpoint.

Another obstacle for Amazon's growth was shipping times. People don't like having to wait for days to receive their Amazon purchase. Several years ago, I was talking to Werner Vogels, Amazon's global CTO, and asked him where most commerce investments were going. He responded that reducing shipping times was more strategic than making improvements to the commerce backend or website. As Wie points out in his blog, Amazon has been working on reducing shipping times for over a decade. First by building a higher density network of distribution centers, and more recently through delivery from local Whole Foods stores, self-service lockers at Whole Foods, predictive or anticipatory shipping, drone delivery, and more. Slowly, but certainly, Amazon is building out its own end-to-end delivery network with one primary objective: reducing shipping speeds.

Every organization has limitations that stunt long-term growth so there are a few important lessons that can be learned from how Amazon approached its invisible asymptotes:

  1. Identify your invisible asymptotes or long-term blockers for growth.
  2. Removing these long-term blockers for growth may look impossible at first.
  3. Removing these long-term blockers requires creativity, patience, persistence and aggressive capital allocation. It can take many initiatives and many years to eliminate them.
  4. Overcoming these obstacles can be a powerful strategy that can unlock unbelievable growth.

I spend a lot of time and effort working on eliminating Drupal's and Acquia's growth barriers so I love these kind of lessons. In a future blog post, I'll share my thoughts about Drupal's growth blockers. In the meantime, I'd love to hear what you think is holding Drupal or Acquia back — be it via social media, email or preferably your own blog.

December 17, 2018

2 min read time

Dec 17 2018
Dec 17

Drupal 9 is planned to be only 18 months away now, wow! It is already being built in Drupal 8 by marking APIs to be removed in Drupal 9 as deprecated and eventually upgrading some dependency version requirements where needed. Once the Drupal 9 git branch will be open, you will be able to test directly against Drupal 9. That should not stop you from assessing the compatibility of your module with Drupal 9 now. To prepare for compatibility with Drupal 9, you need to keep up with deprecated functionality and watch out for upgraded dependencies (when we know which are those exactly). Of these two, automation can go a long way to help you keep up with deprecated APIs.

What does deprecated code look like?

Deprecations include a trigger_error() call that allows catching when you use deprecated functionality. Here is an abbreviated example from the documentation:

<?php
/**
* [...]
*/
function drupal_clear_css_cache() {
@
trigger_error('drupal_clear_css_cache() is deprecated in Drupal 8.0.0 and will be removed before Drupal 9.0.0. Use \Drupal\Core\Asset\AssetCollectionOptimizerInterface::deleteAll(). See <a href="https://www.drupal.org/node/2317841.'">https://www.drupal.org/node/2317841.'</a>, E_USER_DEPRECATED);
\Drupal::service('asset.css.collection_optimizer')->deleteAll();
}
?>

The trigger_error() call here only fires when the error reporting level includes E_USER_DEPRECATED errors, and the message provides full explanation as to what exactly is deprecated, which Drupal version will stop providing it and what should be used instead.

Unfortunately not all deprecated code is yet updated to this standard, but help is more than welcome. We were already deprecating APIs before we instituted the clever trigger_error() format, and the old deprecations need some work to be updated. However usages of those that are already marked are possible to catch with automated testing.

Make tests catch usage of deprecated APIs

Drupal.org has a great automated testing system. Whenever someone uploads a patch for consideration, the test suite of the corresponding project runs and results are posted back on the issue. Changes that fail with the test suite of the project are never committed. You can use this system to try out how far is your contributed module from working on what we currently know to be Drupal 9. Let's see how this works.

First of all, your module should have automated testing enabled. Make sure you have at least one test in your project and configure automated testing for your module on the Automated testing tab of your project page.

Drupal.org's automated testing is driven from an (optional) drupalci.yml file in projects. Core's drupalci.yml file for example always exposes usages of deprecated APIs in test fails. On the other hand, contributed modules are not tested for usages of deprecated functionality by default. (Note no suppress-deprecations: false clauses in the file).

However you can choose to add a drupalci.yml file to your project repository to expose these failures or keep an issue on your project queue with a patch including the file to learn about the failures. Adding the file to your project outright ensures that the project keeps being Drupal 9 compatible as much as possible. On the other hand once a new minor version of Drupal 8 comes out, new deprecations could fail existing releases of your module in this case. If the newly deprecated APIs were replaced with newly added APIs, then fixing those failures would mean you increase the Drupal minor version requirement of your module, thus not being compatible with older minor versions. That may be problematic. For now you can at least add a testing issue to see what you are up to to begin with.

To make your contributed module tests fail when your module uses deprecated functionality, you need to take the default build.yml file for contributed projects and follow the instructions on drupal.org to take the assessment part of the file and add a suppress-deprecations: false directive to each testing section. The resulting file looks like as follows (everything being a straight copy-paste from the assessment section of the default build.yml file other than the deprecations directives). Save this in a drupalci.yml file in the root of your project:

build:
  assessment:
    validate_codebase:
      phplint:
      container_composer:
      csslint:
      eslint:
      phpcs:
    testing:
      run_tests.standard:
        types: 'Simpletest,PHPUnit-Unit,PHPUnit-Kernel,PHPUnit-Functional'
        # Test for Drupal 9 compatibility
        suppress-deprecations: false
      run_tests.js:
        concurrency: 1
        types: 'PHPUnit-FunctionalJavascript'
        # Test for Drupal 9 compatibility
        suppress-deprecations: false
      nightwatchjs:

If you already had a drupalci.yml file, then adapt its content adding the suppress-deprecations: false directives only. Create a patch file out of it for your project, or take mine from https://www.drupal.org/files/issues/2018-12-17/3020957-2.patch, which should be universally applicable to projects that did not have a drupalci.yml before. Once the patch is uploaded to an issue and set to needs review, you will get deprecations results.

My results and what do they mean

I tried this out on Configuration inspector, a module I help maintain, that provides insights about configuration structures and schemas for developers. As a developer focused module, it would be key to have it up to date with Drupal 9 so it will be trivial to use when the time comes. And the results were green, everything passed.

Ok, does that mean my module is Drupal 9 compatible? Well, not really. This method is only capable to tell me if there are incompatibilities, a green result does not guarantee that the module is Drupal 9 compatible. Why?

  • The method is dependent on all of core (and any other contrib dependencies) marking their deprecated code properly. As stated above this is not yet complete even for core. Help with the core issue and encouragement for contributed module authors to adopt the same deprecation format is welcome.
  • There will be more deprecations until Drupal 9 is released, and we don't know yet the full extent of those, so the result can only tell us so much about the present state.
  • Even in the present state, the results only represent code that my contributed module's test suite actually ran from my module. If my test suite is not very thorough (which in this case unfortunately is the case), then I cannot trust this green result either that it proves Drupal 9 compatibility. I know you are better in test coverage for your contributed modules, so your results would be better.
  • Drupal 9 will bring updated dependencies like Symfony 4 or 5, possibly Twig 2, etc. Usage of those dependency APIs directly would only fail tests if they would use the same trigger_error() deprecation mechanism. I believe that is not the case, for example, Symfony has its own Deprecation Detector that uses code sniffing instead of a test suite.

On the other hand if there are failures those should be genuine compatibility issues that you should fix for Drupal 9 compatibility. Therefore the title of this post: How to automate testing whether your Drupal 8 module is incompatible with Drupal 9?

Keep in mind that some failures may be results of contributed module dependencies of your module not being up to date. You may not be able to do anything with those failures directly, however letting the maintainer know and submitting fixes to those projects is very welcome.

How will this improve in the future?

As more code in core and contributed modules is marked properly deprecated with the current standard, more of the incompatibilities will be surfaced by this testing method. Also a checkbox for Drupal 9 deprecation testing is planned to be added to the automated testing configuration screen of projects, to make it easier to configure environments to test for deprecated code use. That will make the drupalci.yml creation of this tutorial obsolete, but all caveats and conclusions will still apply.

How does this test work out for your module?

Dec 17 2018
Dec 17

DrupalCon Seattle is looking different than the DrupalCons of years past.

The overarching goal when planning DrupalCon Seattle 2019 was to expand both outreach and accessibility so that attendees would be representative of the community as a whole. The value of the conference is in the perspectives, energy and diversity of experiences participants share.

DrupalCon began setting goals to overtly increase diversity starting with DrupalCon Baltimore 2017. This continued in the planning of DrupalCon Nashville 2018, and is prioritized for DrupalCon Seattle 2019.


The Drupal Association, along with our volunteer program team, actively identify ways to include more community members presenting on our stages. To track progress and provide a metric to gauge effectiveness of the outreach efforts, the call for papers includes an ask for self-identification in the following categories: ability, age, ethnicity, gender, learning differences, race, religion, sexual orientation, and socio-economic status. We track this information in order to reflect on the submission process and implement additional outreach efforts for subsequent DrupalCons.

In the first year of the initiative, Baltimore, 33% of our selected sessions were from underrepresented speakers. The following year, 40%. For our upcoming 2019 conference, that figure is 50% for the Builder track, signifying DrupalCon's largest ever number of underrepresented speakers in the sessions selected. The number of first-time speakers has increased as well, to 37%.

This approach and initiative to diversify our event caught notice of other organizations; Red Hat is one that aims to take similar strides

 

“I've long been impressed with Drupal's incredibly inclusive events strategy and have recently peppered [Drupal Association Senior Events Manager] Amanda (amanda.drupal) with questions about how they make it work,” said Arrie Brown, Content Strategy Lead for Events at Red Hat. “I was glad to have that resource when we started building the call for proposals for the 2019 Red Hat Summit. I wanted to be able to capture diversity data with inclusive, welcoming language, and DrupalCon's CFP nailed it—so much so that I incorporated much of it into ours.”


Going hand-in-hand with expanding DrupalCon outreach was the increased amount of inclusion funding from DrupalCon specifically for travel and lodging expenses for those identifying as part of an underrepresented group. We received a record number of requests for these inclusion funds—all of which were granted, resulting in an allocation of $20K and the overall increase of community members who may not otherwise be able to speak at DrupalCon Seattle.
 

Background
This year’s Call for Papers deadline was earlier than ever before; October 31. Outreach was via social media, newsletters (sign up), and by contacting active contributing community members. This resulted in 671 submissions total. Of these, 517 were 30-minute sessions, and 154 were 90+ minute sessions.

The community team reviewed all submissions, and the final lineup is specially selected in a tailored-to-fit fashion for our unique 2019 track selection.

In the Builder Track, rising questions make up several session titles: “What Should I Use? 2019 Developer Tool Survey Results,” “Why Will JSON:API Go Into Core?” and “What’s for Dinner? Using Predictive UX to Help Users Decide.” 

The most popular submission tags within the 37 options were: back end development, site building, and architecture. These types will be placed throughout the conference among the 169 total sessions in the builder track. 

Once you’ve registered, view the schedule of sessions where you can begin crafting your own schedule.

Customize your agenda by logging in, reviewing the sessions, and clicking “add to my schedule.”

An unrivaled lineup of learning, sharing, and networking opportunities await for DrupalCon Seattle attendees in April 2019. Are you one of the presenters, or has a session piqued your interest? Share your excitement; here’s how.

Didn’t submit a session or want to try again? Submit to a DrupalCamp, or opt for other DrupalCons; the Call for Papers for DrupalCon Amsterdam opens in Spring 2019, and for DrupalCon Minneapolis opens in Fall 2019.
 

Join us for DrupalCon Seattle 2019 April 8 - 12 at the Washington State Convention Center. 


 

Dec 17 2018
Dec 17

This year MidCamp will be including summits in addition to the regular programming that we have provided in the future. Here are some things we think you should know in order to prepare yourself:

A summit is a one-day topic-intensive meeting where people who share an industry or interest can come together to collaborate, share pain points and solutions, and meet like-minded individuals in a structured, safe environment.

Summits focus a full day unconference around a singular topic, in which different groups of interested parties collaborate, gather information and learn together. This programming is for focused discussion, planning, hacking and learning about the topic. 

We believe in facilitating like an unconference. On the day of, each summit group led by a facilitator will compile an agenda and create breakout groups on various subtopics of the overall summit topic.

Unlike training, attendees are generally still planning and information gathering. There won’t be any required deliverable, like code or documentation. Instead, summits focus on conversation and dialog. During a training, the focus is learning a thing, but summits encourage open idea sharing on a broad range of topics related to the overall theme. 
 

Takeaways from the Midcamp Team

Below are some stories from our team as they reflect back on their first summit.

Dec 17 2018
Dec 17

Ted Bowman, senior software engineer with the Drupal Acceleration Team at Acquia, joins Mike to discuss the game-changing work of the Layout Initiative. Sorry about the poor quality of part of Mike's side of the conversation (as well as the comical overdubbing of other portions of the conversation).

Discussion

DrupalEasy News

Upcoming Events

Sponsors

Follow us on Twitter

Subscribe

Subscribe to our podcast on iTunes, Google Play or Miro. Listen to our podcast on Stitcher.

If you'd like to leave us a voicemail, call 321-396-2340. Please keep in mind that we might play your voicemail during one of our future podcasts. Feel free to call in with suggestions, rants, questions, or corrections. If you'd rather just send us an email, please use our contact page.

Dec 17 2018
Dec 17

Heading a multinational or location agnostic organization with complex content creation and publication needs while also keeping a track of the content can be a difficult task without the right content management system.

The number of bloggers is expected to reach 31.7 million in 2020 in the US alone. 

Imagine the number of blogs on the internet. The huge amount of information flowing online has brought us to the situation where the ever-flowing media content needs to be routinely stored and encoded. Networked storage and exchange of data allow content to be distributed making the task of content management all but impossible to deal, without a content management system.

Content and teams that interact in a distributed system need to be dealt intrinsically different from the ones that interact in a centralized system.

Considering the popularity of Drupal as the enterprise’s CMS, in this blog, we will explore how it can help in providing and managing the modern digital experience as a Distributed Content Management System.

Distributed content management system. Four laptops connected to a central laptop.

 

Understanding the Concept

A distributed content management system can be difficult to comprehend to different people as it implies a different meaning to a different situation. 

To develop a better understanding of the distributed content management system, let’s understand with an example of a national daily which also publishes in different regional languages. 

The Distributed Management of Content or The Management of Distributed Content

The Distributed Management of Content deals with the workflow involved in the content creation with a decentralized approach. 

The Management of Distributed Content works around dealing with existing content from a variety of sources, involving input (from other websites/sources), output (to other websites) or both. 

By implementing Distributed Management of Content, organizations can eliminate the time and opportunity for error introduced when users enter content in multiple places. Unlike the first concept, the goals for Management of Distributed Content are generally around efficiency and control. 

Setting up An Example of a National Media House

Let’s call this media house - OneIndia News. 

One India news has 6 regional websites. Similar to many media institutions, the website channels are split into multiple categories (let’s say 5) and each of those categories further houses a number of sub-sections.  

Some of the regional websites may only have 2 to 4 categories depending on the demand, but others may have upwards of 10. 

Each category has an editorial team of its own.

Now the regional websites are handled by a number of different editors for each category and channel. Toss in the requisite assortment of content types and workflow hierarchy - you can see how quickly the web presence gets complex!  

Management of distributed content revolves around efficiency and control.

At this scale, we’re likely dealing with multiple websites of one media organization, all of which have requirements around content. This has now become the perfect use-case for Distributed Content Management!

distributed content management system hierarchy of the media house

 

Use Case 1: Publishing Workflows For Individual Websites

For the main website of One India News, a central editorial team with defined roles and distributed content production would suffice.

Consideration of a content approval workflow is a critical part of the content strategy for any organization that employs distributed management.

Each news needs to be added and edited by different people. Editing the news on the live site can result in accidental publishing.

Be it living a number of articles at the same time, sending the final copy for the approval of different persons (without living them) or publishing articles on different subdomains. A robust virtual workflow and content staging and publishing without the requiring the editor to log into the target site is needed from the CMS. 

Publishing workflows will be tailored not only to the regional media house but to each channel and team that’s in charge of their regional website. The idea here is to manage the responsibilities across the organization while empowering the editors. 

Content to be published on the homepage of the website will likely require significantly more oversight than in the humor or offbeat channel. 
 

Use Case 2: Sharing Content Out - Centralized Content On A Distributed Web Platform

Copy-and-paste becomes a less efficient option when the content is further distributed to the workflow.

A distributed system must have a Pub-Sub (Publisher-Subscriber) feature to ensure the information is processed quickly across the different systems. The centralized system must allow editing and processing of the data while pushing the request to the subsystems. This needs to be done asynchronously so the results populate really fast, for the editor. 

Use Case 3: Sharing Content In - Decentralized Websites As Points Of Origin

Another interesting use case presents itself when we consider distributed websites as the starting point for content creation. One India, as any media houses maintain a central calendar of events, such as festivals and political events. 

In a well-formed distributed content model, with an appropriate CMS like Drupal, the same metadata that allows visitors to filter events - audience, department, program - can be easily used to syndicate those events to various other websites.  

Unfortunately, the same level of consideration is not always given to everyone outside the subset team with appropriate permissions. 

Content managers who are generally empowered to manage their own content may not have the same access to do so, or, in cases where they do have permission, find themselves needing to enter content into an entirely different website system to get it published to their site. But why should this be the case?  

By extending the same technologies that allow websites to receive events from a central calendar, in Drupal we can enable content managers to publish events to the calendar from within the same website they usually manage. (The same content approval and publishing workflow considerations apply, of course.)
 

Difference between Centralized and Distributed Content Management
 

Centralized Content Management

Distributed Content Management 


Use Case 4: Multichannel Brand Content

Single-source content syndication also provides an opportunity for media companies to promote their brand across multiple mediums. Many companies choose to employ standalone, all-in-one news providers such as Reuters, rather than integrating a category for each of the news providers. 

This makes a tremendous amount of sense - these organization systems when merged with the own CMS can provide a number of compelling results such as quicker results and faster news publishing. 

By programmatically receiving the content from a content repository the organization can eliminate the risk of delayed news and perpetual loss of audience. 


Use Case 5: Content Delivery To Validated Audiences

In an attempt to decentralize content over the years, media organizations now allow users to add stories to the website. 

How they access, validate, identify the users is another key consideration for the company’s distributed content management strategy. 

A common approach is to segregate guest editor content into different regional “portals” - websites that require the editor to create accounts and login to see the information for their country or part of the world.  

To overcome the challenge of validating these accounts, companies often integrate with an Identity Provider (IdP) such as SAML 2.0 Single Sign On easy configuration & active support, in your Drupal website. 

At the far end of the Distributed Content Management spectrum are systems that need to publish consistent, controlled content to websites with no possibility for discrepancies across multiple sites.  

Drupal allows Distributed Content Management strategy to be applied to large volumes of content to facilitate efficient workflow. Specifically, the system allows different content and editors to be part of the same system without much replication. 

Finally, the modular design of the Drupal architecture allows both stand-alone and distributed realizations so that the system can be deployed in a variety of applications. Connect with us, drop a mail at [email protected] or tweet us @OpenSenseLabs

Dec 17 2018
Dec 17

Drupal is an enormously welcoming community with countless online forums and community events to learn about the platform. Its open-source knowledge sharing and peer review is arguably second-to-none, and thanks to Acquia's Drupal certifications the Drupal learning process is becoming more consolidated.

However, nothing can quite beat the quality, focus, and hard work that goes into publishing a book. We’ve quizzed our Drupal developers and members of the Manchester tech community to find out which books every Drupal developer must read.


Drupal-Specific Books

 

Drupal 8 Module Development

Drupal 8 Module Development: Build and customize Drupal 8 modules and extensions efficiently

By Daniel Sipos

This book is a great welcome to Drupal 8, introducing you to the architecture of D8 and its subsystems, for a thorough foundational understanding. It guides you through creating your first module and continues to build upon your skills with more functionalities that all modern developers need to know.

View on amazon

Drupal Development Cookbook

Drupal 8 Development Cookbook - Second Edition: Harness the power of Drupal 8 with this recipe-based practical guide

By Matt Glaman

Using a fun, easy-to-follow recipe format, this book gives you an expansive look at the basic concepts of Drupal 8, in a step-by-step fashion. While this sometimes misses out on the ‘why’ of an action, it makes building new modules approachable and unintimidating for any level of developer.

View on amazon

Ambitious, intelligent, and a great Drupal developer? Check out our careers page.

CTI Careers

Drupal 8 Explained

Drupal 8 Explained: Your Step-by-Step Guide to Drupal 8

by Stephen Burge

Written in no-nonsense plain English, this book is great for any Drupal beginner. It’s been praised as the day-to-day reference book that any new developer should keep handy on their desk.

View on amazon

Drupal 8 Blueprints

Drupal 8 Blueprints: Step along the creation of 7 professional-grade Drupal sites

By Alex Burrows

This Drupal 8 guide will take you through 7 real Drupal 8 sites to demonstrate the latest practices in action. This all-encompassing view provides a look at the reasoning and methodology behind certain practices, and context for their larger impact on the site.

View on amazon

Definative Guide To Drupal 7

The Definitive Guide to Drupal 7 (Definitive Guide Apress)

by Benjamin Melancon

While some new sites are building built in Drupal 8, it’s important the remember that many of the sites you’ll work on and maintain are in Drupal 7. This comprehensive book provides the nuts and bolts of any Drupal 7 site, to build a powerful and extensible system. Some concepts are slightly dated, so we’d recommend cross-checking online occasionally.

View on amazon

Pro Drupal 7 Development

Pro Drupal 7 Development (Expert's Voice in Open Source)

by Todd Tomlinson

This book is for slightly more ambitious developers as it quickly jumps through the basic modules to the more complex. Breaking down the development of APIs and improvements to Drupal 7, this book will have any Drupal Developer producing complex modules in no time.

View on amazon

Essential Development Books

Many coding principles span development languages and frameworks. Here are our essentials for any developer seeking the ability to produce high quality, clean code.

The Clean Coder

The Clean Coder: A Code of Conduct for Professional Programmers

By Robert C. Martin

This book delves into the difference between good and bad code. Split into 3 parts, the book first discusses principles, patterns, and practices of writing clean code. Real world case studies follow, before the book finishes with the signs of bad code and problem solving skills needed to de-bug and refresh any code base.

View on amazon

CSS

CSS Secrets: Better Solutions to Everyday Web Design Problems

by Lea Verou

CSS Secrets explains how to code common 'real world' solutions with CSS. Condensing the most useful and practical examples, this book is a more exciting read than the often extensive paperbacks which try to cover absolutely everything.

View on amazon

PHP and Javascript

Learning PHP, MySQL & JavaScript 5e (Learning PHP, MYSQL, Javascript, CSS & HTML5)

By Robin Nixon

Begin expanding your language stack with this multifaceted book. PHP is essential for any Drupal developer as it forms the core language of the Drupal framework. Meanwhile, learning Javascript, CSS and HTML5 will empower you to deliver more complex solutions.

View on amazon

And lastly, an open source book about… open source

The Cathedral & the Bazaar

By Eric S. Raymond

While this piece is slightly dated, it’s underlying concepts are still highly relevant and give great insight into the origins and essence of open source. It’s also free, so definitely still worth having a skim through… if you can handle the formatting!

Read it for free

I hope you've found some great reads here, if you've got a personal favourite please let us know below. Also if you're interested in advancing your Drupal career, please check out our careers page to see if there's a position perfect for you.

Careers at CTI Digital

Dec 17 2018
Dec 17

Agiledrop is highlighting active Drupal community members through a series of interviews. Now you get a chance to learn more about the people behind Drupal projects. 

Meet Kevin Kaland, perhaps more easily recognized by his Twitter handle wizonesolutions, the digital wizard responsible for the FillPDF module. In this interview, he talks about his first interactions with Drupal and reveals his thoughts on the future of Drupal as a decoupled system. 

1. Please tell us a little about yourself. How do you participate in the Drupal community and what do you do professionally?

I’m originally from the US, but I’ve been living in Europe (Norway and Slovenia) for the past 6 years.

I maintain the FillPDF module and run an associated software-as-a-service business called FillPDF Service.

Professionally, I’m a software developer. I develop and maintain websites, usually with Drupal.

2. When did you first come across Drupal? What convinced you to stay, the software or the community, and why?

I first encountered Drupal when volunteering on a nonprofit’s web team. I got familiar with it, and when I started WizOne Solutions, I did a good amount of work with it. I didn’t get involved in the community until Autumn 2010, a little over a year after. The community was welcoming enough that I began attending meetups and conferences regularly.

3. What impact has Drupal made on you? Is there a particular moment you remember?

Learning Drupal 8 was fairly difficult at first, but I was impressed that the community managed to release it. It took a long time to come out.

4. How do you explain what Drupal is to other, non-Drupal people?

I usually avoid trying, haha. But seriously, if they don’t know what it is, I just describe it as a tool for making websites.

5. How did you see Drupal evolving over the years? What do you think the future will bring?

It’s always hard to say. I have a couple thoughts, though:

  • It will become more and more of a content administration backend coupled with single-page applications on the user-facing side that simply exchange data with Drupal. This is typically called “decoupled Drupal.”
  • If the Promote Drupal initiative is successful, it will be marketed as compliant with legal accessibility guidelines.
  • As ready-made Drupal distributions become better, it will become faster to build effective sites.

6. What are some of the contributions to open source code or to the community that you are most proud of?

Code-wise, the FillPDF module :) the Drupal 8 version was released on the same day Drupal 8 came out.

Community-wise, probably my DrupalCon Vienna session. It was my first DrupalCon session, and it went alright. I also made a diagram for it that is now in the Drupal Commerce migration docs.

7. Is there an initiative or a project in Drupal space that you would like to promote or highlight?

The Promote Drupal initiative! Everything else is dependent on there being enough Drupal projects to pay the bills!

8. Is there anything else that excites you beyond Drupal? Either a new technology or a personal endeavorment. 

I like traveling, hiking, and learning languages. I’m currently studying Romanian on Duolingo in preparation for DrupalDevDays Transylvania.

Dec 16 2018
Dec 16

Drupal updates can be very different. Some of them -- easy patches that you just roll out and forget. Some of them -- break your site. Tricky part is you never know how updates will behave on your site until you actually tried them out.

This is why it is very tricky to give estimates to clients how long it is going to take. They usually do not appreciate answer 1 to 20 hours depending on some random facts.

In this way rolling out updates got delayed and delayed. And then we get to situations after half a year or a year that we know for sure site will be broken after updates. And now hero time begins.

Would it be nice if site would tell you not only the fact that it needs updates but also if it is going to break or not after rolling them out.

Nowadays, thanks to Pantheon's multidev, it is technically possible to automate checking how your updates will behave on the site.

Main idea is to regularly check updates (using drush command) then if updates are found create a separate environment and roll updates there. Afterward to ensure that they didn't break the site (at least visually) we could run some visual regression testing. So in result we have way more predictable answer about "how much efforts it will take to roll updates out".

Here is a full article tutorial about how to set it up http://docs.diffy.website/tutorials/put-your-sites-updates-on-autopilot-with-pantheon-multidev-and-visual-testing.

For sure fixing smaller updates is much easier than fixing big break after year of delays.

Dec 16 2018
Dec 16

Most products cycle through the infamous Innovation S-curve, which maps a product's value and growth over time.

Product lifecycle s curve

Startups are eager to find product-market fit, the inflection point in which the product takes off and experiences hockey-stick growth (the transition from phase one to phase two).

Just as important, however, is the stagnation point, or the point later in the S-curve when a product experiences growth stagnation (the transition from phase two to phase three). Many startups don't think about their stagnation point, but I believe they should, because it determines how big the product can become.

Ten years ago, a couple years after Acquia's founding, large organizations were struggling with scaling Drupal. I was absolutely convinced that Drupal could scale, but I also recognized that too few people knew how to scale Drupal successfully.

Furthermore, there was a lot of skepticism around Open Source scalability and security. People questioned whether a community of volunteers could create software as secure and scalable as their proprietary counterparts.

These struggles and concerns were holding back Drupal. To solve both problems, we built and launched Acquia Cloud, a platform to build, host and manage Drupal sites.

After we launched Acquia Cloud, Acquia grew from $1.4 million in bookings in 2009 to $8.7 million in bookings in 2010 (600% year-over-year growth), and to $22 million in bookings by 2011 (250% year-over-year growth). We had clearly found product-market fit!

Not only did it launch Acquia in rocket-ship growth, it also extended our stagnation point. We on-boarded many large organizations and showed that Drupal can scale very large. This helped unlock a lot of growth for both Drupal and Acquia. I can say with certainty that many large organizations that use Drupal would not have adopted Drupal without Acquia.

Helping to grow Drupal — or extending Drupal's stagnation point — was always part of Acquia's mission. From day one, we understood that for Acquia to grow, Drupal had to grow.

Launching Acquia Cloud was a great business decision for Acquia; it gave us product-market fit, launched us in hockey-stick growth, but also extended our S-curve.

As I think back about how Acquia approached the Innovation S-curve, a few important lessons stand out. My recommendation is to focus on opportunities that accomplish two things:

  • Focus on business opportunities that serve a burning customer need that can launch or accelerate your organization.
  • Focus on business opportunities that remove long-term barriers to growth and push out the stagnation point.

December 16, 2018

1 min read time

Dec 16 2018
Dec 16

Cooking something very delicious requires the right sort of ingredients and preparation. Serving delectable food can entice people and make them remember the taste for a long long time. Building a food-based website also requires the right platform that can engage people and offer ambitious digital experiences. This is where Drupal enters the scene.

Illustration showing a transition of sunrise into a plate with spoon and fork with six different images in six different boxes


As an open source CMS, Drupal is a reliable, secure and flexible platform and helps in creating the features that technology professionals want. It conforms with technical and business requirements and can be a great solution for powering the online presence of a food-based brand.

Drupal’s Greatness for Food-based Website

Drupal powers websites of some of the great names in the food industry like BBC Good Food, 24 Kitchen, Bosscaffe, Alevri among others. What prompts them to choose Drupal?

Drupal powers websites of some of the great names in the food industry

Spectacular functionalities

Drupal offers a lot of modules, themes, and distributions that can help build a great food-based website.

For instance, a restaurant chain can use the make their Drupal website stylish with a free mobile-first, Bootstrap 3 based theme for Drupal called Restaurant Lite.

You can even leverage the benefits of Restaurant Zymphonies Theme which is another free mobile-first theme that can power the websites of restaurants, food stalls, hotels and other dining websites.

As a multifunctional, commercial profile created for intricate online stores, Food Delivery, a Drupal distribution, offers a complete starter pack for developing food-based websites.

Security

Drupal Security Team has been working round-the-clock validating and responding to security issues thereby making it one of the most secure open source CMS. Among the leading open source CMSs, it has been performing far better than Wordpress, Joomla and Magento.

Drupal is one of the most secure open source CMS
Table with rows and columns showing statistics on web app attacks targeting top CMS and ecommerce assetsSource: Alert Logic

Scalability

To help you cope with the busiest of days, Drupal can scale with your needs and can efficaciously handle a massive amount of traffic.

Multilingual

Drupal has out of the box support for building multilingual websites in the form of core modules that allows you to deliver localised digital experiences.

Mobile-responsive

Drupal helps in building responsive sites and web applications thereby allowing you to interact with your consumers on-the-go.

Text about Bosscasse in a boxHome page of Drupal powered food-based website of Bosscaffe showing a restaurant hall with chairs and transparent glass-wall


Speed

To run an agile team and ensure the continuous delivery of the web development project, Drupal’s pliable platform is superb. Furthermore, it helps in implementing performance optimisation techniques for building a high performing site.

Third-party integration

You can leverage the best tools outside the periphery of Drupal by integrating a variety of marketing technologies and business applications.

Content Workflow

Content authors can get awesome tools for creating and publishing content on the site. With the help of its preview feature, you can see how your content will look across various devices. Moreover, the authentication and permissions enhance the editorial workflow.

Content authors can get awesome tools for creating and publishing content on the site
Description about Alevri Drupal Food website in a boxHome page of Alevri with an image of brown coloured pizza on white plate


Content architecture

Drupal lets you create the right content architecture and show appropriate content for each context with the help of great display mode tools, Views and a plentitude of media types.

Text description about Food drink devon site in a boxHomepage of Food Drink Devon with the image of a book kept on a wooden surface


Content-as-a-service

Its content as a service approach lets the front end developers build engaging customer experiences with Drupal’s presentation neutral content and RESTful API leveraging tools like Angular, Ember, Backbone and many more.

Multisite

Drupal’s immense capability in building a multisite architecture allows you to govern multiple websites across your enterprise brands, geographies and promotional campaigns on a  centralised platform.

Business-driven

You can build a solution that adheres to your business requirements and does things as your business demands.

Perfect tech stack

Drupal dwells on a modern LAMP technology stack comprising of Linux, Apache, MySQL and PHP which helps in fulfilling the needs of fast-moving, flexible, and agile enterprises in creating ambitious digital experiences.

Large community

Drupal’s vast community presence is one of its greatest strength as thousands of organisations create solutions with Drupal and in the process build Drupal itself.

Description about BBC GoodFood website in a boxHomepage of BBC goodfood with the images of red and green coloured breads shaped in the form of sweaters


Case study

24 Kitchen, one of the most popular platforms on food, cooking and lifestyle, has extracted the power of Drupal with the help of a digital agency to transform their presence in the digital landscape.

Homepage of 24 kitchen website with an image of green coloured oval shaped dishes on a plate

Search API Solr Search, a Drupal module for offering Solr backend, uses Apaches Solr servers for indexing and searching content and was utilised for related recipes in 24 Kitchen website development. The amazing capabilities of Fast Autocomplete module merged the extensive database of videos with the recipe’s database thereby allowing the retrieval of thousands of recipes that come with recommendations based on preference and user parameters.

Without any developer’s interference, the content editor could create flexible layout components, new pages and formats. This was made possible by paragraphs module. Through smart widgets, high-value content was disclosed which allowed other websites to directly query and present content from the 24 Kitchen within their own website. 

The Drupal website of 24 Kitchen has been very advantageous for marketing and sales with its boundless integration with the 24 Kitchen television format. It has paved the way for working with partners on promotional campaigns and cross-selling via numerous national news and lifestyle sites. The Drupal-powered website made it possible for content syndication and serving content to the consumers when relevant (for example, the Widgets and Facebook recipe bot). Ultimately, the redressal of 24 Kitchen website with the help of Drupal’s monumental capabilities resulted in staggering growth in page views.

Conclusion

Drupal offers a stupendous platform for building a powerful food-based website and allows the enterprises to grow as a brand.

We love Drupal and have been in our constant pursuit of delivering high quality and innovative solutions with our expertise in Drupal development.

Contact us at [email protected] to build a food-based site using Drupal.

Dec 16 2018
Dec 16

We are continuing our march towards becoming an AI-first world where the mobile centricity is getting replaced with personalised user-centricity. This is an age where conversational commerce and artificial intelligence (AI) as a utility are altering the way we communicate with brands and with each other. One of the great examples is the LivePerson’s LiveEngage. As a leading conversational commerce platform, it allows the students of Barry University to interact over popular messaging services. They can ask anything ranging from the application processes to the courses available in a convenient manner like they do with their friends and family.

Four people, holding differently shaped cards, standing in an open field near a building at daytime


Conversational commerce is already making great inroads and is revolutionising the way consumers and brands interact with each other. It has the potential of being a curator of services and experiences that can intelligently fulfill the needs and engage consumers emotionally anytime and anywhere. Drupal Commerce, an open source e-commerce solution, can help in implementing conversational commerce. Before we look at Drupal Commerce’s capabilities for this implementation, let’s explore conversational commerce first.

Conversational Commerce: Explained 

Graphical representation showing a curve with many dots on it to explain the history of conversational commerceSource: Mücke, Sturm & Company GmbH

From the traditional point of sale systems (POS) to mobile commerce, we have seen it all. They have paved the way for conversational commerce which can dramatically metamorphose out shopping experience by leading a new era of individualised shopping.

Chris Messina coined the term Conversational Commerce looking at the dominant trend of consumer computing apps which came to life in 2015 with Uber’s integration into Facebook Messenger. He described it as a solution that can deliver “convenience, personalization, and decision support while people are on the go with only partial attention to spare”.

Conversational commerce is about delivering convenience, personalization, and decision support while people are on the go, with only partial attention to spare. - Chris Messina

Conversational Interfaces leverages the power of AI whilst using the technologies that consumers relish using like messaging, voice interface or other natural language interfaces thereby enabling people to interact with brands or services through bots.

With the objective of delivering a top-of-the-line customer experience, it helps in replicating the one-on-one, in-store salesperson experience with the consumers. Whether you are buying clothes, ordering food from a hotel, or making a financial transaction, conversational commerce is here to revolutionise the business model.

Why is Conversational Commerce Important?

Comscore states that 85% of the smartphone time is being spent on social media, messenger and other media applications. Moreover, by 2021, the number of users using digital voice assistants is projected to reach 1.8 Billion.

Massive adoption of messaging applications along with the rise of conversational, AI-powered technology can streamline the process of making one-on-one conversations at scale. And as people distance themselves from clicks and taps and inch towards conversational UI, more adoption of conversational commerce can be witnessed in the coming years as it promises a slew of benefits which are stated below:

  • Driving customer satisfaction: Offering voice assistants can enhance brands’ Net Promoter Scores (NPS®) thereby driving customer satisfaction.
Bar graph with red and blue coloured bars to represent Net Promoters Scores

 

  • Generating more business: Enterprises will be able to generate more business and positive word-of-mouth
Graphical representation showing green and blue distorted lines to explain voice assistants and their effects on customer experience

 

Graphical representation showing green boxes placed horizontally to explain voice assistants and their effects on customer experience

 

  • Increasing consumer spending: Consumers show the willingness to increase their spending with a brand when they receive a good voice assistant experience.
Bar graphs showing orange and blue bars to explain consumer spending

 

  • Focussing on priority consumer segments: Enterprises that emphasise on the segmentation of priority consumers like targeting users who prefer voice assistants for purchases will bring in great value.
Graphical representation showing four quarters in dark green, light green, orange, and pink colour with a straight line passing through them to explain audience segmentation


How does Conversational Commerce Work?

There are different ways to look at conversational commerce in action. One of the types of experiences can be a proactive model. In this, the customer buys something for the very first time from a shop and receive an automated message with greetings and thanking them for shopping at that store. Another working model can be a reactive approach. In this, a customer buys a defective product from a shop and seek assistance. In response, the shop guides them through a solution.

Two smartphones side-by-side with both of them showing an interaction between a human user and a chatbotSource: Chatbots Magazine

Furthermore, there can be one-to-one and one-to-many working models. If a shop sends a message and personalised offer to a customer who has applauded their service on Twitter, this comes under the one-to-one approach. Suppose a restaurant chain has opened a new store. They can send a custom message to a targeted audience segment who live nearby. This comes under the one-to-many approach.

Also, a digital voice assistant like Amazon Alexa and Google Home can assist the consumer in finding stores, hotels, events and much more. It can also recommend products, access customer care service, book a cab, or even control smart home devices.

Conversational Commerce with Drupal

Decoupled Drupal Days 2018 had a session which showed how to integrate bots in Drupal Commerce. When it comes to bot’s business logic, Drupal Commerce turned out to be a great solution in addition to its robust capabilities in storing content and product details. Moreover, Drupal, being an API-first CMS, offers a plethora of APIs out-of-the-box and the Commerce Cart API module makes it easy to interact with carts in Drupal Commerce.

[embedded content]


It showed how decoupled Drupal Commerce, bot frameworks and Natural Language Understanding (NLU) can be leveraged for providing a boundless shopping experience to the e-commerce websites which are built on Drupal using Drupal services layer.

Decoupled Drupal Commerce, bot frameworks and Natural Language Understanding can be leveraged for providing a boundless shopping experience

The session focussed on Drupal 8 core services and the creation of custom REST APIs. It also laid emphasis on utilising decoupled Drupal Commerce APIs and using Node.js and Bot framework for building a chatbot.

In addition to this, it also talked about the bot frameworks and other cognitive services that can be used to develop bots for different use cases. Several bot frameworks were considered like Facebook Messenger (wit.ai), Google Dialogflow, IBM Watson, Microsoft Bot Framework and open source conversational AI like Rasa. Ultimately, it all started with a framework called Open Source Bot Builder SDK for Node.js which is used for building bots. The application was hosted on Heroku and the Microsoft Bot Framework was used to integrate with Facebook.

In the demonstration, some of the common e-commerce functionalities like search, exploring products and many more were exposed as REST APIs. The main idea was that the bots will enable search and explore the products by incorporating Drupal Commerce APIs. On the basis of message-based interaction, bots can also enable simple Add To Cart and Review Cart functionality among others and can offer relevant actions while looking for a product.

Conclusion

Conversational Commerce represents an astronomical opportunity for the brands and the retailers alike. It can enable them to interact with their consumers in a new and innovative way. Enterprises must extract the power of this interaction opportunity for building relationships of value with consumers across the lifecycle.

Conversational Commerce, along with Drupal Commerce, can help the organisations to offer a completely new and more instinctive way for consumers to engage with them.

We have been steadfast in our goals of powering digital innovation for the enterprises with our expertise in Drupal development.

Contact us at [email protected] to implement conversational commerce in your business.

Dec 16 2018
Dec 16

As the world gets more connected, web technologies too, need to get connected. RESTful web services can be used as an application program interface to connect various service.

This can be made possible by using HTTP requests to GET, PUT, POST and DELETE data. It is based on representational state transfer (REST) technology, an architectural style, and approach to communications often used in web services development. 

With decoupled development getting the ground, it has become important for the developers to understand teh REST technology better. Drupal provides its developers an in-house build method to use this REST technology. RESTful Web Services module, which is now a part of Drupal core, provides REST services to its developers. 

It allows users to read or update data on the site. 

Different verbs or request methods that are used for the approach are:

GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT and PATCH

The GET method allows the user to access various entities like Node, User, Taxonomy, Comments and even watchdog database log entries. GET method is a SAFE method as there is no database manipulation operation, it is a read-only request.

Unlike GET, in the POST method, database manipulation takes place. The user can update the database and create a node if need be. 

Creating REST Resource Plugins

REST resource plugins are important to expose additional resources over REST. In the steps below we will create a basic example for understanding the fundamental functionality of developing REST resource endpoint which takes a content type as argument and returns title and node ids of all nodes of that particular content-type.

  • Create the staging code for REST resource with the following Drupal console command:
drupal generate:plugin:rest:resource

You can also generate the staging code manually by creating a plugin file under src in the custom module > Plugin > Rest > Resource > {ResourceClassName}.php

Next, define the namespace, dependencies, and the plugin class as given in the example below.

  • Next, you need to create the @RestResource annotation. It helps you indicate the dependencies, and status of the class. Another important point to consider is that the URL mapping is case-sensitive.

    We must also be careful with the  @RestResource  annotation's urli_paths  which take link relation types as keys, and partial URIs as values. If you don't specify any, Drupal will automatically generate URI paths (and hence URLs) based on the plugin ID. 

    If your plugin ID is rest_example, you'll end up with/rest_example/{id}  for GET|PATCH|DELETE and /rest_example for POST . But, often, you'll want to specify your own paths: a canonical URI path (for example /todo/{todo_id}). For example:

* uri_paths = {
 *     "canonical" = "/rest_example/{id}",
 *   }

Here’s how to get the complete REST resource GET request

<?php

namespace Drupal\rest_example\Plugin\rest\resource;

use Drupal\rest\ModifiedResourceResponse;
use Drupal\rest\Plugin\ResourceBase;
use Drupal\rest\ResourceResponse;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;

/**
 * Provides a resource to get view modes by entity and bundle.
 *
 * @RestResource(
 *   id = "rest_example",
 *   label = @Translation("Rest example"),
 *   uri_paths = {
 *     "canonical" = "/rest/api/get/node/{type}"
 *   }
 * )
 */
class RestExample extends ResourceBase {

  /**
   * Responds to GET requests.
   *
   * @return \Drupal\rest\ResourceResponse
   *   The HTTP response object.
   *
   * @throws \Symfony\Component\HttpKernel\Exception\HttpException
   *   Throws exception expected.
   */
  public function get($type = NULL) {

    // You must to implement the logic of your REST Resource here.
    // Use current user after pass authentication to validate access.
    if (!(\Drupal::currentUser)->hasPermission('access content')) {
       throw new AccessDeniedHttpException();
     }
    if($type) {
      $nids = \Drupal::entityQuery('node')->condition('type',$type)->execute();
      if($nids){
        $nodes =  \Drupal\node\Entity\Node::loadMultiple($nids);
        foreach ($nodes as $key => $value) {
          $data[] = ['id' => $value->id(),'title' => $value->getTitle()];
        }
      }
    }
    $response = new ResourceResponse($data);
    // In order to generate fresh result every time (without clearing 
    // the cache), you need to invalidate the cache.
    $response->addCacheableDependency($data);
    return $response;
  }

}

Output 

[
  {
    "id": "67",
    "title": "Consectetuer Sits"
  },
  {
    "id": "69",
    "title": "Eum Paulatim"
  },
  {
    "id": "70",
    "title": "Tation"
  }
]


Configuring the REST Resources

In the config file, we define which HTTP method, serialization format, and an authentication mechanism is supported by the plugin. 

This config file is necessary to use the REST resource plugin. There are two ways to configure the REST resource @RestResource plugin:

  1. REST UI Module
     
    • The REST UI module is not part of the core. So you have to download it and install it like any other module in your Drupal site.admin interface of rest UI
    • Once installed, go to  /admin/config/services/rest and enable your REST Resource.enabling the rest module
    • Select your desired settings. To have hal_json format, you can enable Drupal Core’s HAL module.admin interface to restrict HTTP
  2. Manually
    • Go to the config directory and create a config file with name as rest.resource.{resource id}.yml.
    • Add the following content.
langcode: en
status: true
dependencies:
  module:
    - rest_example
    - serialization
    - user
id: rest_example
plugin_id: rest_example
granularity: resource
configuration:
  methods:
    - GET
  formats:
    - json
  authentication:
    - cookie
  • Save this file as rest.resource.plugin_id.yml (rest.resource.rest_example.yml in this case) in your config directory and run config sync.

Defining your resource config:

Status: true/false ( enable or disable)
Id: unique id
Plugin_id: unique id
configuration=>methods: Name all request method you want to use in this plugin
configuration=>formats: Define all supported serialized format
configuration=>authentication: Name all supported authentication method.
By default, the REST module supports json and xml

Key Point: Each REST resource must be annotated with  @RestResource  annotation so they can be discovered by RESTful Web Services module.

Custom REST API is useful in sending data to third-party applications and for headless architecture. As of today, there is hardly any project or application that doesn't have a REST API. Connect with us at [email protected] to help you create

Dec 15 2018
Dec 15

This article was originally posted on the Capgemini Engineering blog

A lot of people have been jumping on the headless CMS bandwagon over the past few years, but I’ve never been entirely convinced. Maybe it’s partly because I don’t want to give up on the sunk costs of what I’ve learned about Drupal theming, and partly because I'm proud to be a boring developer, but I haven’t been fully sold on the benefits of decoupling.

On our current project, we’ve continued to take an approach that Dries Buytaert has described as "progressively decoupled Drupal". Drupal handles routing, navigation, access control, and page rendering, while rich interactive functionality is provided by a JavaScript application sitting on top of the Drupal page. In the past, we’d taken a similar approach, with AngularJS applications on top of Drupal 6 or 7, getting their configuration from Drupal.settings, and for this project we decided to use React on top of Drupal 8.

There are a lot of advantages to this approach, in my view. There are several discrete interactive applications on the site, but the bulk of the site is static content, so it definitely makes sense for that content to be rendered by the server rather than constructed in the browser. This brings a lot of value in terms of accessibility, search engine optimisation, and performance.

A decoupled system is almost inevitably more complex, with more potential points of failure.

The application can be developed independently of the CMS, so specialist JavaScript developers can work without needing to worry about having a local Drupal build process.

If at some later date, the client decides to move away from Drupal, or at the point where we upgrade to Drupal 9, the applications aren’t so tightly coupled, so the effort of moving them should be smaller.

Having made the decision to use this architecture, we wanted a consistent framework for managing application configuration, to make sure we wouldn't need to keep reinventing the wheel for every application, and to keep things easy for the content team to manage.

The client’s content team want to be able to control all of the text within the application (across multiple languages), and be able to preview changes before putting them live.

There didn’t seem to be an established approach for this, so we’ve built a module for it.

As we've previously mentioned, the team at Capgemini are strongly committed to supporting the open source communities whose work we depend on, and we try to contribute back whenever we can, whether that’s patches to fix bugs and add new features, or creating new modules to fill gaps where nothing appropriate already exists. For instance, a recent client requirement to promote their native applications led us to build the App Banners module.

Aiming to make our modules open source wherever possible helps us to think in systems, considering the specific requirements of this client as an example of a range of other potential use cases. This helps to future-proof our code, because it’s more likely that evolving requirements can be met by a configuration change, rather than needing a code change.

So, guided by these principles, I'm very pleased to announce the Single Page Application Landing Page module for Drupal 8, or to use the terrible acronym that it has unfortunately but inevitably acquired, SPALP.

On its own, the module doesn’t do much other than provide an App Landing Page content type. Each application needs its own module to declare a dependency on SPALP, define a library, and include its configuration as JSON (with associated schema). When a module which does that is installed, SPALP takes care of creating a landing page node for it, and importing the initial configuration onto the node. When that node is viewed, SPALP adds the library, and a link to an endpoint serving the JSON configuration.

Deciding how to store the app configuration and make all the text editable was one of the main questions, and we ended up answering it in a slightly "un-Drupally" way.

On our old Drupal 6 projects, the text was stored in a separate 'Messages' node type. This was a bit unwieldy, and it was always quite tricky to figure out what was the right node to edit.

For our Drupal 7 projects, we used the translation interface, even on a monolingual site, where we translated from English to British English. It seemed like a great idea to the development team, but the content editors always found it unintuitive, struggling to find the right string to edit, especially for common strings like button labels. It also didn't allow the content team to preview changes to the app text.

We wanted to maintain everything related to the application in one place, in order to keep things simpler for developers and content editors. This, along with the need to manage revisions of the app configuration, led us down the route of using a single node to manage each application.

This approach makes it easy to integrate the applications with any of the good stuff that Drupal provides, whether that’s managing meta tags, translation, revisions, or something else that we haven't thought of.

The SPALP module also provides event dispatchers to allow configuration to be altered. For instance, we set different API endpoints in test environments.

Another nice feature is that in the node edit form, the JSON object is converted into a usable set of form fields using the JSON forms library. This generic approach means that we don’t need to spend time copying boilerplate Form API code to build configuration forms when we build a new application - instead the developers working on the JavaScript code write their configuration as JSON in a way that makes sense for their application, and generate a schema from that. When new configuration items need to be added, we only need to update the JSON and the schema.

Each application only needs a very simple Drupal module to define its library, so we’re able to build the React code independently, and bring it into Drupal as a Composer dependency.

The repository includes a small example module to show how to implement these patterns, and hopefully other teams will be able to use it on other projects.

As with any project, it’s not complete. So far we’ve only built one application following this approach, and it seems to be working pretty well. Among the items in the issue queue is better integration with configuration management system, so that we can make it clear if a setting has been overridden for the current environment.

I hope that this module will be useful for other teams - if you're building JavaScript applications that work with Drupal, please try it out, and if you use it on your project, I'd love to hear about it. Also, if you spot any problems, or have any ideas for improvements, please get in touch via the issue queue.

Dec 14 2018
Dec 14

I recently moved this blog site from one running Drupal on a traditional LAMP stack, to a decoupled architecture with Drupal as the CMS backend and GatsbyJS providing static site publication in a serverless S3+Cloudflare frontend. I'll blog more about the pros and cons about this approach another time, but here I'm just writing up my approach to managing inline content (images, embedded presentations etc). This is quite low-level and technical.

Solving The Inline Image Problem

One common problem is with inline images, that is images that are included in an html field, typically the body field of an article. These images will most often reference a URL that's handled by Drupal, whereas we want the the image to be handled by Gatsby so that we can make use of all of the functionality that comes with Gatsby's Image components such as late-loading, fluid styles, low-bandwidth previews etc.

One way of attacking this problem is by rewriting the body field within Gatsby, using Gatsby's inbuilt knowledge of React components to transform the html that comes out of Drupal.

Because Gatsby is built on React we can use the ReactHTMLParser component to pass in html and a callback function that is called for every node in the DOM, giving you the chance to transform it. Whenever we come across an <img> html tag we can replace it with an <Img> JSX component. But the <Img> component requires that you pass in the result of a graphql image query fragment. How do we know what to pass in?

It turns out that the answer is quite simple. Because files, including inline images, are entities in Drupal 8, Gatsby helpfully downloads them for us and we're able to query them. As a graphql query can have multiple 'roots' we can add the following query to our article's query template - this will return all the images with their associated Drupal uuid.

So, back in our ReactHTMLParser transform function we can simply get the uuid of the image, helpfully Drupal renders this in the data-entity-uuid attribute of the <img> tag, and we just iterate over all of our images until we find the one with the matching uuid and build our <Img> component out with that.

The Script Tag Problem

I've used a similar rewriting approach to embedding Github gists (seen in this article), and Speakerdeck presentations.

The problem here is that in regular html you'd embed these as script tags, but this doesn't quite work for React as the component lifecycle differs from that of the traditional DOM (html) lifecycle, and so scripts need to be triggered in the appropriate location (eg in the componentDidMount method of the component).

Using the transform approach any script tags are identified, and their type determined by matching a domain name in the src attribute (eg speakerdeck.com or gist.github), then replacing with an appropriate React component (either a SpeakerDeck or Gist).

Conclusion

There are other ways of getting Drupal and Gatsby working together - jmolivas has been looking at attacking these problems from the Drupal perspective too via the TUI editor and related gatsby plugin - it's well worth looking at that approach too.

Finally, here's the full jsx file that produces this type of article page that you're looking at right now.

Dec 14 2018
Dec 14

We want to get you better acquainted with the kind of company Agiledrop is, the practices we employ and the team spirit we cultivate. So, we’ve decided to start a series of blog posts that tell the story of how the company has managed to make a name for itself and form a team that major global agencies can trust and depend upon. 

In the first post of the series, we’ll present our workflow and the advantages such an approach brings, both in producing satisfied clients and in motivating our team to help each of us with our personal and professional growth.
 

The nature of the work at Agiledrop dictates a different approach to resource management. With the help of online tools and at least 2 hours of overlap for daily standup meetings, we have been working successfully with customers from all over the world.

Our clients are mostly Drupal agencies who need to expand their existing teams with experienced Drupal developers or agencies who don’t have their own development department but would like to manage their projects entirely in-house. 

After onboarding, our developers adopt the client’s best practices, tools and workflows. They are present at meetings and daily standups, and work alongside existing teams while being entirely managed by the client’s project managers. As such, they essentially become members of the client’s team for the duration of the project. 
 

What This Means for Our Team ...

The opportunity to work on a variety of projects with teams from all over the world helps our employees with their personal growth and development. It emphasizes their knowledge, experiences, confidence, and, most importantly, it helps them grow professionally.

They have the opportunity to encounter environments with a variety of different workflows, practices and skill sets, and the chance to work with people outside our company makes their work interesting and never boring or monotonous.
 

… And for Our Clients

From the clients’ perspective, they are able to fulfill their resource capacities at any given time without a long and costly recruitment process, which means the pipeline for new projects can be more adaptive. 

The stress typically caused by catching deadlines or by unpredictable events, such as sick leaves of your in-house developers, can be managed more easily or even eliminated entirely. 

Most importantly, the clients can always rely on the collective knowledge and skill sets of the entire Agiledrop team working side by side with the developer they’ve hired.
 

Granted, such an approach is not without its unique challenges. In the next post of the series, we’ll deal with the first major obstacle that arose from our desire to provide only the best for our employees and our clients, and how we managed to very efficiently solve it, even turning it to our advantage. 

Be sure to check back for the next chapter of the series!
 

Dec 14 2018
Dec 14

Referred to as the de facto standard of e-learning, Shareable Content Object Reference Model aka SCORM was sponsored by US Department of Defense to bring uniformity in the standards of procuring both training content and Learning Management Systems. 

Long gone but not forgotten are those days when learning was only limited to books and classrooms. With the development of technology, virtual learning has transformed into an approachable and convenient method.

Can Drupal, which is a widely popular CMS for education websites, conform to SCORM standards? How does it ensure that it remains SCORM compliant? 

Items entering from left in a grey and blue machine coming out in brown packets on right in a yellow background.


In Details - What is SCORM?

SCORM is a set of standard guidelines and specifications for the programmers on how to create LMS and training content to be shared across systems. 

The agenda to bring SCORM was to create standard units of training and educational material to be shared and reused across systems. 
                           
A white background with SCORM full form written in blue color


Shareable Content Object refers to creating units of online training material that can be shared and reused across systems and contexts.

Reference Model refers to the existing standards in the education industry while informing developers on how to properly use them together.

Working with the authoring tools to design and produce the content, e-learning professionals, training managers, and instructional designers are the ones who typically use SCORM packages.

Content (used in courses and LMS) is exported to a SCORM package (.zip folder) to deliver the learners a seamless and smooth upload of the content.

The Evolution of SCORM

Since SCORM wasn’t built as a standard from the ground up and was primarily a reference to the existing ones, the goal was to create an interoperable system that will work well with other systems. 

Till date, there are three released versions of SCORM, each built on top of the previous one solving the problem of its predecessor.

SCORM 1.0 was merely a draft outline of the framework. It did not include any fully implementable specifications but rather contained a preview of work which was yet to come. 

SCORM 1.0 included the core elements that would become the foundation of SCORM.  

In other words, this version specified how the content should be packaged. How content should communicate to systems and how the content should be described.

SCORM 1.1 was the first implementable version of SCORM. It marked the end of the trial implementation phase and the beginning of the application phase for ADL. 

SCORM 1.2 solved the many problems that came along version 1.1. It provided with robust and implementable specifications, this version presented its end users with drastic cost savings. 

It was and still remains one of the most widely used version.

  • SCORM 2004 (1st - 4th edition)

The 2004 1st edition allowed content vendors to create navigation rules between SCOs. The 2nd edition covered the various shortcomings of the 1st. It brought with it Advanced Distributed Learning which focused on developing and assessing the distributed learning prototypes, enabling more effective, efficient, & affordable learner-centric solutions.

The 3rd edition removed any ambiguity, improving the sequencing specifications for greater interoperability.

The final and 4th edition was focused on disambiguation and addition of new sequencing specifications. These specifications widened the options available to the content authors which made the creation of sequenced content even more simple.
 

 Infographic on the evolution of SCORM


Why Should You Use SCORM?

Now that we have an idea about SCORM and its attempt of reducing chaos in the entire industry, let’s know what benefits it brings along. 

Here are some of the reasons that can contribute to a huge factor in terms of using SCORM.

  • It is a pro-consumer initiative. The online courses are eligible to be used on any compliant LMS vendor. You can alternatively upload the courses to LMS as long as you have a zip folder.
  • All the high-quality LMSs and the authoring tools are SCORM compliant so that they can build and be part of a great ecosystem of interoperability and reliability.
  • The introduction and evolution in SCORM have brought about a great reduction in overall cost of delivering training. The reason is that it has no additional cost for integrating any type of content. 
  • SCORM helps in standardizing eLearning specifications. SCORM provides a set of technical specifications that gives the developers a standard blueprint to work with.

How does SCORM Work?

Other than guiding the programmers, SCORM administers two main things, i.e packaging content and exchanging data at runtime to ensure workability. 

  • Packaging content or content aggregation model (CAM) defines how a piece of content should be presented in a physical sense. It is required by the LMS to export and import a launch content without the use of any human interventions
  • Runtime communication or data exchange helps in defining how the content is supposed to work with the LMS while it is actually being played. This is the part which describes the delivery and tracking of the content. Eventually, these are the things that include “request the learner’s name” or “tell the LMS that the learner scored 95% in a test”. 
“SCORM recommends contents to be delivered in a self-contained directory or a ZIP file.”
One black block with two grey blocks and text written on them, and another grey block connected to two pentagons


Working of SCORM Packages

SCORM recommends contents to be delivered in a self-contained directory or a ZIP file. These files contain content, defined by the SCORM standards and is called Package Interface File (PIF) or in other words SCORM packages. 

It contains all the files that are needed to be delivered in the content packages via SCORM runtime environment. 

Course manifest files are considered as the heart of the SCORM content packaging system. The manifest is considered as the XML file that describes the content. 

Some of the pieces involved in the packaging are:

  • Resources 

Resources are the list of parts that bundle up to be a single course. There are two types of resources that contribute to the course.

The first is the collection of one or more files that make up a logical unit presented to the users. The other is SCO or Sharable Content Object which is the unit of instructions that are composed of one or more files, to communicate with LMS. It mostly contains the instructional or static part of a content that is presented to the users via course. 

Resources should contain a complete list of all the files that are required for proper functionality of the resources. 

This is done to port the list to a new environment and function it the similar way. 

A GIF on how SCORM and web content are added together

 

  • Organizations

Organizations are considered as the logical grouping of the parts of resources into a hierarchical arrangement. This is what is delivered to a particular learner when the item has been selected. 

  • Metadata 

Metadata are used to describe elements of a content package in its manifest file. They are important because they facilitate the discovery of learning resources across content package or in a repository. 

When a learning resource is intended to be reusable, it is a best practice to describe it with metadata. 

For describing learning content, Learning Object Metadata contains many predefined fields.   
  • Sequencing

Sequencing is responsible for determining what happens next when a learner exits an SCO. With navigational control, it orchestrates the flow and status of the course as a whole. 

However, it doesn’t affect how SCOs operate and navigate internally, that is defined by the content developer.

Drupal With SCORM 

Drupal is best at managing the digital content, but the task of planning, implementing, and assessing a specific learning process can be best done by an LMS.

How can Drupal become a platform for an organization that delivers effective training, manage learners, individual progress and record results?

Since Drupal is not an LMS, its distributions and modules help it become more effective. When it comes to SCORM compliance, Drupal has Opigno LMS as its core distribution.  

blue opigno logo Opigno LMS is a Drupal distribution that integrates H5P technology (an open-source content collaboration framework based on javascript), which enable you to create rich interactive training content. It allows you to maintain the training paths that are organized in courses and lessons. 

This distribution includes the latest version of Opigno core that offers you effective and innovative online training tools.

Opigno LMS is fully compliant with SCORM (1.2 and 2004 v3) which offers a powerful editor for content management, in particular, to create course material. These courses can eventually be grouped into classes to provide easy and manageable training paths. It should also be noted that this distribution is the quickest way to present a functional e-learning platform out of the box, with the users, courses, certificates, etc. 

Based on this distribution, Opigno SCORM implements the SCORM feature in Opigno which allows you to load and play SCORM packages within Opigno training and is also responsible to handle and manage training paths that are organized in courses and lessons. 

Opigno LMS comprises an app store that also enables you to install latest features easily, without asking you to upgrade the current install. 

According to the requirements and expectations of the learners, Opigno LMS can be summarized by the following specification:

  1. Scalable to manage the hardships of a dynamic and modifying environment
  2. Safe and easy to update
  3. Support further development of customized functionalities with proper integration with the core solution in a modular way
  4. Open to letting each client be free and independent
  5. And most importantly, easy integration with other enterprise systems 

H5P javascript framework makes it easy to create, share and reuse HTML5 content and applications, allowing users to built richer content. With the use of H5P, the authors can edit and construct videos, presentation games, advertisement etc. To create an e-learning platform, the integration of HP5 framework and SCORM is essential.  

Blue background where SCORM xAPI is written in white color


H5P SCORM/xAPI module allows to upload and view SCROM and xAPI packages. It uses two HP5 libraries namely (HP5 libraries are used to create and share rich content and applications)

  1. H5P SCORM/xAPI library to view SCORM package.
  2. H5PEditor SCORM library to upload and validate SCORM package.

You can create a new content type by uploading it in the preceding step of a process using the H5P editor.

In the nutshell

Different people adopt SCORM for different reasons. You and your team are the only ones that can decide whether sticking to SCORM is worthwhile or not. 

Depending upon the nature of your requirement and the course of action, it can be decided which platform is best for you. At OpenSense labs, we have been giving adequate solutions to our customers. Contact us on [email protected] to make the right decision on the correct choice of a platform. 

Pages

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