Planet Drupal

Syndicate content - aggregated feeds in category Planet Drupal
Updated: 35 min 35 sec ago

PreviousNext: Faster Hierarchies with Nested Sets and the Entity Reference Hierarchy module.

Fri, 02/24/2017 - 05:26
divIn Drupal 7 we used Node Hierarchy module to keep track of a hierarchy of pages. Node hierarchy ties directly to the menu system. When getting a list of all ancestors or descendents, it is a O(n) operation, and at least one site we use it on has a lot of nodes in the tree. Performance was terrible. Add to that it has no notion of revisions or forward revisions, so changing the parent and saving a draft can cause all sorts of issues with your menu./div div /div divWhen the time came to update the site to Drupal 8, we took a different approach./div span property=dc:title content=Faster Hierarchies with Nested Sets and the Entity Reference Hierarchy module. class=rdf-meta element-hidden/span

Freelock : Book 3: Metrics to success and selecting a vendor

Fri, 02/24/2017 - 00:10
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpWhen thinking about ways to measure your website’s effectiveness, you may also want to think about the metrics you use to gauge the success of the website in accomplishing your business goals. How else do you measure success?/p/div/div/div

DrupalCon News: Level up your Drupal skills with our training courses, now available for sign-ups

Thu, 02/23/2017 - 23:34
div class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evenpThirsty for Drupal knowledge? Want to dive deep into a topic and learn from the best in the field? Like to get hands-on with your learning material? We are excited to offer 10 full-day training classes at DrupalCon Baltimore that will turn you into a Drupal superhero. No matter if you are an absolute beginner or Drupal expert, our classes cover all experience levels./p/div/div/div

DrupalCon News: Drupal Association Welcomes 17 Grant and Scholarship Recipients

Thu, 02/23/2017 - 19:42
div class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evenpOur community is made up of incredible members from across the globe who continue to grow the Drupal project and create communities. DrupalCon is a place where community leaders and key contributors come together to meet, learn, and collaborate. The Drupal Association's Grant and Scholarship Program makes attending possible for many community members who may not have been otherwise able to join us.  /p/div/div/div

Drupal Association blog: Doing our part for the community

Thu, 02/23/2017 - 19:25
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpThe Drupal Association Engineering Team delivers value to all who are using, building, and developing Drupal. The team is tasked with keeping and all of the a href= rel=nofollow20 subsites and services/a up and running. Their work would not be possible without the community and the project would not thrive without close collaboration. This is why we are running a membership campaign all about the engineering team. These are a few of the recent projects where engineering team + community = win!/p pimg alt=Icon of screen with person in center of it class=left height=35 src=/files/icon-gray-webinar_0.png width=35 /Want to hear more about the work of the team, rather than read about it? Check out a href=; rel=nofollowthis video/a from 11:15-22:00 where Tim Lehnen (a href= rel=nofollow@hestenet/a) talks about the team's recent and current work./p h2Leading the Documentation System migration/h2 pWe now havea href= rel=nofollow a new system for Documentation/a. These are guides Drupal developers and users need to effectively build and use Drupal. a href= rel=nofollowThe new system/a replaces the book outline structure with a guides system, where a collection of pages with their own menu are maintained by the people who volunteer to keep the guides updated, focused, and relevant. Three years of work from the engineering team and community collaborators paid off. Content strategy, design, user research, implementation, usability testing and migration have brought this project to life./p pimg alt=Basic structure doc page for Drupal 8 Creating Custom Modules section height=382 src=/files/documentation_screenshot2.png width=400 /br / Pages include code 'call-outs' for point-version specific information or //p pThanks to the collaborators: a href= rel=nofollow46 have signed up to be guide maintainers/a, the Documentation Working Group members a href= rel=nofollow(batigolix/a, a href= rel=nofollowLeeHunter/a, a href= rel=nofollowifrik/a, a href= rel=nofolloweojthebrave)/a, to a href= rel=nofollowtvn/a, and the many community members who write the docs!/p h2Enabling Drupal contribution everywhere/h2 pHelping contributors is what we do best. Here are some recent highlights from the work we're doing to help the community:/p ulli pUsers now have a href= rel=nofollowbetter profiles/a to make into Drupal résumés./p /li li pMonths of content strategy work resulted in a a href= rel=nofollowbetter communication plan/a, including ia href= rel=nofollowmproved user experience for newly registered users/a./p /li li pOrganization pages have a href= rel=nofollowexpanded in scope/a to encourage more participants than just Drupal service providers. The a href= rel=nofolloworganization list/a, new layout making a href= rel=nofollowcase studies/a and contributions stand out, and a a href= rel=nofollowmore robust contribution credit system/a are all helping to bring more contributors to the Drupal ecosystem./p /li li pWe're expanding the contribution credit system to include a href= rel=nofollowmore types of contribution/a, and we'll keep working on improving the system with check-ins every 6 months./p /li /ulpOur project to help contributors currently in development is revamping thea href= rel=nofollow project applications process/a. More on this soon a href= rel=nofollowon our blog/a./p h2When a community need doesn't match our roadmap/h2 pWe have a a href= rel=nofollowprocess for prioritizing community initiatives/a so we can still help contributors. Thanks to volunteers who have proposed and helped work on initiatives recently, we've supported the launch of the a href= rel=nofollowDrupal 8 User guide/a and the ongoing effort to a href= rel=nofollowbring Dreditor features into itself/a.  /p pThanks to the collaborators: a href= rel=nofollowjhodgdon/a, a href= rel=nofolloweojthebrave/a, and a href= rel=nofollowthe contributors to the user guide/a. Thanks also to a href= rel=nofollowmarkcarver/a for the Dreditor effort./p h2How to stay informed and support our work./h2 pThe a href= rel=nofollowchange list/a and the a href= roadmap/a help you to see what the board and staff have prioritized out of the many needs of the community./p pYou can help sustain the work of the Drupal Association by a href= rel=nofollowjoining as a member/a. Thank you!/p/div/div/div

Zhilevan Blog: REST Authentication in Decoupled Drupal

Thu, 02/23/2017 - 09:22
In the traditional Drupal site, you don’t need to handle authentication, because Drupal handle everything by itself, gets a cookie, set session, error handling etc. But what about decoupled(headless drupal) sites? How can we authenticate the user on decoupled? Before diving into this, we need to understand the authentication types provided by RESTful:

Gbyte blog: - a plattform for artists and design students

Thu, 02/23/2017 - 04:00
Since its relaunch in 2015, the Drupal 7 powered has been gaining popularity among artists and design students to become their go-to platform. Until today, design students have uploaded over 700 portfolios providing guidance to enrolling candidates. These portfolios are linked to over 500 art faculties of hundreds of universities. Before enrolling in a course, a candidate can research their local university and study other students' portfolios or enroll in their local design course to prepare for the entry tests - all of it on

Joachim's blog: Dorgflow: a tool to automate your patch workflow

Thu, 02/23/2017 - 01:14
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpI’ve written previously about git workflow for working on patches, and about how we don’t necessarily need to move to a github-style system on, we just maybe need better tools for our existing workflow. It’s true that much of it is repetitive, but then repetitive tasks are ripe for automation. In the two years since I released Dorgpatch, a shell script that handles the making of patches for issues, I’ve been thinking of how much more of the patch workflow could be automated./p pNow, I have released a new script, a href=, and the answer is just about everything. The only thing that Dorgflow doesn’t automate is uploading the patch to (and that’s because’s REST API is read-only). Oh, and writing the code to actually fix bugs or create new features. You still have to do that yourself, along with your cup of coffee./p pSo assuming you’ve made your own hot beverage of choice, how does Dorgflow work?/p pSimply! To start with, you need to have an up to date git clone of the project you want to work on, be it Drupal core or a contrib project./p pTo start work on an issue, just do:/p precode$ dorgflow /code/pre pYou can copy and paste the URL from your browser. It doesn’t matter if it has an anchor link on the end, so if you followed a link from your issue tracker and it has ‘#new’ at the end, or clicked down to a comment and it has ‘#comment-1234’ that’s all fine./p pThe first thing this comment does it make a new git branch for you, using the issue number and the name. It then also downloads and applies all the patch files from the issue node, and makes a commit for each one. Your local git now shows you the history of the work on the issue. (Note though that if a patch no longer applies against the main branch, then it’s skipped, and if a patch has been set to not be displayed on the issue’s file list, then it’s skipped too.)/p pLet’s see how this works with an actual issue. Today I wanted to review the patch on an issue for Token module. The issue URL is So I did:/p precode$ dorgflow /code/pre pThat got me a git history like this:/p precode * 6d07524 (2782605-Move-list-of-available-tokens-from-Help-to-Reports) Patch from Comment: 35; URL:; file: token-move-list-of-available-tokens-2782605-34.patch; fid 5784728. Automatic commit by dorgflow. * 6f8f6e0 Patch from Comment: 15; URL:; file: 2782605-13.patch; fid 5710235. Automatic commit by dorgflow. / * a3b68cc (8.x-1.x) Issue #2833328 by Berdir: Handle bubbleable metadata for block title token replacements * [older commits…] /code/pre pWhat we can see here is:/p ul liGit is now on a feature branch, called ‘2782605-Move-list-of-available-tokens-from-Help-to-Reports’. The first part is the issue number, and the rest is from the title of the issue node on liTwo patches were found on the issue, and a commit was made for each one. Each patch’s commit message gives the comment index where the patch was posted, the URL to the comment, the patch filename, and the patch file entity ID (these last two are less interesting, but are used by Dorgflow when you update a feature branch with newer patches from an issue)./li /ul pThe commit for patch 35 will obviously only show the difference between it and patch 15, an interdiff effectively. To see what the patch actually contains, take a diff from the master branch, 8.x-1.x./p p(As an aside, the trick to applying a patch that’s against 8.x-1.x to a feature branch that already has commit for a patch is that there is a way to check out files from any git commit while still keeping git’s HEAD on the current branch. So the patch applies, because the files look like 8.x-1.x, but when you make a commit, you’re on the feature branch. Details are on a href= Stack Overflow question/a.)/p pAt this point, the feature branch is ready for work. You can make as many commits as you want. (You can rename the branch if you like, provided the ‘2782605-’ part stays at the beginning.) To make your own patch with your work, just run the Dorgflow script without any argument:/p precode$ dorgflow /code/pre pThe script detects the current branch, and from that, the issue number, and then fetches the issue node from to get the number of the next comment to use in the patch filename. All you now have to do is upload the patch, and post a comment explaining your changes./p pAlternatively, if you’re a maintainer for the project, and the latest patch is ready to be committed, you can do the following to put git into a state where the patch is applied to the main development branch:/p precode$ dorgflow commit /code/pre pAt that point, you just need to obtain the git commit command from the issue node. (Remember the drupal standard git message format, and to check the attribution for the work on the issue is correct!)/p pWhat if you’ve previously reviewed a patch, and now there’s a new one? Dorgflow can download new patches with this command:/p precode$ dorgflow update /code/pre pThis compares your feature branch to the issue node’s patches, and any patches you don’t yet have get new commits./p pIf you’ve made commits for your own work as well, then effectively there’s a fork in play, as your development in your commits and the other person’s patch are divergent lines of development. Appropriately, Dorgflow creates a separate branch. Your commits are moved onto this branch, while the feature branch is rewound to the last patch that was already there, and then has the new patches applied to it, so that it now reflects work on the issue. It’s then up to you to do a git merge of these two branches in order to combine the two lines of development back into one./p pDorgflow is still being developed. There are a few ideas for further features in the issue queue on github (not to mention a couple of bugs for some of the various possible cases the update command can encounter). I’m also pondering whether it’s worth the effort to convert the script to use Symfony Console; feel free to chime in with any opinions on the issue for that./p pThere are tests too, as it’s pretty important that a script that does things to your git repository does what it’s supposed to (though the only command that does anything destructive is ‘dorgflow cleanup’, which of course asks for confirmation). Having now written this, I’m obviously embarking upon cleaning it up and to some extent rewriting it, though I do have the excuse that the early weeks of working on this were the days after the late nights awake with my newborn daughter, and so the early versions of the code were written in a haze of sleep deprivation. If you’d like to submit a pull request, please do check in with me first on an issue to ensure it’s not going to clash with something I’m partway through changing./p pFinally, if you find this as useful as I do (this was definitely an itch I’ve been wanting to scratch for a long time, as well as being a prime case of condiment-passing), please tell other Drupal developers about it. Let’s all spend less time downloading, applying, and rolling patches, and more time writing Drupal code!/p /div/div/divul class=links inlineli class=comment-add first lasta href=/comment/reply/40#comment-form title=Share your thoughts and opinions related to this posting.Add new comment/a/li /ul

Jeff Geerling's Blog: Thoughts on the Acquia Certified Back end Specialist - Drupal 8 Exam

Wed, 02/22/2017 - 23:37
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpContinuing along with my series of reviews of Acquia Developer Certification exams (see the previous one: a href=/blog/2017/thoughts-on-acquia-certified-drupal-8-site-builder-examDrupal 8 Site Builder Exam/a, I recently took the a href= End Specialist – Drupal 8 Exam/a, so I'll post some brief thoughts on the exam below./p p style=text-align: center;img src=// width=150 height=150 alt=Acquia Certified Drupal Site Builder - Drupal 8 2016 class=insert-image /br /emI didn't get a badge with this exam, just a cert... so here's the previous exam's badge!/em/p/div/div/div Drupal 6 security update for Views

Wed, 02/22/2017 - 23:12
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpemAs you may know, a href= 6 has reached End-of-Life (EOL)/a which means the Drupal Security Team is no longer doing Security Advisories or working on security patches for Drupal 6 core or contrib modules - but the a href= 6 LTS vendors/a are and we're one of them!/em/ppstrongToday, there is a Moderately Critical security release for the a href= module to fix an Access Bypass vulnerability./strong/pp class=p1span class=s1The Views module allows site builders to create listings of various data in the Drupal database./span/pp class=p1span class=s1The Views module fails to call db_rewrite_sql() on queries that list Taxonomy Terms, which could cause private data stored on Taxonomy Terms to be leaked to users without permision to view it./span/pp class=p1span class=s1This is mitigated by the fact that a View must exist that lists Taxonomy Terms which contain private data. If all the data on Taxonomy Terms is public or there are no applicable Views, then your site is unaffected./span/ppSee the a href= advisory for Drupal 7/a for more information./ppHere you can download a href= Drupal 6 patch/a./ppstrong/strongIf you have a Drupal 6 site using the Views module, we recommend you update immediately! We have already deployed the patch for all of our Drupal 6 Long-Term Support clients. :-)/ppstrongIf you'd like all your Drupal 6 modules to receive security updates and have the fixes deployed the same day they're released, please a href= out our D6LTS plans/a./strong/ppemNote: if you use the a href= module (totally free!), you'll be alerted to these and any future security updates, and will be able to use drush to install them (even though they won't necessarily have a release on

Amazee Labs: This was Drupal Mountain Camp

Wed, 02/22/2017 - 15:14
spanThis was Drupal Mountain Camp/span div class=field field-node--field-lead field-name-field-lead field-type-text-long field-label-hidden div class=field-items div class=field-itemp dir=ltrFrom 16-19 February, the first Drupal Mountain Camp took place in Davos, Switzerland. A very diverse crowd of 135 attendees from, 17 different countries, came together to share the latest and greatest in Drupal 8 development, as well as case studies from Swiss Drupal vendors./p/div /div /div spana href=/en/josef-dabernig title=View user profile. lang= about=/en/josef-dabernig typeof=schema:Person property=schema:name datatype= class=usernameJosef Dabernig/a/span spanWed, 02/22/2017 - 14:14/span div class=field field-node--field-image field-name-field-image field-type-image field-label-hidden div class=field-items div class=field-itemimg class=image-style-blog-full src= width=580 height=387 alt=Drupal Mountain Camp Group Picture typeof=foaf:Image / /div /div /div div class=field field-node--body field-name-body field-type-text-with-summary field-label-hidden div class=field-items div class=field-itemp dir=ltrWhen we started organizing Drupal Mountain Camp in the summer of 2016, it was hard to predict how much interest it would attract and how many people would join for the camp. By reaching out to the local and international Drupal ecosystem we were excited to get so many people to attend from all around the world including Australia, India, and the US./p p dir=ltrimg alt=Drupal Mountain Camp Team data-entity-type=file data-entity-uuid=8ef1bbed-26a4-48c4-a200-aab25b21a754 src= //p p dir=ltrAs a team of a dozen organizers; we split up the tasks, like setting up the venue, registration, social media, room monitoring and much more. It was great seeing that we were able to split the workload across the entire team and keep it well balanced./p p dir=ltrimg alt=Drupal Mountain Camp Workshops data-entity-type=file data-entity-uuid=236daa22-d282-4bda-be08-8c062431af66 src= //p p dir=ltrWe are very thankful for 30 different speakers who travelled from afar and worked hard to share their expertise with the crowd. As a program organizer I might be biased, but I truly believe that the a href= was packed with great content :)/p p dir=ltrIn addition to the sessions, we also provided free workshop trainings to help spread some more Drupal love./p p dir=ltrimg alt=Drupal Mountain Camp Speaker Dinner data-entity-type=file data-entity-uuid=25fc6d55-12ab-46cb-9324-3693e006a1ff src= //p p dir=ltrWe took all the speakers up to the mountain for Switzerland's most popular dish, cheese fondue, to say thank you for their sessions and inputs./p p dir=ltrimg alt=Drupal Mountain Camp Speaker Sledding data-entity-type=file data-entity-uuid=27768965-2e9c-42ca-9307-7f8c1d7a8e23 src= //p p dir=ltrWith Drupal Mountain Camp we wanted to set a theme that would not only excite attendees with Swiss quality sessions but also create a welcoming experience for everyone. On top of our a href= of Conduct/a, we organized various a href= activities/a that would allow attendees to experience Switzerland, snow and the mountains.  /p p dir=ltrimg alt=Drupal Mountain Camp Sprints data-entity-type=file data-entity-uuid=cb376050-2bfc-40ad-a706-6efdc445d5f4 src= //p p dir=ltrSprints are an essential way to get started with contributing to Drupal. At Drupal Mountain Camp, we organized a First-time sprinter workshop and had Sprint rooms from Thursday until Sunday with many sprinters collaborating./p p dir=ltrimg alt=Drupal Mountain Camp data-entity-type=file data-entity-uuid=0c816a77-dc46-4164-b600-f07b148c139f src= //p p dir=ltrFor our hosting company a href=, Drupal Mountain Camp was a great opportunity to demonstrate our docker based development environment and scalable a href= stack/a using a set of raspberry pies./p p dir=ltrimg alt=Drupal Mountain Camp Snow data-entity-type=file data-entity-uuid=b803133b-b8b0-45d1-a300-fe4e5e9226b7 src= //p p dir=ltrAnd of course, we ended the conference with skiing and snowboarding at the Swiss mountains :)/p p dir=ltrPictures from the camp: a href= and a href= Curious about the next Drupal Mountain Camp? a href= us on twitter/a to stay on top and see you at the next event./p/div /div /div

Third Grove: Seniorlink Drupal Case Study

Wed, 02/22/2017 - 10:00
span property=schema:name class=field-name--titleSeniorlink Drupal Case Study/span span class=field-name--uid rel=schema:authorspan lang= about= typeof=schema:Person property=schema:name datatype= xml:lang=antonella/span/span span property=schema:dateCreated content=2017-02-22T08:00:00+00:00 class=field-name--createdWed, 02/22/2017 - 03:00/span

Flocon de toile | Freelance Drupal: Introduction to Protected file module on Drupal 8

Wed, 02/22/2017 - 00:30
div class=field field--name-body field--type-text-with-summary field--label-hidden field--itempDrupal 8 has several solutions and methods to manage access rights on each elements included in a content, and this in a very granular way. Enabling view or edit access on some field included in a content type can be achieved very simply, with a few lines of code, or with the a href= target=_blankField Permissions/a module. We can use this module to allow certain roles to view or update a particular field./p/div

OhTheHugeManatee: What Crell Doesn't Want You to Know: How to Automate Letsencrypt on

Tue, 02/21/2017 - 23:33
pIf you believe the a href= and the a href=, there is no way to automate a href= certificates updates on a href= You have to create the certificates manually, upload them manually, and maintain them manually./p pBut as readers of this blog know, the docs are only the start of the story. Irsquo;ve really enjoyed working with with one of my private clients, and I couldnrsquo;t believe that with all the flexibility ndash; all the POWER ndash; letsencrypt was really out of reach. I found a few attempts to script it, and one really great a href= on gitlab/a. But no one had ever really synthesized this stuff into an easy howto. So here we go./p h31) Add some writeable directories where CLI and letsencrypt need them./h3 pNormally when Platform deploys your application, it puts it all in a read-only filesystem. Wersquo;re going to mount some special directories read-write so all the letsencrypt/platform magic can work./p pEdit your applicationrsquo;s file, and find the codemounts:/code section. At the bottom, add these three lines. Make sure to match the indents with everything else under the codemounts:/code section!/p figure class='code'div class=highlighttabletrtd class=gutterpre class=line-numbersspan class='line-number'1/span span class='line-number'2/span span class='line-number'3/span /pre/tdtd class='code'precode class=''span class='line'/web/.well-known: shared:files/.well-known /spanspan class='line'/keys: shared:files/keys /spanspan class='line'/.platformsh: shared:files/.platformsh/span/code/pre/td/tr/table/div/figure pLetrsquo;s walk through each of these:/p ul li/web/.well-known: In order to confirm that you actually control, letsencrypt drops a file somewhere on your website, and then tries to fetch it. This directory is where itrsquo;s going to do the drop and fetch. My webroot is codeweb/code, you should change this to match your own environment. You might use codepublic/code or codewww/code or something./li li/keys: You have to store your keyfiles SOMEWHERE. This is that place./li li/.platformsh: Your master environment needs a bit of configuration to be able to login to platform and update the certs on your account. This is where that will go./li /ul h32) Expose the .well-known directory to the Internet/h3 pI mentioned above that letsencrypt test your control over a domain by creating a file which it tries to fetch over the Internet. We already created the writeable directory where the scripts can drop the file, but (wisely) defaults to hide your directories from the Internet. Wersquo;re going to add some configuration to the ldquo;webrdquo; app section to expose this .well-known directory. Find the codeweb:/code section of your file, and the codelocations:/code section under that. At the bottom of that section, add this:/p figure class='code'div class=highlighttabletrtd class=gutterpre class=line-numbersspan class='line-number'1/span span class='line-number'2/span span class='line-number'3/span span class='line-number'4/span span class='line-number'5/span span class='line-number'6/span span class='line-number'7/span span class='line-number'8/span /pre/tdtd class='code'precode class=''span class='line' '/.well-known': /spanspan class='line' # Allow access to all files in the public files directory. /spanspan class='line' allow: true /spanspan class='line' expires: 5m /spanspan class='line' passthru: false /spanspan class='line' root: 'web/.well-known' /spanspan class='line' # Do not execute PHP scripts. /spanspan class='line' scripts: false/span/code/pre/td/tr/table/div/figure pMake sure you match the indents of the other location entries! In my (default) file, I have 8 spaces before that code'/.well-known':/code line. Also note that the coderoot:/code parameter there also uses my webroot directory, so adjust that to fit your environment./p h33) Download the binaries you need during the application ldquo;buildrdquo; phase/h3 pIn order to do this, wersquo;re going to need to have the CLI tool, and a letrsquo;s encrypt CLI tool called lego. Wersquo;ll download them during the ldquo;buildrdquo; phase of your application. Still in the file, find the codehooks:/code section, and the codebuild:/code section under that. Add these steps to the bottom of the build:/p figure class='code'div class=highlighttabletrtd class=gutterpre class=line-numbersspan class='line-number'1/span span class='line-number'2/span span class='line-number'3/span /pre/tdtd class='code'precode class=''span class='line' cd ~ /spanspan class='line' curl -sL | tar -C .global/bin -xJ --strip-components=1 lego/lego /spanspan class='line' curl -sfSL -o .global/bin/platform.phar pWersquo;re just downloading reasonably recent releases of our two tools. If anyone has a better way to get the latest release of either tool, please let me know. Otherwise wersquo;re stuck keeping this up to date manually./p h34) Configure the CLI/h3 pIn order to configure the CLI on your server, we have to deploy the changes from steps 1-3. Go ahead and do that now. Irsquo;ll wait./p pNow connect to your platform environment via SSH (codeplatform ssh -e master/code for most of us). First wersquo;ll add a config file for platform. Edit a file in code.platformsh/config.yaml/code with the editor of choice. You donrsquo;t have to use vi, but it will win you some points with me. Here are the contents for that file:/p figure class='code'div class=highlighttabletrtd class=gutterpre class=line-numbersspan class='line-number'1/span span class='line-number'2/span span class='line-number'3/span span class='line-number'4/span /pre/tdtd class='code'precode class=''span class='line'updates: /spanspan class='line' check: false /spanspan class='line'api: /spanspan class='line' token_file: token/span/code/pre/td/tr/table/div/figure pPretty straightforward: this tells platform not to bother updating the CLI tool automatically (it canrsquo;t ndash; read-only filesystem, remember?). It then tells it to login using an API token, which it can find in the file code.platformsh/token/code. Letrsquo;s create that file next./p pLog into the web UI (you can launch it with codeplatform web/code if yoursquo;re feeling sassy), and navigate to your account settings api tokens. Thatrsquo;s at code (with your own user ID of course). Add an API token, and copy its value into code.platformsh/token/code on the environment wersquo;re working on. The token should be the only contents of that file./p pNow letrsquo;s test it by running codephp /app/.global/bin/platform.phar auth:info/code. If you see your account information, congratulations! You have a working CLI installed./p h35) Request your first certificate by hand/h3 pStill SSH#8217;ed into that environment, letrsquo;s see if everything works./p figure class='code'div class=highlighttabletrtd class=gutterpre class=line-numbersspan class='line-number'1/span span class='line-number'2/span span class='line-number'3/span /pre/tdtd class='code'precode class=''span class='line'lego --webroot=/app/public/ --path=/app/keys/ -a run /spanspan class='line'csplit -f /app/keys/certificates/ /app/keys/certificates/ '/-----BEGIN CERTIFICATE-----/' '{1}' -z -s /spanspan class='line'php /app/.global/bin/platform.phar domain:update -p $PLATFORM_PROJECT --no-wait --yes --cert /app/keys/certificates/ --chain /app/keys/certificates/ --key /app/keys/certificates/ pThis is three commands: register the cert with letsencrypt, then split the resulting file into itrsquo;s components, then register those components with If you didnrsquo;t get any errors, go ahead and test your site ndash; itrsquo;s got a certificate! (yay)/p h36) Set up automatic renewals on cron/h3 pBack to, look for the codecrons:/code section. If yoursquo;re running drupal, you probably have a drupal cronjob in there already. Add this one at the bottom, matching indents as always./p figure class='code'div class=highlighttabletrtd class=gutterpre class=line-numbersspan class='line-number'1/span span class='line-number'2/span span class='line-number'3/span /pre/tdtd class='code'precode class=''span class='line'letsencrypt: /spanspan class='line' spec: '0 0 1 * *' /spanspan class='line' cmd: '/bin/sh /app/scripts/'/span/code/pre/td/tr/table/div/figure pNow letrsquo;s create the script. Add the file codescripts/ to your repo, with this content:/p figure class='code'figcaptionspan/span/figcaptiondiv class=highlighttabletrtd class=gutterpre class=line-numbersspan class='line-number'1/span span class='line-number'2/span span class='line-number'3/span span class='line-number'4/span span class='line-number'5/span span class='line-number'6/span span class='line-number'7/span span class='line-number'8/span span class='line-number'9/span span class='line-number'10/span span class='line-number'11/span span class='line-number'12/span span class='line-number'13/span span class='line-number'14/span span class='line-number'15/span /pre/tdtd class='code'precode class='bash'span class='line'span class=c#!/usr/bin/env bash/span /spanspan class='line' /spanspan class='line'span class=c# Checks and updates the letsencrypt HTTPS cert./span /spanspan class='line' /spanspan class='line'span class=nbset/span -e /spanspan class='line' /spanspan class='line'span class=kif/span span class=o[/span span class=s2quot;$PLATFORM_ENVIRONMENTquot;/span span class=o=/span span class=s2quot;master-7rqtwtiquot;/span span class=o]/span /spanspan class='line' span class=kthen/span /spanspan class='line' span class=c# Renew the certificate/span /spanspan class='line' lego --emailspan class=o=/spanspan class=s2quot;example@example.orgquot;/span --domainsspan class=o=/spanspan class=s2quot;example.orgquot;/span --webrootspan class=o=/span/app/web/ --pathspan class=o=/span/app/keys/ -a renew /spanspan class='line' span class=c# Split the certificate from any intermediate chain/span /spanspan class='line' csplit -f /app/keys/certificates/ /app/keys/certificates/ span class=s1#39;/-----BEGIN CERTIFICATE-----/#39;/span span class=s1#39;{1}#39;/span -z -s /spanspan class='line' span class=c# Update the certificates on the domain/span /spanspan class='line' php /app/.global/bin/platform.phar domain:update -p span class=nv$PLATFORM_PROJECT/span --no-wait --yes --cert /app/keys/certificates/ --chain /app/keys/certificates/ --key /app/keys/certificates/ /spanspan class='line'span class=kfi/span /span/code/pre/td/tr/table/div/figure pObviously you should replace all those and email addresses with your own domain. Make the file executable with codechmod u+x scripts/, commit it, and push it up to your environment./p h37) Send a bragging email to Crell/h3 pTechnically this isnrsquo;t supposed to be possible, but YOU DID IT! Make sure to rub it in./p pimg class=center src= title=#34;Larry is waiting to hear from you. (photo credit Jesus Manuel Olivas)#34; alt=#34;Larry is waiting to hear from you. (photo credit Jesus Manuel Olivas)#34;/p pGood luck!/p pPS ndash; Irsquo;m just gonna link one more time to the guy whose snippet made this all possible: a href= Barreiro/a did the hardest part of this. Irsquo;m grateful that he made his notes public!/p

Palantir: The Coolest Camp Ever

Tue, 02/21/2017 - 18:31
spanThe Coolest Camp Ever/span spana title=View user profile. href= lang= about= typeof=schema:Person property=schema:name datatype= xml:lang=brandt/a/span spanTue, 02/21/2017 - 10:31/span Alex Brandt time datetime=2017-02-21T12:00:00ZFeb 21, 2017/timeimg src= width=1300 height=731 alt=Illustration of Northern Lights typeof=foaf:Image /div class=lede pWe’re heading to Iceland February 24 - 26!/p /div In this post we will cover... ulli dir=ltr p dir=ltrWhy we’re excited for this new event/p /li li dir=ltr p dir=ltrWho from Palantir will be speaking/p /li li dir=ltrSome fun facts about Iceland/li /ulsection class=ctah3 class=cta__title /h3pStay connected with the latest news on web strategy, design, and development./p span class=cta__link a href= up for our newsletter./a /span /sectionpBesides being the recent desired destination for Instagram #wanderlust-ers, Iceland is now home to an exciting new Drupal event: a href= Northern Lights/a. With twenty speakers, lots of coffee, and a planned sightseeing trip to see the Golden Circle and Northern Lights, it is sure to be an exciting inaugural event./p pA small crew of Palantiri will be proudly representing, so if you are making the trek overseas, keep an eye out and say hi to a href= Manley/a, a href= Jackson/a, and a href= Plunkett/a while you’re taking in the sessions and sights./p pCheck out the a href= and make sure to stop by our sessions./p p /p pstrongKickoff Meetings, by Allison Manley /strong/p ulliTime: Saturday, 10:45 - 11:35/li liLocation: Room ÞINGVELLIR/li /ulpHow do you make the most use of your face-to-face time with your client and lay the groundwork for a successful project?/p pAllison will outline how to get the most out of the kickoff meetings that initiate any project. She'll talk about pre-meeting preparation and how to keep organized, and also give some tips on agenda creation, how to keep meetings productive (and fun), and what steps need to be taken once the meetings adjourn./p p /p pstrongCompetitive Analysis: Your UX must-have on a budget, by Michelle Jackson /strong/p ulliTime: Sunday, 14:15-15:00/li liLocation: Room ÞINGVELLIR/li /ulpA tight budget and time constraints can make dedicating time and resources to understanding audience needs challenging. Competitive analysis is an affordable way to evaluate how competitor sites are succeeding or failing to meet the needs of your audience./p pMichelle will cover how competitive analysis can help you avoid competitor pitfalls, gain insight into what your users want, and lead to better decision-making before you invest in and implement new designs and technical features./p h37 Facts You Might Not Have Known About Iceland/h3 ulliIceland was one of the last places on earth to be settled by humans./li liThey are getting their first Costco in May./li li60% of the Icelandic population lives in Reykjavík./li liBabies in Iceland are routinely left outside to nap./li liSurprisingly, Iceland is not the birthplace of ice cream./li liFirst names not previously used in Iceland must be approved by the Icelandic Naming Committee./li liOwning a pet turtle is against the law. Sorry Rafael, Franklin, and this kid:/li /ulpimg alt=I like turtles data-entity-type=file data-entity-uuid=957ce4d0-23f9-49ec-98d0-44de552f91e8 src= //p p /p pFact Sources:, aside class=ctah3 class=cta__title /h3pWe want to make your project a success./p span class=cta__link a href='s Chat./a /span /asideul class=list--simpleli class=taga href= hreflang=enCommunity/a/li li class=taga href= hreflang=enPeople/a/li /ul

InternetDevels: Collection of some useful Drupal 8 modules in 2017

Tue, 02/21/2017 - 18:01
div class=field field--name-field-preview-image field--type-image field--label-hiddendiv class=field__itemsdiv class=field__item evenimg src= width=937 height=622 alt=Collection of some useful Drupal 8 modules in 2017 //div/div/divdiv class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evenpOur tradition of presenting you short overviews of several modules of the month continues with today’s article. Previously we offered you a href= target=_blanksome great contributed Drupal 8 modules in June 2016/a a collection of a href= target=_blankmodules in May 2016/a. In 2017 we published some modules, with the latest available release for Drupal 8 scheduled for the beginning of this year./p a href= more/a/div/div/div

Xeno Media: Xeno Media's Jim Birch presents at DrupalCamp Northern Lights 2017

Tue, 02/21/2017 - 17:01
pOrganized by the Icelandic Drupal community, the inaugural a href= Lights Drupal Camp/a will take place on the this weekend, February 24th - 26th, 2017 at the University of Iceland in Reykjavik. We are honored that our Digital Strategist, Jim Birch was invited to speak./p pJim will present his a href= SEO and Drupal/a talk--which covers the modern state of Search Engine Optimization and how we at Xeno Media define best practices for technical SEO using Drupal.  It also presents ideas on how to guide and empower clients to create the best content to achieve their digital goals./p pThis presentation will review:/p ulliWhat Holistic SEO is, and some examples of modern search results explained./li liThe most common search engine ranking factors, and how to keep up to date./li liAn overview of Content strategy and how it can guide development./li liAn overview of technical SEO best practices in Drupal./li /ulpThe presentation is:/p ulliSession time slot: Sunday 15:15 - 16:00/li liSession room: Room Eyjajallajökull/li /ulpa href= the full schedule/a./p

J-P Stacey: Last of the Drupal 8 API blogposts... for now, anyway

Tue, 02/21/2017 - 14:23
pI've been having tremendous fun writing a href= about each of the Drupal 8 APIs/a in turn, and I hope people have been finding them useful. They've certainly been eye-openers for me, as I've always focussed on achieving a clear worked example, and doing that alone unearths all sorts of questions (and usually—but not always—answers) about how Drupal 8's core itself works./p pa href= more of Last of the Drupal 8 API blogposts... for now, anyway/a/p

Wim Leers: OpenTracker

Mon, 02/20/2017 - 23:26
pThis is an ode to Dirk Engling#8217;s a href= pIt#8217;s a a href= tracker/a./p pIt#8217;s what powered a href= Pirate Bay in 2007–2009/a./p pI#8217;ve been using it to power the downloads on a href=http://driverpacks.net since the end of November 2010. gt;6 years. It facilitated 9839566 downloads since December 1, 2010 until today. That#8217;s almost 10 millionnbsp;downloads!/p h2Stability/h2 pIt#8217;s one of the most stable pieces of software I ever encountered. I compiled it in 2010, it never oncenbsp;crashed./p precodewim@ajax:~$ ls -al /data/opentracker total 456 drwxr-xr-x 3 wim wim 4096 Feb 11 01:02 . drwxr-x--x 10 root wim 4096 Mar 8 2012 .. -rwxr-xr-x 1 wim wim 84824 Nov 29 2010 opentracker -rw-r--r-- 1 wim wim 3538 Nov 29 2010 opentracker.conf drwxr-xr-x 4 wim wim 4096 Nov 19 2010 src -rw-r--r-- 1 wim wim 243611 Nov 19 2010 src.tgz -rwxrwxrwx 1 wim wim 14022 Dec 24 2012 whitelist /code/pre h2Simplicity/h2 pThe simplicity is fantastic. Getting up and running is fantastically simple: codegit clone git:// .; make; ./opentracker/code and you#8217;re up and running. Let me quote a bit from its homepage, to show that it goes the extra mile to make usersnbsp;successful:/p blockquote pemopentracker/em can be run by just typing code./opentracker/code. This will make emopentracker/em bind to code0.0.0.0:6969/code and happily serve all torrents presented to it. strongIf ran as root, emopentracker/em will immediately chroot to code./code and drop all priviliges after binding to whatever tcp or udp ports it isnbsp;requested./strong/p /blockquote pEmphasis mine. And I can#8217;t emphasize my emphasisnbsp;enough./p h2Performance span class=ampamp;/spannbsp;efficiency/h2 pAll the while handling dozens of requests per second, codeopentracker/code causes less load than background processes of the OS. Let me again quote a bit from itsnbsp;homepage:/p blockquote pemopentracker/em can easily serve multiple thousands of requests on a standard plastic span class=capsWLAN/span-router, limited only by your kernels capabilitiesnbsp;;)/p /blockquote pThat#8217;s also what it said in 2010. I didn#8217;t test it on a “plastic span class=capsWLAN/span-router”, but everything I#8217;ve seen confirmsnbsp;it./p h2Flexibility/h2 pIts defaults are sane, but what if you want to have anbsp;whitelist?/p ol liUncomment the code#FEATURES+=-DWANT_ACCESSLIST_WHITE/code line in the codeMakefile/code./li liRecompile./li liCreate a file called codewhitelist/code, with one torrent hash pernbsp;line./li /ol pHave a need to update this whitelist, for example a new release of your software to distribute? Of course you don#8217;t want to reboot your codeopentracker/code instance and lose all current state. It#8217;s got younbsp;covered:/p ol liAppend a line to codewhitelist/code./li liSend the codeSIGHUP/code UNIX signal to make codeopentracker/code reload its whitelistsup id=fnref:3a href=#fn:3 class=footnote-ref1/a/sup./li /ol h2Deployment/h2 pI#8217;ve been in the process of moving off of my current (super reliable, but also expensive) hosting. There are plenty of specialized span class=capsHTTP/span server hostssup id=fnref:1a href=#fn:1 class=footnote-ref2/a/sup and even codersync/code hostssup id=fnref:2a href=#fn:2 class=footnote-ref3/a/sup. Thanks to their standardization and consequent scale, they can offer very lownbsp;prices./p pBut I also needed to continue to run my own BitTorrent tracker. There are no hosts that offer that. I don#8217;t want to rely on another tracker, because I want there to be zero affiliation with illegal files. This is a BitTorrent tracker that does not allow emanything/em to be shared: it only allows the software releases made by a href=http://driverpacks.net to benbsp;downloaded./p pSo, I found the cheapest span class=capsVPS/span I could find, with the least amount of resources. For span class=capsUSD/span $13.50sup id=fnref:4a href=#fn:4 class=footnote-ref4/a/sup, I got a span class=capsVPS/span with 128 span class=capsMB/span span class=capsRAM/span, 12 span class=capsGB/span of storage and 500 span class=capsGB/span of monthly traffic. Then I set itnbsp;up:/p ol licodessh/code‘d ontonbsp;it./li licodersync/code‘d over the files from my current server (alternatively: codegit clone/code and codemake/code)/li liadded code@reboot /data/opentracker/opentracker -f /data/opentracker/opentracker.conf/code to my codecrontab/code./li liremoved the codeCNAME/code record for, and instead made it an codeA/code record pointing to my newnbsp;VPS./li liwatched code;format=txt/code on both the new and the old server, to verify traffic was moving over to my new cheap codeopentracker/code VPS as the DNS changesnbsp;propagated/li /ol h2Drupalnbsp;module/h2 pSince a href= runs on a href=https://www.drupal.orgDrupal/a, there of course is an a href= Drupal module/a which I wrote. It provides an span class=capsAPI/spannbsp;to:/p ul licreate code.torrent/code files for certain files uploaded tonbsp;Drupal/li liappend to the OpenTracker codewhitelist/code file sup id=fnref:5a href=#fn:5 class=footnote-ref5/a/sup/li liparse the statistics provided by the OpenTrackernbsp;instance/li /ul pYou can see the live stats at a href= h2Conclusion/h2 pcodeopentracker/code is the sort of simple, elegant software design that makes it a pleasure to use. And considering the a href= commit frequency/a over the past decade, with many of those commits being nitpick fixes, it also seems its simplicity also leads to excellent maintainability. It involves the span class=capsHTTP/span and BitTorrent protocols, yet only relies on a single I/O library, and its source code is very readable. Not only that, but it#8217;s also highlynbsp;scalable./p pIt#8217;s the sort of software many of us aspire tonbsp;write./p pFinally, its license. A glorious licensenbsp;indeed./p blockquote pThe beerware license is very open, close to public domain, but insists on honoring the original author by just not claiming that the code is yours. Instead assume that someone writing Open Source Software in the domain you’re obviously interested in would be a nice match for having a beernbsp;with./p pSo, just keep the name and contact details intact and if you ever meet the author in person, just have an appropriate brand of sparkling beverage choice together. The conversation will be worth the time for both ofnbsp;you./p /blockquote pDirk, if you read this: I#8217;d love to buy you sparkling beverages some timenbsp;:)/p div class=footnotes hr / ol li id=fn:3 pcodekill -s HUP codepidof opentracker/code/code#160;a href=#fnref:3 class=footnote-backref#8617;#xFE0E;/a/p /li li id=fn:1 pI#8217;m using a href=;s Simple Hosting/a.#160;a href=#fnref:1 class=footnote-backref#8617;#xFE0E;/a/p /li li id=fn:2 pa href=https://rsync.net;a href=#fnref:2 class=footnote-backref#8617;#xFE0E;/a/p /li li id=fn:4 p$16.34 including 21% Belgian span class=capsVAT/span.#160;a href=#fnref:4 class=footnote-backref#8617;#xFE0E;/a/p /li li id=fn:5 preload code*/10 * * * * kill -s HUP codepidof opentracker/code/code#160;a href=#fnref:5 class=footnote-backref#8617;#xFE0E;/a/p /li /ol /div ul class=tags lispan class=lineage-item lispan class=lineage-item lineage-item-level-0Drupal/span/li lispan class=lineage-item lineage-item-level-0deployment/span/li lispan class=lineage-item lineage-item-level-0open source/span/li /ul

Web Wash: How to Create Responsive Image Galleries using Juicebox in Drupal 8

Mon, 02/20/2017 - 20:53
There are a lot of image gallery libraries out there, but today I want to show you how to use Juicebox. Juicebox is an HTML5 responsive image gallery and it integrates with Drupal using the Juicebox module. Juicebox is not open source, instead it offers a free version which is fully useable but you are limited to 50 images per gallery. The pro version allows for unlimited images and more features. If you’re looking for an alternative solution look at Slick, which is open source, and it integrates with Drupal via the Slick module. I will cover this module in a future tutorial. In this tutorial, you’ll learn how to display an image gallery from an image field and how to display a gallery using Views.