Kanopi Studios: Drupal 9 is Coming, Part 3: Making the switch to Drupal 8

Planet Drupal - 21 February 2019 - 12:50pm

This is Part 2 of a three part series about choices you can make with the news of Drupal 9’s release. Part 1 is an overview. Part 2 is what to do if you choose to stay on Drupal 7. Part 3 is what to do it you choose to upgrade to Drupal 8. 

If you’re following along in our series about the release of Drupal 9, you understand that there are options for upgrading, each with its pros and cons. At Kanopi, we know it’s not a one size fits all decision. We want to provide you with as much information as possible to help you decide what’s right for your site.

To recap, we shared an overview of all the options in part one, and a deep dive for our clients who plan to stick with Drupal 7 in part two. Here in part three, we share a bit of wisdom for those who are considering moving to Drupal 8.

At Kanopi we support more than 100 Drupal 7 sites. Many of them are well optimized and built to last, which can make it difficult to pull the trigger on a rebuild.  

When we talk to our Drupal 7 clients about migrating to Drupal 8, we typically hear one of three things:

  1. We don’t have the budget.
  2. We don’t have the capacity.
  3. The site looks and works perfectly fine.

Below, I’ll dig a bit deeper into each of these objections.


An average website lasts 3-5 years. However, many stakeholders aren’t aware that they need to budget for a new site that often, so they are caught off guard when the time comes. There are a few ways to bridge this gap:

Build the business case. A business case compares the challenges of sticking with your current site with the new opportunity and ROI that could be gained by making a change.

To get started, we recommend a site audit and creative strategy session to help identify what’s not working and what might be needed to get back on target. You should also take a look at your organic search performance (SEO), accessibility, speed, and overall usability. All of these factors can reveal where your site may be missing the mark and help to justify an upgrade.

When building your case, make sure that you think through the total cost of ownership for your site so that you can reserve enough budget to get the work done right. For example, if you spent $25,000 on your website in 2013, then made incremental updates over the last five years at $10,000 per year, the cost of your site is $75,000. If you want to preserve all features in your rebuild, you should ask for at least $75,000. While you’re at it, it’s a good idea to ask for 25 percent more than the amount it would take to preserve existing features. The redesign process will inevitably generate new ideas and site improvements that will require additional budget to implement. In this example, we would recommend asking for $100,000 and justifying the cost with a breakdown that takes your total cost of ownership into account.

Here’s another example: if you built your Drupal 7 site in house and worked on it for 24 months using a resource who makes $75,000 per year, the site cost your organization $75,000. Knowing this can help you build a rationale that hiring an agency to build your Drupal 8 site at $75-100,000 within six months is a great deal since the work will have similar costs and take far less time to complete.

Demonstrating where and how a new website could show direct ROI can make all the difference when convincing stakeholders to approve the budget for an updated site.

Consider the costs of doing nothing. It’s also helpful to think bigger than the cost of an upgrade and consider the costs of not improving your website. Lost customers, damaged reputation and missed opportunities can be hard to quantify, but should be considered.

For example, if your website’s contact form currently gets completed an average of 10 times a month and 10 percent of those who complete the form convert to a sale, that means each deal is worth $10,000. What if, through a smart redesign and upgrade, you were able to increase form completions to 15 per month and add content and features that support the sales team, resulting in 20 percent sales conversions?

As you can see, there are many ways to frame your case to support budget requests. Use the approach that will work best to help your stakeholders understand the value of your website project and it’s potential to make a meaningful impact on your organization’s bottom line. Once they see the value, the budget will come much more easily.


Today’s working world moves at lightning speed. Most of us end up doing far more than what’s included in our job descriptions, and those full plates can make a website rebuild feel impossible to tackle.

If your stakeholders are concerned about your team’s capacity to handle a rebuild, talk to them about approaching the work in smaller phases. Many of our clients tackle rebuilds one phase at a time, often signing on for smaller, more digestible bites that make up a larger endeavor. This can help make the process feel more approachable and easier for stakeholders to wrap their heads around. Try getting started with a bit of user research. Then tackle design. You can continue from there in small steps until the work is complete.  

Alternatively, this is where an agency like Kanopi Studios comes in. Rebuilding your site on Drupal 8 or WordPress is a lot of work, but an experienced agency can take much of that work off your plate by making the process as smooth and straightforward as possible and keeping the project’s momentum at full swing. That keeps your team concentrating on their day to day work while the rebuild happens simultaneously.

The site looks and works fine

The most common objection we hear from our clients is that their stakeholders don’t see a need to change or understand the point of doing things differently through a rebuild.  

Maybe you already have a beautiful website that is driving strong results. If so, that’s wonderful! However, as time goes on, you’ll find you need to mix things up a bit to keep up with the pace of change and stay competitive. Trends shift, customer behavior changes, and Google likes to keep us guessing with their algorithm updates. Change is constant in all things, and even more so online.

Most websites have room for improvement, even if they are doing well. To ensure your site stays current, keeping your CMS up to date should be part of your roadmap. If you’re planning to make any updates this year, consider upgrading to Drupal 8 as part of your solution.

Remember, the safety zone may feel warm and comforting, but it will never give you the insight and growth that exploring the unknown can provide. Who knows what wonderful things could be in your future?

Need help?

We can help you strategize and build your case for an upgrade to Drupal 8, 9, or even WordPress. When in doubt, get in touch! We can work out the best approach together.

The post Drupal 9 is Coming, Part 3: Making the switch to Drupal 8 appeared first on Kanopi Studios.

Categories: Drupal

Gnome Stew on Twitch!

Gnome Stew - 21 February 2019 - 11:54am


Hey Gnome Stew Fans! We’ve got some exciting news for you. Gnome Stew is making some introductory forays into Twitch streaming and video content. We’re starting with a one shot game called Mortzengeersturm, the Mad Manticore of the Prismatic Peak! The game will run live on Saturday, March 2nd at 7pm eastern time and we will move it to our youtube archive from there.

What’s The Game Going To Be Like?

This will be a very serious, drama filled, examination of the human spirit… wait, no, it will be none of those things, it will not even contain any humans. Our first game is a Dungeons and Dragons 5th edition module by The Hydra Cooperative. It takes some inspiration from old 60s cartoons like The Pink Panther or old Rankin Bass claymation specials like Mad Monster Party. Four of the Gnomes ( Jen Adcock, Chris Sniezak, Daniel Kwan, and Matt Neagley) will be taking on the roles of 4 gnomish characters who are invited to a dinner party that will go horribly awry…  Chuck Lauer will be providing some support for the stream and John Arcadian will be running the game.

Want to get a taste of it? Check out the interview we did with the creator of Mortzengerstrum, The Mad Manticore of the Prismatic Peaks.

So, come join us on twitch and chat with us during the stream. Follow along with Brand, Fizzle, Bripmop, and Blooma on their adventure and spread the word through twitter, twitch, discord, facebook, carrier pigeon, telepgraph, turtle courier….


Categories: Game Theory & Design

Password Eye

New Drupal Modules - 21 February 2019 - 11:16am

Password Eye is a tiny module to add Eye Icon to password fields to show password.

Categories: Drupal

Lullabot: A Security Checklist for Drupal 8 Sites with Private Data

Planet Drupal - 21 February 2019 - 11:10am

Drupal has a great reputation as a CMS with excellent security standards and a 30+ member security team to back it up. For some Drupal sites, we must do more than just keep up-to-date with each and every security release. A Drupal site with private and confidential data brings with it some unique risks. Not only do you want to keep your site accessible to you and the site’s users, but you also cannot afford to have private data stolen. This article provides a checklist to ensure the sensitive data on your site is secure.

Categories: Drupal

H5P Analytics

New Drupal Modules - 21 February 2019 - 9:50am

A Drupal 8 integration of Experience API (xAPI) statements emitted by H5P content types to be captured and sent to Learning Record Store (LRS).

Categories: Drupal

Come to GDC and see how Killer Queen built an esport on an indie budget!

Social/Online Games - Gamasutra - 21 February 2019 - 9:01am

There's a healthy competitive scene around the (up to) ten-player competitive arcade game Killer Queen, and now the game's creators are coming to GDC next month to share how they pulled it off! ...

Categories: Game Theory & Design

Exploring The Themes of Grief and Loss Through Video Games - by Sam West Blogs - 21 February 2019 - 7:51am
Taking a look at serious topics such as grief and loss through video games.
Categories: Game Theory & Design

Star Trek Adventures: Science Division Supplement

New RPG Product Reviews - 21 February 2019 - 7:48am
Publisher: Modiphius
Rating: 5
The Science Division are often the unsung heroes of Star Trek - a bit odd when you consider the whole mission is about exploration and discovery, things that scientists are good at. Apart from Spock, who was Science Officer as well as the second-in-command of Kirk's Enterprise, the on-board scientists are just produced when there's a problem that science can solve, then sent back whence they came until the next time. Apart from the medics, that is, who are part of Science Division but with a much higher profile. Here's a chance to redress the balance!

The Introduction - To Seek and to Know - talks of science and medicine being at the centre of the urge to explore space. Finding out what's going on is a key driver for exploration and explorers have to be kept healthy whilst doing so. When not treating patients, medics are also interested in exploration - perhaps they'll find a medicinal plant or medical knowledge hitherto undreampt-of on the next planet. However, those scientific and medical professionals who join Star Fleet are quite special. Adventurous, certainly, but this is a part of the organisation that recruits seasoned professionals, older people, as well as train their own at the Academy. With a note from a grateful student whose training saved the day during an exercise, we move on to an outline of the contents of the book. There's also an example of individuals from various branches within the Science Division working together to resolve a potentially lethal problem, and a note indicating that technologies differ depending on which Era you game is set in, and how these are to be highlighted through the rest of the text.

Chapter 1: Science Division goes into detail about training, organisation, responsibilities and so on, with three main strands of scientists, medics, and counsellors. This is presented in the style of a briefing document for new Science Division officers and makes for a fascinating read. It outlines the protocols for exploration missions and science missions, and discusses the Prime Directive at length with some ideas on how to deal with breaches thereof. It also touches on time travel. There is a Department of Temporal Investigation in the assumed present day (TNE era), and some inklings of a Temporal Integrity Commission which appears to have been established in the future (29th century) - their agents won't reveal much, for obvious reasons.

Next Chapter 3: Science Division Characters looks at expanding the core rulebook's character generation process to make more detailed and diverse Science Division characters via extra Lifepath options and new Focuses and Talents. This allows for the sort of specialisation that you'd likely see - geologists and botanists, trauma surgeons and infectious disease specialists, and so on.

Then, Chapter 4: Research and Development examines the vast range of specialised equipment available particularly in the field of medicine, from hand-held devices to fully-equipped hospital ships. There are also details of lifeforms and other phenomena that have been encountered with ideas for further research and a discussion of the Q Continuum and ideas of dealing with encouters there. I'd say 'stay away' but sometimes it comes to visit anyway...

Chapter 5: Using the Science Division is crammed with ideas, providing rules for creating everything from medical emergencies to xeno-biological mysteries (why does every habitable planet grow something that looks exactly like Earth grass, I wonder) and running missions with a science/exploration focus. There's also suggestions for how to run adventures that involve medical interventions to save a ship's company, a planet or even the entirety of known space. This chapter also contains rules to aid the development of new alien lifeforms, sentient and otherwise, even those that live in places an unprotected human could not go. Finally Chapter 6: Sciences Personnel provides an array of fully-developed characters to use as NPCs - perhaps when an exotic specialism is required - or as an example for generating your own.

This is an excellent resource that should inspire you and your group to 'boldly go' like you never have before, with loads of ideas to help your exploration missions make many discoveries - and generate a mound of academic papers!
Categories: Game Theory & Design

Help! UX fanbase ruining game industry! - by Andrii Honcharuk Blogs - 21 February 2019 - 6:56am
Popularity of UX(not UI/UX) in game industry affecting game designers way of thinking, more and more of them tries to apply popular UX practicies from around the web, no research, no analytics, no psychology. This leads to unforseen negative results!
Categories: Game Theory & Design

The Demonstrated Power of Community - by Neil Schneider Blogs - 21 February 2019 - 6:55am
“The History of The Future” by Blake Harris covers the history of Oculus and the early beginnings of modern VR. As Founder of Meant to be Seen, the launch point of Oculus, Neil Schneider talks about the amazing ramifications of what was achieved.
Categories: Game Theory & Design

Robothorium Post Mortem - by Yannick Elahee Blogs - 21 February 2019 - 6:55am
After 2 years of development, we released our game Robothorium on Switch & PC! It's now to take a look at how the production went, how much it sold and what we can learn from all of this.
Categories: Game Theory & Design

The Never-ending Challenge of Asymmetrical Design - by Josh Bycer Blogs - 21 February 2019 - 6:26am
Asymmetrical game design can lead to some of the most unique experiences around, but it's also a never-ending challenge for designers to get even part of the way to being balanced.
Categories: Game Theory & Design

Gnomecast #60 – Don’t Fridge the NPC

Gnome Stew - 21 February 2019 - 5:36am

Join Ang, Chuck, and Wen for a discussion on the complications and problems with “fridging,” or endangering vulnerable characters without reason. Will these gnomes be thoughtful enough to keep out of the fridge, er, stew?

Download: Gnomecast #60 – Don’t Fridge the NPC

Keep up with all the gnomes by visiting, following @gnomestew on Twitter, or visiting the Gnome Stew Facebook Page. Check out Gnome Stew Merch, and support Gnome Stew on Patreon!

Follow Chuck at @InnocuousChuck on Twitter.

Follow Wen at @WendelynReischl on Twitter and Wendelyn Reischl on Facebook.

Follow Ang at @orikes13 on Twitter.

Categories: Game Theory & Design

Bulk User Import

New Drupal Modules - 21 February 2019 - 3:23am
Categories: Drupal

Dries Buytaert: Optimizing site performance by "lazy loading" images

Planet Drupal - 21 February 2019 - 12:48am

Recently, I've been spending some time making performance improvements to my site. In my previous blog post on this topic, I described my progress optimizing the JavaScript and CSS usage on my site, and concluded that image optimization was the next step.

Last summer I published a blog post about my vacation in Acadia National Park. Included in that post are 13 photos with a combined size of about 4 MB.

When I benchmarked that post with, it showed that it took 7.275 seconds (blue vertical line) to render the page.

The graph shows that the browser downloaded all 13 images to render the page. Why would a browser download all images if most of them are below the fold and not shown until a user starts scrolling? It makes very little sense.

As you can see from the graph, downloading all 13 images take a very long time (purple horizontal bars). No matter how much you optimize your CSS and JavaScript, this particular blog post would have remained slow until you optimize how images are loaded.

"Lazy loading" images is one solution to this problem. Lazy loading means that the images aren't loaded until the user scrolls and the images come into the browser's viewport.

You might have seen lazy loading in action on websites like Facebook, Pinterest or Medium. It usually goes like this:

  • You visit a page as you normally would, scrolling through the content.
  • Instead of the actual image, you see a blurry placeholder image.
  • Then, the placeholder image gets swapped out with the final image as quickly as possible.

To support lazy loading images on my blog I do three things:

  1. Automatically generate lightweight yet useful placeholder images.
  2. Embed the placeholder images directly in the HTML to speed up performance.
  3. Replace the placeholder images with the real images when they become visible.
Generating lightweight placeholder images

To generate lightweight placeholder images, I implemented a technique used by Facebook: create a tiny image that is a downscaled version of the original image, strip out the image's metadata to optimize its size, and let the browser scale the image back up.

To create lightweight placeholder images, I resized the original images to be 5 pixels wide. Because I have about 10,000 images on my blog, my Drupal-based site automates this for me, but here is how you create one from the command line using ImageMagick's convert tool:

$ convert -resize 5x -strip original.jpg placeholder.jpg
  • -resize 5x resizes the image to be 5 pixels wide while maintaining its aspect ratio.
  • -strip removes all comments and redundant headers in the image. This helps make the image's file size as small as possible.

The resulting placeholder images are tiny — often shy of 400 bytes.

The original image that we need to generate a placeholder for. The generated placeholder, scaled up by a browser from a tiny image that is 5 pixels wide. The size of this placeholder image is only 395 bytes.

Here is another example to illustrate how the colors in the placeholders nicely match the original image:

Even though the placeholder image should only be shown for a fraction of a second, making them relevant is a nice touch as they suggest what is coming. It's also an important touch, as users are very impatient with load times on the web.

Embedding placeholder images directly in HTML

One not-so-well-known feature of the element is that you can embed an image directly into the HTML document using the data URL scheme:

Data URLs are composed of four parts: the data: prefix, a media type indicating the type of data (image/jpg), an optional base64 token to indicate that the data is base64 encoded, and the base64 encoded image data itself.


To base64 encode an image from the command line, use:

$ base64 placeholder.jpg

To base64 encode an image in PHP, use:

$data = base64_encode(file_get_contents('placeholder.jpg'));

What is the advantage of embedding a base64 encoded image using a data URL? It eliminates HTTP requests as the browser doesn't have to set up new HTTP connections to download the images. Fewer HTTP requests usually means faster page load times.

Replacing placeholder images with real images

Next, I used JavaScript's IntersectionObserver to replace the placeholder image with the actual image when it comes into the browser's viewport. I followed Jeremy Wagner's approach shared on Google Web Fundamentals Guide on lazy loading images — with some adjustments.

It starts with the following HTML markup:

The three relevant pieces are:

  1. The class="lazy" attribute, which is what you'll select the element with in JavaScript.
  2. The src attribute, which references the placeholder image that will appear when the page first loads. Instead of linking to placeholder.jpg I embed the image data using the data URL technique explained above.
  3. The data-src attribute, which contains the URL to the original image that will replace the placeholder when it comes in focus.

Next, we use JavaScript's IntersectionObserver to replace the placeholder images with the actual images:

document.addEventListener('DOMContentLoaded', function() { var lazyImages = []'img.lazy')); if ('IntersectionObserver' in window) { let lazyImageObserver = new IntersectionObserver( function(entries, observer) { entries.forEach(function(entry) { if (entry.isIntersecting) { let lazyImage =; lazyImage.src = lazyImage.dataset.src; lazyImageObserver.unobserve(lazyImage); } }); }); lazyImages.forEach(function(lazyImage) { lazyImageObserver.observe(lazyImage); }); } else { // For browsers that don't support IntersectionObserver yet, // load all the images now: lazyImages.forEach(function(lazyImage) { lazyImage.src = lazyImage.dataset.src; }); } });

This JavaScript code queries the DOM for all elements with the lazy class. The IntersectionObserver is used to replace the placeholder image with the original image when the img.lazy elements enter the viewport. When IntersectionObserver is not supported, the images are replaced on the DOMContentLoaded event.

By default, the IntersectionObserver's callback is triggered the moment a single pixel of the image enters the browser's viewport. However, using the rootMargin property, you can trigger the image swap before the image enters the viewport. This reduces or eliminates the visual or perceived lag time when swapping a placeholder image for the actual image.

I implemented that on my site as follows:

const config = { // If the image gets within 250px of the browser's viewport, // start the download: rootMargin: '250px 0px', }; let lazyImageObserver = new IntersectionObserver(..., config); Lazy loading images drastically improves performance

After making these changes to my site, I did a new benchmark run:

You can clearly see that the page became a lot faster to render:

  • The document is complete after 0.35 seconds (blue vertical line) instead of the original 7.275 seconds.
  • No images are loaded before the document is complete, compared to 13 images being loaded before.
  • After the document is complete, one image (purple horizontal bar) is downloaded. This is triggered by the JavaScript code as the result of one image being above the fold.

Lazy loading images improves web page performance by reducing the number of HTTP requests, and consequently reduces the amount of data that needs to be downloaded to render the initial page.

Is base64 encoding images bad for SEO?

Faster sites have a SEO advantage as page speed is a ranking factor for search engines. But, lazy loading might also be bad for SEO, as search engines have to be able to discover the original images.

To find out, I headed to Google Search Console. Google Search Console has a "URL inspection" feature that allows you to look at a webpage through the eyes of Googlebot.

I tested it out with my Acadia National Park blog post. As you can see in the screenshot, the first photo in the blog post was not loaded. Googlebot doesn't seem to support data URLs for images.

Is IntersectionObserver bad for SEO?

The fact that Googlebot doesn't appear to support data URLs does not have to be a problem. The real question is whether Googlebot will scroll the page, execute the JavaScript, replace the placeholders with the actual images, and index those. If it does, it doesn't matter that Googlebot doesn't understand data URLs.

To find out, I decided to conduct an experiment. Yesterday, I published a blog post about Matt Mullenweg and me visiting a museum together. The images in that blog post are lazy loaded and can only be discovered by Google if its crawler executes the JavaScript and scrolls the page. If those images show up in Google's index, we know there is no SEO impact.

I'm not sure how long it takes for Google to make new posts and images available in its index, but I'll keep an eye out for it.

If the images don't show up in Google's index, lazy loading might impact your SEO. My solution would be to selectively disable lazy loading for the most important images only. (Note: even if Google finds the images, there is no guarantee that it will decide to index them — short blog posts and images are often excluded from Google's index.)


Lazy loading images improves web page performance by reducing the number of HTTP requests to render a page.

Ideally, over time, more browsers will support lazy loading images natively, and some of the SEO challenges will no longer be an issue. Until then, it's not hard to implement good lazy loading yourself. For my own site, it took about 40 lines of JavaScript code and 20 lines of additional PHP/Drupal code.

I hope that by sharing my experience, more people are encouraged to run their own sites and to optimize their sites' performance.

Categories: Drupal

Text Field HTML

New Drupal Modules - 20 February 2019 - 11:23pm

To allow HTML tags to render formatted instead of plain text.

Categories: Drupal

Urls Alias Manager

New Drupal Modules - 20 February 2019 - 10:27pm
Categories: Drupal

Epic Games pulls Fortnite YouTube ads over child predator concerns

Social/Online Games - Gamasutra - 20 February 2019 - 1:15pm

Epic Games has put a temporary halt on Fortnite advertising on YouTube, following news that its ads were running on videos used by online predators to coordinate and exploit children. ...

Categories: Game Theory & Design

Drupal Mountain Camp: Drupal Mountain Camp Program updates

Planet Drupal - 20 February 2019 - 1:08pm
Drupal Mountain Camp Program updates admin Wed, 02/20/2019 - 22:08

Hi everyone,

we are excited to share a few program updates on Drupal Mountain Camp as the team behind the scenes is working hard preparing the last bits before the conference in just 2 weeks.

We are extremely grateful for all the quality session submissions people have submitted. The full schedule over 4 days includes 9 workshops, 2 keynotes, 4 featured sessions and 42 regular sessions in 3 different tracks. 

Besides the already promoted keynotes, we would like to highlight the following featured sessions:

Thanks to the collaboration with the Drupal Recording Initiative by Kevin Thull, we'll be able to provide video recordings for you after the conference.

Contribution is a key topic for Drupal Mountain Camp. Make sure to sign-up for one of the 7 different initiatives or propose your own using our contribution sign-up sheet.

We also updated our social events page so you can start preparing for some fun in the snowy Swiss mountains.

So far, more than 95 tickets have been sold. Regular tickets are available for CHF 120 until 1st of March, afterwards we sell tickets for CHF 140.

We are looking forward seeing you at Drupal Mountain Camp in Davos, 7-10 of March 2019.

Josef / dasjo on behalf of the Drupal Mountain Camp team.

Categories: Drupal

Jeff Geerling's Blog: How I upgrade Drupal 8 Sites with exported config and Composer

Planet Drupal - 20 February 2019 - 12:03pm

Over the years, as Drupal has evolved, the upgrade process has become a bit more involved; as with most web applications, Drupal's increasing complexity extends to deployment, and whether you end up running Drupal on a VPS, a bare metal server, in Docker containers, or in a Kubernetes cluster, you should formalize an update process to make sure upgrades are as close to non-events as possible.

Gone are the days (at least for most sites) where you could just download a 'tarball' (.tar.gz) from, expand it, then upload it via SFTP to a server and run Drupal's update.php. That workflow (and even a workflow like drush up of old) might still work for some sites, but it is fragile and prone to cause issues whether you notice them or not. Plus if you're using Drush to do this, it's no longer supported in modern versions of Drush!

So without further ado, here is the process I've settled on for all the Drupal 8 sites I currently manage (note that I've converted all my non-Composer Drupal codebases to Composer at this point):

Categories: Drupal


Subscribe to As If Productions aggregator