Vardot: Best Drupal Blogs: List of Valuable Resources To Subscribe To

Planet Drupal - 30. September 2017 - 20:27
Best Drupal Blogs: List of Valuable Resources To Subscribe To Dmitrii Susloparov Sat, 09/30/2017 - 21:27

Drupal professionals have to constantly upgrade their skills to keep up to date with technology. The good news is that much of the knowledge now is available online, and there is no more need to spend hours in the library looking for resources that can give answers to your questions. In the 21st century most of the topics are covered in different blogs.

 

Vardot was featured as one of the top 20 Drupal blogs for Drupal developers. In this post, we recommend several resources (in addition to the one you are reading now of course) for you to subscribe. We believe that these resources will give you an excellent overall picture of what is happening in the Drupal community.

 

 

Drupal Blogs You Should Be Reading in 2017 Dries Buytaert blog

Dries' personal blog offers a glimpse of his work at Acquia and his views on Drupal and open-source software, in addition to general news and his opinions about the Drupal community.

 

If you are looking for low-level Drupal tips from the grand master himself, this is not the source for it. Instead, you will find a high-level and strategic perspective of where Drupal has trekked before and where it is heading, from none other than its creator. It will keep you well-informed of Drupal trends.

 

In our opinion, Dries’ blog is simply the best online resource for catching Drupal trends and formalizing your Drupal strategy.

Acquia blog

Acquia is the company that Dries Buytaert co-founded to provide cloud-based Drupal services, and according to a recent report, the number 1 organization for code contribution to Drupal in the 12-month period ending in June 30, 2017. The Acquia blog publishes posts by Dries, other Acquia insiders, and guest bloggers about 4 times a week.

 

This blog is the mother lode of knowledge about all things related to delivering Drupal enterprise solutions. You will find posts on best practices, architectural considerations, marketing trends, etc, on full-cycle Drupal commercialization. Developers should take note of posts from the Acquia Developer Center.

 

If you want to learn more about delivering enterprise Drupal solutions, the Acquia blog is a great resource. Vardot is proud to partner with Acquia to deliver professional hosting and training services.

Lullabot blog

The Lullabot blog averages about 2 new posts per week, and its target audience is enterprise Drupal developers. Building a modern enterprise Drupal website involves integrating multiple open-source technologies that must work well together. Consequently, enterprise developers must be well-rounded in various open-source technologies in addition to Drupal. The Lullabot blog has an excellent coverage of the entire Drupal technology stack.
 

One great feature about this blog is that it also features a library of podcasts on various Drupal topics. If you have a long commute, these Drupal podcasts are a great means for making good use of your time. (Another good source of Drupal podcasts is DrupalEasy.)

 

If your interests are entirely developer-centric, you may want to subscribe to the Lullabot feed.

Drupalize.Me blog

Drupalize.Me, a sister company to Lullabot, runs a website dedicated to Drupal developer training. It is made up of 2 main components: a blog and a series of technical guides/tutorials. The Drupalize.Me blog mainly posts Drupal community news, and announcements about new Drupalize.Me guides. A small proportion of the guides are free (samplers), while the rest are available for a monthly membership fee.

 

Despite the paid subscription model, Drupalize.Me offers arguably the most systematic approach for Drupal developers of all skill levels to upgrade their Drupal expertise online. The guides are categorized into topics: introduction to Drupal (including Drupal 8), site building, theming, module development (including API), site administration, and backend and infrastructure. The guides cover multiple Drupal versions, including the latest Drupal 8 as well as the older Drupal 6 and 7.

 

Drupalize.Me is a good investment for Drupal developers for continuing their Drupal training because of its breadth in topics and its depth in skill level. For a detailed list of the main online resources for learning Drupal, please consult this Vardot guide.

Volacci's Drupal SEO blog

Volacci's Drupal SEO blog, as its name suggests, targets marketing professionals rather than developers. Marketing has become a critical component in the Drupal community as evident in the recent DrupalCon Vienna 2017. DrupalCon hosted the very first Drupal Marketing Sprint in the DrupalCon Vienna program. So, we include Volacci’s high-caliber Drupal SEO and marketing blog on our recommended subscription list.

 

This blog is updated with a new post about once every 2 weeks. It covers Drupal industry news, SEO techniques and best practices. Ben Finklea, CEO and the primary author of the blog, is a world-renowned Drupal SEO expert. He was also the presenter for the Drupal 8 SEO hands-on seminar at DrupalCon Baltimore 2017.

 

If you are strictly interested in the SEO and marketing perspectives of Drupal, this is a blog that you should definitely follow. For additional quality SEO-related posts, please refer to the SEO tag in our blog.

 

Don't want to read too many Drupal blogs at the same time?

 

No problem, there are several resources where you can find latest news about Drupal from all over the world. Honorable mentions of blogs worthy of your subscription are listed below.

Planet Drupal

This is the official Drupal blog. It aggregates posts from a pre-approved list of Drupal-related blogs. The volume is quite high, about 40 posts per week. The scope spans a broad spectrum of development as well as business and marketing topics.

Reddit Drupal

Reddit Drupal is another high-volume website that covers anything Drupal-related. Because it is being hosted on the Reddit platform, you will find the website more interactive than the other Drupal blogs. You can ask questions directly on reddit or search through the existing posts for possible answers.

The Weekly Drop

This is a handcrafted weekly digest of the best Drupal-related blog posts from each week. If you find following multiple Drupal blogs too time-consuming, you should consider subscribing to the Weekly Drop which can keep you up-to-date with a minimal weekly drop of relevant articles.

Drupal Association Youtube channel

If you could not personally attend a DrupalCon conference, the best consolation is to watch the video recordings of its always educational workshops on Youtube. The Drupal Association Youtube channel has been updated with the workshops presented at the recent DrupalCon Vienna 2017.

 

To keep abreast of developments in the fast-changing Drupal community, we recommend that our readers subscribe to the above Drupal blogs in addition to Vardot’s own. And what is your favorite Drupal blog?

 

Apple iPhone 8 Plus im Test: hoffentlich das letzte seiner Art

heise online Newsticker - 30. September 2017 - 18:00
Das neue iPhone 8 Plus von Apple hat zwar eine gute Ausstattung und exzellente Kamera – allerdings ist das Design des Telefons in die Jahre gekommen. TechStage hat es ausführlich getestet. Wer es kaufen sollte, lesen Sie im Test.

Handy-Legende Nokia 3310 jetzt auch mit 3G-Modul

heise online Newsticker - 30. September 2017 - 16:30
Das wiederbelebte Kulthandy Nokia 3310 gibt es jetzt auch mit UMTS-Modul und einem klein wenig mehr internen Speicher.

Lufthansa, Qantas, British Airways ...: Technisches Problem sorgt für Verzögerungen

heise online Newsticker - 30. September 2017 - 16:00
Ein technisches Problem mit einer Software, die von Dutzenden Airlines eingesetzt wird, hat am Donnerstag für Verzögerungen und lange Schlangen an Flughäfen in aller Welt gesorgt. Inzwischen sei das Problem behoben, versichert der Hersteller.

Mehr Android-Updates durch länger gepflegter Linux-Kernel

heise online Newsticker - 30. September 2017 - 14:00
Ein neuer Linux-Kernel mit sechs Jahren Langzeit-Support soll helfen, dass Android-Smartphones vier bis bis fünf Jahre lang Updates erhalten. Aber: Solche Kernel sind ein alter Hut, den Hardware-Hersteller bislang nicht zu ihrem Vorteil genutzt haben.

Firefox 56 mit praktischem Screenshot-Tool

heise online Newsticker - 30. September 2017 - 13:30
Bevor Firefox auf seine neue Quantum-Engine umsteigt, ist jetzt zunächst Version 56 des Browsers erschienen. Das Update enthält mit "Firefox Screenshots" ein praktisches Tool, um schnell Bildschirmfotos aufzunehmen.

Star Wars Battlefront 2: Beta beginnt in wenigen Tagen, 16 GByte RAM empfohlen

heise online Newsticker - 30. September 2017 - 12:30
Die Beta-Version von Star Wars Battlefront 2 läuft vom 6. bis 9. Oktober. Empfohlen werden 16 GByte Speicher, eine Radeon RX 480 oder GTX 1060 und ein Core i7-6700.

Opera 48 konvertiert Währungen, Maßeinheiten und Zeitzonen

heise online Newsticker - 30. September 2017 - 12:00
Version 48 des Opera-Browsers enthält einige praktische Helfer-Tools: Sie rechnen etwa Fahrenheit in Celsius um, erstellen Screenshots oder helfen bei der Suche im Web.

Hands on: Echo Show mit deutscher Alexa

heise online Newsticker - 30. September 2017 - 11:00
Der gegenüber dem ursprünglichen smarten Lautsprecher Echo um ein Display erweiterte Echo Show kommt am 16. November. Auf der Präsentation der anderen neuen Amazon-Geräte wurde er bereits mit der deutschsprachigen Alexa vorgeführt.

Ford will selbstfahrende Autos beim Uber-Rivalen Lyft vermitteln

heise online Newsticker - 30. September 2017 - 10:30
Der US-Autohersteller Ford holt sich den US-Fahrdienstvermittler Lyft mit ins Boot. Gemeinsam wollen sie Fahrzeuge ohne Lenkrad zügig und zu erschwinglichen Preisen auf die Straße bringen.

qed42.com: Securing Cookie for 3rd Party Identity Management in Drupal

Planet Drupal - 30. September 2017 - 10:15
Securing Cookie for 3rd Party Identity Management in Drupal Body

We are in an era where we see a lots of third party integrations being done in projects. In Drupal based projects, cookie management is done via Drupal itself to maintain session, whether it be a pure Drupal project or decoupled Drupal project,.

But what when we have a scenario where user’s information is being managed by a third party service and no user information is being saved on Drupal? And when the authentication is done via some other third party services? How can we manage cookie in this case to run our site session and also keep it secure?

One is way is to set and maintain cookie on our own. In this case, our user’s will be anonymous to Drupal. So, we keep session running based on cookies! The user information will be stored in cookie itself, which then can be validated when a request is made to Drupal.

We have a php function to set cookie called setCookie() , which we can use to create and destroy cookie. So, the flow will be that a user login request which is made to website is verified via a third party service and then we call setCookie function which sets the cookie containing user information. But, securing the cookie is must, so how do we do that?

For this, let’s refer to Bakery module to see how it does it. It contains functions for encrypting cookie, setting it and validating it.

To achieve this in Drupal 8, we will write a helper class let’s say “UserCookie.php” and place it in ‘{modulename}/src/Helper/’. Our cookie helper class will contain static methods for setting cookie and validating cookie. Static methods so that we will be able to call them from anywhere.

We will have to encrypt cookie before setting it so we will use openssl_encrypt() php function in following manner:

/** * Encrypts given cookie data. * * @param string $cookieData * Serialized Cookie data for encryption. * * @return string * Encrypted cookie. */ private static function encryptCookie($cookieData) { // Create a key using a string data. $key = openssl_digest(Settings::get('SOME_COOKIE_KEY'), 'sha256'); // Create an initialization vector to be used for encryption. $iv = openssl_random_pseudo_bytes(16); // Encrypt cookie data along with initialization vector so that initialization // vector can be used for decryption of this cookie. $encryptedCookie = openssl_encrypt($iv . $cookieData, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); // Add a signature to cookie. $signature = hash_hmac('sha256', $encryptedCookie, $key); // Encode signature and cookie. return base64_encode($signature . $encryptedCookie); }
  1. String parameter in openssl_digest can be replaced with any string you feel like that can be used as key. You can keep simple keyword too.
  2. Key used should be same while decryption of data.
  3. Same initialization vector will be needed while decrypting the data, so to retrieve it back we append this along with cookie data string.
  4. We also add a signature which is generate used the same key used above. We will verify this key while validating cookie.
  5. Finally, we encode both signature and encrypted cookie data together.

For setting cookie:
 

/** * Set cookie using user data. * * @param string $name * Name of cookie to store. * @param mixed $data * Data to store in cookie. */ public static function setCookie($name, $data) { $data = (is_array($data)) ? json_encode($data) : $data; $data = self::encrypt($data); setcookie($name, $cookieData,Settings::get('SOME_DEFAULT_COOKIE_EXPIRE_TIME'), '/'); }

Note: You can keep 'SOME_COOKIE_KEY' and 'SOME_DEFAULT_COOKIE_EXPIRE_TIME' in your settings.php. Settings::get() will fetch that for you.
Tip: You can also append and save expiration time of cookie in encrypted data itself so that you can also verify that at time of decryption. This will stop anyone from extending the session by setting cookie timing manually.

Congrats! We have successfully encrypted the user data and set it into a cookie.

Now let’s see how we can decrypt and validate the same cookie.

To decrypt cookie:

/** * Decrypts the given cookie data. * * @param string $cookieData * Encrypted cookie data. * * @return bool|mixed * False if retrieved signature doesn't matches * or data. */ public static function decryptCookie($cookieData) { // Create a key using a string data used while encryption. $key = openssl_digest(Settings::get('SOME_COOKIE_KEY'), 'sha256'); // Reverse base64 encryption of $cookieData. $cookieData = base64_decode($cookieData); // Extract signature from cookie data. $signature = substr($cookieData, 0, 64); // Extract data without signature. $encryptedData = substr($cookieData, 64); // Signature should match for verification of data. if ($signature !== hash_hmac('sha256', $encryptedData, $key)) { return FALSE; } // Extract initialization vector from data appended while encryption. $iv = substr($string, 64, 16); // Extract main encrypted string data which contains profile details. $encrypted = substr($string, 80); // Decrypt the data using key and // initialization vector extracted above. return openssl_decrypt($encrypted, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv); }
  1. We generate the same key using same string parameter given while encryption.
  2. Then we reverse base64 encoding as we need extract signature to verify it.
  3. We generate same signature again as we have used the same key which was used to creating signature while encryption. If doesn’t signatures doesn’t matches, validation fails!
  4. Else, we extract initialization vector from the encrypted data and use to decrypt the data return to be utilized.
/** * Validates cookie. * * @param string $cookie * Name of cookie. * * @return boolean * True or False based on cookie validation. */ public static function validateCookie($cookie) { if (self::decryptCookie($cookieData)) { return TRUE; } return FALSE; }

We can verify cookie on requests made to website to maintain our session. You can implement function for expiring cookie for simulating user logout. We can also use decrypted user data out of cookie for serving user related pages.

navneet.singh Sat, 09/30/2017 - 13:45

Rundfunkbeitrag, Mediatheken, Digitalisierung: ARD und ZDF planen die Zukunft

heise online Newsticker - 30. September 2017 - 10:00
ARD, ZDF und Deutschlandradio haben ihre Pläne für die Zukunft des öffentlich-rechtlichen Rundfunks zu Papier gebracht. Am Freitag wollen sie ihre Berichte an die Rundfunkkommission der Länder übergeben. Die Diskussion dürfte dann erst richtig losgehen.

AMDs Radeon-Treiber 17.9.3: Optimiert für Total War Warhammer 2 und Forza Motorsport 7

heise online Newsticker - 30. September 2017 - 10:00
Der Radeon-Grafiktreiber 17.9.3 soll dafür sorgen, dass die neuen Spiele Total War Warhammer 2 und Forza Motorsport 7 auf Radeon-Grafikkarten problemlos laufen.

Amazon lässt sich Marke für Fertiggerichte in Deutschland eintragen

heise online Newsticker - 30. September 2017 - 9:00
Gibt es in Deutschland bald auch von Amazon Kochboxen mit fertig portionierten Zutaten? Die Eintragung einer entsprechenden Marke und erste Tests in den USA deuten darauf hin.

G20-Krawalle: Polizei will mit automatisierter Gesichtserkennung Randalierer jagen

heise online Newsticker - 30. September 2017 - 9:00
Die Soko "Schwarzer Block", die nach den G20-Krawallen in Hamburg ermittelt, hat gut 32.000 Videos zu möglichen Straftaten gesammelt. Software zur Gesichtserkennung soll nun helfen, Täter ausfindig zu machen.

Bay Area Drupal Camp: Training Registration for BADCamp 2017 is Open!

Planet Drupal - 29. September 2017 - 20:31
Training Registration for BADCamp 2017 is Open! Grace Lovelace Fri, 09/29/2017 - 11:31am Training Signups are Now Open!

Are you prepared to gain mastery of your Drupal Skills? BADCamp has two full days of training offered from some of the most talented leaders in the Drupal community. Join the masters on Wednesday and Thursday while they unfold the magic. This year BADCamp offers skills training in DevOps, theming, module development, content strategy, and much more!

  All courses will be all-day (approximately 8am-5pm) with a break for lunch. Signup today -- openings go quickly, and classes will fill up fast.

 

Signup Today


BADCamp has historically provided a completely free training thanks to the overwhelming generosity of our sponsors. However, this year we must charge a nominal fee of $25 to cover operating expenses as we are short on sponsorship funding. We sincerely apologize for this short notice. We needed to find ways at the last minute to break even.

This was a really difficult decision for the BADCamp organizers to make.

If you can't afford the $25 or it is super complicated to get funding, please reach out to the BADCamp organizers via the contact form and we will help! We have had generous attendees offer to donate extra seats in the classes.

Thank you for your understanding.

BADCamp is 100% volunteer run and 100% funded by our sponsors and the support of our local community. Thank you!


Getting Started with Drupal - Wednesday

by Agaric & Digital Echidna with Mauricio Dinarte

This training is aimed to people just starting with Drupal. Basic concepts will be explained are later put into practice. The objective is that someone, who might not even know about Drupal, can understand the different concepts and building blocks to create a website using this CMS.

 

SEO & Accessibility - Wednesday

by Hook 42 with Aimee Degnan and Carie Fisher

SEO stands for "Search Engine Optimization." Improving your website's SEO can translate into more visitors, better conversions, and more sales.

Accessibility refers to the design of products, devices, services, or environments for people who experience disabilities.

When properly configured, Drupal is a very SEO-friendly and Accessible web framework. The trick is to know which Drupal modules you need to install and how to optimally configure them. Configuration doesn’t stop at the module level - a solid content strategy is required to make the most Accessible and optimized website. “Content is King” and our job is to make Drupal showcase content in the most effective way to all consumers and search engines.

 

Object Oriented PHP - Wednesday

by Chapter Three

With the move to Drupal 8 everyone who works in the PHP layer will be exposed to more and more to object­ oriented code. Come learn the basics of working with objects in PHP and how OOP can help you to write well­ structured code

 

Continuous Integration: From 0 to CI Hero - Wednesday

by Tandem with Alec Reynolds and Mike Pirog

Continuous Integration (CI) methodologies and tools can deliver huge efficiency gains for web development teams. However, overburdened with feature requests and new projects, many development teams never have the time to learn and implement a CI workflow. Now is that time.

In this training, we provide hands-on instruction in how to setup a continuous integration workflow for your team using Github, TravisCI, and several popular hosting platforms (Pantheon and Platform.sh).

 

Drupal Crash Course for Non-Developers - Wednesday

by Promet Source with Margaret Plett

Are you responsible for project management, content, or vendor selection and preparing to work with Drupal? This one-day training delivers all of the tools you need to get started. Delivered by an Acquia Certified Drupal Developer, this training will answer the questions you didn’t even know to ask!

 

Component-based Development in Drupal - Wednesday

by Mediacurrent with Mario Hernandez

In this training we will put into practice one of the latest latest trends in development, components. Building a website using the component-based approach can dramatically improve collaboration among teams, making code more reusable, flexibility and long term maintenance of your website. We will work on building a living styleguide which will become the single source of truth for markup, styles and javascript behaviors.

 

Component-based Theming with Twig - Thursday

by Forum One with Chaz Chumley

Join Forum One as they walk through the theming variations that started with the traditional theme-centric design and has quickly moved into component-based design. Together you will master Component-based theming with Twig as you work to identify patterns, define components, utilize command line tools such as Composer, NPM and Grunt to quickly create a PatternLab managed theme. Learn how to work smarter in developing components that can easily be integrated into project after project without having to recreate them yourself.

 

Hands on Drupal 8 Module Development using DrupalConsole - Thursday

by WeKnow with Jesus Manuel Olivas and Omar Aguirre

This training will provide an introduction to the most important changes for developers in Drupal 8, allowing students to practice Drupal OOP while at the same time providing a solid knowledge of the process of build modules for Drupal 8.

 

Theming Drupal 8 - Thursday

by Drupalize.me with Joe Shindelar

Themes combine HTML, CSS, JavaScript, and Drupal in order to make beautiful websites. Creating truly unique themes requires knowing how to use the Twig template language to manipulate HTML, how to add CSS and JavaScript assets in a way that's compatible with Drupal's caching, all while maintaining the flexibility that Drupal is known for.

 

Content Strategy for Drupal 8 - Thursday

by Evolving Web with Suzanne Deracheva

Drupal is a powerful tool for managing structured content. Many Drupal projects revolve around producing, displaying and organizing content effectively. This course will walk you through the process of creating a content strategy for your next Drupal project, and planning out how that content will be structured in Drupal. Whether you're creating a brand new site or migrating to Drupal, you'll learn techniques that will help you build a solid content strategy and a successful Drupal website.

 

Intro to Backdrop CMS - Thursday

by Nate & Jen Lampton

Backdrop CMS is for the small to medium sized business, non-profits, educational institutions, and companies or organizations who are delivering comprehensive websites on a budget. This introductory training will cover the basics of creating and administering a website with Backdrop CMS.

 

Drupal 8 Configuration System Basics - Thursday

by DrupalEasy with Mike Anello

The Drupal 8 configuration system can provide great advantages to managing the configuration of a site, but it can also cause massive headaches if used improperly. This presentation will provide an overview of how the Drupal 8 configuration system works, best practices on basic workflows to utilize it effectively, and a small sampling of some of the contributed modules available to enhance it.

  YOU make BADCamp awesome!

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

  We need your help!

Do you want a more meaningful BADCamp experience? BADCamp would not be possible without the overwhelming love and support from our community! Volunteer to help set up, tear down, take pictures, monitor rooms or so much more!  If you are local and can help us, please contact Anne at anne@badcamp.net or sign up on our Volunteer Form.

  Sponsors

A HUGE shout out of thanks to our sponsors who have helped make this magnificent event possible. Interested in sponsoring BADCamp? Contact matt@badcamp.net or anne@badcamp.net

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

 

Drupal Planet

Lullabot: Fundamentals of Responsive Images

Planet Drupal - 29. September 2017 - 18:40

As a recovering English major, I’d like to believe words alone are enough to tell a tale on the web. A text-only page is fast: even a long article can load nearly instantly. Add photos, and the web slows down. Yet great images bring emotion, a connection with others and the world around us. They’re often worth the tradeoff in time to load a page.

People don’t want to wait around longer than necessary, though. Any benefit you get from a great image vanishes once someone’s neck begins to tense up as the loading bar slowly creeps from one side of the URL bar to the other.

undefined

Images also lose their emotional impact if they’re blurry and someone has to squint to see the subject.

If you take an image that looks nice and crisp on a phone, then share that same file on a big desktop screen, it’s going to look fuzzy. Switch it around with a nice, big image that looks great on desktop, and somebody looking at the same file on a phone will grow impatient, waiting for the file to load.

We want the best of both worlds: images that look great no matter which screen they’re viewed on, while loading as quickly as possible.

Thankfully there’s a great solution to this problem due to the work of the Responsive Images Community Group. They worked with browser developers to develop new markup options such as the picture element and the sizes and srcset attributes. With these tools, we can provide a selection of image files so your browser can pick the right one depending on how someone is viewing it. This can help to make sure photos download as fast as possible while still being enjoyed in all their glory.

There are a lot of great resources that help explain the new responsive images specification. I highly recommend Jason Grigsby’s article series, Responsive Images 101, as well as Eric Portis’ Responsive Image Guide.  You can read the actual specifications for the picture element or the srcset and sizes attributes, although specs can be pretty dry reading. Understanding the specifications and syntax are important, but you still need to make a number of key decisions on how you’ll use responsive images with a particular site.

I’ve set up responsive images on a number of large sites like NYU Langone, and I also help to maintain the Responsive Image and Breakpoint modules for Drupal 8, so I wanted to share some of my experiences in working with responsive images.

In this article, I’ll be explaining some of the key concepts for responsive images, as well as providing an overview of a few different responsive image tactics. The solutions used for any particular image will vary. Understanding those options will help you to set out on the right path.

I’ll dig into more technical detail in future articles focused on some of those individual tactics. Right now, let’s start looking at the various ways we can make sure our images look awesome and load fast.

Picking the right method to make your images responsive

The biggest difference in how you’ll handle making images responsive is what you’ll do for images that are photos, versus how you’ll handle logos and icons.

Photos—often referred to as raster images—do not scale so easily. The word raster comes from the Latin word rastrum, or rake. Old cathode ray tubes created images on screens by literally drawing one line at a time, raking each across the screen. These days raster images are created by hundreds of thousands to millions of individual dots, or pixels, on a screen. It takes a lot of data to tell a browser what color each of those dots should be in order to recreate an image.

undefined

Logos and icons on the other hand often use vector graphics. These images can be specified using mathematical vectors—a series of points on lines along with information that describes the curves connecting those points. The simpler shapes and colors in vector graphics can scale really easily to a wide variety of sizes, because math can easily calculate the color needed for each pixel.

For vector graphics, you’ll want to use SVG files. SVG means Scalable Vector Graphics, and the name really says it all. SVGs are text files which use XML to describe the vectors necessary to create an image. Use an SVG plus a little CSS, and your logos and icons will be responsive.

I would not recommend using an older technique to load icons through a webfont containing multiple icons. The goal of that was to avoid multiple requests to a server: with the the advent of the http/2 protocol, that’s not as much of an issue. Icon fonts also have major accessibility issues, since they use a specific letter of a font for each icon. For people using a screen reader, that’s not so awesome.

For photos and other raster images, the techniques you use might vary a bit, depending on if the images are loaded through CSS or HTML.

There are ways to make background images added to a site through CSS responsive, but unfortunately browser support can be a bit shaky.

Thankfully, images used as content within a site, which are loaded through the HTML markup for a page, have great options that we can use. These sorts of images are generally what people are referring to when you hear the term responsive images.

So we’ll be focusing mostly on raster images that appear as content on your site. Even there, however, there a few important variations to keep in mind.

How do images vary across breakpoints?

When we’re talking about making images responsive, we mean that we want to provide some variation in how those images appear depending on how they’re viewed.

Sometimes we want an image to essentially look the same whether you’re on mobile or desktop. For example the image always appears as a square or a rectangle. It might only fill a sidebar column on desktop, while filling the full width of the screen on mobile. However, it retains the same aspect ratio—the relationship between the height and the width of the image. 

We call this use case viewport sizing, and typically this ends up being the most common way that images are made responsive.

For viewport sizing, we typically just need a good ol’ img element with two new attributes: sizes and srcset. We’ll get into how those new attributes work, but the short version is that sizes tells a browser how much space an image takes up in a site’s layout at various screen sizes, while srcset provides some image file options the browser can choose between.

<img src="small.jpg" srcset="large.jpg 1024w, medium.jpg 640w, small.jpg 320w" sizes="(min-width: 36em) 33.3vw, 100vw" alt="A swirling nebula">

Sometimes we need images to change a bit more at various screen sizes. Maybe we need a square image on mobile but a rectangle on desktop. Sometimes we also need to change the cropping of an image across breakpoints, showing a close-up image on mobile, while using a wider shot on desktop. Changes to aspect ratio and cropping are often called art direction, and they require a more complicated solution.

For art direction, we’ll need to use the picture element, which serves as a wrapper around a series of source elements, along with an img element. Each source element has its own media attribute: the media query defines the viewport size range where that source should be used to select the particular file that will be used for the img element contained inside the picture element.

You can also provide a sizes and srcset attribute on a source element so the browser has a number of files it can choose between for a particular viewport range.

<picture> <source media="(min-width: 70em)" sizes="40vw" srcset="nebula-artsy-wide-2800.jpg 2800w, nebula-artsy-wide-2240.jpg 2240w, nebula-artsy-wide-1400.jpg 1400w, nebula-artsy-wide-1120.jpg 1120w"> <source media="(min-width: 35em)" sizes="36vw" srcset="nebula-artsy-square-1120.jpg 1120w, nebula-artsy-square-900.jpg 900w, nebula-artsy-square-560.jpg 560w, nebula-artsy-square-450.jpg 450w"> <img src="nebula-artsy-tight.jpg" alt="An artsy cat"> </picture>

Using the picture element is overkill when you’re just dealing with viewport sizing. Having separate source elements is great for art direction, though, because you can provide a set of files on one source element with a certain aspect ratio or cropping level, while using a different aspect ratio or cropping level on another source element.

There’s very good browser support for the picture element, as well as the sizes and srcset attributes. IE11 is the main browser that still needs a little help, and for that you will want to make sure you’re using the Picturefill polyfill. Doing so may change what you use as a fallback src on the img inside the picture element. See the example on the Picturefill site for details.

For either viewport sizing or art direction, you’ll likely want to use the sizes and srcset attributes, so let’s dig a little deeper into what purpose those attributes are serving. In short, it’s all about pixels versus percentages.

Responsive image grudge match: Pixels versus percentages

Responsive design typically specifies a site’s layout in percentages, while raster images like photos are defined in pixels. It’s a grudge match, and our job is to serve as referees.

In one corner, we have responsive web design, where percentages define layout. By using a percentage, we allow the browser to do the heavy lifting of figuring out for an element like a sidebar exactly how many pixels wide it should be for a particular screen size. This is great, since like vector images, a browser can easily calculate layout boxes through the power of mathematics.

In our other corner, we have photographic images. Photos are more difficult to resize, because we need to give a browser detailed instructions about every single pixel in the image. As a result, photos don’t flex so easily.

undefined

Image files are essentially information with instructions detailed enough to create a photo at a particular size. A browser can figure out how to make an image smaller than its file size would suggest, because it has enough information to do so. Making an image bigger is much trickier, because if a browser doesn’t have enough detailed instructions for a larger size, it has to start guessing. And inevitably, it will guess wrong at least some of the time, which leads to images looking blurry.

However, that doesn’t mean we can just give a browser so much information that it can draw an image at any potential size. A high-res image file is going to be way bigger than necessary for a much smaller, low-res screen. More information, bigger file size, longer download time.

Because pixels matter so much, we also have to keep in mind screen resolution. Some displays use a larger number of pixels in the same amount of physical space in order to create a more detailed image. For a low-res display, a sidebar that has a layout width of 500px will use 500 physical pixels in a screen to create that width. For a high-res “retina” screen, there may be 1000 physical pixels in that same space. That means we need a higher resolution image to account for that difference.

So we want to figure out for one particular type of image how many pixels of information we need in the file for the amount of space it takes up in a percentage of the site’s layout at a certain screen size and resolution. It’s okay if the file has a few more pixels of info, although not too many more, but we definitely want to avoid having too few pixels of info, so we can avoid blurry images.

The sizes attribute helps us to tell the browser about the layout percentages for a particular image, while srcset provides information about the number of pixels in each image file. Why do we need to put this information into HTML markup, though?

Why browsers need a sizes attribute

We need sizes because of how browsers process a web page that is being loaded. Once a browser receives the HTML for a page from the server, it begins scanning the document to look for other resources it will need to load. It finds all the CSS and JS documents that need to be loaded, as well as any image files, then begins prioritizing how it will download those files.

CSS files are a top priority, because they provide so much critical information about how a page’s HTML should be styled, and because CSS files often contain links to other resources that need to also be downloaded, such as web fonts and background images. JS is also a big priority, as it can change around the order of DOM elements that will need to be styled based on CSS rules. What’s critical to understand is that browsers improve overall performance by starting to download images while the CSS and JS files are still being processed.

That’s been a big challenge for responsive images, because you can’t just use CSS and JS to select an image file with the right width for a particular image slot, as doing so would mean waiting until all of the CSS and JS has been processed to fully understand the final layout of a page and thus the width of an image slot.

We can solve this tricky problem by using a key part of the responsive images spec: the sizes attribute. This attribute on an img element (or on a source element within a picture element) tells the browser how large that element will be once layout rules are applied.

So, within our sizes attribute, we provide a set of widths and accompanying media conditions. A media condition is simpler than a media query and consists only of something like (min-width: 1000px). For our example, we could provide the following sizes attribute:

sizes="(min-width: 36em) 33.3vw, 100vw"

The first thing to note is that we’re providing the media condition for the largest possible viewport first, as the browser will pick the first option that matches.  Next, note the units we’re using:

  • Using em for widths in media conditions is a good practice, because it provides extra flexibility for people who change the settings in their browser to use larger than normal default font sizes. The typical default font size is 16px for 1em, so 36em is the equivalent of 576px. So we’re saying when the browser has a minimum width of 576px, this image takes up 33.3vw space in the layout.
  • The vw unit stands for viewport width: 1vw is equal to 1% of the width of the viewport; 33.3vw is 33.3% of the viewport width. The vw unit is used instead of percentages to make clear that this is a percentage of the viewport, not the width of the containing element.

Finally, the comma indicates the next set of media conditions and layout data. You can have as many commas as necessary within a sizes attribute. Here we just have one, so we’re saying that for viewports smaller than 576px wide, this image takes up 100% of the viewport space.

Let the browser choose with srcset

The sizes attribute needs to be paired with a srcset attribute on the same element (either an img element or a source element). This attribute will contain a comma-separated list of the URLs of image files: after each URL there is a space, then a number signifying the width of the image followed by the letter w. For example:

srcset="image235.jpg 235w, image290.jpg 290w, image365.jpg 365w, image470.jpg 470w, image580.jpg 580w, image730.jpg 730w, image940.jpg 940w, image1160.jpg 1160w"
  • The browser will take a look at these image files and use the number with the w to calculate which image file will best fit within the amount of space we’ve defined in the sizes attribute.
  • The browser knows the viewport size, so it can pick the right media condition and then use the width value next to the media condition to calculate how many pixels are needed to fill that space.
  • The browser also knows the resolution density of the screen, so it can take that into account with its calculations as well.

The browser can also in theory take into account the bandwidth you have available, providing a lower-res source if you’re on a 3G connection perhaps.

You don’t need to worry about that, though. All you need to do is provide the layout information in the sizes attribute and the possible image sources that can fit within that space, and the browser will take care of matching up the right source file with the image slot.

Make images fluid with CSS

To make images responsive, we still need to write CSS rules that will make the image flexible. For example:

img { width: 100%; height: auto; }

If you’ve provided a set of images in srcset with sufficient widths for the amount of space defined in sizes, this should be all you need. If you don’t have a way to guarantee that, you could also add a max-width: 100%; rule that ensures images are never made larger in the layout than the number of pixels within the image. This can cause design discrepancies if your images are supposed to take up a certain amount of space in a grid design, so I tend to leave off this rule.

If I want to have an image take up a certain amount of space within its container, I find it works better to put a wrapper div around the img or picture element and then set layout rules on that wrapper. That way I can have one consistent CSS rule for all images, but then modify the width of the wrapper in the situations that need that.

Next steps

Hopefully you now have a better understanding of a few different types of images and how you might make each responsive.

The sizes and srcset attributes are often key to making images responsive. In an upcoming article, I’ll talk through how to look at a particular type of image for a site, and then determine what values to use for sizes and srcset. Creating that sort of plan is really key to a successful responsive images solution.

Once you have a plan, you still need to create all the image file variations, and if at all possible you should find a way to avoid creating those image files manually. In a separate article I’ll go over how to use Drupal 8’s built-in tools to automate this process. In a decoupled site, you may find a cloud-based tool works well for that part of the process: Kris Bulman will be going over how to do that in a future article.

Other articles in this series may go over topics like how to implement art direction for responsive images in Drupal 8.

The payoff for this effort is that your images look nice and crisp at all viewport sizes, while still downloading efficiently. No more super slow mobile sites that take forever to load images! That makes a huge difference for those visiting your site. Downloading image files tends to be a big chunk of the work that browsers do when visiting a new site. Speed that up and everybody wins.

48-Jährige räumt Betrieb des Neonazi-Portals "Altermedia" ein

heise online Newsticker - 29. September 2017 - 18:30
Für die 48 Jahre alte Angeklagte war das Neonazi-Portal "Altermedia" nach ihrer Aussage vor Gericht zunächst ein "Portal für Meinungsfreiheit".

Amazee Labs: The final day of DrupalCon Europe talks

Planet Drupal - 29. September 2017 - 18:09
The final day of DrupalCon Europe talks

#DrupalConEur is 3 days of talks surrounded by a day of summits and a day of collaboration sprints. Thursday was the 3rd and final day of presentations.

John Albin Fri, 09/29/2017 - 18:09

Most importantly for me, Thursday was the day after I finished giving my talk, so I was able to stop tweaking my slides and focus on learning. I started my day by grabbing a hazelnut croissant and coffee in the underground and headed to the community keynote by Joe Shindelar, “Everyone Has Something to Share”.

After that I went to Everett Zufelt’s ”JavaScript and Accessibility: Don't Blame the Language”. Everett busted several myths about accessibility including the pointed “Our web application is accessible (but we’ve never tested it)” And the most useful part of his talk was describing ways that websites get accessibility right. I've now added “ARIA Live Regions” to my TO DO list and highly recommend anyone making websites to watch the video for his presentation.

While I was grabbing a quick lunch, Tamás Hajas presented, as part of the Frontend Track, “What’s new in CSS? Introduction to CSS Grid and CSS Custom Properties”. I added the video to my YouTube “to watch” list and headed to Chris Ruppel’s “Houdini, the Future of CSS”. Chris’s talk was part of the Horizons track, which focuses on the future of Drupal and the web. Houdini is a proposed API that will go into web browsers that will give CSS developers the same ability that JavaScript developers already have; the capability to polyfill proposed changes to the CSS spec. With Houdini, CSS developers could potentially create new syntax (like nested selectors or element queries) and use that in their production code.

Earlier in the week, the Drupal Association announced there would be no DrupalCon Europe in 2018 and that they had formed a committee to determine if and/or how a DrupalCon Europe 2019 could happen. So with this in mind, Théodore Biadala, whose session was scheduled in the final time slot of the day, started his ”Offline Core” presentation by saying ”Thank you for coming to the last session of the last day of the last DrupalCon Europe. Ever.” Awwwww… (Hopefully it won’t be, but that’s another blog post) The “Offline Core” session was a part of the Core Conversations track and after a short presentation about his idea for supporting Progressive Web Apps (PWA) and Service Workers in core, Théodore facilitated a lively discussion with the session attendees on multiple facets of the idea. We even solved a potentially tricky problem: how to turn off a Service Worker (code running on a user's browser) after the website owner has disabled the Service Worker's module in Drupal.

For the past six years, the closing session is followed by Drupal Trivia Night! The Drupal-related trivia questions are written by the wonderful Drupal Ireland community. I attended the first trivia night at DrupalCon Chicago 2011 and never miss it when I go to DrupalCon. Tonight was the 15th Trivia Night. I know because this was one of the trivia questions (Dang it! I wrote down "16" as my answer.)

Since I’ve been in the Drupal Community for 13 years, I know a lot of trivia, but as usual, I did horribly. But winning Trivia Night is not the goal, having fun is and the Drupal Ireland team does a great job of getting everyone involved and happy while losing badly. For example, my team won an award for "favorite team name"; the team name we picked was "We love the Irish!"

Toshiba: 10-TByte-Festplatte mit Luftfüllung

heise online Newsticker - 29. September 2017 - 18:00
Aktuell erhältliche Festplatten mit 10 TByte Speicherkapazität enthalten Helium statt Luft; das ermöglicht dünnere Scheiben. Toshiba hat nun ein luftgefülltes Modell angekündigt.