Drupal Planet

  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'context_ui_blocks' was given in /var/www/sites/cdmug.org/htdocs/includes/theme.inc on line 617.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
  • warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'views_access' was given in /var/www/sites/cdmug.org/htdocs/includes/menu.inc on line 452.
Syndicate content
Drupal.org - aggregated feeds in category Planet Drupal
Updated: 7 hours 29 min ago

Red Crackle: Free Drupal 8 Tutorials – An Exhaustive List

2 hours 10 min ago
If you are starting to learn Drupal 8, you are probably overwhelmed by the number of blog posts that offer free tutorials on different aspects of Drupal 8. The only way to find all these tutorials is to search online. In this post, we have created an exhaustive list of the free resources online for mastering Drupal 8, organized by categories. Use these links as a reference when starting on your next Drupal 8 learning expedition.
Categories: Drupal Feeds

Annertech: How to Integrate your Drupal Website with CiviCRM

8 hours 50 min ago
span class=field field-node--title field-name-title field-type-string field-label-hiddenHow to Integrate your Drupal Website with CiviCRM/span div class=field field-node--body field-name-body field-type-text-with-summary field-label-hidden div class=field-items div class=field-itempContinuing in our a href=/blog/topics/CRMseries of integrating CRMs with Drupal/a, we're now going to take a look at a href=http://civicrm.org/CiviCRM/a, an open-source, web-based CRM aimed at charities and non-profits which integrates closely with Drupal, Joomla and WordPress./p/div /div /div
Categories: Drupal Feeds

Mike Crittenden: How Drupal 7 Works, Part 1: The Request

11 hours 51 min ago
div class=field field-name-field-images field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evenimg src=http://mikecr.it/sites/default/files/styles/fullwidth/public/drupal-7-deconstructed.jpg?itok=UiE0B5Ee width=700 height=300 alt= //div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpstrongThis is a chapter out of my in-progress book, a href=http://drupaldeconstructed.comDrupal Deconstructed/a. You can a href=http://drupaldeconstructed.comread it online for free/a, download it as a a href=https://www.gitbook.com/download/pdf/book/mcrittenden/drupal-7-deconstructedPDF/a/a href=https://www.gitbook.com/download/epub/book/mcrittenden/drupal-7-deconstructedePUB/a/a href=https://www.gitbook.com/download/mobi/book/mcrittenden/drupal-7-deconstructedMOBI/a, or a href=http://github.com/mikecrittenden/drupal-7-deconstructedcontribute to it on GitHub/a./strong/p pHave you ever wondered how Drupal does what it does? Good, me too. In this series of posts, I'm going to explain what Drupal is doing behind the scenes to perform its magic./p pIn Part 1, we'll keep it fairly high level and walk through the path a request takes as it moves through Drupal. In later parts, we'll take deeper dives into individual pieces of this process./p h2Step 0: Some background information/h2 pFor this example, let's pretend that George, a user of your site, wants to visit your About Us page, which lives at codehttp://oursite/about-us/code./p pLet's also pretend that this page is a node (specifically, the node with codenid/code of code1/code) with a URL alias of codeabout-us/code./p pAnd to keep things simple, we'll say that we're using Apache as our webserver, and there's nothing fancy sitting in front of Drupal, such as a caching layer or the like./p pstrongSo basically, we're talking about a plain old Drupal site on a plain old webserver./strong/p h2Step 1: The request hits the server/h2 pThere's some pretty hot action that happens before Drupal even sees the request. George's browser sends a request to codehttp://oursite.com/about-us/code, and this thing we call the internet figures out that that should go to our server. If you're not well versed on how that part happens, you may benefit from reading a href=http://i.imgur.com/fzY1Arg.jpgthis infographic on how the internet works/a./p pOnce our server has received the request, that's when the fun begins. This request will land on port code80/code, and Apache just so happens to be listening on that port, so Apache will immediately see the request and decide what to do with it./p pSince the request is going to codeoursite.com/code then Apache can look into its configuration files to see what the root directory is for codeoursite.com/code (along with lots of other info about it which is out of scope for this post). We'll say that the root directory for our site is code/var/www/oursite/code, which is where Drupal lives. So Apache is going to send the request there./p h2Step 2: The .htaccess file/h2 pBut Drupal hasn't taken over just yet. Drupal ships with a code.htaccess/code file which is a way of telling Apache some things. In fact, Drupal's code.htaccess/code tells Apache a whole lot of things. The most important things it does are:/p ol liProtects files that could contain source code from being viewable, such as code.module/code files or code.inc/code files, both of which contain PHP./li liAllows requests that point directly to files in the filesystem to pass through without touching Drupal./li liRedirects all other requests to Drupal's codeindex.php/code file./li /ol pIt also does some other fancy things such as disabling directory indexes and allowing Drupal to serve gzipped CSS and JS, but those are the biggies./p pSo, in our case, Apache will see that we're looking for code/about-us/code, and will say:/p ol liemIs this request trying to access a file that it shouldn't? No./em/li liemIs this request directly pointing to a file in the filesystem? No./em/li liemThen this request should be sent to codeindex.php/code!/em/li /ol pAnd away we go.../p h2Step 3: Drupal's index.php file/h2 pFinally, we have reached Drupal, and we're looking at PHP. Drupal's index.php is super clean, and in fact only has 4 lines of code, each of which are easy to understand./p h3Line 1: Define DRUPAL_ROOT/h3 pcodephp define('DRUPAL_ROOT', getcwd());/code/p pThis just sets a constant called codeDRUPAL_ROOT/code to be the value of the current directory that codeindex.php/code is in. This constant is a href=https://api.drupal.org/api/drupal/index.php/constant/constants/DRUPAL_ROOT/7used all over the place/a in the Drupal core codebase./p pIn our case, this means that codeDRUPAL_ROOT/code gets set to code/var/www/oursite/code./p h3Lines 2 and 3: Bootstrap Drupal/h3 pcodephp require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);/code/p pThese lines run a full Drupal bootstrap, which basically means that they tell Drupal Hey, grab all of the stuff you're going to need before we can get to actually handling this request./p pstrongFor more information about the bootstrap process, see Part 2 of this series./strong/p h3Line 4: Do everything else/h3 pcodephp menu_execute_active_handler();/code/p pThis simple looking function is where the heart and soul of Drupal lives. For more information about what happens in this ball of wax, visit the a href=http://www.drupaldeconstructed.com/content/03-router.htmlMenu Router chapter/a./p pstrongThis is a chapter out of my in-progress book, a href=http://drupaldeconstructed.comDrupal Deconstructed/a. You can a href=http://drupaldeconstructed.comread it online for free/a, download it as a a href=https://www.gitbook.com/download/pdf/book/mcrittenden/drupal-7-deconstructedPDF/a/a href=https://www.gitbook.com/download/epub/book/mcrittenden/drupal-7-deconstructedePUB/a/a href=https://www.gitbook.com/download/mobi/book/mcrittenden/drupal-7-deconstructedMOBI/a, or a href=http://github.com/mikecrittenden/drupal-7-deconstructedcontribute to it on GitHub/a./strong/p /div/div/div
Categories: Drupal Feeds

Steve Purkiss: Drupalaton 2015 - the memories

Sun, 08/30/2015 - 12:26pm
div class=field field-name-ds-user-picture field-type-ds field-label-hiddendiv class=field-itemsdiv class=field-item evena href=/member/steve-purkissimg typeof=foaf:Image src=http://purkiss.com/sites/default/files/styles/thumbnail/public/pictures/picture-1-1336663751.png?itok=aoMTfULp alt=Steve Purkiss#039;s picture title=Steve Purkiss#039;s picture //a/div/div/divdiv class=field field-name-post-date field-type-ds field-label-hiddendiv class=field-itemsdiv class=field-item evenSunday, 30th August 2015/div/div/divdiv class=field field-name-title field-type-ds field-label-hiddendiv class=field-itemsdiv class=field-item even property=dc:titleh1Drupalaton 2015 - the memories/h1/div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedp class=rterightemimg alt=Chx presenting Data Storage in Drupal 8 at Drupalaton, Hungary, August 2015 src=http://purkiss.com/sites/default/files/chx_storing_data.jpg style=height: 316px; width: 420px; border-width: 0px; border-style: solid; margin: 5px; float: right; //em/p pemThe advantages of variables in Drupal 7 is they're all loaded into memory. The disadvantages of variables in Drupal 7 is they're all loaded into memory/em./p pWith this, Károly Négyesi ('a href=https://www.drupal.org/u/chxchx/a'), opened his a href=http://2015.drupalaton.hu/schedule#speaker-56Storing Data with Drupal 8 workshop/a at a href=http://2015.drupalaton.hu/Drupalaton/a to a standing room only crowd - half whom chuckled knowingly, with the rest following shortly after once they'd had a little time to think about this technical juxtaposition./p pIt is this pull no punches attitude which made chx's workshop, for me at least, the highlight of the event - I like to know what is wrong, why it is wrong, and what we can or are doing to fix it. It was different when I'd asked the Hungarian, now living in Vancouver, to keynote our local a href=http://www.drupalcampbrighton.co.uk/DrupalCamp Brighton/a held back in January. In a departure from his normal techie talks, chx delivered a highly enjoyable and enlightening session talking about the profession of programming and how computer game music was the best type of music to listen to when coding. Here at Drupalaton though, we were back to the nitty and gritty of Drupal's internals./p pChx proceeded to give an excellent overview of the different subsystems of a href=http://drupal.orgDrupal/a and how they'd changed from version 7 to 8. Drupal 8 brings together a lot of pieces which were fragmented in Drupal 7 - for example Drupal's Entity API where most of the functionality existed in a contributed module. By bringing it all together into core Drupal and providing APIs it improves maintainability through common knowledge, translation, access, performance and testing. He went on to cover the improved data stores in Drupal 8, for example the state API to store information such as when maintenance updates were last run using cron, a private tempstore for functionality like autosave data and the new quick edit functionality, and a shared tempstore for things like views./p pAfter an intense hour and a half and a short break chx for a moment thought he'd lost half the audience but most soon filtered back in once their brains had a little more time for the coffee to take effect! The workshop continued with much information about how to use these new APIs, and how all configuration was now in a href=http://yaml.org/YAML/a files then loaded into the database at runtime. In previous versions of Drupal, many settings were stored in the database and work-arounds such as using the a href=https://www.drupal.org/project/featuresFeatures/a module were used to extract settings. These approaches had varying results - as someone coming from an a href=https://en.wikipedia.org/wiki/Java_Platform,_Enterprise_EditionEnteprise Java/a world where storing settings in files is the norm I for one am very excited about this as it provides far more easier development, deployment and versioning. Features still exist in Drupal 8, but for their original purpose - to create exportable features of functionality./p h2 Contributing to Drupal can be tiring!/h2 pimg alt=Headless chx! src=http://purkiss.com/sites/default/files/headless_chx.jpg style=width: 420px; height: 315px; border-width: 0px; border-style: solid; margin: 5px; float: left; /After the workshop I made my way to the only air-conditioned room for what felt like miles around and managed to catch this picture of chx resting - with lots of talk recently about 'Headless Drupal' I thought the angle was quite funny./p pI'd gone there to do some more work on a href=http://d8rules.org/Drupal 8 Rules/a - the fifth most popular module for Drupal which enables people to create functionality through the user interface, for example to send an email when someone adds a comment, or to apply a certain tax rate for a certain product in a certain country./p pAlthough I'd previously worked on a few core issues for Drupal 8 like splitting up the 'password strength' and 'password matches' code and cleaning up some unused variables, I'd not really found an area I could focus on, but then I attended Drupalaton last year where there was a whole day of Rules, with a morning workshop bringing people up to speed on Rules in Drupal 8 and an afternoon spent focusing on how you could get involved and contribute./p pFor me, the workshop format is what makes Drupalaton so special - most other DrupalCamps have half-to-an-hour long sessions where you get an overview of something but don't really get time to delve in deep. I wanted to learn Drupal 8, and helping Rules out where I could to me seemed like a pretty good way of learning it. Since then I've helped update a few Rules Actions, Conditions, and Events to Drupal 8 and although I haven't done half as much as I've wanted to, it feels great to be learning lots and hopefully helping progress things a little bit./p h2 Cruise Party/h2 pimg alt=Drupalaton cruise party src=http://purkiss.com/sites/default/files/cruise_sunset.jpg style=width: 420px; height: 315px; border-width: 0px; border-style: solid; margin: 5px; float: right; /After spending the afternoon learning more about exporting, importing, and deploying configuration management in a href=http://2015.drupalaton.hu/schedule#speaker-131Fabian Bircher's workshop/a (a href=http://nuvole.org/blog/2015/aug/10/drupal-8-configuration-management-beware-pitfallsslides and a great blog post from Fabian here/a), it was time for the yearly Drupalaton Cruise Party./p pThe cruise party is an excellent chance to chill out, see a little more of a href=http://nuvole.org/blog/2015/aug/10/drupal-8-configuration-management-beware-pitfallsCentral Europe's largest lake/a, talk Drupal, and enjoy a most wonderful sunset!/p h2 Behold Behat!/h2 pimg alt=Behat workshop src=http://purkiss.com/sites/default/files/behat.jpg style=width: 420px; height: 315px; border-width: 0px; border-style: solid; margin: 5px; float: left; /The next morning, after I'd managed to complete 30 lengths of the swimming pool and a 20km cycle for the second day in a row (yes, I know, shocker, but the Sun makes me a different person than I am in the dreary rainy grey UK!) it was workshop time again - this morning's being a href=http://2015.drupalaton.hu/schedule#speaker-141'From User Story to Behat Test' with Pieter Frenssen/a./p pI'm almost as excited about using a href=http://behat.orgBehat/a as I am about Drupal 8 - after many years of discussions about how functionality X worked, or whether feature X and function Y was included in the original quote, this way of defining requirements provides an excellent interface all project stakeholders can be a part of, with a solid technical backing enabling tests to be performed against sets of Plain English user stories./p pThe workshop was to go through setting up Behat with Drupal 8 which was great as I'd spent some time recently getting it set up but lacked in-depth understanding of the setup which Pieter's workshop helped enormously with so now I'll be using it on all my projects. There's plenty of info online about Behat so I won't go into more details here./p h2 Grill Partybr /img alt=The Grill Party at Drupalaton src=http://purkiss.com/sites/default/files/grill_party.jpg style=width: 420px; height: 315px; border-width: 0px; border-style: solid; margin: 5px; float: right; //h2 pThe afternoon was spent discussing using a href=http://2015.drupalaton.hu/schedule#speaker-136Drupal as a prototyping tool with Kristof Van Tomme László Csécsy/a and finding out about a href=http://www.pretotyping.org/Pretotyping/a. This is of particular interest to me as I continue my work on a href=http://abilit.esabilit.es/a - a topic for another blog I think!/p pIn the evening the lovely Drupalaton organising team arranged a Grill Party - this didn't happen last year but was great as was right next to the hotel and means we weren't dispersed across many different places./p pAs well as great food a few people had been working on some lyrics and provided lots of entertainment with a fab Drupalaton song!/p piframe width=900 height=506 src=https://www.youtube.com/embed/4yFddqsgDgk frameborder=0 allowfullscreen=/iframe/p h2 So long Drupalaton, till next year!/h2 div img alt=Me, on my bike outside Hotel Helikon in Hungary src=http://purkiss.com/sites/default/files/steve_bike.jpg style=width: 420px; height: 560px; border-width: 0px; border-style: solid; margin: 5px; float: right; /Sunday was fairly quiet, no sessions were on but the sprint room was open so I interspersed some rules work with some cycling. After a few days of the hotel's all-inclusive menu I wasn't expecting to lose any weight, but certainly enjoyed getting the metabolism up and running again nicely!/div div  /div div In 36 degrees cycling was not easy but certainly fun and I'm glad I took a href=https://flic.kr/p/oo5Ud2my Brompton/a on its first trip abroad - I'd been wanting an opportunity to test out the a href=http://www.vincita.co.th/products/sightseerVincita Sightseer bag/a and it did not disappoint. I look forward to taking my bike to more places around the world - you definitely get to see a lot more of a place than just by foot and with the bag going into normal hold it doesn't cost any extra than normal baggage./div div  /div div Monday finally came round and it was time to make the journy back to the UK via Budapest. The train to Budapest is always an experience - it stops *everywhere* and takes three hours to go just over a hundred miles, has no air conditioning, and wouldn't let me on without buying a 'boading pass' even though I had a ticket already. Luckily it was not much and I had a small amount of local currency to cover it otherwise I would've been stuck!/div div  /div div Felt great to cycle out of the hotel down to the train station the pack the bike up in its own bag (it fits on the back rack when riding) and I can't wait till I can do it all again, perhaps a href=https://events.drupal.org/barcelona2015DrupalCon Barcelona/a, although I'm not a huge fan of cycling in cities amp; DrupalCon is quite intense so perhaps not, we'll see!/div div  /div div A big thank you to all those who had something to do with this lovely event, from organising to speaking, sponsoring, and of course attending, am already looking forward to next year's holiday, erm - I mean, a href=http://2015.drupalaton.hu/Drupalaton/a!/div /div/div/divdiv class=field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-inline inlinediv class=field-labeltags:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/tags/drupalaton typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupalaton/a/divdiv class=field-item odda href=/tags/drupal-8 typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal 8/a/divdiv class=field-item evena href=/tags/drupal-planet typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal Planet/a/divdiv class=field-item odda href=/tags/planet-drupal typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Planet Drupal/a/div/div/div
Categories: Drupal Feeds

Mpumelelo Msimanga: Creating Drupal Charts on External Views Data

Sun, 08/30/2015 - 9:00am
div class=field field-name-titleh1Creating Drupal Charts on External Views Data/h1/divdiv class=field field-name-field-image img-responsivea href=/2015/08/creating-drupal-charts-external-views-dataimg typeof=foaf:Image class=img-responsive src=http://msiman.ga/sites/msiman.ga/files/styles/medium/public/2015/08/views-charts-msimanga-leading-image.png?itok=jUMRihpA width=220 height=104 alt=Views Charts Leading Image title=Views Charts Leading Image //a/divdiv class=field field-name-bodypThis is a continuation of my series of posts on using Drupal as a a href=http://msiman.ga/tags/drupal-data-platformdata platform/a. In this post I show that you can create charts on data external to Drupal. I picked three modules to illustrate my point from a longer list of available contributed Drupal charting modules. There are two documentation pages that give more detailed information on Drupal charting modules. a href=https://www.drupal.org/node/2389465Modules related to Charts/a and a href=https://www.drupal.org/node/2363985Comparison of Charting modules/a./p/div
Categories: Drupal Feeds

DrupalOnWindows: Fixing Drupal site locks during menu rebuild

Sun, 08/30/2015 - 12:00am
div class=form-item form-type-item labelLanguage /label English /div div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpThis is a follow up to the previous post a href=/node/60Database Transactions in Drupal/a where we saw in detail how little attention transaction management has had (and still has) in Drupal./p pIn this article we will see:/p/div/div/divdiv class=view view-read-more view-id-read_more view-display-id-entity_view_1 view-dom-id-8ff1ec78d1fdcc3d77a258128ae547d8 div class=view-header hr/ h2More articles.../h2 /div div class=view-content div class=item-list ul li class=views-row views-row-1 views-row-odd views-row-first div class=views-field views-field-title span class=field-contenta href=/en/blog/making-namespaced-callbacks-work-drupal-7-without-hacking-core-and-bound-parametersMaking namespaced callbacks work in Drupal 7 (without hacking core and with bound parameters)/a/span /div/li li class=views-row views-row-2 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/fixing-drupal-site-locks-during-menu-rebuildFixing Drupal site locks during menu rebuild/a/span /div/li li class=views-row views-row-3 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/installing-drupal-windows-and-sql-serverInstalling Drupal on Windows and SQL Server/a/span /div/li li class=views-row views-row-4 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/bypassing-form-validations-and-required-fields-drupal-bfv-moduleBypassing Form Validations and Required Fields in Drupal: the BFV module./a/span /div/li li class=views-row views-row-5 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/benchmarking-drupal-7-php-7-devBenchmarking Drupal 7 on PHP 7-dev/a/span /div/li li class=views-row views-row-6 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/using-heatmaps-boost-conversions-heatmapme-drupal-integrationUsing Heatmaps to boost conversions: Heatmap.me Drupal integration/a/span /div/li li class=views-row views-row-7 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/git-shell-windows-reports-shexe-has-stopped-working-appcrashGit shell on Windows reports “sh.exe has stopped working (APPCRASH)”/a/span /div/li li class=views-row views-row-8 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/deploying-drupal-pro-part-1-file-structureDeploying Drupal Like a Pro - Part 1: File Structure/a/span /div/li li class=views-row views-row-9 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/setting-code-syntax-higlighting-drupalSetting up Code Syntax Higlighting with Drupal/a/span /div/li li class=views-row views-row-10 views-row-even views-row-last div class=views-field views-field-title span class=field-contenta href=/en/blog/build-git-windows-sourcesBuild GIT on Windows from Sources/a/span /div/li /ul/div /div /div
Categories: Drupal Feeds

Chen Hui Jing: Drupal 101: Improving the content authoring experience

Sat, 08/29/2015 - 7:00pm
pEpisode 101 of a href=http://jensimmons.com/Jen Simmons’/a wonderful podcast a href=http://thewebahead.net/101The Web Ahead/a featured content strategist a href=http://webmeadow.com/Eileen Webb/a. Good stuff from start to finish, you should really check it out. There was one particular point that resonated with me, when they talked about user experience of people whose job is to add content to the website./p blockquote pNot to get super philosophical, but capitalism isn’t really keen on improving working conditions for employees. It’s not super excited about spending money and energy on making things nicer for the people who you are paying.br / ― Eileen Webb on The Web Ahead/p /blockquote pDrupal comes with a lot of out-of-the-box functionality that can help make the content editing experience less confusing,...
Categories: Drupal Feeds

Wuinfo: Build a Star Software Development Team

Fri, 08/28/2015 - 4:51pm
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpThe success of a project depends on a good development team. How to build and maintain such a good team?/p pAs, a software developer for many years, I believed a good dev team is one of the pillars for a successful business. Here, I want to discuss how to build a dream developer team. Building a high productive, super innovative and proactive team is like cooking a meal. It needs a good ingredient, right source, and good timing in each step of cooking./p pA good developer has a good academy score in math. Software developing needs the strongest logic thinking and self-validation skill. Building a software project like taking a mathematics test. The higher score in the test means fewer bugs in the code. A person who is capable of getting full scores on math tests is likely to build a project with least bugs. Finding right persons is the first step toward a great team./p pA good academy score will not automatically make a good developer. Building software projects are team workings. Developing software is very detail oriented. We may not be able to avoid nitpicking on something. Soft skill is important too. A good developer is willing to learn, easy to collaborate and detail oriented. A good developer will always focus on the matters but never escalate matters to a personal level. A good developer can accept criticism and change for a greater good of the team./p pAfter we have gathered a group of talented developers, it is time to cook. Every person can be in different states. Software developers can be in the peak productivity state or the bottom of the productivity. An encouraging and rewarding environment with a strong leadership is the key to motivating developers to reach the peak of their productivity. Reward developers with self-fulfillment and let them achieve something with their work. A leading developer with an extraordinary fellowship will help it a lot./p pWe might ignore the physical environment. Nice, clean, quiet offices help developers focusing on their job. Some start-up companies put a lot of effort to finding talents but did not let them work comfortably. Sometimes, offices are crowded and stuffy. What they can do is just stop looking for a smarter developer and put a little bit more effort to improve the current working condition. In such a company, even the best developer is not able to concentrate on his job. Software developing is a mind activity. The brain requires a lot of blood circulation with plenty of oxygen and energy. The importance of clean, quiet, natural and toxic-free environment will never be overestimated. A healthy environment is a basic requirement for a strong software product./p pThe next one is an a study oriented and encouraging setting; A company has a respectful culture and a group of open minded developers. It is where developers are very closely collaborating with each other. Developers are not afraid to make a mistake and willing to share their latest trick and newly mastered programming tactics./p /div/div/div
Categories: Drupal Feeds

Drupal core announcements: Recording from August 28th 2015 Drupal 8 critical issues discussion

Fri, 08/28/2015 - 7:01am
pWe met again today to discuss critical issues blocking Drupal 8's release (candidate). (a href=https://groups.drupal.org/taxonomy/term/138603See all prior recordings/a). Here is the recording of the meeting video and chat from today in the hope that it helps more than just those who were on the meeting:/p !--break--!--break--piframe width=600 height=338 src=https://www.youtube.com/embed/9O6_HJg5Yuo?feature=player_embedded frameborder=0 allowfullscreen/iframe/p pIf you also have significant time to work on critical issues in Drupal 8 and we did not include you, a href=https://www.drupal.org/user/4166/contactlet me know as soon as possible/a./p pThe meeting log is as follows (all times are CEST real time at the meeting):/p pcodebr / [11:08am] GaborHojtsy: a href=https://www.drupal.org/node/2555183 title=https://www.drupal.org/node/2555183https://www.drupal.org/node/2555183/abr / [11:08am] Druplicon: a href=https://www.drupal.org/node/2555183 title=https://www.drupal.org/node/2555183https://www.drupal.org/node/2555183/a = Fix the filled update tests, they are broken [#2555183] = 60 comments, 10 IRC mentionsbr / [11:08am] GaborHojtsy: a href=https://www.drupal.org/node/2555665 title=https://www.drupal.org/node/2555665https://www.drupal.org/node/2555665/abr / [11:08am] Druplicon: a href=https://www.drupal.org/node/2555665 title=https://www.drupal.org/node/2555665https://www.drupal.org/node/2555665/a = When index is added for content_translation_uid, the corresponding stored schema definition is not updated [#2555665] = 30 comments, 7 IRC mentionsbr / [11:09am] plach: a href=https://www.drupal.org/node/2542748 title=https://www.drupal.org/node/2542748https://www.drupal.org/node/2542748/abr / [11:09am] Druplicon: a href=https://www.drupal.org/node/2542748 title=https://www.drupal.org/node/2542748https://www.drupal.org/node/2542748/a = Automatic entity updates can fail when there is existing content, leaving the site's schema in an unpredictable state [#2542748] = 184 comments, 38 IRC mentionsbr / [11:10am] plach: a href=https://www.drupal.org/node/2558905 title=https://www.drupal.org/node/2558905https://www.drupal.org/node/2558905/abr / [11:10am] Druplicon: a href=https://www.drupal.org/node/2558905 title=https://www.drupal.org/node/2558905https://www.drupal.org/node/2558905/a = Content translation module - Information disclosure by insufficient access checking [#2558905] = 9 comments, 3 IRC mentionsbr / [11:11am] plach: a href=https://www.drupal.org/node/2555665 title=https://www.drupal.org/node/2555665https://www.drupal.org/node/2555665/abr / [11:11am] Druplicon: a href=https://www.drupal.org/node/2555665 title=https://www.drupal.org/node/2555665https://www.drupal.org/node/2555665/a = When index is added for content_translation_uid, the corresponding stored schema definition is not updated [#2555665] = 30 comments, 8 IRC mentionsbr / [11:13am] WimLeers: a href=https://www.drupal.org/node/2429617#comment-10256775 title=https://www.drupal.org/node/2429617#comment-10256775https://www.drupal.org/node/2429617#comment-10256775/abr / [11:13am] Druplicon: a href=https://www.drupal.org/node/2429617 title=https://www.drupal.org/node/2429617https://www.drupal.org/node/2429617/a = Make D8 2x as fast: SmartCache: context-dependent page caching (for *all* users!) [#2429617] = 265 comments, 34 IRC mentionsbr / [11:13am] WimLeers: a href=https://www.drupal.org/node/2556889 title=https://www.drupal.org/node/2556889https://www.drupal.org/node/2556889/abr / [11:13am] Druplicon: a href=https://www.drupal.org/node/2556889 title=https://www.drupal.org/node/2556889https://www.drupal.org/node/2556889/a = [policy, no patch] Decide if SmartCache is still in scope for 8.0 and whether remaining risks require additional mitigation [#2556889] = 62 comments, 4 IRC mentionsbr / [11:19am] alexpott: xjm: a href=https://www.drupal.org/node/2558791 title=https://www.drupal.org/node/2558791https://www.drupal.org/node/2558791/abr / [11:19am] Druplicon: a href=https://www.drupal.org/node/2558791 title=https://www.drupal.org/node/2558791https://www.drupal.org/node/2558791/a = !placeholder should Xss::adminFilter but not affect safeness [#2558791] = 11 comments, 1 IRC mentionbr / [11:20am] alexpott: xjm: your issue might be a duplicatebr / [11:26am] WimLeers: plach: a href=https://www.drupal.org/node/2558905#comment-10267715 title=https://www.drupal.org/node/2558905#comment-10267715https://www.drupal.org/node/2558905#comment-10267715/abr / [11:26am] Druplicon: a href=https://www.drupal.org/node/2558905 title=https://www.drupal.org/node/2558905https://www.drupal.org/node/2558905/a = Content translation module - Information disclosure by insufficient access checking [#2558905] = 9 comments, 4 IRC mentionsbr / [11:28am] plach: WimLeers: repliedbr / [11:33am] jibran: a href=https://www.drupal.org/node/2538108 title=https://www.drupal.org/node/2538108https://www.drupal.org/node/2538108/abr / [11:33am] Druplicon: a href=https://www.drupal.org/node/2538108 title=https://www.drupal.org/node/2538108https://www.drupal.org/node/2538108/a = Add an API for data value updates to reliably run after data format updates [#2538108] = 19 comments, 4 IRC mentionsbr / [11:46am] WimLeers: a href=https://www.drupal.org/node/2557815#comment-10266477 title=https://www.drupal.org/node/2557815#comment-10266477https://www.drupal.org/node/2557815#comment-10266477/abr / [11:46am] Druplicon: a href=https://www.drupal.org/node/2557815 title=https://www.drupal.org/node/2557815https://www.drupal.org/node/2557815/a = Automatically assign node grants cache context in node_query_node_access_alter() [#2557815] = 17 comments, 2 IRC mentionsbr / [11:53am] jibran: a href=https://www.drupal.org/node/2538108 title=https://www.drupal.org/node/2538108https://www.drupal.org/node/2538108/abr / [11:53am] Druplicon: a href=https://www.drupal.org/node/2538108 title=https://www.drupal.org/node/2538108https://www.drupal.org/node/2538108/a = Add an API for data value updates to reliably run after data format updates [#2538108] = 19 comments, 5 IRC mentionsbr / [11:55am] WimLeers: a href=https://www.drupal.org/node/2464427 title=https://www.drupal.org/node/2464427https://www.drupal.org/node/2464427/abr / [11:55am] Druplicon: a href=https://www.drupal.org/node/2464427 title=https://www.drupal.org/node/2464427https://www.drupal.org/node/2464427/a = Replace CacheablePluginInterface with CacheableDependencyInterface [#2464427] = 176 comments, 27 IRC mentionsbr / [11:55am] jibran: a href=https://www.drupal.org/node/2538108 title=https://www.drupal.org/node/2538108https://www.drupal.org/node/2538108/abr / [11:55am] Druplicon: a href=https://www.drupal.org/node/2538108 title=https://www.drupal.org/node/2538108https://www.drupal.org/node/2538108/a = Add an API for data value updates to reliably run after data format updates [#2538108] = 19 comments, 6 IRC mentionsbr / [11:56am] xjm: Is that another update path test we need? a test contrib module?br / [12:05pm] • xjm finds herself wondering if plach hears churchbells again :)br / [12:05pm] plach: xjm: I'm doing right now :)br / [12:05pm] xjm: :Dbr / [12:13pm] xjm: Given the complexity here, I find myself wondering how on earth it was we ever expected this to work for major version upgrades :) Thank goodness for migratebr / /code/p
Categories: Drupal Feeds

Drupal core announcements: Recording from August 21st 2015 Drupal 8 critical issues discussion

Fri, 08/28/2015 - 6:54am
pWe met again last Friday to discuss critical issues blocking Drupal 8's release (candidate). (a href=https://groups.drupal.org/taxonomy/term/138603See all prior recordings/a). Here is the recording of the meeting video and chat from last Friday in the hope that it helps more than just those who were on the meeting:/p !--break--!--break--piframe width=600 height=338 src=https://www.youtube.com/embed/ZPSm2ynWXyI?feature=player_embedded frameborder=0 allowfullscreen/iframe/p pIf you also have significant time to work on critical issues in Drupal 8 and we did not include you, a href=https://www.drupal.org/user/4166/contactlet me know as soon as possible/a./p pThe meeting log is as follows (all times are GMT real time at the meeting):/p pcodebr / 10:12 plach entity updates issue: a href=https://www.drupal.org/node/2542748 title=https://www.drupal.org/node/2542748https://www.drupal.org/node/2542748/abr / 10:12 Druplicon a href=https://www.drupal.org/node/2542748 title=https://www.drupal.org/node/2542748https://www.drupal.org/node/2542748/a = Automatic entity updates can fail when there is existing content, leaving the site's schema in an unpredictable state [ #2542748] = 152 comments, 31 IRC mentions/code/p p10:25 alexpott a href=https://www.drupal.org/node/2554151 title=https://www.drupal.org/node/2554151https://www.drupal.org/node/2554151/abr / 10:25 Druplicon a href=https://www.drupal.org/node/2554151 title=https://www.drupal.org/node/2554151https://www.drupal.org/node/2554151/a = Test content/configuration in update database dump [#2554151] = 23 comments, 2 IRC mentions/p p10:32 WimLeers a href=https://www.drupal.org/node/2554233 title=https://www.drupal.org/node/2554233https://www.drupal.org/node/2554233/abr / 10:32 Druplicon a href=https://www.drupal.org/node/2554233 title=https://www.drupal.org/node/2554233https://www.drupal.org/node/2554233/a = Port Cross-site Request Forgery - Form API fixes from SA-CORE-2015-003 to Drupal 8 [#2554233] = 26 comments, 1 IRC mention/p p10:33 larowlan plach: a href=https://www.drupal.org/node/2542748#comment-10244733 title=https://www.drupal.org/node/2542748#comment-10244733https://www.drupal.org/node/2542748#comment-10244733/a point 2 - I think that's a c/p errorbr / 10:33 Druplicon a href=https://www.drupal.org/node/2542748 title=https://www.drupal.org/node/2542748https://www.drupal.org/node/2542748/a = Automatic entity updates can fail when there is existing content, leaving the site's schema in an unpredictable state [#2542748] = 152 comments, 33 IRC mentions/p p10:34 plach larowlan: definitely :)br / 10:34 plach thanks for catching that/p p10:42 alexpott a href=https://www.drupal.org/node/2497243 title=https://www.drupal.org/node/2497243https://www.drupal.org/node/2497243/abr / 10:42 Druplicon a href=https://www.drupal.org/node/2497243 title=https://www.drupal.org/node/2497243https://www.drupal.org/node/2497243/a = Replace Symfony container with a Drupal one, stored in cache [#2497243] = 245 comments, 53 IRC mentions/p p10:44 WimLeers dawehner: we're in the middle of nowhere of the DrupalKernel — that sounds bizarre :D/p p10:53 alexpott a href=https://www.drupal.org/node/2464427 title=https://www.drupal.org/node/2464427https://www.drupal.org/node/2464427/abr / 10:53 Druplicon a href=https://www.drupal.org/node/2464427 title=https://www.drupal.org/node/2464427https://www.drupal.org/node/2464427/a = Replace CacheablePluginInterface with CacheableDependencyInterface [#2464427] = 175 comments, 25 IRC mentions/p p10:59 dawehner jibran: new \Drupal\views\Entity\View();br / 11:03 jibran UpgradePath--br / 11:03 jibran UpgradePath--br / 11:03 jibran UpgradePath--br / 11:03 jibran UpgradePath--br / 11:09 WimLeers jibran: hahahahabr / 11:09 WimLeers jibran++br / 11:09 pfrenssen jibran: lol :Dbr / 11:10 WimLeers alexpott: amazingly, *during* our call, pretty much every SafeMarkup issue has been updated!br / 11:10 WimLeers stefan_r++br / /p
Categories: Drupal Feeds

InternetDevels: 6 Reasons Why Google Loves Drupal Websites and So Should You

Fri, 08/28/2015 - 2:26am
div class=field field--name-field-preview-image field--type-image field--label-hiddendiv class=field__itemsdiv class=field__item evenimg src=http://st4.internetdevels.net/sites/default/files/public/blog_preview/google_loves_drupal_0.jpeg width=863 height=577 alt=6 Reasons Why Google Loves Drupal Websites and So Should You //div/div/divdiv class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evenp style=text-align: right;emLet’s talk about a target=_blank href=http://internetdevels.com/services/drupal-developmentDrupal web development/a with love :) Check out the blog post from our guest blogger Daniel Mattei about why Google loves Drupal./em/p a href=http://internetdevels.com/blog/google-loves-drupal-websitesRead more/a/div/div/div
Categories: Drupal Feeds

Savas Labs: Sassy Drupal theming: a lighter version of SMACSS

Thu, 08/27/2015 - 7:00pm
pIt takes some forethought, but a well-organized theme means code that is modular and easy to maintain or pass off to another developer. SMACSS principles are becoming more and more widespread and can be applied to a Drupal theme. At Savas we've picked out what we love from SMACSS and simplified the rest, creating a stylesheet organization method that works for us. In this post (part 2 of my three-part series on Drupal theming with Sass) I'll go through our version of SMACSS and link to real examples./p pa href=http://savaslabs.com/2015/08/28/sassy-drupal-theming-part-2.htmlContinue reading…/a/p
Categories: Drupal Feeds

Viktor Bán: GSoC 2015 - Security Review D8 - Wrap up

Thu, 08/27/2015 - 1:05pm
pI've spent most of this summer working on the Drupal module called a href=https://www.drupal.org/project/security_review target=_blankSecurity Review/a. My project was porting it to a href=https://www.drupal.org/drupal-8.0 target=_blankDrupal 8/a as part of a href=https://www.google-melange.com/gsoc/homepage/google/gsoc2015 target=_blankGoogle Summer of Code 2015/a. I'm happy to say that the requirements have been met long before the end of the programme, so there was no rush at the end of the coding period./p h3strongHow it all started/strong/h3 pIt all started with a simple Facebook post in my faculty's FB group. I didn't even notice it as I was too busy learning for a midterm, but thankfully my friends were kind enough to procrastinate at the time and showed me the link to GSoC. It didn't take long until I found that a href=https://www.drupal.org/ target=_blankDrupal/a would be a perfect candidate for me, even without any experience related to it. So I took a leap of faith and started writing a proposal for the project that I liked most, Port security_review to Drupal 8. I liked the cause (eliminate security vulnerabilites from misconfiguration), the freedom of designing a new architecture from scratch and the GSoC t-shirt I hope I will soon receive./p h3strongPreparation for GSoC/strong/h3 pDrupal requires GSoC student candidates to complete the ladder called a href=http://drupalladder.org/ladder/47217ef7-9bf5-4c7f-926f-aeee247aac78 target=_blankGetting Started with Drupal for GSoC Students/a. This is really a necessity as it teaches the basics which students will need numerous times during working on Drupal./p pFinishing the ladder, I've tried to get a mentor for my project as it didn't have one, and who could be better than the module's owner!? So I went ahead and contacted a href=https://www.drupal.org/u/coltrane target=_blankcoltrane/a, who then shortly accepted to be the mentor of the project. He is pretty awesome and helpful, I really enjoyed working with him./p pWriting a good proposal might have been the hardest part of the whole project, so I advise every future student to take their time to work out a really good one. There are links to a lot of resources in the a href=https://groups.drupal.org/google-summer-code target=_blankGoogle Summer of Code Drupal group/a that were really helpful, so I highly recommend future students to read everything they can find there./p h3strongAfter the proposal/strong/h3 pDays went by and finally the accepted projects were announced and I could see my name in the list. Of course I celebrated the event properly, but soon I had to realize that all of this won't be easy. Finals here in Hungary started on 25th May... yes, the same as the coding period. So I went ahead and did a little work on the module before finals so that I would be able to concentrate on my studies on the first week. I was soon ready with some parts of the module that meant 1-2 weeks worth of work according to my proposal, so all I had to focus on were my finals. Writing 4 exams in 1 week and passing all of them is very hard and I don't recommend it to anyone as the stress levels get way too high, but I somehow managed to do it./p pStarting the work on the second week I was so relieved that my summer had finally started and I could do what I was waiting for: coding. Of course GSoC is not just programming, there are meetings students have to attend: one every week with the organization admins (we could choose from 2 meetings, whichever worked best in our timezone) and one or more with our mentor(s). I've had all my meetings on tuesdays so that I could work more flexibly on the other days. Another thing that is required that does not involve coding is maintaining a blog. Students have to write a blog post every week about their progress in a way that anyone who is not familiar with their project or GSoC will be able to understand it, also it should be written in a Drupal Planet compatible way, so the word about GSoC can be spread./p pMy task was mostly doing what I wrote in the proposal's timeline, but sometimes I had to solve issues posted on my GitHub (by my mentor) and also in the Drupal.org issue queue (by the community). In the first couple of weeks span style=font-size: 14px; line-height: 21px;I did 10-12 hours of work a day and needless to say that got me ahead of my schedule fast. /spanSoon came the midterm evaluation and I was about 75% done with the project. The evaluation itself didn't require much interaction from my part, I just had to fill a short questionnaire about my progress and my thoughts about the project and my mentor./p pThe second coding period went much slower. On average I think it's safe to say that I did no more 20-30 hours of work per week. Slow weeks may sound nice at first, but aren't actually enjoyable. Still, the module got finished around week 9 or 10 and the last few weeks were spent with polishing it and looking for ways to improve it./p h3strongThe results/strong/h3 ullia href=http://blog.banviktor.me/gsoc15 target=_blankDevelopment blog posts/a/li lia href=http://blog.banviktor.me/sites/default/files/inline-images/check_architecture.png target=_blankInitial module architecture/a ulliDetails have changed a lot, but a current UML diagram would look similar./li /ul/li lia href=https://www.drupal.org/node/2375303 target=_blankProject issue on Drupal.org/a/li lia href=http://cgit.drupalcode.org/security_review/tree/?h=8.x-1.x target=_blankCode repository on Drupal.org for Security Review 8.x-1.x/a/li /ulh3strongWhat I learnt/strong/h3 pBefore GSoC I had, let's say, pretty limited knowledge about Drupal. All I knew is that it exists. Now I'm familiar with how to operate a Drupal website, how to write modules for Drupal 7 and 8 that don't just work, but also use the technologies provided by Drupal. By learning Drupal 8 one can learn a bit about a href=https://symfony.com/ target=_blankSymfony 2/a too, as D8 uses a lot of S2 components./p h3strongAfter GSoC 2015/strong/h3 pI have plans for Security Review 8.x-2.x, I also wish to have time to make a Drupal based website for myself to get familiar with site building using Drupal. So in conclusion I will definitely keep working with and on Drupal in the future./p h3strongThanks/strong/h3 pI would like to thank a href=https://groups.drupal.org/user/8713 target=_blankSlurpee/a and a href=https://groups.drupal.org/user/2659413 target=_blankcs_shadow/a for dedicating their valuable times for the weekly check-in meetings that sometimes took hours and a huge thanks for a href=http://benjeavons.com/ target=_blankBen Jeavons/a (a href=https://www.drupal.org/u/coltrane target=_blankcoltrane/a) for providing fast and valuable help and an amazing summer! Also I would like to thank a href=https://drupalize.me/ target=_blankdrupalize.me/a for the free membership, it was pretty useful, I wish I started to use it sooner. And last but not least I would like to thank the Google Summer of Code organizers for the opportunity and the amazing experience./p
Categories: Drupal Feeds

Axelerant Blog: DrupalCamp London 2015 - Inspiration, Challenge, and Passion

Thu, 08/27/2015 - 1:00pm
pI happened to attend the strongDrupalCamp London 2015/strong held between 27th February to 1st March and was honoured to be invited for presenting a session during CXO Day./p h2CXO Day/h2 pThe event was a huge success with around strong500 attendees/strong and a plethora of engaging sessions and workshops. The venue was quite brilliant from its modern facilities and central location perspective at strongCity University London/strong in Northampton Square. As in previous years, City University hosted span style=background-color: #f5f6f5;DrupalCamp London, its location is /spanquite apt for such a community focused event. Sessions took place in various breakout rooms while the auditorium Oliver Thompson Lecture Theatre remained reserved for keynote and other larger gathering sessions./p pDrupalCamp London opened on Friday February 25th with CXO Day. While I attended most of the talks at CXO day, I mostly especially liked the sessions by Mark Taylor, CEO of Sirius, Mike Meyers - VP Large  Scale Drupal, and the ever enchanting JAM, Open Source Evangelist, Acquia at his best.br / img class=alignnone size-large wp-image-1310251 src=https://axelerant.com/wp-content/uploads/2015/08/d069f089-0aa2-46d8-8a51-4bd14287ce56_london2015-640x427.jpg alt=Piyush Poddar, presentation India's consumption to contributions, DrupalCamp 2015 width=640 height=427 //p pI took the opportunity of presenting a session on Consumption to Contribution - Lessons from India. The presentation was centered around India’s Drupal journey since 2010 and how organisations and individuals have evolved from being code consumers to being active contributors and participants in the Drupal project and the local community at large. I described how some of the biggest Drupal projects are being developed in part or full by Indian developers and companies. The session attracted some very interesting Qamp;A discussions. I had some very insightful conversations with CXOs, Business Leaders based in the UK and European regions who attended the CXO Day/p pAnother interesting session during the DrupalCamp London 2015 - CXO day was an unconference about strongthings which keeps CXOs up at night/strong. All participants organised themselves into small groups and focused on discussions around topics like Hiring, EU Drupal Association, Project Management, Sales amp; Marketing, etc. Afterward, one representative of each group present the findings or summary of the discussion to all the participants./p pCXO day ended with a reception on the campus followed by people heading towards emSlaughtered Lamb/em for food and wine./p h2DrupalCamp London Itself/h2 pThe main days of the DrupalCamp London were on Saturday and Sunday with a variety of knowledge sessions, workshops, exhibit corridor, etc./p pOn the first day, I was Interviewed by Janis Janovskis, friend and owner of Passive Management, London about the way we have built and been maintaining a distributed work culture at Axelerant. The interview was for an event called ema href=http://www.nopantsfest.beNo Pants/a/em that Janis was going to present at later. His a href=http://www.slideshare.net/pasive/how-to-set-up-a-great-remote-team-at-no-pants-festivalslides 35-37 mention specific takeaways/a of the interview./p pI felt honoured when Jeffrey McGuire approached me for recording an interview with me for his infamous Acquia Podcast as part of multi-series podcast titled ema href=https://www.acquia.com/resources/podcasts/acquia-podcast-194-karma-consumption-contribution-drupal-indiaKarma and the journey from Consumption to Contribution - Drupal in India/a/em./p pThere were quite a few Interesting talks that I attended during DrupalCamp London that I thoroughly enjoyed such as:/p ul liSaturday Keynote by Dr Sue Black. Sue is an award-winning computer scientist, radical thinker and passionate social entrepreneur who excels at bringing people together to solve complex issues. a href=http://techmums.co/about/#techmums/a/li liSunday Keynote by Robert Douglass, Director of Products, CommerceGuys./li liMike Bell's a href=https://speakerdeck.com/mikebell/mental-health-and-open-source-DrupalCamp-london-2015brave talk about his long battle/a with ME/CFS, culminating in a breakdown and use of the UK's mental health services./li liKubair Shirazi's  session on emBetter understanding your prospects, clients, stakeholders and end users/em/li /ul pimg class=alignnone size-large wp-image-1310250 src=https://axelerant.com/wp-content/uploads/2015/08/21505cc1-1abf-4bd5-9d2e-c40e72f4dc2f_IMG_20150301_161135605-640x361.jpg alt=CXO Day small group discussions width=640 height=361 //p pBoth days of DrupalCamp London ended with event socials at The emSlaughtered Lamb/em on Great Sutton Street. The place was buzzing with energy all this time and some very interesting conversations flowed along with a nice collection of beers./p h2A Wrap./h2 pOverall it was a great DrupalCamp London 2015! And, well worth round tripping over 10,000 kilometers from India to attend./p pMy special thanks go to sponsors BBC and City University London. Further applause to volunteers like Ben Wilding, Tim Deeson, George Hazlewood, Alex Burrows, Della Deme, John Kennedy, and all others for having worked so hard and to pull together such a brilliant event./p pIn having made some good friends, met old ones, and having interesting conversations along with insightful takeaways I am already looking forward to the 2016 DrupalCamp London./p pBe sure to comment below and share of your experience at this camp./p pThe post a rel=nofollow href=https://axelerant.com/drupalcamp-london-2015-inspiration-challenge-passion/DrupalCamp London 2015 - Inspiration, Challenge, and Passion/a first appeared on a rel=nofollow href=https://axelerant.comAxelerant/a./p
Categories: Drupal Feeds

Drupal Association News: Global Training Days - August 2015 Summary

Thu, 08/27/2015 - 12:15pm
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpGlobal Training Days last weekend was a great success. There were 33 hosts from 21 countries who stepped up to introduce new people to Drupal in both half and full day sessions./p piframe allowfullscreen= frameborder=0 height=280 mozallowfullscreen= src=https://player.vimeo.com/video/137243979 webkitallowfullscreen= width=500/iframe/p pa href=https://vimeo.com/137243979Drupal Global Training Day, Drupak, Peshawar Pakistan/a from a href=https://vimeo.com/user9678494Azmat Shah/a on a href=https://vimeo.comVimeo/a./p pThank you to the training companies, local groups, and site hosts who made the event possible. We were particularly excited to host a training at the Drupal Association office and we have to thank Gregory Boggs of ThinkShout for leading the full day training. Thanks to Gregory's good work, I started my week with a note from an attendee that said I learned a lot, all while having a wonderful time! It doesn't get much better than that./p pCheck out the photos and updates at a href=https://twitter.com/search?q=%23drupalgtd%20since%3A2015-08-01%20until%3A2015-08-26amp;src=typd#DrupalGTD/a on Twitter. See the full list on our a href=https://www.drupal.org/global-training-days/2015GTD 2015 page/a along with reports from the trainers as they come in./p pWe have one more GTD weekend this year: November 14th-15th. Join the 17 hosts who have already committed to train new Drupalers at a href=https://assoc.drupal.org/sign-participate-drupal-global-training-dayshttps://assoc.drupal.org/sign-participate-drupal-global-training-days/a. Give a training in your community to get everyone started off in the right direction with Drupal./p /div/div/divdiv class=field field-name-taxonomy-vocabulary-4 field-type-taxonomy-term-reference field-label-abovediv class=field-labelPersonal blog tags:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/taxonomy/term/593Drupal Global Training Day/a/div/div/div
Categories: Drupal Feeds

Drupal Watchdog: When Howard Met Ronnie

Thu, 08/27/2015 - 11:40am
div class=field field--body field-type-text-with-summary field-label-hidden field--rss pa href=//drupalwatchdog.com/sites/default/files/IMG_1170.JPGimg src=//drupalwatchdog.com/sites/default/files/IMG_1170.JPG alt=Photo by Myles Brawer width=50% align=right class=img-responsive img-thumbnail margin-right //a/p pAs it says on the t-shirt, I’M NOT HIM./p pOkay, I know I look a lot like Howard Stern. /p pAnd yes, I spent a pleasant hour chatting with him and Robin on his show that one time. (The video is somewhere on YouTube, but don’t ask.) /p pAnd yes, I auditioned for emAmerica’s Got Talent/em. (Three thumbs-up votes, one thumbs-down.) /p pAnd okay, yes, I’ve obligingly posed for thousands of selfies with Stern-fans./p pBut I’M NOT HIM! I’m emnot/em leading a double-life as emDrupal Watchdog/em editor and the King of All Media./p pYes, but what if...?/p pSo here’s a spoof Bob Williams and I made during DrupalCon Los Angeles. Yeah, I know, the audio on the elevator kinda sucks, but the emacting/em! /p pThe acting – and Ronnie Ray’s Drupal expertise./p p(emPhoto by Myles Brawer/em)/p /div div class=field field--images field-type-image field-label-above field--rss div class=field-labelImages:nbsp;/div img typeof=foaf:Image class=img-responsive src=https://drupalwatchdog.com/sites/default/files/IMG_1170.JPG width=1536 height=2048 alt=I#039;M NOT HIM / /div div class=field field--video field-type-video-embed-field field-label-above field--rss div class=field-labelVideo:nbsp;/div div class=embedded-video div class=player iframe width=640 height=360 src=//www.youtube.com/embed/Lv4eUxtZYkw?width=640amp;height=360amp;autoplay=0amp;vq=largeamp;rel=0amp;controls=1amp;autohide=2amp;showinfo=1amp;modestbranding=0amp;theme=darkamp;iv_load_policy=1amp;start=0amp;wmode=opaque frameborder=0 allowfullscreen/iframe /div /div /div
Categories: Drupal Feeds

Acquia Developer Center Blog: 10 Ways Drupal 8 Will Be More Secure

Thu, 08/27/2015 - 11:20am
div class=field field-name-field-blog-image field-type-image field-label-hiddendiv class=field-itemsdiv class=field-item evenimg typeof=foaf:Image src=https://dev.acquia.com/sites/default/files/blog/block-html-twig.png width=708 height=316 alt= //div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpSecurity is very hard to bolt on to any software or product after it has been built. Building it into the core of the code helps to avoid mistakes, and thus the upcoming release of Drupal 8 tries to build in more security by default, while still being usable for developers and site builders. This list of 10 security improvements is not exhaustive - some are just a line or two to handle an edge case, and there are others I may have overlooked. I've contributed to a number of these improvements, but they reflect overall the community consensus as well as reactions to problems that required security releases for Drupal core or contributed modules in the past. For each point I've tried to include a link or two, such as the Drupal core change record, a documentation page, or a presentation that provides more information. Some of these may also be possible to back-port to Drupal 7, to benefit you even sooner. A a href=#7.x back-port/a link indicates that./p pFor context on why these 10 improvements are important, I looked at past security advisories (SAs) as well as considering the kind of questions we get here at Acquia from companies considering adopting Drupal. In terms of past SAs, cross-site scripting (XSS) is the most commonly found vulnerability in Drupal core and contributed modules and themes./p !--break--olli h3Twig templates used for html generation/h3 pThis is probably first on the list of anyone you ask about Drupal 8 security. This is also one of the most popular features with themers.

/p pOne security gain from this is that it enforces much stricter separation of business logic and presentation – this makes it easier to validate 3rd party themes or delegate pure presentation work. You can't run SQL queries or access the Drupal API from Twig. 


/p p

In addition, Drupal 8 enables Twig auto-escaping, which means that any string that has not specifically flagged as safe will be escaped using the PHP function htmlspecialchars() (e.g. the same as Drupal 7 check_plain()). Auto-escaping of variables will prevent many XSS vulnerabilities that are accidentally introduced in custom site themes and custom and contributed modules. That fact is why I ranked this as number one. XSS is the most frequent security vulnerability found in Drupal code. We don't have a lot of hard data, but based on past site audits we generally assume that 90% of site-specific vulnerabilities are in the custom theme.
/p pTo see why themers love Twig, compare the Drupal 7 block.tpl.php code to the Drupal 8 Twig version./p pstrongDrupal 7 block.tpl.php:/strong/p pimg alt=Drupal 7 block.tpl.php height=191px src=/sites/default/files/block-tpl-php.png title=Drupal 7 block.tpl.php //p pstrongDrupal 8 block.html.twig:/strong/p pimg alt=Drupal 8 block.html.twig height=158px src=/sites/default/files/block-html-twig.png title=Drupal 8 block.html.twig //p ullia href=https://www.drupal.org/theme-guide/8/twigHandbook page/a/li lia href=https://www.drupal.org/node/2296163Change record/a/li lia href=http://szeged2008.drupalcon.org/files/Hack-proof%20Your%20Drupal%20App.pdfSite audit presentation/a/li lia href=https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet
Background reading on XSS/a/li /ul/li li h3Removed PHP input filter and the use of PHP as a configuration import format/h3 pOK, maybe this should have been number one. Drupal 8 does not include the PHP input format in core. In addition to encouraging best practices (managing code in a revision control system like git), this means that Drupal no longer makes it trivial to escalate an administrator login to being able to execute arbitrary PHP code or shell commands on the server. 
/p pFor Drupal 7, importing something like a View required importing executable PHP code, and for certain custom block visibility settings, etc. you would need to enter a PHP snippet. These uses of evaluated PHP (exposing possible code execution vulnerabilities) are all gone – see the next point about configuration management.
/p pNow that we have covered the top two, the rest of the 10 are in rather arbitrary order./p ullia href=https://www.drupal.org/node/2088811Change record/a/li /ul/li li h3Site configuration exportable, manageable as code, and versionable/h3 pThe Configuration Management Initiative (CMI) transformed how Drupal 8 manages things that would have been represented in Drupal 7 as PHP code. Things like Drupal variables or ctools exportables (e.g. exported Views).

/p pCMI uses YAML as the export and import format and the YAML files can be managed together with your code and checked into a revision control system (like git). 
/p pWhy is this a security enhancement? Well, in addition to removing the use of PHP code as an import format (and hence possible code execution vulnerability), tracking configuration in code makes it much easier to have an auditable history of configuration changes. This will make Drupal more appealing and suitable for enterprises that need strict controls on configuration changes in place. In addition, configuration can be fully tested in development and then exactly replicated to production at the same time as any corresponding code changes (avoiding mistakes during manual configuration).
 Finally, it is possible to completely block configuration changes in production to force deployment of changes as code.
/p ullia href=https://www.drupal.org/documentation/administer/configHandbook page on CMI/a/li /ul/li li h3User content entry and filtering improved/h3 pWhile the integration of a WYSIWYG editor with Drupal core is a big usability improvement, extra care was taken that to mitigate poor practices that adding a WYSIWYG editor encouraged in past Drupal versions. In particular, users with access to the editor were often granted access to the full html text format, which effectively allowed them to execute XSS attacks on any other site user.

/p pTo encourage the best practice of only allowing the use of the filtered HTML format, the Drupal 8 WYSIWYG editor configuration is integrated with the corresponding text filter. When a button is added to the active configuration, the corresponding HTML tag is added to the allowed list for the text filter.
/p pstrongDrag a new button from the available to enabled section in the editor configuration:/strong/p pimg alt=WYSIWYG editor configuration adding underline button height=250px src=/sites/default/files/editor-config.png //p pstrongThe corresponding HTML tag (the U tag) is added to the allowed list:/strong/p pimg alt=U tag is allowed in the filter height=181px src=/sites/default/files/allowd-tags.png //p pAn additional security improvement is that the core text filtering supports limiting users to using only images local to the site which helps prevent cross-site request forgery (CSRF) and other attacks or abuses using images./p /li li h3Hardened user session and session ID handling/h3 pThere are three distinct improvements to session and session cookie handling./p pFirst, the security of session IDs has been greatly improved against exposure via database backups or SQL injection (a href=https://www.drupal.org/node/21640257.x back-port /a). Previously in Drupal, the session ID is stored and checked directly against the incoming session cookie from the browser. The risk from this is that the value from the database can be used to populate the cookie in the browser and thus assume the session and identity of any user who has a valid session in the database. In Drupal 8, the ID is hashed before storage, which prevents the database value from being used to assume a user's session, but the incoming value from the value is simply hashed in order to verify the value.
/p pNext, mixed-mode SSL session support was added to core to support sites that, for example, used contributed modules to serve the login page over SSL while other pages unencrypted. You will have to replace the session handling service if you really need this. This encourages serving your entire site over SSL (which is also a search engine ranking boost).

/p pThe final change is that the leading “www.” is no longer stripped from the session cookie domain since that causes the session cookie to be sent to all subdomains (a href=https://www.drupal.org/node/25220027.x back-port/a)/p ullia href=https://www.drupal.org/node/2523826Change record on leading www/a/li lia href=https://www.drupal.org/node/2384903Change record on mixed mode/a/li lia href=https://www.owasp.org/index.php/Session_Management_Cheat_SheetBackground reading on session handling/a/li /ul/li li h3Automated CSRF token protection in route definitions/h3 pLinks (GET requests) that cause some destructive action or configuration change need to be protected from CSRF, usually with a user-specific token in the query string that is checked before carrying out the action./p p

This change improves the developer experience and security by automating a process frequently forgotten or done incorrectly in contributed modules. In addition, centralizing the code makes it easier to audit and provide test coverage./p pDrupal 8 makes it easy. A developer merely needs to specify that a route (a system path in Drupal 7 terms) require a CSRF token. Here is an example of the YAML route definition for a protected link in Drupal 8 entity./p pre entity.shortcut.link_delete_inline: path: '/admin/config/user-interface/shortcut/link/{shortcut}/delete-inline' defaults: _controller: 'Drupal\shortcut\Controller\ShortcutController::deleteShortcutLinkInline' requirements: _entity_access: 'shortcut.delete' _csrf_token: 'TRUE' /prep Only the one line in the strongrequirements:/strong section needs to be added to protect shortcut deletion from CSRF./p pstrongShortcut inline delete link and corresponding URL with a token in the query string:/strong/p p img alt=Drupal page showing shortcut height=209px src=/sites/default/files/shortcut-delete-token.png title=Shortcut inline delete link and corresponding URL with a token in the query string //p/li li h3Trusted host patterns enforced for requests/h3 pMany Drupal sites will respond to a page request using an arbitrary host header sent to the correct IP address. This can lead to cache poisoning, bogus site emails, bogus password recovery links, and other problems with security implications./p pFor earlier versions of Drupal, it can be a challenge to correctly configure the webserver for a single site that uses sites/default as its site directory to prevent these host header spoofing attacks. Drupal 8 ships with a simple facility to configure expected host patterns in settings.php and warns you in the site status report if it's not configured./p ullia href=https://www.drupal.org/node/1992030Handbook page on host header spoofing/a/li lia href=https://www.drupal.org/node/2221699Change record/a/li /ul/li li h3PDO MySQL limited to executing single statements/h3 pIf available, Drupal 8 will set a flag that limits PHP to sending only a single SQL statement at a time when using MySQL. This change would have reduced the severity of SA-CORE-2014-005 (a SQL injection vulnerability that was easily exploited by anonymous users) (a href=https://www.drupal.org/node/23882557.x back-port/a)
. Getting this change into Drupal 8 meant I first had to contribute a small upstream change to the PHP language itself, and to the PDO MySQL library that is available in PHP versions 5.5.21 or 5.6.5 and greater./p pThere is also a a href=https://www.drupal.org/node/2489672patch in progress/a to try to enforce this protection regardless of which specific database driver is being used./p /li li h3Clickjacking protection enabled by default/h3 pA small change, but Drupal 8 sends the strongX-Frame-Options: SAMEORIGIN/strong header in all responses by default. This header is respected by most browsers and prevents the site from being served inside an iframe on another domain. This blocks so-called click-jacking attacks (e.g. forms or links on the site being presented in a disguised fashion on an attacker's site inside an iframe), as well as blocking the unauthorized re-use of site content via iframes. (a href=https://www.drupal.org/node/25141367.x back-port/a)./p ullia href=https://www.drupal.org/node/2514152Change record/a/li lia href=https://www.owasp.org/index.php/ClickjackingBackground reading on clickjacking/a/li /ul/li li h3Core JavaScript API Compatible with CSP/h3 pSupport for inline JavaScript was removed from the #attached property in the Drupal render API. In addition, the Drupal javascript settings variables are now added to the page as JSON data and loaded into a variable instead of being rendered as inline JavaScript. This was the last use of inline JavaScript by Drupal 8 core, and means that site builders can much more easily enable a strict content security policy (CSP) – a new web standard for communicating per-site restrictions to browsers and mitigating XSS and other vulnerabilities./p ullia href=https://www.owasp.org/index.php/Content_Security_PolicyBackground reading on CSP/a/li lia href=http://www.w3.org/TR/CSP/CSP W3C Standard/a/li /ul/li /olpA final note of caution: The substantial code reorganization and refactoring in Drupal 8 as well as the dependence on third party PHP components does present a certain added risk. The code reorganization may have introduced bugs that were missed by the existing core tests. The third party components themselves may have security vulnerabilities that affect Drupal, and at the very least, we need to track and stay up to date with them and fix our integration for any corresponding API changes. In order to try to mitigate the risk, the Drupal Association has been conducting the first a href=https://www.drupal.org/drupal8-security-bountyDrupal security bug bounty/a that has been run for any version of Drupal core. This has uncovered several security bugs and means they will be fixed before Drupal 8 is released./p pI am excited that we've added more “security by default” to Drupal 8, and I hope you a href=https://www.drupal.org/drupal-8.0download and try it out/a so you are ready to start using it for new projects as soon as it's released./p /div/div/divdiv class=field field-name-field-blog-type field-type-taxonomy-term-reference field-label-abovediv class=field-labelBlog series:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/blog-series/drupal-8 typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal 8/a/div/div/divdiv class=field field-name-field-blog-workflow field-type-workflow field-label-abovediv class=field-labelWorkflow:nbsp;/divdiv class=field-itemsdiv class=field-item evenPublished/div/div/divdiv class=field field-name-field-blog-featured field-type-list-boolean field-label-abovediv class=field-labelFeatured:nbsp;/divdiv class=field-itemsdiv class=field-item evenNo/div/div/divdiv class=field field-name-field-blog-tags field-type-taxonomy-term-reference field-label-abovediv class=field-labelTags:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/tags/acquia-drupal-planet typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=acquia drupal planet/a/divdiv class=field-item odda href=/tags/security typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Security/a/div/div/divdiv class=field field-name-field-blog-drupal-8-related field-type-list-boolean field-label-abovediv class=field-labelDrupal 8 related:nbsp;/divdiv class=field-itemsdiv class=field-item evenYes/div/div/divdiv class=field field-name-field-author field-type-entityreference field-label-abovediv class=field-labelAuthor:nbsp;/divdiv class=field-itemsdiv class=field-item evenPeter Wolanin/div/div/div
Categories: Drupal Feeds

Palantir: The True Value of Certification

Thu, 08/27/2015 - 11:15am
span class=featured-blog-image img typeof=foaf:Image src=https://www.palantir.net/sites/default/files/styles/bloglandingpage-thumbnail/public/blog/images/Certification.png?itok=VgE-IE3e width=262 height=175 alt=Certification blog post image title=Certification blog post image / /span pDrupal project lead and Acquia co-founder Dries Buytaert recently blogged about the a href=http://buytaert.net/one-year-later-the-acquia-certification-programone-year anniversary/a of a href=https://www.acquia.com/customer-success/learning-services/acquia-certification-program-overviewAcquia’s certification program/a, which seeks to validate skills and knowledge that focus on open source Web development and Acquia products and services./p pThe topic of certification has long been a controversial one within the Drupal community. As an open source project that primarily measures achievement by one's contributions, a href=http://kattekrab.net/certification-necessary-evilsome have questioned/a the need for developers with an established track record in the community to prove themselves through certification. Others are skeptical that the quality or skills of a developer can be judged by the results of a sixty-question multiple choice test. /p pThose arguments, while completely valid, miss the larger point. /p pOver the last few years, Drupal has become one of the leading content management platforms for high-traffic sites, powering a href=http://trends.builtwith.com/cmsnearly 15%/a of the top ten thousand CMS-backed sites on the Web. Large companies and organizations are increasingly evaluating Drupal against commercial and proprietary options like Adobe Experience Manager and SiteCore. /p pAnd for those enterprise evaluators, as well as influential research analysts like Forrester and Gartner, the presence of a robust commercial ecosystem surrounding a software platform is a strong indicator of its strength. One of the ways that those ecosystems are evaluated is by the presence of well-regarded and widely adopted certification programs, like the one that Acquia is working to build./p pThose of us who have been involved with the Drupal project and community for years understand that the strength of open source software has less to do with its commercial ecosystem than it does with the level of engagement of its contributor community. We know this because we work with and alongside those contributors every single day. But that’s not the experience that most of our customers have; their perspective is more likely to be informed by the companies with whom they work./p pAnd because Drupal is now increasingly competing against large commercial entities instead of other open source projects, those companies can no longer rely solely on their community experience and contributions to make the case for an open source solution. That experience can and should be an important factor in the evaluation process, but all too often other qualifications are necessary./p pThe value that open source software brings to the table isn't always apparent to those used to proprietary solutions. Acquia's certification program aims to surface that value by leveling the playing field and offering evaluators more of an apples-to-apples comparison. From that perspective, certification is less about the knowledge and skills of individual developers than it is about the investment made by companies into competing for large projects against other enterprise vendors. /p pAcquia's Certified Developer exam tests developers’ base level of familiarity with Drupal’s features and functionality, but in our experience that has little to do with their skills as developers, which is something that no multiple choice test can measure. Developers get better by working alongside other talented developers in an environment that promotes professional growth and development, which is what we try to build every day at Palantir. We demonstrate those skills to prospective customers both through our past experience and by demonstrating the approaches we take to solving our customers’ problems. /p pWe don't need our developers to pass certification exams to know that they're awesome, and no matter how good a certification program might be, it’s still incumbent on evaluators to do their due diligence when picking who they want to work on their next project. /p pSo if all that’s true, why have certified developers at all? The answer is going to be different for different people, but for us, it’s about making sure that customers understand that Palantir is willing and able to tackle large projects that might otherwise go to proprietary vendors by default. Some prospective customers have existing relationships with Acquia, and in addition to being an Acquia partner, having Acquia Certified developers on our team provides them with the justification they need to know that we're familiar with the products and services that they offer. /p pAt the end of the day, the rise of certification programs like the one offered by Acquia are yet another example of Drupal’s growth as a project and as a community. Very few open source projects are strong enough to compete against proprietary enterprise solutions, but Drupal does it every day, delivering value to customers of all sizes and shapes. We're proud to be a part of it. /p pemI’ll be talking more about Drupal certification and related topics next month in my DrupalCon Barcelona session, a href=https://events.drupal.org/barcelona2015/sessions/architecting-drupal-businesses-are-built-lastArchitecting Drupal Business that are Built to Last/a. I’ve also proposed a session titled a href=http://panelpicker.sxsw.com/vote/55392Building Tech Companies That Last/a for next year’s South by Southwest Interactive; voting is open through September 4.br //em/p
Categories: Drupal Feeds

Palantir: D8FTW: Customizing your back-end

Thu, 08/27/2015 - 11:00am
span class=featured-blog-image img typeof=foaf:Image src=https://www.palantir.net/sites/default/files/styles/bloglandingpage-thumbnail/public/blog/images/Storing-Data-pt2.png?itok=9T40QR4L width=262 height=175 alt=D8FTW: Customizing your back-end blog post image title=D8FTW: Customizing your back-end blog post image / /span pIn our last episode, we talked about the various ways of storing data in Drupal 8. One important point we noted was that in the database is not an option. All of Drupal's storage systems are abstractions above the actual data store. In fact, I will go as far as saying that if you ever write an SQL query yourself in Drupal 8, you're probably doing it wrong./p pThere are two key reasons for that stance. One, there's no reason that any of those storage systems, conceptually, need to be in SQL. In fact, for Configuration, Key/Value, and the Cache, it's not even the best tool available. Any of them could be backed by MongoDB, Cassandra or Redis, instead. In fact, many sites will use one of those tools instead of SQL for some (but not all) data storage systems. If your module is hard-coded to SQL, you've now hard-coded all of your users to SQL only. And there's a good chance you've also hard-coded a specific SQL server (generally MySQL) without even intending to./p pThe second reason is that as a module developer, you should be thinking at a higher level than rows and columns. Most of those systems offer a lot of automation and abstraction tools that provide more power with an easier syntax than SQL, and if you write your own SQL you are bypassing all of that. Most especially, if you have any module configuration not stored in the Configuration system it will not work with any staging and deployment tools. Don't do that to your users./p pIf for some reason you must write a custom query, say for performance, there is a supported, flexible way to do so. First, ensure that your query is contained within a service, and that service conforms to a declared interface. (You should be doing that anyway, but it's especially important here.) For example, let's say we're creating a service that finds nodes by some highly complex logic that normal Entity Queries don't support. We'll call the class codeDatabaseComplexNodeFinder/code, with a codeComplexNodeFinderInterface/code. When we register that service in the container, we should also tag it as one that allows its backend to be overridden, like so:/p pmymodule.services.yml:/p prediv class=codeblockcodeservices:br / mymodule.nodefinder:br /  class: Drupal\mymodule\DatabaseComplexNodeFinderbr /  arguments: ['@database']br /  tags:br /   - { name: backend_overridable }/code/div/prep And then we use that service wherever we need to use that logic. The backend_overridable tag tells Drupal that there may be alternate implementations it should look for. By default, the class should be written to use generic, non-engine-specific SQL. (That is, no MySQL or PostgreSQL specific features.) It doesn't have to be fast, just work./p pNow comes the fun part. We can also define another service named codemysql.mymodule.nodefinder/code, which has the same interface but is very specific to MySQL. Similarly, we can have a service named codepgsql.mymodule.nodefinder/code or codemongodb.mymodule.nodefinder/code, which would be specific to PostgreSQL or MongoDB, respectively. Just registering those services in the container has virtually no cost if they're not used. Those alternate services can have whatever code in them they want, and any set of dependencies they want, as long as they follow codeComplexNodeFinderInterface/code./p pNow, in the codesites/default/services.yml/code file, a site owner can specify an alternate default backend:/p prediv class=codeblockcodeparameters:br / default_backend: mysql/code/divp re= The default is mysql, which means that if Drupal finds a mysql version of any backend_overridable service, it will use that instead of the generic one. If it doesn't, it just uses whatever is registered by default. (Often times an SQL-database-specific version will be unnecessary, but the capability is there if you need it.) If your site is running on PostgreSQL, change that default_backend to pgsql. If on MongoDB, set it to mongodb. And so on. What if we want to use something other than the default? For instance, we're on a mostly-MySQL-based site but we want to use MongoDB for the State system? That's another simple toggle in the services.yml file. To change the backend for our nodefinder service, we would simply add this to the site-specific services.yml file: /pprediv class=codeblockcodeservices:br / mymodule.nodefinder:br /  alias: mongodb.mymodule.nodefinder/code/div/prepThat tells the container to use the MongoDB-specific version of that service instead of whatever it was going to use.br / There are two big advantages of this design:br / 1) As a module developer, you can optimize your module for MySQL, PostgreSQL, or MongoDB emat the same time/em. Even if you don't, any other module is free to provide an alternate backend by just registering a service with the correct name.br / 2) As a site owner, you can mix and match what backend services you want to use. Want a mostly-MySQL-based site, but with Redis for the lock and caching systems? Go for it. Want to store your entities in SQL but everything else in MongoDB? You can do that. Any well-written module will keep on working just fine, because it's either using Drupal's higher-level abstractions or using swappable backends. And if the backend you're looking for isn't available for that service, there's only one class that needs to be written to make it available.br / That's the power of dependency injection./p /pre
Categories: Drupal Feeds