Upgrading Drupal VM in a BLT-powered project
Limiting the amount of surprises you get when developing a large-scale Drupal project is always a good thing. And to that end, Acquia's BLT (Build and Launch Tools) wisely chooses to leave Drupal VM alone when updating BLT itself. Updates to Drupal VM can and should be done independently of install profile and development and deployment tooling.

But this creates a conundrum: how do you upgrade Drupal VM within a project that uses BLT and has Drupal VM as one of it's composer dependencies? It's actually quite simple—and since I just did it for one of my projects, I thought I'd document the process here for future reference:
Provisionally approved coding standards proposals December 20, 2016
The TWG coding standards committee has provisionally approved 3 coding standards change proposals. These will need to be finally approved and implemented by core before being fully ratified.
The process for proposing and ratifying changes is documented on the coding standards project page. Please note, a change to this process is being proposed to streamline the interaction between the coding standards body, Drupal Core, and the Coder project, please provide any feedback on that issue.
Provisionally approved proposals awaiting core approval and implementation:
- Adopt airbnb javascript coding standards
- Set a standard for @var inline variable type declarations
- PHP 5.4 short array syntax coding standards
Interested in helping out?
You can get started quickly by helping us to update an issue summary or two or dive in and check out the full list of open proposals and see if there's anything you'd like to champion?
These proposals will be re-evaluated during the next coding standards meeting currently scheduled for December 20th. At that point the discussion may be extended, or if clear consensus has been reached one or more policies may be dismissed or ratified and moved to the next step in the process.
Provisionally approved coding standards proposals December 20, 2016
The TWG coding standards committee has provisionally approved 3 coding standards change proposals. These will need to be finally approved and implemented by core before being fully ratified.
The process for proposing and ratifying changes is documented on the coding standards project page. Please note, a change to this process is being proposed to streamline the interaction between the coding standards body, Drupal Core, and the Coder project, please provide any feedback on that issue.
Provisionally approved proposals awaiting core approval and implementation:
- Adopt airbnb javascript coding standards
- Set a standard for @var inline variable type declarations
- PHP 5.4 short array syntax coding standards
Interested in helping out?
You can get started quickly by helping us to update an issue summary or two or dive in and check out the full list of open proposals and see if there's anything you'd like to champion?
These proposals will be re-evaluated during the next coding standards meeting currently scheduled for December 20th. At that point the discussion may be extended, or if clear consensus has been reached one or more policies may be dismissed or ratified and moved to the next step in the process.
Adding a class to default images in Drupal 8
As with many sites, images are an important part of the design for my art gallery listings site, The Gallery Guide. The tricky part is that the site is full of user-generated content, so not all of the listings have images attached.
Where there isn't an image, we use a placeholder - partly for our 'tiles' design pattern, but also because the image is an integral part of the design for an individual listing on large screens. On a small screen, this placeholder image takes up a lot of space, and doesn't add much, so I wanted to hide it at a certain breakpoint.
It took me a while to get my head around how to get into the right place to be able to do this in Drupal 8, following my old standby of sprinkling my code with dpm statements (replaced in D8 with kint). I should really have cracked out XDebug, but it does slow things down quite a bit, and I was too lazy to uncomment a few lines in php.ini. In this case it would have definitely made sense, because the kint output was so large that it slowed my browser down to a crawl - probably because I hadn't previously read this DrupalEasy article.
Having looked at the variables in scope inside template_preprocess_field, I saw that the relevant object was an instance of the class FileFieldItemList, which extends EntityReferenceFieldItemList. This is a good example of where a good IDE like PHPStorm can really help - having found the class, I could quickly navigate to its parent, and see its methods - in this case the relevant one was referencedEntities():
/**
* Implements hook_preprocess_field().
*/
function mytheme_preprocess_field(&$variables, $hook) {
switch ($variables['element']['#field_name']) {
// Machine name of the field
case 'field_image':
// If this is the default image, add a class.
$images = $variables['element']['#items']->referencedEntities();
if (empty($images)) {
$variables['attributes']['class'][] = 'image__default';
}
break;
}
}
Once that class has been added, we can apply CSS to it - in my case it's in a SASS mixin that gets applied to a few different elements:
@mixin image-main {
&.image__default img {
@include breakpoint($mobile-only) {
display: none;
}
}
}
Here's an example on the live site of a listing with no image uploaded, and by comparison, a listing with an image - as you can see, the design wouldn't work on large screens if the placeholder image wasn't there, but on small screens the placeholder just takes up space without giving the user anything worth looking at.
The solution isn't perfect, because the browser will still download the image, even if it's set to display: none, as Tim Kadlec wrote about a while ago. But it'll do for a side project...
Multiple MailChimp Accounts with Drupal
A couple of months ago, team ThinkShout quietly introduced a feature to the MailChimp module that some of us have really wanted for a long time—the ability to support multiple MailChimp accounts from a single Drupal installation. This happened, in part, after I reached out to them on behalf of the stakeholders at Cornell University's ILR School, where I work.
aaron Tue, 12/20/2016 - 11:33Migrating Content References in Drupal 8
An Introduction to Stubs
A common need in our projects is the ability to migrate data that references other content. This can be in the form of taxonomy hierarchy (i.e. parent > child relationship) or content that is attached such as images, videos, or other nodes that exist as standalone entities in the system.
Adding Performance Metrics to Your Behat Test Runs
Adding behavioural testing to your project can do wonders for catching regressions, and even if you don't start out your development writing tests in true Behavioral Driven Development style, you'll greatly benefit from having this type of test coverage.
Within my team, we use an external service to run the tests automatically when pull requests are made to our development branch. The results that come back are immensely helpful when looking over a pull request and no code is merged into the codebase until the test run is green. We have caught several bugs and regressions using this method, but we'd like to add more test coverage to better catch future regressions.
Additional FeedbackWhile developing and finessing the testing stack, we started thinking about what other feedback we could gain from our tests runs. After all, we build a whole site to test out site creation from our profile and then make requests to a bunch of pages on the built test site.
Why not try and get some performance metrics from the test run? You might immediately be concerned that adding code and database queries to a test run might negatively impact the test run, but we haven't seen an increase in the time of the test runs or any failing tests related to added performance-related code. You might also question turning on modules that won't be on in production while you're trying to test sites as if they are in production. That concern is a very legitimate one, but in my experience, you'll run into something you have to change for setup on a hosted test runner service. We weren't concerned with either potential issue.
Drupal ModulesAfter we had come up with the idea of adding performance metrics to our test runs and weighed the potential drawbacks, we needed to write some code to complete our fantastic and awesome idea. Luckily in the Drupal world, there's usually a module for that.
We decided to use the Performance Logging and Monitoring module for our use case. The module "provides performance statistics logging for a site, such as page generation times, and memory usage, for each page load." That description is exactly what we were looking for. Contrib for the win!
Module SetupOnce you enable the module, you'll have to first grant yourself the role to administer the performance logging before you can do anything. Not having this permission on my developer role threw me for a loop for a couple of minutes, so don't let it get you too!
The module's configuration page lies under the Development subsection of the Admin Configuration menu. You can choose from summary, detailed, and/or query logging as well as exclude certain paths from logging and set an access threshold for displaying only the most accessed pages in your summary report.
We have a test setup where we change a few settings from how our production sites are configured. In a testing core module, we list the performance module as a dependency and setup some initial performance logging variables for the test run.
// Setting performance logging variables.
variable_set('performance_detail', 1);
variable_set('performance_nodrush', 1);
variable_set('performance_threshold_accesses', '2');
variable_set('performance_query', 1);
variable_set('performance_summary', 1);
Performance Logging...Caused Performance Problems
Initially, I thought I had picked a good configuration for what we wanted to get out of the report. The problem was that our test runs were no longer passing on the feature branch I had put the code in. The tests were erroring on memory exhaustion when trying to save nodes or beans.
We started to think something we added to the codebase had caused a regression and that this coding error might eat up all the memory on our production servers. Needless to say, we focused a lot on our memory exhaustion error.
I had a face palm moment when I realised that the database query logging was causing the issue. It was even written on the configuration page, "Enabling this will incurr some memory overhead as query times and the actual query strings are cached in memory as arrays for each page, hence skewing the overall page memory reported." But I didn't notice the memory warning while initially setting up the module.
// Setting performance logging variables.
variable_set('performance_detail', 1);
variable_set('performance_nodrush', 1);
variable_set('performance_threshold_accesses', '2');
// Don't check for summary detail since not using in report.
// variable_set('performance_summary', 1);
// Don't add query logging since it adds memory overhead.
// variable_set('performance_query', 1);
Our variable sets on module install were modified to reflect the code above. Unfortunately, we had to axe the query performance due to our memory issue, and we also disabled the performance logging summary since that table is used to create a display for the module UI and we were creating our own report and display.
Adding the Performance Logging to Our Travis CI Test RunsNow that we could see the module logged the stats we wanted and what configuration we could use log performance and still allow the test runs to pass. Adding the logging setup to our Travis CI script was fairly straightforward.
- drush si express express_profile_configure_form.express_core_version=cu_testing_core
We build our sites using a custom distribution profile, and to modify how our Drupal site is installed for the test run, we added a step in the Drupal installation phase for choosing which core module you want to use for site creation. We enable the testing core module to setup some variables just for the Travis test runs.
// Turn on error reporting only for serious errors.
// Warnings were causing dumb exceptions in Behat and the messages don't
// interfere with the tests.
error_reporting(E_ERROR | E_PARSE);
One important thing to note is that PHP warnings and notices end up causing Behat test runs to fail on Travis CI exiting with an error, non-zero, code. Because we know we have a lot of warnings and notices, hey nobody's perfect, we decided to turn off reporting and only enable for the most serious of PHP errors. Other than that, we mainly turned off things like Varnish and Memcache which are hard and resource intensive to test out on Travis.
Displaying the Results at the End of the Test RunInstead of doing some fancy posting of our test results to an external URL, we decided to just print the logging after our verbose Behat test run output.
# Run Behat tests.
- ./bin/behat --config behat.yml --verbose
# Output performance logging data.
- drush scr profiles/express/tests/travis-ci/log-express-performance.php
Behat simply installs a site, runs the test suite, and then we print our logging results out at the end of the Travis test run log. We decided to print out four data points for our display output.
print_r('Path: ' . $path['path'] . "\n");
print_r('Accessed: ' . $count . "\n");
print_r('Memory Consumption: ' . $memory_average . "MB\n");
print_r('Load Time: ' . $load_average . " Milliseconds\n");
We limited our report to the top 15 pages by the number of requests. Our top three pages were the front page, the user dashboard, and the "node/add" form.
That about wraps it up. We do intend to add more data to our report and gain more insight into code performance by doing memory intensive things and adding Behat tests solely for performance logging issues. Visiting the Features page and reverting features are a good example of performance tests we could add.
Also, while having the performance metrics displayed at the end of the test run report is nice, you can't really get a quick sense of trends in the data unless you would manually add up all the reports. We use the ELK stack for displaying other logs, and we plan to POST data back to that instance for better trend monitoring in the future.
I highly encourage you to try getting more feedback data from your automated test runs. While they made impact your test runs and add memory overhead, you can always use the reports for marking general trends over time even if the results aren't perfectly accurate.
Developer BlogFixing Drupal 8 Xampp cURL error 60: SSL certificate
Recently, we wrote a guide on using Xampp with Drupal 8 for local development.
After reading the guide, one of our users asked,
How do you fix the cURL 60 SSL error that I keep getting?
The cURL SSL 60 error occurs when you're trying to install Drupal module by copying the FTP link from drupal.org into the "Add modules" screen.

This error is caused by the default SSL certificate provided by Xampp.
Commands I use when creating a patch for drupal.org
I have honed a selection of commands that I regularly use in the creation and application of patches. Here is a run-down of my most useful commands.
WarChild new MMP site in Drupal launched
War Child UK describes itself as “a small charity that protects children living in some of the world's most dangerous war zones”. Founded in 1993, the charity works with vulnerable children and communities in war torn areas; providing safe spaces, access to education, skills training and much more to ensure that children’s lives are not torn apart by war.
War Child International has multiple offices all over the world, protecting, educating, and empowering marginalised children.
This week in new features - Build-time variables
As we wrote about recently, all of the inputs to an application running on Platform.sh are clearly defined, predictable, and with one exception entirely under your control as a user. We’re happy to announce that we’ve added one more input, and it’s also under user control: Project-level variables available at build time.
5 tips for choosing the right company to move your site to Drupal 8

As of December 4th, 2016, at least 82,000+ sites are running Drupal 6. Since Drupal 6 is no longer actively supported by the Drupal community, a lot of people urgently need to migrate to a newer version! So, what if you have of those sites and want to move to the most recent Drupal version?
read morePalantir.net's Guide to Digital Governance: eCommerce
This is the thirteenth installment of Palantir.net’s Guide to Digital Governance, a comprehensive guide intended to help get you started when developing a governance plan for your institution’s digital communications.
In this post we will cover...- Why it's extremely important to handle eCommerce appropriately
- The minimum requirements for collecting online payments
- Other things you need to consider when creating a payment collection policy
Strict federal laws govern the transmission, collection, and retention of credit and debit card data, whether those interactions occur through the web, by phone, or in person. Any organization involved in collecting payments via credit or debit cards should ensure that all staff involved in a payment collection process are appropriately trained and fluent in the organization’s policies regarding the collection and retention of credit and debit card data. And obviously, those policies should adhere to federal and state laws (and international laws, if your reach extends that far).
Minimum Requirements for Collecting Online Payments
Bank Account
Any organization intending to collect credit or debit card payments first needs a bank account in order to receive those payments. The bank account is where the money goes once a payment transaction is completed.
eMerchant & Payment Gateway
Once you have a bank account where money can be deposited, you will then need to establish accounts with an eMerchant and Payment Gateway provider. Some eMerchant and Payment Gateway services are provided by the same organization. For example, PayPal will handle both the eMerchant and Payment Gateway functions of eCommerce, so all you need to use a service like PayPal is a bank account.
Some organizations have existing payment relationships with companies that serve as eMerchants. It may be more cost-effective to use a company with whom you already have a relationship, in which case there are various Payment Gateway providers that could be used to facilitate the transaction between purchaser and the banks involved in the payment process.
Secure (Encrypted) Online Form
In order to collect the payment details from users, you then will need a secure (meaning encrypted) online form for your website. This is the registration form users will complete with their credit or debit card information to make a payment. The form must be served over a secure and encrypted protocol (i.e. https).
Secure Data Storage
Encryption on the online form is not the last step in security, however. Payment transactions also create customer data, specifically their credit card data, which is highly sensitive and must be handled carefully. Using a reliable payment gateway service eliminates this concern because the entire payment transaction is handled on their secure servers.
Organizations that want to store custom credit card and financial data must undergo a PCI compliance audit and certification. This process is lengthy and expensive, and requires yearly renewals and constant monitoring. We don’t recommend doing this yourself, unless the volume of payments are so large that the cost of PCI compliance is less than the fees you will pay a gateway for the service, which is exceedingly rare for the majority of eCommerce websites.
For complex transactions, such as recurring payments, using a reliable gateway service is the only cost-effective option. But even for simple transactions, the general rule is to never store customer payment data. For most organizations, the risks are too high and the costs too great.
Creating a Policy
The minimum requirements for collecting payments online only scratches at the surface of the issues you may need to consider in terms of governing the use of online payment collection for your organization. Here are some additional things to consider:
- Who may have eCommerce capabilities?
- What is the process for initiating eCommerce on the site?
- What is the process for being added to the existing eCommerce solution?
- How many parts of your organization need to collect payments online?
- Do they each need their own implementation of an eCommerce solution? Or can they share?
- Do they each need their own bank account? (This is often the case when reporting of online payments, especially charitable contributions, requires separation between departments or budget lines for accounting purposes.)
- Who is responsible for ensuring that federal and organizational guidelines are followed?
- Where will credit card and user data be saved or stored throughout the payment process?
- Who will have access to any credit card and user data?
- What security practices need to be followed to protect credit card information?
Decisions surrounding eCommerce will invariably involve key decision-makers, stakeholders, and gatekeepers within the Finance department (or correlated function) and IT department within your organization. You are likely to need their cooperation in determining a governance plan for eCommerce.
This post is part of a larger series of posts, which make up a Guide to Digital Governance Planning. The sections follow a specific order intended to help you start at a high-level of thinking and then focus on greater and greater levels of detail. The sections of the guide are as follows:
- Starting at the 10,000ft View – Define the digital ecosystem your governance planning will encompass.
- Properties and Platforms – Define all the sites, applications and tools that live in your digital ecosystem.
- Ownership – Consider who ultimately owns and is responsible for each site, application and tool.
- Intended Use – Establish the fundamental purpose for the use of each site, application and tool.
- Roles and Permissions – Define who should be able to do what in each system.
- Content – Understand how ownership and permissions should apply to content.
- Organization – Establish how the content in your digital properties should be organized and structured.
- URL Naming Conventions – Define how URL patterns should be structured in your websites.
- Design – Determine who owns and is responsible for the many aspects design plays in digital communications and properties.
- Personal Websites – Consider the relationship your organization should have with personal websites of members of your organization.
- Private Websites, Intranets and Portals – Determine the policies that should govern site which are not available to the public.
- Web-Based Applications – Consider use and ownership of web-based tools and applications.
- E-Commerce – Determine the role of e-commerce in your website.
- Broadcast Email – Establish guidelines for the use of broadcast email to constituents and customers.
- Social Media – Set standards for the establishment and use of social media tools within the organization.
- Digital Communications Governance – Keep the guidelines you create updated and relevant.
The quest for performance improvements - 3rd sprint
Last week we had our third sprint at the socialist party to improve the performance. In the previous blogs I have explained what we have done so far. You can read them here and here.
Since the previous sprint a guy with a lot of database knowledge has done some analysis of the queries and he came up with the following observations. Most queries are build in CRM_Contact_BAO_Query class and that class adds a join on the tables civicrm_group_contact and civicrm_group_contact_cache and a where clause with an or on both tables. See example query below.
SELECT contact_a.id AS contact_id FROM civicrm_contact contact_a LEFT JOIN civicrm_group_contact `civicrm_group_contact-2304` ON (contact_a.id = `civicrm_group_contact-2304`.contact_id AND `civicrm_group_contact-2304`.status IN ("Added")) LEFT JOIN civicrm_group_contact_cache `civicrm_group_contact_cache_2304` ON contact_a.id = `civicrm_group_contact_cache_2304`.contact_id WHERE ( ( ( `civicrm_group_contact-2304`.group_id IN ( 2304 ) ) OR ( `civicrm_group_contact_cache_2304`.group_id IN (2304) ) ) ) GROUP BY contact_a.id;
Such a query is performing slow because it is looking up all records in civicrm_contact, all records in civicrm_group_contact_cache and all records civicrm_group_contact. Rebuilding the query to use an IN statement will increase the performance. See the query below:
SELECT contact_a.id AS contact_id FROM civicrm_contact contact_a
WHERE contact_a.id IN (SELECT contact_id FROM civicrm_group_contact WHERE group_id IN (2304) AND status IN ("Added"))
OR contact_a.id IN (SELECT contact_id FROM civicrm_group_contact_cache ON groupId IN (2304))
GROUP BY contact_a.id;
Luckily we could do this in an extension because CRM_Contact_BAO_Query provides functionality to change and tweak the query. The extension we have developed could be found on github (https://github.com/CiviCooP/org.civicoop.groupperformance)
In our test environment the extension has a visible effect on the performance. Searching for contact went down from 15 seconds to 3 seconds. We have also installed the extension in the production environment and we are waiting on feedback from end users whether they experience a noticble increase in performance.
Read more
- https://civicrm.org/blog/jaapjansma/the-quest-for-performance-improvements
- https://civicrm.org/blog/jaapjansma/the-quest-for-performance-improvements-2nd-sprint
Drupal
#DugMuc16 - closing time!
Our CEO Manuel and Joe, Marcel and Serkan from our team visited the last Drupal event of this year in our calendar: DrupalCamp Munich alias #dugmuc. It's been a pleasure to support this event as Silver Sponsor! With the 4th of December, we closed the Drupal season with great “Days”, “Camps” and “Cons” in 2016.
Drupal Drupal Community Drupal Planet Drupal Camp EventsLet’s collaborate for Paragraphs
AGILEDROP: Janez Urevc: »If you are not involved in the community, you are leaving the choices about your future in the hands of the others«
Janez Urevc is a Slovenian mastermind when it comes to Drupal and its connection with media. Online, he is found under the name of ‘slashrsm’ and currently works in MD Systems. Before answering he takes a deep breath, like he would like to speak without a single pause. But he does it to carefully gather his thoughts, who come out as a clear opinion about a variety of topics. We talked about Drupal events, Drupal community and media management, which is considered as the main weakness in Drupal’s core.
Together with Iztok Smolic you have organized a first user group meetup in Slovenia back in… READ MORE My 2016 Recap
I don't usually evaluate what happen in my life at the end of Year, but this year was different in many good ways
I am publishing this recap today because today is my birthdate number 40th, I know, I know a significant number.
But, beyond that number, I want to remember a lot of great things I accomplished this year, pursuing a dream I had from my childhood.
My dream came after reading the first book I bought with my money "Around the world in eighty days" written by Jules Verne; As you can imagine my dream was travel around the world.
Fortunately, This year that dream became real and I could combine with other passion, contributing to Open Source and more specifically to Drupal Community.
Here you could see a map of my voyage.

Map details here
Let me summary my dream with some stats.
DistanceAs you can imagine making a trip around the world, involve a lot of travel and just to put some context the Equator is about 40,075 kilometers around the world.
When I started my trip wasn't planned in about 75% of the route, mostly because I need to resolve some pending visas and I switch some countries in the process.
But the reality was that by the time I was about to complete one round around the world I got some invitations to participate in others, events combines with some events that I was to participate.
As results, I flu 146.671 kilometers which mean 3.5 times the extension of the Equator line, and that was only by flu. Becuase I did more that to millions step and other kilometers by bus and train. I also did some leagues by boat, but I didn't have records about that distance.
Check the distances in detail in the following chart.

A lot of things happens on this trip, most of them good and nothing awful, only time to time I get lost in translation and sometimes actually lost, you know the wrong bus or wrong subway line, and you end on the other side of the city.
Talking about scary situations, well I got two haircuts one in Hanoi, Vietnam and other in Bangkok, Thailand; I have to recognize could be worst, but I always got something between what I want and between what the hair stylist want. But still with two ears and my honor intact.
Also, I have the opportunity to read two books of my favorite write of black novel Henning Mankell
I wrote a daily blog post to try to document all that I live, but to be honest only until my first round around the world, after that I was so tired, and I cheat, and after that, I wrote an entry by country, sorry about that.
One frightening moment was when a border officer report to me than I didn't have space for more stamps and maybe in my next destination I could be deported back to home.
That moment was discouraging for me because I still have to visit four more countries before the end of my tour in next five weeks. So my solution was to include another country in the tour, Colombia, maybe you don't know, but I am Colombian. So I visited Colombia, get my passport and participate in a Drupal Meetup in Bogota. Also, I visited my family in Bucaramanga quite a trip inside my journey.
Talking about numbers, I collect thousands of pictures and more valuable dozens of new friend around the world.
Check the figures in detail in the following chart.

When I plan my trip, I want to maximize the number of countries regarding Drupal communities I could visit on my route. I could visit Africa or the Middle East; Europe was skipped deliberately because their communities are healthy and one of my goals was to visit emerging communities regarding Drupal.
Even that I could visit more than 30 cities in 18 countries spread over four continents.
A lot of friends said all my trip was a huge vacation and maybe it was. But only in 3 cities, this adventure was totally tourist; those places were:
- Tasmania in Australia
- Honolulu in Hawaii
- Bucaramanga in Colombia.
I could say that enjoy all the towns I visited, but I especially love Asian food, I guess that in a previous life I have to be born in some place between Hong Kong and Tokio.
Check the locations in detail in the following chart.

This this was all about Drupal community, and I could participate in 32 events around the world, participating as a speaker in all of them.
I had the honor of being Keynote in 3 DrupalCamps
Maybe the most remarkable participation was during my Community Keynote at DrupalCon Dublin.
In all those events I always tried to share what I know about Drupal 8 and Drupal Console projects, trying to promote in all of them the importance of contributing and remark the importance of contributing using their language to try to enforce their community.
Check the events in detail in the following chart.


One of the biggest achievements in this journey was the creation of a new company named weKnow, this new company will be dedicated to Drupal 8+ and Symfony 2+ Training and Consulting.
The companions on this trip are
Jesus Manuel Olivas an old friend and co-maintainer with me inside Drupal Console project.
Kenny Abarca an old friend and co-founder with me of Anexus company.
Thank youLast, but not least I want to express a huge THANK YOU to my family, why? Well, let me elaborate.
Yersika, my wife my companion in all my adventures physically and a great remote supporter.
Axel & Zoe: My children, who may pay the big price in all my travels, accepting that is father is abroad is the best way that I could Imagine.
My Mom, who take care her grandson, filling out all the love we could provide in person, meanwhile we were out of the home.
My siblings Katherine and Mario, who provide aunt and uncle supervision to my children and why not spoil them a little bit.
SummaryIn general was a great year and now I am looking for my next adventure/challenge for 2017 in my 40's
Thank you for reading this very long blog post.
Many thanks to the Drupal Association’s Supporting Partners! - Q4
“We cannot do what we do, especially for Drupal.org, without your funding support. Thank you!” - Megan Sanicki, Executive Director
There are many ways you can contribute to the Drupal Community. One way is being a part of the Supporting Partner Program. Supporting Partners fund Drupal.org and the engineering team who make the improvements you continuously see on Drupal.org - the home of the Drupal community and Project.
The engineering team has been hard at work in Q4 on several things from the roadmap.
- Worked with the Technical Advisory Committee on the developer tooling study
- Provided stable release of Composer facade
- Expanded issue credit system algorithm to reward code and non-code contributions in 2017
- Documentation Migration
- Drupal 8 User Guide
- Coming soon: Industry pages
- Launched the DrupalCon Vienna 2017 website
- More flexible DrupalCI testing options for contributed module maintainers
- Better database cluster
For more details, follow the Drupal.org blog and feel free to watch the latest Public Board Meeting.
Big Thank YouDrupal Association Supporting Partners help keep Drupal.org future-ready. We would like to thank our new and renewing Supporting Partners from this quarter.
- Adyax
- Anexus IT
- Ashday
- Avalara
- Bellcom
- Berger Schmidt
- Breakthrough Technologies
- Capgemini
- Celebrate Drupal
- Chapter Three
- Chromatic
- Comm-press
- Crew.co
- Davyin Internet Solutions
- Dropsolid
- Druid
- Duo Consulting
- Exove
- Faichi Solutions
- GoDaddy
- Inclind
- Innoppl Inc.
- Inviqa
- Koriolis
- Lightcrest
- Microserve
- Mobomo
- New Target
- NorthPoint Digital
- One Shoe Interactive
- OPTASY
- Osforce
- Outsourcing Technology Inc.
- Previous Next
- Softescu
- Spry Digital
- SymSoft Solutions
- Technocrat
- The Brick Factory
- undpaul
- Vector Media Group
Our Supporting Partners, Technology Supporters, and Hosting Supporters help us make Drupal.org a great site for our community and Drupal evaluators. They also become some of the best-known Drupal contributors. Read about the program benefits. If you are not yet a Supporting Partner and want to give back to Drupal while receiving benefits, please contact our Executive Director, Megan Sanicki, for details.
Protect Your Webforms From New Malware Injection Method
Hackers are always looking for ways to sneak malicious files onto other people’s websites. Recently we discovered a new technique they are using – actually, Google’s Webmaster tools detected it and warned about a Malware issue. It's a clever tactic involving the Webform module and PDF files, and it's really easy to defend against.